@lockerverse/react 0.2.154-dev.1 → 0.2.156
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 +74 -0
- package/dist/auction-catalog.css +3 -1
- package/dist/auction-item-layout.css +3 -0
- package/dist/auction-item.d.ts +2 -0
- package/dist/auction-item.d.ts.map +1 -1
- package/dist/auction-item.js +1 -1
- package/dist/auction-item.js.map +1 -1
- package/dist/custom-fields.d.ts +31 -0
- package/dist/custom-fields.d.ts.map +1 -0
- package/dist/custom-fields.js +2 -0
- package/dist/custom-fields.js.map +1 -0
- package/dist/form-skeleton.js +1 -1
- package/dist/form-skeleton.js.map +1 -1
- package/dist/host-callback.js +1 -1
- package/dist/host-callback.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/lockerverse-auction-item-card.d.ts +5 -1
- package/dist/lockerverse-auction-item-card.d.ts.map +1 -1
- package/dist/lockerverse-auction.js +1 -1
- package/dist/lockerverse-auction.js.map +1 -1
- package/dist/lockerverse-payment.js +1 -1
- package/dist/lockerverse-payment.js.map +1 -1
- package/dist/payment-form.d.ts +2 -2
- package/dist/payment-form.d.ts.map +1 -1
- package/dist/payment-primitives.d.ts +113 -0
- package/dist/payment-primitives.d.ts.map +1 -0
- package/dist/payment-primitives.js +1 -0
- package/dist/payment-summary.js +2 -0
- package/dist/payment-summary.js.map +1 -0
- package/dist/payment.d.ts +2 -1
- package/dist/phone-field.js +2 -0
- package/dist/phone-field.js.map +1 -0
- package/dist/signup.js +1 -1
- package/dist/signup.js.map +1 -1
- package/dist/stripe-loader.js +1 -1
- package/dist/stripe-loader.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/use-auction-boundary.js +1 -1
- package/dist/use-auction-boundary.js.map +1 -1
- package/package.json +7 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./format-money.js";import{a as t,d as n,f as r,m as i,n as a,r as o,t as s}from"./host-callback.js";import{i as c,n as l,r as u,t as d}from"./stripe-loader.js";import{n as f,t as p}from"./accent-contrast.js";import{a as m,i as h,n as g,r as _,s as v,t as y}from"./form-skeleton.js";import{useCallback as b,useEffect as x,useId as S,useLayoutEffect as C,useMemo as w,useReducer as T,useRef as E,useState as D}from"react";import{Fragment as O,jsx as k,jsxs as A}from"react/jsx-runtime";import{AddressElement as j,Elements as M,PaymentElement as N,useElements as P,useStripe as F}from"@stripe/react-stripe-js";import{array as I,minLength as L,minValue as R,nonEmpty as z,number as B,pipe as V,regex as H,safeInteger as ee,safeParse as te,strictObject as U,string as ne,trim as re,union as W}from"valibot";import{LockerverseSdkError as ie,estimateLockerverseCheckout as ae}from"@lockerverse/sdk/checkout";function oe({ariaDescribedBy:e,ariaLabel:t,ariaLabelledBy:n,className:r,id:i,invalid:a=!1,name:o,onValueChange:s,options:c,value:l}){return k(`select`,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:[`lockerverse-form__control`,`lockerverse-form__select`,r].filter(Boolean).join(` `),id:i,name:o,onChange:e=>s(e.currentTarget.value),value:l,children:c.map(e=>k(`option`,{value:e.value,children:e.label},e.value))})}const G=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],K=[`15`,`12`,`10`,`5`],q=[...K,`custom`];function se({enabled:e,error:t,errorId:n,onChange:r,values:i}){if(!e)return null;let a=e=>r({...i,...e}),o=(e,t)=>{let n=q.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%q.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+q.length)%q.length;break;case`Home`:r=0;break;case`End`:r=q.length-1;break;default:return}e.preventDefault();let i=q[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return A(`div`,{className:`lockerverse-payment__tip-box`,children:[k(`p`,{children:`Add a tip to support the Lockerverse platform`}),A(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[K.map(e=>A(`label`,{className:`lockerverse-payment__tip-choice`,children:[k(`input`,{checked:i.tipPercent===e,name:`tipPercent`,onChange:()=>a({tipPercent:e}),onKeyDown:t=>o(t,e),tabIndex:i.tipPercent===e?0:-1,type:`radio`,value:e}),A(`span`,{children:[e,`%`]})]},e)),A(`label`,{className:`lockerverse-payment__tip-choice`,children:[k(`input`,{checked:i.tipPercent===`custom`,name:`tipPercent`,onChange:()=>a({tipPercent:`custom`}),onKeyDown:e=>o(e,`custom`),tabIndex:i.tipPercent===`custom`?0:-1,type:`radio`,value:`custom`}),k(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?A(`label`,{children:[k(`span`,{children:`Custom tip`}),A(`span`,{className:`lockerverse-payment__money-input`,children:[k(`span`,{"aria-hidden":`true`,children:`$`}),k(`input`,{"aria-describedby":t?n:void 0,"aria-invalid":t?`true`:void 0,inputMode:`decimal`,name:`tip`,onChange:e=>a({customTip:e.currentTarget.value}),placeholder:`0.00`,value:i.customTip})]}),t?k(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):k(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function J({checked:e,children:t,name:r,onChange:i}){let a=S();return A(`label`,{className:`lockerverse-payment__check-row`,htmlFor:a,children:[k(n,{checked:e,id:a,name:r,onChange:e=>i(e.currentTarget.checked)}),k(`span`,{children:t})]})}function ce({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:i,memberIdLabel:a,onChange:o,onApplyPromo:s,promoError:c,values:l}){let u=e=>o({...l,...e});return A(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?A(`label`,{children:[k(`span`,{children:a?.trim()||`Member ID`}),k(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?A(`div`,{className:`lockerverse-payment__field`,children:[k(`span`,{id:`${r}-merch-size-label`,children:`Size`}),k(oe,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>{let t=G.find(t=>t===e);t&&u({merchSize:t})},options:G.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?A(`div`,{className:`lockerverse-payment__field`,children:[k(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),A(`div`,{className:`lockerverse-payment__promo-control`,children:[k(`input`,{"aria-describedby":c?`${r}-promo-code-error`:void 0,"aria-invalid":c?`true`:void 0,"aria-labelledby":`${r}-promo-code-label`,name:`promoCode`,onChange:e=>u({promoCode:e.currentTarget.value}),placeholder:`Optional`,value:l.promoCode}),k(`button`,{disabled:!l.promoCode.trim()||i,onClick:s,type:`button`,children:i?`Applying…`:`Apply`})]}),c?k(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,k(g,{choiceClassName:`lockerverse-payment__check-row`,errorClassName:`lockerverse-payment__field-message`,errors:t,fields:e,idPrefix:r,onChange:e=>u({customFields:e}),values:l.customFields})]})}function Y({amountCents:t,enabled:n,onChange:r,values:i}){return n?A(J,{checked:i.includeServiceFee,name:`includeServiceFee`,onChange:e=>r({...i,includeServiceFee:e}),children:[`Add `,e(t),` to help cover processing fees`]}):null}function le(e){return{error:void 0,message:void 0,status:e?`recovering`:`editing`}}function X(e,t,n){return t.includes(e.status)?{...e,...n}:e}function Z(e,t){if(e.status===`sold_out`||e.status===`succeeded`||e.status===`unresolved`)return e;switch(t.type){case`field_changed`:return X(e,[`editing`,`invalid`,`refreshing_quote`],{error:void 0,status:`editing`});case`validation_failed`:return X(e,[`editing`],{status:`invalid`});case`quote_refresh_started`:return X(e,[`editing`,`invalid`],{status:`refreshing_quote`});case`quote_refresh_succeeded`:return X(e,[`refreshing_quote`],{error:void 0,status:`editing`});case`quote_refresh_failed`:return X(e,[`refreshing_quote`],{error:t.error??e.error,status:`editing`});case`submission_started`:return X(e,[`editing`,`invalid`,`refreshing_quote`],{error:void 0,status:`submitting`});case`submission_validation_failed`:return X(e,[`submitting`],{error:void 0,status:`invalid`});case`quote_changed`:return X(e,[`submitting`],{status:`editing`});case`retryable_failure`:return X(e,[`editing`,`invalid`,`submitting`],{error:t.error,status:`editing`});case`recovery_failed`:return X(e,[`recovering`],{error:t.error,status:`editing`});case`sold_out`:return{error:void 0,message:void 0,status:`sold_out`};case`succeeded`:return X(e,[`recovering`,`submitting`],{message:t.message,status:`succeeded`});case`unresolved`:return X(e,[`recovering`,`submitting`],{message:t.message,status:`unresolved`});default:return e}}function Q(e){return e.status===`editing`||e.status===`invalid`||e.status===`refreshing_quote`?e.error:void 0}function ue(e){return e.status===`sold_out`?`sold_out`:e.status===`succeeded`?`success`:e.status===`unresolved`?`unresolved`:e.status===`submitting`||e.status===`recovering`?`submitting`:e.status===`invalid`?`invalid`:Q(e)?`error`:`idle`}function de(e){return e.status===`submitting`}const fe=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],pe=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function me(e,t,n,r){return(n===t.totalCents?pe:fe).some(n=>e[n]!==t[n])||r!==t.payment.connectedAccountId||e.authoritative&&(e.payment.connectedAccountId!==r||e.payment.currency!==t.payment.currency)||JSON.stringify(e.appliedDiscount)!==JSON.stringify(t.appliedDiscount)||JSON.stringify(e.lineItems)!==JSON.stringify(t.lineItems)}function he(e){return e.checkoutStatus===`success`?{kind:`success`,payment:e}:e.checkoutStatus===`failed`?{kind:`failed`,payment:e}:{kind:`unresolved`,paymentReference:e.paymentReference,reason:e.checkoutStatus===`action_required`?`action_required`:`pending`}}async function ge(e,t,n){if(t.checkoutStatus!==`action_required`)return he(t);if(!n)return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`};if(t.clientSecret)try{await n.handleNextAction({clientSecret:t.clientSecret})}catch{}try{return he(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function _e(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof ie&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return ge(e,r,n)}async function ve(e,t,n){try{return ge(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}const ye=V(ne(),re(),z()),be=V(B(),ee(),R(1)),xe=V(I(W([U({amountCents:be,productSlug:ye}),U({productSlug:ye,quantity:be}),U({productSlug:ye})])),L(1)),Se=V(ne(),re(),H(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function Ce(e){let t=te(Se,e);if(!t.success)return{message:t.issues[0]?.message??`Enter a valid tip amount.`,success:!1};let[n=`0`,r=``]=t.output.split(`.`),i=BigInt(n)*100n+BigInt(r.padEnd(2,`0`));return i>BigInt(2**53-1)?{message:`Enter a valid tip amount.`,success:!1}:{cents:Number(i),success:!0}}function we(e){let t=te(xe,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}const Te=`This promo code is invalid or cannot be applied.`;function Ee(e,t){return t.tipPercent===`custom`?t.customTip.trim()?Ce(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}function De(e,t,n,r){let i={};return n&&(i.email=n),e.widget.fields.serviceFee&&(i.includeServiceFee=t.includeServiceFee),e.widget.fields.promoCode&&t.promoCode.trim()&&(i.promoCode=t.promoCode.trim()),e.widget.fields.tipping&&(i.tipCents=r),i}function Oe(e,t,n){let r=e.widget.fields.tipping?Ee(n.subtotalCents,t):{cents:0,success:!0};if(!r.success)return{parsedTip:r,totalCents:null};let i=e.widget.fields.serviceFee&&t.includeServiceFee?n.serviceFeeCents||Math.round(n.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4):0;return{parsedTip:r,totalCents:n.totalCents-n.serviceFeeCents-n.tipCents+i+r.cents}}function ke(e,t){return{displayedTotalCents:e.totalCents,promoError:t&&e.appliedDiscount?.source!==`promo_code`?Te:void 0}}function Ae(e,t){let n;return t||(n=e instanceof Error?e.message:`The order total could not be updated.`),{paymentError:n,promoError:t?Te:void 0}}function je(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Me(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:je(r.shipping,`Shipping`)}function Ne({billingAddress:e,catalog:t,email:n,phone:r,shippingAddress:i}){let a={payment_method_data:{billing_details:t.widget.fields.phone?{address:e.address,email:n,name:e.name,phone:r}:{address:e.address,email:n,name:e.name}}};return i?{...a,shipping:{address:i.address,name:i.name,phone:t.widget.fields.phone?r:i.phone??null}}:a}function Pe({catalog:e,checkoutItems:t,confirmationToken:n,email:r,fieldValues:i,metadata:a,phone:o,shippingAddress:s}){let c={customFieldAnswers:_(m(e,t),i.customFields),email:r};if(n&&(c.confirmationToken=n),a&&(c.metadata=a),e.widget.fields.memberId&&i.memberId.trim()&&(c.memberId=i.memberId.trim()),e.widget.fields.merchSize&&(c.merchSize=i.merchSize),e.widget.fields.phone&&(c.phone=o),s){let e={city:s.address.city??``,country:s.address.country,line1:s.address.line1??``,postal_code:s.address.postal_code??``,state:s.address.state??``};s.address.line2&&(e.line2=s.address.line2),c.shipping={address:e,name:s.name}}return c}function Fe(e){if(!e())throw Error(`Payment component is no longer active.`)}function Ie(e,t){s(e,t)}function Le(e,t,n,r){return e.kind===`failed`?{kind:`payment_failed`,message:r}:e.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:e.paymentReference,reason:e.reason}:{email:n,kind:`payment`,payment:e.payment,quote:t}}async function Re({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:s,locallyPreviewedTotalCents:c,metadata:l,onPaymentRecoveryChange:d,phone:f,quote:p,stripe:m,stripeConnectedAccountId:h}){let g=a.trim().toLowerCase(),_=u(f),v=Ee(p.subtotalCents,o);if(!v.success)throw Error(v.message);let y=await r.calculateTotal({...De(t,o,g,v.cents),catalog:t,items:n});if(Fe(s),y.totalCents>0&&me(p,y,c,h))return{kind:`quote_changed`,quote:y};let b,x;if(y.totalCents===0)t.widget.fields.shipping&&(b=Me(t,o,je(e.billing,`Billing`),e));else{if(!(i&&m))throw Error(`Payment form is still loading.`);await i.update({amount:y.totalCents}),Fe(s);let n=await i.submit();if(Fe(s),n.error)throw Error(n.error.message);let r=je(e.billing,`Billing`);b=Me(t,o,r,e);let a=await m.createConfirmationToken({elements:i,params:Ne({billingAddress:r,catalog:t,email:g,phone:_,shippingAddress:b})});if(Fe(s),a.error)throw Error(a.error.message);x=a.confirmationToken.id}Ie(d,{connectedAccountId:y.payment.connectedAccountId,paymentReference:y.paymentReference});let S=await _e(r,{checkout:y,submission:Pe({catalog:t,checkoutItems:n,confirmationToken:x,email:g,fieldValues:o,metadata:l,phone:_,shippingAddress:b})},m);return Fe(s),Le(S,y,g,y.totalCents===0?`Order could not be completed. Review the details and try again.`:`Payment was declined. Check your payment details and try again.`)}function ze(e,t){s(e,t)}function Be(e,t){s(e,t)}function Ve(e,t){return{...e,...t}}function He(e,t,n){return e.kind===`unresolved`&&e.reason===`action_required`&&!t&&!n}function Ue(e){return e instanceof ie&&e.serverCode===`PAYMENT_WIDGET_SALES_LIMIT_REACHED`}function We({nextQuote:e,onQuoteChange:t,setDisplayedTotalCents:n,setPromoError:r,updateState:i,validatePromo:a}){let o=ke(e,a);i({type:`quote_refresh_succeeded`}),n(o.displayedTotalCents),t(e),a&&r(o.promoError)}function Ge({error:e,setPromoError:t,updateState:n,validatePromo:r}){let i=Ae(e,r);r&&t(i.promoError),n(i.paymentError===void 0?{type:`quote_refresh_failed`}:{error:i.paymentError,type:`quote_refresh_failed`})}function Ke({onPaymentComplete:t,onPaymentRecoveryChange:n,onPaymentUncertain:r,onQuoteChange:i,result:a,setDisplayedTotalCents:o,dispatchState:c}){if(a.kind===`quote_changed`){let t=`The total changed to ${e(a.quote.totalCents)}. Review it and pay again.`;i(a.quote,t),o(a.quote.totalCents),c({type:`quote_changed`});return}if(a.kind===`payment_failed`){ze(n,null),c({error:a.message,type:`retryable_failure`});return}if(a.kind===`payment_unresolved`){c({message:`Payment is still processing. Do not submit it again.`,type:`unresolved`}),Be(r,{paymentReference:a.paymentReference,reason:a.reason});return}i(a.quote),ze(n,null),c({message:a.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`}),s(t,Ve(a.payment,{email:a.email,lineItems:a.quote.lineItems}))}function qe(e){let{catalog:n,checkoutItems:r,client:i,elements:a,email:o,fieldValues:l,metadata:u,onPaymentComplete:d,onResumePaymentFailed:f,onPaymentRecoveryChange:p,onPaymentUncertain:m,onQuoteChange:h,onStateChange:g,quote:_,resumePayment:v,stripe:y,stripeConnectedAccountId:S,stripeLoadFailed:C,paymentState:w,updateState:T}=e,[O,k]=D(_.totalCents),[A,j]=D(),M=E(!1),N=E(0),P=E(0),F=b(e=>T(e,!0),[T]),I=b(()=>{let e=P.current+1;return P.current=e,()=>P.current===e},[]);x(()=>()=>{P.current+=1,N.current+=1},[]);let{parsedTip:L,totalCents:R}=Oe(n,l,_);x(()=>{R!==null&&(k(R),R>0&&a?.update({amount:R}))},[n.pricingPolicy.serviceFeeRateBasisPoints,n.widget.fields.serviceFee,a,l.includeServiceFee,R,_.serviceFeeCents,_.tipCents,_.totalCents,_.subtotalCents]),x(()=>{if(!v||M.current||w.status!==`recovering`)return;M.current=!0;let e=I();return g(ue(w)),ve(i,v.paymentReference,y).then(t=>{if(e()&&!He(t,y,C)){if(t.kind===`failed`){ze(p,null),f(),F({error:`The previous payment failed. Check your details and try again.`,type:`recovery_failed`});return}if(t.kind===`unresolved`){F({message:`Payment is still processing. Do not submit it again.`,type:`unresolved`}),Be(m,{paymentReference:t.paymentReference,reason:t.reason});return}ze(p,null),F({message:t.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`}),s(d,Ve(t.payment,{email:null,lineItems:null}))}}),()=>{e()&&(P.current+=1),M.current=!1}},[i,d,f,p,m,g,v,y,C,I,F,w]);let z=b((e=!1,t=!1)=>{t||(N.current+=1),e&&j(void 0),T({type:`field_changed`})},[T]);async function B(e=!1,t=!1){let a=o.trim().toLowerCase(),s=c({email:a,phone:``},!1);if(!(L.success&&(s.value||e)))return;N.current+=1;let u=N.current;T({type:`quote_refresh_started`});try{let e=await i.calculateTotal({...De(n,l,s.value?.email??``,L.cents),catalog:n,items:r});if(u!==N.current)return;We({nextQuote:e,onQuoteChange:h,setDisplayedTotalCents:k,setPromoError:j,updateState:T,validatePromo:t})}catch(e){if(u!==N.current)return;if(Ue(e)){T({type:`sold_out`});return}Ge({error:e,setPromoError:j,updateState:T,validatePromo:t})}}async function V(){j(void 0),await B(!0,!0)}async function H({addresses:e,phone:s}){F({type:`submission_started`});let c=I();try{let t=await Re({addresses:e,catalog:n,checkoutItems:r,client:i,elements:a,email:o,fieldValues:l,isAttemptActive:c,locallyPreviewedTotalCents:O,metadata:u,onPaymentRecoveryChange:p,phone:s,quote:_,stripe:y,stripeConnectedAccountId:S});if(!c())return;Ke({dispatchState:F,onPaymentComplete:d,onPaymentRecoveryChange:p,onPaymentUncertain:m,onQuoteChange:h,result:t,setDisplayedTotalCents:k})}catch(e){if(!c())return;if(ze(p,null),Ue(e)){F({type:`sold_out`});return}let n=e instanceof ie?t(e.serverCode):void 0;if(n)return F({type:`submission_validation_failed`}),{phoneError:n};F({error:e instanceof Error?e.message:`Payment could not be completed.`,type:`retryable_failure`})}}let ee=w.status===`succeeded`||w.status===`unresolved`?w.message:void 0;return{commands:{applyPromo:V,fieldChanged:z,refreshAuthoritativeTotal:B,reportStripeLoadError:e=>F({error:e,type:`retryable_failure`}),reportValidationFailure:()=>F({type:`validation_failed`}),submit:H},state:{displayedTotalCents:O,isRecovering:w.status===`recovering`,isRefreshingQuote:w.status===`refreshing_quote`,isSubmitting:de(w),parsedTip:L,paymentError:Q(w),promoError:A,terminalMessage:ee}}}const Je=d;function Ye(e){let{connectedAccountId:t,publishableKey:n}=e.payment;return Je(n,t?{stripeAccount:t}:void 0)}function Xe(e){return e===`monthly`?{interval:`month`,label:`Monthly`}:e===`annually`?{interval:`year`,label:`Annual`}:null}function Ze(e,t,n){if(n){let{connectedAccountId:e}=n;return e}if(`payment`in t){let{connectedAccountId:e}=t.payment;return e}let{connectedAccountId:r}=e.payment;return r}function Qe({accentColor:e,catalog:t,checkoutItems:n,client:r,appearanceRoot:i,metadata:a,onPaymentComplete:o,onResumePaymentFailed:s,onPaymentRecoveryChange:c,onPaymentUncertain:u,onQuoteChange:d,quote:f,resumePayment:p,onStateChange:m,stripeLoader:h,theme:g,visualStyle:_}){let[v,S]=D(()=>le(!!p)),C=E(v);C.current=v;let T=b((e,t=!1)=>{let n=Z(C.current,e);n!==C.current&&(C.current=n,S(n),t&&m(ue(n)))},[m]),O=Ze(t,f,p),A=E({connectedAccountId:O,paymentOption:f.paymentOption});v.status!==`submitting`&&v.status!==`recovering`&&(A.current={connectedAccountId:O,paymentOption:f.paymentOption});let{connectedAccountId:j,paymentOption:N}=A.current,P=w(()=>h(t.payment.publishableKey,j?{stripeAccount:j}:void 0).catch(()=>null),[t.payment.publishableKey,j,h]),[F,I]=D(!1);x(()=>{let e=!0;return I(!1),P.then(t=>{e&&t===null&&I(!0)}),()=>{e=!1}},[P]);let L=l(i,g,_,v.status===`submitting`||v.status===`recovering`,e);return L?k(M,{options:{amount:Math.max(f.totalCents,100),appearance:L,currency:t.payment.currency,excludedPaymentMethodTypes:[`us_bank_account`],mode:N===`one-time`?`payment`:`subscription`,syncAddressCheckbox:`none`},stripe:P,children:k(lt,{catalog:t,checkoutItems:n,client:r,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:c,onPaymentUncertain:u,onQuoteChange:d,onResumePaymentFailed:s,onStateChange:m,paymentState:v,quote:f,resumePayment:p,stripeConnectedAccountId:j,stripeLoadFailed:F,updateState:T})},`${t.payment.publishableKey}:${j??`platform`}:${N}`):k(y,{fieldCount:3,label:`Loading payment form`})}function $e({label:e}){return A(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[k(`p`,{children:e}),A(`div`,{"aria-hidden":`true`,children:[k(`span`,{}),k(`span`,{}),k(`span`,{})]})]})}function et({onError:e,onReady:t,ready:n}){return A(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:k($e,{label:`Loading payment form...`}),k(`div`,{className:`lockerverse-payment__stripe-mount`,children:k(N,{onLoadError:({error:t})=>e(t.message??`Payment form failed to load.`),onReady:t,options:{business:{name:`Lockerverse`},fields:{billingDetails:{address:`never`,email:`never`,name:`never`,phone:`never`}},layout:`tabs`,terms:{applePay:`auto`,auBecsDebit:`never`,bancontact:`never`,card:`always`,cashapp:`never`,googlePay:`never`,ideal:`never`,paypal:`auto`,sepaDebit:`never`,sofort:`never`,usBankAccount:`never`},wallets:{applePay:`auto`,googlePay:`never`}}})})]})}function tt({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return A(`div`,{className:`lockerverse-payment__address`,children:[k(`h2`,{children:e}),A(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:k($e,{label:`Loading ${e.toLowerCase()}...`}),k(`div`,{className:`lockerverse-payment__stripe-mount`,children:k(j,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function nt({message:e}){return e?k(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function rt({catalog:e,displayedTotalCents:t,fieldValues:n,isBillingAddressReady:r,isPaymentReady:i,isShippingAddressReady:a,onAddressChange:o,onFieldValuesChange:s,onStripeLoadError:c,setIsBillingAddressReady:l,setIsPaymentReady:u,setIsShippingAddressReady:d}){let f=t>0;return A(O,{children:[f?k(et,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?k(tt,{label:f?`Billing address`:`Shipping address`,mode:`billing`,onChange:e=>o(`billing`,e),onError:c,onReady:()=>l(!0),ready:r}):null,e.widget.fields.shipping?A(`div`,{className:`lockerverse-payment__shipping`,children:[k(J,{checked:n.shippingMatchesBilling,name:`shippingMatchesBilling`,onChange:e=>{s({...n,shippingMatchesBilling:e}),e?o(`shipping`,null):d(!1)},children:`Shipping is same as billing information`}),n.shippingMatchesBilling?null:k(tt,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function it({displayedBaseCents:t,displayedTipCents:n,displayedTotalCents:r,quote:i}){let a=Xe(i.paymentOption),o=Math.max(0,t-i.subtotalCents+i.discountCents);return A(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[k(`h2`,{children:`Order summary`}),k(`div`,{className:`lockerverse-payment__payment-summary-items`,children:i.lineItems.map(t=>A(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[A(`span`,{children:[t.productName,t.quantity>1?A(O,{children:[` `,A(`small`,{children:[`× `,t.quantity]})]}):null,t.paymentOption===`monthly`?k(`small`,{children:` · Monthly`}):null,t.paymentOption===`annually`?k(`small`,{children:` · Annual`}):null]}),k(`strong`,{children:e(t.subtotalCents)})]},t.listingId))}),A(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[o>0?A(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[k(`span`,{children:`Service fee`}),k(`strong`,{children:e(o)})]}):null,i.discountCents>0&&i.appliedDiscount?A(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[A(`span`,{children:[i.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,i.appliedDiscount.percentageOff,`% off)`]}),A(`strong`,{children:[`-`,e(i.discountCents)]})]}):null,n>0?A(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[k(`span`,{children:`Tip`}),k(`strong`,{children:e(n)})]}):null,A(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[k(`span`,{children:a?`${a.label} total`:`Total`}),k(`strong`,{children:e(r)})]})]})]})}function at({catalog:t,displayedTotalCents:n,fieldValues:r,isBillingAddressReady:i,isPaymentReady:a,isRequiredShippingReady:o,isSubmitting:s,onFieldValuesChange:c,quote:l}){let u=n===0,d=u?!t.widget.fields.shipping||i&&o:a&&i&&o,f=Xe(l.paymentOption),p=u?`Complete order`:`Pay ${e(n)}`;!u&&f&&(p=`Subscribe for ${e(n)}/${f.interval}`),s&&(p=u?`Completing…`:`Processing…`);let m=`Process payment for ${e(n)} total`;return u?m=`Complete order`:f&&(m=`Start ${f.label.toLowerCase()} subscription for ${e(n)}`),A(`div`,{className:`lockerverse-payment__actions`,children:[k(Y,{amountCents:l.serviceFeeCents||Math.round(l.subtotalCents*t.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:t.widget.fields.serviceFee,onChange:c,values:r}),k(`button`,{"aria-busy":s,"aria-label":m,disabled:s||!d,type:`submit`,children:p})]})}function ot(e,t){let n=e.elements.namedItem(t);if(n instanceof HTMLElement){n.focus();return}n instanceof RadioNodeList&&Array.from(n).find(e=>e instanceof HTMLElement)?.focus()}function st({customFieldErrors:e,emailRef:t,form:n,parsedTipSuccess:r,phoneRef:i,validationErrors:a}){if(a.email){t.current?.focus();return}if(a.phone){i.current?.focus();return}if(!r){n.querySelector(`[name="tip"]`)?.focus();return}let[o]=Object.keys(e);o&&ot(n,`custom:${o}`)}function ct({email:e,emailDiscountPercentOff:t,emailErrorId:n,emailId:o,emailRef:s,errors:c,onEmailBlur:l,onEmailChange:u,onPhoneChange:d,phone:f,phoneCountry:p,phoneEnabled:m,phoneErrorId:h,phoneId:g,phoneRef:_}){return A(`div`,{className:`lockerverse-payment__contact`,children:[k(r,{error:c.email,errorId:n,id:o,label:`Email`,name:`email`,onBlur:l,onChange:e=>u(e.currentTarget.value),ref:s,required:!0,value:e}),t===void 0?null:A(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),m?k(i,{error:c.phone,errorId:h,id:g,label:`Phone`,children:k(a,{country:p,error:c.phone,errorId:h,id:g,inputRef:_,name:`phone`,onChange:d,required:!0,value:f})}):null]})}function lt({catalog:e,checkoutItems:t,client:n,metadata:r,onPaymentComplete:i,onResumePaymentFailed:a,onPaymentRecoveryChange:s,onPaymentUncertain:l,onQuoteChange:u,onStateChange:d,quote:f,resumePayment:p,stripeConnectedAccountId:g,stripeLoadFailed:_,paymentState:y,updateState:b}){let C=m(e,t),[w,T]=D(``),[O,j]=D(``),[M,N]=D(`US`),[I,L]=D({}),[R,z]=D({}),[B,V]=D(),[H,ee]=D(!1),[te,U]=D(!1),[ne,re]=D(!1),[W,ie]=D({customFields:h(C),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),ae=E({billing:null,shipping:null}),oe=E(null),G=E(null),K=E(null),q=E(f.totalCents>0),J=qe({catalog:e,checkoutItems:t,client:n,elements:P(),email:w,fieldValues:W,metadata:r,onPaymentComplete:i,onPaymentRecoveryChange:s,onPaymentUncertain:l,onQuoteChange:u,onResumePaymentFailed:a,onStateChange:d,paymentState:y,quote:f,resumePayment:p,stripe:F(),stripeConnectedAccountId:g,stripeLoadFailed:_,updateState:b}),{displayedTotalCents:Y,isRecovering:le,isRefreshingQuote:X,isSubmitting:Z,parsedTip:Q,paymentError:ue,promoError:de,terminalMessage:fe}=J.state,pe=`lockerverse-${S()}`,me=`${pe}-email`,he=`${me}-error`,ge=`${pe}-phone`,_e=`${ge}-error`,ve=`${pe}-tip-error`,ye=(Q.success?Q.cents:null)??0,be=Y-ye,xe=!e.widget.fields.shipping||W.shippingMatchesBilling||ne;x(()=>{Z&&K.current?.focus({preventScroll:!0})},[Z]),x(()=>{Z||I.email||!I.phone||G.current?.focus()},[I.email,I.phone,Z]),x(()=>{let e=Y>0;e&&!q.current&&(ee(!1),U(!1)),q.current=e},[Y]);function Se(e){J.commands.fieldChanged(!1,e!==`email`),L(t=>{let n={...t};return delete n[e],n})}function Ce(e){let t=e.promoCode!==W.promoCode,n=e.includeServiceFee!==W.includeServiceFee;J.commands.fieldChanged(t,!(t||n)),ie(e),z({}),V(void 0)}async function we(t){t.preventDefault();let n=e.widget.fields.phone?o(O,M):``,r=c({email:w,phone:n},e.widget.fields.phone),i=v(C,W.customFields);if(!(r.value&&Q.success)||Object.keys(i).length>0){L(r.errors),z(i),V(Q.success?void 0:Q.message),J.commands.reportValidationFailure();let e=t.currentTarget;queueMicrotask(()=>{st({customFieldErrors:i,emailRef:oe,form:e,parsedTipSuccess:Q.success,phoneRef:G,validationErrors:r.errors})});return}L({}),z({});let a=await J.commands.submit({addresses:ae.current,phone:n});a?.phoneError&&L({phone:a.phoneError})}return fe?k(`p`,{className:`lockerverse-payment__payment-status`,ref:K,role:`status`,tabIndex:-1,children:fe}):le?k(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):A(`form`,{"aria-busy":Z,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:we,children:[k(`div`,{"data-lockerverse-input-region":``,inert:Z?!0:void 0,children:A(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:Z,children:[k(it,{displayedBaseCents:be,displayedTipCents:ye,displayedTotalCents:Y,quote:f}),k(se,{enabled:e.widget.fields.tipping,error:B,errorId:ve,onChange:Ce,values:W}),k(ct,{email:w,emailDiscountPercentOff:f.appliedDiscount?.source===`email_list`?f.appliedDiscount.percentageOff:void 0,emailErrorId:he,emailId:me,emailRef:oe,errors:I,onEmailBlur:()=>J.commands.refreshAuthoritativeTotal(),onEmailChange:e=>{T(e),Se(`email`)},onPhoneChange:({value:e,country:t})=>{j(e),N(t),Se(`phone`)},phone:O,phoneCountry:M,phoneEnabled:e.widget.fields.phone,phoneErrorId:_e,phoneId:ge,phoneRef:G}),k(rt,{catalog:e,displayedTotalCents:Y,fieldValues:W,isBillingAddressReady:te,isPaymentReady:H,isShippingAddressReady:ne,onAddressChange:(e,t)=>{ae.current[e]=t},onFieldValuesChange:Ce,onStripeLoadError:J.commands.reportStripeLoadError,setIsBillingAddressReady:U,setIsPaymentReady:ee,setIsShippingAddressReady:re}),k(ce,{customFields:C,errors:R,fields:e.widget.fields,idPrefix:pe,isPromoApplying:X,memberIdLabel:e.community?.memberIdLabel,onApplyPromo:J.commands.applyPromo,onChange:Ce,promoError:de,values:W}),k(at,{catalog:e,displayedTotalCents:Y,fieldValues:W,isBillingAddressReady:te,isPaymentReady:H,isRequiredShippingReady:xe,isSubmitting:Z,onFieldValuesChange:Ce,quote:f})]})}),Z?k(`p`,{className:`lockerverse-payment__sr-only`,ref:K,role:`status`,tabIndex:-1,children:Y===0?`Completing order…`:`Processing payment…`}):null,k(nt,{message:ue})]})}function ut(){return k(y,{fieldCount:2,label:`Loading payment…`,sectionCount:2,showCheckbox:!0})}function dt(e,t){switch(t.type){case`loading`:return{phase:`loading`,revision:e.revision};case`ready`:return mt(t.displayedQuote,e.revision+1);case`error`:return{failure:t.failure,phase:`error`,revision:e.revision};case`checkout`:return e.phase===`ready`?{...e,displayedQuote:t.checkout,quoteFailure:void 0}:e;case`quote-error`:return e.phase===`ready`?{...e,quoteFailure:t.failure}:e;default:return e}}function $(e,t,n){return e?.catalog===t&&e.selectionKey===n}function ft({checkout:e}){return{displayedQuote:e,type:`ready`}}function pt(e){return e instanceof Error?e.message:`Lockerverse payment could not load.`}function mt(e,t){return{checkoutItems:[...e.items],displayedQuote:e,phase:`ready`,quoteFailure:void 0,revision:t}}function ht(e,t){let n=e.widget.fields.serviceFee;return ae(e,{includeServiceFee:n,selection:t})}function gt(e,t){try{return mt(ht(e,t),1)}catch(e){return{failure:pt(e),phase:`error`,revision:0}}}function _t({catalog:e,client:t,paymentState:n,selection:r}){let i=we(r),a=i.success?JSON.stringify(i.value):`invalid-selection`,o=w(()=>i.success?i.value:[],[i.success,a]),[s,c]=T(dt,void 0,()=>i.success?gt(e,o):{phase:`loading`,revision:0}),l=E(void 0),u=E(0),d=E(s.phase===`ready`?{catalog:e,selectionKey:a}:void 0),f=E(s.phase===`error`?{catalog:e,selectionKey:a}:void 0),p=n===`submitting`||n===`success`||n===`unresolved`;x(()=>{if(!i.success||p||$(f.current,e,a)||$(l.current,e,a))return;let n=!0;l.current={catalog:e,selectionKey:a};let r=$(d.current,e,a);r||c({type:`loading`});function s(e){n&&c(e)}function m(){n&&(l.current=void 0,f.current={catalog:e,selectionKey:a})}let h;function g(t){if(!n||(l.current=void 0,f.current={catalog:e,selectionKey:a},r&&h!==void 0&&u.current!==h))return;let i=pt(t);if(i===`This option is sold out.`){c({failure:i,type:`error`});return}c(r?{failure:i,type:`quote-error`}:{failure:i,type:`error`})}async function _(){try{h=u.current;let n=e.widget.fields.serviceFee;if(!r){let t=ht(e,o);r=!0,d.current={catalog:e,selectionKey:a},s(ft({checkout:t}))}let i=await t.calculateTotal({catalog:e,includeServiceFee:n,selection:o});m(),u.current===h&&s({checkout:i,type:`checkout`})}catch(e){g(e)}}return _(),()=>{n=!1,$(l.current,e,a)&&(l.current=void 0)}},[e,t,i.success,p,a,o]);let m=$(d.current,e,a)||$(f.current,e,a)||$(l.current,e,a),h=p||m?s:{phase:`loading`,revision:s.revision};return{selectionError:i.success?void 0:i.message,session:h,updateCheckout:e=>{u.current+=1,c({checkout:e,type:`checkout`})}}}const vt={annually:`/year`,monthly:`/month`,"one-time":``};function yt({branding:e,catalog:t}){return A(`header`,{children:[t.widget.showCommunityBranding&&e?A(`div`,{className:`lockerverse-payment__branding`,children:[e.imageUrl?k(`img`,{alt:e.name,height:`48`,src:e.imageUrl,width:`48`}):null,k(`strong`,{children:e.name})]}):null,k(`h1`,{children:t.widget.title??t.widget.name}),t.widget.description?k(`p`,{children:t.widget.description}):null]})}function bt({catalog:t,selection:n}){let r=n?.length?t.products.filter(e=>n.some(t=>t.productSlug===e.slug)):t.products;return r.length===0?null:A(`div`,{className:`lockerverse-payment__payment-summary`,children:[k(`h2`,{children:`Products`}),k(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.map(t=>{let n=t.pricingMode===`fixed`?t.amountCents:t.minimumAmountCents,r=vt[t.paymentOption];return A(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[k(`span`,{children:t.name}),k(`strong`,{children:n===null?`Choose amount`:`${t.pricingMode===`custom`?`From `:``}${e(n)}${r}`})]},t.id)})}),k(`p`,{children:`Base prices. Final total is checked at checkout.`})]})}function xt(e,t){let n=f(e?.[`--lockerverse-accent`]??t?.accentColor??`#38d77a`),r=p(n),i={...e};return(e?.[`--lockerverse-accent`]!==void 0||t?.accentColor)&&(i[`--lockerverse-accent`]=n),r&&e?.[`--lockerverse-accent-contrast`]===void 0&&(i[`--lockerverse-accent-contrast`]=r),{accent:n,rootStyle:i}}function St({catalog:e,client:t,loadError:n,onRetry:r,...i}){let{branding:a,className:o,metadata:s,onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,resumePayment:d,selection:f,style:p,stripeLoader:m=Je,theme:h=`dark`,...g}=i,[_,v]=D(d),y=E(null),[S,w]=D(),[T,O]=D(`idle`),j=E(void 0),{selectionError:M,session:N,updateCheckout:P}=_t({catalog:e,client:t,paymentState:T,selection:f}),F=N.phase===`ready`?N.revision:void 0,I=b(e=>{F!==void 0&&(j.current=F),O(e)},[F]),L=b(e=>l?.(e),[l]),R=b(()=>{v(void 0)},[]);x(()=>{N.phase===`loading`&&w(void 0)},[N.phase]),C(()=>{N.phase===`ready`&&j.current!==N.revision&&O(e=>e===`success`||e===`unresolved`?e:`idle`)},[N.phase,N.revision]);let z=[`lockerverse-payment`,o].filter(Boolean).join(` `),B=a??e.community,{accent:V,rootStyle:H}=xt(p,B);return M?k(`section`,{...g,className:z,"data-lockerverse-theme":h,role:`alert`,style:H,children:M}):N.phase===`error`&&N.failure===`This option is sold out.`||T===`sold_out`?A(`section`,{...g,className:z,"data-lockerverse-theme":h,role:`alert`,style:H,children:[k(`h1`,{children:`Sold out`}),k(`p`,{children:`This option is sold out.`})]}):N.phase===`error`?k(`section`,{...g,className:z,"data-lockerverse-theme":h,style:H,children:k(`p`,{role:`alert`,children:N.failure})}):N.phase===`ready`?A(`section`,{...g,"aria-label":`Payment`,className:z,"data-lockerverse-theme":h,"data-payment-state":T,ref:y,style:H,children:[k(yt,{branding:B,catalog:e}),n?A(`div`,{role:`alert`,children:[k(`p`,{children:n.message}),k(`button`,{onClick:r,type:`button`,children:`Retry`})]}):null,S?k(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:S}):null,N.quoteFailure?A(`div`,{className:`lockerverse-payment__payment-status`,role:`alert`,children:[k(`span`,{children:N.quoteFailure}),k(`span`,{children:` The final total will be checked when you submit.`})]}):null,k(Qe,{accentColor:V,appearanceRoot:y,catalog:e,checkoutItems:N.checkoutItems,client:t,metadata:s,onPaymentComplete:c,onPaymentRecoveryChange:L,onPaymentUncertain:u,onQuoteChange:(e,t)=>{w(t),P(e)},onResumePaymentFailed:R,onStateChange:I,quote:N.displayedQuote,resumePayment:_,stripeLoader:m,theme:h,visualStyle:H},N.revision)]}):A(`section`,{...g,"aria-busy":`true`,"aria-label":`Payment`,className:z,"data-lockerverse-theme":h,style:H,children:[k(yt,{branding:B,catalog:e}),n?A(`div`,{role:`alert`,children:[k(`p`,{children:n.message}),k(`button`,{onClick:r,type:`button`,children:`Retry`})]}):null,k(ut,{})]})}function Ct({children:e,loading:t=!1,viewProps:n}){let{branding:r,className:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,resumePayment:l,selection:u,stripeLoader:d,style:m,theme:h=`dark`,...g}=n,_=f(m?.[`--lockerverse-accent`]??r?.accentColor??`#38d77a`),v=p(_),y={...m};return(m?.[`--lockerverse-accent`]!==void 0||r?.accentColor)&&(y[`--lockerverse-accent`]=_),v&&m?.[`--lockerverse-accent-contrast`]===void 0&&(y[`--lockerverse-accent-contrast`]=v),k(`section`,{...g,...t?{"aria-busy":!0,"aria-label":`Payment`}:{},className:[`lockerverse-payment`,i].filter(Boolean).join(` `),"data-lockerverse-theme":h,style:y,children:e})}function wt({widget:e,...t}){return e.error&&!e.catalog?A(Ct,{viewProps:t,children:[k(`p`,{role:`alert`,children:e.error.message}),k(`button`,{onClick:e.refresh,type:`button`,children:`Retry`})]}):e.loading?A(Ct,{loading:!0,viewProps:t,children:[e.catalog?A(O,{children:[k(yt,{branding:t.branding??e.catalog.community,catalog:e.catalog}),k(bt,{catalog:e.catalog,selection:t.selection})]}):null,k(ut,{})]}):e.catalog?k(St,{catalog:e.catalog,client:e.client,loadError:e.error,onRetry:e.refresh,...t}):k(Ct,{loading:!0,viewProps:t,children:k(ut,{})})}export{Ye as n,wt as t};
|
|
1
|
+
import{t as e}from"./format-money.js";import{d as t,i as n,n as r,p as i,t as a,u as o}from"./phone-field.js";import{t as s}from"./host-callback.js";import{i as c,n as l,r as u,t as d}from"./stripe-loader.js";import{n as f,t as p}from"./accent-contrast.js";import{a as m,i as h,n as g,r as _,s as v}from"./custom-fields.js";import{t as y}from"./form-skeleton.js";import{t as b}from"./payment-summary.js";import{useCallback as x,useEffect as S,useId as C,useLayoutEffect as w,useMemo as T,useReducer as E,useRef as D,useState as O}from"react";import{Fragment as k,jsx as A,jsxs as j}from"react/jsx-runtime";import{AddressElement as M,Elements as N,PaymentElement as P,useElements as F,useStripe as I}from"@stripe/react-stripe-js";import{array as L,minLength as R,minValue as z,nonEmpty as B,number as V,pipe as H,regex as U,safeInteger as ee,safeParse as te,strictObject as ne,string as re,trim as ie,union as ae}from"valibot";import{LockerverseSdkError as W,estimateLockerverseCheckout as oe}from"@lockerverse/sdk/checkout";function se({ariaDescribedBy:e,ariaLabel:t,ariaLabelledBy:n,className:r,id:i,invalid:a=!1,name:o,onValueChange:s,options:c,value:l}){return A(`select`,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:[`lockerverse-form__control`,`lockerverse-form__select`,r].filter(Boolean).join(` `),id:i,name:o,onChange:e=>s(e.currentTarget.value),value:l,children:c.map(e=>A(`option`,{value:e.value,children:e.label},e.value))})}const ce=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],G=[`15`,`12`,`10`,`5`],K=[...G,`custom`];function le({enabled:e,error:t,errorId:n,onChange:r,values:i}){if(!e)return null;let a=e=>r({...i,...e}),o=(e,t)=>{let n=K.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%K.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+K.length)%K.length;break;case`Home`:r=0;break;case`End`:r=K.length-1;break;default:return}e.preventDefault();let i=K[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return j(`div`,{className:`lockerverse-payment__tip-box`,children:[A(`p`,{children:`Add a tip to support the Lockerverse platform`}),j(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[G.map(e=>j(`label`,{className:`lockerverse-payment__tip-choice`,children:[A(`input`,{checked:i.tipPercent===e,name:`tipPercent`,onChange:()=>a({tipPercent:e}),onKeyDown:t=>o(t,e),tabIndex:i.tipPercent===e?0:-1,type:`radio`,value:e}),j(`span`,{children:[e,`%`]})]},e)),j(`label`,{className:`lockerverse-payment__tip-choice`,children:[A(`input`,{checked:i.tipPercent===`custom`,name:`tipPercent`,onChange:()=>a({tipPercent:`custom`}),onKeyDown:e=>o(e,`custom`),tabIndex:i.tipPercent===`custom`?0:-1,type:`radio`,value:`custom`}),A(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?j(`label`,{children:[A(`span`,{children:`Custom tip`}),j(`span`,{className:`lockerverse-payment__money-input`,children:[A(`span`,{"aria-hidden":`true`,children:`$`}),A(`input`,{"aria-describedby":t?n:void 0,"aria-invalid":t?`true`:void 0,inputMode:`decimal`,name:`tip`,onChange:e=>a({customTip:e.currentTarget.value}),placeholder:`0.00`,value:i.customTip})]}),t?A(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):A(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ue({checked:e,children:t,name:n,onChange:r}){let i=C();return j(`label`,{className:`lockerverse-payment__check-row`,htmlFor:i,children:[A(o,{checked:e,id:i,name:n,onChange:e=>r(e.currentTarget.checked)}),A(`span`,{children:t})]})}function de({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:i,memberIdLabel:a,onChange:o,onApplyPromo:s,promoError:c,values:l}){let u=e=>o({...l,...e});return j(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?j(`label`,{children:[A(`span`,{children:a?.trim()||`Member ID`}),A(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?j(`div`,{className:`lockerverse-payment__field`,children:[A(`span`,{id:`${r}-merch-size-label`,children:`Size`}),A(se,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>{let t=ce.find(t=>t===e);t&&u({merchSize:t})},options:ce.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?j(`div`,{className:`lockerverse-payment__field`,children:[A(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),j(`div`,{className:`lockerverse-payment__promo-control`,children:[A(`input`,{"aria-describedby":c?`${r}-promo-code-error`:void 0,"aria-invalid":c?`true`:void 0,"aria-labelledby":`${r}-promo-code-label`,name:`promoCode`,onChange:e=>u({promoCode:e.currentTarget.value}),placeholder:`Optional`,value:l.promoCode}),A(`button`,{disabled:!l.promoCode.trim()||i,onClick:s,type:`button`,children:i?`Applying…`:`Apply`})]}),c?A(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,A(g,{choiceClassName:`lockerverse-payment__check-row`,errorClassName:`lockerverse-payment__field-message`,errors:t,fields:e,idPrefix:r,onChange:e=>u({customFields:e}),values:l.customFields})]})}function q({amountCents:t,enabled:n,onChange:r,values:i}){return n?j(ue,{checked:i.includeServiceFee,name:`includeServiceFee`,onChange:e=>r({...i,includeServiceFee:e}),children:[`Add `,e(t),` to help cover processing fees`]}):null}function J(e){return{error:void 0,message:void 0,status:e?`recovering`:`editing`}}function Y(e,t,n){return t.includes(e.status)?{...e,...n}:e}function fe(e,t){if(e.status===`sold_out`||e.status===`succeeded`||e.status===`unresolved`)return e;switch(t.type){case`field_changed`:return Y(e,[`editing`,`invalid`,`refreshing_quote`],{error:void 0,status:`editing`});case`validation_failed`:return Y(e,[`editing`],{status:`invalid`});case`quote_refresh_started`:return Y(e,[`editing`,`invalid`],{status:`refreshing_quote`});case`quote_refresh_succeeded`:return Y(e,[`refreshing_quote`],{error:void 0,status:`editing`});case`quote_refresh_failed`:return Y(e,[`refreshing_quote`],{error:t.error??e.error,status:`editing`});case`submission_started`:return Y(e,[`editing`,`invalid`,`refreshing_quote`],{error:void 0,status:`submitting`});case`submission_validation_failed`:return Y(e,[`submitting`],{error:void 0,status:`invalid`});case`quote_changed`:return Y(e,[`submitting`],{status:`editing`});case`retryable_failure`:return Y(e,[`editing`,`invalid`,`submitting`],{error:t.error,status:`editing`});case`recovery_failed`:return Y(e,[`recovering`],{error:t.error,status:`editing`});case`sold_out`:return{error:void 0,message:void 0,status:`sold_out`};case`succeeded`:return Y(e,[`recovering`,`submitting`],{message:t.message,status:`succeeded`});case`unresolved`:return Y(e,[`recovering`,`submitting`],{message:t.message,status:`unresolved`});default:return e}}function X(e){return e.status===`editing`||e.status===`invalid`||e.status===`refreshing_quote`?e.error:void 0}function Z(e){return e.status===`sold_out`?`sold_out`:e.status===`succeeded`?`success`:e.status===`unresolved`?`unresolved`:e.status===`submitting`||e.status===`recovering`?`submitting`:e.status===`invalid`?`invalid`:X(e)?`error`:`idle`}function pe(e){return e.status===`submitting`}const me=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],he=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function ge(e,t,n,r){return(n===t.totalCents?he:me).some(n=>e[n]!==t[n])||r!==t.payment.connectedAccountId||e.authoritative&&(e.payment.connectedAccountId!==r||e.payment.currency!==t.payment.currency)||JSON.stringify(e.appliedDiscount)!==JSON.stringify(t.appliedDiscount)||JSON.stringify(e.lineItems)!==JSON.stringify(t.lineItems)}function _e(e){return e.checkoutStatus===`success`?{kind:`success`,payment:e}:e.checkoutStatus===`failed`?{kind:`failed`,payment:e}:{kind:`unresolved`,paymentReference:e.paymentReference,reason:e.checkoutStatus===`action_required`?`action_required`:`pending`}}async function ve(e,t,n){if(t.checkoutStatus!==`action_required`)return _e(t);if(!n)return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`};if(t.clientSecret)try{await n.handleNextAction({clientSecret:t.clientSecret})}catch{}try{return _e(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function ye(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof W&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return ve(e,r,n)}async function be(e,t,n){try{return ve(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}const xe=H(re(),ie(),B()),Se=H(V(),ee(),z(1)),Ce=H(L(ae([ne({amountCents:Se,productSlug:xe}),ne({productSlug:xe,quantity:Se}),ne({productSlug:xe})])),R(1)),we=H(re(),ie(),U(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function Te(e){let t=te(we,e);if(!t.success)return{message:t.issues[0]?.message??`Enter a valid tip amount.`,success:!1};let[n=`0`,r=``]=t.output.split(`.`),i=BigInt(n)*100n+BigInt(r.padEnd(2,`0`));return i>BigInt(2**53-1)?{message:`Enter a valid tip amount.`,success:!1}:{cents:Number(i),success:!0}}function Q(e){let t=te(Ce,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}const Ee=`This promo code is invalid or cannot be applied.`;function De(e,t){return t.tipPercent===`custom`?t.customTip.trim()?Te(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}function Oe(e,t,n,r){let i={};return n&&(i.email=n),e.widget.fields.serviceFee&&(i.includeServiceFee=t.includeServiceFee),e.widget.fields.promoCode&&t.promoCode.trim()&&(i.promoCode=t.promoCode.trim()),e.widget.fields.tipping&&(i.tipCents=r),i}function ke(e,t,n){let r=e.widget.fields.tipping?De(n.subtotalCents,t):{cents:0,success:!0};if(!r.success)return{parsedTip:r,totalCents:null};let i=e.widget.fields.serviceFee&&t.includeServiceFee?n.serviceFeeCents||Math.round(n.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4):0;return{parsedTip:r,totalCents:n.totalCents-n.serviceFeeCents-n.tipCents+i+r.cents}}function Ae(e,t){return{displayedTotalCents:e.totalCents,promoError:t&&e.appliedDiscount?.source!==`promo_code`?Ee:void 0}}function je(e,t){let n;return t||(n=e instanceof Error?e.message:`The order total could not be updated.`),{paymentError:n,promoError:t?Ee:void 0}}function Me(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Ne(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Me(r.shipping,`Shipping`)}function Pe({billingAddress:e,catalog:t,email:n,phone:r,shippingAddress:i}){let a={payment_method_data:{billing_details:t.widget.fields.phone?{address:e.address,email:n,name:e.name,phone:r}:{address:e.address,email:n,name:e.name}}};return i?{...a,shipping:{address:i.address,name:i.name,phone:t.widget.fields.phone?r:i.phone??null}}:a}function Fe({catalog:e,checkoutItems:t,confirmationToken:n,email:r,fieldValues:i,metadata:a,phone:o,shippingAddress:s}){let c={customFieldAnswers:_(m(e,t),i.customFields),email:r};if(n&&(c.confirmationToken=n),a&&(c.metadata=a),e.widget.fields.memberId&&i.memberId.trim()&&(c.memberId=i.memberId.trim()),e.widget.fields.merchSize&&(c.merchSize=i.merchSize),e.widget.fields.phone&&(c.phone=o),s){let e={city:s.address.city??``,country:s.address.country,line1:s.address.line1??``,postal_code:s.address.postal_code??``,state:s.address.state??``};s.address.line2&&(e.line2=s.address.line2),c.shipping={address:e,name:s.name}}return c}function Ie(e){if(!e())throw Error(`Payment component is no longer active.`)}function Le(e,t){s(e,t)}function Re(e,t,n,r){return e.kind===`failed`?{kind:`payment_failed`,message:r}:e.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:e.paymentReference,reason:e.reason}:{email:n,kind:`payment`,payment:e.payment,quote:t}}async function ze({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:s,locallyPreviewedTotalCents:c,metadata:l,onPaymentRecoveryChange:d,phone:f,quote:p,stripe:m,stripeConnectedAccountId:h}){let g=a.trim().toLowerCase(),_=u(f),v=De(p.subtotalCents,o);if(!v.success)throw Error(v.message);let y=await r.calculateTotal({...Oe(t,o,g,v.cents),catalog:t,items:n});if(Ie(s),y.totalCents>0&&ge(p,y,c,h))return{kind:`quote_changed`,quote:y};let b,x;if(y.totalCents===0)t.widget.fields.shipping&&(b=Ne(t,o,Me(e.billing,`Billing`),e));else{if(!(i&&m))throw Error(`Payment form is still loading.`);await i.update({amount:y.totalCents}),Ie(s);let n=await i.submit();if(Ie(s),n.error)throw Error(n.error.message);let r=Me(e.billing,`Billing`);b=Ne(t,o,r,e);let a=await m.createConfirmationToken({elements:i,params:Pe({billingAddress:r,catalog:t,email:g,phone:_,shippingAddress:b})});if(Ie(s),a.error)throw Error(a.error.message);x=a.confirmationToken.id}Le(d,{connectedAccountId:y.payment.connectedAccountId,paymentReference:y.paymentReference});let S=await ye(r,{checkout:y,submission:Fe({catalog:t,checkoutItems:n,confirmationToken:x,email:g,fieldValues:o,metadata:l,phone:_,shippingAddress:b})},m);return Ie(s),Re(S,y,g,y.totalCents===0?`Order could not be completed. Review the details and try again.`:`Payment was declined. Check your payment details and try again.`)}function Be(e,t){s(e,t)}function Ve(e,t){s(e,t)}function He(e,t){return{...e,...t}}function Ue(e,t,n){return e.kind===`unresolved`&&e.reason===`action_required`&&!t&&!n}function We(e){return e instanceof W&&e.serverCode===`PAYMENT_WIDGET_SALES_LIMIT_REACHED`}function Ge({nextQuote:e,onQuoteChange:t,setDisplayedTotalCents:n,setPromoError:r,updateState:i,validatePromo:a}){let o=Ae(e,a);i({type:`quote_refresh_succeeded`}),n(o.displayedTotalCents),t(e),a&&r(o.promoError)}function Ke({error:e,setPromoError:t,updateState:n,validatePromo:r}){let i=je(e,r);r&&t(i.promoError),n(i.paymentError===void 0?{type:`quote_refresh_failed`}:{error:i.paymentError,type:`quote_refresh_failed`})}function qe({onPaymentComplete:t,onPaymentRecoveryChange:n,onPaymentUncertain:r,onQuoteChange:i,result:a,setDisplayedTotalCents:o,dispatchState:c}){if(a.kind===`quote_changed`){let t=`The total changed to ${e(a.quote.totalCents)}. Review it and pay again.`;i(a.quote,t),o(a.quote.totalCents),c({type:`quote_changed`});return}if(a.kind===`payment_failed`){Be(n,null),c({error:a.message,type:`retryable_failure`});return}if(a.kind===`payment_unresolved`){c({message:`Payment is still processing. Do not submit it again.`,type:`unresolved`}),Ve(r,{paymentReference:a.paymentReference,reason:a.reason});return}i(a.quote),Be(n,null),c({message:a.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`}),s(t,He(a.payment,{email:a.email,lineItems:a.quote.lineItems}))}function Je(e){let{catalog:t,checkoutItems:r,client:i,elements:a,email:o,fieldValues:l,metadata:u,onPaymentComplete:d,onResumePaymentFailed:f,onPaymentRecoveryChange:p,onPaymentUncertain:m,onQuoteChange:h,onStateChange:g,quote:_,resumePayment:v,stripe:y,stripeConnectedAccountId:b,stripeLoadFailed:C,paymentState:w,updateState:T}=e,[E,k]=O(_.totalCents),[A,j]=O(),M=D(!1),N=D(0),P=D(0),F=x(e=>T(e,!0),[T]),I=x(()=>{let e=P.current+1;return P.current=e,()=>P.current===e},[]);S(()=>()=>{P.current+=1,N.current+=1},[]);let{parsedTip:L,totalCents:R}=ke(t,l,_);S(()=>{R!==null&&(k(R),R>0&&a?.update({amount:R}))},[t.pricingPolicy.serviceFeeRateBasisPoints,t.widget.fields.serviceFee,a,l.includeServiceFee,R,_.serviceFeeCents,_.tipCents,_.totalCents,_.subtotalCents]),S(()=>{if(!v||M.current||w.status!==`recovering`)return;M.current=!0;let e=I();return g(Z(w)),be(i,v.paymentReference,y).then(t=>{if(e()&&!Ue(t,y,C)){if(t.kind===`failed`){Be(p,null),f(),F({error:`The previous payment failed. Check your details and try again.`,type:`recovery_failed`});return}if(t.kind===`unresolved`){F({message:`Payment is still processing. Do not submit it again.`,type:`unresolved`}),Ve(m,{paymentReference:t.paymentReference,reason:t.reason});return}Be(p,null),F({message:t.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`}),s(d,He(t.payment,{email:null,lineItems:null}))}}),()=>{e()&&(P.current+=1),M.current=!1}},[i,d,f,p,m,g,v,y,C,I,F,w]);let z=x((e=!1,t=!1)=>{t||(N.current+=1),e&&j(void 0),T({type:`field_changed`})},[T]);async function B(e=!1,n=!1){let a=o.trim().toLowerCase(),s=c({email:a,phone:``},!1);if(!(L.success&&(s.value||e)))return;N.current+=1;let u=N.current;T({type:`quote_refresh_started`});try{let e=await i.calculateTotal({...Oe(t,l,s.value?.email??``,L.cents),catalog:t,items:r});if(u!==N.current)return;Ge({nextQuote:e,onQuoteChange:h,setDisplayedTotalCents:k,setPromoError:j,updateState:T,validatePromo:n})}catch(e){if(u!==N.current)return;if(We(e)){T({type:`sold_out`});return}Ke({error:e,setPromoError:j,updateState:T,validatePromo:n})}}async function V(){j(void 0),await B(!0,!0)}async function H({addresses:e,phone:s}){F({type:`submission_started`});let c=I();try{let n=await ze({addresses:e,catalog:t,checkoutItems:r,client:i,elements:a,email:o,fieldValues:l,isAttemptActive:c,locallyPreviewedTotalCents:E,metadata:u,onPaymentRecoveryChange:p,phone:s,quote:_,stripe:y,stripeConnectedAccountId:b});if(!c())return;qe({dispatchState:F,onPaymentComplete:d,onPaymentRecoveryChange:p,onPaymentUncertain:m,onQuoteChange:h,result:n,setDisplayedTotalCents:k})}catch(e){if(!c())return;if(Be(p,null),We(e)){F({type:`sold_out`});return}let t=e instanceof W?n(e.serverCode):void 0;if(t)return F({type:`submission_validation_failed`}),{phoneError:t};F({error:e instanceof Error?e.message:`Payment could not be completed.`,type:`retryable_failure`})}}let U=w.status===`succeeded`||w.status===`unresolved`?w.message:void 0;return{commands:{applyPromo:V,fieldChanged:z,refreshAuthoritativeTotal:B,reportStripeLoadError:e=>F({error:e,type:`retryable_failure`}),reportValidationFailure:()=>F({type:`validation_failed`}),submit:H},state:{displayedTotalCents:E,isRecovering:w.status===`recovering`,isRefreshingQuote:w.status===`refreshing_quote`,isSubmitting:pe(w),parsedTip:L,paymentError:X(w),promoError:A,terminalMessage:U}}}const Ye=d;function Xe(e){let{connectedAccountId:t,publishableKey:n}=e.payment;return Ye(n,t?{stripeAccount:t}:void 0)}function Ze(e){return e===`monthly`?{interval:`month`,label:`Monthly`}:e===`annually`?{interval:`year`,label:`Annual`}:null}function Qe(e,t,n){if(n){let{connectedAccountId:e}=n;return e}if(`payment`in t){let{connectedAccountId:e}=t.payment;return e}let{connectedAccountId:r}=e.payment;return r}function $e({accentColor:e,catalog:t,checkoutItems:n,client:r,appearanceRoot:i,initialCustomFieldValues:a,metadata:o,onPaymentComplete:s,onResumePaymentFailed:c,onPaymentRecoveryChange:u,onPaymentUncertain:d,onQuoteChange:f,quote:p,resumePayment:m,onStateChange:h,stripeLoader:g,theme:_,visualStyle:v}){let[b,C]=O(()=>J(!!m)),w=D(b);w.current=b;let E=x((e,t=!1)=>{let n=fe(w.current,e);n!==w.current&&(w.current=n,C(n),t&&h(Z(n)))},[h]),k=Qe(t,p,m),j=D({connectedAccountId:k,paymentOption:p.paymentOption});b.status!==`submitting`&&b.status!==`recovering`&&(j.current={connectedAccountId:k,paymentOption:p.paymentOption});let{connectedAccountId:M,paymentOption:P}=j.current,F=T(()=>g(t.payment.publishableKey,M?{stripeAccount:M}:void 0).catch(()=>null),[t.payment.publishableKey,M,g]),[I,L]=O(!1);S(()=>{let e=!0;return L(!1),F.then(t=>{e&&t===null&&L(!0)}),()=>{e=!1}},[F]);let R=l(i,_,v,b.status===`submitting`||b.status===`recovering`,e);return R?A(N,{options:{amount:Math.max(p.totalCents,100),appearance:R,currency:t.payment.currency,excludedPaymentMethodTypes:[`us_bank_account`],mode:P===`one-time`?`payment`:`subscription`,syncAddressCheckbox:`none`},stripe:F,children:A(lt,{catalog:t,checkoutItems:n,client:r,initialCustomFieldValues:a,metadata:o,onPaymentComplete:s,onPaymentRecoveryChange:u,onPaymentUncertain:d,onQuoteChange:f,onResumePaymentFailed:c,onStateChange:h,paymentState:b,quote:p,resumePayment:m,stripeConnectedAccountId:M,stripeLoadFailed:I,updateState:E})},`${t.payment.publishableKey}:${M??`platform`}:${P}`):A(y,{fieldCount:3,label:`Loading payment form`})}function et({label:e}){return j(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[A(`p`,{children:e}),j(`div`,{"aria-hidden":`true`,children:[A(`span`,{}),A(`span`,{}),A(`span`,{})]})]})}function tt({onError:e,onReady:t,ready:n}){return j(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:A(et,{label:`Loading payment form...`}),A(`div`,{className:`lockerverse-payment__stripe-mount`,children:A(P,{onLoadError:({error:t})=>e(t.message??`Payment form failed to load.`),onReady:t,options:{business:{name:`Lockerverse`},fields:{billingDetails:{address:`never`,email:`never`,name:`never`,phone:`never`}},layout:`tabs`,terms:{applePay:`auto`,auBecsDebit:`never`,bancontact:`never`,card:`always`,cashapp:`never`,googlePay:`never`,ideal:`never`,paypal:`auto`,sepaDebit:`never`,sofort:`never`,usBankAccount:`never`},wallets:{applePay:`auto`,googlePay:`never`}}})})]})}function nt({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return j(`div`,{className:`lockerverse-payment__address`,children:[A(`h2`,{children:e}),j(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:A(et,{label:`Loading ${e.toLowerCase()}...`}),A(`div`,{className:`lockerverse-payment__stripe-mount`,children:A(M,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function rt({message:e}){return e?A(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function it({catalog:e,displayedTotalCents:t,fieldValues:n,isBillingAddressReady:r,isPaymentReady:i,isShippingAddressReady:a,onAddressChange:o,onFieldValuesChange:s,onStripeLoadError:c,setIsBillingAddressReady:l,setIsPaymentReady:u,setIsShippingAddressReady:d}){let f=t>0;return j(k,{children:[f?A(tt,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?A(nt,{label:f?`Billing address`:`Shipping address`,mode:`billing`,onChange:e=>o(`billing`,e),onError:c,onReady:()=>l(!0),ready:r}):null,e.widget.fields.shipping?j(`div`,{className:`lockerverse-payment__shipping`,children:[A(ue,{checked:n.shippingMatchesBilling,name:`shippingMatchesBilling`,onChange:e=>{s({...n,shippingMatchesBilling:e}),e?o(`shipping`,null):d(!1)},children:`Shipping is same as billing information`}),n.shippingMatchesBilling?null:A(nt,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function at({catalog:t,displayedTotalCents:n,fieldValues:r,isBillingAddressReady:i,isPaymentReady:a,isRequiredShippingReady:o,isSubmitting:s,onFieldValuesChange:c,quote:l}){let u=n===0,d=u?!t.widget.fields.shipping||i&&o:a&&i&&o,f=Ze(l.paymentOption),p=u?`Complete order`:`Pay ${e(n)}`;!u&&f&&(p=`Subscribe for ${e(n)}/${f.interval}`),s&&(p=u?`Completing…`:`Processing…`);let m=`Process payment for ${e(n)} total`;return u?m=`Complete order`:f&&(m=`Start ${f.label.toLowerCase()} subscription for ${e(n)}`),j(`div`,{className:`lockerverse-payment__actions`,children:[A(q,{amountCents:l.serviceFeeCents||Math.round(l.subtotalCents*t.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:t.widget.fields.serviceFee,onChange:c,values:r}),A(`button`,{"aria-busy":s,"aria-label":m,disabled:s||!d,type:`submit`,children:p})]})}function ot(e,t){let n=e.elements.namedItem(t);if(n instanceof HTMLElement){n.focus();return}n instanceof RadioNodeList&&Array.from(n).find(e=>e instanceof HTMLElement)?.focus()}function st({customFieldErrors:e,emailRef:t,form:n,parsedTipSuccess:r,phoneRef:i,validationErrors:a}){if(a.email){t.current?.focus();return}if(a.phone){i.current?.focus();return}if(!r){n.querySelector(`[name="tip"]`)?.focus();return}let[o]=Object.keys(e);o&&ot(n,`custom:${o}`)}function ct({email:e,emailDiscountPercentOff:n,emailErrorId:r,emailId:o,emailRef:s,errors:c,onEmailBlur:l,onEmailChange:u,onPhoneChange:d,phone:f,phoneCountry:p,phoneEnabled:m,phoneErrorId:h,phoneId:g,phoneRef:_}){return j(`div`,{className:`lockerverse-payment__contact`,children:[A(t,{error:c.email,errorId:r,id:o,label:`Email`,name:`email`,onBlur:l,onChange:e=>u(e.currentTarget.value),ref:s,required:!0,value:e}),n===void 0?null:j(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,n,`% off.`]}),m?A(i,{error:c.phone,errorId:h,id:g,label:`Phone`,children:A(a,{country:p,error:c.phone,errorId:h,id:g,inputRef:_,name:`phone`,onChange:d,required:!0,value:f})}):null]})}function lt({catalog:e,checkoutItems:t,client:n,initialCustomFieldValues:i,metadata:a,onPaymentComplete:o,onResumePaymentFailed:s,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,onStateChange:f,quote:p,resumePayment:g,stripeConnectedAccountId:_,stripeLoadFailed:y,paymentState:x,updateState:w}){let T=m(e,t),[E,k]=O(``),[M,N]=O(``),[P,L]=O(`US`),[R,z]=O({}),[B,V]=O({}),[H,U]=O(),[ee,te]=O(!1),[ne,re]=O(!1),[ie,ae]=O(!1),[W,oe]=O(()=>({customFields:h(T,i),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`})),se=D({billing:null,shipping:null}),ce=D(null),G=D(null),K=D(null),ue=D(p.totalCents>0),q=Je({catalog:e,checkoutItems:t,client:n,elements:F(),email:E,fieldValues:W,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,onResumePaymentFailed:s,onStateChange:f,paymentState:x,quote:p,resumePayment:g,stripe:I(),stripeConnectedAccountId:_,stripeLoadFailed:y,updateState:w}),{displayedTotalCents:J,isRecovering:Y,isRefreshingQuote:fe,isSubmitting:X,parsedTip:Z,paymentError:pe,promoError:me,terminalMessage:he}=q.state,ge=`lockerverse-${C()}`,_e=`${ge}-email`,ve=`${_e}-error`,ye=`${ge}-phone`,be=`${ye}-error`,xe=`${ge}-tip-error`,Se=(Z.success?Z.cents:null)??0,Ce=J-Se,we=!e.widget.fields.shipping||W.shippingMatchesBilling||ie;S(()=>{X&&K.current?.focus({preventScroll:!0})},[X]),S(()=>{X||R.email||!R.phone||G.current?.focus()},[R.email,R.phone,X]),S(()=>{let e=J>0;e&&!ue.current&&(te(!1),re(!1)),ue.current=e},[J]);function Te(e){q.commands.fieldChanged(!1,e!==`email`),z(t=>{let n={...t};return delete n[e],n})}function Q(e){let t=e.promoCode!==W.promoCode,n=e.includeServiceFee!==W.includeServiceFee;q.commands.fieldChanged(t,!(t||n)),oe(e),V({}),U(void 0)}async function Ee(t){t.preventDefault();let n=e.widget.fields.phone?r(M,P):``,i=c({email:E,phone:n},e.widget.fields.phone),a=v(T,W.customFields);if(!(i.value&&Z.success)||Object.keys(a).length>0){z(i.errors),V(a),U(Z.success?void 0:Z.message),q.commands.reportValidationFailure();let e=t.currentTarget;queueMicrotask(()=>{st({customFieldErrors:a,emailRef:ce,form:e,parsedTipSuccess:Z.success,phoneRef:G,validationErrors:i.errors})});return}z({}),V({});let o=await q.commands.submit({addresses:se.current,phone:n});o?.phoneError&&z({phone:o.phoneError})}return he?A(`p`,{className:`lockerverse-payment__payment-status`,ref:K,role:`status`,tabIndex:-1,children:he}):Y?A(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):j(`form`,{"aria-busy":X,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:Ee,children:[A(`div`,{"data-lockerverse-input-region":``,inert:X?!0:void 0,children:j(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:X,children:[A(b,{displayedBaseCents:Ce,displayedTipCents:Se,displayedTotalCents:J,quote:p}),A(le,{enabled:e.widget.fields.tipping,error:H,errorId:xe,onChange:Q,values:W}),A(ct,{email:E,emailDiscountPercentOff:p.appliedDiscount?.source===`email_list`?p.appliedDiscount.percentageOff:void 0,emailErrorId:ve,emailId:_e,emailRef:ce,errors:R,onEmailBlur:()=>q.commands.refreshAuthoritativeTotal(),onEmailChange:e=>{k(e),Te(`email`)},onPhoneChange:({value:e,country:t})=>{N(e),L(t),Te(`phone`)},phone:M,phoneCountry:P,phoneEnabled:e.widget.fields.phone,phoneErrorId:be,phoneId:ye,phoneRef:G}),A(it,{catalog:e,displayedTotalCents:J,fieldValues:W,isBillingAddressReady:ne,isPaymentReady:ee,isShippingAddressReady:ie,onAddressChange:(e,t)=>{se.current[e]=t},onFieldValuesChange:Q,onStripeLoadError:q.commands.reportStripeLoadError,setIsBillingAddressReady:re,setIsPaymentReady:te,setIsShippingAddressReady:ae}),A(de,{customFields:T,errors:B,fields:e.widget.fields,idPrefix:ge,isPromoApplying:fe,memberIdLabel:e.community?.memberIdLabel,onApplyPromo:q.commands.applyPromo,onChange:Q,promoError:me,values:W}),A(at,{catalog:e,displayedTotalCents:J,fieldValues:W,isBillingAddressReady:ne,isPaymentReady:ee,isRequiredShippingReady:we,isSubmitting:X,onFieldValuesChange:Q,quote:p})]})}),X?A(`p`,{className:`lockerverse-payment__sr-only`,ref:K,role:`status`,tabIndex:-1,children:J===0?`Completing order…`:`Processing payment…`}):null,A(rt,{message:pe})]})}function ut(){return A(y,{fieldCount:2,label:`Loading payment…`,sectionCount:2,showCheckbox:!0})}function dt(e,t){switch(t.type){case`loading`:return{phase:`loading`,revision:e.revision};case`ready`:return mt(t.displayedQuote,e.revision+1);case`error`:return{failure:t.failure,phase:`error`,revision:e.revision};case`checkout`:return e.phase===`ready`?{...e,displayedQuote:t.checkout,quoteFailure:void 0}:e;case`quote-error`:return e.phase===`ready`?{...e,quoteFailure:t.failure}:e;default:return e}}function $(e,t,n){return e?.catalog===t&&e.selectionKey===n}function ft({checkout:e}){return{displayedQuote:e,type:`ready`}}function pt(e){return e instanceof Error?e.message:`Lockerverse payment could not load.`}function mt(e,t){return{checkoutItems:[...e.items],displayedQuote:e,phase:`ready`,quoteFailure:void 0,revision:t}}function ht(e,t){let n=e.widget.fields.serviceFee;return oe(e,{includeServiceFee:n,selection:t})}function gt(e,t){try{return mt(ht(e,t),1)}catch(e){return{failure:pt(e),phase:`error`,revision:0}}}function _t({catalog:e,client:t,paymentState:n,selection:r}){let i=Q(r),a=i.success?JSON.stringify(i.value):`invalid-selection`,o=T(()=>i.success?i.value:[],[i.success,a]),[s,c]=E(dt,void 0,()=>i.success?gt(e,o):{phase:`loading`,revision:0}),l=D(void 0),u=D(0),d=D(s.phase===`ready`?{catalog:e,selectionKey:a}:void 0),f=D(s.phase===`error`?{catalog:e,selectionKey:a}:void 0),p=n===`submitting`||n===`success`||n===`unresolved`;S(()=>{if(!i.success||p||$(f.current,e,a)||$(l.current,e,a))return;let n=!0;l.current={catalog:e,selectionKey:a};let r=$(d.current,e,a);r||c({type:`loading`});function s(e){n&&c(e)}function m(){n&&(l.current=void 0,f.current={catalog:e,selectionKey:a})}let h;function g(t){if(!n||(l.current=void 0,f.current={catalog:e,selectionKey:a},r&&h!==void 0&&u.current!==h))return;let i=pt(t);if(i===`This option is sold out.`){c({failure:i,type:`error`});return}c(r?{failure:i,type:`quote-error`}:{failure:i,type:`error`})}async function _(){try{h=u.current;let n=e.widget.fields.serviceFee;if(!r){let t=ht(e,o);r=!0,d.current={catalog:e,selectionKey:a},s(ft({checkout:t}))}let i=await t.calculateTotal({catalog:e,includeServiceFee:n,selection:o});m(),u.current===h&&s({checkout:i,type:`checkout`})}catch(e){g(e)}}return _(),()=>{n=!1,$(l.current,e,a)&&(l.current=void 0)}},[e,t,i.success,p,a,o]);let m=$(d.current,e,a)||$(f.current,e,a)||$(l.current,e,a),h=p||m?s:{phase:`loading`,revision:s.revision};return{selectionError:i.success?void 0:i.message,session:h,updateCheckout:e=>{u.current+=1,c({checkout:e,type:`checkout`})}}}const vt={annually:`/year`,monthly:`/month`,"one-time":``};function yt({branding:e,catalog:t}){return j(`header`,{children:[t.widget.showCommunityBranding&&e?j(`div`,{className:`lockerverse-payment__branding`,children:[e.imageUrl?A(`img`,{alt:e.name,height:`48`,src:e.imageUrl,width:`48`}):null,A(`strong`,{children:e.name})]}):null,A(`h1`,{children:t.widget.title??t.widget.name}),t.widget.description?A(`p`,{children:t.widget.description}):null]})}function bt({catalog:t,selection:n}){let r=n?.length?t.products.filter(e=>n.some(t=>t.productSlug===e.slug)):t.products;return r.length===0?null:j(`div`,{className:`lockerverse-payment__payment-summary`,children:[A(`h2`,{children:`Products`}),A(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.map(t=>{let n=t.pricingMode===`fixed`?t.amountCents:t.minimumAmountCents,r=vt[t.paymentOption];return j(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[A(`span`,{children:t.name}),A(`strong`,{children:n===null?`Choose amount`:`${t.pricingMode===`custom`?`From `:``}${e(n)}${r}`})]},t.id)})}),A(`p`,{children:`Base prices. Final total is checked at checkout.`})]})}function xt(e,t){let n=f(e?.[`--lockerverse-accent`]??t?.accentColor??`#38d77a`),r=p(n),i={...e};return(e?.[`--lockerverse-accent`]!==void 0||t?.accentColor)&&(i[`--lockerverse-accent`]=n),r&&e?.[`--lockerverse-accent-contrast`]===void 0&&(i[`--lockerverse-accent-contrast`]=r),{accent:n,rootStyle:i}}function St({catalog:e,client:t,loadError:n,onRetry:r,...i}){let{branding:a,className:o,initialCustomFieldValues:s,metadata:c,onPaymentComplete:l,onPaymentRecoveryChange:u,onPaymentUncertain:d,resumePayment:f,selection:p,style:m,stripeLoader:h=Ye,theme:g=`dark`,..._}=i,[v,y]=O(f),b=D(null),[C,T]=O(),[E,k]=O(`idle`),M=D(void 0),{selectionError:N,session:P,updateCheckout:F}=_t({catalog:e,client:t,paymentState:E,selection:p}),I=P.phase===`ready`?P.revision:void 0,L=x(e=>{I!==void 0&&(M.current=I),k(e)},[I]),R=x(e=>u?.(e),[u]),z=x(()=>{y(void 0)},[]);S(()=>{P.phase===`loading`&&T(void 0)},[P.phase]),w(()=>{P.phase===`ready`&&M.current!==P.revision&&k(e=>e===`success`||e===`unresolved`?e:`idle`)},[P.phase,P.revision]);let B=[`lockerverse-payment`,o].filter(Boolean).join(` `),V=a??e.community,{accent:H,rootStyle:U}=xt(m,V);return N?A(`section`,{..._,className:B,"data-lockerverse-theme":g,role:`alert`,style:U,children:N}):P.phase===`error`&&P.failure===`This option is sold out.`||E===`sold_out`?j(`section`,{..._,className:B,"data-lockerverse-theme":g,role:`alert`,style:U,children:[A(`h1`,{children:`Sold out`}),A(`p`,{children:`This option is sold out.`})]}):P.phase===`error`?A(`section`,{..._,className:B,"data-lockerverse-theme":g,style:U,children:A(`p`,{role:`alert`,children:P.failure})}):P.phase===`ready`?j(`section`,{..._,"aria-label":`Payment`,className:B,"data-lockerverse-theme":g,"data-payment-state":E,ref:b,style:U,children:[A(yt,{branding:V,catalog:e}),n?j(`div`,{role:`alert`,children:[A(`p`,{children:n.message}),A(`button`,{onClick:r,type:`button`,children:`Retry`})]}):null,C?A(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:C}):null,P.quoteFailure?j(`div`,{className:`lockerverse-payment__payment-status`,role:`alert`,children:[A(`span`,{children:P.quoteFailure}),A(`span`,{children:` The final total will be checked when you submit.`})]}):null,A($e,{accentColor:H,appearanceRoot:b,catalog:e,checkoutItems:P.checkoutItems,client:t,initialCustomFieldValues:s,metadata:c,onPaymentComplete:l,onPaymentRecoveryChange:R,onPaymentUncertain:d,onQuoteChange:(e,t)=>{T(t),F(e)},onResumePaymentFailed:z,onStateChange:L,quote:P.displayedQuote,resumePayment:v,stripeLoader:h,theme:g,visualStyle:U},P.revision)]}):j(`section`,{..._,"aria-busy":`true`,"aria-label":`Payment`,className:B,"data-lockerverse-theme":g,style:U,children:[A(yt,{branding:V,catalog:e}),n?j(`div`,{role:`alert`,children:[A(`p`,{children:n.message}),A(`button`,{onClick:r,type:`button`,children:`Retry`})]}):null,A(ut,{})]})}function Ct({children:e,loading:t=!1,viewProps:n}){let{branding:r,className:i,initialCustomFieldValues:a,metadata:o,onPaymentComplete:s,onPaymentRecoveryChange:c,onPaymentUncertain:l,resumePayment:u,selection:d,stripeLoader:m,style:h,theme:g=`dark`,..._}=n,v=f(h?.[`--lockerverse-accent`]??r?.accentColor??`#38d77a`),y=p(v),b={...h};return(h?.[`--lockerverse-accent`]!==void 0||r?.accentColor)&&(b[`--lockerverse-accent`]=v),y&&h?.[`--lockerverse-accent-contrast`]===void 0&&(b[`--lockerverse-accent-contrast`]=y),A(`section`,{..._,...t?{"aria-busy":!0,"aria-label":`Payment`}:{},className:[`lockerverse-payment`,i].filter(Boolean).join(` `),"data-lockerverse-theme":g,style:b,children:e})}function wt({widget:e,...t}){return e.error&&!e.catalog?j(Ct,{viewProps:t,children:[A(`p`,{role:`alert`,children:e.error.message}),A(`button`,{onClick:e.refresh,type:`button`,children:`Retry`})]}):e.loading?j(Ct,{loading:!0,viewProps:t,children:[e.catalog?j(k,{children:[A(yt,{branding:t.branding??e.catalog.community,catalog:e.catalog}),A(bt,{catalog:e.catalog,selection:t.selection})]}):null,A(ut,{})]}):e.catalog?A(St,{catalog:e.catalog,client:e.client,loadError:e.error,onRetry:e.refresh,...t}):A(Ct,{loading:!0,viewProps:t,children:A(ut,{})})}export{Xe as n,wt as t};
|
|
2
2
|
//# sourceMappingURL=lockerverse-payment.js.map
|