@code-collective/booking-widget 1.0.16 → 1.0.17
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/CHANGELOG.md +86 -75
- package/README.md +508 -506
- package/dist/booking-widget.js +153 -136
- package/dist/booking-widget.min.js +5 -5
- package/dist/booking-widget.umd.cjs +1 -1
- package/package.json +1 -1
- package/src/lib/CheckoutModal.svelte +4 -1
- package/src/lib/CheckoutPanel.svelte +22 -1
- package/src/lib/PaymentPage.svelte +13 -3
- package/src/lib/checkout-payment-flow.svelte.ts +51 -11
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
\r
|
|
26
26
|
/* ── Confirm dialog ────────────────────── */.dialog-backdrop.svelte-9w5z1v {position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.35);display:flex;align-items:center;justify-content:center;z-index:100;}.dialog.svelte-9w5z1v {background:white;border-radius:var(--bw-radius-lg);padding:24px;width:90%;max-width:360px;box-shadow:var(--bw-shadow-3);}.dialog-title.svelte-9w5z1v {font-size:17px;font-weight:700;margin-bottom:8px;}.dialog-body.svelte-9w5z1v {font-size:14px;color:var(--bw-color-text-secondary);margin-bottom:24px;}.dialog-actions.svelte-9w5z1v {display:flex;justify-content:flex-end;gap:8px;}.dialog-btn-text.svelte-9w5z1v {background:none;border:none;color:var(--bw-color-primary);font-size:14px;font-weight:600;padding:10px 16px;border-radius:var(--bw-radius-md);}.dialog-btn-text.svelte-9w5z1v:hover {background:var(--bw-color-primary-light);}.dialog-btn-fill.svelte-9w5z1v {background:var(--bw-color-primary);color:white;border:none;font-size:14px;font-weight:600;padding:10px 20px;border-radius:var(--bw-radius-md);}.dialog-btn-fill.svelte-9w5z1v:hover {background:var(--bw-color-primary-dark);}`};function $o(e,t){M(t,!0),Yr(e,Qo);let n=Z(t,`product`,7),r=Z(t,`api`,7),i=Z(t,`wizardPages`,7),a=Z(t,`editPages`,23,i),o=Z(t,`editItem`,7),s=Z(t,`autoSelectSingleTimeSlot`,7,!1),c=Z(t,`onComplete`,7),l=Z(t,`onCancel`,7),u=ko(),d=P(()=>o()!=null),f=P(()=>o()&&!G(oe)()?o().optionId:void 0),p=L(0),m=L(null),h=L(Qt({})),g=L(null),_=L(null),v=L(null),y=L(null),b=L(Qt({})),x=L(Qt([])),S=L(!1),C=L(!1),w=L(!1),T=L(!1),E=L(0),ee=L(Qt(new Set));function te(...e){R(ee,new Set([...G(ee),...e]),!0)}function D(...e){e.every(e=>!G(ee).has(e))||R(ee,new Set([...G(ee)].filter(t=>!e.includes(t))),!0)}let ne=P(()=>Object.values(G(h)).some(e=>e>0)),re=P(()=>G(x).length===1&&G(x)[0].allDay),ie=P(()=>G(x).length===1),ae=P(()=>!G(C)&&G(x).length===0),O=P(()=>G(re)||s()&&G(ie)),oe=P(()=>()=>{let e=i().findIndex(e=>e.widgets.includes(`age-category`)),t=i().findIndex(e=>e.widgets.includes(`option`));return e>=0&&(t<0||e<t)}),se=P(()=>()=>G(m)?G(m).units:G(oe)()?n().options[0]?.units??[]:[]),ce=P(()=>()=>G(m)?G(m).id:G(oe)()?n().options[0]?.id??null:null);Lr(()=>{o()&&le(o())});function le(e){let t=n().options.find(t=>t.id===e.optionId);t&&R(m,t,!0);let r={};for(let t of e.unitItems)r[t.unitId]=(r[t.unitId]??0)+1;R(h,r,!0),G(ne)&&ue(e.availabilityId,e.pickupPointId)}async function ue(e,t){if(await De(),!e)return;let i=Pi(e);if(!i)return;let a=G(ce)();if(!a)return;let o=i.split(`-`).map(Number);R(g,new Date(o[0],o[1]-1,o[2]),!0),R(C,!0);let s=await r().getAvailability(n().id,a,i);R(x,s,!0),R(C,!1);let c=s.find(t=>t.id===e);c&&(R(v,c,!0),c.allDay||R(_,Ni(c.localDateTimeStart),!0),t&&G(m)?.pickupAvailable&&R(y,G(m).pickupLocations?.find(e=>e.id===t)??null,!0))}function de(e){return G(oe)()?pe(e):fe(e)}function fe(e){switch(e){case`option`:return!G(f);case`age-category`:return G(m)!=null;case`date`:return G(ne);case`time`:return G(g)!=null&&!G(O)&&!G(ae);case`pickup`:return G(v)!=null&&G(m)?.pickupAvailable===!0;case`addon`:return!1}}function pe(e){switch(e){case`age-category`:return G(se)().length>0;case`date`:return G(ne);case`time`:return G(g)!=null&&!G(O)&&!G(ae);case`option`:return!G(f)&&(G(v)!=null||G(g)!=null&&G(O));case`pickup`:return G(m)!=null&&G(m).pickupAvailable===!0&&G(v)!=null;case`addon`:return!1}}let me=P(()=>()=>{let e=[];for(let t=0;t<i().length;t++){let n=i()[t].widgets.filter(de);n.length>0&&e.push({index:t,title:i()[t].title,widgets:n})}return e}),he=P(()=>()=>{let e=[];for(let t of a())for(let n of t.widgets)de(n)&&!e.includes(n)&&e.push(n);return e}),ge=P(()=>()=>{let e=G(me)();return G(p)>=e.length?e[e.length-1]??null:e[G(p)]??null}),_e=P(()=>()=>G(p)>=G(me)().length-1),ve=P(()=>()=>G(ge)()?.title??``);function ye(e){switch(e){case`option`:return G(m)?.title??`Not selected`;case`age-category`:{let e=[];for(let t of G(se)()){let n=G(h)[t.id]??0;n>0&&e.push(`${n} ${t.title}`)}return e.length>0?e.join(`, `):`Not selected`}case`date`:return G(g)?G(g).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`Not selected`;case`time`:return G(_)??(G(O)?`All day`:`Not selected`);case`pickup`:return G(y)?.title??G(y)?.id??`Not selected`;default:return``}}function be(e){return e.map(ye).filter(e=>e&&e!==`Not selected`).join(` · `)||`Not selected`}let xe=P(()=>()=>{let e=[];for(let t of a()){let n=t.widgets.filter(de);n.length>0&&e.push({title:t.title,widgets:n})}return e}),Se=P(()=>()=>{if(G(g)!=null&&G(ae))return!1;let e=G(d)?G(he)():G(ge)()?.widgets??[];if(e.length===0)return!1;for(let t of e)switch(t){case`option`:if(!G(m))return!1;break;case`age-category`:if(!G(ne))return!1;break;case`date`:if(!G(g))return!1;break;case`time`:if(!G(_)&&!G(O))return!1;break;case`pickup`:if(G(m)?.pickupRequired&&!G(y))return!1}return!0});function Ce(e){if(G(oe)()){R(m,e,!0),G(y)&&!e.pickupLocations?.some(e=>e.id===G(y).id)&&(R(y,null),te(`pickup`)),R(w,!0);return}R(m,e,!0),R(h,Object.fromEntries(e.units.map(e=>[e.id,0])),!0),R(g,null),R(_,null),R(v,null),R(y,null),R(b,{},!0),R(x,[],!0),R(w,!0)}function we(e,t){R(h,{...G(h),[e]:t},!0),R(w,!0),G(ne)&&Object.keys(G(b)).length===0&&De(),Te()}function Te(){!G(v)||G(v).vacancies==null||Object.values(G(h)).reduce((e,t)=>e+t,0)<=G(v).vacancies||(R(g,null),R(_,null),R(v,null),R(x,[],!0),te(`date`,`time`))}function Ee(e){if(!G(v)||G(v).vacancies==null)return;let t=Object.values(G(h)).reduce((e,t)=>e+t,0),n=G(h)[e]??0;return G(v).vacancies-t+n}async function De(){let e=G(ce)();e&&(R(S,!0),R(b,await r().getAvailabilityCalendar(n().id,e),!0),R(S,!1))}async function Oe(e){let t=G(ce)();if(!t)return;R(g,e,!0),R(_,null),R(v,null),R(x,[],!0),R(w,!0),R(C,!0),D(`date`,`time`);let i=await r().getAvailability(n().id,t,Mi(e));R(x,i,!0),R(C,!1),i.length===1&&(i[0].allDay||s())&&(R(v,i[0],!0),i[0].allDay||R(_,Ni(i[0].localDateTimeStart),!0))}function ke(e){let t=G(x).find(t=>Ni(t.localDateTimeStart)===e&&t.available);t&&(R(_,e,!0),R(v,t,!0),R(w,!0),D(`time`))}function k(e){R(y,e,!0),R(w,!0),D(`pickup`)}function Ae(){G(_e)()?Ne():Yt(p)}function A(){G(p)>0?Yt(p,-1):l()?je():!G(f)&&G(m)&&(R(m,null),R(h,{},!0),R(g,null),R(_,null),R(v,null),R(y,null),R(b,{},!0),R(x,[],!0))}function je(){if(G(w)){R(T,!0);return}l()?.()}function Me(){R(T,!1),l()?.()}function Ne(){if(!G(v)||!G(m))return;let e=[];for(let t of G(v).unitPricing??[]){let n=G(h)[t.unitId]??0;if(n<=0)continue;let r=G(se)().find(e=>e.id===t.unitId);e.push({unitId:t.unitId,quantity:n,title:r?.title??t.unitId,pricePerUnit:t.retail})}let t=0;for(let n of e)t+=n.pricePerUnit*n.quantity;let r=G(v).unitPricing?.[0],i=r?.currency??n().defaultCurrency??`ZAR`,a=r?.currencyPrecision??2;c()({productId:n().id,optionId:G(m).id,optionTitle:G(m).title,availabilityId:G(v).id,localDate:G(g)?Mi(G(g)):void 0,pickupPointId:G(y)?.id,units:e,totalPrice:t,currency:i,currencyPrecision:a})}var Pe={get product(){return n()},set product(e){n(e),I()},get api(){return r()},set api(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e){i(e),I()},get editPages(){return a()},set editPages(e=i){a(e),I()},get editItem(){return o()},set editItem(e){o(e),I()},get autoSelectSingleTimeSlot(){return s()},set autoSelectSingleTimeSlot(e=!1){s(e),I()},get onComplete(){return c()},set onComplete(e){c(e),I()},get onCancel(){return l()},set onCancel(e){l(e),I()}},Fe=Zo(),Ie=B(Fe);let Le;var Re=z(Ie),ze=e=>{J(e,jo())};X(Re,e=>{!G(d)&&u.isInline&&e(ze)});var Be=V(Re,2),Ve=e=>{var t=Bo(),r=B(t);Ur(r,21,()=>G(xe)(),zr,(e,t,r)=>{let i=P(()=>G(t).widgets.some(e=>G(ee).has(e)));var a=zo();let o;var s=z(a),c=z(s),l=z(c),u=z(l,!0);j(l);var d=V(l,2),p=e=>{var n=Mo();let r;var a=z(n,!0);j(n),H(e=>{r=$r(n,1,`accordion-summary svelte-9w5z1v`,null,r,{invalidated:G(i)}),Y(a,e)},[()=>G(i)?`Changes made require new configuration`:be(G(t).widgets)]),J(e,n)};X(d,e=>{G(E)!==r&&e(p)}),j(c);var v=V(c,2);let w;j(s);var T=V(s,2),te=e=>{var r=Ro();Ur(r,21,()=>G(t).widgets,zr,(e,t)=>{var r=Lo(),i=B(r),a=e=>{var t=No(),r=z(t);Ur(r,21,()=>n().options,zr,(e,t)=>{{let n=P(()=>G(m)?.id===G(t).id);ao(e,{get option(){return G(t)},get selected(){return G(n)},onSelect:()=>Ce(G(t))})}}),j(r),j(t),J(e,t)};X(i,e=>{G(t)===`option`&&!G(f)&&e(a)});var o=V(i,2),s=e=>{var t=Po(),n=z(t);Ur(n,21,()=>G(se)(),zr,(e,t)=>{{let n=P(()=>G(h)[G(t).id]??0),r=P(()=>Ee(G(t).id));uo(e,{get unit(){return G(t)},get quantity(){return G(n)},get max(){return G(r)},onChange:e=>we(G(t).id,e)})}}),j(n),j(t),J(e,t)},c=P(()=>G(t)===`age-category`&&G(se)().length>0);X(o,e=>{G(c)&&e(s)});var l=V(o,2),u=e=>{var t=Fo();bo(z(t),{get availabilityByDate(){return G(b)},get selectedDate(){return G(g)},onDateSelected:Oe,get loading(){return G(S)}}),j(t),J(e,t)};X(l,e=>{G(t)===`date`&&G(ne)&&e(u)});var d=V(l,2),p=e=>{var t=Fo();To(z(t),{get timeSlots(){return G(x)},get selectedTime(){return G(_)},get loading(){return G(C)},onTimeSelected:ke}),j(t),J(e,t)};X(d,e=>{G(t)===`time`&&G(g)&&!G(O)&&e(p)});var v=V(d,2),w=e=>{var t=Io(),n=z(t);Ur(n,21,()=>G(m).pickupLocations,zr,(e,t)=>{{let n=P(()=>G(y)?.id===G(t).id),r=P(()=>G(t).title??G(t).id);no(e,{get selected(){return G(n)},onSelect:()=>k(G(t)),get heading(){return G(r)},get body(){return G(t).address}})}}),j(n),j(t),J(e,t)};X(v,e=>{G(t)===`pickup`&&G(m)?.pickupAvailable&&G(m).pickupLocations&&e(w)}),J(e,r)}),j(r),J(e,r)};X(T,e=>{G(E)===r&&e(te)}),j(a),H(e=>{o=$r(a,1,`accordion-section svelte-9w5z1v`,null,o,{expanded:G(E)===r,invalidated:G(i)}),Y(u,e),w=$r(v,1,`accordion-chevron svelte-9w5z1v`,null,w,{open:G(E)===r})},[()=>G(t).title.toUpperCase()]),K(`click`,s,()=>{R(E,G(E)===r?-1:r,!0)}),J(e,a)}),j(r);var i=V(r,2),a=z(i),o=V(a,2);j(i),H(e=>o.disabled=e,[()=>!G(Se)()]),K(`click`,a,je),K(`click`,o,Ne),J(e,t)},He=e=>{var t=Yo(),r=B(t),i=z(r),a=e=>{J(e,Vo())};X(i,e=>{u.isInline||e(a)});var o=V(i,2),s=z(o,!0);j(o),Ur(V(o,2),17,()=>G(ge)()?.widgets??[],zr,(e,t)=>{var r=Lo(),i=B(r),a=e=>{var r=Ho(),i=z(r),a=z(i,!0);j(i);var o=V(i,2);Ur(o,21,()=>n().options,zr,(e,t)=>{{let n=P(()=>G(m)?.id===G(t).id);ao(e,{get option(){return G(t)},get selected(){return G(n)},onSelect:()=>Ce(G(t))})}}),j(o),j(r),H(()=>Y(a,Ao[G(t)])),J(e,r)};X(i,e=>{G(t)===`option`&&!G(f)&&e(a)});var o=V(i,2),s=e=>{var n=Uo(),r=z(n),i=z(r,!0);j(r);var a=V(r,2);let o;Ur(a,21,()=>G(se)(),zr,(e,t)=>{{let n=P(()=>G(h)[G(t).id]??0),r=P(()=>Ee(G(t).id));uo(e,{get unit(){return G(t)},boxed:!1,get divided(){return u.isInline},get quantity(){return G(n)},get max(){return G(r)},onChange:e=>we(G(t).id,e)})}}),j(a),j(n),H(()=>{Y(i,Ao[G(t)]),o=$r(a,1,`unit-list svelte-9w5z1v`,null,o,{divided:u.isInline})}),J(e,n)},c=P(()=>G(t)===`age-category`&&G(se)().length>0);X(o,e=>{G(c)&&e(s)});var l=V(o,2),d=e=>{var n=Wo(),r=z(n),i=z(r,!0);j(r),bo(V(r,2),{get availabilityByDate(){return G(b)},get selectedDate(){return G(g)},onDateSelected:Oe,get loading(){return G(S)}}),j(n),H(()=>Y(i,Ao[G(t)])),J(e,n)};X(l,e=>{G(t)===`date`&&G(ne)&&e(d)});var p=V(l,2),v=e=>{var n=Wo(),r=z(n),i=z(r,!0);j(r),To(V(r,2),{get timeSlots(){return G(x)},get selectedTime(){return G(_)},get loading(){return G(C)},onTimeSelected:ke}),j(n),H(()=>Y(i,Ao[G(t)])),J(e,n)};X(p,e=>{G(t)===`time`&&G(g)&&!G(O)&&e(v)});var w=V(p,2),T=e=>{var n=Go(),r=z(n),i=z(r,!0);j(r);var a=V(r,2);Ur(a,21,()=>G(m).pickupLocations,zr,(e,t)=>{{let n=P(()=>G(y)?.id===G(t).id),r=P(()=>G(t).title??G(t).id);no(e,{get selected(){return G(n)},onSelect:()=>k(G(t)),get heading(){return G(r)},get body(){return G(t).address}})}}),j(a),j(n),H(()=>Y(i,Ao[G(t)])),J(e,n)};X(w,e=>{G(t)===`pickup`&&G(m)?.pickupAvailable&&G(m).pickupLocations&&e(T)}),J(e,r)}),j(r);var c=V(r,2),d=z(c),v=e=>{var t=qo();Ur(t,21,()=>G(me)(),zr,(e,t,n)=>{var r=Ko();let i;H(()=>i=$r(r,1,`dot svelte-9w5z1v`,null,i,{active:n===G(p)})),J(e,r)}),j(t),J(e,t)},w=P(()=>G(me)().length>1);X(d,e=>{G(w)&&e(v)});var T=V(d,2),E=z(T),ee=e=>{var t=Jo(),n=z(t,!0);j(t),H(()=>Y(n,G(p)>0?`Back`:`Cancel`)),K(`click`,t,A),J(e,t)};X(E,e=>{(G(p)>0||l()&&!u.isInline)&&e(ee)});var te=V(E,2),D=z(te,!0);j(te),j(T),j(c),H((e,t,n)=>{Y(s,e),te.disabled=t,Y(D,n)},[()=>G(ve)(),()=>!G(Se)(),()=>G(_e)()?`Add to Cart`:`Next`]),K(`click`,te,Ae),J(e,t)};X(Be,e=>{G(d)?e(Ve):e(He,-1)}),j(Ie);var Ue=V(Ie,2),We=e=>{var t=Xo(),n=z(t),r=V(z(n),4),i=z(r),a=V(i,2);j(r),j(n),j(t),K(`click`,t,()=>{R(T,!1)}),K(`click`,n,e=>e.stopPropagation()),K(`click`,i,Me),K(`click`,a,()=>{R(T,!1)}),J(e,t)};return X(Ue,e=>{G(T)&&e(We)}),H(()=>Le=$r(Ie,1,`wizard svelte-9w5z1v`,null,Le,{inline:!G(d)&&u.isInline})),J(e,Fe),N(Pe)}vr([`click`]),Q($o,{product:{},api:{},wizardPages:{},editPages:{},editItem:{},autoSelectSingleTimeSlot:{},onComplete:{},onCancel:{}},[],[],{mode:`open`});var es=q(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),ts=q(`<p class="add-to-cart-error svelte-19qd5my"> </p>`),ns=q(`<!> <!>`,1),rs=q(`<div class="bw-widget svelte-19qd5my"><!></div>`),is={hash:`svelte-19qd5my`,code:`\r
|
|
27
27
|
/* display: contents - a plain box here would break WizardPage's own .wizard{height:100%}, which needs\r
|
|
28
|
-
to resolve against this component's real parent, not an unsized wrapper inserted in between. */.bw-widget.svelte-19qd5my {display:contents;}.add-to-cart-error.svelte-19qd5my {margin:0;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;}`};function as(e,t){M(t,!0),Yr(e,is);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`productId`,7),a=Z(t,`wizardPages`,7,Wa),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`autoOpenCheckout`,7,!0),c=Z(t,`onCancel`,7),l=va(),u=P(()=>ya(n()??l?.api,`TicketConfigurator`,`api`)),d=P(()=>ya(r()??l?.cartManager,`TicketConfigurator`,`cartManager`)),f=L(null),p=L(!0),m=L(!1),h=L(null);async function g(){R(f,await G(u).getProduct(i()),!0),R(p,!1)}g();async function _(e){await G(d).ensureCart();let t=Fi(e.units),n=await G(u).addCartItem({productId:e.productId,optionId:e.optionId,unitItems:t,availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),r=Xa(e.totalPrice,e.currency,e.currencyPrecision,2);$({type:`cart:change`,itemCount:t.length,cartItemId:n.id??``,totalFormatted:r,openCheckout:s()}),$({type:`cart:updated`,cart:await G(u).getCart().catch(()=>null)})}async function v(e){R(m,!0),R(h,null);try{await _(e)}catch(t){if(Li(t)){await y();return}if(t instanceof Ii&&(t.status===401||t.status===404)){G(d).reset();try{await _(e)}catch{R(h,`Something went wrong adding this to your cart. Please try again.`)}}else R(h,`Something went wrong adding this to your cart. Please try again.`)}finally{R(m,!1)}}async function y(){R(h,`This ticket's price has changed since you started. Please check the updated price and try again.`);try{await g()}catch{R(h,`This ticket's price has changed and we could not load the new one. Please reload the page.`)}}var b={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get productId(){return i()},set productId(e){i(e),I()},get wizardPages(){return a()},set wizardPages(e=Wa){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get autoOpenCheckout(){return s()},set autoOpenCheckout(e=!0){s(e),I()},get onCancel(){return c()},set onCancel(e){c(e),I()}},x=rs(),S=z(x),C=e=>{J(e,es())},w=e=>{var t=ns(),n=B(t),r=e=>{var t=ts(),n=z(t,!0);j(t),H(()=>Y(n,G(h))),J(e,t)};X(n,e=>{G(h)&&e(r)}),$o(V(n,2),{get product(){return G(f)},get api(){return G(u)},get wizardPages(){return a()},get autoSelectSingleTimeSlot(){return o()},get onCancel(){return c()},onComplete:v}),J(e,t)};return X(S,e=>{G(p)||G(m)?e(C):G(f)&&e(w,1)}),j(x),J(e,x),N(b)}Q(as,{api:{},cartManager:{},productId:{},wizardPages:{},autoSelectSingleTimeSlot:{},autoOpenCheckout:{},onCancel:{}},[],[],{mode:`open`});var os=window;function ss(){return os.__bwServices}var cs=q(`<div class="loading-center"><div class="spinner"></div></div>`),ls=q(`<div style="display: contents"><!></div>`);function us(e,t){M(t,!0);let n=Z(t,`product-id`,7,``),r=Z(t,`wizard-pages`,7,``),i=Z(t,`auto-select-single-time-slot`,7,void 0),a=Z(t,`no-auto-checkout`,7,void 0),o=Z(t,`cancelable`,7,void 0),{api:s,cartManager:c,ready:l}=ss(),u=L(!1);l.then(()=>{R(u,!0)});let d=P(()=>Ka(r())),f=L(null);function p(e,t){(G(f)?.closest(`bw-configurator`)??document.body).dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_n(()=>na(e=>{e.type===`cart:change`&&p(`bw:cart-change`,{itemCount:e.itemCount??0,cartItemId:e.cartItemId??``,totalFormatted:e.totalFormatted??``})}));let m=o()===void 0?void 0:()=>{$({type:`modal:close`}),p(`bw:cancel`,{})};var h={get"product-id"(){return n()},set"product-id"(e=``){n(e),I()},get"wizard-pages"(){return r()},set"wizard-pages"(e=``){r(e),I()},get"auto-select-single-time-slot"(){return i()},set"auto-select-single-time-slot"(e=void 0){i(e),I()},get"no-auto-checkout"(){return a()},set"no-auto-checkout"(e=void 0){a(e),I()},get cancelable(){return o()},set cancelable(e=void 0){o(e),I()}},g=ls(),_=z(g),v=e=>{{let t=P(()=>i()!==void 0),r=P(()=>a()===void 0);as(e,{get api(){return s},get cartManager(){return c},get productId(){return n()},get wizardPages(){return G(d)},get autoSelectSingleTimeSlot(){return G(t)},get autoOpenCheckout(){return G(r)},get onCancel(){return m}})}},y=e=>{J(e,cs())};return X(_,e=>{G(u)?e(v):e(y,-1)}),j(g),pi(g,e=>R(f,e),()=>G(f)),J(e,g),N(h)}customElements.define(`bw-configurator`,Q(us,{"product-id":{},"wizard-pages":{},"auto-select-single-time-slot":{},"no-auto-checkout":{},cancelable:{}},[],[]));function ds(e,t,n){let r=L(null),i=L(!1),a=L(!0),o=0;async function s(){let n=++o;if(R(a,!0),R(i,!1),!t().hasCart){R(r,null),R(a,!1);return}try{let t=await e().getCart();if(n!==o)return;R(r,t,!0)}catch{if(n!==o)return;R(r,null),R(i,!0)}R(a,!1)}s(),_n(()=>na(e=>{e.type===`cart:updated`&&(o+=1,R(r,e.cart,!0),R(i,!1),R(a,!1))}));let c=P(()=>G(a)?`loading`:G(i)?`error`:(G(r)?.items?.length??0)>0?`ready`:`empty`);return _n(()=>{n?.(G(c))}),{get cart(){return G(r)},get state(){return G(c)},reload:()=>void s()}}var fs=q(`<span class="timer svelte-1u82ue3"> </span>`),ps={hash:`svelte-1u82ue3`,code:`.timer.svelte-1u82ue3 {font-size:13px;font-weight:600;color:var(--bw-color-text-secondary);font-variant-numeric:tabular-nums;}`};function ms(e,t){M(t,!0),Yr(e,ps);let n=Z(t,`expiresAt`,7),r=L(``);function i(){R(r,ra(n().getTime()-Date.now()),!0)}i();let a=setInterval(i,1e3);Rr(()=>clearInterval(a));var o={get expiresAt(){return n()},set expiresAt(e){n(e),I()}},s=fs(),c=z(s,!0);return j(s),H(()=>Y(c,G(r))),J(e,s),N(o)}Q(ms,{expiresAt:{}},[],[],{mode:`open`});var hs=q(`<div class="cart-bar bw-widget svelte-1xt0fxx" role="alert"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx">Cart unavailable</span> <span class="error-detail svelte-1xt0fxx">We could not load your cart just now.</span></div> <button class="btn btn-primary">Retry</button></div>`),gs=q(`<div class="cart-bar bw-widget svelte-1xt0fxx"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx"> <!></span> <span class="total svelte-1xt0fxx"> </span></div> <button class="btn btn-primary">Checkout</button></div>`),_s={hash:`svelte-1xt0fxx`,code:`.cart-bar.svelte-1xt0fxx {display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:white;border-top:1px solid var(--bw-color-border);box-shadow:0 -2px 8px rgba(0,0,0,0.06);width:100%;}.cart-info.svelte-1xt0fxx {display:flex;flex-direction:column;gap:2px;}.item-count.svelte-1xt0fxx {font-size:12px;color:var(--bw-color-text-secondary);}.error-detail.svelte-1xt0fxx {font-size:14px;font-weight:600;}.total.svelte-1xt0fxx {font-size:16px;font-weight:700;}`};function vs(e,t){M(t,!0),Yr(e,_s);let n=Z(t,`cart`,7),r=Z(t,`state`,7,`ready`),i=Z(t,`onRetry`,7),a=P(()=>n()?.items.length??0),o=P(()=>()=>{if(!n()||n().items.length===0)return``;let e=n().items[0].currencyCode;return Xa(n().items.reduce((e,t)=>e+t.amount,0),e,2,2)}),s=P(()=>()=>n()?ia(n()):new Date);var c={get cart(){return n()},set cart(e){n(e),I()},get state(){return r()},set state(e=`ready`){r(e),I()},get onRetry(){return i()},set onRetry(e){i(e),I()}},l=Er(),u=B(l),d=e=>{var t=hs(),n=V(z(t),2);j(t),K(`click`,n,()=>i()?.()),J(e,t)},f=e=>{var t=gs(),n=z(t),r=z(n),i=z(r),c=V(i);{let e=P(()=>G(s)());ms(c,{get expiresAt(){return G(e)}})}j(r);var l=V(r,2),u=z(l,!0);j(l),j(n);var d=V(n,2);j(t),H(e=>{Y(i,`${G(a)===1?`1 item`:`${G(a)} items`} `),Y(u,e)},[()=>G(o)()]),K(`click`,d,()=>$({type:`modal:open`})),J(e,t)};return X(u,e=>{r()===`error`?e(d):n()&&n().items.length>0&&e(f,1)}),J(e,l),N(c)}vr([`click`]),Q(vs,{cart:{},state:{},onRetry:{}},[],[],{mode:`open`});function ys(e,t){M(t,!0);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`onStateChange`,7),a=va(),o=ds(()=>ya(n()??a?.api,`CartBar`,`api`),()=>ya(r()??a?.cartManager,`CartBar`,`cartManager`),e=>i()?.(e));return vs(e,{get cart(){return o.cart},get state(){return o.state},get onRetry(){return o.reload}}),N({get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get onStateChange(){return i()},set onStateChange(e){i(e),I()}})}Q(ys,{api:{},cartManager:{},onStateChange:{}},[],[],{mode:`open`});var bs=q(`<button class="cart-overview-btn is-error bw-widget svelte-16bjfem"><span class="cart-error-label svelte-16bjfem">Cart unavailable - retry</span></button>`),xs=q(`<button class="cart-overview-btn bw-widget svelte-16bjfem"><svg class="cart-icon svelte-16bjfem" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg> <span class="cart-badge svelte-16bjfem"> </span> <span class="cart-timer svelte-16bjfem"> </span></button>`),Ss={hash:`svelte-16bjfem`,code:`.cart-overview-btn.svelte-16bjfem {display:flex;align-items:center;justify-content:center;gap:14px;width:100%;padding:14px 24px;background:var(--bw-color-primary);color:white;border:none;border-radius:999px;cursor:pointer;transition:background 0.15s;}.cart-overview-btn.svelte-16bjfem:hover {background:var(--bw-color-primary-dark);}.cart-icon.svelte-16bjfem {width:22px;height:22px;flex-shrink:0;}.cart-badge.svelte-16bjfem {display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:white;color:var(--bw-color-primary);border-radius:50%;font-size:14px;font-weight:800;flex-shrink:0;}.cart-timer.svelte-16bjfem {font-variant-numeric:tabular-nums;font-size:20px;font-weight:700;flex-shrink:0;}.cart-error-label.svelte-16bjfem {font-size:15px;font-weight:600;}`};function Cs(e,t){M(t,!0),Yr(e,Ss);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`onStateChange`,7),a=va(),o=ds(()=>ya(n()??a?.api,`CartOverviewButton`,`api`),()=>ya(r()??a?.cartManager,`CartOverviewButton`,`cartManager`),e=>i()?.(e)),s=P(()=>o.cart),c=L(``);function l(){R(c,G(s)?ra(ia(G(s)).getTime()-Date.now()):ra(0),!0)}l();let u=setInterval(l,1e3);Rr(()=>clearInterval(u));let d=P(()=>G(s)?.items.length??0);var f={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get onStateChange(){return i()},set onStateChange(e){i(e),I()}},p=Er(),m=B(p),h=e=>{var t=bs();K(`click`,t,()=>o.reload()),J(e,t)},g=e=>{var t=xs(),n=V(z(t),2),r=z(n,!0);j(n);var i=V(n,2),a=z(i,!0);j(i),j(t),H(()=>{Y(r,G(d)),Y(a,G(c))}),K(`click`,t,()=>$({type:`modal:open`})),J(e,t)};return X(m,e=>{o.state===`error`?e(h):G(s)&&G(s).items.length>0&&e(g,1)}),J(e,p),N(f)}vr([`click`]),Q(Cs,{api:{},cartManager:{},onStateChange:{}},[],[],{mode:`open`});function ws(e,t){M(t,!0);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`display`,7),a=Z(t,`onStateChange`,7),o=va(),s=P(()=>ya(n()??o?.api,`CartOverview`,`api`)),c=P(()=>ya(r()??o?.cartManager,`CartOverview`,`cartManager`));var l={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get display(){return i()},set display(e){i(e),I()},get onStateChange(){return a()},set onStateChange(e){a(e),I()}},u=Er(),d=B(u),f=e=>{Cs(e,{get api(){return G(s)},get cartManager(){return G(c)},get onStateChange(){return a()}})},p=e=>{ys(e,{get api(){return G(s)},get cartManager(){return G(c)},get onStateChange(){return a()}})};return X(d,e=>{i()===`button`?e(f):e(p,-1)}),J(e,u),N(l)}Q(ws,{api:{},cartManager:{},display:{},onStateChange:{}},[],[],{mode:`open`});var Ts=q(`<div class="loading-center"><div class="spinner"></div></div>`),Es=q(`<div style="display: contents"><!></div>`);function Ds(e,t){M(t,!0);let n=Z(t,`display`,7,`bar`),{api:r,cartManager:i,ready:a}=ss(),o=L(!1);a.then(()=>{R(o,!0)});let s=L(null);function c(e,t){(G(s)?.closest(`bw-cart`)??document.body).dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_n(()=>na(e=>{e.type===`modal:open`&&c(`bw:checkout`,{})}));var l={get display(){return n()},set display(e=`bar`){n(e),I()}},u=Es(),d=z(u),f=e=>{ws(e,{get api(){return r},get cartManager(){return i},get display(){return n()}})},p=e=>{J(e,Ts())};return X(d,e=>{G(o)?e(f):e(p,-1)}),j(u),pi(u,e=>R(s,e),()=>G(s)),J(e,u),N(l)}customElements.define(`bw-cart`,Q(Ds,{display:{}},[],[]));function Os(e,t){return(t??(typeof document>`u`?null:document.body))?.appendChild(e),{destroy(){e.remove()}}}var ks=1500,As=9e4;function js(e){let t=L(null),n=L(null),r=null,i=L(!1),a=L(!1),o=L(null);async function s(){G(t)&&await p()}async function c(){let n=Xi(e.getApi().cartToken);n&&(R(t,n,!0),$({type:`payment:started`}),!await l()&&(e.setView(`payment`),ia(e.getCart()).getTime()<=Date.now()&&s()))}async function l(){R(i,!0),e.setView(`result`);let r;try{r=await e.getApi().getCartStatus()}catch(t){return R(i,!1),Ri(t)?(e.close(),!0):!1}return r.cartStatus===`confirmed`?(g(r.confirmResult??{items:[]}),R(i,!1),!0):r.cartStatus===`expired`?(R(n,`notCharged`),Zi(),R(t,null),$({type:`payment:ended`}),R(i,!1),!0):r.cartStatus===`paid`||r.cartStatus===`confirming`?(await _(),!0):(R(i,!1),!1)}async function u(t){try{return await e.getApi().abandonPayment(t),`abandoned`}catch(e){return Vi(e)||Hi(e)?`settled`:`failed`}}async function d(n){if(G(t)){R(a,!0);try{if(!await p())return}catch{}finally{R(a,!1)}if(G(t)){e.setView(`payment`);return}}R(a,!0),R(o,null);try{R(t,await e.getApi().payCart(n),!0),Yi(e.getApi().cartToken,{checkoutId:G(t).checkoutId??``,entityId:G(t).entityId??``}),e.setView(`payment`),$({type:`payment:started`}),e.refreshDeadlineAfterPay()}catch(t){if(Ri(t)){e.close();return}let n=t instanceof Ii?t.status:null;R(o,n===502?`Unable to start payment right now. Please try again.`:`Something went wrong starting your payment. Please try again.`,!0)}finally{R(a,!1)}}async function f(t){if(!((t.status===`cancelled`||t.status===`expired`||t.status===`error`)&&!await p())){if(t.status===`cancelled`){e.setView(`contact`);return}if(t.status===`expired`||t.status===`error`){R(n,`notCharged`),R(i,!1),e.setView(`result`);return}e.setView(`result`),await _()}}async function p(){if(!G(t))return await e.reloadCart();let n=await u(G(t).checkoutId);if(n===`settled`)return e.setView(`result`),await _(),!1;n===`abandoned`&&(R(t,null),Zi());let r=await e.reloadCart();return r&&e.notifyCartUpdated(e.getCart()),(n===`abandoned`||!r)&&$({type:`payment:ended`}),r}function m(){e.setView(`contact`)}async function h(r){let i;try{i=await e.getApi().getCartStatus()}catch(e){return r?.aborted?`settled`:Ri(e)?(R(n,`pending`),`settled`):`waiting`}return r?.aborted?`settled`:i.cartStatus===`confirmed`?(g(i.confirmResult??{items:[]}),`settled`):i.cartStatus===`expired`?(R(n,`notCharged`),Zi(),R(t,null),`settled`):`waiting`}function g(t){let r=t.items.length>0&&t.items.every(e=>e.statusCode>=200&&e.statusCode<300);R(n,r?`success`:`partial`,!0),r&&e.onOrderConfirmed()}async function _(){R(i,!0),R(n,null);let e=Date.now()+As,t=new AbortController;for(r?.abort(),r=t;!t.signal.aborted&&await h(t.signal)!==`settled`;){if(Date.now()+ks>e){R(n,`pending`);break}await v(ks,t.signal)}t.signal.aborted||(R(i,!1),r=null)}function v(e,t){return new Promise(n=>{let r=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})})}async function y(){R(i,!0),await h()===`waiting`&&R(n,`pending`),R(i,!1)}let b=P(()=>G(i)?null:G(n)===`success`?{outcome:`successful`}:G(n)===`pending`?{outcome:`pending`}:G(n)===`partial`?{outcome:`partial`}:G(n)===`notCharged`?{outcome:`failed`,resultDescription:`Your payment could not be completed. Please try again.`,retryPayment:!0}:null);return{get paymentResult(){return G(t)},get isPaying(){return G(a)},get payError(){return G(o)},get isConfirming(){return G(i)},get resultStatus(){return G(b)},payNow:d,onPaymentComplete:f,onPaymentTimedOut:s,resumeInterruptedPayment:c,retry:m,checkStatusAgain:y,dispose:()=>r?.abort()}}function Ms(e){return e.items.reduce((e,t)=>e+t.amount,0)}function Ns(e){return e.items[0]?.currencyCode??`ZAR`}function Ps(e,t){return t.get(e.productId)?.title??e.productId}function Fs(e,t){return t.get(e.productId)?.options.find(t=>t.id===e.optionId)?.title??e.optionId}function Is(e,t){let n=t.get(e.productId)?.options.find(t=>t.id===e.optionId),r=new Map;for(let t of e.unitItems)r.set(t.unitId,(r.get(t.unitId)??0)+1);return[...r.entries()].map(([e,t])=>{let r=n?.units.find(t=>t.id===e),i=r?.pricing?.[0]?.retail??0;return{unitId:e,title:r?.title??e,quantity:t,linePrice:i*t}})}function Ls(e){if(!e.availabilityId)return null;let t=e.availabilityId.match(/(\d{4})-(\d{2})-(\d{2})/);if(!t)return null;let n=new Date(+t[1],t[2]-1,+t[3]);return`${n.getDate()} ${[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][n.getMonth()]} ${n.getFullYear()}`}var Rs=q(`<div class="form svelte-12xyhj1"><div class="field svelte-12xyhj1"><label for="firstName" class="svelte-12xyhj1">First name *</label> <input id="firstName"/></div> <div class="field svelte-12xyhj1"><label for="lastName" class="svelte-12xyhj1">Last name</label> <input id="lastName" class="input"/></div> <div class="field svelte-12xyhj1"><label for="email" class="svelte-12xyhj1">Email address *</label> <input id="email" type="email"/></div> <div class="field svelte-12xyhj1"><label for="phone" class="svelte-12xyhj1">Phone number *</label> <input id="phone" type="tel"/></div></div>`),zs={hash:`svelte-12xyhj1`,code:`.form.svelte-12xyhj1 {display:flex;flex-direction:column;gap:14px;}.field.svelte-12xyhj1 {display:flex;flex-direction:column;gap:4px;}label.svelte-12xyhj1 {font-size:13px;font-weight:600;color:var(--bw-color-text-secondary);}`};function Bs(e,t){M(t,!0),Yr(e,zs);let n=Z(t,`hasAttemptedSubmit`,7),r=Z(t,`firstName`,15,``),i=Z(t,`lastName`,15,``),a=Z(t,`emailAddress`,15,``),o=Z(t,`phoneNumber`,15,``);function s(){return r().trim()!==``&&a().trim()!==``&&o().trim()!==``}function c(){return{firstName:r().trim(),lastName:i().trim(),emailAddress:a().trim(),phoneNumber:o().trim()}}function l(e){return n()&&e.trim()===``}var u={isValid:s,getContact:c,get hasAttemptedSubmit(){return n()},set hasAttemptedSubmit(e){n(e),I()},get firstName(){return r()},set firstName(e=``){r(e),I()},get lastName(){return i()},set lastName(e=``){i(e),I()},get emailAddress(){return a()},set emailAddress(e=``){a(e),I()},get phoneNumber(){return o()},set phoneNumber(e=``){o(e),I()}},d=Rs(),f=z(d),p=V(z(f),2);ri(p);let m;j(f);var h=V(f,2),g=V(z(h),2);ri(g),j(h);var _=V(h,2),v=V(z(_),2);ri(v);let y;j(_);var b=V(_,2),x=V(z(b),2);ri(x);let S;return j(b),j(d),H((e,t,n)=>{m=$r(p,1,`input`,null,m,e),y=$r(v,1,`input`,null,y,t),S=$r(x,1,`input`,null,S,n)},[()=>({"input-error":l(r())}),()=>({"input-error":l(a())}),()=>({"input-error":l(o())})]),li(p,r),li(g,i),li(v,a),li(x,o),J(e,d),N(u)}Q(Bs,{hasAttemptedSubmit:{},firstName:{},lastName:{},emailAddress:{},phoneNumber:{}},[],[`isValid`,`getContact`],{mode:`open`});var Vs=q(`<div class="consent svelte-19pmjwi"><label><input type="checkbox" class="svelte-19pmjwi"/> <span class="svelte-19pmjwi">I accept the privacy policy *</span></label> <label class="check svelte-19pmjwi"><input type="checkbox" class="svelte-19pmjwi"/> <span>I would like to receive marketing communications</span></label></div>`),Hs={hash:`svelte-19pmjwi`,code:`.consent.svelte-19pmjwi {display:flex;flex-direction:column;gap:12px;}.check.svelte-19pmjwi {display:flex;align-items:flex-start;gap:10px;font-size:13px;cursor:pointer;line-height:1.4;}.check.error.svelte-19pmjwi span:where(.svelte-19pmjwi) {color:var(--bw-color-error);}input[type="checkbox"].svelte-19pmjwi {margin-top:2px;accent-color:var(--bw-color-primary);width:16px;height:16px;flex-shrink:0;}`};function Us(e,t){M(t,!0),Yr(e,Hs);let n=Z(t,`privacyAccepted`,7),r=Z(t,`marketingOptIn`,7),i=Z(t,`hasAttemptedSubmit`,7),a=Z(t,`onPrivacyChanged`,7),o=Z(t,`onMarketingChanged`,7);var s={get privacyAccepted(){return n()},set privacyAccepted(e){n(e),I()},get marketingOptIn(){return r()},set marketingOptIn(e){r(e),I()},get hasAttemptedSubmit(){return i()},set hasAttemptedSubmit(e){i(e),I()},get onPrivacyChanged(){return a()},set onPrivacyChanged(e){a(e),I()},get onMarketingChanged(){return o()},set onMarketingChanged(e){o(e),I()}},c=Vs(),l=z(c);let u;var d=z(l);ri(d),Ne(2),j(l);var f=V(l,2),p=z(f);return ri(p),Ne(2),j(f),j(c),H(()=>{u=$r(l,1,`check svelte-19pmjwi`,null,u,{error:i()&&!n()}),ii(d,n()),ii(p,r())}),K(`change`,d,e=>a()(e.target.checked)),K(`change`,p,e=>o()(e.target.checked)),J(e,c),N(s)}vr([`change`]),Q(Us,{privacyAccepted:{},marketingOptIn:{},hasAttemptedSubmit:{},onPrivacyChanged:{},onMarketingChanged:{}},[],[],{mode:`open`});var Ws=q(`<span class="spacer"></span> <!>`,1),Gs=q(`<div class="error-state svelte-1ubcp68"><div class="error-icon svelte-1ubcp68">!</div> <p class="error-title svelte-1ubcp68">Unable to load payment form</p> <p class="error-msg svelte-1ubcp68"> </p> <button class="btn btn-primary svelte-1ubcp68">Start over</button></div>`),Ks=q(`<div id="peach-container" class="svelte-1ubcp68"></div>`),qs=q(`<div class="payment-overlay svelte-1ubcp68"><div class="payment-dialog svelte-1ubcp68"><div class="page-header"><h2>Payment</h2> <!></div> <div class="body svelte-1ubcp68"><!></div></div></div>`),Js={hash:`svelte-1ubcp68`,code:`.payment-overlay.svelte-1ubcp68 {position:fixed;inset:0;\r
|
|
28
|
+
to resolve against this component's real parent, not an unsized wrapper inserted in between. */.bw-widget.svelte-19qd5my {display:contents;}.add-to-cart-error.svelte-19qd5my {margin:0;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;}`};function as(e,t){M(t,!0),Yr(e,is);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`productId`,7),a=Z(t,`wizardPages`,7,Wa),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`autoOpenCheckout`,7,!0),c=Z(t,`onCancel`,7),l=va(),u=P(()=>ya(n()??l?.api,`TicketConfigurator`,`api`)),d=P(()=>ya(r()??l?.cartManager,`TicketConfigurator`,`cartManager`)),f=L(null),p=L(!0),m=L(!1),h=L(null);async function g(){R(f,await G(u).getProduct(i()),!0),R(p,!1)}g();async function _(e){await G(d).ensureCart();let t=Fi(e.units),n=await G(u).addCartItem({productId:e.productId,optionId:e.optionId,unitItems:t,availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),r=Xa(e.totalPrice,e.currency,e.currencyPrecision,2);$({type:`cart:change`,itemCount:t.length,cartItemId:n.id??``,totalFormatted:r,openCheckout:s()}),$({type:`cart:updated`,cart:await G(u).getCart().catch(()=>null)})}async function v(e){R(m,!0),R(h,null);try{await _(e)}catch(t){if(Li(t)){await y();return}if(t instanceof Ii&&(t.status===401||t.status===404)){G(d).reset();try{await _(e)}catch{R(h,`Something went wrong adding this to your cart. Please try again.`)}}else R(h,`Something went wrong adding this to your cart. Please try again.`)}finally{R(m,!1)}}async function y(){R(h,`This ticket's price has changed since you started. Please check the updated price and try again.`);try{await g()}catch{R(h,`This ticket's price has changed and we could not load the new one. Please reload the page.`)}}var b={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get productId(){return i()},set productId(e){i(e),I()},get wizardPages(){return a()},set wizardPages(e=Wa){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get autoOpenCheckout(){return s()},set autoOpenCheckout(e=!0){s(e),I()},get onCancel(){return c()},set onCancel(e){c(e),I()}},x=rs(),S=z(x),C=e=>{J(e,es())},w=e=>{var t=ns(),n=B(t),r=e=>{var t=ts(),n=z(t,!0);j(t),H(()=>Y(n,G(h))),J(e,t)};X(n,e=>{G(h)&&e(r)}),$o(V(n,2),{get product(){return G(f)},get api(){return G(u)},get wizardPages(){return a()},get autoSelectSingleTimeSlot(){return o()},get onCancel(){return c()},onComplete:v}),J(e,t)};return X(S,e=>{G(p)||G(m)?e(C):G(f)&&e(w,1)}),j(x),J(e,x),N(b)}Q(as,{api:{},cartManager:{},productId:{},wizardPages:{},autoSelectSingleTimeSlot:{},autoOpenCheckout:{},onCancel:{}},[],[],{mode:`open`});var os=window;function ss(){return os.__bwServices}var cs=q(`<div class="loading-center"><div class="spinner"></div></div>`),ls=q(`<div style="display: contents"><!></div>`);function us(e,t){M(t,!0);let n=Z(t,`product-id`,7,``),r=Z(t,`wizard-pages`,7,``),i=Z(t,`auto-select-single-time-slot`,7,void 0),a=Z(t,`no-auto-checkout`,7,void 0),o=Z(t,`cancelable`,7,void 0),{api:s,cartManager:c,ready:l}=ss(),u=L(!1);l.then(()=>{R(u,!0)});let d=P(()=>Ka(r())),f=L(null);function p(e,t){(G(f)?.closest(`bw-configurator`)??document.body).dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_n(()=>na(e=>{e.type===`cart:change`&&p(`bw:cart-change`,{itemCount:e.itemCount??0,cartItemId:e.cartItemId??``,totalFormatted:e.totalFormatted??``})}));let m=o()===void 0?void 0:()=>{$({type:`modal:close`}),p(`bw:cancel`,{})};var h={get"product-id"(){return n()},set"product-id"(e=``){n(e),I()},get"wizard-pages"(){return r()},set"wizard-pages"(e=``){r(e),I()},get"auto-select-single-time-slot"(){return i()},set"auto-select-single-time-slot"(e=void 0){i(e),I()},get"no-auto-checkout"(){return a()},set"no-auto-checkout"(e=void 0){a(e),I()},get cancelable(){return o()},set cancelable(e=void 0){o(e),I()}},g=ls(),_=z(g),v=e=>{{let t=P(()=>i()!==void 0),r=P(()=>a()===void 0);as(e,{get api(){return s},get cartManager(){return c},get productId(){return n()},get wizardPages(){return G(d)},get autoSelectSingleTimeSlot(){return G(t)},get autoOpenCheckout(){return G(r)},get onCancel(){return m}})}},y=e=>{J(e,cs())};return X(_,e=>{G(u)?e(v):e(y,-1)}),j(g),pi(g,e=>R(f,e),()=>G(f)),J(e,g),N(h)}customElements.define(`bw-configurator`,Q(us,{"product-id":{},"wizard-pages":{},"auto-select-single-time-slot":{},"no-auto-checkout":{},cancelable:{}},[],[]));function ds(e,t,n){let r=L(null),i=L(!1),a=L(!0),o=0;async function s(){let n=++o;if(R(a,!0),R(i,!1),!t().hasCart){R(r,null),R(a,!1);return}try{let t=await e().getCart();if(n!==o)return;R(r,t,!0)}catch{if(n!==o)return;R(r,null),R(i,!0)}R(a,!1)}s(),_n(()=>na(e=>{e.type===`cart:updated`&&(o+=1,R(r,e.cart,!0),R(i,!1),R(a,!1))}));let c=P(()=>G(a)?`loading`:G(i)?`error`:(G(r)?.items?.length??0)>0?`ready`:`empty`);return _n(()=>{n?.(G(c))}),{get cart(){return G(r)},get state(){return G(c)},reload:()=>void s()}}var fs=q(`<span class="timer svelte-1u82ue3"> </span>`),ps={hash:`svelte-1u82ue3`,code:`.timer.svelte-1u82ue3 {font-size:13px;font-weight:600;color:var(--bw-color-text-secondary);font-variant-numeric:tabular-nums;}`};function ms(e,t){M(t,!0),Yr(e,ps);let n=Z(t,`expiresAt`,7),r=L(``);function i(){R(r,ra(n().getTime()-Date.now()),!0)}i();let a=setInterval(i,1e3);Rr(()=>clearInterval(a));var o={get expiresAt(){return n()},set expiresAt(e){n(e),I()}},s=fs(),c=z(s,!0);return j(s),H(()=>Y(c,G(r))),J(e,s),N(o)}Q(ms,{expiresAt:{}},[],[],{mode:`open`});var hs=q(`<div class="cart-bar bw-widget svelte-1xt0fxx" role="alert"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx">Cart unavailable</span> <span class="error-detail svelte-1xt0fxx">We could not load your cart just now.</span></div> <button class="btn btn-primary">Retry</button></div>`),gs=q(`<div class="cart-bar bw-widget svelte-1xt0fxx"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx"> <!></span> <span class="total svelte-1xt0fxx"> </span></div> <button class="btn btn-primary">Checkout</button></div>`),_s={hash:`svelte-1xt0fxx`,code:`.cart-bar.svelte-1xt0fxx {display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:white;border-top:1px solid var(--bw-color-border);box-shadow:0 -2px 8px rgba(0,0,0,0.06);width:100%;}.cart-info.svelte-1xt0fxx {display:flex;flex-direction:column;gap:2px;}.item-count.svelte-1xt0fxx {font-size:12px;color:var(--bw-color-text-secondary);}.error-detail.svelte-1xt0fxx {font-size:14px;font-weight:600;}.total.svelte-1xt0fxx {font-size:16px;font-weight:700;}`};function vs(e,t){M(t,!0),Yr(e,_s);let n=Z(t,`cart`,7),r=Z(t,`state`,7,`ready`),i=Z(t,`onRetry`,7),a=P(()=>n()?.items.length??0),o=P(()=>()=>{if(!n()||n().items.length===0)return``;let e=n().items[0].currencyCode;return Xa(n().items.reduce((e,t)=>e+t.amount,0),e,2,2)}),s=P(()=>()=>n()?ia(n()):new Date);var c={get cart(){return n()},set cart(e){n(e),I()},get state(){return r()},set state(e=`ready`){r(e),I()},get onRetry(){return i()},set onRetry(e){i(e),I()}},l=Er(),u=B(l),d=e=>{var t=hs(),n=V(z(t),2);j(t),K(`click`,n,()=>i()?.()),J(e,t)},f=e=>{var t=gs(),n=z(t),r=z(n),i=z(r),c=V(i);{let e=P(()=>G(s)());ms(c,{get expiresAt(){return G(e)}})}j(r);var l=V(r,2),u=z(l,!0);j(l),j(n);var d=V(n,2);j(t),H(e=>{Y(i,`${G(a)===1?`1 item`:`${G(a)} items`} `),Y(u,e)},[()=>G(o)()]),K(`click`,d,()=>$({type:`modal:open`})),J(e,t)};return X(u,e=>{r()===`error`?e(d):n()&&n().items.length>0&&e(f,1)}),J(e,l),N(c)}vr([`click`]),Q(vs,{cart:{},state:{},onRetry:{}},[],[],{mode:`open`});function ys(e,t){M(t,!0);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`onStateChange`,7),a=va(),o=ds(()=>ya(n()??a?.api,`CartBar`,`api`),()=>ya(r()??a?.cartManager,`CartBar`,`cartManager`),e=>i()?.(e));return vs(e,{get cart(){return o.cart},get state(){return o.state},get onRetry(){return o.reload}}),N({get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get onStateChange(){return i()},set onStateChange(e){i(e),I()}})}Q(ys,{api:{},cartManager:{},onStateChange:{}},[],[],{mode:`open`});var bs=q(`<button class="cart-overview-btn is-error bw-widget svelte-16bjfem"><span class="cart-error-label svelte-16bjfem">Cart unavailable - retry</span></button>`),xs=q(`<button class="cart-overview-btn bw-widget svelte-16bjfem"><svg class="cart-icon svelte-16bjfem" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg> <span class="cart-badge svelte-16bjfem"> </span> <span class="cart-timer svelte-16bjfem"> </span></button>`),Ss={hash:`svelte-16bjfem`,code:`.cart-overview-btn.svelte-16bjfem {display:flex;align-items:center;justify-content:center;gap:14px;width:100%;padding:14px 24px;background:var(--bw-color-primary);color:white;border:none;border-radius:999px;cursor:pointer;transition:background 0.15s;}.cart-overview-btn.svelte-16bjfem:hover {background:var(--bw-color-primary-dark);}.cart-icon.svelte-16bjfem {width:22px;height:22px;flex-shrink:0;}.cart-badge.svelte-16bjfem {display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:white;color:var(--bw-color-primary);border-radius:50%;font-size:14px;font-weight:800;flex-shrink:0;}.cart-timer.svelte-16bjfem {font-variant-numeric:tabular-nums;font-size:20px;font-weight:700;flex-shrink:0;}.cart-error-label.svelte-16bjfem {font-size:15px;font-weight:600;}`};function Cs(e,t){M(t,!0),Yr(e,Ss);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`onStateChange`,7),a=va(),o=ds(()=>ya(n()??a?.api,`CartOverviewButton`,`api`),()=>ya(r()??a?.cartManager,`CartOverviewButton`,`cartManager`),e=>i()?.(e)),s=P(()=>o.cart),c=L(``);function l(){R(c,G(s)?ra(ia(G(s)).getTime()-Date.now()):ra(0),!0)}l();let u=setInterval(l,1e3);Rr(()=>clearInterval(u));let d=P(()=>G(s)?.items.length??0);var f={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get onStateChange(){return i()},set onStateChange(e){i(e),I()}},p=Er(),m=B(p),h=e=>{var t=bs();K(`click`,t,()=>o.reload()),J(e,t)},g=e=>{var t=xs(),n=V(z(t),2),r=z(n,!0);j(n);var i=V(n,2),a=z(i,!0);j(i),j(t),H(()=>{Y(r,G(d)),Y(a,G(c))}),K(`click`,t,()=>$({type:`modal:open`})),J(e,t)};return X(m,e=>{o.state===`error`?e(h):G(s)&&G(s).items.length>0&&e(g,1)}),J(e,p),N(f)}vr([`click`]),Q(Cs,{api:{},cartManager:{},onStateChange:{}},[],[],{mode:`open`});function ws(e,t){M(t,!0);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`display`,7),a=Z(t,`onStateChange`,7),o=va(),s=P(()=>ya(n()??o?.api,`CartOverview`,`api`)),c=P(()=>ya(r()??o?.cartManager,`CartOverview`,`cartManager`));var l={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get display(){return i()},set display(e){i(e),I()},get onStateChange(){return a()},set onStateChange(e){a(e),I()}},u=Er(),d=B(u),f=e=>{Cs(e,{get api(){return G(s)},get cartManager(){return G(c)},get onStateChange(){return a()}})},p=e=>{ys(e,{get api(){return G(s)},get cartManager(){return G(c)},get onStateChange(){return a()}})};return X(d,e=>{i()===`button`?e(f):e(p,-1)}),J(e,u),N(l)}Q(ws,{api:{},cartManager:{},display:{},onStateChange:{}},[],[],{mode:`open`});var Ts=q(`<div class="loading-center"><div class="spinner"></div></div>`),Es=q(`<div style="display: contents"><!></div>`);function Ds(e,t){M(t,!0);let n=Z(t,`display`,7,`bar`),{api:r,cartManager:i,ready:a}=ss(),o=L(!1);a.then(()=>{R(o,!0)});let s=L(null);function c(e,t){(G(s)?.closest(`bw-cart`)??document.body).dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_n(()=>na(e=>{e.type===`modal:open`&&c(`bw:checkout`,{})}));var l={get display(){return n()},set display(e=`bar`){n(e),I()}},u=Es(),d=z(u),f=e=>{ws(e,{get api(){return r},get cartManager(){return i},get display(){return n()}})},p=e=>{J(e,Ts())};return X(d,e=>{G(o)?e(f):e(p,-1)}),j(u),pi(u,e=>R(s,e),()=>G(s)),J(e,u),N(l)}customElements.define(`bw-cart`,Q(Ds,{display:{}},[],[]));function Os(e,t){return(t??(typeof document>`u`?null:document.body))?.appendChild(e),{destroy(){e.remove()}}}var ks=/^(000\.000\.|000\.100\.1|000\.[36]|000\.400\.1[12]0|000\.400\.0[^3]|000\.400\.100)/,As=/^(000\.200|800\.400\.5|100\.400\.500)/;function js(e){return e?!ks.test(e)&&!As.test(e):!1}var Ms=1500,Ns=9e4;function Ps(e){let t=L(null),n=L(null),r=null,i=L(!1),a=L(!1),o=L(null);async function s(){G(t)&&await p()}async function c(){let n=Xi(e.getApi().cartToken);n&&(R(t,n,!0),$({type:`payment:started`}),!await l()&&(e.setView(`payment`),ia(e.getCart()).getTime()<=Date.now()&&s()))}async function l(){R(i,!0),e.setView(`result`);let r;try{r=await e.getApi().getCartStatus()}catch(t){return R(i,!1),Ri(t)?(e.close(),!0):!1}return r.cartStatus===`confirmed`?(g(r.confirmResult??{items:[]}),R(i,!1),!0):r.cartStatus===`expired`?(R(n,`notCharged`),Zi(),R(t,null),$({type:`payment:ended`}),R(i,!1),!0):r.cartStatus===`paid`||r.cartStatus===`confirming`?(await _(),!0):(R(i,!1),!1)}async function u(t){try{return await e.getApi().abandonPayment(t),`abandoned`}catch(e){return Vi(e)||Hi(e)?`settled`:`failed`}}async function d(n){if(G(t)){R(a,!0);try{if(!await p())return}catch{}finally{R(a,!1)}if(G(t)){e.setView(`payment`);return}}R(a,!0),R(o,null);try{R(t,await e.getApi().payCart(n),!0),Yi(e.getApi().cartToken,{checkoutId:G(t).checkoutId??``,entityId:G(t).entityId??``}),e.setView(`payment`),$({type:`payment:started`}),e.refreshDeadlineAfterPay()}catch(t){if(Ri(t)){e.close();return}let n=t instanceof Ii?t.status:null;R(o,n===502?`Unable to start payment right now. Please try again.`:`Something went wrong starting your payment. Please try again.`,!0)}finally{R(a,!1)}}async function f(r){if(!((r.status===`cancelled`||r.status===`expired`)&&!await p())){if(r.status===`cancelled`){e.setView(`contact`);return}if(r.status===`expired`){R(n,`notCharged`),R(i,!1),e.setView(`result`);return}if(r.status===`error`||js(r.resultCode)){R(t,null),Zi(),R(n,`notCharged`),R(i,!1),e.setView(`result`),$({type:`payment:ended`});return}e.setView(`result`),await _()}}async function p(){if(!G(t))return await e.reloadCart();let n=await u(G(t).checkoutId);if(n===`settled`)return e.setView(`result`),await _(),!1;n===`abandoned`&&(R(t,null),Zi());let r=await e.reloadCart();return r&&e.notifyCartUpdated(e.getCart()),(n===`abandoned`||!r)&&$({type:`payment:ended`}),r}function m(){e.setView(`contact`)}async function h(r){let i;try{i=await e.getApi().getCartStatus()}catch(e){return r?.aborted?`settled`:Ri(e)?(R(n,`pending`),`settled`):`waiting`}return r?.aborted?`settled`:i.cartStatus===`confirmed`?(g(i.confirmResult??{items:[]}),`settled`):i.cartStatus===`expired`?(R(n,`notCharged`),Zi(),R(t,null),`settled`):`waiting`}function g(t){let r=t.items.length>0&&t.items.every(e=>e.statusCode>=200&&e.statusCode<300);R(n,r?`success`:`partial`,!0),r&&e.onOrderConfirmed()}async function _(){R(i,!0),R(n,null);let e=Date.now()+Ns,t=new AbortController;for(r?.abort(),r=t;!t.signal.aborted&&await h(t.signal)!==`settled`;){if(Date.now()+Ms>e){R(n,`pending`);break}await v(Ms,t.signal)}t.signal.aborted||(R(i,!1),r=null)}function v(e,t){return new Promise(n=>{let r=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})})}async function y(){R(i,!0),await h()===`waiting`&&R(n,`pending`),R(i,!1)}let b=P(()=>G(i)?null:G(n)===`success`?{outcome:`successful`}:G(n)===`pending`?{outcome:`pending`}:G(n)===`partial`?{outcome:`partial`}:G(n)===`notCharged`?{outcome:`failed`,resultDescription:`Your payment could not be completed. Please try again.`,retryPayment:!0}:null);return{get paymentResult(){return G(t)},get isPaying(){return G(a)},get payError(){return G(o)},get isConfirming(){return G(i)},get resultStatus(){return G(b)},payNow:d,onPaymentComplete:f,onPaymentTimedOut:s,resumeInterruptedPayment:c,retry:m,checkStatusAgain:y,dispose:()=>r?.abort()}}function Fs(e){return e.items.reduce((e,t)=>e+t.amount,0)}function Is(e){return e.items[0]?.currencyCode??`ZAR`}function Ls(e,t){return t.get(e.productId)?.title??e.productId}function Rs(e,t){return t.get(e.productId)?.options.find(t=>t.id===e.optionId)?.title??e.optionId}function zs(e,t){let n=t.get(e.productId)?.options.find(t=>t.id===e.optionId),r=new Map;for(let t of e.unitItems)r.set(t.unitId,(r.get(t.unitId)??0)+1);return[...r.entries()].map(([e,t])=>{let r=n?.units.find(t=>t.id===e),i=r?.pricing?.[0]?.retail??0;return{unitId:e,title:r?.title??e,quantity:t,linePrice:i*t}})}function Bs(e){if(!e.availabilityId)return null;let t=e.availabilityId.match(/(\d{4})-(\d{2})-(\d{2})/);if(!t)return null;let n=new Date(+t[1],t[2]-1,+t[3]);return`${n.getDate()} ${[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][n.getMonth()]} ${n.getFullYear()}`}var Vs=q(`<div class="form svelte-12xyhj1"><div class="field svelte-12xyhj1"><label for="firstName" class="svelte-12xyhj1">First name *</label> <input id="firstName"/></div> <div class="field svelte-12xyhj1"><label for="lastName" class="svelte-12xyhj1">Last name</label> <input id="lastName" class="input"/></div> <div class="field svelte-12xyhj1"><label for="email" class="svelte-12xyhj1">Email address *</label> <input id="email" type="email"/></div> <div class="field svelte-12xyhj1"><label for="phone" class="svelte-12xyhj1">Phone number *</label> <input id="phone" type="tel"/></div></div>`),Hs={hash:`svelte-12xyhj1`,code:`.form.svelte-12xyhj1 {display:flex;flex-direction:column;gap:14px;}.field.svelte-12xyhj1 {display:flex;flex-direction:column;gap:4px;}label.svelte-12xyhj1 {font-size:13px;font-weight:600;color:var(--bw-color-text-secondary);}`};function Us(e,t){M(t,!0),Yr(e,Hs);let n=Z(t,`hasAttemptedSubmit`,7),r=Z(t,`firstName`,15,``),i=Z(t,`lastName`,15,``),a=Z(t,`emailAddress`,15,``),o=Z(t,`phoneNumber`,15,``);function s(){return r().trim()!==``&&a().trim()!==``&&o().trim()!==``}function c(){return{firstName:r().trim(),lastName:i().trim(),emailAddress:a().trim(),phoneNumber:o().trim()}}function l(e){return n()&&e.trim()===``}var u={isValid:s,getContact:c,get hasAttemptedSubmit(){return n()},set hasAttemptedSubmit(e){n(e),I()},get firstName(){return r()},set firstName(e=``){r(e),I()},get lastName(){return i()},set lastName(e=``){i(e),I()},get emailAddress(){return a()},set emailAddress(e=``){a(e),I()},get phoneNumber(){return o()},set phoneNumber(e=``){o(e),I()}},d=Vs(),f=z(d),p=V(z(f),2);ri(p);let m;j(f);var h=V(f,2),g=V(z(h),2);ri(g),j(h);var _=V(h,2),v=V(z(_),2);ri(v);let y;j(_);var b=V(_,2),x=V(z(b),2);ri(x);let S;return j(b),j(d),H((e,t,n)=>{m=$r(p,1,`input`,null,m,e),y=$r(v,1,`input`,null,y,t),S=$r(x,1,`input`,null,S,n)},[()=>({"input-error":l(r())}),()=>({"input-error":l(a())}),()=>({"input-error":l(o())})]),li(p,r),li(g,i),li(v,a),li(x,o),J(e,d),N(u)}Q(Us,{hasAttemptedSubmit:{},firstName:{},lastName:{},emailAddress:{},phoneNumber:{}},[],[`isValid`,`getContact`],{mode:`open`});var Ws=q(`<div class="consent svelte-19pmjwi"><label><input type="checkbox" class="svelte-19pmjwi"/> <span class="svelte-19pmjwi">I accept the privacy policy *</span></label> <label class="check svelte-19pmjwi"><input type="checkbox" class="svelte-19pmjwi"/> <span>I would like to receive marketing communications</span></label></div>`),Gs={hash:`svelte-19pmjwi`,code:`.consent.svelte-19pmjwi {display:flex;flex-direction:column;gap:12px;}.check.svelte-19pmjwi {display:flex;align-items:flex-start;gap:10px;font-size:13px;cursor:pointer;line-height:1.4;}.check.error.svelte-19pmjwi span:where(.svelte-19pmjwi) {color:var(--bw-color-error);}input[type="checkbox"].svelte-19pmjwi {margin-top:2px;accent-color:var(--bw-color-primary);width:16px;height:16px;flex-shrink:0;}`};function Ks(e,t){M(t,!0),Yr(e,Gs);let n=Z(t,`privacyAccepted`,7),r=Z(t,`marketingOptIn`,7),i=Z(t,`hasAttemptedSubmit`,7),a=Z(t,`onPrivacyChanged`,7),o=Z(t,`onMarketingChanged`,7);var s={get privacyAccepted(){return n()},set privacyAccepted(e){n(e),I()},get marketingOptIn(){return r()},set marketingOptIn(e){r(e),I()},get hasAttemptedSubmit(){return i()},set hasAttemptedSubmit(e){i(e),I()},get onPrivacyChanged(){return a()},set onPrivacyChanged(e){a(e),I()},get onMarketingChanged(){return o()},set onMarketingChanged(e){o(e),I()}},c=Ws(),l=z(c);let u;var d=z(l);ri(d),Ne(2),j(l);var f=V(l,2),p=z(f);return ri(p),Ne(2),j(f),j(c),H(()=>{u=$r(l,1,`check svelte-19pmjwi`,null,u,{error:i()&&!n()}),ii(d,n()),ii(p,r())}),K(`change`,d,e=>a()(e.target.checked)),K(`change`,p,e=>o()(e.target.checked)),J(e,c),N(s)}vr([`change`]),Q(Ks,{privacyAccepted:{},marketingOptIn:{},hasAttemptedSubmit:{},onPrivacyChanged:{},onMarketingChanged:{}},[],[],{mode:`open`});var qs=q(`<span class="spacer"></span> <!>`,1),Js=q(`<div class="error-state svelte-1ubcp68"><div class="error-icon svelte-1ubcp68">!</div> <p class="error-title svelte-1ubcp68">Unable to load payment form</p> <p class="error-msg svelte-1ubcp68"> </p> <button class="btn btn-primary svelte-1ubcp68">Start over</button></div>`),Ys=q(`<div id="peach-container" class="svelte-1ubcp68"></div>`),Xs=q(`<div class="payment-overlay svelte-1ubcp68"><div class="payment-dialog svelte-1ubcp68"><div class="page-header"><h2>Payment</h2> <!></div> <div class="body svelte-1ubcp68"><!></div></div></div>`),Zs={hash:`svelte-1ubcp68`,code:`.payment-overlay.svelte-1ubcp68 {position:fixed;inset:0;\r
|
|
29
29
|
/* Above bw-checkout's own .bw-modal-overlay (z-index 10000) so this reads as a second dialog opening\r
|
|
30
30
|
on top of the checkout modal, not content living inside it. */z-index:10001;background:rgba(0, 0, 0, 0.5);display:flex;align-items:center;justify-content:center;padding:16px;}.payment-dialog.svelte-1ubcp68 {display:flex;flex-direction:column;width:100%;max-width:480px;height:min(700px, 90vh);background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);box-shadow:var(--bw-shadow-3);overflow:hidden;}.body.svelte-1ubcp68 {flex:1;\r
|
|
31
31
|
/* A definite height (not just flex:1 alone) so #peach-container's own height:100% below has something\r
|
|
32
32
|
real to resolve against, and so this scrolls as a single region if content overflows - Peach's own\r
|
|
33
33
|
root is \`height: inherit\`, so without that it collapses to its 360px fallback regardless of how tall\r
|
|
34
34
|
the card form actually gets (e.g. once billing address fields are showing), and its submit button\r
|
|
35
|
-
ends up overlapping the fields above it. */min-height:0;overflow-y:auto;padding:16px;}#peach-container.svelte-1ubcp68 {height:100%;}.error-state.svelte-1ubcp68 {text-align:center;padding:32px 16px;}.error-icon.svelte-1ubcp68 {width:48px;height:48px;border-radius:50%;border:2px solid var(--bw-color-border);display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--bw-color-text-secondary);margin:0 auto 16px;}.error-title.svelte-1ubcp68 {font-size:16px;font-weight:600;margin-bottom:8px;}.error-msg.svelte-1ubcp68 {font-size:14px;color:var(--bw-color-text-secondary);}.error-state.svelte-1ubcp68 .btn:where(.svelte-1ubcp68) {margin-top:16px;}`};function
|
|
35
|
+
ends up overlapping the fields above it. */min-height:0;overflow-y:auto;padding:16px;}#peach-container.svelte-1ubcp68 {height:100%;}.error-state.svelte-1ubcp68 {text-align:center;padding:32px 16px;}.error-icon.svelte-1ubcp68 {width:48px;height:48px;border-radius:50%;border:2px solid var(--bw-color-border);display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--bw-color-text-secondary);margin:0 auto 16px;}.error-title.svelte-1ubcp68 {font-size:16px;font-weight:600;margin-bottom:8px;}.error-msg.svelte-1ubcp68 {font-size:14px;color:var(--bw-color-text-secondary);}.error-state.svelte-1ubcp68 .btn:where(.svelte-1ubcp68) {margin-top:16px;}`};function Qs(e,t){M(t,!0),Yr(e,Zs);let n=Z(t,`checkoutId`,7),r=Z(t,`entityId`,7),i=Z(t,`onPaymentComplete`,7),a=Z(t,`expiresAt`,7);function o(e,t){let n=t?.result??t;return{status:e,resultCode:n?.code??n?.resultCode??t?.errorCode??void 0,description:n?.description??t?.message??void 0}}let s=L(!1),c=L(``),l=null;Lr(()=>{(async()=>{try{await ja();let e=window.Checkout;if(!e){R(s,!0),R(c,`Payment SDK not loaded`);return}l=e.initiate({checkoutId:n(),key:r(),customisations:{card:{submitButtonText:`Pay Now`},theme:{brand:{primary:`#E30613`}}},eventHandlers:{onCompleted:e=>{d(),i()(o(`completed`,e))},onCancelled:e=>{d(),i()(o(`cancelled`,e))},onExpired:e=>{d(),i()(o(`expired`,e))},onError:e=>{console.error(`[booking-widget] Peach reported onError for checkoutId ${n()} - left untouched, Peach owns retries. Payload:`,e)}}}),l.render(`#peach-container`)}catch(e){u(String(e)),R(s,!0),R(c,String(e),!0)}})()});function u(e){console.error(`[booking-widget] Peach checkout did not render: ${e}. SDK loaded from ${ka()??`an already-present window.Checkout`} for checkoutId ${n()}. If that environment does not match the checkout API this cart came from, set peachEnv on createBookingHost (or window.BW_CHECKOUT_PEACH_SDK_URL).`)}function d(){l&&=(l.unmount(),null)}Rr(d);var f={get checkoutId(){return n()},set checkoutId(e){n(e),I()},get entityId(){return r()},set entityId(e){r(e),I()},get onPaymentComplete(){return i()},set onPaymentComplete(e){i(e),I()},get expiresAt(){return a()},set expiresAt(e){a(e),I()}},p=Xs(),m=z(p),h=z(m),g=V(z(h),2),_=e=>{var t=qs();ms(V(B(t),2),{get expiresAt(){return a()}}),J(e,t)};X(g,e=>{a()&&e(_)}),j(h);var v=V(h,2),y=z(v),b=e=>{var t=Js(),n=V(z(t),4),r=z(n,!0);j(n);var a=V(n,2);j(t),H(()=>Y(r,G(c)||`The checkout session may have expired.`)),K(`click`,a,()=>i()({status:`error`})),J(e,t)},x=e=>{J(e,Ys())};return X(y,e=>{G(s)?e(b):e(x,-1)}),j(v),j(m),j(p),K(`click`,m,e=>e.stopPropagation()),J(e,p),N(f)}vr([`click`]),Q(Qs,{checkoutId:{},entityId:{},onPaymentComplete:{},expiresAt:{}},[],[],{mode:`open`});var $s=q(`<div class="spinner"></div> <p class="hint svelte-16gfovn">Verifying payment...</p>`,1),ec=q(`<button class="btn btn-primary">Check Again</button>`),tc=q(`<div class="icon pending svelte-16gfovn">…</div> <h2 class="svelte-16gfovn">Still Checking Your Payment</h2> <p class="desc svelte-16gfovn"> </p> <div class="actions svelte-16gfovn"><!> <button class="btn btn-outline">Close</button></div>`,1),nc=q(`<div class="icon partial svelte-16gfovn">!</div> <h2 class="svelte-16gfovn">Booking Incomplete</h2> <p class="desc svelte-16gfovn"> </p> <button class="btn btn-outline">Close</button>`,1),rc=q(`<button class="btn btn-primary">Done</button>`),ic=q(`<button class="btn btn-outline">Try Again</button>`),ac=q(`<button class="btn btn-outline">Close</button>`),oc=q(`<div> </div> <h2 class="svelte-16gfovn"> </h2> <p class="desc svelte-16gfovn"> </p> <!>`,1),sc=q(`<div class="result svelte-16gfovn"><!></div>`),cc={hash:`svelte-16gfovn`,code:`.result.svelte-16gfovn {display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px;height:100%;text-align:center;}.hint.svelte-16gfovn {color:var(--bw-color-text-secondary);font-size:14px;margin-top:16px;}.icon.svelte-16gfovn {width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:32px;margin-bottom:20px;}.icon.success.svelte-16gfovn {border:2px solid var(--bw-color-success);color:var(--bw-color-success);background:rgba(76, 175, 80, 0.08);}.icon.failure.svelte-16gfovn {border:2px solid var(--bw-color-error);color:var(--bw-color-error);background:var(--bw-color-primary-light);}\r
|
|
36
36
|
/* Deliberately its own amber, not success green or failure red - payment succeeded (so red reads as an\r
|
|
37
37
|
alarming false alarm) but the booking is not fully confirmed (so green would be premature). The same is\r
|
|
38
38
|
true either way round: 'pending' is not confirmed yet, 'partial' will not be for some of its items. */.icon.pending.svelte-16gfovn,\r
|
|
39
|
-
.icon.partial.svelte-16gfovn {border:2px solid #B8860B;color:#B8860B;background:rgba(184, 134, 11, 0.08);}h2.svelte-16gfovn {font-size:20px;font-weight:700;margin-bottom:8px;}.desc.svelte-16gfovn {color:var(--bw-color-text-secondary);font-size:14px;margin-bottom:28px;max-width:280px;line-height:1.5;}.actions.svelte-16gfovn {display:flex;flex-direction:column;gap:8px;width:100%;max-width:220px;}`};function
|
|
39
|
+
.icon.partial.svelte-16gfovn {border:2px solid #B8860B;color:#B8860B;background:rgba(184, 134, 11, 0.08);}h2.svelte-16gfovn {font-size:20px;font-weight:700;margin-bottom:8px;}.desc.svelte-16gfovn {color:var(--bw-color-text-secondary);font-size:14px;margin-bottom:28px;max-width:280px;line-height:1.5;}.actions.svelte-16gfovn {display:flex;flex-direction:column;gap:8px;width:100%;max-width:220px;}`};function lc(e,t){M(t,!0),Yr(e,cc);let n=Z(t,`status`,7),r=Z(t,`verifying`,7),i=Z(t,`onDone`,7),a=Z(t,`onRetry`,7),o=Z(t,`onCheckAgain`,7),s=P(()=>n()?.outcome===`successful`),c=P(()=>n()?.outcome===`pending`),l=P(()=>n()?.outcome===`partial`),u=P(()=>n()?.outcome===`failed`&&n().retryPayment!==!1);var d={get status(){return n()},set status(e){n(e),I()},get verifying(){return r()},set verifying(e){r(e),I()},get onDone(){return i()},set onDone(e){i(e),I()},get onRetry(){return a()},set onRetry(e){a(e),I()},get onCheckAgain(){return o()},set onCheckAgain(e){o(e),I()}},f=sc(),p=z(f),m=e=>{var t=$s();Ne(2),J(e,t)},h=e=>{var t=tc(),r=V(B(t),4),a=z(r,!0);j(r);var s=V(r,2),c=z(s),l=e=>{var t=ec();K(`click`,t,function(...e){o()?.apply(this,e)}),J(e,t)};X(c,e=>{o()&&e(l)});var u=V(c,2);j(s),H(()=>Y(a,n()?.resultDescription??`We couldn't confirm this payment yet. Please don't try to pay again for now - we'll email you as soon as we know where it stands.`)),K(`click`,u,function(...e){i()?.apply(this,e)}),J(e,t)},g=e=>{var t=nc(),r=V(B(t),4),a=z(r,!0);j(r);var o=V(r,2);H(()=>Y(a,n()?.resultDescription??`Your payment succeeded, but we couldn't confirm every item in your booking. Please contact us with your order details.`)),K(`click`,o,function(...e){i()?.apply(this,e)}),J(e,t)},_=e=>{var t=oc(),r=B(t);let o;var c=z(r,!0);j(r);var l=V(r,2),d=z(l,!0);j(l);var f=V(l,2),p=z(f,!0);j(f);var m=V(f,2),h=e=>{var t=rc();K(`click`,t,function(...e){i()?.apply(this,e)}),J(e,t)},g=e=>{var t=ic();K(`click`,t,function(...e){a()?.apply(this,e)}),J(e,t)},_=e=>{var t=ac();K(`click`,t,function(...e){i()?.apply(this,e)}),J(e,t)};X(m,e=>{G(s)?e(h):G(u)?e(g,1):e(_,-1)}),H(()=>{o=$r(r,1,`icon svelte-16gfovn`,null,o,{success:G(s),failure:!G(s)}),Y(c,G(s)?`✓`:`!`),Y(d,G(s)?`Payment Successful`:`Payment Failed`),Y(p,G(s)?`Your booking has been confirmed.`:n()?.resultDescription??`Something went wrong. Please try again.`)}),J(e,t)};return X(p,e=>{r()?e(m):G(c)?e(h,1):G(l)?e(g,2):e(_,-1)}),j(f),J(e,f),N(d)}vr([`click`]),Q(lc,{status:{},verifying:{},onDone:{},onRetry:{},onCheckAgain:{}},[],[],{mode:`open`});var uc=q(`<p class="edit-error svelte-15l4305"> </p>`),dc=q(`<div class="saving-overlay svelte-15l4305"><div class="spinner"></div></div>`),fc=q(`<div class="edit-view svelte-15l4305"><div class="page-header"><button class="icon-btn" aria-label="Back">←</button> <h2>Edit Item</h2> <span class="spacer"></span> <button class="icon-btn" aria-label="Close">×</button></div> <!> <div><!> <!></div></div>`),pc={hash:`svelte-15l4305`,code:`.edit-view.svelte-15l4305 {display:flex;flex-direction:column;height:100%;max-height:100%;overflow:hidden;}.edit-error.svelte-15l4305 {margin:0;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;}.edit-body.svelte-15l4305 {position:relative;display:flex;flex-direction:column;flex:1;min-height:0;}.edit-body.saving.svelte-15l4305 {pointer-events:none;}.saving-overlay.svelte-15l4305 {position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255, 255, 255, 0.7);}`};function mc(e,t){M(t,!0),Yr(e,pc);let n=Z(t,`cartItem`,7),r=Z(t,`product`,7),i=Z(t,`api`,7),a=Z(t,`wizardPages`,7),o=Z(t,`editPages`,7),s=Z(t,`autoSelectSingleTimeSlot`,7,!1),c=Z(t,`onBack`,7),l=Z(t,`onClose`,7),u=Z(t,`onUpdated`,7),d=Z(t,`onPriceChanged`,7),f=L(!1),p=L(null);async function m(e){R(f,!0),R(p,null);try{await i().updateCartItem(n().id,{productId:e.productId,optionId:e.optionId,unitItems:Fi(e.units),availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),u()()}catch(e){if(Li(e)){R(p,`This item's price has changed. Please check the updated price and save again.`),await d()?.();return}R(p,e instanceof Ii&&e.status===424?`This change could not be saved - the supplier rejected it. Please try different options.`:`Something went wrong saving your changes. Please try again.`,!0)}finally{R(f,!1)}}var h={get cartItem(){return n()},set cartItem(e){n(e),I()},get product(){return r()},set product(e){r(e),I()},get api(){return i()},set api(e){i(e),I()},get wizardPages(){return a()},set wizardPages(e){a(e),I()},get editPages(){return o()},set editPages(e){o(e),I()},get autoSelectSingleTimeSlot(){return s()},set autoSelectSingleTimeSlot(e=!1){s(e),I()},get onBack(){return c()},set onBack(e){c(e),I()},get onClose(){return l()},set onClose(e){l(e),I()},get onUpdated(){return u()},set onUpdated(e){u(e),I()},get onPriceChanged(){return d()},set onPriceChanged(e){d(e),I()}},g=fc(),_=z(g),v=z(_),y=V(v,6);j(_);var b=V(_,2),x=e=>{var t=uc(),n=z(t,!0);j(t),H(()=>Y(n,G(p))),J(e,t)};X(b,e=>{G(p)&&e(x)});var S=V(b,2);let C;var w=z(S);{let e=P(()=>a()??Wa),t=P(()=>o()??a()??Wa);$o(w,{get product(){return r()},get api(){return i()},get wizardPages(){return G(e)},get editPages(){return G(t)},get editItem(){return n()},get autoSelectSingleTimeSlot(){return s()},onComplete:m,get onCancel(){return c()}})}var T=V(w,2),E=e=>{J(e,dc())};return X(T,e=>{G(f)&&e(E)}),j(S),j(g),H(()=>C=$r(S,1,`edit-body svelte-15l4305`,null,C,{saving:G(f)})),K(`click`,v,function(...e){c()?.apply(this,e)}),K(`click`,y,function(...e){l()?.apply(this,e)}),J(e,g),N(h)}vr([`click`]),Q(mc,{cartItem:{},product:{},api:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},onBack:{},onClose:{},onUpdated:{},onPriceChanged:{}},[],[],{mode:`open`});var hc=q(`<div class="loading-center" style="height:100%"><div class="spinner"></div></div>`),gc=q(`<p class="pay-error svelte-i0rtg0"> </p>`),_c=q(`<div class="page-header"><button class="icon-btn" aria-label="Back">←</button> <h2>Checkout</h2> <span class="spacer"></span> <!> <button class="icon-btn" aria-label="Close">×</button></div> <div class="body svelte-i0rtg0"><!> <div class="contact-header svelte-i0rtg0"><span class="contact-title svelte-i0rtg0">Contact Details</span> <span class="required-hint svelte-i0rtg0">* Required Fields</span></div> <!> <div style="margin-top:24px"><!></div></div> <div class="pay-bar svelte-i0rtg0"><span class="pay-bar-total svelte-i0rtg0"> </span> <button class="pay-bar-btn svelte-i0rtg0"> </button></div>`,1),vc=q(`<p class="cart-detail svelte-i0rtg0"> </p>`),yc=q(`<div class="cart-unit-line svelte-i0rtg0"><span class="cart-unit-label svelte-i0rtg0"> </span> <span class="cart-unit-price svelte-i0rtg0"> </span></div>`),bc=q(`<div class="cart-card svelte-i0rtg0"><div class="cart-card-top svelte-i0rtg0"><h3 class="cart-product svelte-i0rtg0"> </h3> <span class="cart-item-total svelte-i0rtg0"> </span></div> <div class="cart-detail-lines svelte-i0rtg0"><!> <p class="cart-detail svelte-i0rtg0"> </p></div> <div class="cart-divider svelte-i0rtg0"></div> <div class="cart-units svelte-i0rtg0"></div> <div class="cart-actions svelte-i0rtg0"><button class="action-edit svelte-i0rtg0">Edit</button> <button class="action-remove svelte-i0rtg0">Remove</button></div></div>`),xc=q(`<div class="page-header"><h2>Your cart</h2> <span class="spacer"></span> <!> <button class="keep-shopping-btn svelte-i0rtg0">+ Keep shopping</button></div> <div class="body svelte-i0rtg0"><!> <div class="cart-total-divider svelte-i0rtg0"></div> <div class="cart-total-row svelte-i0rtg0"><span>Total payable today</span> <span class="cart-total-amount svelte-i0rtg0"> </span></div></div> <div class="action-bar"><button class="btn btn-primary">Checkout</button></div>`,1),Sc=q(`<div class="modal svelte-i0rtg0"><!></div>`),Cc={hash:`svelte-i0rtg0`,code:`.modal.svelte-i0rtg0 {display:flex;flex-direction:column;height:100%;max-height:100%;overflow:hidden;background:var(--bw-color-surface);}.body.svelte-i0rtg0 {flex:1;overflow-y:auto;padding:16px;}\r
|
|
40
40
|
\r
|
|
41
41
|
/* -- Cart view -- */.keep-shopping-btn.svelte-i0rtg0 {padding:8px 16px;background:none;border:2px solid #222;border-radius:var(--bw-radius-md);font-size:13px;font-weight:600;color:#222;cursor:pointer;}.keep-shopping-btn.svelte-i0rtg0:hover {background:#f5f5f5;}.cart-card.svelte-i0rtg0 {border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);padding:20px;margin-bottom:16px;}.cart-card-top.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:flex-start;gap:16px;}.cart-product.svelte-i0rtg0 {font-size:16px;font-weight:700;flex:1;}.cart-item-total.svelte-i0rtg0 {font-size:16px;font-weight:800;white-space:nowrap;}.cart-detail-lines.svelte-i0rtg0 {margin-top:4px;}.cart-detail.svelte-i0rtg0 {font-size:13px;color:var(--bw-color-text-secondary);line-height:1.5;}.cart-divider.svelte-i0rtg0 {border-top:1px dashed var(--bw-color-border);margin:14px 0;}.cart-units.svelte-i0rtg0 {display:flex;flex-direction:column;gap:6px;margin-bottom:14px;}.cart-unit-line.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;font-size:14px;}.cart-unit-label.svelte-i0rtg0 {color:#333;}.cart-unit-price.svelte-i0rtg0 {font-weight:600;font-variant-numeric:tabular-nums;}.cart-actions.svelte-i0rtg0 {display:flex;gap:16px;}.action-edit.svelte-i0rtg0 {background:none;border:none;font-size:13px;font-weight:700;color:var(--bw-color-primary);padding:0;cursor:pointer;}.action-edit.svelte-i0rtg0:hover {text-decoration:underline;}.action-remove.svelte-i0rtg0 {background:none;border:none;font-size:13px;font-weight:600;color:#555;padding:0;cursor:pointer;}.action-remove.svelte-i0rtg0:hover {text-decoration:underline;}.cart-total-divider.svelte-i0rtg0 {border-top:3px solid #111;margin:8px 0 20px;}.cart-total-row.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;font-size:16px;font-weight:700;margin-bottom:20px;}.cart-total-amount.svelte-i0rtg0 {font-size:20px;font-weight:800;}\r
|
|
42
|
-
/* -- Contact view -- */.pay-error.svelte-i0rtg0 {margin:0 0 16px;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;border-radius:var(--bw-radius-md);}.contact-header.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}.contact-title.svelte-i0rtg0 {font-size:16px;font-weight:700;}.required-hint.svelte-i0rtg0 {font-size:12px;color:var(--bw-color-primary);}.pay-bar.svelte-i0rtg0 {display:flex;align-items:center;flex-shrink:0;background:var(--bw-color-primary);color:white;position:sticky;bottom:0;}.pay-bar-total.svelte-i0rtg0 {padding:0 20px;font-size:16px;font-weight:700;}.pay-bar-btn.svelte-i0rtg0 {flex:1;display:flex;align-items:center;justify-content:flex-end;gap:8px;height:52px;padding:0 20px;background:none;border:none;color:white;font-size:16px;font-weight:700;}.pay-bar-btn.svelte-i0rtg0:disabled {opacity:0.7;cursor:default;}`};function
|
|
42
|
+
/* -- Contact view -- */.pay-error.svelte-i0rtg0 {margin:0 0 16px;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;border-radius:var(--bw-radius-md);}.contact-header.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}.contact-title.svelte-i0rtg0 {font-size:16px;font-weight:700;}.required-hint.svelte-i0rtg0 {font-size:12px;color:var(--bw-color-primary);}.pay-bar.svelte-i0rtg0 {display:flex;align-items:center;flex-shrink:0;background:var(--bw-color-primary);color:white;position:sticky;bottom:0;}.pay-bar-total.svelte-i0rtg0 {padding:0 20px;font-size:16px;font-weight:700;}.pay-bar-btn.svelte-i0rtg0 {flex:1;display:flex;align-items:center;justify-content:flex-end;gap:8px;height:52px;padding:0 20px;background:none;border:none;color:white;font-size:16px;font-weight:700;}.pay-bar-btn.svelte-i0rtg0:disabled {opacity:0.7;cursor:default;}`};function wc(e,t){M(t,!0),Yr(e,Cc);let n=Z(t,`cart`,7),r=Z(t,`api`,7),i=Z(t,`wizardPages`,7),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`onClose`,7),c=Z(t,`onOrderConfirmed`,7);_n(()=>na(e=>{e.type===`cart:updated`&&`cart`in e&&e.cart===null&&G(l)!==`result`&&T(),e.type===`payment:timed-out`&&b.onPaymentTimedOut()}));let l=L(`cart`),u=L(null),d=L(!0),f=L(!1),p=L(!1),m=L(!1),h=L(``),g=L(``),_=L(``),v=L(``),y=L(null),b=Ps({getApi:()=>r(),getCart:()=>n(),reloadCart:ne,notifyCartUpdated:ie,refreshDeadlineAfterPay:()=>void re(),setView:e=>{R(l,e,!0)},close:T,onOrderConfirmed:()=>c()()}),x=L(Qt(new Map));async function S(){try{let e=[...new Set(n().items.map(e=>e.productId))],t=await Promise.all(e.map(e=>r().getProduct(e))),i=new Map;for(let e of t)i.set(e.id,e);R(x,i,!0)}catch{}finally{R(d,!1)}}S(),b.resumeInterruptedPayment();let C=P(()=>()=>Xa(Fs(n()),Is(n()),2,2)),w=P(()=>ia(n()));Rr(()=>{b.dispose(),$({type:`modal:close`})});function T(){$({type:`modal:close`}),s()()}function E(){T()}function ee(e){R(u,e,!0),R(l,`edit`)}async function te(){await ne()&&(R(l,`cart`),ie(n()))}async function D(e){try{await r().removeCartItem(e.id)}catch(e){if(!Ri(e))throw e;T();return}await ne()&&(ie(n()),n().items.length===0&&T())}async function ne(){try{return n(await r().getCart()),!0}catch(e){if(!Ri(e))throw e;return T(),!1}}async function re(){try{n(await r().getCart()),ie(n())}catch{}}function ie(e){$({type:`cart:updated`,cart:e})}async function ae(){R(m,!0),!(!G(y)?.isValid()||!G(f))&&await b.payNow(G(y).getContact())}var O={get cart(){return n()},set cart(e){n(e),I()},get api(){return r()},set api(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get onClose(){return s()},set onClose(e){s(e),I()},get onOrderConfirmed(){return c()},set onOrderConfirmed(e){c(e),I()}},oe=Sc(),se=z(oe),ce=e=>{J(e,hc())},le=e=>{var t=Er(),n=B(t),r=e=>{Qs(e,{get checkoutId(){return b.paymentResult.checkoutId},get entityId(){return b.paymentResult.entityId},get expiresAt(){return G(w)},get onPaymentComplete(){return b.onPaymentComplete}})},i=e=>{J(e,hc())};X(n,e=>{b.paymentResult?e(r):e(i,-1)}),J(e,t)},ue=e=>{{let t=P(()=>b.resultStatus?.outcome===`pending`?b.checkStatusAgain:void 0);lc(e,{get status(){return b.resultStatus},get verifying(){return b.isConfirming},onDone:()=>{$({type:`modal:close`})},get onRetry(){return b.retry},get onCheckAgain(){return G(t)}})}},de=e=>{{let t=P(()=>G(x).get(G(u).productId));mc(e,{get cartItem(){return G(u)},get product(){return G(t)},get api(){return r()},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()},onBack:()=>{R(l,`cart`)},onClose:T,onUpdated:te,onPriceChanged:S})}},fe=P(()=>G(l)===`edit`&&G(u)&&G(x).get(G(u).productId)),pe=e=>{var t=_c(),n=B(t),r=z(n),i=V(r,6);ms(i,{get expiresAt(){return G(w)}});var a=V(i,2);j(n);var o=V(n,2),s=z(o),c=e=>{var t=gc(),n=z(t,!0);j(t),H(()=>Y(n,b.payError)),J(e,t)};X(s,e=>{b.payError&&e(c)});var u=V(s,4);pi(Us(u,{get hasAttemptedSubmit(){return G(m)},get firstName(){return G(h)},set firstName(e){R(h,e,!0)},get lastName(){return G(g)},set lastName(e){R(g,e,!0)},get emailAddress(){return G(_)},set emailAddress(e){R(_,e,!0)},get phoneNumber(){return G(v)},set phoneNumber(e){R(v,e,!0)}}),e=>R(y,e,!0),()=>G(y));var d=V(u,2);Ks(z(d),{get privacyAccepted(){return G(f)},get marketingOptIn(){return G(p)},get hasAttemptedSubmit(){return G(m)},onPrivacyChanged:e=>{R(f,e,!0)},onMarketingChanged:e=>{R(p,e,!0)}}),j(d),j(o);var x=V(o,2),S=z(x),E=z(S,!0);j(S);var ee=V(S,2),te=z(ee,!0);j(ee),j(x),H(e=>{Y(E,e),ee.disabled=b.isPaying,Y(te,b.isPaying?`Paying…`:`Pay Now`)},[()=>G(C)()]),K(`click`,r,()=>{R(l,`cart`)}),K(`click`,a,T),K(`click`,ee,ae),J(e,t)},me=e=>{var t=xc(),r=B(t),i=V(z(r),4);ms(i,{get expiresAt(){return G(w)}});var a=V(i,2);j(r);var o=V(r,2),s=z(o);Ur(s,17,()=>n().items,zr,(e,t)=>{var n=bc(),r=z(n),i=z(r),a=z(i,!0);j(i);var o=V(i,2),s=z(o,!0);j(o),j(r);var c=V(r,2),l=z(c),u=e=>{var n=vc(),r=z(n,!0);j(n),H(e=>Y(r,e),[()=>Bs(G(t))]),J(e,n)},d=P(()=>Bs(G(t)));X(l,e=>{G(d)&&e(u)});var f=V(l,2),p=z(f,!0);j(f),j(c);var m=V(c,4);Ur(m,21,()=>zs(G(t),G(x)),zr,(e,n)=>{var r=yc(),i=z(r),a=z(i);j(i);var o=V(i,2),s=z(o,!0);j(o),j(r),H(e=>{Y(a,`${G(n).title??``} × ${G(n).quantity??``}`),Y(s,e)},[()=>Xa(G(n).linePrice,G(t).currencyCode,2,0)]),J(e,r)}),j(m);var h=V(m,2),g=z(h),_=V(g,2);j(h),j(n),H((e,t,n)=>{Y(a,e),Y(s,t),Y(p,n)},[()=>Ls(G(t),G(x)),()=>Xa(G(t).amount,G(t).currencyCode,2,0),()=>Rs(G(t),G(x))]),K(`click`,g,()=>ee(G(t))),K(`click`,_,()=>D(G(t))),J(e,n)});var c=V(s,4),u=V(z(c),2),d=z(u,!0);j(u),j(c),j(o);var f=V(o,2),p=z(f);j(f),H(e=>Y(d,e),[()=>G(C)()]),K(`click`,a,E),K(`click`,p,()=>{R(l,`contact`)}),J(e,t)};return X(se,e=>{G(d)?e(ce):G(l)===`payment`?e(le,1):G(l)===`result`?e(ue,2):G(fe)?e(de,3):G(l)===`contact`?e(pe,4):e(me,-1)}),j(oe),J(e,oe),N(O)}vr([`click`]),Q(wc,{cart:{},api:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},onClose:{},onOrderConfirmed:{}},[],[],{mode:`open`});var Tc=q(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Ec=q(`<div style="height:100vh"><!></div>`),Dc=q(`<div class="loading-center" style="height:100vh;color:var(--bw-color-text-secondary)">No items in cart.</div>`),Oc=q(`<div class="bw-widget svelte-16hmqxh"><!></div>`),kc={hash:`svelte-16hmqxh`,code:`\r
|
|
43
43
|
/* display: contents - a plain box here would break CheckoutModal's own .modal{height:100%}, which needs\r
|
|
44
|
-
to resolve against this component's real parent, not an unsized wrapper inserted in between. */.bw-widget.svelte-16hmqxh {display:contents;}`};function
|
|
44
|
+
to resolve against this component's real parent, not an unsized wrapper inserted in between. */.bw-widget.svelte-16hmqxh {display:contents;}`};function Ac(e,t){M(t,!0),Yr(e,kc);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`wizardPages`,7,Wa),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=P(()=>a()??i()),c=L(null),l=L(!0),u=L(!1),d=!1;async function f(){let e=n().cartToken!==``;try{R(c,await n().getCart(),!0)}catch(t){R(c,null),e&&Ri(t)&&(p(),R(u,!0))}R(l,!1)}f();function p(){r()?.reset(),$({type:`cart:updated`,cart:null}),$({type:`cart:expired`})}function m(){R(u,!1),$({type:`modal:close`}),f()}_n(()=>na(e=>{if(e.type===`cart:updated`&&`cart`in e){if(d&&e.cart===null){d=!1;return}R(c,e.cart,!0)}}));var h={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e=Wa){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()}},g=Oc(),_=z(g),v=e=>{J(e,Tc())},y=e=>{wc(e,{get cart(){return G(c)},get api(){return n()},get wizardPages(){return i()},get editPages(){return G(s)},get autoSelectSingleTimeSlot(){return o()},onClose:()=>$({type:`modal:close`}),onOrderConfirmed:()=>{let e=G(c).items.reduce((e,t)=>e+t.amount,0),t=G(c).items[0]?.currencyCode??`ZAR`;$({type:`order:complete`,cartToken:G(c).cartToken??``,value:e,currency:t}),r()?.reset(),d=!0,$({type:`cart:updated`,cart:null})}})},b=e=>{var t=Ec();ga(z(t),{onStartAgain:m}),j(t),J(e,t)},x=e=>{J(e,Dc())};return X(_,e=>{G(l)?e(v):G(c)&&G(c).items.length>0?e(y,1):G(u)?e(b,2):e(x,-1)}),j(g),J(e,g),N(h)}Q(Ac,{api:{},cartManager:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{}},[],[],{mode:`open`});var jc=q(`<div class="bw-modal-overlay svelte-5e515v"><div class="bw-modal-inner svelte-5e515v"><!></div></div>`),Mc={hash:`svelte-5e515v`,code:`.bw-modal-overlay.svelte-5e515v {position:fixed;inset:0;z-index:10000;background:rgba(0, 0, 0, 0.5);}.bw-modal-inner.svelte-5e515v {width:100%;max-width:900px;height:95vh;margin:2.5vh auto;border-radius:12px;background:#fff;overflow:hidden;box-shadow:0 8px 40px rgba(0, 0, 0, 0.3);}`};function Nc(e,t){M(t,!0),Yr(e,Mc);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`wizardPages`,7,Wa),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`mode`,7,`inline`),c=Z(t,`open`,7),l=Z(t,`onClose`,7),u=va(),d=P(()=>ya(n()??u?.api,`Checkout`,`api`)),f=P(()=>r()??u?.cartManager),p=P(()=>c()??u?.isCheckoutOpen??!0),m=P(()=>l()??(u?()=>u.closeCheckout():void 0)),h=P(()=>s()===`modal`),g=L(!1),_=P(()=>!G(h)||G(p)&&!G(g)),v=!1,y=!1;_n(()=>{let e=G(p);e&&!y&&(R(g,!1),v=!1),y=e});function b(){$({type:`modal:close`})}_n(()=>na(e=>{e.type!==`modal:close`||!G(h)||v||G(_)&&(v=!0,R(g,!0),G(m)?.())}));function x(e){G(_)&&G(h)&&e.key===`Escape`&&b()}var S={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e=Wa){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get mode(){return s()},set mode(e=`inline`){s(e),I()},get open(){return c()},set open(e){c(e),I()},get onClose(){return l()},set onClose(e){l(e),I()}},C=Er();_r(`keydown`,$t,x);var w=B(C),T=e=>{var t=Er(),n=B(t),r=e=>{var t=jc(),n=z(t);Ac(z(n),{get api(){return G(d)},get cartManager(){return G(f)},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()}}),j(n),j(t),Xr(t,e=>Os?.(e)),K(`click`,t,b),K(`click`,n,e=>e.stopPropagation()),J(e,t)};X(n,e=>{G(_)&&e(r)}),J(e,t)},E=e=>{Ac(e,{get api(){return G(d)},get cartManager(){return G(f)},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()}})};return X(w,e=>{G(h)?e(T):e(E,-1)}),J(e,C),N(S)}vr([`click`]),Q(Nc,{api:{},cartManager:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},mode:{},open:{},onClose:{}},[],[],{mode:`open`});var Pc=q(`<div class="loading-center"><div class="spinner"></div></div>`),Fc=q(`<div style="display: contents"><!></div>`);function Ic(e,t){M(t,!0);let n=Z(t,`wizard-pages`,7,``),r=Z(t,`edit-pages`,7,``),i=Z(t,`is-modal`,7,void 0),a=Z(t,`auto-select-single-time-slot`,7,void 0),o=P(()=>a()!==void 0),s=P(()=>i()===void 0?`inline`:`modal`),{api:c,cartManager:l,ready:u,host:d}=ss(),f=L(!1);u.then(()=>{R(f,!0)});let p=P(()=>Ka(n())),m=P(()=>Ja(n(),r())),h=L(null);function g(e,t){(G(h)?.closest(`bw-checkout`)??document.body).dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}function _(){d.openCheckout()}function v(){d.closeCheckout()}let y=!1,b=!1;_n(()=>{let e=d.isCheckoutOpen;e&&!b&&(y=!1),b=e}),_n(()=>na(e=>{e.type===`modal:close`&&!y&&b&&(y=!0,g(`bw:close`,{})),e.type===`order:complete`&&g(`bw:order-confirmed`,{cartToken:e.cartToken,value:e.value,currency:e.currency})}));var x={open:_,close:v,get"wizard-pages"(){return n()},set"wizard-pages"(e=``){n(e),I()},get"edit-pages"(){return r()},set"edit-pages"(e=``){r(e),I()},get"is-modal"(){return i()},set"is-modal"(e=void 0){i(e),I()},get"auto-select-single-time-slot"(){return a()},set"auto-select-single-time-slot"(e=void 0){a(e),I()}},S=Fc(),C=z(S),w=e=>{Nc(e,{get api(){return c},get cartManager(){return l},get wizardPages(){return G(p)},get editPages(){return G(m)},get autoSelectSingleTimeSlot(){return G(o)},get mode(){return G(s)},get open(){return d.isCheckoutOpen},onClose:()=>d.closeCheckout()})},T=e=>{J(e,Pc())};return X(C,e=>{G(f)?e(w):G(s)===`inline`&&e(T,1)}),j(S),pi(S,e=>R(h,e),()=>G(h)),J(e,S),N(x)}customElements.define(`bw-checkout`,Q(Ic,{"wizard-pages":{},"edit-pages":{},"is-modal":{},"auto-select-single-time-slot":{}},[],[`open`,`close`]));var Lc={shouldBottomCloseOnModal:!0,autoSelectSingleTimeSlot:!1,autoOpenCheckout:!0,wizardPages:``,editPages:``,...window.bwOptions??{}},Rc=document.querySelector(`[checkout-key]`)?.getAttribute(`checkout-key`)??``;Na({apiBaseUrl:Ua,checkoutKey:Rc,autoOpenCheckout:Lc.autoOpenCheckout,shouldBottomCloseOnModal:Lc.shouldBottomCloseOnModal,autoSelectSingleTimeSlot:Lc.autoSelectSingleTimeSlot});var zc=Pa({apiBaseUrl:Ua,checkoutKey:Rc,autoOpenCheckout:Lc.autoOpenCheckout,shouldBottomCloseOnModal:Lc.shouldBottomCloseOnModal,onCartUpdated:e=>Bc(`bw:cart-updated`,{cart:e}),onCartExpired:()=>Bc(`bw:cart-expired`,{}),onCheckoutOpenChange:Gc});window.__bwServices={api:zc.api,cartManager:zc.cartManager,ready:zc.ready,host:zc};function Bc(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function Vc(e){document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,e,{once:!0}):e()}function Hc(){return[...document.querySelectorAll(`bw-cart`)]}function Uc(e){Hc().forEach(t=>{t.getAttribute(`display`)===`bar`&&(t.parentElement?.classList.toggle(`hidden`,e),e||(t.style.display=``))})}function Wc(){Hc().forEach(e=>{e.parentElement?.classList.remove(`hidden`),e.style.display=``}),zc.options.shouldBottomCloseOnModal&&Uc(zc.isCheckoutOpen)}function Gc(e){Bc(e?`bw:modal-open`:`bw:modal-close`,{}),zc.options.shouldBottomCloseOnModal&&Uc(e)}function Kc(){let e=document.querySelectorAll(`bw-configurator`),t=document.querySelectorAll(`bw-cart`),n=document.querySelectorAll(`bw-checkout`),r=[...e,...t,...n];Lc.wizardPages&&r.forEach(e=>{e.hasAttribute(`wizard-pages`)||e.setAttribute(`wizard-pages`,Lc.wizardPages)}),Lc.editPages&&n.forEach(e=>{e.hasAttribute(`edit-pages`)||e.setAttribute(`edit-pages`,Lc.editPages)}),[...e,...n].forEach(e=>{Lc.autoSelectSingleTimeSlot&&!e.hasAttribute(`auto-select-single-time-slot`)&&e.setAttribute(`auto-select-single-time-slot`,``)}),n.forEach(e=>{!e.hasAttribute(`is-modal`)&&!e.hasAttribute(`is-inline`)&&e.setAttribute(`is-modal`,``)}),e.forEach(e=>{e.addEventListener(`bw:cart-change`,()=>{Wc();let t=e.getAttribute(`on-cart-change`);t&&typeof window[t]==`function`&&window[t]()})})}Vc(Kc)})();
|