@lockerverse/react 0.2.51 → 0.2.53
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 +40 -4
- package/dist/contact-validation.js +2 -0
- package/dist/contact-validation.js.map +1 -0
- package/dist/index.d.ts +2 -59
- package/dist/index.js +1 -2
- package/dist/lockerverse-payment.d.ts +59 -0
- package/dist/lockerverse-payment.d.ts.map +1 -0
- package/dist/lockerverse-payment.js +2 -0
- package/dist/lockerverse-payment.js.map +1 -0
- package/dist/payment.d.ts +2 -0
- package/dist/payment.js +1 -0
- package/dist/signup.css +349 -0
- package/dist/signup.d.ts +33 -0
- package/dist/signup.d.ts.map +1 -0
- package/dist/signup.js +2 -0
- package/dist/signup.js.map +1 -0
- package/package.json +50 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
# `@lockerverse/react`
|
|
2
2
|
|
|
3
|
-
React
|
|
3
|
+
Tree-shakable React UI for Lockerverse payment and signup widgets. The Core SDK is installed automatically as a normal package dependency.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
npm install @lockerverse/react
|
|
8
|
+
npm install @lockerverse/react react react-dom
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
For payment UI, also install the optional Stripe peers:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install @stripe/react-stripe-js @stripe/stripe-js
|
|
9
15
|
```
|
|
10
16
|
|
|
11
17
|
## Use
|
|
12
18
|
|
|
13
19
|
```tsx
|
|
14
|
-
import { LockerversePayment } from "@lockerverse/react";
|
|
15
|
-
import "@lockerverse/react/
|
|
20
|
+
import { LockerversePayment } from "@lockerverse/react/payment";
|
|
21
|
+
import "@lockerverse/react/payment.css";
|
|
16
22
|
|
|
17
23
|
export function Checkout() {
|
|
18
24
|
return (
|
|
@@ -33,6 +39,36 @@ export function Checkout() {
|
|
|
33
39
|
}
|
|
34
40
|
```
|
|
35
41
|
|
|
42
|
+
The original `@lockerverse/react` and `@lockerverse/react/styles.css` payment imports remain supported.
|
|
43
|
+
|
|
44
|
+
## Signup
|
|
45
|
+
|
|
46
|
+
The signup entry does not import payment or Stripe code.
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
import { LockerverseSignup } from "@lockerverse/react/signup";
|
|
50
|
+
import "@lockerverse/react/signup.css";
|
|
51
|
+
|
|
52
|
+
export function Signup() {
|
|
53
|
+
return (
|
|
54
|
+
<LockerverseSignup
|
|
55
|
+
branding={{
|
|
56
|
+
accentColor: "#5751f2",
|
|
57
|
+
imageUrl: "https://cdn.example.com/community.png",
|
|
58
|
+
name: "Auburn",
|
|
59
|
+
}}
|
|
60
|
+
communitySlug="auburn"
|
|
61
|
+
onSignupComplete={(submission) => {
|
|
62
|
+
console.info("Signup complete", submission.id);
|
|
63
|
+
}}
|
|
64
|
+
signupSlug="tailgate-guests"
|
|
65
|
+
/>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Pass `googlePlacesApiKey` to enable US address suggestions when the signup asks for an address. Manual address entry always remains available.
|
|
71
|
+
|
|
36
72
|
For a development HTTPS backend, provide `apiBaseUrl`. The backend supplies the
|
|
37
73
|
correct Stripe public key.
|
|
38
74
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{array as e,email as t,minLength as n,nonEmpty as r,pipe as i,regex as a,safeParse as o,string as s,transform as c,trim as l}from"valibot";import{jsx as u,jsxs as d}from"react/jsx-runtime";const f=/^#([\da-f]{3}|[\da-f]{6})$/i;function p(e){let t=f.exec(e.trim());if(!t)return;let[,n]=t;if(!n)return;let r=n.length===3?Array.from(n,e=>`${e}${e}`).join(``):n;return[0,2,4].map(e=>Number.parseInt(r.slice(e,e+2),16))}function m([e,t,n]){let[r=0,i=0,a=0]=[e,t,n].map((e=0)=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4});return .2126*r+.7152*i+.0722*a}function h(e){let t=p(e);if(!t)return;let n=m(t);return(n+.05)/.05>=1.05/(n+.05)?`#000`:`#fff`}function g(e){return Object.fromEntries(e.map(e=>[e.id,e.type===`checkboxes`||e.type===`multi_select`?[]:``]))}function _(e,t){return e.map(e=>{let n=t[e.id];return e.type===`checkboxes`||e.type===`multi_select`?{fieldId:e.id,value:Array.isArray(n)?n:[]}:{fieldId:e.id,value:typeof n==`string`?n:``}})}function v(t,a){let c={};for(let u of t){if(!u.required)continue;let t=`${u.label} is required.`,d=a[u.id],f=u.type===`checkboxes`||u.type===`multi_select`?o(i(e(s()),n(1,t)),d??[]):o(i(s(),l(),r(t)),typeof d==`string`?d:``);f.success||(c[u.id]=f.issues[0]?.message??t)}return c}function y({choiceClassName:e,errorClassName:t,errors:n,fields:r,idPrefix:i,onChange:a,values:o}){return r.map(r=>u(b,{choiceClassName:e,error:n[r.id],errorClassName:t,field:r,idPrefix:i,onChange:e=>a({...o,[r.id]:e}),value:o[r.id]},r.id))}function b(e){let{field:t,idPrefix:n}=e,r=`${n}-custom-${t.id}`,i=`${r}-error`,a={...e,controlId:r,errorId:i};switch(t.type){case`text`:case`textarea`:return u(S,{...a,field:t});case`select`:case`multi_select`:return u(C,{...a,field:t});case`radio`:case`checkboxes`:return u(w,{...a,field:t});default:return null}}function x({className:e,error:t,id:n}){return t?u(`span`,{className:e,id:n,role:`alert`,children:t}):null}function S({controlId:e,error:t,errorClassName:n,errorId:r,field:i,onChange:a,value:o}){let s={"aria-describedby":t?r:void 0,"aria-invalid":t?`true`:void 0,id:e,name:`custom:${i.id}`,onChange:e=>a(e.currentTarget.value),required:i.required,value:typeof o==`string`?o:``};return d(`label`,{htmlFor:e,children:[u(`span`,{children:i.label}),i.type===`textarea`?u(`textarea`,{...s}):u(`input`,{...s}),u(x,{className:n,error:t,id:r})]})}function C({controlId:e,error:t,errorClassName:n,errorId:r,field:i,onChange:a,value:o}){return d(`label`,{htmlFor:e,children:[u(`span`,{children:i.label}),d(`select`,{"aria-describedby":t?r:void 0,"aria-invalid":t?`true`:void 0,id:e,multiple:i.type===`multi_select`,name:`custom:${i.id}`,onChange:e=>a(i.type===`multi_select`?[...e.currentTarget.selectedOptions].map(e=>e.value):e.currentTarget.value),required:i.required,value:o??(i.type===`multi_select`?[]:``),children:[i.type===`select`?u(`option`,{value:``,children:`Select…`}):null,i.options.map(e=>u(`option`,{value:e.id,children:e.label},e.id))]}),u(x,{className:n,error:t,id:r})]})}function w({choiceClassName:e,controlId:t,error:n,errorClassName:r,errorId:i,field:a,onChange:o,value:s}){let c=Array.isArray(s)?s:[];return d(`fieldset`,{"aria-describedby":n?i:void 0,"aria-invalid":n?`true`:void 0,children:[u(`legend`,{children:a.label}),a.options.map((n,r)=>d(`label`,{className:e,children:[u(`input`,{checked:Array.isArray(s)?s.includes(n.id):s===n.id,id:`${t}-${r}`,name:`custom:${a.id}`,onChange:e=>{if(a.type===`radio`){o(n.id);return}o(e.currentTarget.checked?[...c,n.id]:c.filter(e=>e!==n.id))},required:a.required&&a.type===`radio`,type:a.type===`radio`?`radio`:`checkbox`,value:n.id}),u(`span`,{children:n.label})]},n.id)),u(x,{className:r,error:n,id:i})]})}const T=`Enter a valid email address.`,E=`Enter a valid phone number.`,D=/^(?:$|[^\s@]+@[^\s@]+\.[^\s@]+)$/,O=/^\+[1-9]\d{6,14}$/,k=/^(?:$|\+[1-9]\d{6,14})$/;function A(e){return e.trim().replace(/[().\s-]/g,``)}const j=i(s(),l(),a(D,T)),M=i(s(),l(),r(`Email is required.`),t(T)),N=i(s(),l(),c(A),a(k,E)),P=i(s(),l(),r(`Phone is required.`),c(A),a(O,E));export{P as a,g as c,M as i,v as l,j as n,y as o,N as r,_ as s,A as t,h as u};
|
|
2
|
+
//# sourceMappingURL=contact-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-validation.js","names":[],"sources":["../src/accent-contrast.ts","../src/custom-fields.tsx","../src/contact-validation.ts"],"sourcesContent":["const HEX_COLOR = /^#([\\da-f]{3}|[\\da-f]{6})$/i;\n\nfunction parseHexColor(color: string) {\n const match = HEX_COLOR.exec(color.trim());\n if (!match) {\n return;\n }\n const [, value] = match;\n if (!value) {\n return;\n }\n const expanded =\n value.length === 3\n ? Array.from(value, (character) => `${character}${character}`).join(\"\")\n : value;\n return [0, 2, 4].map((offset) =>\n Number.parseInt(expanded.slice(offset, offset + 2), 16)\n );\n}\n\nfunction relativeLuminance([red, green, blue]: number[]) {\n const [linearRed = 0, linearGreen = 0, linearBlue = 0] = [\n red,\n green,\n blue,\n ].map((channel = 0) => {\n const normalized = channel / 255;\n return normalized <= 0.040_45\n ? normalized / 12.92\n : ((normalized + 0.055) / 1.055) ** 2.4;\n });\n return 0.2126 * linearRed + 0.7152 * linearGreen + 0.0722 * linearBlue;\n}\n\nexport function getAccentContrast(color: string) {\n const parsed = parseHexColor(color);\n if (!parsed) {\n return;\n }\n const luminance = relativeLuminance(parsed);\n const blackContrast = (luminance + 0.05) / 0.05;\n const whiteContrast = 1.05 / (luminance + 0.05);\n return blackContrast >= whiteContrast ? \"#000\" : \"#fff\";\n}\n","import type {\n LockerverseCustomField,\n LockerverseCustomFieldAnswer,\n LockerverseMultiOptionCustomField,\n LockerverseSingleOptionCustomField,\n} from \"@lockerverse/sdk/checkout\";\nimport {\n array,\n minLength,\n nonEmpty,\n pipe,\n safeParse,\n string,\n trim,\n} from \"valibot\";\n\nexport type CustomFieldValues = Record<string, string | string[]>;\n\nexport function createCustomFieldValues(fields: LockerverseCustomField[]) {\n return Object.fromEntries(\n fields.map((field) => [\n field.id,\n field.type === \"checkboxes\" || field.type === \"multi_select\" ? [] : \"\",\n ])\n ) as CustomFieldValues;\n}\n\nexport function buildCustomFieldAnswers(\n fields: LockerverseCustomField[],\n values: CustomFieldValues\n): LockerverseCustomFieldAnswer[] {\n return fields.map((field): LockerverseCustomFieldAnswer => {\n const value = values[field.id];\n return field.type === \"checkboxes\" || field.type === \"multi_select\"\n ? { fieldId: field.id, value: Array.isArray(value) ? value : [] }\n : {\n fieldId: field.id,\n value: typeof value === \"string\" ? value : \"\",\n };\n });\n}\n\nexport function validateCustomFields(\n fields: LockerverseCustomField[],\n values: CustomFieldValues\n) {\n const errors: Record<string, string> = {};\n for (const field of fields) {\n if (!field.required) {\n continue;\n }\n const message = `${field.label} is required.`;\n const value = values[field.id];\n const result =\n field.type === \"checkboxes\" || field.type === \"multi_select\"\n ? safeParse(pipe(array(string()), minLength(1, message)), value ?? [])\n : safeParse(\n pipe(string(), trim(), nonEmpty(message)),\n typeof value === \"string\" ? value : \"\"\n );\n if (!result.success) {\n errors[field.id] = result.issues[0]?.message ?? message;\n }\n }\n return errors;\n}\n\nexport function CustomFields({\n choiceClassName,\n errorClassName,\n errors,\n fields,\n idPrefix,\n onChange,\n values,\n}: {\n choiceClassName: string;\n errorClassName: string;\n errors: Record<string, string>;\n fields: LockerverseCustomField[];\n idPrefix: string;\n onChange: (values: CustomFieldValues) => void;\n values: CustomFieldValues;\n}) {\n return fields.map((field) => (\n <CustomField\n choiceClassName={choiceClassName}\n error={errors[field.id]}\n errorClassName={errorClassName}\n field={field}\n idPrefix={idPrefix}\n key={field.id}\n onChange={(value) => onChange({ ...values, [field.id]: value })}\n value={values[field.id]}\n />\n ));\n}\n\ntype CustomFieldProps = {\n choiceClassName: string;\n error: string | undefined;\n errorClassName: string;\n field: LockerverseCustomField;\n idPrefix: string;\n onChange: (value: string | string[]) => void;\n value: string | string[] | undefined;\n};\n\nfunction CustomField(props: CustomFieldProps) {\n const { field, idPrefix } = props;\n const controlId = `${idPrefix}-custom-${field.id}`;\n const errorId = `${controlId}-error`;\n const controlProps = { ...props, controlId, errorId };\n switch (field.type) {\n case \"text\":\n case \"textarea\":\n return <TextCustomField {...controlProps} field={field} />;\n case \"select\":\n case \"multi_select\":\n return <SelectCustomField {...controlProps} field={field} />;\n case \"radio\":\n case \"checkboxes\":\n return <ChoiceCustomField {...controlProps} field={field} />;\n default:\n return null;\n }\n}\n\ntype ControlProps = CustomFieldProps & {\n controlId: string;\n errorId: string;\n};\n\nfunction FieldError({\n className,\n error,\n id,\n}: {\n className: string;\n error: string | undefined;\n id: string;\n}) {\n return error ? (\n <span className={className} id={id} role=\"alert\">\n {error}\n </span>\n ) : null;\n}\n\nfunction TextCustomField({\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & {\n field: Extract<LockerverseCustomField, { type: \"text\" | \"textarea\" }>;\n}) {\n const commonProps = {\n \"aria-describedby\": error ? errorId : undefined,\n \"aria-invalid\": error ? (\"true\" as const) : undefined,\n id: controlId,\n name: `custom:${field.id}`,\n onChange: (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => onChange(event.currentTarget.value),\n required: field.required,\n value: typeof value === \"string\" ? value : \"\",\n };\n return (\n <label htmlFor={controlId}>\n <span>{field.label}</span>\n {field.type === \"textarea\" ? (\n <textarea {...commonProps} />\n ) : (\n <input {...commonProps} />\n )}\n <FieldError className={errorClassName} error={error} id={errorId} />\n </label>\n );\n}\n\nfunction SelectCustomField({\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & {\n field: LockerverseMultiOptionCustomField | LockerverseSingleOptionCustomField;\n}) {\n return (\n <label htmlFor={controlId}>\n <span>{field.label}</span>\n <select\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? \"true\" : undefined}\n id={controlId}\n multiple={field.type === \"multi_select\"}\n name={`custom:${field.id}`}\n onChange={(event) =>\n onChange(\n field.type === \"multi_select\"\n ? [...event.currentTarget.selectedOptions].map(\n (option) => option.value\n )\n : event.currentTarget.value\n )\n }\n required={field.required}\n value={value ?? (field.type === \"multi_select\" ? [] : \"\")}\n >\n {field.type === \"select\" ? <option value=\"\">Select…</option> : null}\n {field.options.map((option) => (\n <option key={option.id} value={option.id}>\n {option.label}\n </option>\n ))}\n </select>\n <FieldError className={errorClassName} error={error} id={errorId} />\n </label>\n );\n}\n\nfunction ChoiceCustomField({\n choiceClassName,\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & {\n field: LockerverseMultiOptionCustomField | LockerverseSingleOptionCustomField;\n}) {\n const selectedValues = Array.isArray(value) ? value : [];\n return (\n <fieldset\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? \"true\" : undefined}\n >\n <legend>{field.label}</legend>\n {field.options.map((option, index) => (\n <label className={choiceClassName} key={option.id}>\n <input\n checked={\n Array.isArray(value)\n ? value.includes(option.id)\n : value === option.id\n }\n id={`${controlId}-${index}`}\n name={`custom:${field.id}`}\n onChange={(event) => {\n if (field.type === \"radio\") {\n onChange(option.id);\n return;\n }\n onChange(\n event.currentTarget.checked\n ? [...selectedValues, option.id]\n : selectedValues.filter((id) => id !== option.id)\n );\n }}\n required={field.required && field.type === \"radio\"}\n type={field.type === \"radio\" ? \"radio\" : \"checkbox\"}\n value={option.id}\n />\n <span>{option.label}</span>\n </label>\n ))}\n <FieldError className={errorClassName} error={error} id={errorId} />\n </fieldset>\n );\n}\n","import { email, nonEmpty, pipe, regex, string, transform, trim } from \"valibot\";\n\nexport const EMAIL_REQUIRED_MESSAGE = \"Email is required.\";\nexport const EMAIL_INVALID_MESSAGE = \"Enter a valid email address.\";\nexport const PHONE_REQUIRED_MESSAGE = \"Phone is required.\";\nexport const PHONE_INVALID_MESSAGE = \"Enter a valid phone number.\";\n\nconst OPTIONAL_EMAIL_PATTERN = /^(?:$|[^\\s@]+@[^\\s@]+\\.[^\\s@]+)$/;\nconst INTERNATIONAL_PHONE_PATTERN = /^\\+[1-9]\\d{6,14}$/;\nconst OPTIONAL_INTERNATIONAL_PHONE_PATTERN = /^(?:$|\\+[1-9]\\d{6,14})$/;\n\nexport function normalizePhone(input: string) {\n return input.trim().replace(/[().\\s-]/g, \"\");\n}\n\nexport const optionalEmailSchema = pipe(\n string(),\n trim(),\n regex(OPTIONAL_EMAIL_PATTERN, EMAIL_INVALID_MESSAGE)\n);\n\nexport const requiredEmailSchema = pipe(\n string(),\n trim(),\n nonEmpty(EMAIL_REQUIRED_MESSAGE),\n email(EMAIL_INVALID_MESSAGE)\n);\n\nexport const optionalPhoneSchema = pipe(\n string(),\n trim(),\n transform(normalizePhone),\n regex(OPTIONAL_INTERNATIONAL_PHONE_PATTERN, PHONE_INVALID_MESSAGE)\n);\n\nexport const requiredPhoneSchema = pipe(\n string(),\n trim(),\n nonEmpty(PHONE_REQUIRED_MESSAGE),\n transform(normalizePhone),\n regex(INTERNATIONAL_PHONE_PATTERN, PHONE_INVALID_MESSAGE)\n);\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,59 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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
|
|
55
|
-
//#region src/lockerverse-payment.d.ts
|
|
56
|
-
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
|
-
//#endregion
|
|
58
|
-
export { LockerversePayment, type LockerversePaymentBranding, type LockerversePaymentProps, type LockerversePaymentRecovery, type LockerversePaymentSelectionItem, type LockerversePaymentStyle, type LockerversePaymentTheme, type LockerversePaymentUncertain, type LockerverseStripeLoader };
|
|
59
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
import { a as LockerversePaymentSelectionItem, c as LockerversePaymentUncertain, i as LockerversePaymentRecovery, l as LockerverseStripeLoader, n as LockerversePaymentBranding, o as LockerversePaymentStyle, r as LockerversePaymentProps, s as LockerversePaymentTheme, t as LockerversePayment } from "./lockerverse-payment.js";
|
|
2
|
+
export { LockerversePayment, type LockerversePaymentBranding, type LockerversePaymentProps, type LockerversePaymentRecovery, type LockerversePaymentSelectionItem, type LockerversePaymentStyle, type LockerversePaymentTheme, type LockerversePaymentUncertain, type LockerverseStripeLoader };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{AddressElement as e,Elements as t,PaymentElement as n,useElements as r,useStripe as i}from"@stripe/react-stripe-js";import{loadStripe as a}from"@stripe/stripe-js";import{createContext as o,useContext as s,useEffect as c,useId as l,useMemo as u,useReducer as d,useRef as f,useState as p}from"react";import{Select as m}from"@base-ui/react/select";import{Fragment as h,jsx as g,jsxs as _}from"react/jsx-runtime";import{LockerverseSdkError as v,createLockerverseCheckoutClient as y}from"@lockerverse/sdk/checkout";import{array as b,email as x,minLength as S,minValue as C,nonEmpty as w,number as T,object as E,pipe as D,regex as O,safeInteger as ee,safeParse as k,strictObject as A,string as j,trim as M,union as N}from"valibot";const P=/^#([\da-f]{3}|[\da-f]{6})$/i;function F(e){let t=P.exec(e.trim());if(!t)return;let[,n]=t;if(!n)return;let r=n.length===3?Array.from(n,e=>`${e}${e}`).join(``):n;return[0,2,4].map(e=>Number.parseInt(r.slice(e,e+2),16))}function I([e,t,n]){let[r=0,i=0,a=0]=[e,t,n].map((e=0)=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4});return .2126*r+.7152*i+.0722*a}function te(e){let t=F(e);if(!t)return;let n=I(t);return(n+.05)/.05>=1.05/(n+.05)?`#000`:`#fff`}const L=o(void 0);function ne({children:e,container:t}){return g(L.Provider,{value:t,children:e})}function R(){return g(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:g(`path`,{d:`m4 6 4 4 4-4`})})}function z(){return g(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:g(`path`,{d:`m3 8 3 3 7-7`})})}function B({ariaDescribedBy:e,ariaLabel:t,ariaLabelledBy:n,className:r,id:i,invalid:a=!1,name:o,onValueChange:c,options:l,value:u}){let d=s(L),f=[`lockerverse-payment__select`,r].filter(Boolean).join(` `);return g(`div`,{className:f,children:_(m.Root,{id:i,items:l,name:o,onValueChange:e=>{e!==null&&c(e)},value:u,children:[_(m.Trigger,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:`lockerverse-payment__select-trigger`,children:[g(m.Value,{}),g(m.Icon,{"aria-hidden":`true`,className:`lockerverse-payment__select-icon`,children:g(R,{})})]}),g(m.Portal,{container:d,children:g(m.Positioner,{alignItemWithTrigger:!1,className:`lockerverse-payment__select-positioner`,sideOffset:6,children:g(m.Popup,{className:`lockerverse-payment__select-popup`,children:g(m.List,{className:`lockerverse-payment__select-list`,children:l.map(e=>_(m.Item,{className:`lockerverse-payment__select-item`,value:e.value,children:[g(m.ItemText,{children:e.label}),g(m.ItemIndicator,{"aria-hidden":`true`,className:`lockerverse-payment__select-item-indicator`,children:g(z,{})})]},e.value))})})})})]})})}const re=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],V=[`15`,`12`,`10`,`5`],H=[...V,`custom`];function ie({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=H.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%H.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+H.length)%H.length;break;case`Home`:r=0;break;case`End`:r=H.length-1;break;default:return}e.preventDefault();let i=H[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return _(`div`,{className:`lockerverse-payment__tip-box`,children:[g(`p`,{children:`Add a tip to support the Lockerverse platform`}),_(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[V.map(e=>_(`label`,{className:`lockerverse-payment__tip-choice`,children:[g(`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}),_(`span`,{children:[e,`%`]})]},e)),_(`label`,{className:`lockerverse-payment__tip-choice`,children:[g(`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`}),g(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?_(`label`,{children:[g(`span`,{children:`Custom tip`}),_(`span`,{className:`lockerverse-payment__money-input`,children:[g(`span`,{"aria-hidden":`true`,children:`$`}),g(`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?g(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):g(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ae({checked:e,children:t,name:n,onChange:r}){return _(`label`,{className:`lockerverse-payment__check-row`,children:[g(`input`,{checked:e,name:n,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),g(`span`,{children:t})]})}function oe({customFields:e,errors:t,fields:n,idPrefix:r,isPromoApplying:i,onChange:a,onApplyPromo:o,promoError:s,values:c}){let l=e=>a({...c,...e});return _(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?_(`label`,{children:[g(`span`,{children:`Member ID`}),g(`input`,{name:`memberId`,onChange:e=>l({memberId:e.currentTarget.value}),placeholder:`Optional`,value:c.memberId})]}):null,n.merchSize?_(`div`,{className:`lockerverse-payment__field`,children:[g(`span`,{id:`${r}-merch-size-label`,children:`Size`}),g(B,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>l({merchSize:e}),options:re.map(e=>({label:e,value:e})),value:c.merchSize})]}):null,n.promoCode?_(`div`,{className:`lockerverse-payment__field`,children:[g(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),_(`div`,{className:`lockerverse-payment__promo-control`,children:[g(`input`,{"aria-describedby":s?`${r}-promo-code-error`:void 0,"aria-invalid":s?`true`:void 0,"aria-labelledby":`${r}-promo-code-label`,name:`promoCode`,onChange:e=>l({promoCode:e.currentTarget.value}),placeholder:`Optional`,value:c.promoCode}),g(`button`,{disabled:!c.promoCode.trim()||i,onClick:o,type:`button`,children:i?`Applying…`:`Apply`})]}),s?g(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:s}):null]}):null,e.map(e=>g(U,{error:t[e.id],field:e,idPrefix:r,onChange:t=>l({customFields:{...c.customFields,[e.id]:t}}),value:c.customFields[e.id]},e.id))]})}function se({amountCents:e,enabled:t,onChange:n,values:r}){return t?_(ae,{checked:r.includeServiceFee,name:`includeServiceFee`,onChange:e=>n({...r,includeServiceFee:e}),children:[`Add `,de(e),` to help cover processing fees`]}):null}function U({error:e,field:t,idPrefix:n,onChange:r,value:i}){let a=`custom:${t.id}`,o=`${n}-custom-${t.id}`,s=`${o}-error`;switch(t.type){case`text`:case`textarea`:return g(W,{controlId:o,error:e,errorId:s,field:t,name:a,onChange:r,value:i});case`select`:case`multi_select`:return g(le,{controlId:o,error:e,errorId:s,field:t,name:a,onChange:r,value:i});case`radio`:case`checkboxes`:return g(ue,{controlId:o,error:e,errorId:s,field:t,name:a,onChange:r,value:i});default:return null}}function ce({error:e,id:t}){return e?g(`p`,{className:`lockerverse-payment__field-message`,id:t,children:e}):null}function W({controlId:e,error:t,errorId:n,field:r,name:i,onChange:a,value:o}){let s={"aria-describedby":t?n:void 0,"aria-invalid":t?`true`:void 0,id:e,name:i,onChange:e=>a(e.currentTarget.value),required:r.required,value:typeof o==`string`?o:``};return _(`label`,{htmlFor:e,children:[g(`span`,{children:r.label}),r.type===`textarea`?g(`textarea`,{...s}):g(`input`,{...s}),g(ce,{error:t,id:n})]})}function le({controlId:e,error:t,errorId:n,field:r,name:i,onChange:a,value:o}){return _(`label`,{htmlFor:e,children:[g(`span`,{children:r.label}),_(`select`,{"aria-describedby":t?n:void 0,"aria-invalid":t?`true`:void 0,id:e,multiple:r.type===`multi_select`,name:i,onChange:e=>a(r.type===`multi_select`?[...e.currentTarget.selectedOptions].map(e=>e.value):e.currentTarget.value),required:r.required,value:o??(r.type===`multi_select`?[]:``),children:[r.type===`select`?g(`option`,{value:``,children:`Select…`}):null,r.options.map(e=>g(`option`,{value:e.id,children:e.label},e.id))]}),g(ce,{error:t,id:n})]})}function ue({controlId:e,error:t,errorId:n,field:r,name:i,onChange:a,value:o}){return _(`fieldset`,{"aria-describedby":t?n:void 0,"aria-invalid":t?`true`:void 0,children:[g(`legend`,{children:r.label}),r.options.map((t,n)=>{let s=Array.isArray(o)?o.includes(t.id):o===t.id;return _(`label`,{className:`lockerverse-payment__check-row`,children:[g(`input`,{checked:s,id:`${e}-${n}`,name:i,onChange:e=>{if(r.type===`radio`){a(t.id);return}let n=Array.isArray(o)?o:[];a(e.currentTarget.checked?[...n,t.id]:n.filter(e=>e!==t.id))},required:r.required,type:r.type===`radio`?`radio`:`checkbox`,value:t.id}),g(`span`,{children:t.label})]},t.id)}),g(ce,{error:t,id:n})]})}function de(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}const fe=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],G=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function pe(e,t,n){return(n===t.totalCents?G:fe).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 K(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 me(e,t,n){if(t.checkoutStatus!==`action_required`)return K(t);if(t.clientSecret)try{await n.handleNextAction({clientSecret:t.clientSecret})}catch{}try{return K(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function q(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 me(e,r,n)}async function he(e,t,n){try{return me(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}const J=D(j(),M(),w()),Y=D(T(),ee(),C(1)),ge=D(b(N([A({amountCents:Y,productSlug:J}),A({productSlug:J,quantity:Y})])),S(1)),_e=D(j(),M(),O(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function ve(e){let t=k(_e,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 ye(e){let t=k(ge,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}const be=D(j(),M(),w(`Email is required.`),x(`Enter a valid email address.`)),X=D(j(),M(),w(`Phone is required.`),O(/^\+[1-9]\d{6,14}$/,`Enter a valid phone number.`));function Z(e){return e.trim().replace(/[().\s-]/g,``)}function xe(e,t){let n=t?{...e,phone:Z(e.phone)}:e,r=E(t?{email:be,phone:X}:{email:be}),i=k(r,n);if(i.success)return{errors:{},value:i.output};let a={};for(let e of i.issues){let t=e.path?.[0]?.key;(t===`email`||t===`phone`)&&!a[t]&&(a[t]=e.message)}return{errors:a,value:null}}function Se(e,t){let n={};for(let r of e){if(!r.required)continue;let e=`${r.label} is required.`,i=t[r.id],a=r.type===`checkboxes`||r.type===`multi_select`?k(D(b(j()),S(1,e)),i??[]):k(D(j(),M(),w(e)),typeof i==`string`?i:``);a.success||(n[r.id]=a.issues[0]?.message??e)}return n}function Ce(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 we(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 Te(e,t,n){return e?.configuration===t&&e.selectionKey===n}function Ee({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,onError:i,paymentState:a,requestTimeoutMs:o,selection:s,sentryDsn:l,widgetSlug:p}){let m=u(()=>({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,requestTimeoutMs:o,sentryDsn:l,widgetSlug:p}),[e,t,n,r,o,l,p]),h=ye(s),g=h.success?JSON.stringify(h.value):`invalid-selection`,_=u(()=>h.success?JSON.parse(g):[],[h.success,g]),[v,b]=d(Ce,{phase:`idle`,revision:0}),x=f(void 0),S=f(void 0),C=f(i);return C.current=i,c(()=>{if(!h.success||a===`submitting`||a===`success`||a===`unresolved`||Te(S.current,m,g)||Te(x.current,m,g))return;let e=!0,t={configuration:m,selectionKey:g};x.current=t,b({configuration:m,selectionKey:g,type:`loading`});async function n(){try{let n=y(we(m,e=>C.current?.(e))),{catalog:r,checkout:i}=await n.bootstrapCheckout({items:_}),a=[...i.items];e&&(x.current=void 0,S.current=t,b({catalog:r,checkoutItems:a,client:n,configuration:m,preparedCheckout:i,selectionKey:g,type:`ready`}))}catch(n){e&&(x.current=void 0,S.current=t,b({configuration:m,failure:n instanceof Error?n.message:`Lockerverse payment could not load.`,selectionKey:g,type:`error`}))}}return n(),()=>{e=!1,Te(x.current,m,g)&&(x.current=void 0)}},[m,h.success,a,g,v.revision,_]),{retryCheckout:()=>{x.current=void 0,S.current=void 0,b({type:`retry`})},selectionError:h.success?void 0:h.message,session:v,updateCheckout:e=>b({preparedCheckout:e,type:`checkout`})}}function Q(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function De(e,t){return t.tipPercent===`custom`?t.customTip.trim()?ve(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}const Oe=[{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:`${Oe.find(e=>e.value===t)?.callingCode??`+1`}${e}`}function Ae(e,t){return e.map(e=>{let n=t[e.id];return e.type===`checkboxes`||e.type===`multi_select`?{fieldId:e.id,value:Array.isArray(n)?n:[]}:{fieldId:e.id,value:typeof n==`string`?n:``}})}function je(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 Me(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Ne(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Me(r.shipping,`Shipping`)}function Pe({billingAddress:e,catalog:t,email:n,phone:r,shippingAddress:i}){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 Fe({catalog:e,confirmationToken:t,email:n,fieldValues:r,metadata:i,phone:a,shippingAddress:o}){return{...t?{confirmationToken:t}:{},customFieldAnswers:Ae(e.widget.customFields,r.customFields),email:n,...i?{metadata:i}:{},...e.widget.fields.memberId&&r.memberId.trim()?{memberId:r.memberId.trim()}:{},...e.widget.fields.merchSize?{merchSize:r.merchSize}:{},...e.widget.fields.phone?{phone:a}:{},...o?{shipping:{address:{city:o.address.city??``,country:o.address.country,line1:o.address.line1??``,...o.address.line2?{line2:o.address.line2}:{},postal_code:o.address.postal_code??``,state:o.address.state??``},name:o.name}}:{}}}async function Ie({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,locallyPreviewedTotalCents:s,metadata:c,onPaymentRecoveryChange:l,phone:u,quote:d,stripe:f}){let p=a.trim().toLowerCase(),m=Z(u),h=De(d.subtotalCents,o);if(!h.success)throw Error(h.message);let g=je(t,o,p,h.cents),_=await r.calculateTotal({...g,items:n});if(_.totalCents>0&&pe(d,_,s))return{kind:`quote_changed`,quote:_};if(_.totalCents===0){let n;t.widget.fields.shipping&&(n=Ne(t,o,Me(e.billing,`Billing`),e)),$(l,{connectedAccountId:_.payment.connectedAccountId,paymentReference:_.paymentReference});let i=await q(r,{checkout:_,submission:Fe({catalog:t,email:p,fieldValues:o,metadata:c,phone:m,...n?{shippingAddress:n}:{}})},f);return 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:_}}await i.update({amount:_.totalCents});let v=await i.submit();if(v.error)throw Error(v.error.message);let y=Me(e.billing,`Billing`),b=Ne(t,o,y,e),x=await f.createConfirmationToken({elements:i,params:Pe({billingAddress:y,catalog:t,email:p,phone:m,shippingAddress:b})});if(x.error)throw Error(x.error.message);$(l,{connectedAccountId:_.payment.connectedAccountId,paymentReference:_.paymentReference});let S=await q(r,{checkout:_,submission:Fe({catalog:t,confirmationToken:x.confirmationToken.id,email:p,fieldValues:o,metadata:c,phone:m,...b?{shippingAddress:b}:{}})},f);return S.kind===`failed`?{kind:`payment_failed`,message:`Payment was declined. Check your payment details and try again.`}:S.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:S.paymentReference,reason:S.reason}:{kind:`payment`,payment:S.payment,quote:_}}function Le({accentColor:e,catalog:n,checkoutItems:r,client:i,fontFamily:a,metadata:o,onPaymentComplete:s,onPaymentRecoveryChange:c,onPaymentUncertain:l,onQuoteChange:d,quote:f,resumePayment:p,onStateChange:m,stripeLoader:h,theme:_,visualStyle:v}){let y=p?p.connectedAccountId:f.payment.connectedAccountId,b=u(()=>h(n.payment.publishableKey,y?{stripeAccount:y}:void 0),[n.payment.publishableKey,y,h]);return g(t,{options:{amount:Math.max(f.totalCents,100),appearance:{rules:{".Input:focus":{borderColor:e,boxShadow:`0 0 0 1px ${e}`,outline:`none`}},theme:_===`light`?`stripe`:`night`,variables:{borderRadius:v?.[`--lockerverse-radius`]??`10px`,colorBackground:v?.[`--lockerverse-control`]??(_===`light`?`#f5f6f7`:`#121212`),colorDanger:v?.[`--lockerverse-danger`]??(_===`light`?`#c52b3e`:`#f08a98`),colorPrimary:e,colorText:v?.[`--lockerverse-text`]??(_===`light`?`#121416`:`#ffffff`),colorTextPlaceholder:v?.[`--lockerverse-placeholder`]??(_===`light`?`#72767d`:`#6b6b6b`),colorTextSecondary:v?.[`--lockerverse-muted`]??(_===`light`?`#62666d`:`#a1a1aa`),focusBoxShadow:`none`,focusOutline:`none`,fontFamily:a,fontSizeBase:`16px`}},currency:f.payment.currency,excludedPaymentMethodTypes:[`us_bank_account`],mode:`payment`,syncAddressCheckbox:`none`},stripe:b,children:g(Je,{catalog:n,checkoutItems:r,client:i,metadata:o,onPaymentComplete:s,onPaymentRecoveryChange:c,onPaymentUncertain:l,onQuoteChange:d,onStateChange:m,quote:f,resumePayment:p})},`${n.payment.publishableKey}:${y??`platform`}`)}function Re({label:e}){return _(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[g(`p`,{children:e}),_(`div`,{"aria-hidden":`true`,children:[g(`span`,{}),g(`span`,{}),g(`span`,{})]})]})}function ze({onError:e,onReady:t,ready:r}){return _(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":r,children:[r?null:g(Re,{label:`Loading payment form...`}),g(`div`,{className:`lockerverse-payment__stripe-mount`,children:g(n,{onLoadError:({error:t})=>e(t.message??`Payment form failed to load.`),onReady:t,options:{business:{name:`Lockerverse`},fields:{billingDetails:{address:`never`,email:`never`,name:`never`,phone:`never`}},layout:`tabs`,terms:{applePay:`auto`,auBecsDebit:`never`,bancontact:`never`,card:`always`,cashapp:`never`,googlePay:`never`,ideal:`never`,paypal:`auto`,sepaDebit:`never`,sofort:`never`,usBankAccount:`never`},wallets:{applePay:`auto`,googlePay:`never`}}})})]})}function Be({label:t,mode:n,onChange:r,onError:i,onReady:a,ready:o}){return _(`div`,{className:`lockerverse-payment__address`,children:[g(`h2`,{children:t}),_(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":o,children:[o?null:g(Re,{label:`Loading ${t.toLowerCase()}...`}),g(`div`,{className:`lockerverse-payment__stripe-mount`,children:g(e,{onChange:r,onLoadError:({error:e})=>i(e.message??`${t} failed to load.`),onReady:a,options:{autocomplete:{mode:`automatic`},mode:n}})})]})]})}function Ve({message:e}){return e?g(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function He({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 _(h,{children:[f?g(ze,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?g(Be,{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?_(`div`,{className:`lockerverse-payment__shipping`,children:[g(ae,{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:g(Be,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function Ue({displayedBaseCents:e,displayedTipCents:t,displayedTotalCents:n,quote:r}){let i=Math.max(0,e-r.subtotalCents+r.discountCents);return _(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[g(`h2`,{children:`Order summary`}),g(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.lineItems.map(e=>_(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[_(`span`,{children:[e.productName,e.quantity>1?_(h,{children:[` `,_(`small`,{children:[`× `,e.quantity]})]}):null]}),g(`strong`,{children:Q(e.subtotalCents)})]},e.listingId))}),_(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[i>0?_(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[g(`span`,{children:`Service fee`}),g(`strong`,{children:Q(i)})]}):null,r.discountCents>0&&r.appliedDiscount?_(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[_(`span`,{children:[r.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,r.appliedDiscount.percentageOff,`% off)`]}),_(`strong`,{children:[`-`,Q(r.discountCents)]})]}):null,t>0?_(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[g(`span`,{children:`Tip`}),g(`strong`,{children:Q(t)})]}):null,_(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[g(`span`,{children:`Total`}),g(`strong`,{children:Q(n)})]})]})]})}function We({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 ${Q(t)}`;return o&&(d=l?`Completing…`:`Processing…`),_(`div`,{className:`lockerverse-payment__actions`,children:[g(se,{amountCents:c.serviceFeeCents||Math.round(c.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:e.widget.fields.serviceFee,onChange:s,values:n}),g(`button`,{"aria-busy":o,"aria-label":l?`Complete order`:`Process payment for ${Q(t)} total`,disabled:o||!u,type:`submit`,children:d})]})}function $(e,t){try{e?.(t)}catch{}}function Ge({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&&n.querySelector(`[name="custom:${o}"]`)?.focus()}function Ke({onPaymentComplete:e,onPaymentRecoveryChange:t,onPaymentUncertain:n,onQuoteChange:r,onStateChange:i,result:a,setDisplayedTotalCents:o,setPaymentError:s,setTerminalState:c}){if(a.kind===`quote_changed`){let e=`The total changed to ${Q(a.quote.totalCents)}. Review it and pay again.`;r(a.quote,e),o(a.quote.totalCents),i(`idle`);return}if(a.kind===`payment_failed`){$(t,null),s(a.message),i(`error`);return}if(a.kind===`payment_unresolved`){c({kind:`unresolved`,message:`Payment is still processing. Do not submit it again.`}),i(`unresolved`);try{n?.({paymentReference:a.paymentReference,reason:a.reason})}catch{}return}r(a.quote),$(t,null),c({kind:`success`,message:a.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`}),i(`success`);try{e?.(a.payment)}catch{}}function qe({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:v}){return _(`div`,{className:`lockerverse-payment__contact`,children:[g(`label`,{htmlFor:r,children:`Email`}),g(`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?g(`p`,{className:`lockerverse-payment__field-message`,id:n,children:a.email}):null,t===void 0?null:_(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),f?_(h,{children:[g(`label`,{htmlFor:m,children:`Phone`}),_(`div`,{className:`lockerverse-payment__phone-control`,children:[g(B,{ariaLabel:`Phone number country`,className:`lockerverse-payment__select--phone-country`,name:`phoneCountry`,onValueChange:l,options:Oe,value:d}),g(`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:v,type:`tel`,value:u})]}),a.phone?g(`p`,{className:`lockerverse-payment__field-message`,id:p,children:a.phone}):null]}):null]})}function Je({catalog:e,checkoutItems:t,client:n,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:u,onQuoteChange:d,onStateChange:m,quote:h,resumePayment:v}){let[y,b]=p(``),[x,S]=p(``),[C,w]=p(`US`),[T,E]=p({}),[D,O]=p(),[ee,k]=p({}),[A,j]=p(),[M,N]=p(),[P,F]=p(!1),[I,te]=p(!1),[L,ne]=p(!!v),[R,z]=p(),[B,re]=p(!1),[V,H]=p(!1),[ae,se]=p(!1),[U,ce]=p({customFields:{},customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),[W,le]=p(h.totalCents),ue=f({billing:null,shipping:null}),de=f(null),fe=f(null),G=f(null),pe=f(!1),K=f(0),me=f(h.totalCents>0),q=r(),J=i(),Y=`lockerverse-${l()}`,ge=`${Y}-email`,_e=`${ge}-error`,ve=`${Y}-phone`,ye=`${ve}-error`,be=`${Y}-tip-error`,X=e.widget.fields.tipping?De(h.subtotalCents,U):{cents:0,success:!0},Z=X.success?X.cents:null,Ce=Z??0,we=W-Ce,Te=!e.widget.fields.shipping||U.shippingMatchesBilling||ae;c(()=>{if(Z===null)return;let t=e.widget.fields.serviceFee&&U.includeServiceFee?h.serviceFeeCents||Math.round(h.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4):0,n=h.totalCents-h.serviceFeeCents-h.tipCents+t+Z;le(n),n>0&&q?.update({amount:n})},[e.widget.fields.serviceFee,e.widget.fields.tipping,q,U.includeServiceFee,U.tipPercent,U.customTip,Z,h.serviceFeeCents,h.tipCents,h.totalCents]),c(()=>{P&&G.current?.focus()},[P]),c(()=>{let e=W>0;e&&!me.current&&(re(!1),H(!1)),me.current=e},[W]),c(()=>{!(v&&J)||pe.current||(pe.current=!0,m(`submitting`),he(n,v.paymentReference,J).then(e=>{if(e.kind===`failed`){$(s,null),O(`The previous payment failed. Check your details and try again.`),ne(!1),m(`error`);return}if(e.kind===`unresolved`){z({kind:`unresolved`,message:`Payment is still processing. Do not submit it again.`}),m(`unresolved`);try{u?.({paymentReference:e.paymentReference,reason:e.reason})}catch{}return}$(s,null),z({kind:`success`,message:e.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`}),m(`success`);try{o?.(e.payment)}catch{}}))},[n,o,s,u,m,v,J]);function Ee(e){E(t=>{let n={...t};return delete n[e],n})}function Q(e){e.promoCode!==U.promoCode&&N(void 0),ce(e),k({}),j(void 0)}function Oe(e){O(e),m(`error`)}function Ae(e){N(e.appliedDiscount?.source===`promo_code`?void 0:`This promo code is invalid or cannot be applied.`)}function Me(e,t){if(t){N(`This promo code is invalid or cannot be applied.`);return}O(e instanceof Error?e.message:`The order total could not be updated.`)}async function Ne(r=!1,i=!1){let a=xe({email:y.trim().toLowerCase(),phone:``},!1);if(!(X.success&&(a.value||r)))return;K.current+=1;let o=K.current;te(!0);try{let r=await n.calculateTotal({...je(e,U,a.value?.email??``,X.cents),items:t});if(o!==K.current)return;O(void 0),le(r.totalCents),d(r),i&&Ae(r)}catch(e){o===K.current&&Me(e,i)}finally{o===K.current&&te(!1)}}async function Pe(){N(void 0),await Ne(!0,!0)}async function Fe(r){r.preventDefault();let i=xe({email:y,phone:ke(x,C)},e.widget.fields.phone),c=Se(e.widget.customFields,U.customFields);if(!(i.value&&X.success)||Object.keys(c).length>0){E(i.errors),k(c),j(X.success?void 0:X.message),m(`invalid`);let e=r.currentTarget;queueMicrotask(()=>{Ge({customFieldErrors:c,emailRef:de,form:e,parsedTipSuccess:X.success,phoneRef:fe,validationErrors:i.errors})});return}if(E({}),k({}),!(q&&J)){O(`Payment form is still loading.`),m(`error`);return}O(void 0),F(!0),m(`submitting`);try{Ke({onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:u,onQuoteChange:d,onStateChange:m,result:await Ie({addresses:ue.current,catalog:e,checkoutItems:t,client:n,elements:q,email:y,fieldValues:U,locallyPreviewedTotalCents:W,metadata:a,onPaymentRecoveryChange:s,phone:ke(x,C),quote:h,stripe:J}),setDisplayedTotalCents:le,setPaymentError:O,setTerminalState:z})}catch(e){$(s,null),O(e instanceof Error?e.message:`Payment could not be completed.`),m(`error`)}finally{F(!1)}}return R?g(`p`,{className:`lockerverse-payment__payment-status`,ref:G,role:`status`,tabIndex:-1,children:R.message}):L?g(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):_(`form`,{"aria-busy":P,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:Fe,children:[g(`div`,{"data-lockerverse-input-region":``,inert:P?!0:void 0,children:_(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:P,children:[g(Ue,{displayedBaseCents:we,displayedTipCents:Ce,displayedTotalCents:W,quote:h}),g(ie,{enabled:e.widget.fields.tipping,error:A,errorId:be,onChange:Q,values:U}),g(qe,{email:y,emailDiscountPercentOff:h.appliedDiscount?.source===`email_list`?h.appliedDiscount.percentageOff:void 0,emailErrorId:_e,emailId:ge,emailRef:de,errors:T,onEmailBlur:()=>Ne(),onEmailChange:e=>{b(e),Ee(`email`)},onPhoneChange:e=>{S(e),Ee(`phone`)},onPhoneCountryChange:w,phone:x,phoneCountry:C,phoneEnabled:e.widget.fields.phone,phoneErrorId:ye,phoneId:ve,phoneRef:fe}),g(He,{catalog:e,displayedTotalCents:W,fieldValues:U,isBillingAddressReady:V,isPaymentReady:B,isShippingAddressReady:ae,onAddressChange:(e,t)=>{ue.current[e]=t},onFieldValuesChange:Q,onStripeLoadError:Oe,setIsBillingAddressReady:H,setIsPaymentReady:re,setIsShippingAddressReady:se}),g(oe,{customFields:e.widget.customFields,errors:ee,fields:e.widget.fields,idPrefix:Y,isPromoApplying:I,onApplyPromo:Pe,onChange:Q,promoError:M,values:U}),g(We,{catalog:e,displayedTotalCents:W,fieldValues:U,isBillingAddressReady:V,isPaymentReady:B,isRequiredShippingReady:Te,isSubmitting:P,onFieldValuesChange:Q,quote:h})]})}),P?g(`p`,{className:`lockerverse-payment__sr-only`,ref:G,role:`status`,tabIndex:-1,children:W===0?`Completing order…`:`Processing payment…`}):null,g(Ve,{message:D})]})}function Ye(){return _(`div`,{className:`lockerverse-payment__skeleton-loader-block`,children:[g(`span`,{className:`lockerverse-payment__skeleton-loader-label`}),_(`div`,{className:`lockerverse-payment__skeleton-loader-content`,children:[g(`span`,{className:`lockerverse-payment__skeleton-loader-full`}),_(`div`,{className:`lockerverse-payment__skeleton-loader-grid`,children:[g(`span`,{className:`lockerverse-payment__skeleton-loader-half`}),g(`span`,{className:`lockerverse-payment__skeleton-loader-half`})]})]})]})}function Xe(){return _(`div`,{className:`lockerverse-payment__loading`,children:[g(`span`,{"aria-live":`polite`,className:`lockerverse-payment__sr-only`,role:`status`,children:`Loading payment…`}),_(`div`,{"aria-hidden":`true`,className:`lockerverse-payment__skeleton`,children:[_(`div`,{className:`lockerverse-payment__skeleton-branding`,children:[g(`span`,{className:`lockerverse-payment__skeleton-avatar`}),g(`span`,{className:`lockerverse-payment__skeleton-community`})]}),_(`div`,{className:`lockerverse-payment__skeleton-contact`,children:[_(`div`,{className:`lockerverse-payment__skeleton-field`,children:[g(`span`,{className:`lockerverse-payment__skeleton-label`}),g(`span`,{className:`lockerverse-payment__skeleton-input`})]}),_(`div`,{className:`lockerverse-payment__skeleton-field`,children:[g(`span`,{className:`lockerverse-payment__skeleton-label`}),g(`span`,{className:`lockerverse-payment__skeleton-input`})]})]}),g(Ye,{}),g(Ye,{}),_(`div`,{className:`lockerverse-payment__skeleton-actions`,children:[g(`span`,{className:`lockerverse-payment__skeleton-check-line`}),g(`span`,{className:`lockerverse-payment__skeleton-button`})]})]})]})}function Ze({apiBaseUrl:e,branding:t,className:n,communitySlug:r,environment:i,fetch:o,metadata:s,onError:l,onPaymentComplete:u,onPaymentRecoveryChange:d,onPaymentUncertain:m,requestTimeoutMs:h,resumePayment:v,selection:y,sentryDsn:b,style:x,stripeLoader:S=a,theme:C=`dark`,widgetSlug:w,...T}){let E=f(v).current,D=f(null),[O,ee]=p(),[k,A]=p(`idle`),{retryCheckout:j,selectionError:M,session:N,updateCheckout:P}=Ee({apiBaseUrl:e,communitySlug:r,environment:i,fetch:o,onError:l,paymentState:k,requestTimeoutMs:h,selection:y,sentryDsn:b,widgetSlug:w});c(()=>{N.phase===`loading`&&ee(void 0)},[N.phase]),c(()=>{N.phase===`ready`&&A(e=>e===`success`||e===`unresolved`?e:`idle`)},[N.phase,N.revision]);let F=[`lockerverse-payment`,n].filter(Boolean).join(` `),I=t??(N.phase===`ready`?N.catalog.community:null),L=te(x?.[`--lockerverse-accent`]??I?.accentColor??`#38d77a`),R={...x,...I?.accentColor&&x?.[`--lockerverse-accent`]===void 0?{"--lockerverse-accent":I.accentColor}:{},...L&&x?.[`--lockerverse-accent-contrast`]===void 0?{"--lockerverse-accent-contrast":L}:{}};if(M)return g(`section`,{...T,className:F,"data-lockerverse-theme":C,role:`alert`,style:R,children:M});if(N.phase===`error`)return _(`section`,{...T,className:F,"data-lockerverse-theme":C,style:R,children:[g(`p`,{role:`alert`,children:N.failure}),g(`button`,{onClick:j,type:`button`,children:`Retry`})]});if(N.phase!==`ready`)return g(`section`,{...T,"aria-busy":`true`,"aria-label":`Payment`,className:F,"data-lockerverse-theme":C,style:R,children:g(Xe,{})});let{catalog:z,checkoutItems:B,client:re,preparedCheckout:V}=N;return _(`section`,{...T,"aria-label":`Payment`,className:F,"data-lockerverse-theme":C,"data-payment-state":k,ref:D,style:R,children:[_(`header`,{children:[z.widget.showCommunityBranding&&I?_(`div`,{className:`lockerverse-payment__branding`,children:[I.imageUrl?g(`img`,{alt:I.name,height:`48`,src:I.imageUrl,width:`48`}):null,g(`strong`,{children:I.name})]}):null,g(`h1`,{children:z.widget.title??z.widget.name}),z.widget.description?g(`p`,{children:z.widget.description}):null]}),O?g(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:O}):null,g(ne,{container:D,children:g(Le,{accentColor:x?.[`--lockerverse-accent`]??I?.accentColor??`#38d77a`,catalog:z,checkoutItems:B,client:re,fontFamily:x?.[`--lockerverse-font-family`]??`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,metadata:s,onPaymentComplete:u,onPaymentRecoveryChange:d,onPaymentUncertain:m,onQuoteChange:(e,t)=>{ee(t),P(e)},onStateChange:A,quote:V,resumePayment:E,stripeLoader:S,theme:C,visualStyle:R})})]})}export{Ze as LockerversePayment};
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import{t as e}from"./lockerverse-payment.js";export{e as LockerversePayment};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { loadStripe } from "@stripe/stripe-js";
|
|
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
|
|
55
|
+
//#region src/lockerverse-payment.d.ts
|
|
56
|
+
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
|
+
//#endregion
|
|
58
|
+
export { LockerversePaymentSelectionItem as a, LockerversePaymentUncertain as c, LockerversePaymentRecovery as i, LockerverseStripeLoader as l, LockerversePaymentBranding as n, LockerversePaymentStyle as o, LockerversePaymentProps as r, LockerversePaymentTheme as s, LockerversePayment as t };
|
|
59
|
+
//# sourceMappingURL=lockerverse-payment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockerverse-payment.d.ts","names":[],"sources":["../src/types.ts","../src/lockerverse-payment.tsx"],"mappings":";;;;KAOY;EACN;EAAqB;;EACrB;EAAqB;;KAEf;KAEA;EACV;EACA;EACA;;KAGU,0BAA0B;EACpC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;;KAGU,8BACP,MAAM,kBAAkB,gBACxB,kBAAkB;KAEX,0BAA0B,iCACpC,KAAK;EACH,WAAW;EACX,WAAW;EACX,qBAAqB,SAAS;EAC9B,2BACE,UAAU;EAEZ,sBAAsB,SAAS;EAC/B,gBAAgB;EAChB,WAAW;EACX,eAAe;EACf,QAAQ;EACR,QAAQ;;;;iBCkkDI,qBACd,YACA,UACA,WACA,eACA,aACA,OACA,UACA,SACA,mBACA,yBACA,oBACA,kBACA,eACA,WACA,WACA,OACA,cACA,OACA,eACG,gBACF,0CAAuB,IAAA"}
|
|
@@ -0,0 +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,useContext as h,useEffect as g,useId as _,useMemo as v,useReducer as y,useRef as b,useState as x}from"react";import{array as S,minLength as C,minValue as w,nonEmpty as ee,number as T,object as te,pipe as E,regex as ne,safeInteger as D,safeParse as O,strictObject as k,string as A,trim as j,union as M}from"valibot";import{Fragment as N,jsx as P,jsxs as F}from"react/jsx-runtime";import{Select as I}from"@base-ui/react/select";import{LockerverseSdkError as L,createLockerverseCheckoutClient as R}from"@lockerverse/sdk/checkout";const z=m(void 0);function re({children:e,container:t}){return P(z.Provider,{value:t,children:e})}function B(){return P(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:P(`path`,{d:`m4 6 4 4 4-4`})})}function ie(){return P(`svg`,{"aria-hidden":`true`,fill:`none`,viewBox:`0 0 16 16`,children:P(`path`,{d:`m3 8 3 3 7-7`})})}function V({ariaDescribedBy:e,ariaLabel:t,ariaLabelledBy:n,className:r,id:i,invalid:a=!1,name:o,onValueChange:s,options:c,value:l}){let u=h(z),d=[`lockerverse-payment__select`,r].filter(Boolean).join(` `);return P(`div`,{className:d,children:F(I.Root,{id:i,items:c,name:o,onValueChange:e=>{e!==null&&s(e)},value:l,children:[F(I.Trigger,{"aria-describedby":e,"aria-invalid":a||void 0,"aria-label":t,"aria-labelledby":n,className:`lockerverse-payment__select-trigger`,children:[P(I.Value,{}),P(I.Icon,{"aria-hidden":`true`,className:`lockerverse-payment__select-icon`,children:P(B,{})})]}),P(I.Portal,{container:u,children:P(I.Positioner,{alignItemWithTrigger:!1,className:`lockerverse-payment__select-positioner`,sideOffset:6,children:P(I.Popup,{className:`lockerverse-payment__select-popup`,children:P(I.List,{className:`lockerverse-payment__select-list`,children:c.map(e=>F(I.Item,{className:`lockerverse-payment__select-item`,value:e.value,children:[P(I.ItemText,{children:e.label}),P(I.ItemIndicator,{"aria-hidden":`true`,className:`lockerverse-payment__select-item-indicator`,children:P(ie,{})})]},e.value))})})})})]})})}const ae=[`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`],oe=[`15`,`12`,`10`,`5`],H=[...oe,`custom`];function se({enabled:e,error:t,errorId:n,onChange:r,values:i}){if(!e)return null;let a=e=>r({...i,...e}),o=(e,t)=>{let n=H.indexOf(t),r;switch(e.key){case`ArrowDown`:case`ArrowRight`:r=(n+1)%H.length;break;case`ArrowLeft`:case`ArrowUp`:r=(n-1+H.length)%H.length;break;case`Home`:r=0;break;case`End`:r=H.length-1;break;default:return}e.preventDefault();let i=H[r];i&&((e.currentTarget.closest(`[role="radiogroup"]`)?.querySelectorAll(`input[type="radio"]`))?.[r]?.focus(),a({tipPercent:i}))};return F(`div`,{className:`lockerverse-payment__tip-box`,children:[P(`p`,{children:`Add a tip to support the Lockerverse platform`}),F(`div`,{"aria-label":`Tip amount`,role:`radiogroup`,children:[oe.map(e=>F(`label`,{className:`lockerverse-payment__tip-choice`,children:[P(`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}),F(`span`,{children:[e,`%`]})]},e)),F(`label`,{className:`lockerverse-payment__tip-choice`,children:[P(`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`}),P(`span`,{children:`Other`})]})]}),i.tipPercent===`custom`?F(`label`,{children:[P(`span`,{children:`Custom tip`}),F(`span`,{className:`lockerverse-payment__money-input`,children:[P(`span`,{"aria-hidden":`true`,children:`$`}),P(`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?P(`span`,{className:`lockerverse-payment__field-message`,id:n,children:t}):null]}):P(`input`,{name:`tip`,type:`hidden`,value:i.tipPercent})]})}function ce({checked:e,children:t,name:n,onChange:r}){return F(`label`,{className:`lockerverse-payment__check-row`,children:[P(`input`,{checked:e,name:n,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),P(`span`,{children:t})]})}function le({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 F(`div`,{className:`lockerverse-payment__additional-fields`,children:[n.memberId?F(`label`,{children:[P(`span`,{children:`Member ID`}),P(`input`,{name:`memberId`,onChange:e=>u({memberId:e.currentTarget.value}),placeholder:`Optional`,value:l.memberId})]}):null,n.merchSize?F(`div`,{className:`lockerverse-payment__field`,children:[P(`span`,{id:`${r}-merch-size-label`,children:`Size`}),P(V,{ariaLabelledBy:`${r}-merch-size-label`,name:`merchSize`,onValueChange:e=>u({merchSize:e}),options:ae.map(e=>({label:e,value:e})),value:l.merchSize})]}):null,n.promoCode?F(`div`,{className:`lockerverse-payment__field`,children:[P(`span`,{id:`${r}-promo-code-label`,children:`Promo code`}),F(`div`,{className:`lockerverse-payment__promo-control`,children:[P(`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}),P(`button`,{disabled:!l.promoCode.trim()||a,onClick:s,type:`button`,children:a?`Applying…`:`Apply`})]}),c?P(`p`,{className:`lockerverse-payment__field-message`,id:`${r}-promo-code-error`,role:`alert`,children:c}):null]}):null,P(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 U({amountCents:e,enabled:t,onChange:n,values:r}){return t?F(ce,{checked:r.includeServiceFee,name:`includeServiceFee`,onChange:e=>n({...r,includeServiceFee:e}),children:[`Add `,ue(e),` to help cover processing fees`]}):null}function ue(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}const W=[`amountCents`,`discountableSubtotalCents`,`discountCents`,`serviceFeeCents`,`subtotalCents`,`tipCents`,`totalCents`],de=[`discountableSubtotalCents`,`discountCents`,`subtotalCents`];function fe(e,t,n){return(n===t.totalCents?de:W).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 pe(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 me(e,t,n){if(t.checkoutStatus!==`action_required`)return pe(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 pe(await e.getPaymentStatus(t.paymentReference))}catch{return{kind:`unresolved`,paymentReference:t.paymentReference,reason:`action_required`}}}async function G(e,t,n){let r;try{r=await e.submitPayment(t)}catch(n){if(!(n instanceof L&&n.recoveryRecommended))throw n;try{r=await e.getPaymentStatus(t.checkout.paymentReference)}catch{return{kind:`unresolved`,paymentReference:t.checkout.paymentReference,reason:`recovery_failed`}}}return me(e,r,n)}async function he(e,t,n){try{return me(e,await e.getPaymentStatus(t),n)}catch{return{kind:`unresolved`,paymentReference:t,reason:`recovery_failed`}}}const ge=E(A(),j(),ee()),K=E(T(),D(),w(1)),_e=E(S(M([k({amountCents:K,productSlug:ge}),k({productSlug:ge,quantity:K})])),C(1)),ve=E(A(),j(),ne(/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/,`Enter a valid tip amount.`));function q(e){let t=O(ve,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 J(e){let t=O(_e,e);return t.success?{success:!0,value:t.output}:{message:`Lockerverse payment configuration is invalid.`,success:!1}}function ye(e){return o(e)}function be(t,r){let i=r?{...t,phone:ye(t.phone)}:t,a=te(r?{email:n,phone:e}:{email:n}),o=O(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}}function xe(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 Se(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 Ce(e,t,n){return e?.configuration===t&&e.selectionKey===n}function we({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,onError:i,paymentState:a,requestTimeoutMs:o,selection:s,sentryDsn:c,widgetSlug:l}){let u=v(()=>({apiBaseUrl:e,communitySlug:t,environment:n,fetch:r,requestTimeoutMs:o,sentryDsn:c,widgetSlug:l}),[e,t,n,r,o,c,l]),d=J(s),f=d.success?JSON.stringify(d.value):`invalid-selection`,p=v(()=>d.success?JSON.parse(f):[],[d.success,f]),[m,h]=y(xe,{phase:`idle`,revision:0}),_=b(void 0),x=b(void 0),S=b(i);return S.current=i,g(()=>{if(!d.success||a===`submitting`||a===`success`||a===`unresolved`||Ce(x.current,u,f)||Ce(_.current,u,f))return;let e=!0,t={configuration:u,selectionKey:f};_.current=t,h({configuration:u,selectionKey:f,type:`loading`});async function n(){try{let n=R(Se(u,e=>S.current?.(e))),{catalog:r,checkout:i}=await n.bootstrapCheckout({items:p}),a=[...i.items];e&&(_.current=void 0,x.current=t,h({catalog:r,checkoutItems:a,client:n,configuration:u,preparedCheckout:i,selectionKey:f,type:`ready`}))}catch(n){e&&(_.current=void 0,x.current=t,h({configuration:u,failure:n instanceof Error?n.message:`Lockerverse payment could not load.`,selectionKey:f,type:`error`}))}}return n(),()=>{e=!1,Ce(_.current,u,f)&&(_.current=void 0)}},[u,d.success,a,f,m.revision,p]),{retryCheckout:()=>{_.current=void 0,x.current=void 0,h({type:`retry`})},selectionError:d.success?void 0:d.message,session:m,updateCheckout:e=>h({preparedCheckout:e,type:`checkout`})}}function Y(e){return new Intl.NumberFormat(`en-US`,{currency:`USD`,style:`currency`}).format(e/100)}function Te(e,t){return t.tipPercent===`custom`?t.customTip.trim()?q(t.customTip):{cents:0,success:!0}:{cents:Math.round(e*Number(t.tipPercent)/100),success:!0}}const X=[{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 Ee(e,t){return e.trim().startsWith(`+`)?e:`${X.find(e=>e.value===t)?.callingCode??`+1`}${e}`}function De(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 Z(e,t){if(!e?.complete)throw Error(`${t} address is required.`);return e.value}function Oe(e,t,n,r){if(e.widget.fields.shipping)return t.shippingMatchesBilling?n:Z(r.shipping,`Shipping`)}function ke({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 Ae({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}}:{}}}async function je({addresses:e,catalog:t,checkoutItems:n,client:r,elements:i,email:a,fieldValues:o,locallyPreviewedTotalCents:s,metadata:c,onPaymentRecoveryChange:l,phone:u,quote:d,stripe:f}){let p=a.trim().toLowerCase(),m=ye(u),h=Te(d.subtotalCents,o);if(!h.success)throw Error(h.message);let g=De(t,o,p,h.cents),_=await r.calculateTotal({...g,items:n});if(_.totalCents>0&&fe(d,_,s))return{kind:`quote_changed`,quote:_};if(_.totalCents===0){let n;t.widget.fields.shipping&&(n=Oe(t,o,Z(e.billing,`Billing`),e)),$(l,{connectedAccountId:_.payment.connectedAccountId,paymentReference:_.paymentReference});let i=await G(r,{checkout:_,submission:Ae({catalog:t,email:p,fieldValues:o,metadata:c,phone:m,...n?{shippingAddress:n}:{}})},f);return 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:_}}if(!(i&&f))throw Error(`Payment form is still loading.`);await i.update({amount:_.totalCents});let v=await i.submit();if(v.error)throw Error(v.error.message);let y=Z(e.billing,`Billing`),b=Oe(t,o,y,e),x=await f.createConfirmationToken({elements:i,params:ke({billingAddress:y,catalog:t,email:p,phone:m,shippingAddress:b})});if(x.error)throw Error(x.error.message);$(l,{connectedAccountId:_.payment.connectedAccountId,paymentReference:_.paymentReference});let S=await G(r,{checkout:_,submission:Ae({catalog:t,confirmationToken:x.confirmationToken.id,email:p,fieldValues:o,metadata:c,phone:m,...b?{shippingAddress:b}:{}})},f);return S.kind===`failed`?{kind:`payment_failed`,message:`Payment was declined. Check your payment details and try again.`}:S.kind===`unresolved`?{kind:`payment_unresolved`,paymentReference:S.paymentReference,reason:S.reason}:{kind:`payment`,payment:S.payment,quote:_}}function Q({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,y=v(()=>m(t.payment.publishableKey,_?{stripeAccount:_}:void 0).catch(()=>null),[t.payment.publishableKey,_,m]);return P(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:y,children:P(Ue,{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 Me({label:e}){return F(`div`,{className:`lockerverse-payment__stripe-loader`,role:`status`,children:[P(`p`,{children:e}),F(`div`,{"aria-hidden":`true`,children:[P(`span`,{}),P(`span`,{}),P(`span`,{})]})]})}function Ne({onError:e,onReady:t,ready:n}){return F(`div`,{className:`lockerverse-payment__stripe-element`,"data-ready":n,children:[n?null:P(Me,{label:`Loading payment form...`}),P(`div`,{className:`lockerverse-payment__stripe-mount`,children:P(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 Pe({label:e,mode:t,onChange:n,onError:r,onReady:i,ready:a}){return F(`div`,{className:`lockerverse-payment__address`,children:[P(`h2`,{children:e}),F(`div`,{className:`lockerverse-payment__stripe-element lockerverse-payment__stripe-element--address`,"data-ready":a,children:[a?null:P(Me,{label:`Loading ${e.toLowerCase()}...`}),P(`div`,{className:`lockerverse-payment__stripe-mount`,children:P(c,{onChange:n,onLoadError:({error:t})=>r(t.message??`${e} failed to load.`),onReady:i,options:{autocomplete:{mode:`automatic`},mode:t}})})]})]})}function Fe({message:e}){return e?P(`p`,{className:`lockerverse-payment__field-message`,role:`alert`,children:e}):null}function Ie({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 F(N,{children:[f?P(Ne,{onError:c,onReady:()=>u(!0),ready:i}):null,f||e.widget.fields.shipping?P(Pe,{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?F(`div`,{className:`lockerverse-payment__shipping`,children:[P(ce,{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:P(Pe,{label:`Shipping address`,mode:`shipping`,onChange:e=>o(`shipping`,e),onError:c,onReady:()=>d(!0),ready:a})]}):null]})}function Le({displayedBaseCents:e,displayedTipCents:t,displayedTotalCents:n,quote:r}){let i=Math.max(0,e-r.subtotalCents+r.discountCents);return F(`section`,{"aria-label":`Payment summary`,className:`lockerverse-payment__payment-summary`,children:[P(`h2`,{children:`Order summary`}),P(`div`,{className:`lockerverse-payment__payment-summary-items`,children:r.lineItems.map(e=>F(`div`,{className:`lockerverse-payment__payment-summary-row`,children:[F(`span`,{children:[e.productName,e.quantity>1?F(N,{children:[` `,F(`small`,{children:[`× `,e.quantity]})]}):null]}),P(`strong`,{children:Y(e.subtotalCents)})]},e.listingId))}),F(`div`,{className:`lockerverse-payment__payment-summary-totals`,children:[i>0?F(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail`,children:[P(`span`,{children:`Service fee`}),P(`strong`,{children:Y(i)})]}):null,r.discountCents>0&&r.appliedDiscount?F(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-discount`,children:[F(`span`,{children:[r.appliedDiscount.source===`email_list`?`Email discount`:`Promo code discount`,` `,`(`,r.appliedDiscount.percentageOff,`% off)`]}),F(`strong`,{children:[`-`,Y(r.discountCents)]})]}):null,t>0?F(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-detail lockerverse-payment__payment-summary-tip`,children:[P(`span`,{children:`Tip`}),P(`strong`,{children:Y(t)})]}):null,F(`div`,{className:`lockerverse-payment__payment-summary-row lockerverse-payment__payment-summary-total`,children:[P(`span`,{children:`Total`}),P(`strong`,{children:Y(n)})]})]})]})}function Re({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 ${Y(t)}`;return o&&(d=l?`Completing…`:`Processing…`),F(`div`,{className:`lockerverse-payment__actions`,children:[P(U,{amountCents:c.serviceFeeCents||Math.round(c.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4),enabled:e.widget.fields.serviceFee,onChange:s,values:n}),P(`button`,{"aria-busy":o,"aria-label":l?`Complete order`:`Process payment for ${Y(t)} total`,disabled:o||!u,type:`submit`,children:d})]})}function $(e,t){try{e?.(t)}catch{}}function ze(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 Be({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&&ze(n,`custom:${o}`)}function Ve({onPaymentComplete:e,onPaymentRecoveryChange:t,onPaymentUncertain:n,onQuoteChange:r,onStateChange:i,result:a,setDisplayedTotalCents:o,setPaymentError:s,setTerminalState:c}){if(a.kind===`quote_changed`){let e=`The total changed to ${Y(a.quote.totalCents)}. Review it and pay again.`;r(a.quote,e),o(a.quote.totalCents),i(`idle`);return}if(a.kind===`payment_failed`){$(t,null),s(a.message),i(`error`);return}if(a.kind===`payment_unresolved`){c({kind:`unresolved`,message:`Payment is still processing. Do not submit it again.`}),i(`unresolved`);try{n?.({paymentReference:a.paymentReference,reason:a.reason})}catch{}return}r(a.quote),$(t,null),c({kind:`success`,message:a.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`}),i(`success`);try{e?.(a.payment)}catch{}}function He({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 F(`div`,{className:`lockerverse-payment__contact`,children:[P(`label`,{htmlFor:r,children:`Email`}),P(`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?P(`p`,{className:`lockerverse-payment__field-message`,id:n,children:a.email}):null,t===void 0?null:F(`p`,{className:`lockerverse-payment__discount-message`,role:`status`,children:[`Your email qualifies for `,t,`% off.`]}),f?F(N,{children:[P(`label`,{htmlFor:m,children:`Phone`}),F(`div`,{className:`lockerverse-payment__phone-control`,children:[P(V,{ariaLabel:`Phone number country`,className:`lockerverse-payment__select--phone-country`,name:`phoneCountry`,onValueChange:l,options:X,value:d}),P(`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?P(`p`,{className:`lockerverse-payment__field-message`,id:p,children:a.phone}):null]}):null]})}function Ue({catalog:e,checkoutItems:n,client:i,metadata:a,onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,quote:p,resumePayment:m}){let[h,v]=x(``),[y,S]=x(``),[C,w]=x(`US`),[ee,T]=x({}),[te,E]=x(),[ne,D]=x({}),[O,k]=x(),[A,j]=x(),[M,N]=x(!1),[I,L]=x(!1),[R,z]=x(!!m),[re,B]=x(),[ie,V]=x(!1),[ae,oe]=x(!1),[H,ce]=x(!1),[U,ue]=x({customFields:t(e.widget.customFields),customTip:``,includeServiceFee:e.widget.fields.serviceFee,memberId:``,merchSize:`M`,promoCode:``,shippingMatchesBilling:!0,tipPercent:`10`}),[W,de]=x(p.totalCents),fe=b({billing:null,shipping:null}),pe=b(null),me=b(null),G=b(null),ge=b(!1),K=b(0),_e=b(p.totalCents>0),ve=d(),q=f(),J=`lockerverse-${_()}`,ye=`${J}-email`,xe=`${ye}-error`,Se=`${J}-phone`,Ce=`${Se}-error`,we=`${J}-tip-error`,Y=e.widget.fields.tipping?Te(p.subtotalCents,U):{cents:0,success:!0},X=Y.success?Y.cents:null,Z=X??0,Oe=W-Z,ke=!e.widget.fields.shipping||U.shippingMatchesBilling||H;g(()=>{if(X===null)return;let t=e.widget.fields.serviceFee&&U.includeServiceFee?p.serviceFeeCents||Math.round(p.subtotalCents*e.pricingPolicy.serviceFeeRateBasisPoints/1e4):0,n=p.totalCents-p.serviceFeeCents-p.tipCents+t+X;de(n),n>0&&ve?.update({amount:n})},[e.widget.fields.serviceFee,e.widget.fields.tipping,ve,U.includeServiceFee,U.tipPercent,U.customTip,X,p.serviceFeeCents,p.tipCents,p.totalCents]),g(()=>{M&&G.current?.focus()},[M]),g(()=>{let e=W>0;e&&!_e.current&&(V(!1),oe(!1)),_e.current=e},[W]),g(()=>{!(m&&q)||ge.current||(ge.current=!0,u(`submitting`),he(i,m.paymentReference,q).then(e=>{if(e.kind===`failed`){$(s,null),E(`The previous payment failed. Check your details and try again.`),z(!1),u(`error`);return}if(e.kind===`unresolved`){B({kind:`unresolved`,message:`Payment is still processing. Do not submit it again.`}),u(`unresolved`);try{c?.({paymentReference:e.paymentReference,reason:e.reason})}catch{}return}$(s,null),B({kind:`success`,message:e.payment.paymentRequired?`Payment completed successfully.`:`Order confirmed. No payment was required.`}),u(`success`);try{o?.(e.payment)}catch{}}))},[i,o,s,c,u,m,q]);function Ae(e){T(t=>{let n={...t};return delete n[e],n})}function Q(e){e.promoCode!==U.promoCode&&j(void 0),ue(e),D({}),k(void 0)}function Me(e){E(e),u(`error`)}function Ne(e){j(e.appliedDiscount?.source===`promo_code`?void 0:`This promo code is invalid or cannot be applied.`)}function Pe(e,t){if(t){j(`This promo code is invalid or cannot be applied.`);return}E(e instanceof Error?e.message:`The order total could not be updated.`)}async function ze(t=!1,r=!1){let a=be({email:h.trim().toLowerCase(),phone:``},!1);if(!(Y.success&&(a.value||t)))return;K.current+=1;let o=K.current;L(!0);try{let t=await i.calculateTotal({...De(e,U,a.value?.email??``,Y.cents),items:n});if(o!==K.current)return;E(void 0),de(t.totalCents),l(t),r&&Ne(t)}catch(e){o===K.current&&Pe(e,r)}finally{o===K.current&&L(!1)}}async function Ue(){j(void 0),await ze(!0,!0)}async function We(t){t.preventDefault();let d=be({email:h,phone:Ee(y,C)},e.widget.fields.phone),f=r(e.widget.customFields,U.customFields);if(!(d.value&&Y.success)||Object.keys(f).length>0){T(d.errors),D(f),k(Y.success?void 0:Y.message),u(`invalid`);let e=t.currentTarget;queueMicrotask(()=>{Be({customFieldErrors:f,emailRef:pe,form:e,parsedTipSuccess:Y.success,phoneRef:me,validationErrors:d.errors})});return}T({}),D({}),E(void 0),N(!0),u(`submitting`);try{Ve({onPaymentComplete:o,onPaymentRecoveryChange:s,onPaymentUncertain:c,onQuoteChange:l,onStateChange:u,result:await je({addresses:fe.current,catalog:e,checkoutItems:n,client:i,elements:ve,email:h,fieldValues:U,locallyPreviewedTotalCents:W,metadata:a,onPaymentRecoveryChange:s,phone:Ee(y,C),quote:p,stripe:q}),setDisplayedTotalCents:de,setPaymentError:E,setTerminalState:B})}catch(e){$(s,null),E(e instanceof Error?e.message:`Payment could not be completed.`),u(`error`)}finally{N(!1)}}return re?P(`p`,{className:`lockerverse-payment__payment-status`,ref:G,role:`status`,tabIndex:-1,children:re.message}):R?P(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:`Recovering payment…`}):F(`form`,{"aria-busy":M,className:`lockerverse-payment__form`,noValidate:!0,onSubmit:We,children:[P(`div`,{"data-lockerverse-input-region":``,inert:M?!0:void 0,children:F(`fieldset`,{className:`lockerverse-payment__input-fieldset`,disabled:M,children:[P(Le,{displayedBaseCents:Oe,displayedTipCents:Z,displayedTotalCents:W,quote:p}),P(se,{enabled:e.widget.fields.tipping,error:O,errorId:we,onChange:Q,values:U}),P(He,{email:h,emailDiscountPercentOff:p.appliedDiscount?.source===`email_list`?p.appliedDiscount.percentageOff:void 0,emailErrorId:xe,emailId:ye,emailRef:pe,errors:ee,onEmailBlur:()=>ze(),onEmailChange:e=>{v(e),Ae(`email`)},onPhoneChange:e=>{S(e),Ae(`phone`)},onPhoneCountryChange:w,phone:y,phoneCountry:C,phoneEnabled:e.widget.fields.phone,phoneErrorId:Ce,phoneId:Se,phoneRef:me}),P(Ie,{catalog:e,displayedTotalCents:W,fieldValues:U,isBillingAddressReady:ae,isPaymentReady:ie,isShippingAddressReady:H,onAddressChange:(e,t)=>{fe.current[e]=t},onFieldValuesChange:Q,onStripeLoadError:Me,setIsBillingAddressReady:oe,setIsPaymentReady:V,setIsShippingAddressReady:ce}),P(le,{customFields:e.widget.customFields,errors:ne,fields:e.widget.fields,idPrefix:J,isPromoApplying:I,onApplyPromo:Ue,onChange:Q,promoError:A,values:U}),P(Re,{catalog:e,displayedTotalCents:W,fieldValues:U,isBillingAddressReady:ae,isPaymentReady:ie,isRequiredShippingReady:ke,isSubmitting:M,onFieldValuesChange:Q,quote:p})]})}),M?P(`p`,{className:`lockerverse-payment__sr-only`,ref:G,role:`status`,tabIndex:-1,children:W===0?`Completing order…`:`Processing payment…`}):null,P(Fe,{message:te})]})}function We(){return F(`div`,{className:`lockerverse-payment__skeleton-loader-block`,children:[P(`span`,{className:`lockerverse-payment__skeleton-loader-label`}),F(`div`,{className:`lockerverse-payment__skeleton-loader-content`,children:[P(`span`,{className:`lockerverse-payment__skeleton-loader-full`}),F(`div`,{className:`lockerverse-payment__skeleton-loader-grid`,children:[P(`span`,{className:`lockerverse-payment__skeleton-loader-half`}),P(`span`,{className:`lockerverse-payment__skeleton-loader-half`})]})]})]})}function Ge(){return F(`div`,{className:`lockerverse-payment__loading`,children:[P(`span`,{"aria-live":`polite`,className:`lockerverse-payment__sr-only`,role:`status`,children:`Loading payment…`}),F(`div`,{"aria-hidden":`true`,className:`lockerverse-payment__skeleton`,children:[F(`div`,{className:`lockerverse-payment__skeleton-branding`,children:[P(`span`,{className:`lockerverse-payment__skeleton-avatar`}),P(`span`,{className:`lockerverse-payment__skeleton-community`})]}),F(`div`,{className:`lockerverse-payment__skeleton-contact`,children:[F(`div`,{className:`lockerverse-payment__skeleton-field`,children:[P(`span`,{className:`lockerverse-payment__skeleton-label`}),P(`span`,{className:`lockerverse-payment__skeleton-input`})]}),F(`div`,{className:`lockerverse-payment__skeleton-field`,children:[P(`span`,{className:`lockerverse-payment__skeleton-label`}),P(`span`,{className:`lockerverse-payment__skeleton-input`})]})]}),P(We,{}),P(We,{}),F(`div`,{className:`lockerverse-payment__skeleton-actions`,children:[P(`span`,{className:`lockerverse-payment__skeleton-check-line`}),P(`span`,{className:`lockerverse-payment__skeleton-button`})]})]})]})}function Ke({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:h,sentryDsn:_,style:v,stripeLoader:y=p,theme:S=`dark`,widgetSlug:C,...w}){let ee=b(m).current,T=b(null),[te,E]=x(),[ne,D]=x(`idle`),{retryCheckout:O,selectionError:k,session:A,updateCheckout:j}=we({apiBaseUrl:e,communitySlug:r,environment:i,fetch:a,onError:c,paymentState:ne,requestTimeoutMs:f,selection:h,sentryDsn:_,widgetSlug:C});g(()=>{A.phase===`loading`&&E(void 0)},[A.phase]),g(()=>{A.phase===`ready`&&D(e=>e===`success`||e===`unresolved`?e:`idle`)},[A.phase,A.revision]);let M=[`lockerverse-payment`,n].filter(Boolean).join(` `),N=t??(A.phase===`ready`?A.catalog.community:null),I=v?.[`--lockerverse-accent`]??N?.accentColor??`#38d77a`,L=s(I),R={...v,...N?.accentColor&&v?.[`--lockerverse-accent`]===void 0?{"--lockerverse-accent":N.accentColor}:{},...L&&v?.[`--lockerverse-accent-contrast`]===void 0?{"--lockerverse-accent-contrast":L}:{}};if(k)return P(`section`,{...w,className:M,"data-lockerverse-theme":S,role:`alert`,style:R,children:k});if(A.phase===`error`)return F(`section`,{...w,className:M,"data-lockerverse-theme":S,style:R,children:[P(`p`,{role:`alert`,children:A.failure}),P(`button`,{onClick:O,type:`button`,children:`Retry`})]});if(A.phase!==`ready`)return P(`section`,{...w,"aria-busy":`true`,"aria-label":`Payment`,className:M,"data-lockerverse-theme":S,style:R,children:P(Ge,{})});let{catalog:z,checkoutItems:B,client:ie,preparedCheckout:V}=A;return F(`section`,{...w,"aria-label":`Payment`,className:M,"data-lockerverse-theme":S,"data-payment-state":ne,ref:T,style:R,children:[F(`header`,{children:[z.widget.showCommunityBranding&&N?F(`div`,{className:`lockerverse-payment__branding`,children:[N.imageUrl?P(`img`,{alt:N.name,height:`48`,src:N.imageUrl,width:`48`}):null,P(`strong`,{children:N.name})]}):null,P(`h1`,{children:z.widget.title??z.widget.name}),z.widget.description?P(`p`,{children:z.widget.description}):null]}),te?P(`p`,{className:`lockerverse-payment__payment-status`,role:`status`,children:te}):null,P(re,{container:T,children:P(Q,{accentColor:v?.[`--lockerverse-accent`]??N?.accentColor??`#38d77a`,catalog:z,checkoutItems:B,client:ie,fontFamily:v?.[`--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)=>{E(t),j(e)},onStateChange:D,quote:V,resumePayment:ee,stripeLoader:y,theme:S,visualStyle:R})})]})}export{Ke as t};
|
|
2
|
+
//# sourceMappingURL=lockerverse-payment.js.map
|