@lockerverse/react 0.2.64 → 0.2.66

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 CHANGED
@@ -17,7 +17,10 @@ npm install @stripe/react-stripe-js @stripe/stripe-js
17
17
  ## Use
18
18
 
19
19
  ```tsx
20
- import { LockerversePayment } from "@lockerverse/react/payment";
20
+ import {
21
+ LockerversePayment,
22
+ type LockerversePaymentSelectionItem,
23
+ } from "@lockerverse/react/payment";
21
24
  import "@lockerverse/react/payment.css";
22
25
 
23
26
  export function Checkout() {
@@ -41,6 +44,74 @@ export function Checkout() {
41
44
 
42
45
  The original `@lockerverse/react` and `@lockerverse/react/styles.css` payment imports remain supported.
43
46
 
47
+ ## Custom Product UI
48
+
49
+ Use `useLockerverseWidget` to build custom Product presentation from the live
50
+ Lockerverse catalog. This entry point does not import the payment UI or Stripe.
51
+
52
+ ```tsx
53
+ import {
54
+ LockerversePayment,
55
+ type LockerversePaymentSelectionItem,
56
+ preloadLockerversePayment,
57
+ } from "@lockerverse/react/payment";
58
+ import "@lockerverse/react/payment.css";
59
+ import { useLockerverseWidget } from "@lockerverse/react/widget";
60
+ import { useState } from "react";
61
+
62
+ const widgetOptions = {
63
+ communitySlug: "auburn",
64
+ widgetSlug: "tailgate-party",
65
+ };
66
+
67
+ export function CustomProductCheckout() {
68
+ const { error, loading, products, refresh, widget } =
69
+ useLockerverseWidget(widgetOptions);
70
+ const [selection, setSelection] =
71
+ useState<LockerversePaymentSelectionItem | null>(null);
72
+
73
+ if (loading) {
74
+ return <p>Loading {widget?.name ?? "checkout"}...</p>;
75
+ }
76
+ if (error) {
77
+ return <button onClick={refresh}>Try again</button>;
78
+ }
79
+ if (selection) {
80
+ return (
81
+ <LockerversePayment
82
+ {...widgetOptions}
83
+ selection={[selection]}
84
+ />
85
+ );
86
+ }
87
+
88
+ return products
89
+ .filter((product) => product.pricingMode === "fixed")
90
+ .map((product) => (
91
+ <button
92
+ key={product.id}
93
+ onClick={() =>
94
+ setSelection(
95
+ product.paymentOption === "one-time"
96
+ ? { productSlug: product.slug, quantity: 1 }
97
+ : { productSlug: product.slug }
98
+ )
99
+ }
100
+ >
101
+ {product.name}
102
+ </button>
103
+ ));
104
+ }
105
+ ```
106
+
107
+ The hook returns immutable catalog data together with `status`, `loading`,
108
+ `error`, and `refresh`. The host owns presentation and selection state. Pass the
109
+ selected Product slugs to `LockerversePayment`; Lockerverse remains
110
+ authoritative for availability, pricing, and payment.
111
+
112
+ This small example shows fixed-price Products. For a custom-price Product, ask
113
+ for the amount in the host UI and pass `amountCents` with `productSlug`.
114
+
44
115
  For a monthly or annual Product, omit quantity. The component shows the
45
116
  cadence and configures Stripe Elements for a subscription:
46
117
 
@@ -55,6 +126,34 @@ cadence and configures Stripe Elements for a subscription:
55
126
  Recurring checkout accepts one fixed Product. It does not accept quantities,
56
127
  custom amounts, or multiple Products.
57
128
 
129
+ ## Preload Payment
130
+
131
+ Call `preloadLockerversePayment` when the customer points at or focuses the
132
+ checkout action. It prepares the selected checkout and Stripe connection. The
133
+ payment component reuses the same in-flight or recent result for 30 seconds.
134
+
135
+ ```tsx
136
+ const selection = { productSlug: "adult", quantity: 2 };
137
+ const preload = () => {
138
+ void preloadLockerversePayment({
139
+ ...widgetOptions,
140
+ selection: [selection],
141
+ }).catch(() => undefined);
142
+ };
143
+
144
+ <button
145
+ onClick={() => setSelection(selection)}
146
+ onFocus={preload}
147
+ onPointerEnter={preload}
148
+ >
149
+ Continue to payment
150
+ </button>;
151
+ ```
152
+
153
+ The preload is best-effort. A failure is not cached, so
154
+ `LockerversePayment` makes a new request when it mounts. The cache key includes
155
+ the site configuration, custom `fetch` function, and full selection.
156
+
58
157
  ## Donate launcher
59
158
 
60
159
  `LockerverseDonateLauncher` turns an existing payment widget into a native
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { a as LockerversePaymentRecovery, c as LockerversePaymentTheme, i as LockerversePaymentProps, l as LockerversePaymentUncertain, n as LockerverseDonateLauncherProps, o as LockerversePaymentSelectionItem, r as LockerversePaymentBranding, s as LockerversePaymentStyle, t as LockerverseDonateLauncherPosition, u as LockerverseStripeLoader } from "./types.js";
2
2
  import { t as LockerverseDonateLauncher } from "./lockerverse-donate-launcher.js";
3
- import { t as LockerversePayment } from "./lockerverse-payment.js";
4
- export { LockerverseDonateLauncher, type LockerverseDonateLauncherPosition, type LockerverseDonateLauncherProps, LockerversePayment, type LockerversePaymentBranding, type LockerversePaymentProps, type LockerversePaymentRecovery, type LockerversePaymentSelectionItem, type LockerversePaymentStyle, type LockerversePaymentTheme, type LockerversePaymentUncertain, type LockerverseStripeLoader };
3
+ import { n as preloadLockerversePayment, r as LockerversePayment, t as LockerversePaymentPreloadOptions } from "./preload-lockerverse-payment.js";
4
+ import { n as UseLockerverseWidgetResult, r as useLockerverseWidget, t as LockerverseWidgetStatus } from "./use-lockerverse-widget.js";
5
+ export { LockerverseDonateLauncher, type LockerverseDonateLauncherPosition, type LockerverseDonateLauncherProps, LockerversePayment, type LockerversePaymentBranding, type LockerversePaymentPreloadOptions, type LockerversePaymentProps, type LockerversePaymentRecovery, type LockerversePaymentSelectionItem, type LockerversePaymentStyle, type LockerversePaymentTheme, type LockerversePaymentUncertain, type LockerverseStripeLoader, type LockerverseWidgetStatus, type UseLockerverseWidgetResult, preloadLockerversePayment, useLockerverseWidget };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./lockerverse-payment.js";import{t}from"./lockerverse-donate-launcher.js";export{t as LockerverseDonateLauncher,e as LockerversePayment};
1
+ import{t as e}from"./lockerverse-payment.js";import{t}from"./lockerverse-donate-launcher.js";import{t as n}from"./preload-lockerverse-payment.js";import{t as r}from"./use-lockerverse-widget.js";export{t as LockerverseDonateLauncher,e as LockerversePayment,n as preloadLockerversePayment,r as useLockerverseWidget};
@@ -1,2 +1,2 @@
1
- import{a as e,c as t,d as n,i as r,l as i,o as a,s as o,t as s,u as c}from"./contact-validation.js";import{LockerverseSdkError as l,createLockerverseCheckoutClient as u}from"@lockerverse/sdk/checkout";import{createContext as d,useCallback as f,useContext as p,useEffect as m,useId as h,useLayoutEffect as g,useMemo as _,useReducer as v,useRef as y,useState as b}from"react";import{AddressElement as x,Elements as S,PaymentElement as C,useElements as w,useStripe as ee}from"@stripe/react-stripe-js";import{loadStripe as T}from"@stripe/stripe-js";import{array as E,minLength as D,minValue as O,nonEmpty as k,number as A,object as j,pipe as M,regex as N,safeInteger as P,safeParse as F,strictObject as I,string as te,trim as L,union as ne}from"valibot";import{Fragment as R,jsx as z,jsxs as B}from"react/jsx-runtime";import{Select as V}from"@base-ui/react/select";const H=d(void 0);function U({children:e,container:t}){return z(H.Provider,{value:t,children:e})}function W(){return z(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:z(`path`,{d:`m4 6 4 4 4-4`})})}function G(){return z(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:z(`path`,{d:`m3 8 3 3 7-7`})})}function K({ariaDescribedBy:e,ariaLabel:t,ariaLabelledBy:n,className:r,id:i,invalid:a=!1,name:o,onValueChange:s,options:c,value:l}){let u=p(H),d=[`lockerverse-payment__select`,r].filter(Boolean).join(` `);return z(`div`,{className:d,children:B(V.Root,{id:i,items:c,name:o,onValueChange:e=>{e!==null&&s(e)},value:l,children:[B(V.Trigger,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:`lockerverse-payment__select-trigger`,children:[z(V.Value,{}),z(V.Icon,{"aria-hidden":`true`,className:`lockerverse-payment__select-icon`,children:z(W,{})})]}),z(V.Portal,{container:u,children:z(V.Positioner,{alignItemWithTrigger:!1,className:`lockerverse-payment__select-positioner`,sideOffset:6,children:z(V.Popup,{className:`lockerverse-payment__select-popup`,children:z(V.List,{className:`lockerverse-payment__select-list`,children:c.map(e=>B(V.Item,{className:`lockerverse-payment__select-item`,value:e.value,children:[z(V.ItemText,{children:e.label}),z(V.ItemIndicator,{"aria-hidden":`true`,className:`lockerverse-payment__select-item-indicator`,children:z(G,{})})]},e.value))})})})})]})})}const q=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],J=[`15`,`12`,`10`,`5`],Y=[...J,`custom`];function re({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=Y.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%Y.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+Y.length)%Y.length;break;case`Home`:r=0;break;case`End`:r=Y.length-1;break;default:return}e.preventDefault();let i=Y[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return B(`div`,{className:`lockerverse-payment__tip-box`,children:[z(`p`,{children:`Add a tip to support the Lockerverse platform`}),B(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[J.map(e=>B(`label`,{className:`lockerverse-payment__tip-choice`,children:[z(`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}),B(`span`,{children:[e,`%`]})]},e)),B(`label`,{className:`lockerverse-payment__tip-choice`,children:[z(`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`}),z(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?B(`label`,{children:[z(`span`,{children:`Custom tip`}),B(`span`,{className:`lockerverse-payment__money-input`,children:[z(`span`,{"aria-hidden":`true`,children:`$`}),z(`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?z(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):z(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ie({checked:e,children:t,name:n,onChange:r}){return B(`label`,{className:`lockerverse-payment__check-row`,children:[z(`input`,{checked:e,name:n,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),z(`span`,{children:t})]})}function ae({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:i,onChange:o,onApplyPromo:s,promoError:c,values:l}){let u=e=>o({...l,...e});return B(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?B(`label`,{children:[z(`span`,{children:`Member ID`}),z(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?B(`div`,{className:`lockerverse-payment__field`,children:[z(`span`,{id:`${r}-merch-size-label`,children:`Size`}),z(K,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>u({merchSize:e}),options:q.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?B(`div`,{className:`lockerverse-payment__field`,children:[z(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),B(`div`,{className:`lockerverse-payment__promo-control`,children:[z(`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}),z(`button`,{disabled:!l.promoCode.trim()||i,onClick:s,type:`button`,children:i?`Applying…`:`Apply`})]}),c?z(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,z(a,{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 oe({amountCents:e,enabled:t,onChange:n,values:r}){return t?B(ie,{checked:r.includeServiceFee,name:`includeServiceFee`,onChange:e=>n({...r,includeServiceFee:e}),children:[`Add `,se(e),` to help cover processing fees`]}):null}function se(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function ce(e){return s(e)}function le(t,n){let i=n?{...t,phone:ce(t.phone)}:t,a=j(n?{email:r,phone:e}:{email:r}),o=F(a,i);if(o.success)return{errors:{},value:o.output};let s={};for(let e of o.issues){let t=e.path?.[0]?.key;(t===`email`||t===`phone`)&&!s[t]&&(s[t]=e.message)}return{errors:s,value:null}}const ue=M(te(),L(),k()),de=M(A(),P(),O(1)),fe=M(E(ne([I({amountCents:de,productSlug:ue}),I({productSlug:ue,quantity:de}),I({productSlug:ue})])),D(1)),pe=M(te(),L(),N(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function me(e){let t=F(pe,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 he(e){let t=F(fe,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}function ge(e,t){switch(t.type){case`loading`:return{configuration:t.configuration,phase:`loading`,revision:e.revision,selectionKey:t.selectionKey};case`ready`:return{catalog:t.catalog,checkoutItems:t.checkoutItems,client:t.client,configuration:t.configuration,phase:`ready`,preparedCheckout:t.preparedCheckout,revision:e.revision+1,selectionKey:t.selectionKey};case`error`:return{configuration:t.configuration,failure:t.failure,phase:`error`,revision:e.revision,selectionKey:t.selectionKey};case`checkout`:return e.phase===`ready`?{...e,preparedCheckout:t.preparedCheckout}:e;case`retry`:return{phase:`idle`,revision:e.revision+1};default:return e}}function _e(e,t){let{apiBaseUrl:n,communitySlug:r,environment:i,fetch:a,requestTimeoutMs:o,sentryDsn:s,widgetSlug:c}=e,l={communitySlug:r,widgetSlug:c,...a?{fetch:a}:{},...t?{onError:t}:{},...o===void 0?{}:{requestTimeoutMs:o},...s===void 0?{}:{sentryDsn:s}};if(n===void 0){if(i===`development`)throw TypeError(`Lockerverse development checkout requires an API base URL.`);return{...l,...i===`production`?{environment:i}:{}}}return{...l,apiBaseUrl:n,...i===void 0?{}:{environment:i}}}function X(e,t,n){return e?.configuration===t&&e.selectionKey===n}function ve({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,onError:i,paymentState:a,requestTimeoutMs:o,selection:s,sentryDsn:c,widgetSlug:l}){let d=_(()=>({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,requestTimeoutMs:o,sentryDsn:c,widgetSlug:l}),[e,t,n,r,o,c,l]),f=he(s),p=f.success?JSON.stringify(f.value):`invalid-selection`,h=_(()=>f.success?JSON.parse(p):[],[f.success,p]),[g,b]=v(ge,{phase:`idle`,revision:0}),x=y(void 0),S=y(void 0),C=y(i);return C.current=i,m(()=>{if(!f.success||a===`submitting`||a===`success`||a===`unresolved`||X(S.current,d,p)||X(x.current,d,p))return;let e=!0,t={configuration:d,selectionKey:p};x.current=t,b({configuration:d,selectionKey:p,type:`loading`});async function n(){try{let n=u(_e(d,e=>C.current?.(e))),{catalog:r,checkout:i}=await n.bootstrapCheckout({items:h}),a=[...i.items];e&&(x.current=void 0,S.current=t,b({catalog:r,checkoutItems:a,client:n,configuration:d,preparedCheckout:i,selectionKey:p,type:`ready`}))}catch(n){e&&(x.current=void 0,S.current=t,b({configuration:d,failure:n instanceof Error?n.message:`Lockerverse payment could not load.`,selectionKey:p,type:`error`}))}}return n(),()=>{e=!1,X(x.current,d,p)&&(x.current=void 0)}},[d,f.success,a,p,g.revision,h]),{retryCheckout:()=>{x.current=void 0,S.current=void 0,b({type:`retry`})},selectionError:f.success?void 0:f.message,session:g,updateCheckout:e=>b({preparedCheckout:e,type:`checkout`})}}const ye=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],be=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function xe(e,t,n){return(n===t.totalCents?be:ye).some(n=>e[n]!==t[n])||e.payment.connectedAccountId!==t.payment.connectedAccountId||e.payment.currency!==t.payment.currency||JSON.stringify(e.appliedDiscount)!==JSON.stringify(t.appliedDiscount)||JSON.stringify(e.lineItems)!==JSON.stringify(t.lineItems)}function Se(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 Ce(e,t,n){if(t.checkoutStatus!==`action_required`)return Se(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 Se(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function we(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof l&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return Ce(e,r,n)}async function Te(e,t,n){try{return Ce(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}function Ee(e){throw Error(`Unexpected payment workflow value: ${String(e)}`)}function De(e,t){return t===void 0?{phase:e}:{error:t,phase:e}}function Oe(e){return e?{phase:`recovering`}:{phase:`editing`}}function ke(e){return e.phase===`editing`||e.phase===`invalid`?e.error:e.phase===`refreshing_quote`?e.previousError:void 0}function Ae(e){return e.phase===`succeeded`?`success`:e.phase===`unresolved`?`unresolved`:e.phase===`submitting`||e.phase===`recovering`?`submitting`:e.phase===`invalid`?`invalid`:ke(e)?`error`:`idle`}function je(e){return e.phase===`submitting`}function Me(e,t){if(e.phase===`succeeded`||e.phase===`unresolved`)return e;switch(t.type){case`field_changed`:return e.phase===`invalid`?De(`editing`,e.error):e;case`validation_failed`:return e.phase===`submitting`||e.phase===`recovering`?e:De(`invalid`,ke(e));case`quote_refresh_started`:{if(e.phase===`submitting`||e.phase===`recovering`)return e;let n=ke(e);return{...n===void 0?{}:{previousError:n},phase:`refreshing_quote`,validatePromo:t.validatePromo}}case`quote_refresh_succeeded`:return e.phase===`refreshing_quote`?{phase:`editing`}:e;case`quote_refresh_failed`:return e.phase===`refreshing_quote`?De(`editing`,t.error??e.previousError):e;case`submission_started`:return e.phase===`recovering`?e:{phase:`submitting`};case`quote_changed`:return e.phase===`submitting`?{phase:`editing`}:e;case`retryable_failure`:return De(`editing`,t.error);case`recovery_failed`:return e.phase===`recovering`?De(`editing`,t.error):e;case`succeeded`:return e.phase===`submitting`||e.phase===`recovering`?{message:t.message,phase:`succeeded`}:e;case`unresolved`:return e.phase===`submitting`||e.phase===`recovering`?{message:t.message,paymentReference:t.paymentReference,phase:`unresolved`,reason:t.reason}:e;default:return Ee(t)}}function Ne(e,t){return t.tipPercent===`custom`?t.customTip.trim()?me(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}function Pe(e,t,n,r){return{...n?{email:n}:{},...e.widget.fields.serviceFee?{includeServiceFee:t.includeServiceFee}:{},...e.widget.fields.promoCode&&t.promoCode.trim()?{promoCode:t.promoCode.trim()}:{},...e.widget.fields.tipping?{tipCents:r}:{}}}function Fe(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Ie(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Fe(r.shipping,`Shipping`)}function Le({billingAddress:e,catalog:t,email:n,phone:r,shippingAddress:i}){return{payment_method_data:{billing_details:{address:e.address,email:n,name:e.name,...t.widget.fields.phone?{phone:r}:{}}},...i?{shipping:{address:i.address,name:i.name,phone:t.widget.fields.phone?r:i.phone??null}}:{}}}function Re({catalog:e,confirmationToken:t,email:n,fieldValues:r,metadata:i,phone:a,shippingAddress:s}){return{...t?{confirmationToken:t}:{},customFieldAnswers:o(e.widget.customFields,r.customFields),email:n,...i?{metadata:i}:{},...e.widget.fields.memberId&&r.memberId.trim()?{memberId:r.memberId.trim()}:{},...e.widget.fields.merchSize?{merchSize:r.merchSize}:{},...e.widget.fields.phone?{phone:a}:{},...s?{shipping:{address:{city:s.address.city??``,country:s.address.country,line1:s.address.line1??``,...s.address.line2?{line2:s.address.line2}:{},postal_code:s.address.postal_code??``,state:s.address.state??``},name:s.name}}:{}}}function Z(e,t){try{e?.(t)}catch{}}function Q(e){if(!e())throw Error(`Payment component is no longer active.`)}async function ze({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:s,locallyPreviewedTotalCents:c,metadata:l,onPaymentRecoveryChange:u,phone:d,quote:f,stripe:p}){let m=a.trim().toLowerCase(),h=ce(d),g=Ne(f.subtotalCents,o);if(!g.success)throw Error(g.message);let _=Pe(t,o,m,g.cents),v=await r.calculateTotal({..._,items:n});if(Q(s),v.totalCents>0&&xe(f,v,c))return{kind:`quote_changed`,quote:v};if(v.totalCents===0){let n;t.widget.fields.shipping&&(n=Ie(t,o,Fe(e.billing,`Billing`),e)),Q(s),Z(u,{connectedAccountId:v.payment.connectedAccountId,paymentReference:v.paymentReference});let i=await we(r,{checkout:v,submission:Re({catalog:t,email:m,fieldValues:o,metadata:l,phone:h,...n?{shippingAddress:n}:{}})},p);return Q(s),i.kind===`failed`?{kind:`payment_failed`,message:`Order could not be completed. Review the details and try again.`}:i.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:i.paymentReference,reason:i.reason}:{kind:`payment`,payment:i.payment,quote:v}}if(!(i&&p))throw Error(`Payment form is still loading.`);await i.update({amount:v.totalCents}),Q(s);let y=await i.submit();if(Q(s),y.error)throw Error(y.error.message);let b=Fe(e.billing,`Billing`),x=Ie(t,o,b,e),S=await p.createConfirmationToken({elements:i,params:Le({billingAddress:b,catalog:t,email:m,phone:h,shippingAddress:x})});if(Q(s),S.error)throw Error(S.error.message);Z(u,{connectedAccountId:v.payment.connectedAccountId,paymentReference:v.paymentReference});let C=await we(r,{checkout:v,submission:Re({catalog:t,confirmationToken:S.confirmationToken.id,email:m,fieldValues:o,metadata:l,phone:h,...x?{shippingAddress:x}:{}})},p);return Q(s),C.kind===`failed`?{kind:`payment_failed`,message:`Payment was declined. Check your payment details and try again.`}:C.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:C.paymentReference,reason:C.reason}:{kind:`payment`,payment:C.payment,quote:v}}function Be(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Ve(e,t){if(!t)return e instanceof Error?e.message:`The order total could not be updated.`}function He({nextQuote:e,onQuoteChange:t,setDisplayedTotalCents:n,setPromoError:r,updateWorkflow:i,validatePromo:a}){i({type:`quote_refresh_succeeded`}),n(e.totalCents),t(e),a&&r(e.appliedDiscount?.source===`promo_code`?void 0:`This promo code is invalid or cannot be applied.`)}function Ue({error:e,setPromoError:t,updateWorkflow:n,validatePromo:r}){r&&t(`This promo code is invalid or cannot be applied.`);let i=Ve(e,r);n(i===void 0?{type:`quote_refresh_failed`}:{error:i,type:`quote_refresh_failed`})}function We({onPaymentComplete:e,onPaymentRecoveryChange:t,onPaymentUncertain:n,onQuoteChange:r,result:i,setDisplayedTotalCents:a,transitionWorkflow:o}){if(i.kind===`quote_changed`){let e=`The total changed to ${Be(i.quote.totalCents)}. Review it and pay again.`;r(i.quote,e),a(i.quote.totalCents),o({type:`quote_changed`});return}if(i.kind===`payment_failed`){Z(t,null),o({error:i.message,type:`retryable_failure`});return}if(i.kind===`payment_unresolved`){o({message:`Payment is still processing. Do not submit it again.`,paymentReference:i.paymentReference,reason:i.reason,type:`unresolved`});try{n?.({paymentReference:i.paymentReference,reason:i.reason})}catch{}return}r(i.quote),Z(t,null),o({message:i.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`});try{e?.(i.payment)}catch{}}function Ge(e){let{catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,metadata:s,onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,onStateChange:p,quote:h,resumePayment:g,stripe:_}=e,[x,S]=v(Me,g,Oe),[C,w]=b(h.totalCents),[ee,T]=b(),E=y(!1),D=y(0),O=y(0),k=y(x);k.current=x;let A=f((e,t=!1)=>{let n=k.current,r=Me(n,e);r!==n&&(k.current=r,S(e),t&&p(Ae(r)))},[p]),j=f(e=>A(e,!0),[A]),M=f(()=>{let e=O.current+1;return O.current=e,()=>O.current===e},[]);m(()=>()=>{O.current+=1},[]);let N=t.widget.fields.tipping?Ne(h.subtotalCents,o):{cents:0,success:!0},P=N.success?N.cents:null;m(()=>{if(P===null)return;let e=t.widget.fields.serviceFee&&o.includeServiceFee?h.serviceFeeCents||Math.round(h.subtotalCents*t.pricingPolicy.serviceFeeRateBasisPoints/1e4):0,n=h.totalCents-h.serviceFeeCents-h.tipCents+e+P;w(n),n>0&&i?.update({amount:n})},[t.pricingPolicy.serviceFeeRateBasisPoints,t.widget.fields.serviceFee,i,o.includeServiceFee,P,h.serviceFeeCents,h.tipCents,h.totalCents,h.subtotalCents]),m(()=>{if(!(g&&_)||E.current)return;E.current=!0;let e=M();return p(Ae(k.current)),Te(r,g.paymentReference,_).then(t=>{if(e()){if(t.kind===`failed`){Z(l,null),j({error:`The previous payment failed. Check your details and try again.`,type:`recovery_failed`});return}if(t.kind===`unresolved`){j({message:`Payment is still processing. Do not submit it again.`,paymentReference:t.paymentReference,reason:t.reason,type:`unresolved`});try{u?.({paymentReference:t.paymentReference,reason:t.reason})}catch{}return}Z(l,null),j({message:t.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`});try{c?.(t.payment)}catch{}}}),()=>{e()&&(O.current+=1),E.current=!1}},[r,c,l,u,p,g,_,M,j]);let F=f((e=!1)=>{e&&T(void 0),A({type:`field_changed`})},[A]);async function I(e=!1,i=!1){let s=le({email:a.trim().toLowerCase(),phone:``},!1);if(!(N.success&&(s.value||e)))return;D.current+=1;let c=D.current;A({type:`quote_refresh_started`,validatePromo:i});try{let e=await r.calculateTotal({...Pe(t,o,s.value?.email??``,N.cents),items:n});if(c!==D.current)return;He({nextQuote:e,onQuoteChange:d,setDisplayedTotalCents:w,setPromoError:T,updateWorkflow:A,validatePromo:i})}catch(e){if(c!==D.current)return;Ue({error:e,setPromoError:T,updateWorkflow:A,validatePromo:i})}}async function te(){T(void 0),await I(!0,!0)}async function L({addresses:e,phone:f}){j({type:`submission_started`});let p=M();try{let m=await ze({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:p,locallyPreviewedTotalCents:C,metadata:s,onPaymentRecoveryChange:l,phone:f,quote:h,stripe:_});if(!p())return;We({onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,result:m,setDisplayedTotalCents:w,transitionWorkflow:j})}catch(e){if(!p())return;Z(l,null),j({error:e instanceof Error?e.message:`Payment could not be completed.`,type:`retryable_failure`})}}let ne=x.phase===`succeeded`||x.phase===`unresolved`?x.message:void 0;return{commands:{applyPromo:te,fieldChanged:F,refreshAuthoritativeTotal:I,reportStripeLoadError:e=>j({error:e,type:`retryable_failure`}),reportValidationFailure:()=>j({type:`validation_failed`}),submit:L},state:{displayedTotalCents:C,isRecovering:x.phase===`recovering`,isRefreshingQuote:x.phase===`refreshing_quote`,isSubmitting:je(x),parsedTip:N,paymentError:ke(x),promoError:ee,terminalMessage:ne}}}function $(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Ke(e){return e===`monthly`?{interval:`month`,label:`Monthly`}:e===`annually`?{interval:`year`,label:`Annual`}:null}const qe=[{callingCode:`+1`,label:`🇺🇸 +1`,value:`US`},{callingCode:`+52`,label:`🇲🇽 +52`,value:`MX`},{callingCode:`+380`,label:`🇺🇦 +380`,value:`UA`},{callingCode:`+48`,label:`🇵🇱 +48`,value:`PL`},{callingCode:`+1`,label:`🇨🇦 +1`,value:`CA`},{callingCode:`+49`,label:`🇩🇪 +49`,value:`DE`},{callingCode:`+44`,label:`🇬🇧 +44`,value:`GB`},{callingCode:`+46`,label:`🇸🇪 +46`,value:`SE`},{callingCode:`+358`,label:`🇫🇮 +358`,value:`FI`},{callingCode:`+1`,label:`🇵🇷 +1`,value:`PR`}];function Je(e,t){return e.trim().startsWith(`+`)?e:`${qe.find(e=>e.value===t)?.callingCode??`+1`}${e}`}function Ye({accentColor:e,catalog:t,checkoutItems:n,client:r,fontFamily:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,quote:u,resumePayment:d,onStateChange:f,stripeLoader:p,theme:m,visualStyle:h}){let g=d?d.connectedAccountId:u.payment.connectedAccountId,v=_(()=>p(t.payment.publishableKey,g?{stripeAccount:g}:void 0).catch(()=>null),[t.payment.publishableKey,g,p]);return z(S,{options:{amount:Math.max(u.totalCents,100),appearance:{rules:{".Input:focus":{borderColor:e,boxShadow:`0 0 0 1px ${e}`,outline:`none`}},theme:m===`light`?`stripe`:`night`,variables:{borderRadius:h?.[`--lockerverse-radius`]??`10px`,colorBackground:h?.[`--lockerverse-control`]??(m===`light`?`#f5f6f7`:`#121212`),colorDanger:h?.[`--lockerverse-danger`]??(m===`light`?`#c52b3e`:`#f08a98`),colorPrimary:e,colorText:h?.[`--lockerverse-text`]??(m===`light`?`#121416`:`#ffffff`),colorTextPlaceholder:h?.[`--lockerverse-placeholder`]??(m===`light`?`#72767d`:`#6b6b6b`),colorTextSecondary:h?.[`--lockerverse-muted`]??(m===`light`?`#62666d`:`#a1a1aa`),focusBoxShadow:`none`,focusOutline:`none`,fontFamily:i,fontSizeBase:`16px`}},currency:u.payment.currency,excludedPaymentMethodTypes:[`us_bank_account`],mode:u.paymentOption===`one-time`?`payment`:`subscription`,syncAddressCheckbox:`none`},stripe:v,children:z(ot,{catalog:t,checkoutItems:n,client:r,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:f,quote:u,resumePayment:d})},`${t.payment.publishableKey}:${g??`platform`}:${u.paymentOption}`)}function Xe({label:e}){return B(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[z(`p`,{children:e}),B(`div`,{"aria-hidden":`true`,children:[z(`span`,{}),z(`span`,{}),z(`span`,{})]})]})}function Ze({onError:e,onReady:t,ready:n}){return B(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:z(Xe,{label:`Loading payment form...`}),z(`div`,{className:`lockerverse-payment__stripe-mount`,children:z(C,{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 Qe({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return B(`div`,{className:`lockerverse-payment__address`,children:[z(`h2`,{children:e}),B(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:z(Xe,{label:`Loading ${e.toLowerCase()}...`}),z(`div`,{className:`lockerverse-payment__stripe-mount`,children:z(x,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function $e({message:e}){return e?z(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function et({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 B(R,{children:[f?z(Ze,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?z(Qe,{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?B(`div`,{className:`lockerverse-payment__shipping`,children:[z(ie,{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:z(Qe,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function tt({displayedBaseCents:e,displayedTipCents:t,displayedTotalCents:n,quote:r}){let i=Ke(r.paymentOption),a=Math.max(0,e-r.subtotalCents+r.discountCents);return B(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[z(`h2`,{children:`Order summary`}),z(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.lineItems.map(e=>B(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[B(`span`,{children:[e.productName,e.quantity>1?B(R,{children:[` `,B(`small`,{children:[`× `,e.quantity]})]}):null,e.paymentOption===`monthly`?z(`small`,{children:` · Monthly`}):null,e.paymentOption===`annually`?z(`small`,{children:` · Annual`}):null]}),z(`strong`,{children:$(e.subtotalCents)})]},e.listingId))}),B(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[a>0?B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[z(`span`,{children:`Service fee`}),z(`strong`,{children:$(a)})]}):null,r.discountCents>0&&r.appliedDiscount?B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[B(`span`,{children:[r.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,r.appliedDiscount.percentageOff,`% off)`]}),B(`strong`,{children:[`-`,$(r.discountCents)]})]}):null,t>0?B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[z(`span`,{children:`Tip`}),z(`strong`,{children:$(t)})]}):null,B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[z(`span`,{children:i?`${i.label} total`:`Total`}),z(`strong`,{children:$(n)})]})]})]})}function nt({catalog:e,displayedTotalCents:t,fieldValues:n,isBillingAddressReady:r,isPaymentReady:i,isRequiredShippingReady:a,isSubmitting:o,onFieldValuesChange:s,quote:c}){let l=t===0,u=l?!e.widget.fields.shipping||r&&a:i&&r&&a,d=Ke(c.paymentOption),f=l?`Complete order`:`Pay ${$(t)}`;!l&&d&&(f=`Subscribe for ${$(t)}/${d.interval}`),o&&(f=l?`Completing…`:`Processing…`);let p=`Process payment for ${$(t)} total`;return l?p=`Complete order`:d&&(p=`Start ${d.label.toLowerCase()} subscription for ${$(t)}`),B(`div`,{className:`lockerverse-payment__actions`,children:[z(oe,{amountCents:c.serviceFeeCents||Math.round(c.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:e.widget.fields.serviceFee,onChange:s,values:n}),z(`button`,{"aria-busy":o,"aria-label":p,disabled:o||!u,type:`submit`,children:f})]})}function rt(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 it({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&&rt(n,`custom:${o}`)}function at({email:e,emailDiscountPercentOff:t,emailErrorId:n,emailId:r,emailRef:i,errors:a,onEmailBlur:o,onEmailChange:s,onPhoneChange:c,onPhoneCountryChange:l,phone:u,phoneCountry:d,phoneEnabled:f,phoneErrorId:p,phoneId:m,phoneRef:h}){return B(`div`,{className:`lockerverse-payment__contact`,children:[z(`label`,{htmlFor:r,children:`Email`}),z(`input`,{"aria-describedby":a.email?n:void 0,"aria-invalid":a.email?`true`:void 0,autoComplete:`email`,id:r,name:`email`,onBlur:o,onChange:e=>s(e.currentTarget.value),placeholder:`name@example.com`,ref:i,type:`email`,value:e}),a.email?z(`p`,{className:`lockerverse-payment__field-message`,id:n,children:a.email}):null,t===void 0?null:B(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),f?B(R,{children:[z(`label`,{htmlFor:m,children:`Phone`}),B(`div`,{className:`lockerverse-payment__phone-control`,children:[z(K,{ariaLabel:`Phone number country`,className:`lockerverse-payment__select--phone-country`,name:`phoneCountry`,onValueChange:l,options:qe,value:d}),z(`input`,{"aria-describedby":a.phone?p:void 0,"aria-invalid":a.phone?`true`:void 0,autoComplete:`tel`,id:m,inputMode:`tel`,name:`phone`,onChange:e=>c(e.currentTarget.value),placeholder:`(201) 555-0123`,ref:h,type:`tel`,value:u})]}),a.phone?z(`p`,{className:`lockerverse-payment__field-message`,id:p,children:a.phone}):null]}):null]})}function ot({catalog:e,checkoutItems:n,client:r,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:d,resumePayment:f}){let[p,g]=b(``),[_,v]=b(``),[x,S]=b(`US`),[C,T]=b({}),[E,D]=b({}),[O,k]=b(),[A,j]=b(!1),[M,N]=b(!1),[P,F]=b(!1),[I,te]=b({customFields:t(e.widget.customFields),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),L=y({billing:null,shipping:null}),ne=y(null),R=y(null),V=y(null),H=y(d.totalCents>0),U=Ge({catalog:e,checkoutItems:n,client:r,elements:w(),email:p,fieldValues:I,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:d,resumePayment:f,stripe:ee()}),{displayedTotalCents:W,isRecovering:G,isRefreshingQuote:K,isSubmitting:q,parsedTip:J,paymentError:Y,promoError:ie,terminalMessage:oe}=U.state,se=`lockerverse-${h()}`,ce=`${se}-email`,ue=`${ce}-error`,de=`${se}-phone`,fe=`${de}-error`,pe=`${se}-tip-error`,me=(J.success?J.cents:null)??0,he=W-me,ge=!e.widget.fields.shipping||I.shippingMatchesBilling||P;m(()=>{q&&V.current?.focus()},[q]),m(()=>{let e=W>0;e&&!H.current&&(j(!1),N(!1)),H.current=e},[W]);function _e(e){U.commands.fieldChanged(),T(t=>{let n={...t};return delete n[e],n})}function X(e){U.commands.fieldChanged(e.promoCode!==I.promoCode),te(e),D({}),k(void 0)}async function ve(t){t.preventDefault();let n=le({email:p,phone:Je(_,x)},e.widget.fields.phone),r=i(e.widget.customFields,I.customFields);if(!(n.value&&J.success)||Object.keys(r).length>0){T(n.errors),D(r),k(J.success?void 0:J.message),U.commands.reportValidationFailure();let e=t.currentTarget;queueMicrotask(()=>{it({customFieldErrors:r,emailRef:ne,form:e,parsedTipSuccess:J.success,phoneRef:R,validationErrors:n.errors})});return}T({}),D({}),await U.commands.submit({addresses:L.current,phone:Je(_,x)})}return oe?z(`p`,{className:`lockerverse-payment__payment-status`,ref:V,role:`status`,tabIndex:-1,children:oe}):G?z(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):B(`form`,{"aria-busy":q,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:ve,children:[z(`div`,{"data-lockerverse-input-region":``,inert:q?!0:void 0,children:B(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:q,children:[z(tt,{displayedBaseCents:he,displayedTipCents:me,displayedTotalCents:W,quote:d}),z(re,{enabled:e.widget.fields.tipping,error:O,errorId:pe,onChange:X,values:I}),z(at,{email:p,emailDiscountPercentOff:d.appliedDiscount?.source===`email_list`?d.appliedDiscount.percentageOff:void 0,emailErrorId:ue,emailId:ce,emailRef:ne,errors:C,onEmailBlur:()=>U.commands.refreshAuthoritativeTotal(),onEmailChange:e=>{g(e),_e(`email`)},onPhoneChange:e=>{v(e),_e(`phone`)},onPhoneCountryChange:e=>{S(e),U.commands.fieldChanged()},phone:_,phoneCountry:x,phoneEnabled:e.widget.fields.phone,phoneErrorId:fe,phoneId:de,phoneRef:R}),z(et,{catalog:e,displayedTotalCents:W,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isShippingAddressReady:P,onAddressChange:(e,t)=>{L.current[e]=t},onFieldValuesChange:X,onStripeLoadError:U.commands.reportStripeLoadError,setIsBillingAddressReady:N,setIsPaymentReady:j,setIsShippingAddressReady:F}),z(ae,{customFields:e.widget.customFields,errors:E,fields:e.widget.fields,idPrefix:se,isPromoApplying:K,onApplyPromo:U.commands.applyPromo,onChange:X,promoError:ie,values:I}),z(nt,{catalog:e,displayedTotalCents:W,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isRequiredShippingReady:ge,isSubmitting:q,onFieldValuesChange:X,quote:d})]})}),q?z(`p`,{className:`lockerverse-payment__sr-only`,ref:V,role:`status`,tabIndex:-1,children:W===0?`Completing order…`:`Processing payment…`}):null,z($e,{message:Y})]})}function st(){return B(`div`,{className:`lockerverse-payment__skeleton-loader-block`,children:[z(`span`,{className:`lockerverse-payment__skeleton-loader-label`}),B(`div`,{className:`lockerverse-payment__skeleton-loader-content`,children:[z(`span`,{className:`lockerverse-payment__skeleton-loader-full`}),B(`div`,{className:`lockerverse-payment__skeleton-loader-grid`,children:[z(`span`,{className:`lockerverse-payment__skeleton-loader-half`}),z(`span`,{className:`lockerverse-payment__skeleton-loader-half`})]})]})]})}function ct(){return B(`div`,{className:`lockerverse-payment__loading`,children:[z(`span`,{"aria-live":`polite`,className:`lockerverse-payment__sr-only`,role:`status`,children:`Loading payment…`}),B(`div`,{"aria-hidden":`true`,className:`lockerverse-payment__skeleton`,children:[B(`div`,{className:`lockerverse-payment__skeleton-branding`,children:[z(`span`,{className:`lockerverse-payment__skeleton-avatar`}),z(`span`,{className:`lockerverse-payment__skeleton-community`})]}),B(`div`,{className:`lockerverse-payment__skeleton-contact`,children:[B(`div`,{className:`lockerverse-payment__skeleton-field`,children:[z(`span`,{className:`lockerverse-payment__skeleton-label`}),z(`span`,{className:`lockerverse-payment__skeleton-input`})]}),B(`div`,{className:`lockerverse-payment__skeleton-field`,children:[z(`span`,{className:`lockerverse-payment__skeleton-label`}),z(`span`,{className:`lockerverse-payment__skeleton-input`})]})]}),z(st,{}),z(st,{}),B(`div`,{className:`lockerverse-payment__skeleton-actions`,children:[z(`span`,{className:`lockerverse-payment__skeleton-check-line`}),z(`span`,{className:`lockerverse-payment__skeleton-button`})]})]})]})}function lt({apiBaseUrl:e,branding:t,className:r,communitySlug:i,environment:a,fetch:o,metadata:s,onError:l,onPaymentComplete:u,onPaymentRecoveryChange:d,onPaymentUncertain:p,requestTimeoutMs:h,resumePayment:_,selection:v,sentryDsn:x,style:S,stripeLoader:C=T,theme:w=`dark`,widgetSlug:ee,...E}){let D=y(_).current,O=y(null),[k,A]=b(),[j,M]=b(`idle`),N=y(void 0),{retryCheckout:P,selectionError:F,session:I,updateCheckout:te}=ve({apiBaseUrl:e,communitySlug:i,environment:a,fetch:o,onError:l,paymentState:j,requestTimeoutMs:h,selection:v,sentryDsn:x,widgetSlug:ee}),L=I.phase===`ready`?I.revision:void 0,ne=f(e=>{L!==void 0&&(N.current=L),M(e)},[L]);m(()=>{I.phase===`loading`&&A(void 0)},[I.phase]),g(()=>{I.phase===`ready`&&N.current!==I.revision&&M(e=>e===`success`||e===`unresolved`?e:`idle`)},[I.phase,I.revision]);let R=[`lockerverse-payment`,r].filter(Boolean).join(` `),V=t??(I.phase===`ready`?I.catalog.community:null),H=n(S?.[`--lockerverse-accent`]??V?.accentColor??`#38d77a`),W=c(H),G={...S,...S?.[`--lockerverse-accent`]!==void 0||V?.accentColor?{"--lockerverse-accent":H}:{},...W&&S?.[`--lockerverse-accent-contrast`]===void 0?{"--lockerverse-accent-contrast":W}:{}};if(F)return z(`section`,{...E,className:R,"data-lockerverse-theme":w,role:`alert`,style:G,children:F});if(I.phase===`error`)return B(`section`,{...E,className:R,"data-lockerverse-theme":w,style:G,children:[z(`p`,{role:`alert`,children:I.failure}),z(`button`,{onClick:P,type:`button`,children:`Retry`})]});if(I.phase!==`ready`)return z(`section`,{...E,"aria-busy":`true`,"aria-label":`Payment`,className:R,"data-lockerverse-theme":w,style:G,children:z(ct,{})});let{catalog:K,checkoutItems:q,client:J,preparedCheckout:Y}=I;return B(`section`,{...E,"aria-label":`Payment`,className:R,"data-lockerverse-theme":w,"data-payment-state":j,ref:O,style:G,children:[B(`header`,{children:[K.widget.showCommunityBranding&&V?B(`div`,{className:`lockerverse-payment__branding`,children:[V.imageUrl?z(`img`,{alt:V.name,height:`48`,src:V.imageUrl,width:`48`}):null,z(`strong`,{children:V.name})]}):null,z(`h1`,{children:K.widget.title??K.widget.name}),K.widget.description?z(`p`,{children:K.widget.description}):null]}),k?z(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:k}):null,z(U,{container:O,children:z(Ye,{accentColor:H,catalog:K,checkoutItems:q,client:J,fontFamily:S?.[`--lockerverse-font-family`]??`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,metadata:s,onPaymentComplete:u,onPaymentRecoveryChange:d,onPaymentUncertain:p,onQuoteChange:(e,t)=>{A(t),te(e)},onStateChange:ne,quote:Y,resumePayment:D,stripeLoader:C,theme:w,visualStyle:G})})]})}export{lt as t};
1
+ import{a as e,c as t,d as n,i as r,l as i,o as a,s as o,t as s,u as c}from"./contact-validation.js";import{LockerverseSdkError as l,createLockerverseCheckoutClient as u}from"@lockerverse/sdk/checkout";import{createContext as d,useCallback as f,useContext as p,useEffect as m,useId as h,useLayoutEffect as g,useMemo as _,useReducer as v,useRef as y,useState as b}from"react";import{AddressElement as x,Elements as S,PaymentElement as C,useElements as w,useStripe as ee}from"@stripe/react-stripe-js";import{loadStripe as T}from"@stripe/stripe-js";import{array as E,minLength as D,minValue as O,nonEmpty as k,number as A,object as j,pipe as M,regex as N,safeInteger as P,safeParse as F,strictObject as I,string as te,trim as L,union as ne}from"valibot";import{Fragment as R,jsx as z,jsxs as B}from"react/jsx-runtime";import{Select as V}from"@base-ui/react/select";const H=d(void 0);function U({children:e,container:t}){return z(H.Provider,{value:t,children:e})}function W(){return z(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:z(`path`,{d:`m4 6 4 4 4-4`})})}function G(){return z(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:z(`path`,{d:`m3 8 3 3 7-7`})})}function K({ariaDescribedBy:e,ariaLabel:t,ariaLabelledBy:n,className:r,id:i,invalid:a=!1,name:o,onValueChange:s,options:c,value:l}){let u=p(H),d=[`lockerverse-payment__select`,r].filter(Boolean).join(` `);return z(`div`,{className:d,children:B(V.Root,{id:i,items:c,name:o,onValueChange:e=>{e!==null&&s(e)},value:l,children:[B(V.Trigger,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:`lockerverse-payment__select-trigger`,children:[z(V.Value,{}),z(V.Icon,{"aria-hidden":`true`,className:`lockerverse-payment__select-icon`,children:z(W,{})})]}),z(V.Portal,{container:u,children:z(V.Positioner,{alignItemWithTrigger:!1,className:`lockerverse-payment__select-positioner`,sideOffset:6,children:z(V.Popup,{className:`lockerverse-payment__select-popup`,children:z(V.List,{className:`lockerverse-payment__select-list`,children:c.map(e=>B(V.Item,{className:`lockerverse-payment__select-item`,value:e.value,children:[z(V.ItemText,{children:e.label}),z(V.ItemIndicator,{"aria-hidden":`true`,className:`lockerverse-payment__select-item-indicator`,children:z(G,{})})]},e.value))})})})})]})})}const q=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],J=[`15`,`12`,`10`,`5`],Y=[...J,`custom`];function re({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=Y.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%Y.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+Y.length)%Y.length;break;case`Home`:r=0;break;case`End`:r=Y.length-1;break;default:return}e.preventDefault();let i=Y[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return B(`div`,{className:`lockerverse-payment__tip-box`,children:[z(`p`,{children:`Add a tip to support the Lockerverse platform`}),B(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[J.map(e=>B(`label`,{className:`lockerverse-payment__tip-choice`,children:[z(`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}),B(`span`,{children:[e,`%`]})]},e)),B(`label`,{className:`lockerverse-payment__tip-choice`,children:[z(`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`}),z(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?B(`label`,{children:[z(`span`,{children:`Custom tip`}),B(`span`,{className:`lockerverse-payment__money-input`,children:[z(`span`,{"aria-hidden":`true`,children:`$`}),z(`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?z(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):z(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ie({checked:e,children:t,name:n,onChange:r}){return B(`label`,{className:`lockerverse-payment__check-row`,children:[z(`input`,{checked:e,name:n,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),z(`span`,{children:t})]})}function ae({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:i,onChange:o,onApplyPromo:s,promoError:c,values:l}){let u=e=>o({...l,...e});return B(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?B(`label`,{children:[z(`span`,{children:`Member ID`}),z(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?B(`div`,{className:`lockerverse-payment__field`,children:[z(`span`,{id:`${r}-merch-size-label`,children:`Size`}),z(K,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>u({merchSize:e}),options:q.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?B(`div`,{className:`lockerverse-payment__field`,children:[z(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),B(`div`,{className:`lockerverse-payment__promo-control`,children:[z(`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}),z(`button`,{disabled:!l.promoCode.trim()||i,onClick:s,type:`button`,children:i?`Applying…`:`Apply`})]}),c?z(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,z(a,{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 oe({amountCents:e,enabled:t,onChange:n,values:r}){return t?B(ie,{checked:r.includeServiceFee,name:`includeServiceFee`,onChange:e=>n({...r,includeServiceFee:e}),children:[`Add `,se(e),` to help cover processing fees`]}):null}function se(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}const ce=new WeakMap;function le(e,t,n){let r=ce.get(e);r||(r=new Map,ce.set(e,r));let i=`${t}:${n??`platform`}`,a=r.get(i);if(a)return a;let o=Promise.resolve(e(t,n?{stripeAccount:n}:void 0)).catch(e=>{throw r?.delete(i),e});return r.set(i,o),o}function ue(e){return s(e)}function de(t,n){let i=n?{...t,phone:ue(t.phone)}:t,a=j(n?{email:r,phone:e}:{email:r}),o=F(a,i);if(o.success)return{errors:{},value:o.output};let s={};for(let e of o.issues){let t=e.path?.[0]?.key;(t===`email`||t===`phone`)&&!s[t]&&(s[t]=e.message)}return{errors:s,value:null}}const fe=3e4,X=new Map,pe=new WeakMap;let me=1;function he(e){if(!e)return 0;let t=pe.get(e);if(t!==void 0)return t;let n=me;return me+=1,pe.set(e,n),n}function ge(e,t){return JSON.stringify([e.apiBaseUrl??null,e.communitySlug,e.environment??null,he(e.fetch),e.requestTimeoutMs??null,e.sentryDsn??null,e.widgetSlug,t])}function _e(e){let{apiBaseUrl:t,communitySlug:n,environment:r,fetch:i,requestTimeoutMs:a,sentryDsn:o,widgetSlug:s}=e,c={communitySlug:n,widgetSlug:s,...i?{fetch:i}:{},...a===void 0?{}:{requestTimeoutMs:a},...o===void 0?{}:{sentryDsn:o}};if(t===void 0){if(r===`development`)throw TypeError(`Lockerverse development checkout requires an API base URL.`);return{...c,...r===`production`?{environment:r}:{}}}return{...c,apiBaseUrl:t,...r===void 0?{}:{environment:r}}}function ve(e,t){X.delete(ge(e,t))}function ye({configuration:e,onError:t,selection:n,selectionKey:r}){let i=ge(e,r),a=X.get(i);if(a&&(!a.settled||a.expiresAt>Date.now()))return t&&a.onError.add(t),a.promise;X.delete(i);let o={expiresAt:1/0,onError:new Set(t?[t]:[]),promise:Promise.resolve().then(async()=>{let t=u(_e(e)),{catalog:r,checkout:i}=await t.bootstrapCheckout({items:n});return{catalog:r,checkoutItems:[...i.items],client:t,preparedCheckout:i}}),settled:!1};return X.set(i,o),o.promise.then(()=>{o.expiresAt=Date.now()+fe,o.settled=!0,setTimeout(()=>{X.get(i)===o&&X.delete(i)},fe)},e=>{if(X.delete(i),e instanceof l)for(let t of o.onError)try{t(e)}catch{}}),o.promise}const be=M(te(),L(),k()),xe=M(A(),P(),O(1)),Se=M(E(ne([I({amountCents:xe,productSlug:be}),I({productSlug:be,quantity:xe}),I({productSlug:be})])),D(1)),Ce=M(te(),L(),N(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function we(e){let t=F(Ce,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 Te(e){let t=F(Se,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}function Ee(e,t){switch(t.type){case`loading`:return{configuration:t.configuration,phase:`loading`,revision:e.revision,selectionKey:t.selectionKey};case`ready`:return{catalog:t.catalog,checkoutItems:t.checkoutItems,client:t.client,configuration:t.configuration,phase:`ready`,preparedCheckout:t.preparedCheckout,revision:e.revision+1,selectionKey:t.selectionKey};case`error`:return{configuration:t.configuration,failure:t.failure,phase:`error`,revision:e.revision,selectionKey:t.selectionKey};case`checkout`:return e.phase===`ready`?{...e,preparedCheckout:t.preparedCheckout}:e;case`retry`:return{phase:`idle`,revision:e.revision+1};default:return e}}function De(e,t,n){return e?.configuration===t&&e.selectionKey===n}function Oe({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,onError:i,paymentState:a,requestTimeoutMs:o,selection:s,sentryDsn:c,widgetSlug:l}){let u=_(()=>({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,requestTimeoutMs:o,sentryDsn:c,widgetSlug:l}),[e,t,n,r,o,c,l]),d=Te(s),f=d.success?JSON.stringify(d.value):`invalid-selection`,p=_(()=>d.success?JSON.parse(f):[],[d.success,f]),[h,g]=v(Ee,{phase:`idle`,revision:0}),b=y(void 0),x=y(void 0),S=y(i);return S.current=i,m(()=>{if(!d.success||a===`submitting`||a===`success`||a===`unresolved`||De(x.current,u,f)||De(b.current,u,f))return;let e=!0,t={configuration:u,selectionKey:f};b.current=t,g({configuration:u,selectionKey:f,type:`loading`});async function n(){try{let{catalog:n,checkoutItems:r,client:i,preparedCheckout:a}=await ye({configuration:u,onError:e=>S.current?.(e),selection:p,selectionKey:f});e&&(b.current=void 0,x.current=t,g({catalog:n,checkoutItems:r,client:i,configuration:u,preparedCheckout:a,selectionKey:f,type:`ready`}))}catch(n){e&&(b.current=void 0,x.current=t,g({configuration:u,failure:n instanceof Error?n.message:`Lockerverse payment could not load.`,selectionKey:f,type:`error`}))}}return n(),()=>{e=!1,De(b.current,u,f)&&(b.current=void 0)}},[u,d.success,a,f,h.revision,p]),{retryCheckout:()=>{b.current=void 0,x.current=void 0,ve(u,f),g({type:`retry`})},selectionError:d.success?void 0:d.message,session:h,updateCheckout:e=>g({preparedCheckout:e,type:`checkout`})}}const ke=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],Ae=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function je(e,t,n){return(n===t.totalCents?Ae:ke).some(n=>e[n]!==t[n])||e.payment.connectedAccountId!==t.payment.connectedAccountId||e.payment.currency!==t.payment.currency||JSON.stringify(e.appliedDiscount)!==JSON.stringify(t.appliedDiscount)||JSON.stringify(e.lineItems)!==JSON.stringify(t.lineItems)}function Me(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 Ne(e,t,n){if(t.checkoutStatus!==`action_required`)return Me(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 Me(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function Pe(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof l&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return Ne(e,r,n)}async function Fe(e,t,n){try{return Ne(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}function Ie(e){throw Error(`Unexpected payment workflow value: ${String(e)}`)}function Le(e,t){return t===void 0?{phase:e}:{error:t,phase:e}}function Re(e){return e?{phase:`recovering`}:{phase:`editing`}}function ze(e){return e.phase===`editing`||e.phase===`invalid`?e.error:e.phase===`refreshing_quote`?e.previousError:void 0}function Be(e){return e.phase===`succeeded`?`success`:e.phase===`unresolved`?`unresolved`:e.phase===`submitting`||e.phase===`recovering`?`submitting`:e.phase===`invalid`?`invalid`:ze(e)?`error`:`idle`}function Ve(e){return e.phase===`submitting`}function He(e,t){if(e.phase===`succeeded`||e.phase===`unresolved`)return e;switch(t.type){case`field_changed`:return e.phase===`invalid`?Le(`editing`,e.error):e;case`validation_failed`:return e.phase===`submitting`||e.phase===`recovering`?e:Le(`invalid`,ze(e));case`quote_refresh_started`:{if(e.phase===`submitting`||e.phase===`recovering`)return e;let n=ze(e);return{...n===void 0?{}:{previousError:n},phase:`refreshing_quote`,validatePromo:t.validatePromo}}case`quote_refresh_succeeded`:return e.phase===`refreshing_quote`?{phase:`editing`}:e;case`quote_refresh_failed`:return e.phase===`refreshing_quote`?Le(`editing`,t.error??e.previousError):e;case`submission_started`:return e.phase===`recovering`?e:{phase:`submitting`};case`quote_changed`:return e.phase===`submitting`?{phase:`editing`}:e;case`retryable_failure`:return Le(`editing`,t.error);case`recovery_failed`:return e.phase===`recovering`?Le(`editing`,t.error):e;case`succeeded`:return e.phase===`submitting`||e.phase===`recovering`?{message:t.message,phase:`succeeded`}:e;case`unresolved`:return e.phase===`submitting`||e.phase===`recovering`?{message:t.message,paymentReference:t.paymentReference,phase:`unresolved`,reason:t.reason}:e;default:return Ie(t)}}function Ue(e,t){return t.tipPercent===`custom`?t.customTip.trim()?we(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}function We(e,t,n,r){return{...n?{email:n}:{},...e.widget.fields.serviceFee?{includeServiceFee:t.includeServiceFee}:{},...e.widget.fields.promoCode&&t.promoCode.trim()?{promoCode:t.promoCode.trim()}:{},...e.widget.fields.tipping?{tipCents:r}:{}}}function Ge(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Ke(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Ge(r.shipping,`Shipping`)}function qe({billingAddress:e,catalog:t,email:n,phone:r,shippingAddress:i}){return{payment_method_data:{billing_details:{address:e.address,email:n,name:e.name,...t.widget.fields.phone?{phone:r}:{}}},...i?{shipping:{address:i.address,name:i.name,phone:t.widget.fields.phone?r:i.phone??null}}:{}}}function Je({catalog:e,confirmationToken:t,email:n,fieldValues:r,metadata:i,phone:a,shippingAddress:s}){return{...t?{confirmationToken:t}:{},customFieldAnswers:o(e.widget.customFields,r.customFields),email:n,...i?{metadata:i}:{},...e.widget.fields.memberId&&r.memberId.trim()?{memberId:r.memberId.trim()}:{},...e.widget.fields.merchSize?{merchSize:r.merchSize}:{},...e.widget.fields.phone?{phone:a}:{},...s?{shipping:{address:{city:s.address.city??``,country:s.address.country,line1:s.address.line1??``,...s.address.line2?{line2:s.address.line2}:{},postal_code:s.address.postal_code??``,state:s.address.state??``},name:s.name}}:{}}}function Z(e,t){try{e?.(t)}catch{}}function Q(e){if(!e())throw Error(`Payment component is no longer active.`)}async function Ye({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:s,locallyPreviewedTotalCents:c,metadata:l,onPaymentRecoveryChange:u,phone:d,quote:f,stripe:p}){let m=a.trim().toLowerCase(),h=ue(d),g=Ue(f.subtotalCents,o);if(!g.success)throw Error(g.message);let _=We(t,o,m,g.cents),v=await r.calculateTotal({..._,items:n});if(Q(s),v.totalCents>0&&je(f,v,c))return{kind:`quote_changed`,quote:v};if(v.totalCents===0){let n;t.widget.fields.shipping&&(n=Ke(t,o,Ge(e.billing,`Billing`),e)),Q(s),Z(u,{connectedAccountId:v.payment.connectedAccountId,paymentReference:v.paymentReference});let i=await Pe(r,{checkout:v,submission:Je({catalog:t,email:m,fieldValues:o,metadata:l,phone:h,...n?{shippingAddress:n}:{}})},p);return Q(s),i.kind===`failed`?{kind:`payment_failed`,message:`Order could not be completed. Review the details and try again.`}:i.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:i.paymentReference,reason:i.reason}:{kind:`payment`,payment:i.payment,quote:v}}if(!(i&&p))throw Error(`Payment form is still loading.`);await i.update({amount:v.totalCents}),Q(s);let y=await i.submit();if(Q(s),y.error)throw Error(y.error.message);let b=Ge(e.billing,`Billing`),x=Ke(t,o,b,e),S=await p.createConfirmationToken({elements:i,params:qe({billingAddress:b,catalog:t,email:m,phone:h,shippingAddress:x})});if(Q(s),S.error)throw Error(S.error.message);Z(u,{connectedAccountId:v.payment.connectedAccountId,paymentReference:v.paymentReference});let C=await Pe(r,{checkout:v,submission:Je({catalog:t,confirmationToken:S.confirmationToken.id,email:m,fieldValues:o,metadata:l,phone:h,...x?{shippingAddress:x}:{}})},p);return Q(s),C.kind===`failed`?{kind:`payment_failed`,message:`Payment was declined. Check your payment details and try again.`}:C.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:C.paymentReference,reason:C.reason}:{kind:`payment`,payment:C.payment,quote:v}}function Xe(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Ze(e,t){if(!t)return e instanceof Error?e.message:`The order total could not be updated.`}function Qe({nextQuote:e,onQuoteChange:t,setDisplayedTotalCents:n,setPromoError:r,updateWorkflow:i,validatePromo:a}){i({type:`quote_refresh_succeeded`}),n(e.totalCents),t(e),a&&r(e.appliedDiscount?.source===`promo_code`?void 0:`This promo code is invalid or cannot be applied.`)}function $e({error:e,setPromoError:t,updateWorkflow:n,validatePromo:r}){r&&t(`This promo code is invalid or cannot be applied.`);let i=Ze(e,r);n(i===void 0?{type:`quote_refresh_failed`}:{error:i,type:`quote_refresh_failed`})}function et({onPaymentComplete:e,onPaymentRecoveryChange:t,onPaymentUncertain:n,onQuoteChange:r,result:i,setDisplayedTotalCents:a,transitionWorkflow:o}){if(i.kind===`quote_changed`){let e=`The total changed to ${Xe(i.quote.totalCents)}. Review it and pay again.`;r(i.quote,e),a(i.quote.totalCents),o({type:`quote_changed`});return}if(i.kind===`payment_failed`){Z(t,null),o({error:i.message,type:`retryable_failure`});return}if(i.kind===`payment_unresolved`){o({message:`Payment is still processing. Do not submit it again.`,paymentReference:i.paymentReference,reason:i.reason,type:`unresolved`});try{n?.({paymentReference:i.paymentReference,reason:i.reason})}catch{}return}r(i.quote),Z(t,null),o({message:i.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`});try{e?.(i.payment)}catch{}}function tt(e){let{catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,metadata:s,onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,onStateChange:p,quote:h,resumePayment:g,stripe:_}=e,[x,S]=v(He,g,Re),[C,w]=b(h.totalCents),[ee,T]=b(),E=y(!1),D=y(0),O=y(0),k=y(x);k.current=x;let A=f((e,t=!1)=>{let n=k.current,r=He(n,e);r!==n&&(k.current=r,S(e),t&&p(Be(r)))},[p]),j=f(e=>A(e,!0),[A]),M=f(()=>{let e=O.current+1;return O.current=e,()=>O.current===e},[]);m(()=>()=>{O.current+=1},[]);let N=t.widget.fields.tipping?Ue(h.subtotalCents,o):{cents:0,success:!0},P=N.success?N.cents:null;m(()=>{if(P===null)return;let e=t.widget.fields.serviceFee&&o.includeServiceFee?h.serviceFeeCents||Math.round(h.subtotalCents*t.pricingPolicy.serviceFeeRateBasisPoints/1e4):0,n=h.totalCents-h.serviceFeeCents-h.tipCents+e+P;w(n),n>0&&i?.update({amount:n})},[t.pricingPolicy.serviceFeeRateBasisPoints,t.widget.fields.serviceFee,i,o.includeServiceFee,P,h.serviceFeeCents,h.tipCents,h.totalCents,h.subtotalCents]),m(()=>{if(!(g&&_)||E.current)return;E.current=!0;let e=M();return p(Be(k.current)),Fe(r,g.paymentReference,_).then(t=>{if(e()){if(t.kind===`failed`){Z(l,null),j({error:`The previous payment failed. Check your details and try again.`,type:`recovery_failed`});return}if(t.kind===`unresolved`){j({message:`Payment is still processing. Do not submit it again.`,paymentReference:t.paymentReference,reason:t.reason,type:`unresolved`});try{u?.({paymentReference:t.paymentReference,reason:t.reason})}catch{}return}Z(l,null),j({message:t.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`,type:`succeeded`});try{c?.(t.payment)}catch{}}}),()=>{e()&&(O.current+=1),E.current=!1}},[r,c,l,u,p,g,_,M,j]);let F=f((e=!1)=>{e&&T(void 0),A({type:`field_changed`})},[A]);async function I(e=!1,i=!1){let s=de({email:a.trim().toLowerCase(),phone:``},!1);if(!(N.success&&(s.value||e)))return;D.current+=1;let c=D.current;A({type:`quote_refresh_started`,validatePromo:i});try{let e=await r.calculateTotal({...We(t,o,s.value?.email??``,N.cents),items:n});if(c!==D.current)return;Qe({nextQuote:e,onQuoteChange:d,setDisplayedTotalCents:w,setPromoError:T,updateWorkflow:A,validatePromo:i})}catch(e){if(c!==D.current)return;$e({error:e,setPromoError:T,updateWorkflow:A,validatePromo:i})}}async function te(){T(void 0),await I(!0,!0)}async function L({addresses:e,phone:f}){j({type:`submission_started`});let p=M();try{let m=await Ye({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:p,locallyPreviewedTotalCents:C,metadata:s,onPaymentRecoveryChange:l,phone:f,quote:h,stripe:_});if(!p())return;et({onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,result:m,setDisplayedTotalCents:w,transitionWorkflow:j})}catch(e){if(!p())return;Z(l,null),j({error:e instanceof Error?e.message:`Payment could not be completed.`,type:`retryable_failure`})}}let ne=x.phase===`succeeded`||x.phase===`unresolved`?x.message:void 0;return{commands:{applyPromo:te,fieldChanged:F,refreshAuthoritativeTotal:I,reportStripeLoadError:e=>j({error:e,type:`retryable_failure`}),reportValidationFailure:()=>j({type:`validation_failed`}),submit:L},state:{displayedTotalCents:C,isRecovering:x.phase===`recovering`,isRefreshingQuote:x.phase===`refreshing_quote`,isSubmitting:Ve(x),parsedTip:N,paymentError:ze(x),promoError:ee,terminalMessage:ne}}}function $(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function nt(e){return e===`monthly`?{interval:`month`,label:`Monthly`}:e===`annually`?{interval:`year`,label:`Annual`}:null}const rt=[{callingCode:`+1`,label:`🇺🇸 +1`,value:`US`},{callingCode:`+52`,label:`🇲🇽 +52`,value:`MX`},{callingCode:`+380`,label:`🇺🇦 +380`,value:`UA`},{callingCode:`+48`,label:`🇵🇱 +48`,value:`PL`},{callingCode:`+1`,label:`🇨🇦 +1`,value:`CA`},{callingCode:`+49`,label:`🇩🇪 +49`,value:`DE`},{callingCode:`+44`,label:`🇬🇧 +44`,value:`GB`},{callingCode:`+46`,label:`🇸🇪 +46`,value:`SE`},{callingCode:`+358`,label:`🇫🇮 +358`,value:`FI`},{callingCode:`+1`,label:`🇵🇷 +1`,value:`PR`}];function it(e,t){return e.trim().startsWith(`+`)?e:`${rt.find(e=>e.value===t)?.callingCode??`+1`}${e}`}function at({accentColor:e,catalog:t,checkoutItems:n,client:r,fontFamily:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,quote:u,resumePayment:d,onStateChange:f,stripeLoader:p,theme:m,visualStyle:h}){let g=d?d.connectedAccountId:u.payment.connectedAccountId,v=_(()=>le(p,t.payment.publishableKey,g).catch(()=>null),[t.payment.publishableKey,g,p]);return z(S,{options:{amount:Math.max(u.totalCents,100),appearance:{rules:{".Input:focus":{borderColor:e,boxShadow:`0 0 0 1px ${e}`,outline:`none`}},theme:m===`light`?`stripe`:`night`,variables:{borderRadius:h?.[`--lockerverse-radius`]??`10px`,colorBackground:h?.[`--lockerverse-control`]??(m===`light`?`#f5f6f7`:`#121212`),colorDanger:h?.[`--lockerverse-danger`]??(m===`light`?`#c52b3e`:`#f08a98`),colorPrimary:e,colorText:h?.[`--lockerverse-text`]??(m===`light`?`#121416`:`#ffffff`),colorTextPlaceholder:h?.[`--lockerverse-placeholder`]??(m===`light`?`#72767d`:`#6b6b6b`),colorTextSecondary:h?.[`--lockerverse-muted`]??(m===`light`?`#62666d`:`#a1a1aa`),focusBoxShadow:`none`,focusOutline:`none`,fontFamily:i,fontSizeBase:`16px`}},currency:u.payment.currency,excludedPaymentMethodTypes:[`us_bank_account`],mode:u.paymentOption===`one-time`?`payment`:`subscription`,syncAddressCheckbox:`none`},stripe:v,children:z(gt,{catalog:t,checkoutItems:n,client:r,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:f,quote:u,resumePayment:d})},`${t.payment.publishableKey}:${g??`platform`}:${u.paymentOption}`)}function ot({label:e}){return B(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[z(`p`,{children:e}),B(`div`,{"aria-hidden":`true`,children:[z(`span`,{}),z(`span`,{}),z(`span`,{})]})]})}function st({onError:e,onReady:t,ready:n}){return B(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:z(ot,{label:`Loading payment form...`}),z(`div`,{className:`lockerverse-payment__stripe-mount`,children:z(C,{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 ct({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return B(`div`,{className:`lockerverse-payment__address`,children:[z(`h2`,{children:e}),B(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:z(ot,{label:`Loading ${e.toLowerCase()}...`}),z(`div`,{className:`lockerverse-payment__stripe-mount`,children:z(x,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function lt({message:e}){return e?z(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function ut({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 B(R,{children:[f?z(st,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?z(ct,{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?B(`div`,{className:`lockerverse-payment__shipping`,children:[z(ie,{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:z(ct,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function dt({displayedBaseCents:e,displayedTipCents:t,displayedTotalCents:n,quote:r}){let i=nt(r.paymentOption),a=Math.max(0,e-r.subtotalCents+r.discountCents);return B(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[z(`h2`,{children:`Order summary`}),z(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.lineItems.map(e=>B(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[B(`span`,{children:[e.productName,e.quantity>1?B(R,{children:[` `,B(`small`,{children:[`× `,e.quantity]})]}):null,e.paymentOption===`monthly`?z(`small`,{children:` · Monthly`}):null,e.paymentOption===`annually`?z(`small`,{children:` · Annual`}):null]}),z(`strong`,{children:$(e.subtotalCents)})]},e.listingId))}),B(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[a>0?B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[z(`span`,{children:`Service fee`}),z(`strong`,{children:$(a)})]}):null,r.discountCents>0&&r.appliedDiscount?B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[B(`span`,{children:[r.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,r.appliedDiscount.percentageOff,`% off)`]}),B(`strong`,{children:[`-`,$(r.discountCents)]})]}):null,t>0?B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[z(`span`,{children:`Tip`}),z(`strong`,{children:$(t)})]}):null,B(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[z(`span`,{children:i?`${i.label} total`:`Total`}),z(`strong`,{children:$(n)})]})]})]})}function ft({catalog:e,displayedTotalCents:t,fieldValues:n,isBillingAddressReady:r,isPaymentReady:i,isRequiredShippingReady:a,isSubmitting:o,onFieldValuesChange:s,quote:c}){let l=t===0,u=l?!e.widget.fields.shipping||r&&a:i&&r&&a,d=nt(c.paymentOption),f=l?`Complete order`:`Pay ${$(t)}`;!l&&d&&(f=`Subscribe for ${$(t)}/${d.interval}`),o&&(f=l?`Completing…`:`Processing…`);let p=`Process payment for ${$(t)} total`;return l?p=`Complete order`:d&&(p=`Start ${d.label.toLowerCase()} subscription for ${$(t)}`),B(`div`,{className:`lockerverse-payment__actions`,children:[z(oe,{amountCents:c.serviceFeeCents||Math.round(c.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:e.widget.fields.serviceFee,onChange:s,values:n}),z(`button`,{"aria-busy":o,"aria-label":p,disabled:o||!u,type:`submit`,children:f})]})}function pt(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 mt({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&&pt(n,`custom:${o}`)}function ht({email:e,emailDiscountPercentOff:t,emailErrorId:n,emailId:r,emailRef:i,errors:a,onEmailBlur:o,onEmailChange:s,onPhoneChange:c,onPhoneCountryChange:l,phone:u,phoneCountry:d,phoneEnabled:f,phoneErrorId:p,phoneId:m,phoneRef:h}){return B(`div`,{className:`lockerverse-payment__contact`,children:[z(`label`,{htmlFor:r,children:`Email`}),z(`input`,{"aria-describedby":a.email?n:void 0,"aria-invalid":a.email?`true`:void 0,autoComplete:`email`,id:r,name:`email`,onBlur:o,onChange:e=>s(e.currentTarget.value),placeholder:`name@example.com`,ref:i,type:`email`,value:e}),a.email?z(`p`,{className:`lockerverse-payment__field-message`,id:n,children:a.email}):null,t===void 0?null:B(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),f?B(R,{children:[z(`label`,{htmlFor:m,children:`Phone`}),B(`div`,{className:`lockerverse-payment__phone-control`,children:[z(K,{ariaLabel:`Phone number country`,className:`lockerverse-payment__select--phone-country`,name:`phoneCountry`,onValueChange:l,options:rt,value:d}),z(`input`,{"aria-describedby":a.phone?p:void 0,"aria-invalid":a.phone?`true`:void 0,autoComplete:`tel`,id:m,inputMode:`tel`,name:`phone`,onChange:e=>c(e.currentTarget.value),placeholder:`(201) 555-0123`,ref:h,type:`tel`,value:u})]}),a.phone?z(`p`,{className:`lockerverse-payment__field-message`,id:p,children:a.phone}):null]}):null]})}function gt({catalog:e,checkoutItems:n,client:r,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:d,resumePayment:f}){let[p,g]=b(``),[_,v]=b(``),[x,S]=b(`US`),[C,T]=b({}),[E,D]=b({}),[O,k]=b(),[A,j]=b(!1),[M,N]=b(!1),[P,F]=b(!1),[I,te]=b({customFields:t(e.widget.customFields),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),L=y({billing:null,shipping:null}),ne=y(null),R=y(null),V=y(null),H=y(d.totalCents>0),U=tt({catalog:e,checkoutItems:n,client:r,elements:w(),email:p,fieldValues:I,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:d,resumePayment:f,stripe:ee()}),{displayedTotalCents:W,isRecovering:G,isRefreshingQuote:K,isSubmitting:q,parsedTip:J,paymentError:Y,promoError:ie,terminalMessage:oe}=U.state,se=`lockerverse-${h()}`,ce=`${se}-email`,le=`${ce}-error`,ue=`${se}-phone`,fe=`${ue}-error`,X=`${se}-tip-error`,pe=(J.success?J.cents:null)??0,me=W-pe,he=!e.widget.fields.shipping||I.shippingMatchesBilling||P;m(()=>{q&&V.current?.focus()},[q]),m(()=>{let e=W>0;e&&!H.current&&(j(!1),N(!1)),H.current=e},[W]);function ge(e){U.commands.fieldChanged(),T(t=>{let n={...t};return delete n[e],n})}function _e(e){U.commands.fieldChanged(e.promoCode!==I.promoCode),te(e),D({}),k(void 0)}async function ve(t){t.preventDefault();let n=de({email:p,phone:it(_,x)},e.widget.fields.phone),r=i(e.widget.customFields,I.customFields);if(!(n.value&&J.success)||Object.keys(r).length>0){T(n.errors),D(r),k(J.success?void 0:J.message),U.commands.reportValidationFailure();let e=t.currentTarget;queueMicrotask(()=>{mt({customFieldErrors:r,emailRef:ne,form:e,parsedTipSuccess:J.success,phoneRef:R,validationErrors:n.errors})});return}T({}),D({}),await U.commands.submit({addresses:L.current,phone:it(_,x)})}return oe?z(`p`,{className:`lockerverse-payment__payment-status`,ref:V,role:`status`,tabIndex:-1,children:oe}):G?z(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):B(`form`,{"aria-busy":q,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:ve,children:[z(`div`,{"data-lockerverse-input-region":``,inert:q?!0:void 0,children:B(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:q,children:[z(dt,{displayedBaseCents:me,displayedTipCents:pe,displayedTotalCents:W,quote:d}),z(re,{enabled:e.widget.fields.tipping,error:O,errorId:X,onChange:_e,values:I}),z(ht,{email:p,emailDiscountPercentOff:d.appliedDiscount?.source===`email_list`?d.appliedDiscount.percentageOff:void 0,emailErrorId:le,emailId:ce,emailRef:ne,errors:C,onEmailBlur:()=>U.commands.refreshAuthoritativeTotal(),onEmailChange:e=>{g(e),ge(`email`)},onPhoneChange:e=>{v(e),ge(`phone`)},onPhoneCountryChange:e=>{S(e),U.commands.fieldChanged()},phone:_,phoneCountry:x,phoneEnabled:e.widget.fields.phone,phoneErrorId:fe,phoneId:ue,phoneRef:R}),z(ut,{catalog:e,displayedTotalCents:W,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isShippingAddressReady:P,onAddressChange:(e,t)=>{L.current[e]=t},onFieldValuesChange:_e,onStripeLoadError:U.commands.reportStripeLoadError,setIsBillingAddressReady:N,setIsPaymentReady:j,setIsShippingAddressReady:F}),z(ae,{customFields:e.widget.customFields,errors:E,fields:e.widget.fields,idPrefix:se,isPromoApplying:K,onApplyPromo:U.commands.applyPromo,onChange:_e,promoError:ie,values:I}),z(ft,{catalog:e,displayedTotalCents:W,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isRequiredShippingReady:he,isSubmitting:q,onFieldValuesChange:_e,quote:d})]})}),q?z(`p`,{className:`lockerverse-payment__sr-only`,ref:V,role:`status`,tabIndex:-1,children:W===0?`Completing order…`:`Processing payment…`}):null,z(lt,{message:Y})]})}function _t(){return B(`div`,{className:`lockerverse-payment__skeleton-loader-block`,children:[z(`span`,{className:`lockerverse-payment__skeleton-loader-label`}),B(`div`,{className:`lockerverse-payment__skeleton-loader-content`,children:[z(`span`,{className:`lockerverse-payment__skeleton-loader-full`}),B(`div`,{className:`lockerverse-payment__skeleton-loader-grid`,children:[z(`span`,{className:`lockerverse-payment__skeleton-loader-half`}),z(`span`,{className:`lockerverse-payment__skeleton-loader-half`})]})]})]})}function vt(){return B(`div`,{className:`lockerverse-payment__loading`,children:[z(`span`,{"aria-live":`polite`,className:`lockerverse-payment__sr-only`,role:`status`,children:`Loading payment…`}),B(`div`,{"aria-hidden":`true`,className:`lockerverse-payment__skeleton`,children:[B(`div`,{className:`lockerverse-payment__skeleton-branding`,children:[z(`span`,{className:`lockerverse-payment__skeleton-avatar`}),z(`span`,{className:`lockerverse-payment__skeleton-community`})]}),B(`div`,{className:`lockerverse-payment__skeleton-contact`,children:[B(`div`,{className:`lockerverse-payment__skeleton-field`,children:[z(`span`,{className:`lockerverse-payment__skeleton-label`}),z(`span`,{className:`lockerverse-payment__skeleton-input`})]}),B(`div`,{className:`lockerverse-payment__skeleton-field`,children:[z(`span`,{className:`lockerverse-payment__skeleton-label`}),z(`span`,{className:`lockerverse-payment__skeleton-input`})]})]}),z(_t,{}),z(_t,{}),B(`div`,{className:`lockerverse-payment__skeleton-actions`,children:[z(`span`,{className:`lockerverse-payment__skeleton-check-line`}),z(`span`,{className:`lockerverse-payment__skeleton-button`})]})]})]})}function yt({apiBaseUrl:e,branding:t,className:r,communitySlug:i,environment:a,fetch:o,metadata:s,onError:l,onPaymentComplete:u,onPaymentRecoveryChange:d,onPaymentUncertain:p,requestTimeoutMs:h,resumePayment:_,selection:v,sentryDsn:x,style:S,stripeLoader:C=T,theme:w=`dark`,widgetSlug:ee,...E}){let D=y(_).current,O=y(null),[k,A]=b(),[j,M]=b(`idle`),N=y(void 0),{retryCheckout:P,selectionError:F,session:I,updateCheckout:te}=Oe({apiBaseUrl:e,communitySlug:i,environment:a,fetch:o,onError:l,paymentState:j,requestTimeoutMs:h,selection:v,sentryDsn:x,widgetSlug:ee}),L=I.phase===`ready`?I.revision:void 0,ne=f(e=>{L!==void 0&&(N.current=L),M(e)},[L]);m(()=>{I.phase===`loading`&&A(void 0)},[I.phase]),g(()=>{I.phase===`ready`&&N.current!==I.revision&&M(e=>e===`success`||e===`unresolved`?e:`idle`)},[I.phase,I.revision]);let R=[`lockerverse-payment`,r].filter(Boolean).join(` `),V=t??(I.phase===`ready`?I.catalog.community:null),H=n(S?.[`--lockerverse-accent`]??V?.accentColor??`#38d77a`),W=c(H),G={...S,...S?.[`--lockerverse-accent`]!==void 0||V?.accentColor?{"--lockerverse-accent":H}:{},...W&&S?.[`--lockerverse-accent-contrast`]===void 0?{"--lockerverse-accent-contrast":W}:{}};if(F)return z(`section`,{...E,className:R,"data-lockerverse-theme":w,role:`alert`,style:G,children:F});if(I.phase===`error`)return B(`section`,{...E,className:R,"data-lockerverse-theme":w,style:G,children:[z(`p`,{role:`alert`,children:I.failure}),z(`button`,{onClick:P,type:`button`,children:`Retry`})]});if(I.phase!==`ready`)return z(`section`,{...E,"aria-busy":`true`,"aria-label":`Payment`,className:R,"data-lockerverse-theme":w,style:G,children:z(vt,{})});let{catalog:K,checkoutItems:q,client:J,preparedCheckout:Y}=I;return B(`section`,{...E,"aria-label":`Payment`,className:R,"data-lockerverse-theme":w,"data-payment-state":j,ref:O,style:G,children:[B(`header`,{children:[K.widget.showCommunityBranding&&V?B(`div`,{className:`lockerverse-payment__branding`,children:[V.imageUrl?z(`img`,{alt:V.name,height:`48`,src:V.imageUrl,width:`48`}):null,z(`strong`,{children:V.name})]}):null,z(`h1`,{children:K.widget.title??K.widget.name}),K.widget.description?z(`p`,{children:K.widget.description}):null]}),k?z(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:k}):null,z(U,{container:O,children:z(at,{accentColor:H,catalog:K,checkoutItems:q,client:J,fontFamily:S?.[`--lockerverse-font-family`]??`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,metadata:s,onPaymentComplete:u,onPaymentRecoveryChange:d,onPaymentUncertain:p,onQuoteChange:(e,t)=>{A(t),te(e)},onStateChange:ne,quote:Y,resumePayment:D,stripeLoader:C,theme:w,visualStyle:G})})]})}export{le as i,Te as n,ye as r,yt as t};
2
2
  //# sourceMappingURL=lockerverse-payment.js.map