@justifi/webcomponents 6.7.0 → 6.7.2
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/dist/cjs/{check-pkg-version-nSgWWvdw.js → check-pkg-version-BG-Rfkh5.js} +1 -1
- package/dist/cjs/hidden-input_2.cjs.entry.js +1 -1
- package/dist/cjs/internal-tokenize-payment-method_7.cjs.entry.js +9 -7
- package/dist/cjs/justifi-apple-pay_8.cjs.entry.js +10 -8
- package/dist/cjs/justifi-business-details.cjs.entry.js +2 -2
- package/dist/cjs/justifi-business-form.cjs.entry.js +2 -2
- package/dist/cjs/justifi-checkout.cjs.entry.js +2 -2
- package/dist/cjs/justifi-checkouts-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-dispute-management.cjs.entry.js +2 -2
- package/dist/cjs/justifi-dispute-notification_3.cjs.entry.js +2 -2
- package/dist/cjs/justifi-gross-payment-chart.cjs.entry.js +2 -2
- package/dist/cjs/justifi-order-terminals.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payment-details.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payment-provisioning.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payment-transactions-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payments-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payout-details.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payout-transactions-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-payouts-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-refund-payment.cjs.entry.js +98 -6
- package/dist/cjs/justifi-season-interruption-insurance.cjs.entry.js +2 -2
- package/dist/cjs/justifi-terminal-orders-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-terminals-list.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{package-B8gOzTFM.js → package-Df5lTFe6.js} +1 -1
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/actions/void/void-actions.js +31 -0
- package/dist/collection/api/services/google-pay.service.js +2 -1
- package/dist/collection/api/services/void.service.js +9 -0
- package/dist/collection/components/modular-checkout/modular-checkout.js +3 -2
- package/dist/collection/components/modular-checkout/sub-components/bank-account.js +6 -3
- package/dist/collection/components/modular-checkout/sub-components/card-form.js +6 -3
- package/dist/collection/components/modular-checkout/sub-components/google-pay.js +3 -3
- package/dist/collection/components/refund-payment/refund-payment.js +66 -10
- package/dist/docs.json +15 -10
- package/dist/esm/{check-pkg-version-CmkUoEAo.js → check-pkg-version-c_8fDHCB.js} +1 -1
- package/dist/esm/hidden-input_2.entry.js +1 -1
- package/dist/esm/internal-tokenize-payment-method_7.entry.js +9 -7
- package/dist/esm/justifi-apple-pay_8.entry.js +10 -8
- package/dist/esm/justifi-business-details.entry.js +2 -2
- package/dist/esm/justifi-business-form.entry.js +2 -2
- package/dist/esm/justifi-checkout.entry.js +2 -2
- package/dist/esm/justifi-checkouts-list.entry.js +2 -2
- package/dist/esm/justifi-dispute-management.entry.js +2 -2
- package/dist/esm/justifi-dispute-notification_3.entry.js +2 -2
- package/dist/esm/justifi-gross-payment-chart.entry.js +2 -2
- package/dist/esm/justifi-order-terminals.entry.js +2 -2
- package/dist/esm/justifi-payment-details.entry.js +2 -2
- package/dist/esm/justifi-payment-provisioning.entry.js +2 -2
- package/dist/esm/justifi-payment-transactions-list.entry.js +2 -2
- package/dist/esm/justifi-payments-list.entry.js +2 -2
- package/dist/esm/justifi-payout-details.entry.js +2 -2
- package/dist/esm/justifi-payout-transactions-list.entry.js +2 -2
- package/dist/esm/justifi-payouts-list.entry.js +2 -2
- package/dist/esm/justifi-refund-payment.entry.js +98 -6
- package/dist/esm/justifi-season-interruption-insurance.entry.js +2 -2
- package/dist/esm/justifi-terminal-orders-list.entry.js +2 -2
- package/dist/esm/justifi-terminals-list.entry.js +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{package-CsRppqXL.js → package-BzT9OxlN.js} +1 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/module/bank-account-form.js +1 -1
- package/dist/module/bank-account.js +5 -2
- package/dist/module/card-form.js +1 -1
- package/dist/module/card-form2.js +5 -2
- package/dist/module/google-pay.js +5 -4
- package/dist/module/justifi-checkouts-list-filters.js +1 -1
- package/dist/module/justifi-payment-transactions-list.js +1 -1
- package/dist/module/justifi-payments-list-filters.js +1 -1
- package/dist/module/justifi-payout-transactions-list.js +1 -1
- package/dist/module/justifi-payouts-list-filters.js +1 -1
- package/dist/module/justifi-refund-payment.js +97 -4
- package/dist/module/justifi-terminal-orders-list-filters.js +1 -1
- package/dist/module/modular-checkout.js +3 -2
- package/dist/module/package.js +1 -1
- package/dist/module/payments-list-core2.js +1 -1
- package/dist/module/payout-details-core2.js +1 -1
- package/dist/module/payouts-list-core2.js +1 -1
- package/dist/module/terminal-orders-list-core2.js +1 -1
- package/dist/module/utils2.js +1 -1
- package/dist/types/actions/void/void-actions.d.ts +10 -0
- package/dist/types/api/services/google-pay.service.d.ts +1 -1
- package/dist/types/api/services/void.service.d.ts +7 -0
- package/dist/types/components/modular-checkout/sub-components/bank-account.d.ts +1 -0
- package/dist/types/components/modular-checkout/sub-components/card-form.d.ts +1 -0
- package/dist/types/components/refund-payment/refund-payment.d.ts +6 -2
- package/dist/types/components.d.ts +3 -3
- package/dist/webcomponents/{p-c0bd4e9a.entry.js → p-035a4adc.entry.js} +1 -1
- package/dist/webcomponents/{p-c4585b68.entry.js → p-0935600b.entry.js} +1 -1
- package/dist/webcomponents/{p-fc8f55d7.entry.js → p-0ab9a3ae.entry.js} +1 -1
- package/dist/webcomponents/{p-DISrhs4v.js → p-11wdbrqX.js} +1 -1
- package/dist/webcomponents/{p-fe73b09b.entry.js → p-138ada4a.entry.js} +1 -1
- package/dist/webcomponents/p-148d3327.entry.js +1 -0
- package/dist/webcomponents/p-2cb9edad.entry.js +1 -0
- package/dist/webcomponents/{p-04ec17bb.entry.js → p-2d4a2d26.entry.js} +1 -1
- package/dist/webcomponents/p-3f14d0c4.entry.js +1 -0
- package/dist/webcomponents/{p-d2981754.entry.js → p-5c6727ae.entry.js} +1 -1
- package/dist/webcomponents/{p-eada0422.entry.js → p-622af881.entry.js} +1 -1
- package/dist/webcomponents/{p-50400c5e.entry.js → p-64ebff16.entry.js} +1 -1
- package/dist/webcomponents/p-71577fa1.entry.js +1 -0
- package/dist/webcomponents/p-7ec4838f.entry.js +1 -0
- package/dist/webcomponents/p-BzT9OxlN.js +1 -0
- package/dist/webcomponents/p-af7c219d.entry.js +1 -0
- package/dist/webcomponents/{p-74fea39c.entry.js → p-b752c5bc.entry.js} +1 -1
- package/dist/webcomponents/{p-f23428da.entry.js → p-bbff6196.entry.js} +1 -1
- package/dist/webcomponents/p-c0c36187.entry.js +1 -0
- package/dist/webcomponents/{p-ff5981fb.entry.js → p-d077569e.entry.js} +1 -1
- package/dist/webcomponents/{p-87988b4d.entry.js → p-d7b1b7b5.entry.js} +1 -1
- package/dist/webcomponents/{p-095cedc5.entry.js → p-dc6c9c79.entry.js} +1 -1
- package/dist/webcomponents/p-ecbc83bf.entry.js +1 -0
- package/dist/webcomponents/{p-b2a0cbad.entry.js → p-f56d7b4c.entry.js} +1 -1
- package/dist/webcomponents/webcomponents.esm.js +1 -1
- package/docs/.eslintrc.cjs +17 -0
- package/docs/changelog/index.mdx +17 -0
- package/docs/entities/businessdetails/index.mdx +143 -0
- package/docs/entities/businessform/index.mdx +241 -0
- package/docs/entities/index.mdx +19 -0
- package/docs/entities/payment-provisioning/index.mdx +128 -0
- package/docs/frameworks/angular/index.mdx +112 -0
- package/docs/frameworks/index.mdx +18 -0
- package/docs/frameworks/react/index.mdx +125 -0
- package/docs/frameworks/vue/index.mdx +102 -0
- package/docs/helpers/PartsTable.js +50 -0
- package/docs/helpers/PropsTable.js +56 -0
- package/docs/helpers/index.ts +3 -0
- package/docs/helpers/version.js +32 -0
- package/docs/introduction/index.mdx +125 -0
- package/docs/merchant-tools/checkouts-list/index.mdx +97 -0
- package/docs/merchant-tools/gross-payments-chart/index.mdx +83 -0
- package/docs/merchant-tools/index.mdx +25 -0
- package/docs/merchant-tools/order-terminals/index.mdx +84 -0
- package/docs/merchant-tools/payment-details/index.mdx +132 -0
- package/docs/merchant-tools/payment-transactions-list/index.mdx +85 -0
- package/docs/merchant-tools/payments-list/index.mdx +109 -0
- package/docs/merchant-tools/payout-details/index.mdx +84 -0
- package/docs/merchant-tools/payout-transactions-list/index.mdx +84 -0
- package/docs/merchant-tools/payouts-list/index.mdx +92 -0
- package/docs/merchant-tools/terminal-orders-list/index.mdx +85 -0
- package/docs/merchant-tools/terminals-list/index.mdx +93 -0
- package/docs/modular-checkout/complete-examples/index.mdx +20 -0
- package/docs/modular-checkout/index.mdx +20 -0
- package/docs/modular-checkout/introduction/index.mdx +102 -0
- package/docs/modular-checkout/sub-components/apple-pay.mdx +106 -0
- package/docs/modular-checkout/sub-components/bank-account-form.mdx +167 -0
- package/docs/modular-checkout/sub-components/card-form.mdx +178 -0
- package/docs/modular-checkout/sub-components/index.mdx +23 -0
- package/docs/modular-checkout/sub-components/payment-method-options.mdx +87 -0
- package/docs/modular-checkout/sub-components/plaid-payment-method.mdx +158 -0
- package/docs/modular-checkout/sub-components/saved-payment-methods.mdx +183 -0
- package/docs/modular-checkout/sub-components/season-interruption-insurance.mdx +221 -0
- package/docs/modular-checkout/sub-components/sezzle-payment-method.mdx +183 -0
- package/docs/modular-checkout/sub-components/summary.mdx +111 -0
- package/docs/payment-facilitation/dispute-management/index.mdx +99 -0
- package/docs/payment-facilitation/index.mdx +21 -0
- package/docs/payment-facilitation/refund-payment/index.mdx +241 -0
- package/docs/payment-facilitation/tokenize-payment-method/index.mdx +350 -0
- package/docs/payment-facilitation/unified-fintech-checkout/342/204/242/index.mdx +150 -0
- package/package.json +21 -6
- package/dist/webcomponents/p-0e981c28.entry.js +0 -1
- package/dist/webcomponents/p-15ceeea7.entry.js +0 -1
- package/dist/webcomponents/p-9c1aa22d.entry.js +0 -1
- package/dist/webcomponents/p-CsRppqXL.js +0 -1
- package/dist/webcomponents/p-aa145996.entry.js +0 -1
- package/dist/webcomponents/p-b5b49e86.entry.js +0 -1
- package/dist/webcomponents/p-d9cdd873.entry.js +0 -1
- package/dist/webcomponents/p-ef04f334.entry.js +0 -1
- package/dist/webcomponents/p-f5dd3fa4.entry.js +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: modular-checkout/sub-components/card-form
|
|
3
|
+
title: Card Form
|
|
4
|
+
description: Card entry sub-component for Modular Checkout layouts with shared validation and token orchestration.
|
|
5
|
+
sidebar_position: 2
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
PropsTable,
|
|
10
|
+
PartsTable,
|
|
11
|
+
getWebcomponentsVersion,
|
|
12
|
+
} from '@justifi/webcomponents/docs/helpers';
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Renders a form for collecting credit and debit card details as part of a checkout flow.
|
|
17
|
+
|
|
18
|
+
This component is **designed to be used within** the `justifi-modular-checkout` and **does not accept props directly**. Instead, it relies on shared state passed through the Stencil Store, managed by the wrapper component.
|
|
19
|
+
|
|
20
|
+
> **Note:** If you are using the card payment method, you also need to provide billing information. This can be done by using either the `justifi-billing-form-full` component for complete billing address, the `justifi-card-billing-form-simple` component for ZIP code only, or by passing the `billingInformation` object as an argument to the `submitCheckout` method called on the wrapper. The `billingInformation` object can contain all the fields or just the `address_postal_code` field.
|
|
21
|
+
|
|
22
|
+
**Authorization** and business context are also handled by `justifi-modular-checkout`, which manages authentication tokens and related configuration.
|
|
23
|
+
|
|
24
|
+
This component exposes **no public methods or properties** and is not intended for standalone use.
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
<pre><code className="language-html">{`<!DOCTYPE html>
|
|
29
|
+
<html dir="ltr" lang="en">
|
|
30
|
+
|
|
31
|
+
<head>
|
|
32
|
+
<meta charset="utf-8" />
|
|
33
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0" />
|
|
34
|
+
<title>justifi-card-form</title>
|
|
35
|
+
|
|
36
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.esm.js"></script>
|
|
37
|
+
|
|
38
|
+
<script
|
|
39
|
+
nomodule
|
|
40
|
+
src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.js"
|
|
41
|
+
></script>
|
|
42
|
+
|
|
43
|
+
<style>
|
|
44
|
+
/** These are the available parts for styling the component. */
|
|
45
|
+
::part(skeleton){' '}
|
|
46
|
+
{
|
|
47
|
+
// skeleton styles
|
|
48
|
+
}
|
|
49
|
+
::part(label){' '}
|
|
50
|
+
{
|
|
51
|
+
// label styles
|
|
52
|
+
}
|
|
53
|
+
::part(input-invalid-and-focused){' '}
|
|
54
|
+
{
|
|
55
|
+
// input invalid and focused styles
|
|
56
|
+
}
|
|
57
|
+
::part(input-invalid){' '}
|
|
58
|
+
{
|
|
59
|
+
// input invalid styles
|
|
60
|
+
}
|
|
61
|
+
::part(input-focused){' '}
|
|
62
|
+
{
|
|
63
|
+
// input focused styles
|
|
64
|
+
}
|
|
65
|
+
::part(input){' '}
|
|
66
|
+
{
|
|
67
|
+
// input styles
|
|
68
|
+
}
|
|
69
|
+
</style>
|
|
70
|
+
|
|
71
|
+
</head>
|
|
72
|
+
|
|
73
|
+
<body>
|
|
74
|
+
<justifi-modular-checkout auth-token="authToken" checkout-id="ch_123">
|
|
75
|
+
<justifi-card-form />
|
|
76
|
+
<button id="submit-button">Submit Checkout</button>
|
|
77
|
+
</justifi-modular-checkout>
|
|
78
|
+
</body>
|
|
79
|
+
|
|
80
|
+
<script>
|
|
81
|
+
(function() {
|
|
82
|
+
const checkoutWrapper = document.querySelector('justifi-modular-checkout');
|
|
83
|
+
const submitButton = document.querySelector('#submit-button');
|
|
84
|
+
|
|
85
|
+
submitButton.addEventListener('click', () => {
|
|
86
|
+
checkoutWrapper.submitCheckout();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
checkoutWrapper.addEventListener('error-event', (event) => {
|
|
90
|
+
console.error(event.detail);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
document.addEventListener('submit-event', (event) => {
|
|
94
|
+
console.log('Checkout completed successfully!', event.detail);
|
|
95
|
+
});
|
|
96
|
+
})();
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
</html>`}</code></pre>
|
|
100
|
+
|
|
101
|
+
## Props, Events & Methods
|
|
102
|
+
|
|
103
|
+
<div
|
|
104
|
+
dangerouslySetInnerHTML={{
|
|
105
|
+
__html: PropsTable([
|
|
106
|
+
{
|
|
107
|
+
name: 'payment-method-group-id',
|
|
108
|
+
type: 'string',
|
|
109
|
+
description:
|
|
110
|
+
'Matches the group configured in the parent checkout to toggle allowed rails.',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'show-save-payment-method',
|
|
114
|
+
type: 'boolean',
|
|
115
|
+
defaultValue: 'true',
|
|
116
|
+
description:
|
|
117
|
+
'Displays a checkbox that surfaces the modular checkout save-preference state.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'card-brand-icons',
|
|
121
|
+
type: '"auto" | "none"',
|
|
122
|
+
defaultValue: 'auto',
|
|
123
|
+
description: 'Controls whether brand icons display above inputs.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'locale',
|
|
127
|
+
type: 'string',
|
|
128
|
+
defaultValue: 'en-US',
|
|
129
|
+
description: 'Overrides localized labels if needed.',
|
|
130
|
+
},
|
|
131
|
+
]),
|
|
132
|
+
}}
|
|
133
|
+
/>
|
|
134
|
+
|
|
135
|
+
### Events
|
|
136
|
+
|
|
137
|
+
All submit and error events bubble through the parent `<justifi-modular-checkout>`, so no additional listeners are required on the card form.
|
|
138
|
+
|
|
139
|
+
### Public methods
|
|
140
|
+
|
|
141
|
+
- `focus()` – moves focus to the iframe representing the current active field (useful for custom UX flows).
|
|
142
|
+
|
|
143
|
+
## Theming & Layout
|
|
144
|
+
|
|
145
|
+
- When embedded inside cards, wrap the host element in your layout container and scope typography overrides via the parts listed below.
|
|
146
|
+
|
|
147
|
+
<div
|
|
148
|
+
dangerouslySetInnerHTML={{
|
|
149
|
+
__html: PartsTable([
|
|
150
|
+
{
|
|
151
|
+
name: 'skeleton',
|
|
152
|
+
description: 'Skeleton loading state styles.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'label',
|
|
156
|
+
description: 'Label styles.',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'input-invalid-and-focused',
|
|
160
|
+
description: 'Input styles when invalid and focused.',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'input-invalid',
|
|
164
|
+
description: 'Input styles when invalid.',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'input-focused',
|
|
168
|
+
description: 'Input styles when focused.',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'input',
|
|
172
|
+
description: 'Input field styles.',
|
|
173
|
+
},
|
|
174
|
+
]),
|
|
175
|
+
}}
|
|
176
|
+
/>
|
|
177
|
+
|
|
178
|
+
- Use the `card-form` CSS part (`::part(card-form)`) to apply box shadows or wrapper padding.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: modular-checkout/sub-components/index
|
|
3
|
+
title: Modular Checkout Sub-components
|
|
4
|
+
sidebar_label: Sub-components
|
|
5
|
+
description: Directory of every child element that plugs into the checkout shell.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Each sub-component inherits authentication context from the parent checkout and
|
|
9
|
+
can be slotted wherever your layout requires. Dive into the dedicated docs for
|
|
10
|
+
implementation details:
|
|
11
|
+
|
|
12
|
+
- [Card form](./card-form)
|
|
13
|
+
- [Bank account form](./bank-account-form)
|
|
14
|
+
- [Plaid payment method](./plaid-payment-method)
|
|
15
|
+
- [Sezzle payment method](./sezzle-payment-method)
|
|
16
|
+
- [Apple Pay](./apple-pay)
|
|
17
|
+
- [Saved payment methods](./saved-payment-methods)
|
|
18
|
+
- [Season interruption insurance](./season-interruption-insurance)
|
|
19
|
+
- [Payment method options](./payment-method-options)
|
|
20
|
+
- [Summary](./summary)
|
|
21
|
+
|
|
22
|
+
> Looking for additional rails? Duplicate any of these MDX files, adjust the
|
|
23
|
+
> front matter `id`, and follow the existing documentation scaffolding.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: modular-checkout/sub-components/payment-method-options
|
|
3
|
+
title: Payment Method Options
|
|
4
|
+
description: Render-only component that lists available payment rails and lets customers switch between them.
|
|
5
|
+
sidebar_position: 25
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import { PropsTable, PartsTable } from '@justifi/webcomponents/docs/helpers';
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
`<justifi-payment-method-options>` exposes the same selector UI used inside Storybook examples. It pairs well with `<justifi-modular-checkout>` when you need more control over where the payment rail picker appears.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
<pre>
|
|
17
|
+
<code className="language-html">{`<justifi-payment-method-options
|
|
18
|
+
selected="card"
|
|
19
|
+
options='[
|
|
20
|
+
{"id":"card","label":"Credit or debit card"},
|
|
21
|
+
{"id":"ach","label":"Bank account"},
|
|
22
|
+
{"id":"wallet","label":"Digital wallet"}
|
|
23
|
+
]'
|
|
24
|
+
></justifi-payment-method-options>`}</code>
|
|
25
|
+
</pre>
|
|
26
|
+
|
|
27
|
+
## Props, Events & Methods
|
|
28
|
+
|
|
29
|
+
<div
|
|
30
|
+
dangerouslySetInnerHTML={{
|
|
31
|
+
__html: PropsTable([
|
|
32
|
+
{
|
|
33
|
+
name: 'options',
|
|
34
|
+
type: 'Array<{ id: string; label: string; description?: string; icon?: string }>',
|
|
35
|
+
required: true,
|
|
36
|
+
description: 'List of payment rails to display.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'selected',
|
|
40
|
+
type: 'string',
|
|
41
|
+
description: 'Currently selected option ID.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'display-style',
|
|
45
|
+
type: '"list" | "tabs" | "cards"',
|
|
46
|
+
defaultValue: 'list',
|
|
47
|
+
description: 'Controls the visual layout.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'disabled',
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
defaultValue: 'false',
|
|
53
|
+
description:
|
|
54
|
+
'Prevent users from switching rails (e.g., while submitting).',
|
|
55
|
+
},
|
|
56
|
+
]),
|
|
57
|
+
}}
|
|
58
|
+
/>
|
|
59
|
+
|
|
60
|
+
### Events
|
|
61
|
+
|
|
62
|
+
- `selection-changed`: Emits `{ optionId }` whenever customers pick a different rail.
|
|
63
|
+
|
|
64
|
+
### Public methods
|
|
65
|
+
|
|
66
|
+
1. `select(optionId)` – Programmatically activate a rail.
|
|
67
|
+
|
|
68
|
+
## Theming & Layout
|
|
69
|
+
|
|
70
|
+
<div
|
|
71
|
+
dangerouslySetInnerHTML={{
|
|
72
|
+
__html: PartsTable([
|
|
73
|
+
{
|
|
74
|
+
name: 'option',
|
|
75
|
+
description: 'Individual rail container (card/tab/list row).',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'option-label',
|
|
79
|
+
description: 'Typography target for the option label.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'option-description',
|
|
83
|
+
description: 'Secondary text area for additional guidance.',
|
|
84
|
+
},
|
|
85
|
+
]),
|
|
86
|
+
}}
|
|
87
|
+
/>
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: modular-checkout/sub-components/plaid-payment-method
|
|
3
|
+
title: Plaid Payment Method
|
|
4
|
+
description: Plaid-powered ACH rail for Modular Checkout with hosted Link flow.
|
|
5
|
+
sidebar_position: 23
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
PropsTable,
|
|
10
|
+
PartsTable,
|
|
11
|
+
getWebcomponentsVersion,
|
|
12
|
+
} from '@justifi/webcomponents/docs/helpers';
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Renders a radio input for selecting the Plaid bank account payment method, and orchestrates the Plaid Link flow to securely connect a bank account when selected.
|
|
17
|
+
|
|
18
|
+
This component is designed to be used within the `justifi-modular-checkout` and does not accept props directly. It relies on the shared state and context managed by `justifi-modular-checkout` (auth token, account ID, and checkout ID). Saving a new payment method is controlled via the `justifi-save-new-payment-method` checkbox when a payment method group is available.
|
|
19
|
+
|
|
20
|
+
It exposes no public properties for configuration, but does emit Plaid-specific events for error handling and recovery.
|
|
21
|
+
|
|
22
|
+
> Note: This component renders nothing and logs a console warning when bank account verification is not enabled for the checkout (`payment_settings.bank_account_verification !== true`).
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
<pre><code className="language-html">{`<!DOCTYPE html>
|
|
27
|
+
<html dir="ltr" lang="en">
|
|
28
|
+
|
|
29
|
+
<head>
|
|
30
|
+
<meta charset="utf-8" />
|
|
31
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0" />
|
|
32
|
+
<title>justifi-plaid-payment-method</title>
|
|
33
|
+
|
|
34
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.esm.js"></script>
|
|
35
|
+
|
|
36
|
+
<script
|
|
37
|
+
nomodule
|
|
38
|
+
src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.js"
|
|
39
|
+
></script>
|
|
40
|
+
|
|
41
|
+
<style>
|
|
42
|
+
/** These are the available parts for styling the component. */ ::part(text){' '}
|
|
43
|
+
{/* text styles */}
|
|
44
|
+
::part(text-danger) {/* text danger styles */}
|
|
45
|
+
::part(label) {/* label styles */}
|
|
46
|
+
::part(input-radio) {/* input radio styles */}
|
|
47
|
+
::part(input-radio-focused) {/* input radio focused styles */}
|
|
48
|
+
::part(input-radio-checked) {/* input radio checked styles */}
|
|
49
|
+
::part(input-radio-checked-focused) {/* input radio checked focused styles */}
|
|
50
|
+
::part(input-radio-invalid) {/* input radio invalid styles */}
|
|
51
|
+
</style>
|
|
52
|
+
|
|
53
|
+
</head>
|
|
54
|
+
|
|
55
|
+
<body>
|
|
56
|
+
<justifi-modular-checkout auth-token="authToken" checkout-id="ch_123">
|
|
57
|
+
<justifi-plaid-payment-method />
|
|
58
|
+
</justifi-modular-checkout>
|
|
59
|
+
</body>
|
|
60
|
+
|
|
61
|
+
<script>
|
|
62
|
+
(function() {
|
|
63
|
+
const modularCheckout = document.querySelector('justifi-modular-checkout');
|
|
64
|
+
|
|
65
|
+
modularCheckout?.addEventListener('plaidError', (event) => {
|
|
66
|
+
console.warn('Plaid error', event.detail);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
modularCheckout?.addEventListener('plaidErrorRecovered', (event) => {
|
|
70
|
+
console.log('Plaid recovered', event.detail);
|
|
71
|
+
});
|
|
72
|
+
})();
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
</html>`}</code></pre>
|
|
76
|
+
|
|
77
|
+
## Props, Events & Methods
|
|
78
|
+
|
|
79
|
+
<div
|
|
80
|
+
dangerouslySetInnerHTML={{
|
|
81
|
+
__html: PropsTable([
|
|
82
|
+
{
|
|
83
|
+
name: 'link-token',
|
|
84
|
+
type: 'string',
|
|
85
|
+
required: true,
|
|
86
|
+
description:
|
|
87
|
+
'Server-generated Plaid link token scoped to the current customer.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'locale',
|
|
91
|
+
type: 'string',
|
|
92
|
+
defaultValue: 'en-US',
|
|
93
|
+
description: 'Pass through to Plaid for language + formatting.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'theme',
|
|
97
|
+
type: '"dark" | "light"',
|
|
98
|
+
defaultValue: 'dark',
|
|
99
|
+
description: 'Controls Plaid Link UI theme.',
|
|
100
|
+
},
|
|
101
|
+
]),
|
|
102
|
+
}}
|
|
103
|
+
/>
|
|
104
|
+
|
|
105
|
+
### Events
|
|
106
|
+
|
|
107
|
+
- `plaid-success`: Provides the Plaid public token and metadata when customers finish linking.
|
|
108
|
+
- `plaid-exit`: Emits when Link closes without success and includes exit metadata.
|
|
109
|
+
- `error`: Surfaces integration failures (expired link token, network issues).
|
|
110
|
+
|
|
111
|
+
### Public methods
|
|
112
|
+
|
|
113
|
+
1. `open()` – Programmatically open Plaid Link (if you render a custom CTA).
|
|
114
|
+
2. `close()` – Force-close the Link flow.
|
|
115
|
+
|
|
116
|
+
## Theming & Layout
|
|
117
|
+
|
|
118
|
+
- Styling is limited to the wrapper since Plaid controls the Link modal.
|
|
119
|
+
- Provide fallback instructions for devices where Plaid is unavailable.
|
|
120
|
+
|
|
121
|
+
<div
|
|
122
|
+
dangerouslySetInnerHTML={{
|
|
123
|
+
__html: PartsTable([
|
|
124
|
+
{
|
|
125
|
+
name: 'text',
|
|
126
|
+
description: 'Text styles.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'text-danger',
|
|
130
|
+
description: 'Danger/error text styles.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: 'label',
|
|
134
|
+
description: 'Label styles.',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'input-radio',
|
|
138
|
+
description: 'Radio input styles.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'input-radio-focused',
|
|
142
|
+
description: 'Radio input styles when focused.',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'input-radio-checked',
|
|
146
|
+
description: 'Radio input styles when checked.',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'input-radio-checked-focused',
|
|
150
|
+
description: 'Radio input styles when checked and focused.',
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: 'input-radio-invalid',
|
|
154
|
+
description: 'Radio input styles when invalid.',
|
|
155
|
+
},
|
|
156
|
+
]),
|
|
157
|
+
}}
|
|
158
|
+
/>
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: modular-checkout/sub-components/saved-payment-methods
|
|
3
|
+
title: Saved Payment Methods
|
|
4
|
+
description: Saved payment selector for Modular Checkout that handles defaulting, deletion, and fallback to new entries.
|
|
5
|
+
sidebar_position: 26
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
PropsTable,
|
|
10
|
+
PartsTable,
|
|
11
|
+
getWebcomponentsVersion,
|
|
12
|
+
} from '@justifi/webcomponents/docs/helpers';
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Renders a radio input list of saved payment methods as part of a checkout flow.
|
|
17
|
+
|
|
18
|
+
> Note: This sub component will only display saved payment methods if a `payment_method_group_id` with associated payment methods was passed to the [create checkout](https://docs.justifi.tech/api-spec#tag/Checkouts/operation/CreateCheckout) API request.
|
|
19
|
+
|
|
20
|
+
This component is **designed to be used within** the `justifi-modular-checkout` and **does not accept props directly**. Instead, it relies on shared state passed through the Stencil Store, managed by the wrapper component.
|
|
21
|
+
|
|
22
|
+
**Authorization** and business context are also handled by `justifi-modular-checkout`, which manages authentication tokens and related configuration.
|
|
23
|
+
|
|
24
|
+
This component exposes **no public methods or properties** and is not intended for standalone use.
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
<pre><code className="language-html">{`<!DOCTYPE html>
|
|
29
|
+
<html dir="ltr" lang="en">
|
|
30
|
+
|
|
31
|
+
<head>
|
|
32
|
+
<meta charset="utf-8" />
|
|
33
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0" />
|
|
34
|
+
<title>justifi-saved-payment-methods</title>
|
|
35
|
+
|
|
36
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.esm.js"></script>
|
|
37
|
+
|
|
38
|
+
<script
|
|
39
|
+
nomodule
|
|
40
|
+
src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.js"
|
|
41
|
+
></script>
|
|
42
|
+
|
|
43
|
+
<style>
|
|
44
|
+
/** These are the available parts for styling the component. */ ::part(text){' '}
|
|
45
|
+
{
|
|
46
|
+
// text styles
|
|
47
|
+
}
|
|
48
|
+
::part(text-danger){' '}
|
|
49
|
+
{
|
|
50
|
+
// text danger styles
|
|
51
|
+
}
|
|
52
|
+
::part(label){' '}
|
|
53
|
+
{
|
|
54
|
+
// label styles
|
|
55
|
+
}
|
|
56
|
+
::part(input-radio){' '}
|
|
57
|
+
{
|
|
58
|
+
// input radio styles
|
|
59
|
+
}
|
|
60
|
+
::part(input-radio-focused){' '}
|
|
61
|
+
{
|
|
62
|
+
// input radio focused styles
|
|
63
|
+
}
|
|
64
|
+
::part(input-radio-checked){' '}
|
|
65
|
+
{
|
|
66
|
+
// input radio checked styles
|
|
67
|
+
}
|
|
68
|
+
::part(input-radio-checked-focused){' '}
|
|
69
|
+
{
|
|
70
|
+
// input radio checked focused styles
|
|
71
|
+
}
|
|
72
|
+
::part(input-radio-invalid){' '}
|
|
73
|
+
{
|
|
74
|
+
// input radio invalid styles
|
|
75
|
+
}
|
|
76
|
+
</style>
|
|
77
|
+
|
|
78
|
+
</head>
|
|
79
|
+
|
|
80
|
+
<body>
|
|
81
|
+
<justifi-modular-checkout auth-token="authToken" checkout-id="ch_123">
|
|
82
|
+
<justifi-saved-payment-methods />
|
|
83
|
+
</justifi-modular-checkout>
|
|
84
|
+
</body>
|
|
85
|
+
|
|
86
|
+
<script>
|
|
87
|
+
(function() {
|
|
88
|
+
const checkoutWrapper = document.querySelector('justifi-modular-checkout');
|
|
89
|
+
const submitButton = document.querySelector('#submit-button');
|
|
90
|
+
|
|
91
|
+
submitButton.addEventListener('click', () => {
|
|
92
|
+
checkoutWrapper.submitCheckout();
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
checkoutWrapper.addEventListener('error-event', (event) => {
|
|
96
|
+
console.error(event.detail);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
document.addEventListener('submit-event', (event) => {
|
|
100
|
+
console.log('Checkout completed successfully!', event.detail);
|
|
101
|
+
});
|
|
102
|
+
})();
|
|
103
|
+
</script>
|
|
104
|
+
|
|
105
|
+
</html>`}</code></pre>
|
|
106
|
+
|
|
107
|
+
## Props, Events & Methods
|
|
108
|
+
|
|
109
|
+
<div
|
|
110
|
+
dangerouslySetInnerHTML={{
|
|
111
|
+
__html: PropsTable([
|
|
112
|
+
{
|
|
113
|
+
name: 'customer-id',
|
|
114
|
+
type: 'string',
|
|
115
|
+
required: true,
|
|
116
|
+
description: 'Identifies which saved methods to fetch.',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'allow-delete',
|
|
120
|
+
type: 'boolean',
|
|
121
|
+
defaultValue: 'true',
|
|
122
|
+
description: 'Shows the delete button for each saved method.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'show-add-new',
|
|
126
|
+
type: 'boolean',
|
|
127
|
+
defaultValue: 'true',
|
|
128
|
+
description:
|
|
129
|
+
'Displays a control that reveals the card/bank forms when no method is selected.',
|
|
130
|
+
},
|
|
131
|
+
]),
|
|
132
|
+
}}
|
|
133
|
+
/>
|
|
134
|
+
|
|
135
|
+
### Events
|
|
136
|
+
|
|
137
|
+
- `selection-changed`: Emits when customers choose a different saved method.
|
|
138
|
+
- `delete-requested`: Fires when someone clicks delete on a saved method (confirm server-side permissions).
|
|
139
|
+
|
|
140
|
+
### Public methods
|
|
141
|
+
|
|
142
|
+
1. `clearSelection()` – Deselect saved methods so the new card/bank forms reappear.
|
|
143
|
+
|
|
144
|
+
## Theming & Layout
|
|
145
|
+
|
|
146
|
+
<div
|
|
147
|
+
dangerouslySetInnerHTML={{
|
|
148
|
+
__html: PartsTable([
|
|
149
|
+
{
|
|
150
|
+
name: 'text',
|
|
151
|
+
description: 'Text styles.',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'text-danger',
|
|
155
|
+
description: 'Danger/error text styles.',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'label',
|
|
159
|
+
description: 'Label styles.',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: 'input-radio',
|
|
163
|
+
description: 'Radio input styles.',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'input-radio-focused',
|
|
167
|
+
description: 'Radio input styles when focused.',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'input-radio-checked',
|
|
171
|
+
description: 'Radio input styles when checked.',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: 'input-radio-checked-focused',
|
|
175
|
+
description: 'Radio input styles when checked and focused.',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'input-radio-invalid',
|
|
179
|
+
description: 'Radio input styles when invalid.',
|
|
180
|
+
},
|
|
181
|
+
]),
|
|
182
|
+
}}
|
|
183
|
+
/>
|