@lockerverse/react 0.2.58 → 0.2.60
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 +44 -1
- package/dist/donate-launcher.d.ts +3 -0
- package/dist/donate-launcher.js +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +1 -1
- package/dist/lockerverse-donate-launcher.d.ts +6 -0
- package/dist/lockerverse-donate-launcher.d.ts.map +1 -0
- package/dist/lockerverse-donate-launcher.js +2 -0
- package/dist/lockerverse-donate-launcher.js.map +1 -0
- package/dist/lockerverse-payment.d.ts +2 -55
- package/dist/lockerverse-payment.d.ts.map +1 -1
- package/dist/lockerverse-payment.js +1 -1
- package/dist/lockerverse-payment.js.map +1 -1
- package/dist/payment.d.ts +2 -1
- package/dist/styles.css +246 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +17 -2
package/README.md
CHANGED
|
@@ -41,6 +41,49 @@ export function Checkout() {
|
|
|
41
41
|
|
|
42
42
|
The original `@lockerverse/react` and `@lockerverse/react/styles.css` payment imports remain supported.
|
|
43
43
|
|
|
44
|
+
For a monthly or annual Product, omit quantity. The component shows the
|
|
45
|
+
cadence and configures Stripe Elements for a subscription:
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
<LockerversePayment
|
|
49
|
+
communitySlug="auburn"
|
|
50
|
+
selection={[{ productSlug: "monthly-supporter" }]}
|
|
51
|
+
widgetSlug="supporter-tiers"
|
|
52
|
+
/>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Recurring checkout accepts one fixed Product. It does not accept quantities,
|
|
56
|
+
custom amounts, or multiple Products.
|
|
57
|
+
|
|
58
|
+
## Donate launcher
|
|
59
|
+
|
|
60
|
+
`LockerverseDonateLauncher` turns an existing payment widget into a native
|
|
61
|
+
React dialog. It reads the widget's products, descriptions, fixed prices, and
|
|
62
|
+
custom-amount rules. Recurring Products open the same payment form in
|
|
63
|
+
subscription mode. It then passes the visitor's selection to the same
|
|
64
|
+
`LockerversePayment` checkout.
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { LockerverseDonateLauncher } from "@lockerverse/react/donate-launcher";
|
|
68
|
+
import "@lockerverse/react/payment.css";
|
|
69
|
+
|
|
70
|
+
export function Donate() {
|
|
71
|
+
return (
|
|
72
|
+
<LockerverseDonateLauncher
|
|
73
|
+
buttonLabel="Donate"
|
|
74
|
+
communitySlug="auburn"
|
|
75
|
+
position="bottom-right"
|
|
76
|
+
widgetSlug="general-donations"
|
|
77
|
+
/>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Use `position="inline"` to place the launcher in the normal page layout. Use
|
|
83
|
+
`bottom-left` or `bottom-right` for a fixed launcher. Payment callbacks,
|
|
84
|
+
branding, themes, metadata, recovery properties, and development API options
|
|
85
|
+
are the same as `LockerversePayment`.
|
|
86
|
+
|
|
44
87
|
## Signup
|
|
45
88
|
|
|
46
89
|
The signup entry does not import payment or Stripe code.
|
|
@@ -95,7 +138,7 @@ Use `theme="dark"` or `theme="light"`. Lockerverse applies the community brandin
|
|
|
95
138
|
/>
|
|
96
139
|
```
|
|
97
140
|
|
|
98
|
-
The package keeps React, React DOM, and Stripe's React libraries as peer dependencies so it does not ship duplicate framework code.
|
|
141
|
+
The package keeps React, React DOM, and Stripe's React libraries as peer dependencies so it does not ship duplicate framework code. `LockerversePayment` leaves product selection to its host. `LockerverseDonateLauncher` provides selection from the existing widget catalog. Neither component depends on Lockerverse's Next.js application components.
|
|
99
142
|
|
|
100
143
|
## Payment outcomes
|
|
101
144
|
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { n as LockerverseDonateLauncherProps, t as LockerverseDonateLauncherPosition } from "./types.js";
|
|
2
|
+
import { t as LockerverseDonateLauncher } from "./lockerverse-donate-launcher.js";
|
|
3
|
+
export { LockerverseDonateLauncher, type LockerverseDonateLauncherPosition, type LockerverseDonateLauncherProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./lockerverse-donate-launcher.js";export{e as LockerverseDonateLauncher};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
|
|
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
|
+
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 };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./lockerverse-payment.js";export{e as LockerversePayment};
|
|
1
|
+
import{t as e}from"./lockerverse-payment.js";import{t}from"./lockerverse-donate-launcher.js";export{t as LockerverseDonateLauncher,e as LockerversePayment};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { n as LockerverseDonateLauncherProps } from "./types.js";
|
|
2
|
+
//#region src/lockerverse-donate-launcher.d.ts
|
|
3
|
+
declare function LockerverseDonateLauncher({ buttonLabel, position, ...paymentProps }: LockerverseDonateLauncherProps): import("react").JSX.Element;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { LockerverseDonateLauncher as t };
|
|
6
|
+
//# sourceMappingURL=lockerverse-donate-launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockerverse-donate-launcher.d.ts","names":[],"sources":["../src/lockerverse-donate-launcher.tsx"],"mappings":";;iBAkBgB,4BACd,aACA,aACG,gBACF,iDAA8B,IAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./lockerverse-payment.js";import{Dialog as t}from"@base-ui/react/dialog";import{createLockerverseCheckoutClient as n}from"@lockerverse/sdk/checkout";import{useEffect as r,useId as i,useState as a}from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";const c=new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`});function l({buttonLabel:l=`Donate`,position:u=`inline`,...d}){let f=i(),[p,m]=a(!1),[h,g]=a(null),[_,v]=a(null),[y,b]=a(null),[x,S]=a(``),[C,w]=a(!1),[T,E]=a(0),{apiBaseUrl:D,communitySlug:O,environment:k,fetch:A,onError:j,requestTimeoutMs:M,sentryDsn:N,widgetSlug:P}=d;r(()=>{if(!(p&&h===null))return;let e=!0;return n(d).load().then(t=>{e&&(g(t),w(!1))}).catch(()=>{e&&w(!0)}),()=>{e=!1}},[D,h,O,k,A,T,j,p,M,N,P]);let F=o(`p`,{role:`status`,children:`Loading donation options...`});return C&&(F=s(`div`,{role:`alert`,children:[o(`p`,{children:`Unable to load donation options.`}),o(`button`,{onClick:()=>{w(!1),E(e=>e+1)},type:`button`,children:`Retry`})]})),h&&(F=o(`div`,{className:`lockerverse-launcher__products`,children:h.products.map(e=>s(`button`,{className:`lockerverse-launcher__product`,onClick:()=>{if(e.pricingMode===`custom`){b(e);return}if(e.paymentOption!==`one-time`){v([{productSlug:e.slug}]);return}v([{productSlug:e.slug,quantity:e.minimumQuantity??1}])},type:`button`,children:[s(`span`,{className:`lockerverse-launcher__product-copy`,children:[o(`span`,{children:e.name}),e.description?o(`small`,{children:e.description}):null]}),e.amountCents===null?null:o(`strong`,{children:c.format(e.amountCents/100)})]},e.id))})),y&&(F=s(`form`,{className:`lockerverse-launcher__amount-form`,onSubmit:e=>{e.preventDefault(),v([{amountCents:Math.round(Number(x)*100),productSlug:y.slug}])},children:[o(`label`,{htmlFor:f,children:`Donation amount`}),o(`input`,{id:f,min:(y.minimumAmountCents??1)/100,name:`amount`,onChange:e=>S(e.target.value),required:!0,step:`0.01`,type:`number`,value:x}),o(`button`,{type:`submit`,children:`Continue`})]})),_&&(F=s(`div`,{className:`lockerverse-launcher__checkout`,children:[o(`button`,{className:`lockerverse-launcher__back`,onClick:()=>v(null),type:`button`,children:`Back`}),o(e,{...d,selection:_})]})),s(t.Root,{onOpenChange:m,open:p,children:[o(t.Trigger,{className:`lockerverse-launcher lockerverse-launcher--${u}`,"data-lockerverse-theme":d.theme??`dark`,style:d.style,children:l}),s(t.Portal,{children:[o(t.Backdrop,{className:`lockerverse-launcher__backdrop`}),o(t.Viewport,{className:`lockerverse-launcher__viewport`,children:s(t.Popup,{className:`lockerverse-launcher__dialog`,"data-lockerverse-theme":d.theme??`dark`,style:d.style,children:[o(t.Title,{className:`lockerverse-launcher__title`,children:h?.widget.title??h?.widget.name??`Donate`}),h?.widget.description?o(t.Description,{className:`lockerverse-launcher__description`,children:h.widget.description}):null,o(t.Close,{"aria-label":`Close donation dialog`,className:`lockerverse-launcher__close`,children:`Close`}),F]})})]})]})}export{l as t};
|
|
2
|
+
//# sourceMappingURL=lockerverse-donate-launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockerverse-donate-launcher.js","names":[],"sources":["../src/lockerverse-donate-launcher.tsx"],"sourcesContent":["import { Dialog } from \"@base-ui/react/dialog\";\nimport {\n createLockerverseCheckoutClient,\n type LockerverseCatalog,\n} from \"@lockerverse/sdk/checkout\";\nimport { type ReactNode, useEffect, useId, useState } from \"react\";\n\nimport { LockerversePayment } from \"./lockerverse-payment.tsx\";\nimport type {\n LockerverseDonateLauncherProps,\n LockerversePaymentSelectionItem,\n} from \"./types.ts\";\n\nconst usd = new Intl.NumberFormat(\"en-US\", {\n currency: \"USD\",\n style: \"currency\",\n});\n\nexport function LockerverseDonateLauncher({\n buttonLabel = \"Donate\",\n position = \"inline\",\n ...paymentProps\n}: LockerverseDonateLauncherProps) {\n const amountInputId = useId();\n const [open, setOpen] = useState(false);\n const [catalog, setCatalog] = useState<LockerverseCatalog | null>(null);\n const [selection, setSelection] = useState<\n LockerversePaymentSelectionItem[] | null\n >(null);\n const [customProduct, setCustomProduct] = useState<\n LockerverseCatalog[\"products\"][number] | null\n >(null);\n const [customAmount, setCustomAmount] = useState(\"\");\n const [loadError, setLoadError] = useState(false);\n const [loadRevision, setLoadRevision] = useState(0);\n const {\n apiBaseUrl,\n communitySlug,\n environment,\n fetch,\n onError,\n requestTimeoutMs,\n sentryDsn,\n widgetSlug,\n } = paymentProps;\n\n useEffect(() => {\n if (!(open && catalog === null)) {\n return;\n }\n let active = true;\n const client = createLockerverseCheckoutClient(paymentProps);\n client\n .load()\n .then((nextCatalog) => {\n if (active) {\n setCatalog(nextCatalog);\n setLoadError(false);\n }\n })\n .catch(() => {\n if (active) {\n setLoadError(true);\n }\n });\n return () => {\n active = false;\n };\n }, [\n apiBaseUrl,\n catalog,\n communitySlug,\n environment,\n fetch,\n loadRevision,\n onError,\n open,\n requestTimeoutMs,\n sentryDsn,\n widgetSlug,\n ]);\n\n let content: ReactNode = <p role=\"status\">Loading donation options...</p>;\n if (loadError) {\n content = (\n <div role=\"alert\">\n <p>Unable to load donation options.</p>\n <button\n onClick={() => {\n setLoadError(false);\n setLoadRevision((revision) => revision + 1);\n }}\n type=\"button\"\n >\n Retry\n </button>\n </div>\n );\n }\n if (catalog) {\n content = (\n <div className=\"lockerverse-launcher__products\">\n {catalog.products.map((product) => (\n <button\n className=\"lockerverse-launcher__product\"\n key={product.id}\n onClick={() => {\n if (product.pricingMode === \"custom\") {\n setCustomProduct(product);\n return;\n }\n if (product.paymentOption !== \"one-time\") {\n setSelection([{ productSlug: product.slug }]);\n return;\n }\n setSelection([\n {\n productSlug: product.slug,\n quantity: product.minimumQuantity ?? 1,\n },\n ]);\n }}\n type=\"button\"\n >\n <span className=\"lockerverse-launcher__product-copy\">\n <span>{product.name}</span>\n {product.description ? (\n <small>{product.description}</small>\n ) : null}\n </span>\n {product.amountCents === null ? null : (\n <strong>{usd.format(product.amountCents / 100)}</strong>\n )}\n </button>\n ))}\n </div>\n );\n }\n if (customProduct) {\n content = (\n <form\n className=\"lockerverse-launcher__amount-form\"\n onSubmit={(event) => {\n event.preventDefault();\n setSelection([\n {\n amountCents: Math.round(Number(customAmount) * 100),\n productSlug: customProduct.slug,\n },\n ]);\n }}\n >\n <label htmlFor={amountInputId}>Donation amount</label>\n <input\n id={amountInputId}\n min={(customProduct.minimumAmountCents ?? 1) / 100}\n name=\"amount\"\n onChange={(event) => setCustomAmount(event.target.value)}\n required\n step=\"0.01\"\n type=\"number\"\n value={customAmount}\n />\n <button type=\"submit\">Continue</button>\n </form>\n );\n }\n if (selection) {\n content = (\n <div className=\"lockerverse-launcher__checkout\">\n <button\n className=\"lockerverse-launcher__back\"\n onClick={() => setSelection(null)}\n type=\"button\"\n >\n Back\n </button>\n <LockerversePayment {...paymentProps} selection={selection} />\n </div>\n );\n }\n\n return (\n <Dialog.Root onOpenChange={setOpen} open={open}>\n <Dialog.Trigger\n className={`lockerverse-launcher lockerverse-launcher--${position}`}\n data-lockerverse-theme={paymentProps.theme ?? \"dark\"}\n style={paymentProps.style}\n >\n {buttonLabel}\n </Dialog.Trigger>\n <Dialog.Portal>\n <Dialog.Backdrop className=\"lockerverse-launcher__backdrop\" />\n <Dialog.Viewport className=\"lockerverse-launcher__viewport\">\n <Dialog.Popup\n className=\"lockerverse-launcher__dialog\"\n data-lockerverse-theme={paymentProps.theme ?? \"dark\"}\n style={paymentProps.style}\n >\n <Dialog.Title className=\"lockerverse-launcher__title\">\n {catalog?.widget.title ?? catalog?.widget.name ?? \"Donate\"}\n </Dialog.Title>\n {catalog?.widget.description ? (\n <Dialog.Description className=\"lockerverse-launcher__description\">\n {catalog.widget.description}\n </Dialog.Description>\n ) : null}\n <Dialog.Close\n aria-label=\"Close donation dialog\"\n className=\"lockerverse-launcher__close\"\n >\n Close\n </Dialog.Close>\n {content}\n </Dialog.Popup>\n </Dialog.Viewport>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"mappings":"qRAaA,MAAM,EAAM,IAAI,KAAK,aAAa,QAAS,CACzC,SAAU,MACV,MAAO,UACT,CAAC,EAED,SAAgB,EAA0B,CACxC,cAAc,SACd,WAAW,SACX,GAAG,GAC8B,CACjC,IAAM,EAAgB,EAAM,EACtB,CAAC,EAAM,GAAW,EAAS,EAAK,EAChC,CAAC,EAAS,GAAc,EAAoC,IAAI,EAChE,CAAC,EAAW,GAAgB,EAEhC,IAAI,EACA,CAAC,EAAe,GAAoB,EAExC,IAAI,EACA,CAAC,EAAc,GAAmB,EAAS,EAAE,EAC7C,CAAC,EAAW,GAAgB,EAAS,EAAK,EAC1C,CAAC,EAAc,GAAmB,EAAS,CAAC,EAC5C,CACJ,aACA,gBACA,cACA,QACA,UACA,mBACA,YACA,cACE,EAEJ,MAAgB,CACd,GAAI,EAAE,GAAQ,IAAY,MACxB,OAEF,IAAI,EAAS,GAeb,OAbA,EAD+C,CAC1C,CAAC,CACH,KAAK,CAAC,CACN,KAAM,GAAgB,CACjB,IACF,EAAW,CAAW,EACtB,EAAa,EAAK,EAEtB,CAAC,CAAC,CACD,UAAY,CACP,GACF,EAAa,EAAI,CAErB,CAAC,MACU,CACX,EAAS,EACX,CACF,EAAG,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,CAAC,EAED,IAAI,EAAqB,EAAC,IAAD,CAAG,KAAK,SAAS,SAAA,6BAA8B,CAAA,EAoGxE,OAnGI,IACF,EACE,EAAC,MAAD,CAAK,KAAK,QAAV,SAAA,CACE,EAAC,IAAD,CAAA,SAAG,kCAAmC,CAAA,EACtC,EAAC,SAAD,CACE,YAAe,CACb,EAAa,EAAK,EAClB,EAAiB,GAAa,EAAW,CAAC,CAC5C,EACA,KAAK,SACN,SAAA,OAEO,CAAA,CACL,KAGL,IACF,EACE,EAAC,MAAD,CAAK,UAAU,iCACZ,SAAA,EAAQ,SAAS,IAAK,GACrB,EAAC,SAAD,CACE,UAAU,gCAEV,YAAe,CACb,GAAI,EAAQ,cAAgB,SAAU,CACpC,EAAiB,CAAO,EACxB,MACF,CACA,GAAI,EAAQ,gBAAkB,WAAY,CACxC,EAAa,CAAC,CAAE,YAAa,EAAQ,IAAK,CAAC,CAAC,EAC5C,MACF,CACA,EAAa,CACX,CACE,YAAa,EAAQ,KACrB,SAAU,EAAQ,iBAAmB,CACvC,CACF,CAAC,CACH,EACA,KAAK,SAnBP,SAAA,CAqBE,EAAC,OAAD,CAAM,UAAU,qCAAhB,SAAA,CACE,EAAC,OAAD,CAAA,SAAO,EAAQ,IAAW,CAAA,EACzB,EAAQ,YACP,EAAC,QAAD,CAAA,SAAQ,EAAQ,WAAmB,CAAA,EACjC,IACA,CACL,CAAA,EAAA,EAAQ,cAAgB,KAAO,KAC9B,EAAC,SAAD,CAAA,SAAS,EAAI,OAAO,EAAQ,YAAc,GAAG,CAAU,CAAA,CAEnD,CA5BD,EAAA,EAAQ,EA4BP,CACT,CACE,CAAA,GAGL,IACF,EACE,EAAC,OAAD,CACE,UAAU,oCACV,SAAW,GAAU,CACnB,EAAM,eAAe,EACrB,EAAa,CACX,CACE,YAAa,KAAK,MAAM,OAAO,CAAY,EAAI,GAAG,EAClD,YAAa,EAAc,IAC7B,CACF,CAAC,CACH,EAVF,SAAA,CAYE,EAAC,QAAD,CAAO,QAAS,EAAe,SAAA,iBAAsB,CAAA,EACrD,EAAC,QAAD,CACE,GAAI,EACJ,KAAM,EAAc,oBAAsB,GAAK,IAC/C,KAAK,SACL,SAAW,GAAU,EAAgB,EAAM,OAAO,KAAK,EACvD,SAAA,GACA,KAAK,OACL,KAAK,SACL,MAAO,CACR,CAAA,EACD,EAAC,SAAD,CAAQ,KAAK,SAAS,SAAA,UAAgB,CAAA,CAClC,KAGN,IACF,EACE,EAAC,MAAD,CAAK,UAAU,iCAAf,SAAA,CACE,EAAC,SAAD,CACE,UAAU,6BACV,YAAe,EAAa,IAAI,EAChC,KAAK,SACN,SAAA,MAEO,CAAA,EACR,EAAC,EAAD,CAAoB,GAAI,EAAyB,WAAY,CAAA,CAC1D,KAKP,EAAC,EAAO,KAAR,CAAa,aAAc,EAAe,OAA1C,SAAA,CACE,EAAC,EAAO,QAAR,CACE,UAAW,8CAA8C,IACzD,yBAAwB,EAAa,OAAS,OAC9C,MAAO,EAAa,MAEnB,SAAA,CACa,CAAA,EAChB,EAAC,EAAO,OAAR,CAAA,SAAA,CACE,EAAC,EAAO,SAAR,CAAiB,UAAU,gCAAkC,CAAA,EAC7D,EAAC,EAAO,SAAR,CAAiB,UAAU,iCACzB,SAAA,EAAC,EAAO,MAAR,CACE,UAAU,+BACV,yBAAwB,EAAa,OAAS,OAC9C,MAAO,EAAa,MAHtB,SAAA,CAKE,EAAC,EAAO,MAAR,CAAc,UAAU,8BACrB,SAAA,GAAS,OAAO,OAAS,GAAS,OAAO,MAAQ,QACtC,CAAA,EACb,GAAS,OAAO,YACf,EAAC,EAAO,YAAR,CAAoB,UAAU,oCAC3B,SAAA,EAAQ,OAAO,WACE,CAAA,EAClB,KACJ,EAAC,EAAO,MAAR,CACE,aAAW,wBACX,UAAU,8BACX,SAAA,OAEa,CAAA,EACb,CACW,GACC,CAAA,CACJ,CAAA,CAAA,CACJ,GAEjB"}
|
|
@@ -1,59 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CSSProperties, ComponentPropsWithoutRef } from "react";
|
|
3
|
-
import { CreateLockerverseWidgetOptions, LockerversePaymentResult } from "@lockerverse/sdk/checkout";
|
|
4
|
-
//#region src/types.d.ts
|
|
5
|
-
type LockerversePaymentSelectionItem = {
|
|
6
|
-
amountCents: number;
|
|
7
|
-
productSlug: string;
|
|
8
|
-
} | {
|
|
9
|
-
productSlug: string;
|
|
10
|
-
quantity: number;
|
|
11
|
-
};
|
|
12
|
-
type LockerversePaymentTheme = "dark" | "light";
|
|
13
|
-
type LockerversePaymentBranding = {
|
|
14
|
-
accentColor?: string;
|
|
15
|
-
imageUrl?: string | null;
|
|
16
|
-
name: string;
|
|
17
|
-
};
|
|
18
|
-
type LockerversePaymentStyle = CSSProperties & {
|
|
19
|
-
"--lockerverse-accent"?: string;
|
|
20
|
-
"--lockerverse-accent-contrast"?: string;
|
|
21
|
-
"--lockerverse-bg"?: string;
|
|
22
|
-
"--lockerverse-border"?: string;
|
|
23
|
-
"--lockerverse-control"?: string;
|
|
24
|
-
"--lockerverse-danger"?: string;
|
|
25
|
-
"--lockerverse-danger-border"?: string;
|
|
26
|
-
"--lockerverse-font-family"?: string;
|
|
27
|
-
"--lockerverse-muted"?: string;
|
|
28
|
-
"--lockerverse-placeholder"?: string;
|
|
29
|
-
"--lockerverse-radius"?: string;
|
|
30
|
-
"--lockerverse-subtle"?: string;
|
|
31
|
-
"--lockerverse-text"?: string;
|
|
32
|
-
};
|
|
33
|
-
type LockerversePaymentUncertain = {
|
|
34
|
-
paymentReference: string;
|
|
35
|
-
reason: "action_required" | "pending" | "recovery_failed";
|
|
36
|
-
};
|
|
37
|
-
type LockerversePaymentRecovery = {
|
|
38
|
-
connectedAccountId: string | null;
|
|
39
|
-
paymentReference: string;
|
|
40
|
-
};
|
|
41
|
-
type LockerverseStripeLoader = (...args: Parameters<typeof loadStripe>) => ReturnType<typeof loadStripe>;
|
|
42
|
-
type LockerversePaymentProps = CreateLockerverseWidgetOptions & Omit<ComponentPropsWithoutRef<"section">, "children" | "onError"> & {
|
|
43
|
-
branding?: LockerversePaymentBranding;
|
|
44
|
-
metadata?: Record<string, string>;
|
|
45
|
-
onPaymentComplete?: (payment: LockerversePaymentResult) => void;
|
|
46
|
-
onPaymentRecoveryChange?: (recovery: LockerversePaymentRecovery | null) => void;
|
|
47
|
-
onPaymentUncertain?: (payment: LockerversePaymentUncertain) => void;
|
|
48
|
-
resumePayment?: LockerversePaymentRecovery | null;
|
|
49
|
-
selection: LockerversePaymentSelectionItem[];
|
|
50
|
-
stripeLoader?: LockerverseStripeLoader;
|
|
51
|
-
style?: LockerversePaymentStyle;
|
|
52
|
-
theme?: LockerversePaymentTheme;
|
|
53
|
-
};
|
|
54
|
-
//#endregion
|
|
1
|
+
import { i as LockerversePaymentProps } from "./types.js";
|
|
55
2
|
//#region src/lockerverse-payment.d.ts
|
|
56
3
|
declare function LockerversePayment({ apiBaseUrl, branding, className, communitySlug, environment, fetch, metadata, onError, onPaymentComplete, onPaymentRecoveryChange, onPaymentUncertain, requestTimeoutMs, resumePayment, selection, sentryDsn, style, stripeLoader, theme, widgetSlug, ...sectionProps }: LockerversePaymentProps): import("react").JSX.Element;
|
|
57
4
|
//#endregion
|
|
58
|
-
export {
|
|
5
|
+
export { LockerversePayment as t };
|
|
59
6
|
//# sourceMappingURL=lockerverse-payment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockerverse-payment.d.ts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"lockerverse-payment.d.ts","names":[],"sources":["../src/lockerverse-payment.tsx"],"mappings":";;iBAuiCgB,qBACd,YACA,UACA,WACA,eACA,aACA,OACA,UACA,SACA,mBACA,yBACA,oBACA,kBACA,eACA,WACA,WACA,OACA,cACA,OACA,eACG,gBACF,0CAAuB,IAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,l as r,o as i,s as a,t as o,u as s}from"./contact-validation.js";import{AddressElement as c,Elements as l,PaymentElement as u,useElements as d,useStripe as f}from"@stripe/react-stripe-js";import{loadStripe as p}from"@stripe/stripe-js";import{createContext as m,useCallback as h,useContext as g,useEffect as _,useId as v,useLayoutEffect as y,useMemo as b,useReducer as x,useRef as S,useState as C}from"react";import{array as w,minLength as ee,minValue as T,nonEmpty as E,number as D,object as O,pipe as k,regex as A,safeInteger as j,safeParse as M,strictObject as N,string as P,trim as F,union as I}from"valibot";import{Fragment as L,jsx as R,jsxs as z}from"react/jsx-runtime";import{Select as B}from"@base-ui/react/select";import{LockerverseSdkError as V,createLockerverseCheckoutClient as H}from"@lockerverse/sdk/checkout";const U=m(void 0);function te({children:e,container:t}){return R(U.Provider,{value:t,children:e})}function W(){return R(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:R(`path`,{d:`m4 6 4 4 4-4`})})}function G(){return R(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:R(`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=g(U),d=[`lockerverse-payment__select`,r].filter(Boolean).join(` `);return R(`div`,{className:d,children:z(B.Root,{id:i,items:c,name:o,onValueChange:e=>{e!==null&&s(e)},value:l,children:[z(B.Trigger,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:`lockerverse-payment__select-trigger`,children:[R(B.Value,{}),R(B.Icon,{"aria-hidden":`true`,className:`lockerverse-payment__select-icon`,children:R(W,{})})]}),R(B.Portal,{container:u,children:R(B.Positioner,{alignItemWithTrigger:!1,className:`lockerverse-payment__select-positioner`,sideOffset:6,children:R(B.Popup,{className:`lockerverse-payment__select-popup`,children:R(B.List,{className:`lockerverse-payment__select-list`,children:c.map(e=>z(B.Item,{className:`lockerverse-payment__select-item`,value:e.value,children:[R(B.ItemText,{children:e.label}),R(B.ItemIndicator,{"aria-hidden":`true`,className:`lockerverse-payment__select-item-indicator`,children:R(G,{})})]},e.value))})})})})]})})}const ne=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],q=[`15`,`12`,`10`,`5`],J=[...q,`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=J.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%J.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+J.length)%J.length;break;case`Home`:r=0;break;case`End`:r=J.length-1;break;default:return}e.preventDefault();let i=J[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return z(`div`,{className:`lockerverse-payment__tip-box`,children:[R(`p`,{children:`Add a tip to support the Lockerverse platform`}),z(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[q.map(e=>z(`label`,{className:`lockerverse-payment__tip-choice`,children:[R(`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}),z(`span`,{children:[e,`%`]})]},e)),z(`label`,{className:`lockerverse-payment__tip-choice`,children:[R(`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`}),R(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?z(`label`,{children:[R(`span`,{children:`Custom tip`}),z(`span`,{className:`lockerverse-payment__money-input`,children:[R(`span`,{"aria-hidden":`true`,children:`$`}),R(`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?R(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):R(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ie({checked:e,children:t,name:n,onChange:r}){return z(`label`,{className:`lockerverse-payment__check-row`,children:[R(`input`,{checked:e,name:n,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),R(`span`,{children:t})]})}function ae({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:a,onChange:o,onApplyPromo:s,promoError:c,values:l}){let u=e=>o({...l,...e});return z(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?z(`label`,{children:[R(`span`,{children:`Member ID`}),R(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?z(`div`,{className:`lockerverse-payment__field`,children:[R(`span`,{id:`${r}-merch-size-label`,children:`Size`}),R(K,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>u({merchSize:e}),options:ne.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?z(`div`,{className:`lockerverse-payment__field`,children:[R(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),z(`div`,{className:`lockerverse-payment__promo-control`,children:[R(`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}),R(`button`,{disabled:!l.promoCode.trim()||a,onClick:s,type:`button`,children:a?`Applying…`:`Apply`})]}),c?R(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,R(i,{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?z(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 Y(e){return o(e)}function ce(t,r){let i=r?{...t,phone:Y(t.phone)}:t,a=O(r?{email:n,phone:e}:{email:n}),o=M(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 le=k(P(),F(),E()),ue=k(D(),j(),T(1)),de=k(w(I([N({amountCents:ue,productSlug:le}),N({productSlug:le,quantity:ue})])),ee(1)),fe=k(P(),F(),A(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function pe(e){let t=M(fe,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 me(e){let t=M(de,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}function he(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 ge(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 _e({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,onError:i,paymentState:a,requestTimeoutMs:o,selection:s,sentryDsn:c,widgetSlug:l}){let u=b(()=>({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,requestTimeoutMs:o,sentryDsn:c,widgetSlug:l}),[e,t,n,r,o,c,l]),d=me(s),f=d.success?JSON.stringify(d.value):`invalid-selection`,p=b(()=>d.success?JSON.parse(f):[],[d.success,f]),[m,h]=x(he,{phase:`idle`,revision:0}),g=S(void 0),v=S(void 0),y=S(i);return y.current=i,_(()=>{if(!d.success||a===`submitting`||a===`success`||a===`unresolved`||X(v.current,u,f)||X(g.current,u,f))return;let e=!0,t={configuration:u,selectionKey:f};g.current=t,h({configuration:u,selectionKey:f,type:`loading`});async function n(){try{let n=H(ge(u,e=>y.current?.(e))),{catalog:r,checkout:i}=await n.bootstrapCheckout({items:p}),a=[...i.items];e&&(g.current=void 0,v.current=t,h({catalog:r,checkoutItems:a,client:n,configuration:u,preparedCheckout:i,selectionKey:f,type:`ready`}))}catch(n){e&&(g.current=void 0,v.current=t,h({configuration:u,failure:n instanceof Error?n.message:`Lockerverse payment could not load.`,selectionKey:f,type:`error`}))}}return n(),()=>{e=!1,X(g.current,u,f)&&(g.current=void 0)}},[u,d.success,a,f,m.revision,p]),{retryCheckout:()=>{g.current=void 0,v.current=void 0,h({type:`retry`})},selectionError:d.success?void 0:d.message,session:m,updateCheckout:e=>h({preparedCheckout:e,type:`checkout`})}}const ve=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],ye=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function be(e,t,n){return(n===t.totalCents?ye:ve).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 xe(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 Se(e,t,n){if(t.checkoutStatus!==`action_required`)return xe(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 xe(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function Ce(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof V&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return Se(e,r,n)}async function we(e,t,n){try{return Se(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}function Te(e){throw Error(`Unexpected payment workflow value: ${String(e)}`)}function Ee(e,t){return t===void 0?{phase:e}:{error:t,phase:e}}function De(e){return e?{phase:`recovering`}:{phase:`editing`}}function Oe(e){return e.phase===`editing`||e.phase===`invalid`?e.error:e.phase===`refreshing_quote`?e.previousError:void 0}function ke(e){return e.phase===`succeeded`?`success`:e.phase===`unresolved`?`unresolved`:e.phase===`submitting`||e.phase===`recovering`?`submitting`:e.phase===`invalid`?`invalid`:Oe(e)?`error`:`idle`}function Ae(e){return e.phase===`submitting`}function je(e,t){if(e.phase===`succeeded`||e.phase===`unresolved`)return e;switch(t.type){case`field_changed`:return e.phase===`invalid`?Ee(`editing`,e.error):e;case`validation_failed`:return e.phase===`submitting`||e.phase===`recovering`?e:Ee(`invalid`,Oe(e));case`quote_refresh_started`:{if(e.phase===`submitting`||e.phase===`recovering`)return e;let n=Oe(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`?Ee(`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 Ee(`editing`,t.error);case`recovery_failed`:return e.phase===`recovering`?Ee(`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 Te(t)}}function Me(e,t){return t.tipPercent===`custom`?t.customTip.trim()?pe(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}function Ne(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 Pe(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Fe(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Pe(r.shipping,`Shipping`)}function Ie({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 Le({catalog:e,confirmationToken:t,email:n,fieldValues:r,metadata:i,phone:o,shippingAddress:s}){return{...t?{confirmationToken:t}:{},customFieldAnswers:a(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:o}:{},...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 Re({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=Y(d),g=Me(f.subtotalCents,o);if(!g.success)throw Error(g.message);let _=Ne(t,o,m,g.cents),v=await r.calculateTotal({..._,items:n});if(Q(s),v.totalCents>0&&be(f,v,c))return{kind:`quote_changed`,quote:v};if(v.totalCents===0){let n;t.widget.fields.shipping&&(n=Fe(t,o,Pe(e.billing,`Billing`),e)),Q(s),Z(u,{connectedAccountId:v.payment.connectedAccountId,paymentReference:v.paymentReference});let i=await Ce(r,{checkout:v,submission:Le({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=Pe(e.billing,`Billing`),x=Fe(t,o,b,e),S=await p.createConfirmationToken({elements:i,params:Ie({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 Ce(r,{checkout:v,submission:Le({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 ze(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Be(e,t){if(!t)return e instanceof Error?e.message:`The order total could not be updated.`}function Ve({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 He({error:e,setPromoError:t,updateWorkflow:n,validatePromo:r}){r&&t(`This promo code is invalid or cannot be applied.`);let i=Be(e,r);n(i===void 0?{type:`quote_refresh_failed`}:{error:i,type:`quote_refresh_failed`})}function Ue({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 ${ze(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 We(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:f,quote:p,resumePayment:m,stripe:g}=e,[v,y]=x(je,m,De),[b,w]=C(p.totalCents),[ee,T]=C(),E=S(!1),D=S(0),O=S(0),k=S(v);k.current=v;let A=h((e,t=!1)=>{let n=k.current,r=je(n,e);r!==n&&(k.current=r,y(e),t&&f(ke(r)))},[f]),j=h(e=>A(e,!0),[A]),M=h(()=>{let e=O.current+1;return O.current=e,()=>O.current===e},[]);_(()=>()=>{O.current+=1},[]);let N=t.widget.fields.tipping?Me(p.subtotalCents,o):{cents:0,success:!0},P=N.success?N.cents:null;_(()=>{if(P===null)return;let e=t.widget.fields.serviceFee&&o.includeServiceFee?p.serviceFeeCents||Math.round(p.subtotalCents*t.pricingPolicy.serviceFeeRateBasisPoints/1e4):0,n=p.totalCents-p.serviceFeeCents-p.tipCents+e+P;w(n),n>0&&i?.update({amount:n})},[t.pricingPolicy.serviceFeeRateBasisPoints,t.widget.fields.serviceFee,i,o.includeServiceFee,P,p.serviceFeeCents,p.tipCents,p.totalCents,p.subtotalCents]),_(()=>{if(!(m&&g)||E.current)return;E.current=!0;let e=M();return f(ke(k.current)),we(r,m.paymentReference,g).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,f,m,g,M,j]);let F=h((e=!1)=>{e&&T(void 0),A({type:`field_changed`})},[A]);async function I(e=!1,i=!1){let s=ce({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({...Ne(t,o,s.value?.email??``,N.cents),items:n});if(c!==D.current)return;Ve({nextQuote:e,onQuoteChange:d,setDisplayedTotalCents:w,setPromoError:T,updateWorkflow:A,validatePromo:i})}catch(e){if(c!==D.current)return;He({error:e,setPromoError:T,updateWorkflow:A,validatePromo:i})}}async function L(){T(void 0),await I(!0,!0)}async function R({addresses:e,phone:f}){j({type:`submission_started`});let m=M();try{let h=await Re({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:m,locallyPreviewedTotalCents:b,metadata:s,onPaymentRecoveryChange:l,phone:f,quote:p,stripe:g});if(!m())return;Ue({onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:d,result:h,setDisplayedTotalCents:w,transitionWorkflow:j})}catch(e){if(!m())return;Z(l,null),j({error:e instanceof Error?e.message:`Payment could not be completed.`,type:`retryable_failure`})}}let z=v.phase===`succeeded`||v.phase===`unresolved`?v.message:void 0;return{commands:{applyPromo:L,fieldChanged:F,refreshAuthoritativeTotal:I,reportStripeLoadError:e=>j({error:e,type:`retryable_failure`}),reportValidationFailure:()=>j({type:`validation_failed`}),submit:R},state:{displayedTotalCents:b,isRecovering:v.phase===`recovering`,isRefreshingQuote:v.phase===`refreshing_quote`,isSubmitting:Ae(v),parsedTip:N,paymentError:Oe(v),promoError:ee,terminalMessage:z}}}function $(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}const Ge=[{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 Ke(e,t){return e.trim().startsWith(`+`)?e:`${Ge.find(e=>e.value===t)?.callingCode??`+1`}${e}`}function qe({accentColor:e,catalog:t,checkoutItems:n,client:r,fontFamily:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:u,quote:d,resumePayment:f,onStateChange:p,stripeLoader:m,theme:h,visualStyle:g}){let _=f?f.connectedAccountId:d.payment.connectedAccountId,v=b(()=>m(t.payment.publishableKey,_?{stripeAccount:_}:void 0).catch(()=>null),[t.payment.publishableKey,_,m]);return R(l,{options:{amount:Math.max(d.totalCents,100),appearance:{rules:{".Input:focus":{borderColor:e,boxShadow:`0 0 0 1px ${e}`,outline:`none`}},theme:h===`light`?`stripe`:`night`,variables:{borderRadius:g?.[`--lockerverse-radius`]??`10px`,colorBackground:g?.[`--lockerverse-control`]??(h===`light`?`#f5f6f7`:`#121212`),colorDanger:g?.[`--lockerverse-danger`]??(h===`light`?`#c52b3e`:`#f08a98`),colorPrimary:e,colorText:g?.[`--lockerverse-text`]??(h===`light`?`#121416`:`#ffffff`),colorTextPlaceholder:g?.[`--lockerverse-placeholder`]??(h===`light`?`#72767d`:`#6b6b6b`),colorTextSecondary:g?.[`--lockerverse-muted`]??(h===`light`?`#62666d`:`#a1a1aa`),focusBoxShadow:`none`,focusOutline:`none`,fontFamily:i,fontSizeBase:`16px`}},currency:d.payment.currency,excludedPaymentMethodTypes:[`us_bank_account`],mode:`payment`,syncAddressCheckbox:`none`},stripe:v,children:R(it,{catalog:t,checkoutItems:n,client:r,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:u,onStateChange:p,quote:d,resumePayment:f})},`${t.payment.publishableKey}:${_??`platform`}`)}function Je({label:e}){return z(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[R(`p`,{children:e}),z(`div`,{"aria-hidden":`true`,children:[R(`span`,{}),R(`span`,{}),R(`span`,{})]})]})}function Ye({onError:e,onReady:t,ready:n}){return z(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:R(Je,{label:`Loading payment form...`}),R(`div`,{className:`lockerverse-payment__stripe-mount`,children:R(u,{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 Xe({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return z(`div`,{className:`lockerverse-payment__address`,children:[R(`h2`,{children:e}),z(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:R(Je,{label:`Loading ${e.toLowerCase()}...`}),R(`div`,{className:`lockerverse-payment__stripe-mount`,children:R(c,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function Ze({message:e}){return e?R(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function Qe({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 z(L,{children:[f?R(Ye,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?R(Xe,{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?z(`div`,{className:`lockerverse-payment__shipping`,children:[R(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:R(Xe,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function $e({displayedBaseCents:e,displayedTipCents:t,displayedTotalCents:n,quote:r}){let i=Math.max(0,e-r.subtotalCents+r.discountCents);return z(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[R(`h2`,{children:`Order summary`}),R(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.lineItems.map(e=>z(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[z(`span`,{children:[e.productName,e.quantity>1?z(L,{children:[` `,z(`small`,{children:[`× `,e.quantity]})]}):null]}),R(`strong`,{children:$(e.subtotalCents)})]},e.listingId))}),z(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[i>0?z(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[R(`span`,{children:`Service fee`}),R(`strong`,{children:$(i)})]}):null,r.discountCents>0&&r.appliedDiscount?z(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[z(`span`,{children:[r.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,r.appliedDiscount.percentageOff,`% off)`]}),z(`strong`,{children:[`-`,$(r.discountCents)]})]}):null,t>0?z(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[R(`span`,{children:`Tip`}),R(`strong`,{children:$(t)})]}):null,z(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[R(`span`,{children:`Total`}),R(`strong`,{children:$(n)})]})]})]})}function et({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=l?`Complete order`:`Pay ${$(t)}`;return o&&(d=l?`Completing…`:`Processing…`),z(`div`,{className:`lockerverse-payment__actions`,children:[R(oe,{amountCents:c.serviceFeeCents||Math.round(c.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:e.widget.fields.serviceFee,onChange:s,values:n}),R(`button`,{"aria-busy":o,"aria-label":l?`Complete order`:`Process payment for ${$(t)} total`,disabled:o||!u,type:`submit`,children:d})]})}function tt(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 nt({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&&tt(n,`custom:${o}`)}function rt({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 z(`div`,{className:`lockerverse-payment__contact`,children:[R(`label`,{htmlFor:r,children:`Email`}),R(`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?R(`p`,{className:`lockerverse-payment__field-message`,id:n,children:a.email}):null,t===void 0?null:z(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),f?z(L,{children:[R(`label`,{htmlFor:m,children:`Phone`}),z(`div`,{className:`lockerverse-payment__phone-control`,children:[R(K,{ariaLabel:`Phone number country`,className:`lockerverse-payment__select--phone-country`,name:`phoneCountry`,onValueChange:l,options:Ge,value:d}),R(`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?R(`p`,{className:`lockerverse-payment__field-message`,id:p,children:a.phone}):null]}):null]})}function it({catalog:e,checkoutItems:n,client:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:p,resumePayment:m}){let[h,g]=C(``),[y,b]=C(``),[x,w]=C(`US`),[ee,T]=C({}),[E,D]=C({}),[O,k]=C(),[A,j]=C(!1),[M,N]=C(!1),[P,F]=C(!1),[I,L]=C({customFields:t(e.widget.customFields),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),B=S({billing:null,shipping:null}),V=S(null),H=S(null),U=S(null),te=S(p.totalCents>0),W=We({catalog:e,checkoutItems:n,client:i,elements:d(),email:h,fieldValues:I,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:p,resumePayment:m,stripe:f()}),{displayedTotalCents:G,isRecovering:K,isRefreshingQuote:ne,isSubmitting:q,parsedTip:J,paymentError:ie,promoError:oe,terminalMessage:se}=W.state,Y=`lockerverse-${v()}`,le=`${Y}-email`,ue=`${le}-error`,de=`${Y}-phone`,fe=`${de}-error`,pe=`${Y}-tip-error`,me=(J.success?J.cents:null)??0,he=G-me,ge=!e.widget.fields.shipping||I.shippingMatchesBilling||P;_(()=>{q&&U.current?.focus()},[q]),_(()=>{let e=G>0;e&&!te.current&&(j(!1),N(!1)),te.current=e},[G]);function X(e){W.commands.fieldChanged(),T(t=>{let n={...t};return delete n[e],n})}function _e(e){W.commands.fieldChanged(e.promoCode!==I.promoCode),L(e),D({}),k(void 0)}async function ve(t){t.preventDefault();let n=ce({email:h,phone:Ke(y,x)},e.widget.fields.phone),i=r(e.widget.customFields,I.customFields);if(!(n.value&&J.success)||Object.keys(i).length>0){T(n.errors),D(i),k(J.success?void 0:J.message),W.commands.reportValidationFailure();let e=t.currentTarget;queueMicrotask(()=>{nt({customFieldErrors:i,emailRef:V,form:e,parsedTipSuccess:J.success,phoneRef:H,validationErrors:n.errors})});return}T({}),D({}),await W.commands.submit({addresses:B.current,phone:Ke(y,x)})}return se?R(`p`,{className:`lockerverse-payment__payment-status`,ref:U,role:`status`,tabIndex:-1,children:se}):K?R(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):z(`form`,{"aria-busy":q,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:ve,children:[R(`div`,{"data-lockerverse-input-region":``,inert:q?!0:void 0,children:z(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:q,children:[R($e,{displayedBaseCents:he,displayedTipCents:me,displayedTotalCents:G,quote:p}),R(re,{enabled:e.widget.fields.tipping,error:O,errorId:pe,onChange:_e,values:I}),R(rt,{email:h,emailDiscountPercentOff:p.appliedDiscount?.source===`email_list`?p.appliedDiscount.percentageOff:void 0,emailErrorId:ue,emailId:le,emailRef:V,errors:ee,onEmailBlur:()=>W.commands.refreshAuthoritativeTotal(),onEmailChange:e=>{g(e),X(`email`)},onPhoneChange:e=>{b(e),X(`phone`)},onPhoneCountryChange:e=>{w(e),W.commands.fieldChanged()},phone:y,phoneCountry:x,phoneEnabled:e.widget.fields.phone,phoneErrorId:fe,phoneId:de,phoneRef:H}),R(Qe,{catalog:e,displayedTotalCents:G,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isShippingAddressReady:P,onAddressChange:(e,t)=>{B.current[e]=t},onFieldValuesChange:_e,onStripeLoadError:W.commands.reportStripeLoadError,setIsBillingAddressReady:N,setIsPaymentReady:j,setIsShippingAddressReady:F}),R(ae,{customFields:e.widget.customFields,errors:E,fields:e.widget.fields,idPrefix:Y,isPromoApplying:ne,onApplyPromo:W.commands.applyPromo,onChange:_e,promoError:oe,values:I}),R(et,{catalog:e,displayedTotalCents:G,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isRequiredShippingReady:ge,isSubmitting:q,onFieldValuesChange:_e,quote:p})]})}),q?R(`p`,{className:`lockerverse-payment__sr-only`,ref:U,role:`status`,tabIndex:-1,children:G===0?`Completing order…`:`Processing payment…`}):null,R(Ze,{message:ie})]})}function at(){return z(`div`,{className:`lockerverse-payment__skeleton-loader-block`,children:[R(`span`,{className:`lockerverse-payment__skeleton-loader-label`}),z(`div`,{className:`lockerverse-payment__skeleton-loader-content`,children:[R(`span`,{className:`lockerverse-payment__skeleton-loader-full`}),z(`div`,{className:`lockerverse-payment__skeleton-loader-grid`,children:[R(`span`,{className:`lockerverse-payment__skeleton-loader-half`}),R(`span`,{className:`lockerverse-payment__skeleton-loader-half`})]})]})]})}function ot(){return z(`div`,{className:`lockerverse-payment__loading`,children:[R(`span`,{"aria-live":`polite`,className:`lockerverse-payment__sr-only`,role:`status`,children:`Loading payment…`}),z(`div`,{"aria-hidden":`true`,className:`lockerverse-payment__skeleton`,children:[z(`div`,{className:`lockerverse-payment__skeleton-branding`,children:[R(`span`,{className:`lockerverse-payment__skeleton-avatar`}),R(`span`,{className:`lockerverse-payment__skeleton-community`})]}),z(`div`,{className:`lockerverse-payment__skeleton-contact`,children:[z(`div`,{className:`lockerverse-payment__skeleton-field`,children:[R(`span`,{className:`lockerverse-payment__skeleton-label`}),R(`span`,{className:`lockerverse-payment__skeleton-input`})]}),z(`div`,{className:`lockerverse-payment__skeleton-field`,children:[R(`span`,{className:`lockerverse-payment__skeleton-label`}),R(`span`,{className:`lockerverse-payment__skeleton-input`})]})]}),R(at,{}),R(at,{}),z(`div`,{className:`lockerverse-payment__skeleton-actions`,children:[R(`span`,{className:`lockerverse-payment__skeleton-check-line`}),R(`span`,{className:`lockerverse-payment__skeleton-button`})]})]})]})}function st({apiBaseUrl:e,branding:t,className:n,communitySlug:r,environment:i,fetch:a,metadata:o,onError:c,onPaymentComplete:l,onPaymentRecoveryChange:u,onPaymentUncertain:d,requestTimeoutMs:f,resumePayment:m,selection:g,sentryDsn:v,style:b,stripeLoader:x=p,theme:w=`dark`,widgetSlug:ee,...T}){let E=S(m).current,D=S(null),[O,k]=C(),[A,j]=C(`idle`),M=S(void 0),{retryCheckout:N,selectionError:P,session:F,updateCheckout:I}=_e({apiBaseUrl:e,communitySlug:r,environment:i,fetch:a,onError:c,paymentState:A,requestTimeoutMs:f,selection:g,sentryDsn:v,widgetSlug:ee}),L=F.phase===`ready`?F.revision:void 0,B=h(e=>{L!==void 0&&(M.current=L),j(e)},[L]);_(()=>{F.phase===`loading`&&k(void 0)},[F.phase]),y(()=>{F.phase===`ready`&&M.current!==F.revision&&j(e=>e===`success`||e===`unresolved`?e:`idle`)},[F.phase,F.revision]);let V=[`lockerverse-payment`,n].filter(Boolean).join(` `),H=t??(F.phase===`ready`?F.catalog.community:null),U=b?.[`--lockerverse-accent`]??H?.accentColor??`#38d77a`,W=s(U),G={...b,...H?.accentColor&&b?.[`--lockerverse-accent`]===void 0?{"--lockerverse-accent":H.accentColor}:{},...W&&b?.[`--lockerverse-accent-contrast`]===void 0?{"--lockerverse-accent-contrast":W}:{}};if(P)return R(`section`,{...T,className:V,"data-lockerverse-theme":w,role:`alert`,style:G,children:P});if(F.phase===`error`)return z(`section`,{...T,className:V,"data-lockerverse-theme":w,style:G,children:[R(`p`,{role:`alert`,children:F.failure}),R(`button`,{onClick:N,type:`button`,children:`Retry`})]});if(F.phase!==`ready`)return R(`section`,{...T,"aria-busy":`true`,"aria-label":`Payment`,className:V,"data-lockerverse-theme":w,style:G,children:R(ot,{})});let{catalog:K,checkoutItems:ne,client:q,preparedCheckout:J}=F;return z(`section`,{...T,"aria-label":`Payment`,className:V,"data-lockerverse-theme":w,"data-payment-state":A,ref:D,style:G,children:[z(`header`,{children:[K.widget.showCommunityBranding&&H?z(`div`,{className:`lockerverse-payment__branding`,children:[H.imageUrl?R(`img`,{alt:H.name,height:`48`,src:H.imageUrl,width:`48`}):null,R(`strong`,{children:H.name})]}):null,R(`h1`,{children:K.widget.title??K.widget.name}),K.widget.description?R(`p`,{children:K.widget.description}):null]}),O?R(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:O}):null,R(te,{container:D,children:R(qe,{accentColor:b?.[`--lockerverse-accent`]??H?.accentColor??`#38d77a`,catalog:K,checkoutItems:ne,client:q,fontFamily:b?.[`--lockerverse-font-family`]??`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,metadata:o,onPaymentComplete:l,onPaymentRecoveryChange:u,onPaymentUncertain:d,onQuoteChange:(e,t)=>{k(t),I(e)},onStateChange:B,quote:J,resumePayment:E,stripeLoader:x,theme:w,visualStyle:G})})]})}export{st as t};
|
|
1
|
+
import{a as e,c as t,i as n,l as r,o as i,s as a,t as o,u as s}from"./contact-validation.js";import{LockerverseSdkError as c,createLockerverseCheckoutClient as l}from"@lockerverse/sdk/checkout";import{createContext as u,useCallback as d,useContext as f,useEffect as p,useId as m,useLayoutEffect as h,useMemo as g,useReducer as _,useRef as v,useState as y}from"react";import{AddressElement as b,Elements as x,PaymentElement as S,useElements as C,useStripe as w}from"@stripe/react-stripe-js";import{loadStripe as ee}from"@stripe/stripe-js";import{array as T,minLength as E,minValue as D,nonEmpty as O,number as k,object as A,pipe as j,regex as M,safeInteger as N,safeParse as P,strictObject as F,string as I,trim as L,union as R}from"valibot";import{Fragment as z,jsx as B,jsxs as V}from"react/jsx-runtime";import{Select as H}from"@base-ui/react/select";const U=u(void 0);function te({children:e,container:t}){return B(U.Provider,{value:t,children:e})}function W(){return B(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:B(`path`,{d:`m4 6 4 4 4-4`})})}function G(){return B(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:B(`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=f(U),d=[`lockerverse-payment__select`,r].filter(Boolean).join(` `);return B(`div`,{className:d,children:V(H.Root,{id:i,items:c,name:o,onValueChange:e=>{e!==null&&s(e)},value:l,children:[V(H.Trigger,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:`lockerverse-payment__select-trigger`,children:[B(H.Value,{}),B(H.Icon,{"aria-hidden":`true`,className:`lockerverse-payment__select-icon`,children:B(W,{})})]}),B(H.Portal,{container:u,children:B(H.Positioner,{alignItemWithTrigger:!1,className:`lockerverse-payment__select-positioner`,sideOffset:6,children:B(H.Popup,{className:`lockerverse-payment__select-popup`,children:B(H.List,{className:`lockerverse-payment__select-list`,children:c.map(e=>V(H.Item,{className:`lockerverse-payment__select-item`,value:e.value,children:[B(H.ItemText,{children:e.label}),B(H.ItemIndicator,{"aria-hidden":`true`,className:`lockerverse-payment__select-item-indicator`,children:B(G,{})})]},e.value))})})})})]})})}const ne=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],q=[`15`,`12`,`10`,`5`],J=[...q,`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=J.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%J.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+J.length)%J.length;break;case`Home`:r=0;break;case`End`:r=J.length-1;break;default:return}e.preventDefault();let i=J[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return V(`div`,{className:`lockerverse-payment__tip-box`,children:[B(`p`,{children:`Add a tip to support the Lockerverse platform`}),V(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[q.map(e=>V(`label`,{className:`lockerverse-payment__tip-choice`,children:[B(`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}),V(`span`,{children:[e,`%`]})]},e)),V(`label`,{className:`lockerverse-payment__tip-choice`,children:[B(`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`}),B(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?V(`label`,{children:[B(`span`,{children:`Custom tip`}),V(`span`,{className:`lockerverse-payment__money-input`,children:[B(`span`,{"aria-hidden":`true`,children:`$`}),B(`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?B(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):B(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ie({checked:e,children:t,name:n,onChange:r}){return V(`label`,{className:`lockerverse-payment__check-row`,children:[B(`input`,{checked:e,name:n,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),B(`span`,{children:t})]})}function ae({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:a,onChange:o,onApplyPromo:s,promoError:c,values:l}){let u=e=>o({...l,...e});return V(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?V(`label`,{children:[B(`span`,{children:`Member ID`}),B(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?V(`div`,{className:`lockerverse-payment__field`,children:[B(`span`,{id:`${r}-merch-size-label`,children:`Size`}),B(K,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>u({merchSize:e}),options:ne.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?V(`div`,{className:`lockerverse-payment__field`,children:[B(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),V(`div`,{className:`lockerverse-payment__promo-control`,children:[B(`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}),B(`button`,{disabled:!l.promoCode.trim()||a,onClick:s,type:`button`,children:a?`Applying…`:`Apply`})]}),c?B(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,B(i,{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?V(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 Y(e){return o(e)}function ce(t,r){let i=r?{...t,phone:Y(t.phone)}:t,a=A(r?{email:n,phone:e}:{email:n}),o=P(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 X=j(I(),L(),O()),le=j(k(),N(),D(1)),ue=j(T(R([F({amountCents:le,productSlug:X}),F({productSlug:X,quantity:le}),F({productSlug:X})])),E(1)),de=j(I(),L(),M(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function fe(e){let t=P(de,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 pe(e){let t=P(ue,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}function me(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 he(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 ge(e,t,n){return e?.configuration===t&&e.selectionKey===n}function _e({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,onError:i,paymentState:a,requestTimeoutMs:o,selection:s,sentryDsn:c,widgetSlug:u}){let d=g(()=>({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,requestTimeoutMs:o,sentryDsn:c,widgetSlug:u}),[e,t,n,r,o,c,u]),f=pe(s),m=f.success?JSON.stringify(f.value):`invalid-selection`,h=g(()=>f.success?JSON.parse(m):[],[f.success,m]),[y,b]=_(me,{phase:`idle`,revision:0}),x=v(void 0),S=v(void 0),C=v(i);return C.current=i,p(()=>{if(!f.success||a===`submitting`||a===`success`||a===`unresolved`||ge(S.current,d,m)||ge(x.current,d,m))return;let e=!0,t={configuration:d,selectionKey:m};x.current=t,b({configuration:d,selectionKey:m,type:`loading`});async function n(){try{let n=l(he(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:m,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:m,type:`error`}))}}return n(),()=>{e=!1,ge(x.current,d,m)&&(x.current=void 0)}},[d,f.success,a,m,y.revision,h]),{retryCheckout:()=>{x.current=void 0,S.current=void 0,b({type:`retry`})},selectionError:f.success?void 0:f.message,session:y,updateCheckout:e=>b({preparedCheckout:e,type:`checkout`})}}const ve=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],ye=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function be(e,t,n){return(n===t.totalCents?ye:ve).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 xe(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 Se(e,t,n){if(t.checkoutStatus!==`action_required`)return xe(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 xe(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function Ce(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof c&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return Se(e,r,n)}async function we(e,t,n){try{return Se(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}function Te(e){throw Error(`Unexpected payment workflow value: ${String(e)}`)}function Ee(e,t){return t===void 0?{phase:e}:{error:t,phase:e}}function De(e){return e?{phase:`recovering`}:{phase:`editing`}}function Oe(e){return e.phase===`editing`||e.phase===`invalid`?e.error:e.phase===`refreshing_quote`?e.previousError:void 0}function ke(e){return e.phase===`succeeded`?`success`:e.phase===`unresolved`?`unresolved`:e.phase===`submitting`||e.phase===`recovering`?`submitting`:e.phase===`invalid`?`invalid`:Oe(e)?`error`:`idle`}function Ae(e){return e.phase===`submitting`}function je(e,t){if(e.phase===`succeeded`||e.phase===`unresolved`)return e;switch(t.type){case`field_changed`:return e.phase===`invalid`?Ee(`editing`,e.error):e;case`validation_failed`:return e.phase===`submitting`||e.phase===`recovering`?e:Ee(`invalid`,Oe(e));case`quote_refresh_started`:{if(e.phase===`submitting`||e.phase===`recovering`)return e;let n=Oe(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`?Ee(`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 Ee(`editing`,t.error);case`recovery_failed`:return e.phase===`recovering`?Ee(`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 Te(t)}}function Me(e,t){return t.tipPercent===`custom`?t.customTip.trim()?fe(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}function Ne(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 Pe(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Fe(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Pe(r.shipping,`Shipping`)}function Ie({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 Le({catalog:e,confirmationToken:t,email:n,fieldValues:r,metadata:i,phone:o,shippingAddress:s}){return{...t?{confirmationToken:t}:{},customFieldAnswers:a(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:o}:{},...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 Re({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=Y(d),g=Me(f.subtotalCents,o);if(!g.success)throw Error(g.message);let _=Ne(t,o,m,g.cents),v=await r.calculateTotal({..._,items:n});if(Q(s),v.totalCents>0&&be(f,v,c))return{kind:`quote_changed`,quote:v};if(v.totalCents===0){let n;t.widget.fields.shipping&&(n=Fe(t,o,Pe(e.billing,`Billing`),e)),Q(s),Z(u,{connectedAccountId:v.payment.connectedAccountId,paymentReference:v.paymentReference});let i=await Ce(r,{checkout:v,submission:Le({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=Pe(e.billing,`Billing`),x=Fe(t,o,b,e),S=await p.createConfirmationToken({elements:i,params:Ie({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 Ce(r,{checkout:v,submission:Le({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 ze(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Be(e,t){if(!t)return e instanceof Error?e.message:`The order total could not be updated.`}function Ve({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 He({error:e,setPromoError:t,updateWorkflow:n,validatePromo:r}){r&&t(`This promo code is invalid or cannot be applied.`);let i=Be(e,r);n(i===void 0?{type:`quote_refresh_failed`}:{error:i,type:`quote_refresh_failed`})}function Ue({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 ${ze(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 We(e){let{catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,metadata:s,onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:f,onStateChange:m,quote:h,resumePayment:g,stripe:b}=e,[x,S]=_(je,g,De),[C,w]=y(h.totalCents),[ee,T]=y(),E=v(!1),D=v(0),O=v(0),k=v(x);k.current=x;let A=d((e,t=!1)=>{let n=k.current,r=je(n,e);r!==n&&(k.current=r,S(e),t&&m(ke(r)))},[m]),j=d(e=>A(e,!0),[A]),M=d(()=>{let e=O.current+1;return O.current=e,()=>O.current===e},[]);p(()=>()=>{O.current+=1},[]);let N=t.widget.fields.tipping?Me(h.subtotalCents,o):{cents:0,success:!0},P=N.success?N.cents:null;p(()=>{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]),p(()=>{if(!(g&&b)||E.current)return;E.current=!0;let e=M();return m(ke(k.current)),we(r,g.paymentReference,b).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,m,g,b,M,j]);let F=d((e=!1)=>{e&&T(void 0),A({type:`field_changed`})},[A]);async function I(e=!1,i=!1){let s=ce({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({...Ne(t,o,s.value?.email??``,N.cents),items:n});if(c!==D.current)return;Ve({nextQuote:e,onQuoteChange:f,setDisplayedTotalCents:w,setPromoError:T,updateWorkflow:A,validatePromo:i})}catch(e){if(c!==D.current)return;He({error:e,setPromoError:T,updateWorkflow:A,validatePromo:i})}}async function L(){T(void 0),await I(!0,!0)}async function R({addresses:e,phone:d}){j({type:`submission_started`});let p=M();try{let m=await Re({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,isAttemptActive:p,locallyPreviewedTotalCents:C,metadata:s,onPaymentRecoveryChange:l,phone:d,quote:h,stripe:b});if(!p())return;Ue({onPaymentComplete:c,onPaymentRecoveryChange:l,onPaymentUncertain:u,onQuoteChange:f,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 z=x.phase===`succeeded`||x.phase===`unresolved`?x.message:void 0;return{commands:{applyPromo:L,fieldChanged:F,refreshAuthoritativeTotal:I,reportStripeLoadError:e=>j({error:e,type:`retryable_failure`}),reportValidationFailure:()=>j({type:`validation_failed`}),submit:R},state:{displayedTotalCents:C,isRecovering:x.phase===`recovering`,isRefreshingQuote:x.phase===`refreshing_quote`,isSubmitting:Ae(x),parsedTip:N,paymentError:Oe(x),promoError:ee,terminalMessage:z}}}function $(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Ge(e){return e===`monthly`?{interval:`month`,label:`Monthly`}:e===`annually`?{interval:`year`,label:`Annual`}:null}const Ke=[{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 qe(e,t){return e.trim().startsWith(`+`)?e:`${Ke.find(e=>e.value===t)?.callingCode??`+1`}${e}`}function Je({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 _=d?d.connectedAccountId:u.payment.connectedAccountId,v=g(()=>p(t.payment.publishableKey,_?{stripeAccount:_}:void 0).catch(()=>null),[t.payment.publishableKey,_,p]);return B(x,{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:B(at,{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}:${_??`platform`}:${u.paymentOption}`)}function Ye({label:e}){return V(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[B(`p`,{children:e}),V(`div`,{"aria-hidden":`true`,children:[B(`span`,{}),B(`span`,{}),B(`span`,{})]})]})}function Xe({onError:e,onReady:t,ready:n}){return V(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:B(Ye,{label:`Loading payment form...`}),B(`div`,{className:`lockerverse-payment__stripe-mount`,children:B(S,{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 Ze({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return V(`div`,{className:`lockerverse-payment__address`,children:[B(`h2`,{children:e}),V(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:B(Ye,{label:`Loading ${e.toLowerCase()}...`}),B(`div`,{className:`lockerverse-payment__stripe-mount`,children:B(b,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function Qe({message:e}){return e?B(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function $e({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 V(z,{children:[f?B(Xe,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?B(Ze,{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?V(`div`,{className:`lockerverse-payment__shipping`,children:[B(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:B(Ze,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function et({displayedBaseCents:e,displayedTipCents:t,displayedTotalCents:n,quote:r}){let i=Ge(r.paymentOption),a=Math.max(0,e-r.subtotalCents+r.discountCents);return V(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[B(`h2`,{children:`Order summary`}),B(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.lineItems.map(e=>V(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[V(`span`,{children:[e.productName,e.quantity>1?V(z,{children:[` `,V(`small`,{children:[`× `,e.quantity]})]}):null,e.paymentOption===`monthly`?B(`small`,{children:` · Monthly`}):null,e.paymentOption===`annually`?B(`small`,{children:` · Annual`}):null]}),B(`strong`,{children:$(e.subtotalCents)})]},e.listingId))}),V(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[a>0?V(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[B(`span`,{children:`Service fee`}),B(`strong`,{children:$(a)})]}):null,r.discountCents>0&&r.appliedDiscount?V(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[V(`span`,{children:[r.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,r.appliedDiscount.percentageOff,`% off)`]}),V(`strong`,{children:[`-`,$(r.discountCents)]})]}):null,t>0?V(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[B(`span`,{children:`Tip`}),B(`strong`,{children:$(t)})]}):null,V(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[B(`span`,{children:i?`${i.label} total`:`Total`}),B(`strong`,{children:$(n)})]})]})]})}function tt({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=Ge(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)}`),V(`div`,{className:`lockerverse-payment__actions`,children:[B(oe,{amountCents:c.serviceFeeCents||Math.round(c.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:e.widget.fields.serviceFee,onChange:s,values:n}),B(`button`,{"aria-busy":o,"aria-label":p,disabled:o||!u,type:`submit`,children:f})]})}function nt(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 rt({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&&nt(n,`custom:${o}`)}function it({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 V(`div`,{className:`lockerverse-payment__contact`,children:[B(`label`,{htmlFor:r,children:`Email`}),B(`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?B(`p`,{className:`lockerverse-payment__field-message`,id:n,children:a.email}):null,t===void 0?null:V(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),f?V(z,{children:[B(`label`,{htmlFor:m,children:`Phone`}),V(`div`,{className:`lockerverse-payment__phone-control`,children:[B(K,{ariaLabel:`Phone number country`,className:`lockerverse-payment__select--phone-country`,name:`phoneCountry`,onValueChange:l,options:Ke,value:d}),B(`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?B(`p`,{className:`lockerverse-payment__field-message`,id:p,children:a.phone}):null]}):null]})}function at({catalog:e,checkoutItems:n,client:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:d,resumePayment:f}){let[h,g]=y(``),[_,b]=y(``),[x,S]=y(`US`),[ee,T]=y({}),[E,D]=y({}),[O,k]=y(),[A,j]=y(!1),[M,N]=y(!1),[P,F]=y(!1),[I,L]=y({customFields:t(e.widget.customFields),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),R=v({billing:null,shipping:null}),z=v(null),H=v(null),U=v(null),te=v(d.totalCents>0),W=We({catalog:e,checkoutItems:n,client:i,elements:C(),email:h,fieldValues:I,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:d,resumePayment:f,stripe:w()}),{displayedTotalCents:G,isRecovering:K,isRefreshingQuote:ne,isSubmitting:q,parsedTip:J,paymentError:ie,promoError:oe,terminalMessage:se}=W.state,Y=`lockerverse-${m()}`,X=`${Y}-email`,le=`${X}-error`,ue=`${Y}-phone`,de=`${ue}-error`,fe=`${Y}-tip-error`,pe=(J.success?J.cents:null)??0,me=G-pe,he=!e.widget.fields.shipping||I.shippingMatchesBilling||P;p(()=>{q&&U.current?.focus()},[q]),p(()=>{let e=G>0;e&&!te.current&&(j(!1),N(!1)),te.current=e},[G]);function ge(e){W.commands.fieldChanged(),T(t=>{let n={...t};return delete n[e],n})}function _e(e){W.commands.fieldChanged(e.promoCode!==I.promoCode),L(e),D({}),k(void 0)}async function ve(t){t.preventDefault();let n=ce({email:h,phone:qe(_,x)},e.widget.fields.phone),i=r(e.widget.customFields,I.customFields);if(!(n.value&&J.success)||Object.keys(i).length>0){T(n.errors),D(i),k(J.success?void 0:J.message),W.commands.reportValidationFailure();let e=t.currentTarget;queueMicrotask(()=>{rt({customFieldErrors:i,emailRef:z,form:e,parsedTipSuccess:J.success,phoneRef:H,validationErrors:n.errors})});return}T({}),D({}),await W.commands.submit({addresses:R.current,phone:qe(_,x)})}return se?B(`p`,{className:`lockerverse-payment__payment-status`,ref:U,role:`status`,tabIndex:-1,children:se}):K?B(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):V(`form`,{"aria-busy":q,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:ve,children:[B(`div`,{"data-lockerverse-input-region":``,inert:q?!0:void 0,children:V(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:q,children:[B(et,{displayedBaseCents:me,displayedTipCents:pe,displayedTotalCents:G,quote:d}),B(re,{enabled:e.widget.fields.tipping,error:O,errorId:fe,onChange:_e,values:I}),B(it,{email:h,emailDiscountPercentOff:d.appliedDiscount?.source===`email_list`?d.appliedDiscount.percentageOff:void 0,emailErrorId:le,emailId:X,emailRef:z,errors:ee,onEmailBlur:()=>W.commands.refreshAuthoritativeTotal(),onEmailChange:e=>{g(e),ge(`email`)},onPhoneChange:e=>{b(e),ge(`phone`)},onPhoneCountryChange:e=>{S(e),W.commands.fieldChanged()},phone:_,phoneCountry:x,phoneEnabled:e.widget.fields.phone,phoneErrorId:de,phoneId:ue,phoneRef:H}),B($e,{catalog:e,displayedTotalCents:G,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isShippingAddressReady:P,onAddressChange:(e,t)=>{R.current[e]=t},onFieldValuesChange:_e,onStripeLoadError:W.commands.reportStripeLoadError,setIsBillingAddressReady:N,setIsPaymentReady:j,setIsShippingAddressReady:F}),B(ae,{customFields:e.widget.customFields,errors:E,fields:e.widget.fields,idPrefix:Y,isPromoApplying:ne,onApplyPromo:W.commands.applyPromo,onChange:_e,promoError:oe,values:I}),B(tt,{catalog:e,displayedTotalCents:G,fieldValues:I,isBillingAddressReady:M,isPaymentReady:A,isRequiredShippingReady:he,isSubmitting:q,onFieldValuesChange:_e,quote:d})]})}),q?B(`p`,{className:`lockerverse-payment__sr-only`,ref:U,role:`status`,tabIndex:-1,children:G===0?`Completing order…`:`Processing payment…`}):null,B(Qe,{message:ie})]})}function ot(){return V(`div`,{className:`lockerverse-payment__skeleton-loader-block`,children:[B(`span`,{className:`lockerverse-payment__skeleton-loader-label`}),V(`div`,{className:`lockerverse-payment__skeleton-loader-content`,children:[B(`span`,{className:`lockerverse-payment__skeleton-loader-full`}),V(`div`,{className:`lockerverse-payment__skeleton-loader-grid`,children:[B(`span`,{className:`lockerverse-payment__skeleton-loader-half`}),B(`span`,{className:`lockerverse-payment__skeleton-loader-half`})]})]})]})}function st(){return V(`div`,{className:`lockerverse-payment__loading`,children:[B(`span`,{"aria-live":`polite`,className:`lockerverse-payment__sr-only`,role:`status`,children:`Loading payment…`}),V(`div`,{"aria-hidden":`true`,className:`lockerverse-payment__skeleton`,children:[V(`div`,{className:`lockerverse-payment__skeleton-branding`,children:[B(`span`,{className:`lockerverse-payment__skeleton-avatar`}),B(`span`,{className:`lockerverse-payment__skeleton-community`})]}),V(`div`,{className:`lockerverse-payment__skeleton-contact`,children:[V(`div`,{className:`lockerverse-payment__skeleton-field`,children:[B(`span`,{className:`lockerverse-payment__skeleton-label`}),B(`span`,{className:`lockerverse-payment__skeleton-input`})]}),V(`div`,{className:`lockerverse-payment__skeleton-field`,children:[B(`span`,{className:`lockerverse-payment__skeleton-label`}),B(`span`,{className:`lockerverse-payment__skeleton-input`})]})]}),B(ot,{}),B(ot,{}),V(`div`,{className:`lockerverse-payment__skeleton-actions`,children:[B(`span`,{className:`lockerverse-payment__skeleton-check-line`}),B(`span`,{className:`lockerverse-payment__skeleton-button`})]})]})]})}function ct({apiBaseUrl:e,branding:t,className:n,communitySlug:r,environment:i,fetch:a,metadata:o,onError:c,onPaymentComplete:l,onPaymentRecoveryChange:u,onPaymentUncertain:f,requestTimeoutMs:m,resumePayment:g,selection:_,sentryDsn:b,style:x,stripeLoader:S=ee,theme:C=`dark`,widgetSlug:w,...T}){let E=v(g).current,D=v(null),[O,k]=y(),[A,j]=y(`idle`),M=v(void 0),{retryCheckout:N,selectionError:P,session:F,updateCheckout:I}=_e({apiBaseUrl:e,communitySlug:r,environment:i,fetch:a,onError:c,paymentState:A,requestTimeoutMs:m,selection:_,sentryDsn:b,widgetSlug:w}),L=F.phase===`ready`?F.revision:void 0,R=d(e=>{L!==void 0&&(M.current=L),j(e)},[L]);p(()=>{F.phase===`loading`&&k(void 0)},[F.phase]),h(()=>{F.phase===`ready`&&M.current!==F.revision&&j(e=>e===`success`||e===`unresolved`?e:`idle`)},[F.phase,F.revision]);let z=[`lockerverse-payment`,n].filter(Boolean).join(` `),H=t??(F.phase===`ready`?F.catalog.community:null),U=x?.[`--lockerverse-accent`]??H?.accentColor??`#38d77a`,W=s(U),G={...x,...H?.accentColor&&x?.[`--lockerverse-accent`]===void 0?{"--lockerverse-accent":H.accentColor}:{},...W&&x?.[`--lockerverse-accent-contrast`]===void 0?{"--lockerverse-accent-contrast":W}:{}};if(P)return B(`section`,{...T,className:z,"data-lockerverse-theme":C,role:`alert`,style:G,children:P});if(F.phase===`error`)return V(`section`,{...T,className:z,"data-lockerverse-theme":C,style:G,children:[B(`p`,{role:`alert`,children:F.failure}),B(`button`,{onClick:N,type:`button`,children:`Retry`})]});if(F.phase!==`ready`)return B(`section`,{...T,"aria-busy":`true`,"aria-label":`Payment`,className:z,"data-lockerverse-theme":C,style:G,children:B(st,{})});let{catalog:K,checkoutItems:ne,client:q,preparedCheckout:J}=F;return V(`section`,{...T,"aria-label":`Payment`,className:z,"data-lockerverse-theme":C,"data-payment-state":A,ref:D,style:G,children:[V(`header`,{children:[K.widget.showCommunityBranding&&H?V(`div`,{className:`lockerverse-payment__branding`,children:[H.imageUrl?B(`img`,{alt:H.name,height:`48`,src:H.imageUrl,width:`48`}):null,B(`strong`,{children:H.name})]}):null,B(`h1`,{children:K.widget.title??K.widget.name}),K.widget.description?B(`p`,{children:K.widget.description}):null]}),O?B(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:O}):null,B(te,{container:D,children:B(Je,{accentColor:x?.[`--lockerverse-accent`]??H?.accentColor??`#38d77a`,catalog:K,checkoutItems:ne,client:q,fontFamily:x?.[`--lockerverse-font-family`]??`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,metadata:o,onPaymentComplete:l,onPaymentRecoveryChange:u,onPaymentUncertain:f,onQuoteChange:(e,t)=>{k(t),I(e)},onStateChange:R,quote:J,resumePayment:E,stripeLoader:S,theme:C,visualStyle:G})})]})}export{ct as t};
|
|
2
2
|
//# sourceMappingURL=lockerverse-payment.js.map
|