@amos.com/react-amos-js 0.9.10 → 0.9.12
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 +24 -11
- package/dist/index.d.ts +23 -5
- package/dist/index.js +1 -1
- package/dist/index.mjs +56 -27
- package/package.json +2 -2
- package/src/index.tsx +83 -10
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ The render token configures the iframe's allowed origin(s), allowed payment meth
|
|
|
39
39
|
The following flow is for credit card and bank account payment method types only.
|
|
40
40
|
|
|
41
41
|
1. **Set up prerequisites**: create a `renderToken` (safe for client), and keep `apiKey` and `accountId` server-side only.
|
|
42
|
-
2. **Render your checkout UI** with one of the payment method components (e.g. `AmosCreditCardPaymentMethodForm`) along with the required `onResult` prop.
|
|
42
|
+
2. **Render your checkout UI** with one of the payment method components (e.g. `AmosCreditCardPaymentMethodForm`) along with the required `onResult` prop. Card and bank forms show a field-shaped skeleton immediately (sized from `appearance`, `additionalFields`, and `billingAddressRequirement`); iframe height is auto-managed.
|
|
43
43
|
3. **User clicks "Pay now" button**: call `validateForm({ iframeRef })`, which returns `Promise<true>` if the embedded form is valid and `Promise<false>` otherwise.
|
|
44
44
|
4. **Create payment intent on your server**: use your server-side Amos client to call `POST /payment_intents`. You may also associate this payment intent with a new or existing customer via `POST /customers`. This must be server-side because it uses your private API key.
|
|
45
45
|
5. **Return the payment intent token to the browser**: your backend responds with the embed token (`components["schemas"]["EmbedToken"]`) needed for confirmation.
|
|
@@ -417,7 +417,7 @@ Clears all field values and API errors in the embedded card/bank iframe form. Ca
|
|
|
417
417
|
|
|
418
418
|
### `AmosCreditCardPaymentMethodForm`
|
|
419
419
|
|
|
420
|
-
Renders the secure credit card iframe form.
|
|
420
|
+
Renders the secure credit card iframe form. A field-shaped skeleton is shown immediately and replaced by the iframe once appearance is applied.
|
|
421
421
|
|
|
422
422
|
**Required props:**
|
|
423
423
|
|
|
@@ -436,7 +436,7 @@ Renders the secure credit card iframe form.
|
|
|
436
436
|
|
|
437
437
|
### `AmosBankAccountPaymentMethodForm`
|
|
438
438
|
|
|
439
|
-
Renders the secure bank account iframe form.
|
|
439
|
+
Renders the secure bank account iframe form. A field-shaped skeleton is shown immediately and replaced by the iframe once appearance is applied.
|
|
440
440
|
|
|
441
441
|
**Required props:** same as `AmosCreditCardPaymentMethodForm` — `renderToken`, `onResult`.
|
|
442
442
|
|
|
@@ -460,15 +460,27 @@ Renders the secure Google Pay iframe button (express checkout flow).
|
|
|
460
460
|
**Optional props:**
|
|
461
461
|
|
|
462
462
|
- `appearance` (`{ themeVariables?: Partial<Record<ThemeVariable, string>>; labels?: "above" | "floating" | "placeholder" }`)
|
|
463
|
+
- `fullWidth` (`boolean`, defaults to `false`) — fills the component's mount container
|
|
463
464
|
- `buttonType` (`"book" | "buy" | "checkout" | "donate" | "order" | "pay" | "plain" | "subscribe" | "short" | "long"`, defaults to `"short"`)
|
|
464
465
|
- `buttonColor` (`"default" | "black" | "white"`)
|
|
465
466
|
- `buttonRadius` (`number`, 0–20)
|
|
466
467
|
- `buttonSizeMode` (`"static" | "fill"`)
|
|
467
468
|
- `buttonLocale` (`string`)
|
|
468
469
|
- `buttonBorderType` (`"no_border" | "default_border"`)
|
|
469
|
-
- `
|
|
470
|
+
- `buttonStyle` — styles the Google Pay button **inside** the iframe, for example `buttonStyle={{ height: "48px" }}`
|
|
471
|
+
- `iframeStyle` — styles the host-page `<iframe>` element
|
|
472
|
+
- `style` — backward-compatible alias for `buttonStyle`; prefer the explicit name in new integrations
|
|
470
473
|
|
|
471
|
-
|
|
474
|
+
```tsx
|
|
475
|
+
<AmosGooglePayButton
|
|
476
|
+
fullWidth
|
|
477
|
+
buttonStyle={{ height: "48px" }}
|
|
478
|
+
iframeStyle={{ borderRadius: "6px" }}
|
|
479
|
+
// ...required props
|
|
480
|
+
/>
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
**Also accepts:** standard iframe props, minus `src`, `title`, `name`, `role`, `allow`, and `style`.
|
|
472
484
|
|
|
473
485
|
### `AmosApplePayButton`
|
|
474
486
|
|
|
@@ -476,21 +488,22 @@ Renders the secure Apple Pay iframe button (express checkout flow). Same require
|
|
|
476
488
|
|
|
477
489
|
**Optional visual props** use Apple's `<apple-pay-button>` attribute names:
|
|
478
490
|
|
|
491
|
+
- `fullWidth` (`boolean`, defaults to `false`) — fills the component's mount container
|
|
479
492
|
- `buttonstyle` (`"black" | "white" | "white-outline"`, defaults to `"black"`)
|
|
480
493
|
- `type` (`"plain" | "buy" | "set-up" | "donate" | "check-out" | "book" | "subscribe" | "reload" | "add-money" | "top-up" | "order" | "rent" | "support" | "contribute" | "tip"`, defaults to `"plain"`)
|
|
481
494
|
- `locale` (`string`, BCP 47, defaults to `"en-US"`)
|
|
482
|
-
- `
|
|
495
|
+
- `buttonStyle` — forwarded to the `<apple-pay-button>` inside the iframe. Apple maps a CSS `height` onto its required custom property.
|
|
496
|
+
- `iframeStyle` — styles the host-page `<iframe>` element
|
|
497
|
+
- `style` — backward-compatible alias for `buttonStyle`
|
|
483
498
|
|
|
484
499
|
```tsx
|
|
485
500
|
<AmosApplePayButton
|
|
501
|
+
fullWidth
|
|
486
502
|
buttonstyle="white-outline"
|
|
487
503
|
type="buy"
|
|
488
504
|
locale="en-GB"
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
"--apple-pay-button-width": "100%",
|
|
492
|
-
width: "100%",
|
|
493
|
-
}}
|
|
505
|
+
buttonStyle={{ height: "48px" }}
|
|
506
|
+
iframeStyle={{ borderRadius: "6px" }}
|
|
494
507
|
// ...required props
|
|
495
508
|
/>
|
|
496
509
|
```
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="googlepay" />
|
|
2
|
-
import { Appearance, ApplePayButtonElementProps, BillingAddressRequirement, ConfirmationResult, CreditCardAdditionalFields, GooglePayButtonElementProps } from '@amos.com/amos-js';
|
|
2
|
+
import { Appearance, ApplePayButtonElementProps, BillingAddressRequirement, ConfirmationResult, CreditCardAdditionalFields, GooglePayButtonElementProps, WalletButtonStyle } from '@amos.com/amos-js';
|
|
3
3
|
import { components } from '@amos.com/node';
|
|
4
4
|
import { ComponentProps, RefObject } from 'react';
|
|
5
5
|
export * from '@amos.com/amos-js';
|
|
@@ -41,6 +41,24 @@ export declare function resetForm({ iframeRef }: {
|
|
|
41
41
|
iframeRef: IframeRef;
|
|
42
42
|
}): void;
|
|
43
43
|
type IframePassthroughProps = Omit<ComponentProps<"iframe">, "src" | "title" | "name" | "role" | "allow">;
|
|
44
|
+
type WalletStyleProps = {
|
|
45
|
+
/**
|
|
46
|
+
* Stretch the wallet button to fill the iframe width.
|
|
47
|
+
*
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
50
|
+
fullWidth?: boolean;
|
|
51
|
+
/** Styles applied to the wallet button inside the Amos iframe. */
|
|
52
|
+
buttonStyle?: WalletButtonStyle;
|
|
53
|
+
/** Styles applied to the host-page `<iframe>` element. */
|
|
54
|
+
iframeStyle?: ComponentProps<"iframe">["style"];
|
|
55
|
+
/**
|
|
56
|
+
* Styles applied to the wallet button inside the Amos iframe.
|
|
57
|
+
*
|
|
58
|
+
* @deprecated Use `buttonStyle` to distinguish it from `iframeStyle`.
|
|
59
|
+
*/
|
|
60
|
+
style?: WalletButtonStyle;
|
|
61
|
+
};
|
|
44
62
|
type AmosCreditCardPaymentMethodFormProps = IframePassthroughProps & {
|
|
45
63
|
renderToken: string;
|
|
46
64
|
appearance?: Appearance;
|
|
@@ -70,7 +88,7 @@ type AmosBankAccountPaymentMethodFormProps = IframePassthroughProps & {
|
|
|
70
88
|
billingAddressRequirement?: BillingAddressRequirement;
|
|
71
89
|
};
|
|
72
90
|
export declare function AmosBankAccountPaymentMethodForm({ ref, renderToken, appearance, onResult, onValidityChange, billingAddressRequirement, style, ...rest }: AmosBankAccountPaymentMethodFormProps): import("react").JSX.Element;
|
|
73
|
-
type AmosGooglePayButtonProps = Omit<IframePassthroughProps, "style"> & GooglePayButtonElementProps & {
|
|
91
|
+
type AmosGooglePayButtonProps = Omit<IframePassthroughProps, "style"> & Omit<GooglePayButtonElementProps, "style"> & WalletStyleProps & {
|
|
74
92
|
renderToken: string;
|
|
75
93
|
amount: string;
|
|
76
94
|
merchantName: string;
|
|
@@ -81,8 +99,8 @@ type AmosGooglePayButtonProps = Omit<IframePassthroughProps, "style"> & GooglePa
|
|
|
81
99
|
}) => Promise<components["schemas"]["EmbedToken"]["token"]>;
|
|
82
100
|
onResult: (result: ConfirmationResult) => void;
|
|
83
101
|
};
|
|
84
|
-
export declare function AmosGooglePayButton({ ref, renderToken, amount, merchantName, appearance, onInitiatePaymentIntentRequest, onResult, buttonType, buttonColor, buttonRadius, buttonSizeMode, buttonLocale, buttonBorderType, style, ...rest }: AmosGooglePayButtonProps): import("react").JSX.Element;
|
|
85
|
-
type AmosApplePayButtonProps = Omit<IframePassthroughProps, "style" | "type"> & ApplePayButtonElementProps & {
|
|
102
|
+
export declare function AmosGooglePayButton({ ref, renderToken, amount, merchantName, appearance, onInitiatePaymentIntentRequest, onResult, buttonType, buttonColor, buttonRadius, buttonSizeMode, buttonLocale, buttonBorderType, fullWidth, buttonStyle, iframeStyle, style, ...rest }: AmosGooglePayButtonProps): import("react").JSX.Element;
|
|
103
|
+
type AmosApplePayButtonProps = Omit<IframePassthroughProps, "style" | "type"> & Omit<ApplePayButtonElementProps, "style"> & WalletStyleProps & {
|
|
86
104
|
renderToken: string;
|
|
87
105
|
amount: string;
|
|
88
106
|
merchantName: string;
|
|
@@ -93,4 +111,4 @@ type AmosApplePayButtonProps = Omit<IframePassthroughProps, "style" | "type"> &
|
|
|
93
111
|
}) => Promise<components["schemas"]["EmbedToken"]["token"]>;
|
|
94
112
|
onResult: (result: ConfirmationResult) => void;
|
|
95
113
|
};
|
|
96
|
-
export declare function AmosApplePayButton({ ref, renderToken, amount, merchantName, appearance, onInitiatePaymentIntentRequest, onResult, buttonstyle, type, locale, style, ...rest }: AmosApplePayButtonProps): import("react").JSX.Element;
|
|
114
|
+
export declare function AmosApplePayButton({ ref, renderToken, amount, merchantName, appearance, onInitiatePaymentIntentRequest, onResult, buttonstyle, type, locale, fullWidth, buttonStyle, iframeStyle, style, ...rest }: AmosApplePayButtonProps): import("react").JSX.Element;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@amos.com/amos-js"),t=require("react"),n=require("react/jsx-runtime");function r(e){return e?e.current??null:null}function i({iframeRef:t}){return(0,e.validateForm)({iframe:r(t)})}function a({iframeRef:t,token:n}){(0,e.confirmPaymentIntent)({iframe:r(t),token:n})}function o({iframeRef:t,token:n}){(0,e.confirmSetupIntent)({iframe:r(t),token:n})}function s({iframeRef:t}){(0,e.resetForm)({iframe:r(t)})}function c(e,t){typeof e==`function`?e(t):e&&(e.current=t)}function l(e,{style:t,className:n,id:r,...i}){n!=null&&(e.className=n),r!=null&&(e.id=r),t!=null&&Object.assign(e.style,t);for(let[t,n]of Object.entries(i))n!=null&&(t in e?Reflect.set(e,t,n):e.setAttribute(t,String(n)))}function
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@amos.com/amos-js"),t=require("react"),n=require("react/jsx-runtime");function r(e){return e?e.current??null:null}function i({iframeRef:t}){return(0,e.validateForm)({iframe:r(t)})}function a({iframeRef:t,token:n}){(0,e.confirmPaymentIntent)({iframe:r(t),token:n})}function o({iframeRef:t,token:n}){(0,e.confirmSetupIntent)({iframe:r(t),token:n})}function s({iframeRef:t}){(0,e.resetForm)({iframe:r(t)})}function c(e,t){typeof e==`function`?e(t):e&&(e.current=t)}function l({buttonSizeMode:e,style:t,fullWidth:n}){return{buttonSizeMode:e??(n?`fill`:void 0),style:n?{width:`100%`,...t}:t}}function u({style:e,fullWidth:t}){return t?{style:{"--apple-pay-button-width":`100%`,width:`100%`,...e}}:{style:e}}function d(e,{style:t,className:n,id:r,...i}){n!=null&&(e.className=n),r!=null&&(e.id=r),t!=null&&Object.assign(e.style,t);for(let[t,n]of Object.entries(i))n!=null&&(t in e?Reflect.set(e,t,n):e.setAttribute(t,String(n)))}function f({containerRef:e,iframeRef:n,mount:r,options:i,remountDeps:a,iframePassthrough:o,updateDeps:s}){let l=(0,t.useRef)(null);(0,t.useEffect)(()=>{let t=e.current;if(!t)return;let a=r(t,i);return l.current=a,c(n,a.iframe),d(a.iframe,o),()=>{a.destroy(),l.current=null,c(n,null)}},[...a]),(0,t.useEffect)(()=>{l.current?.update(i)},[...s]),(0,t.useEffect)(()=>{let e=l.current?.iframe;e&&d(e,o)})}function p({ref:r,renderToken:i,appearance:a,onResult:o,onValidityChange:s,additionalFields:c={cardholderName:!1},billingAddressRequirement:l=`country`,style:u,...d}){let p=(0,t.useRef)(null);return f({containerRef:p,iframeRef:r,mount:e.mountAmosCreditCardPaymentMethodForm,options:{renderToken:i,appearance:a,additionalFields:c,billingAddressRequirement:l,onResult:o,onValidityChange:s},remountDeps:[i,c.cardholderName,l],iframePassthrough:{style:u,...d},updateDeps:[a,c,l,o,s]}),(0,n.jsx)(`div`,{ref:p})}function m({ref:r,renderToken:i,appearance:a,onResult:o,onValidityChange:s,billingAddressRequirement:c=`country`,style:l,...u}){let d=(0,t.useRef)(null);return f({containerRef:d,iframeRef:r,mount:e.mountAmosBankAccountPaymentMethodForm,options:{renderToken:i,appearance:a,billingAddressRequirement:c,onResult:o,onValidityChange:s},remountDeps:[i,c],iframePassthrough:{style:l,...u},updateDeps:[a,c,o,s]}),(0,n.jsx)(`div`,{ref:d})}function h({ref:r,renderToken:i,amount:a,merchantName:o,appearance:s,onInitiatePaymentIntentRequest:c,onResult:u,buttonType:d,buttonColor:p,buttonRadius:m,buttonSizeMode:h,buttonLocale:g,buttonBorderType:_,fullWidth:v=!1,buttonStyle:y,iframeStyle:b,style:x,...S}){let C=(0,t.useRef)(null),w=l({buttonSizeMode:h,style:y??x,fullWidth:v});return f({containerRef:C,iframeRef:r,mount:e.mountAmosGooglePayButton,options:{renderToken:i,amount:a,merchantName:o,appearance:s,onInitiatePaymentIntentRequest:c,onResult:u,buttonType:d,buttonColor:p,buttonRadius:m,buttonSizeMode:w.buttonSizeMode,buttonLocale:g,buttonBorderType:_,style:w.style},remountDeps:[i],iframePassthrough:{style:b,...S},updateDeps:[a,o,s,c,u,d,p,m,w.buttonSizeMode,g,_,w.style]}),(0,n.jsx)(`div`,{ref:C})}function g({ref:r,renderToken:i,amount:a,merchantName:o,appearance:s,onInitiatePaymentIntentRequest:c,onResult:l,buttonstyle:d,type:p,locale:m,fullWidth:h=!1,buttonStyle:g,iframeStyle:_,style:v,...y}){let b=(0,t.useRef)(null),x=u({style:g??v,fullWidth:h});return f({containerRef:b,iframeRef:r,mount:e.mountAmosApplePayButton,options:{renderToken:i,amount:a,merchantName:o,appearance:s,onInitiatePaymentIntentRequest:c,onResult:l,buttonstyle:d,type:p,locale:m,style:x.style},remountDeps:[i],iframePassthrough:{style:_,...y},updateDeps:[a,o,s,c,l,d,p,m,x.style]}),(0,n.jsx)(`div`,{ref:b})}exports.AmosApplePayButton=g,exports.AmosBankAccountPaymentMethodForm=m,exports.AmosCreditCardPaymentMethodForm=p,exports.AmosGooglePayButton=h,exports.confirmPaymentIntent=a,exports.confirmSetupIntent=o,exports.resetForm=s,exports.validateForm=i,Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
|
package/dist/index.mjs
CHANGED
|
@@ -27,29 +27,45 @@ function h({ iframeRef: e }) {
|
|
|
27
27
|
function g(e, t) {
|
|
28
28
|
typeof e == "function" ? e(t) : e && (e.current = t);
|
|
29
29
|
}
|
|
30
|
-
function _(e,
|
|
30
|
+
function _({ buttonSizeMode: e, style: t, fullWidth: n }) {
|
|
31
|
+
return {
|
|
32
|
+
buttonSizeMode: e ?? (n ? "fill" : void 0),
|
|
33
|
+
style: n ? {
|
|
34
|
+
width: "100%",
|
|
35
|
+
...t
|
|
36
|
+
} : t
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function v({ style: e, fullWidth: t }) {
|
|
40
|
+
return t ? { style: {
|
|
41
|
+
"--apple-pay-button-width": "100%",
|
|
42
|
+
width: "100%",
|
|
43
|
+
...e
|
|
44
|
+
} } : { style: e };
|
|
45
|
+
}
|
|
46
|
+
function y(e, { style: t, className: n, id: r, ...i }) {
|
|
31
47
|
n != null && (e.className = n), r != null && (e.id = r), t != null && Object.assign(e.style, t);
|
|
32
48
|
for (let [t, n] of Object.entries(i)) n != null && (t in e ? Reflect.set(e, t, n) : e.setAttribute(t, String(n)));
|
|
33
49
|
}
|
|
34
|
-
function
|
|
50
|
+
function b({ containerRef: e, iframeRef: t, mount: n, options: r, remountDeps: i, iframePassthrough: a, updateDeps: o }) {
|
|
35
51
|
let s = l(null);
|
|
36
52
|
c(() => {
|
|
37
53
|
let i = e.current;
|
|
38
54
|
if (!i) return;
|
|
39
55
|
let o = n(i, r);
|
|
40
|
-
return s.current = o, g(t, o.iframe),
|
|
56
|
+
return s.current = o, g(t, o.iframe), y(o.iframe, a), () => {
|
|
41
57
|
o.destroy(), s.current = null, g(t, null);
|
|
42
58
|
};
|
|
43
59
|
}, [...i]), c(() => {
|
|
44
60
|
s.current?.update(r);
|
|
45
61
|
}, [...o]), c(() => {
|
|
46
62
|
let e = s.current?.iframe;
|
|
47
|
-
e &&
|
|
63
|
+
e && y(e, a);
|
|
48
64
|
});
|
|
49
65
|
}
|
|
50
|
-
function
|
|
66
|
+
function x({ ref: e, renderToken: t, appearance: n, onResult: r, onValidityChange: a, additionalFields: o = { cardholderName: !1 }, billingAddressRequirement: s = "country", style: c, ...d }) {
|
|
51
67
|
let f = l(null);
|
|
52
|
-
return
|
|
68
|
+
return b({
|
|
53
69
|
containerRef: f,
|
|
54
70
|
iframeRef: e,
|
|
55
71
|
mount: i,
|
|
@@ -79,9 +95,9 @@ function y({ ref: e, renderToken: t, appearance: n, onResult: r, onValidityChang
|
|
|
79
95
|
]
|
|
80
96
|
}), /* @__PURE__ */ u("div", { ref: f });
|
|
81
97
|
}
|
|
82
|
-
function
|
|
98
|
+
function S({ ref: e, renderToken: t, appearance: n, onResult: i, onValidityChange: a, billingAddressRequirement: o = "country", style: s, ...c }) {
|
|
83
99
|
let d = l(null);
|
|
84
|
-
return
|
|
100
|
+
return b({
|
|
85
101
|
containerRef: d,
|
|
86
102
|
iframeRef: e,
|
|
87
103
|
mount: r,
|
|
@@ -105,10 +121,14 @@ function b({ ref: e, renderToken: t, appearance: n, onResult: i, onValidityChang
|
|
|
105
121
|
]
|
|
106
122
|
}), /* @__PURE__ */ u("div", { ref: d });
|
|
107
123
|
}
|
|
108
|
-
function
|
|
109
|
-
let
|
|
110
|
-
|
|
111
|
-
|
|
124
|
+
function C({ ref: e, renderToken: t, amount: n, merchantName: r, appearance: i, onInitiatePaymentIntentRequest: o, onResult: s, buttonType: c, buttonColor: d, buttonRadius: f, buttonSizeMode: p, buttonLocale: m, buttonBorderType: h, fullWidth: g = !1, buttonStyle: v, iframeStyle: y, style: x, ...S }) {
|
|
125
|
+
let C = l(null), w = _({
|
|
126
|
+
buttonSizeMode: p,
|
|
127
|
+
style: v ?? x,
|
|
128
|
+
fullWidth: g
|
|
129
|
+
});
|
|
130
|
+
return b({
|
|
131
|
+
containerRef: C,
|
|
112
132
|
iframeRef: e,
|
|
113
133
|
mount: a,
|
|
114
134
|
options: {
|
|
@@ -121,13 +141,16 @@ function x({ ref: e, renderToken: t, amount: n, merchantName: r, appearance: i,
|
|
|
121
141
|
buttonType: c,
|
|
122
142
|
buttonColor: d,
|
|
123
143
|
buttonRadius: f,
|
|
124
|
-
buttonSizeMode:
|
|
144
|
+
buttonSizeMode: w.buttonSizeMode,
|
|
125
145
|
buttonLocale: m,
|
|
126
146
|
buttonBorderType: h,
|
|
127
|
-
style:
|
|
147
|
+
style: w.style
|
|
128
148
|
},
|
|
129
149
|
remountDeps: [t],
|
|
130
|
-
iframePassthrough: {
|
|
150
|
+
iframePassthrough: {
|
|
151
|
+
style: y,
|
|
152
|
+
...S
|
|
153
|
+
},
|
|
131
154
|
updateDeps: [
|
|
132
155
|
n,
|
|
133
156
|
r,
|
|
@@ -137,17 +160,20 @@ function x({ ref: e, renderToken: t, amount: n, merchantName: r, appearance: i,
|
|
|
137
160
|
c,
|
|
138
161
|
d,
|
|
139
162
|
f,
|
|
140
|
-
|
|
163
|
+
w.buttonSizeMode,
|
|
141
164
|
m,
|
|
142
165
|
h,
|
|
143
|
-
|
|
166
|
+
w.style
|
|
144
167
|
]
|
|
145
|
-
}), /* @__PURE__ */ u("div", { ref:
|
|
168
|
+
}), /* @__PURE__ */ u("div", { ref: C });
|
|
146
169
|
}
|
|
147
|
-
function
|
|
148
|
-
let
|
|
149
|
-
|
|
150
|
-
|
|
170
|
+
function w({ ref: e, renderToken: t, amount: r, merchantName: i, appearance: a, onInitiatePaymentIntentRequest: o, onResult: s, buttonstyle: c, type: d, locale: f, fullWidth: p = !1, buttonStyle: m, iframeStyle: h, style: g, ..._ }) {
|
|
171
|
+
let y = l(null), x = v({
|
|
172
|
+
style: m ?? g,
|
|
173
|
+
fullWidth: p
|
|
174
|
+
});
|
|
175
|
+
return b({
|
|
176
|
+
containerRef: y,
|
|
151
177
|
iframeRef: e,
|
|
152
178
|
mount: n,
|
|
153
179
|
options: {
|
|
@@ -160,10 +186,13 @@ function S({ ref: e, renderToken: t, amount: r, merchantName: i, appearance: a,
|
|
|
160
186
|
buttonstyle: c,
|
|
161
187
|
type: d,
|
|
162
188
|
locale: f,
|
|
163
|
-
style:
|
|
189
|
+
style: x.style
|
|
164
190
|
},
|
|
165
191
|
remountDeps: [t],
|
|
166
|
-
iframePassthrough: {
|
|
192
|
+
iframePassthrough: {
|
|
193
|
+
style: h,
|
|
194
|
+
..._
|
|
195
|
+
},
|
|
167
196
|
updateDeps: [
|
|
168
197
|
r,
|
|
169
198
|
i,
|
|
@@ -173,9 +202,9 @@ function S({ ref: e, renderToken: t, amount: r, merchantName: i, appearance: a,
|
|
|
173
202
|
c,
|
|
174
203
|
d,
|
|
175
204
|
f,
|
|
176
|
-
|
|
205
|
+
x.style
|
|
177
206
|
]
|
|
178
|
-
}), /* @__PURE__ */ u("div", { ref:
|
|
207
|
+
}), /* @__PURE__ */ u("div", { ref: y });
|
|
179
208
|
}
|
|
180
209
|
//#endregion
|
|
181
|
-
export {
|
|
210
|
+
export { w as AmosApplePayButton, S as AmosBankAccountPaymentMethodForm, x as AmosCreditCardPaymentMethodForm, C as AmosGooglePayButton, p as confirmPaymentIntent, m as confirmSetupIntent, h as resetForm, f as validateForm };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amos.com/react-amos-js",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.12",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"vite-plugin-dts": "5.0.3"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@amos.com/amos-js": "0.9.
|
|
51
|
+
"@amos.com/amos-js": "0.9.13",
|
|
52
52
|
"@types/googlepay": "0.7.11"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
package/src/index.tsx
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
mountAmosBankAccountPaymentMethodForm,
|
|
16
16
|
mountAmosCreditCardPaymentMethodForm,
|
|
17
17
|
mountAmosGooglePayButton,
|
|
18
|
+
type WalletButtonStyle,
|
|
18
19
|
} from "@amos.com/amos-js";
|
|
19
20
|
import type { components } from "@amos.com/node";
|
|
20
21
|
import {
|
|
@@ -108,6 +109,59 @@ type IframePassthroughProps = Omit<
|
|
|
108
109
|
"src" | "title" | "name" | "role" | "allow"
|
|
109
110
|
>;
|
|
110
111
|
|
|
112
|
+
type WalletStyleProps = {
|
|
113
|
+
/**
|
|
114
|
+
* Stretch the wallet button to fill the iframe width.
|
|
115
|
+
*
|
|
116
|
+
* @default false
|
|
117
|
+
*/
|
|
118
|
+
fullWidth?: boolean;
|
|
119
|
+
/** Styles applied to the wallet button inside the Amos iframe. */
|
|
120
|
+
buttonStyle?: WalletButtonStyle;
|
|
121
|
+
/** Styles applied to the host-page `<iframe>` element. */
|
|
122
|
+
iframeStyle?: ComponentProps<"iframe">["style"];
|
|
123
|
+
/**
|
|
124
|
+
* Styles applied to the wallet button inside the Amos iframe.
|
|
125
|
+
*
|
|
126
|
+
* @deprecated Use `buttonStyle` to distinguish it from `iframeStyle`.
|
|
127
|
+
*/
|
|
128
|
+
style?: WalletButtonStyle;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
function resolveGooglePayButtonLayout({
|
|
132
|
+
buttonSizeMode,
|
|
133
|
+
style,
|
|
134
|
+
fullWidth,
|
|
135
|
+
}: {
|
|
136
|
+
buttonSizeMode?: GooglePayButtonElementProps["buttonSizeMode"];
|
|
137
|
+
style?: WalletButtonStyle;
|
|
138
|
+
fullWidth: boolean;
|
|
139
|
+
}): Pick<GooglePayButtonElementProps, "buttonSizeMode" | "style"> {
|
|
140
|
+
return {
|
|
141
|
+
buttonSizeMode: buttonSizeMode ?? (fullWidth ? "fill" : undefined),
|
|
142
|
+
style: fullWidth ? { width: "100%", ...style } : style,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function resolveApplePayButtonLayout({
|
|
147
|
+
style,
|
|
148
|
+
fullWidth,
|
|
149
|
+
}: {
|
|
150
|
+
style?: WalletButtonStyle;
|
|
151
|
+
fullWidth: boolean;
|
|
152
|
+
}): Pick<ApplePayButtonElementProps, "style"> {
|
|
153
|
+
if (!fullWidth) {
|
|
154
|
+
return { style };
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
style: {
|
|
158
|
+
"--apple-pay-button-width": "100%",
|
|
159
|
+
width: "100%",
|
|
160
|
+
...style,
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
111
165
|
function applyIframePassthrough(
|
|
112
166
|
iframe: HTMLIFrameElement,
|
|
113
167
|
{ style, className, id, ...rest }: IframePassthroughProps,
|
|
@@ -295,7 +349,8 @@ export function AmosBankAccountPaymentMethodForm({
|
|
|
295
349
|
}
|
|
296
350
|
|
|
297
351
|
type AmosGooglePayButtonProps = Omit<IframePassthroughProps, "style"> &
|
|
298
|
-
GooglePayButtonElementProps &
|
|
352
|
+
Omit<GooglePayButtonElementProps, "style"> &
|
|
353
|
+
WalletStyleProps & {
|
|
299
354
|
renderToken: string;
|
|
300
355
|
amount: string;
|
|
301
356
|
merchantName: string;
|
|
@@ -324,10 +379,19 @@ export function AmosGooglePayButton({
|
|
|
324
379
|
buttonSizeMode,
|
|
325
380
|
buttonLocale,
|
|
326
381
|
buttonBorderType,
|
|
382
|
+
fullWidth = false,
|
|
383
|
+
buttonStyle,
|
|
384
|
+
iframeStyle,
|
|
327
385
|
style,
|
|
328
386
|
...rest
|
|
329
387
|
}: AmosGooglePayButtonProps) {
|
|
330
388
|
const containerRef = useRef<HTMLDivElement | null>(null);
|
|
389
|
+
const resolvedStyle = buttonStyle ?? style;
|
|
390
|
+
const layout = resolveGooglePayButtonLayout({
|
|
391
|
+
buttonSizeMode,
|
|
392
|
+
style: resolvedStyle,
|
|
393
|
+
fullWidth,
|
|
394
|
+
});
|
|
331
395
|
|
|
332
396
|
useAmosEmbed({
|
|
333
397
|
containerRef,
|
|
@@ -343,13 +407,13 @@ export function AmosGooglePayButton({
|
|
|
343
407
|
buttonType,
|
|
344
408
|
buttonColor,
|
|
345
409
|
buttonRadius,
|
|
346
|
-
buttonSizeMode,
|
|
410
|
+
buttonSizeMode: layout.buttonSizeMode,
|
|
347
411
|
buttonLocale,
|
|
348
412
|
buttonBorderType,
|
|
349
|
-
style,
|
|
413
|
+
style: layout.style,
|
|
350
414
|
},
|
|
351
415
|
remountDeps: [renderToken],
|
|
352
|
-
iframePassthrough: { ...rest },
|
|
416
|
+
iframePassthrough: { style: iframeStyle, ...rest },
|
|
353
417
|
updateDeps: [
|
|
354
418
|
amount,
|
|
355
419
|
merchantName,
|
|
@@ -359,10 +423,10 @@ export function AmosGooglePayButton({
|
|
|
359
423
|
buttonType,
|
|
360
424
|
buttonColor,
|
|
361
425
|
buttonRadius,
|
|
362
|
-
buttonSizeMode,
|
|
426
|
+
layout.buttonSizeMode,
|
|
363
427
|
buttonLocale,
|
|
364
428
|
buttonBorderType,
|
|
365
|
-
style,
|
|
429
|
+
layout.style,
|
|
366
430
|
],
|
|
367
431
|
});
|
|
368
432
|
|
|
@@ -370,7 +434,8 @@ export function AmosGooglePayButton({
|
|
|
370
434
|
}
|
|
371
435
|
|
|
372
436
|
type AmosApplePayButtonProps = Omit<IframePassthroughProps, "style" | "type"> &
|
|
373
|
-
ApplePayButtonElementProps &
|
|
437
|
+
Omit<ApplePayButtonElementProps, "style"> &
|
|
438
|
+
WalletStyleProps & {
|
|
374
439
|
renderToken: string;
|
|
375
440
|
amount: string;
|
|
376
441
|
merchantName: string;
|
|
@@ -396,10 +461,18 @@ export function AmosApplePayButton({
|
|
|
396
461
|
buttonstyle,
|
|
397
462
|
type,
|
|
398
463
|
locale,
|
|
464
|
+
fullWidth = false,
|
|
465
|
+
buttonStyle,
|
|
466
|
+
iframeStyle,
|
|
399
467
|
style,
|
|
400
468
|
...rest
|
|
401
469
|
}: AmosApplePayButtonProps) {
|
|
402
470
|
const containerRef = useRef<HTMLDivElement | null>(null);
|
|
471
|
+
const resolvedStyle = buttonStyle ?? style;
|
|
472
|
+
const layout = resolveApplePayButtonLayout({
|
|
473
|
+
style: resolvedStyle,
|
|
474
|
+
fullWidth,
|
|
475
|
+
});
|
|
403
476
|
|
|
404
477
|
useAmosEmbed({
|
|
405
478
|
containerRef,
|
|
@@ -415,10 +488,10 @@ export function AmosApplePayButton({
|
|
|
415
488
|
buttonstyle,
|
|
416
489
|
type,
|
|
417
490
|
locale,
|
|
418
|
-
style,
|
|
491
|
+
style: layout.style,
|
|
419
492
|
},
|
|
420
493
|
remountDeps: [renderToken],
|
|
421
|
-
iframePassthrough: { ...rest },
|
|
494
|
+
iframePassthrough: { style: iframeStyle, ...rest },
|
|
422
495
|
updateDeps: [
|
|
423
496
|
amount,
|
|
424
497
|
merchantName,
|
|
@@ -428,7 +501,7 @@ export function AmosApplePayButton({
|
|
|
428
501
|
buttonstyle,
|
|
429
502
|
type,
|
|
430
503
|
locale,
|
|
431
|
-
style,
|
|
504
|
+
layout.style,
|
|
432
505
|
],
|
|
433
506
|
});
|
|
434
507
|
|