@justifi/webcomponents 6.0.0-rc.1 → 6.0.0-rc.11

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.
Files changed (571) hide show
  1. package/dist/cjs/{Api-CPuq_15r.js → Api-DyimBzKT.js} +2 -2
  2. package/dist/cjs/{Refund-CqWNG8sx.js → Refund-BefKONu4.js} +6 -3
  3. package/dist/cjs/additional-questions-details_5.cjs.entry.js +3 -3
  4. package/dist/cjs/{badge-CMmPvqtE.js → badge-CcJ9H85-.js} +1 -1
  5. package/dist/cjs/bank-account-document-form-inputs_4.cjs.entry.js +7 -7
  6. package/dist/cjs/bank-account-form.cjs.entry.js +9 -6
  7. package/dist/cjs/business-details-core.cjs.entry.js +4 -4
  8. package/dist/cjs/{business.service-C3BdUPlm.js → business.service-BB6zl4Gc.js} +2 -2
  9. package/dist/cjs/{button-CfVQSysQ.js → button-DsHDMHaa.js} +1 -1
  10. package/dist/cjs/card-form.cjs.entry.js +9 -6
  11. package/dist/cjs/{check-pkg-version-D_lazhBQ.js → check-pkg-version-B85-DAz3.js} +9 -3
  12. package/dist/cjs/{checkout.service-B0ZmvWwI.js → checkout.service-B-R80p4f.js} +2 -2
  13. package/dist/cjs/checkout.store-CDQXaOcP.js +90 -0
  14. package/dist/cjs/checkouts-list-core.cjs.entry.js +11 -11
  15. package/dist/cjs/{payments-list-params-state-BNbT1fuJ.js → checkouts-list-params-state-Cewmin_p.js} +1 -1
  16. package/dist/cjs/{checkouts-table-UN5gPpQ_.js → checkouts-table-DjMdEiEW.js} +3 -3
  17. package/dist/cjs/{config-state-5xZf-jax.js → config-state-BBOZIS8x.js} +1 -1
  18. package/dist/cjs/custom-popper_2.cjs.entry.js +3 -3
  19. package/dist/cjs/{dispute.service-DsPEAcDn.js → dispute.service-B5tITFAh.js} +2 -2
  20. package/dist/cjs/form-alert_5.cjs.entry.js +1 -1
  21. package/dist/cjs/form-control-checkbox.cjs.entry.js +5 -5
  22. package/dist/cjs/form-control-date.cjs.entry.js +4 -4
  23. package/dist/cjs/{form-control-error-text-HM0zQerh.js → form-control-error-text-B-P5UDhm.js} +1 -1
  24. package/dist/cjs/form-control-file-v2_2.cjs.entry.js +2 -2
  25. package/dist/cjs/{form-control-help-text-5KIUw1IP.js → form-control-help-text-JoZjhb9m.js} +1 -1
  26. package/dist/cjs/form-control-help-text.cjs.entry.js +1 -1
  27. package/dist/cjs/form-control-monetary-provisioning.cjs.entry.js +3 -3
  28. package/dist/cjs/form-control-monetary.cjs.entry.js +4 -4
  29. package/dist/cjs/form-control-number-masked_2.cjs.entry.js +2 -2
  30. package/dist/cjs/form-control-number.cjs.entry.js +3 -3
  31. package/dist/cjs/form-control-radio.cjs.entry.js +3 -3
  32. package/dist/cjs/form-control-select_2.cjs.entry.js +4 -4
  33. package/dist/cjs/{get-payment-details-DtCXaIMx.js → get-payment-details-BfgRmNL4.js} +2 -2
  34. package/dist/cjs/{get-subaccounts-CwCH5rC8.js → get-subaccounts-Bnfv2tEN.js} +3 -3
  35. package/dist/cjs/gross-payment-chart-core.cjs.entry.js +5 -5
  36. package/dist/cjs/{header-1-DD41iNlG.js → header-1-DRA3f4Jh.js} +1 -1
  37. package/dist/cjs/{header-3-D9Wa0IfT.js → header-3-sOdOpfx3.js} +1 -1
  38. package/dist/cjs/hidden-input_2.cjs.entry.js +4 -4
  39. package/dist/cjs/{index-Yd9aLenr.js → index-B32W0A3m.js} +1 -1
  40. package/dist/cjs/{index-dm_GlYlb.js → index-C9hBD-32.js} +2 -2
  41. package/dist/cjs/index-D-dD-aC2.js +30 -0
  42. package/dist/cjs/index.cjs.js +8 -0
  43. package/dist/cjs/{insurance-state-Cyva9u6S.js → insurance-state-d2thhXUX.js} +2 -2
  44. package/dist/cjs/justifi-additional-questions-form-step-core_6.cjs.entry.js +7 -7
  45. package/dist/cjs/justifi-additional-questions-form-step_9.cjs.entry.js +8 -8
  46. package/dist/cjs/justifi-additional-statement_8.cjs.entry.js +9 -9
  47. package/dist/cjs/justifi-apple-pay.cjs.entry.js +782 -0
  48. package/dist/cjs/justifi-bank-account-billing-form-simple_9.cjs.entry.js +21 -19
  49. package/dist/cjs/justifi-business-details.cjs.entry.js +10 -10
  50. package/dist/cjs/justifi-business-form.cjs.entry.js +13 -13
  51. package/dist/cjs/justifi-business-representative-form-inputs.cjs.entry.js +1 -1
  52. package/dist/cjs/justifi-checkout-summary_7.cjs.entry.js +1421 -0
  53. package/dist/cjs/justifi-checkout.cjs.entry.js +26 -48
  54. package/dist/cjs/justifi-checkouts-list-filters.cjs.entry.js +8 -8
  55. package/dist/cjs/justifi-checkouts-list.cjs.entry.js +14 -14
  56. package/dist/cjs/justifi-config-provider.cjs.entry.js +3 -3
  57. package/dist/cjs/justifi-details.cjs.entry.js +2 -2
  58. package/dist/cjs/justifi-dispute-management-core.cjs.entry.js +2 -2
  59. package/dist/cjs/justifi-dispute-management.cjs.entry.js +10 -10
  60. package/dist/cjs/justifi-dispute-notification_3.cjs.entry.js +15 -15
  61. package/dist/cjs/justifi-gross-payment-chart.cjs.entry.js +9 -9
  62. package/dist/cjs/justifi-order-terminals.cjs.entry.js +13 -13
  63. package/dist/cjs/justifi-owner-form_3.cjs.entry.js +8 -8
  64. package/dist/cjs/justifi-payment-details.cjs.entry.js +11 -11
  65. package/dist/cjs/justifi-payment-provisioning-core.cjs.entry.js +3 -3
  66. package/dist/cjs/justifi-payment-provisioning.cjs.entry.js +9 -9
  67. package/dist/cjs/justifi-payment-transactions-list.cjs.entry.js +13 -13
  68. package/dist/cjs/justifi-payments-list-filters.cjs.entry.js +7 -7
  69. package/dist/cjs/justifi-payments-list.cjs.entry.js +14 -14
  70. package/dist/cjs/justifi-payout-details.cjs.entry.js +10 -10
  71. package/dist/cjs/justifi-payout-transactions-list.cjs.entry.js +13 -13
  72. package/dist/cjs/justifi-payouts-list-filters.cjs.entry.js +7 -7
  73. package/dist/cjs/justifi-payouts-list.cjs.entry.js +15 -15
  74. package/dist/cjs/justifi-refund-payment.cjs.entry.js +13 -13
  75. package/dist/cjs/justifi-saved-payment-method.cjs.entry.js +1 -1
  76. package/dist/cjs/justifi-season-interruption-insurance.cjs.entry.js +17 -12
  77. package/dist/cjs/justifi-skeleton.cjs.entry.js +3 -3
  78. package/dist/cjs/justifi-terminal-orders-list-filters.cjs.entry.js +9 -9
  79. package/dist/cjs/justifi-terminal-orders-list.cjs.entry.js +12 -12
  80. package/dist/cjs/justifi-terminals-list-filters.cjs.entry.js +8 -8
  81. package/dist/cjs/justifi-terminals-list.cjs.entry.js +14 -14
  82. package/dist/cjs/loader.cjs.js +2 -2
  83. package/dist/cjs/{package-Cp_7Ls2E.js → package-BL9z319y.js} +1 -1
  84. package/dist/cjs/pagination-menu.cjs.entry.js +1 -1
  85. package/dist/cjs/payment-details-core.cjs.entry.js +15 -15
  86. package/dist/cjs/payment-method-option.cjs.entry.js +3 -3
  87. package/dist/cjs/{payment.service-1H0VC3LV.js → payment.service-aR96UW5e.js} +2 -2
  88. package/dist/cjs/payments-list-core.cjs.entry.js +12 -12
  89. package/dist/cjs/{payouts-list-params-state-BNbT1fuJ.js → payments-list-params-state-Cewmin_p.js} +1 -1
  90. package/dist/cjs/{payments-status-PB63klt3.js → payments-status-DXRh_ekP.js} +2 -2
  91. package/dist/cjs/{payments-table-quF0NnsS.js → payments-table-BE8u0-i0.js} +3 -3
  92. package/dist/cjs/payout-details-core.cjs.entry.js +11 -11
  93. package/dist/cjs/{payout.service-CIZFU-hV.js → payout.service-6Cl_yXXQ.js} +2 -2
  94. package/dist/cjs/payouts-list-core.cjs.entry.js +12 -12
  95. package/dist/cjs/{checkouts-list-params-state-BNbT1fuJ.js → payouts-list-params-state-Cewmin_p.js} +1 -1
  96. package/dist/cjs/{payouts-status-Bk1JFzbP.js → payouts-status-DxTQZv3i.js} +2 -2
  97. package/dist/cjs/{payouts-table-D_CCTR_k.js → payouts-table-BbydhJUr.js} +3 -3
  98. package/dist/cjs/{skeleton-x-GSs3xk.js → skeleton-C7DQRD6r.js} +1 -1
  99. package/dist/cjs/{spinner-Kb1BFvnL.js → spinner-jmeA44Ee.js} +1 -1
  100. package/dist/cjs/{styled-host-CqQYxX-w.js → styled-host-BfVJlAsJ.js} +1 -1
  101. package/dist/cjs/{table-BJVUhh3s.js → table-Ccdrt0v_.js} +2 -2
  102. package/dist/cjs/table-filters-menu.cjs.entry.js +3 -3
  103. package/dist/cjs/terminal-orders-list-core.cjs.entry.js +11 -11
  104. package/dist/cjs/{terminal-orders-list-params-state-BNbT1fuJ.js → terminal-orders-list-params-state-Cewmin_p.js} +1 -1
  105. package/dist/cjs/{terminal-orders-table-0O5jtzYj.js → terminal-orders-table-B4HjERrK.js} +5 -5
  106. package/dist/cjs/terminal-quantity-selector.cjs.entry.js +2 -2
  107. package/dist/cjs/{terminal.service-DUlyMTrX.js → terminal.service-D1FAYZzd.js} +2 -2
  108. package/dist/cjs/terminals-list-core.cjs.entry.js +11 -11
  109. package/dist/cjs/terminals-list-params-state-Cewmin_p.js +22 -0
  110. package/dist/cjs/{terminals-table-C2BNRUS5.js → terminals-table-C79Xc4FI.js} +3 -3
  111. package/dist/cjs/{utils-Df-pajL7.js → utils-Bzyj4qWe.js} +1 -1
  112. package/dist/cjs/{utils-BaGF9XIe.js → utils-ChCUZgUy.js} +6 -0
  113. package/dist/cjs/webcomponents.cjs.js +3 -3
  114. package/dist/collection/api/ApplePay.js +119 -0
  115. package/dist/collection/api/Payment.js +5 -2
  116. package/dist/collection/api/index.js +1 -2
  117. package/dist/collection/api/services/apple-pay.service.js +293 -0
  118. package/dist/collection/api/services/plaid.service.js +20 -0
  119. package/dist/collection/assets/plaid-icon.svg +1 -0
  120. package/dist/collection/collection-manifest.json +4 -2
  121. package/dist/collection/components/checkout/bank-account-form/bank-account-form.js +6 -3
  122. package/dist/collection/components/checkout/card-form/card-form.js +6 -3
  123. package/dist/collection/components/checkout/checkout.js +17 -39
  124. package/dist/collection/components/checkout/save-new-payment-method.js +26 -1
  125. package/dist/collection/components/checkouts-list/checkouts-list-core.js +1 -1
  126. package/dist/collection/components/checkouts-list/checkouts-list-filters.js +1 -1
  127. package/dist/collection/components/checkouts-list/checkouts-list.js +1 -1
  128. package/dist/collection/components/dispute-management/dispute-management-core.js +1 -1
  129. package/dist/collection/components/dispute-management/dispute-management.js +1 -1
  130. package/dist/collection/components/dispute-management/dispute-notification.js +1 -1
  131. package/dist/collection/components/dispute-management/dispute-response/additional-statement.js +1 -1
  132. package/dist/collection/components/dispute-management/dispute-response/cancellation-policy.js +1 -1
  133. package/dist/collection/components/dispute-management/dispute-response/customer-details.js +1 -1
  134. package/dist/collection/components/dispute-management/dispute-response/dispute-response-core.js +1 -1
  135. package/dist/collection/components/dispute-management/dispute-response/dispute-response.js +1 -1
  136. package/dist/collection/components/dispute-management/dispute-response/duplicate-charge.js +1 -1
  137. package/dist/collection/components/dispute-management/dispute-response/electronic-evidence.js +1 -1
  138. package/dist/collection/components/dispute-management/dispute-response/product-or-service.js +1 -1
  139. package/dist/collection/components/dispute-management/dispute-response/refund-policy.js +1 -1
  140. package/dist/collection/components/dispute-management/dispute-response/shipping-details.js +1 -1
  141. package/dist/collection/components/filters/table-filters-menu.js +1 -1
  142. package/dist/collection/components/gross-payment-chart/gross-payment-chart-core.js +1 -1
  143. package/dist/collection/components/insurance/season-interruption/season-interruption-insurance.js +4 -0
  144. package/dist/collection/components/modular-checkout/ModularCheckout.js +28 -0
  145. package/dist/collection/components/modular-checkout/modular-checkout.js +263 -150
  146. package/dist/collection/components/modular-checkout/sub-components/apple-pay-skeleton.js +10 -0
  147. package/dist/collection/components/modular-checkout/sub-components/apple-pay.js +509 -0
  148. package/dist/collection/components/modular-checkout/sub-components/bank-account.js +2 -2
  149. package/dist/collection/components/modular-checkout/sub-components/card-form.js +2 -2
  150. package/dist/collection/components/modular-checkout/sub-components/payment-method-option.js +1 -1
  151. package/dist/collection/components/modular-checkout/sub-components/plaid-payment-method.js +853 -0
  152. package/dist/collection/components/modular-checkout/sub-components/plaid-payment-method.test.js +125 -0
  153. package/dist/collection/components/modular-checkout/sub-components/saved-payment-methods.js +7 -5
  154. package/dist/collection/components/modular-checkout/sub-components/sezzle-payment-method.js +25 -8
  155. package/dist/collection/components/modular-checkout/sub-components/summary.js +1 -1
  156. package/dist/collection/components/order-terminals/order-terminals.js +1 -1
  157. package/dist/collection/components/order-terminals/terminal-quantity-selector/terminal-quantity-selector.js +1 -1
  158. package/dist/collection/components/payment-details/payment-details-core.js +8 -8
  159. package/dist/collection/components/payment-transactions-list/payment-transactions-list.js +1 -1
  160. package/dist/collection/components/payments-list/payments-list-core.js +1 -1
  161. package/dist/collection/components/payments-list/payments-list-filters.js +2 -2
  162. package/dist/collection/components/payments-list/payments-list.js +1 -1
  163. package/dist/collection/components/payout-details/payout-details-core.js +3 -3
  164. package/dist/collection/components/payout-transactions-list/payout-transactions-list.js +1 -1
  165. package/dist/collection/components/payouts-list/payouts-list-core.js +1 -1
  166. package/dist/collection/components/payouts-list/payouts-list-filters.js +2 -2
  167. package/dist/collection/components/payouts-list/payouts-list.js +1 -1
  168. package/dist/collection/components/terminal-orders-list/terminal-orders-list-core.js +1 -1
  169. package/dist/collection/components/terminal-orders-list/terminal-orders-list-filters.js +2 -2
  170. package/dist/collection/components/terminal-orders-list/terminal-orders-list.js +1 -1
  171. package/dist/collection/components/terminals-list/terminals-list-core.js +1 -1
  172. package/dist/collection/components/terminals-list/terminals-list-filters.js +1 -1
  173. package/dist/collection/components/terminals-list/terminals-list.js +1 -1
  174. package/dist/collection/components/tokenize-payment-method/tokenize-payment-method.js +82 -34
  175. package/dist/collection/index.js +1 -0
  176. package/dist/collection/store/checkout.store.js +48 -2
  177. package/dist/collection/ui-components/apple-pay-button.js +146 -0
  178. package/dist/collection/ui-components/custom-popper/custom-popper.js +2 -2
  179. package/dist/collection/ui-components/form/form-control-checkbox.js +2 -2
  180. package/dist/collection/ui-components/form/form-control-date.js +2 -2
  181. package/dist/collection/ui-components/form/form-control-radio.js +5 -5
  182. package/dist/collection/ui-components/form/form-control-select.js +2 -2
  183. package/dist/collection/ui-components/shadow-dom-components/justifi-radio-list-item.js +4 -4
  184. package/dist/collection/utils/check-pkg-version.js +6 -0
  185. package/dist/collection/utils/utils.js +5 -0
  186. package/dist/docs.json +1061 -212
  187. package/dist/esm/{Api-N_veT2p6.js → Api-DAWuvzbl.js} +2 -2
  188. package/dist/esm/{Refund-Di6J0oN2.js → Refund-CVh70dXA.js} +7 -4
  189. package/dist/esm/additional-questions-details_5.entry.js +4 -4
  190. package/dist/esm/{badge-D_mzXSCQ.js → badge-DSYSJcRy.js} +2 -2
  191. package/dist/esm/bank-account-document-form-inputs_4.entry.js +8 -8
  192. package/dist/esm/bank-account-form.entry.js +10 -7
  193. package/dist/esm/business-details-core.entry.js +5 -5
  194. package/dist/esm/{business.service-Bdvhdc_d.js → business.service-cQrH5BqF.js} +2 -2
  195. package/dist/esm/{button-CeR8qVS3.js → button-CpllL0At.js} +2 -2
  196. package/dist/esm/card-form.entry.js +10 -7
  197. package/dist/esm/{check-pkg-version-Bb69ihTN.js → check-pkg-version-CeFbumLK.js} +9 -3
  198. package/dist/esm/{checkout.service-XgGFa7H8.js → checkout.service-Bbgi1I6V.js} +2 -2
  199. package/dist/esm/checkout.store-CKOWX2jL.js +85 -0
  200. package/dist/esm/checkouts-list-core.entry.js +12 -12
  201. package/dist/esm/{checkouts-list-params-state-SMXQIZTt.js → checkouts-list-params-state-D8tzsGR_.js} +1 -1
  202. package/dist/esm/{checkouts-table-CFZYoYjn.js → checkouts-table-Ddf2I-Ul.js} +4 -4
  203. package/dist/esm/{config-state-BrllxiM0.js → config-state-DZeVYerv.js} +1 -1
  204. package/dist/esm/custom-popper_2.entry.js +4 -4
  205. package/dist/esm/{dispute.service-CKPcmwhH.js → dispute.service-CrZsNDW8.js} +2 -2
  206. package/dist/esm/form-alert_5.entry.js +2 -2
  207. package/dist/esm/form-control-checkbox.entry.js +6 -6
  208. package/dist/esm/form-control-date.entry.js +5 -5
  209. package/dist/esm/{form-control-error-text-D3ZwkOv-.js → form-control-error-text-R7U07nTg.js} +2 -2
  210. package/dist/esm/form-control-file-v2_2.entry.js +3 -3
  211. package/dist/esm/{form-control-help-text-C39ZW65w.js → form-control-help-text-CRLH-2f7.js} +2 -2
  212. package/dist/esm/form-control-help-text.entry.js +1 -1
  213. package/dist/esm/form-control-monetary-provisioning.entry.js +4 -4
  214. package/dist/esm/form-control-monetary.entry.js +5 -5
  215. package/dist/esm/form-control-number-masked_2.entry.js +3 -3
  216. package/dist/esm/form-control-number.entry.js +4 -4
  217. package/dist/esm/form-control-radio.entry.js +4 -4
  218. package/dist/esm/form-control-select_2.entry.js +5 -5
  219. package/dist/esm/{get-payment-details-Dt-dr16k.js → get-payment-details-0VzpMNY9.js} +2 -2
  220. package/dist/esm/{get-subaccounts-BsoVLANw.js → get-subaccounts-9UMbyFiT.js} +3 -3
  221. package/dist/esm/gross-payment-chart-core.entry.js +6 -6
  222. package/dist/esm/{header-1-E-hEi3wF.js → header-1-3M9If0gM.js} +2 -2
  223. package/dist/esm/{header-3-Dm7M85kz.js → header-3-CWa41YWq.js} +2 -2
  224. package/dist/esm/hidden-input_2.entry.js +5 -5
  225. package/dist/esm/{index-B9me4yN2.js → index-B_KxSZIF.js} +1 -1
  226. package/dist/esm/{index-kpoIU4v_.js → index-Bn7inNWG.js} +2 -2
  227. package/dist/esm/index-CbL73B6U.js +30 -0
  228. package/dist/esm/index.js +1 -1
  229. package/dist/esm/{insurance-state-CB4l8sOv.js → insurance-state-CTalqbNa.js} +3 -3
  230. package/dist/esm/justifi-additional-questions-form-step-core_6.entry.js +8 -8
  231. package/dist/esm/justifi-additional-questions-form-step_9.entry.js +9 -9
  232. package/dist/esm/justifi-additional-statement_8.entry.js +10 -10
  233. package/dist/esm/justifi-apple-pay.entry.js +780 -0
  234. package/dist/esm/justifi-bank-account-billing-form-simple_9.entry.js +22 -20
  235. package/dist/esm/justifi-business-details.entry.js +11 -11
  236. package/dist/esm/justifi-business-form.entry.js +14 -14
  237. package/dist/esm/justifi-business-representative-form-inputs.entry.js +2 -2
  238. package/dist/esm/justifi-checkout-summary_7.entry.js +1413 -0
  239. package/dist/esm/justifi-checkout.entry.js +26 -48
  240. package/dist/esm/justifi-checkouts-list-filters.entry.js +9 -9
  241. package/dist/esm/justifi-checkouts-list.entry.js +15 -15
  242. package/dist/esm/justifi-config-provider.entry.js +3 -3
  243. package/dist/esm/justifi-details.entry.js +3 -3
  244. package/dist/esm/justifi-dispute-management-core.entry.js +2 -2
  245. package/dist/esm/justifi-dispute-management.entry.js +10 -10
  246. package/dist/esm/justifi-dispute-notification_3.entry.js +16 -16
  247. package/dist/esm/justifi-gross-payment-chart.entry.js +10 -10
  248. package/dist/esm/justifi-order-terminals.entry.js +14 -14
  249. package/dist/esm/justifi-owner-form_3.entry.js +9 -9
  250. package/dist/esm/justifi-payment-details.entry.js +12 -12
  251. package/dist/esm/justifi-payment-provisioning-core.entry.js +4 -4
  252. package/dist/esm/justifi-payment-provisioning.entry.js +9 -9
  253. package/dist/esm/justifi-payment-transactions-list.entry.js +14 -14
  254. package/dist/esm/justifi-payments-list-filters.entry.js +8 -8
  255. package/dist/esm/justifi-payments-list.entry.js +15 -15
  256. package/dist/esm/justifi-payout-details.entry.js +11 -11
  257. package/dist/esm/justifi-payout-transactions-list.entry.js +14 -14
  258. package/dist/esm/justifi-payouts-list-filters.entry.js +8 -8
  259. package/dist/esm/justifi-payouts-list.entry.js +16 -16
  260. package/dist/esm/justifi-refund-payment.entry.js +14 -14
  261. package/dist/esm/justifi-saved-payment-method.entry.js +2 -2
  262. package/dist/esm/justifi-season-interruption-insurance.entry.js +18 -13
  263. package/dist/esm/justifi-skeleton.entry.js +4 -4
  264. package/dist/esm/justifi-terminal-orders-list-filters.entry.js +10 -10
  265. package/dist/esm/justifi-terminal-orders-list.entry.js +13 -13
  266. package/dist/esm/justifi-terminals-list-filters.entry.js +9 -9
  267. package/dist/esm/justifi-terminals-list.entry.js +15 -15
  268. package/dist/esm/loader.js +3 -3
  269. package/dist/esm/{package-O3LY2Da6.js → package-CxLeEBSa.js} +1 -1
  270. package/dist/esm/pagination-menu.entry.js +2 -2
  271. package/dist/esm/{parts-CfF8KKwx.js → parts-RvUQ__Pq.js} +1 -1
  272. package/dist/esm/payment-details-core.entry.js +16 -16
  273. package/dist/esm/payment-method-option.entry.js +4 -4
  274. package/dist/esm/{payment.service-BWO84KlP.js → payment.service-TxyxCg0E.js} +2 -2
  275. package/dist/esm/payments-list-core.entry.js +13 -13
  276. package/dist/esm/{payments-list-params-state-SMXQIZTt.js → payments-list-params-state-D8tzsGR_.js} +1 -1
  277. package/dist/esm/{payments-status-XoZrlbiZ.js → payments-status-5orNU2Rd.js} +2 -2
  278. package/dist/esm/{payments-table-Dh4P9mTb.js → payments-table-gkJV5GNK.js} +4 -4
  279. package/dist/esm/payout-details-core.entry.js +12 -12
  280. package/dist/esm/{payout.service-Cld6TS5W.js → payout.service-BOwZ4wWh.js} +2 -2
  281. package/dist/esm/payouts-list-core.entry.js +13 -13
  282. package/dist/esm/{payouts-list-params-state-SMXQIZTt.js → payouts-list-params-state-D8tzsGR_.js} +1 -1
  283. package/dist/esm/{payouts-status-Qm2jZG1-.js → payouts-status-CZPwa2AE.js} +2 -2
  284. package/dist/esm/{payouts-table-DMVAZp-r.js → payouts-table-0PtktGRd.js} +4 -4
  285. package/dist/esm/{skeleton-DrHwsgs_.js → skeleton-qMb0_Cjy.js} +2 -2
  286. package/dist/esm/{spinner-XBq6mVJW.js → spinner-DUzyWLhj.js} +2 -2
  287. package/dist/esm/{styled-host-B_XBaM7z.js → styled-host-CTAGIN84.js} +1 -1
  288. package/dist/esm/{table-qqt2Ew5y.js → table-Br3n9Xu-.js} +3 -3
  289. package/dist/esm/table-filters-menu.entry.js +4 -4
  290. package/dist/esm/terminal-orders-list-core.entry.js +12 -12
  291. package/dist/esm/{terminal-orders-list-params-state-SMXQIZTt.js → terminal-orders-list-params-state-D8tzsGR_.js} +1 -1
  292. package/dist/esm/{terminal-orders-table-BN4Co4T8.js → terminal-orders-table-DTBSIMlJ.js} +6 -6
  293. package/dist/esm/terminal-quantity-selector.entry.js +3 -3
  294. package/dist/esm/{terminal.service-DmYCUQcA.js → terminal.service-E6dZlM43.js} +2 -2
  295. package/dist/esm/terminals-list-core.entry.js +12 -12
  296. package/dist/esm/terminals-list-params-state-D8tzsGR_.js +16 -0
  297. package/dist/esm/{terminals-table-C8LczeG_.js → terminals-table-TGUKTi7I.js} +4 -4
  298. package/dist/esm/{utils-lb8p1Exq.js → utils-BscIVFn8.js} +6 -1
  299. package/dist/esm/{utils-kWaZhFAd.js → utils-Dg6gMUTv.js} +2 -2
  300. package/dist/esm/webcomponents.js +4 -4
  301. package/dist/module/Analytics.js +6 -0
  302. package/dist/module/ModularCheckout.js +30 -0
  303. package/dist/module/Refund.js +5 -2
  304. package/dist/module/additional-statement.js +1 -1
  305. package/dist/module/bank-account-form.js +5 -2
  306. package/dist/module/bank-account.js +2 -2
  307. package/dist/module/cancellation-policy.js +1 -1
  308. package/dist/module/card-form.js +5 -2
  309. package/dist/module/card-form2.js +2 -2
  310. package/dist/module/checkout.store.js +49 -2
  311. package/dist/module/checkouts-list-core2.js +1 -1
  312. package/dist/module/custom-popper2.js +2 -2
  313. package/dist/module/customer-details.js +1 -1
  314. package/dist/module/dispute-management-core.js +1 -1
  315. package/dist/module/dispute-notification.js +1 -1
  316. package/dist/module/dispute-response-core.js +1 -1
  317. package/dist/module/dispute-response.js +1 -1
  318. package/dist/module/duplicate-charge.js +1 -1
  319. package/dist/module/electronic-evidence.js +1 -1
  320. package/dist/module/form-control-checkbox2.js +2 -2
  321. package/dist/module/form-control-date2.js +2 -2
  322. package/dist/module/form-control-radio2.js +3 -3
  323. package/dist/module/form-control-select2.js +2 -2
  324. package/dist/module/gross-payment-chart-core2.js +2 -2
  325. package/dist/module/index.js +1 -0
  326. package/dist/module/justifi-apple-pay.d.ts +11 -0
  327. package/dist/module/justifi-apple-pay.js +811 -0
  328. package/dist/module/justifi-checkout.js +63 -75
  329. package/dist/module/justifi-checkouts-list-filters.js +1 -1
  330. package/dist/module/justifi-checkouts-list.js +1 -1
  331. package/dist/module/justifi-dispute-management.js +1 -1
  332. package/dist/module/justifi-order-terminals.js +2 -2
  333. package/dist/module/justifi-payment-transactions-list.js +1 -1
  334. package/dist/module/justifi-payments-list-filters.js +2 -2
  335. package/dist/module/justifi-payments-list.js +1 -1
  336. package/dist/module/justifi-payout-transactions-list.js +1 -1
  337. package/dist/module/justifi-payouts-list-filters.js +2 -2
  338. package/dist/module/justifi-payouts-list.js +1 -1
  339. package/dist/module/justifi-plaid-payment-method.d.ts +11 -0
  340. package/dist/module/justifi-plaid-payment-method.js +6 -0
  341. package/dist/module/justifi-radio-list-item2.js +2 -2
  342. package/dist/module/justifi-season-interruption-insurance.js +5 -1
  343. package/dist/module/justifi-terminal-orders-list-filters.js +2 -2
  344. package/dist/module/justifi-terminal-orders-list.js +1 -1
  345. package/dist/module/justifi-terminals-list-filters.js +1 -1
  346. package/dist/module/justifi-terminals-list.js +1 -1
  347. package/dist/module/modular-checkout.js +214 -106
  348. package/dist/module/package.js +1 -1
  349. package/dist/module/payment-details-core2.js +8 -8
  350. package/dist/module/payment-method-option.js +1 -1
  351. package/dist/module/payments-list-core2.js +1 -1
  352. package/dist/module/payout-details-core2.js +3 -3
  353. package/dist/module/payouts-list-core2.js +1 -1
  354. package/dist/module/plaid-payment-method.js +635 -0
  355. package/dist/module/plaid.service.js +26 -0
  356. package/dist/module/product-or-service.js +1 -1
  357. package/dist/module/refund-policy.js +1 -1
  358. package/dist/module/save-new-payment-method.js +3 -1
  359. package/dist/module/saved-payment-methods.js +7 -5
  360. package/dist/module/sezzle-payment-method.js +14 -22
  361. package/dist/module/shipping-details.js +1 -1
  362. package/dist/module/summary.js +1 -1
  363. package/dist/module/table-filters-menu2.js +1 -1
  364. package/dist/module/terminal-orders-list-core2.js +1 -1
  365. package/dist/module/terminal-quantity-selector2.js +1 -1
  366. package/dist/module/terminals-list-core2.js +2 -2
  367. package/dist/module/tokenize-payment-method.js +45 -34
  368. package/dist/module/utils2.js +6 -1
  369. package/dist/types/api/ApplePay.d.ts +196 -0
  370. package/dist/types/api/Checkout.d.ts +9 -14
  371. package/dist/types/api/Payment.d.ts +4 -3
  372. package/dist/types/api/index.d.ts +2 -2
  373. package/dist/types/api/services/apple-pay.service.d.ts +55 -0
  374. package/dist/types/api/services/plaid.service.d.ts +12 -0
  375. package/dist/types/components/checkout/bank-account-form/bank-account-form.d.ts +1 -0
  376. package/dist/types/components/checkout/card-form/card-form.d.ts +1 -0
  377. package/dist/types/components/checkout/checkout.d.ts +6 -7
  378. package/dist/types/components/checkout/save-new-payment-method.d.ts +1 -0
  379. package/dist/types/components/modular-checkout/ModularCheckout.d.ts +31 -0
  380. package/dist/types/components/modular-checkout/modular-checkout.d.ts +14 -6
  381. package/dist/types/components/modular-checkout/sub-components/apple-pay-skeleton.d.ts +6 -0
  382. package/dist/types/components/modular-checkout/sub-components/apple-pay.d.ts +39 -0
  383. package/dist/types/components/modular-checkout/sub-components/plaid-payment-method.d.ts +79 -0
  384. package/dist/types/components/modular-checkout/sub-components/plaid-payment-method.test.d.ts +1 -0
  385. package/dist/types/components/modular-checkout/sub-components/saved-payment-methods.d.ts +1 -1
  386. package/dist/types/components/modular-checkout/sub-components/sezzle-payment-method.d.ts +1 -1
  387. package/dist/types/components/tokenize-payment-method/tokenize-payment-method.d.ts +8 -6
  388. package/dist/types/components.d.ts +182 -19
  389. package/dist/types/index.d.ts +3 -0
  390. package/dist/types/store/checkout.store.d.ts +16 -3
  391. package/dist/types/ui-components/apple-pay-button.d.ts +17 -0
  392. package/dist/types/ui-components/form/form-control-radio.d.ts +1 -1
  393. package/dist/types/ui-components/shadow-dom-components/justifi-radio-list-item.d.ts +1 -1
  394. package/dist/types/utils/utils.d.ts +1 -0
  395. package/dist/webcomponents/index.esm.js +1 -0
  396. package/dist/webcomponents/p-06283633.entry.js +1 -0
  397. package/dist/webcomponents/{p-Dvxpy_P1.js → p-0Om7jLBs.js} +1 -1
  398. package/dist/webcomponents/{p-283cd78b.entry.js → p-0ff04742.entry.js} +1 -1
  399. package/dist/webcomponents/p-19c7e6a5.entry.js +1 -0
  400. package/dist/webcomponents/p-2430761e.entry.js +1 -0
  401. package/dist/webcomponents/{p-f01953ea.entry.js → p-2953b537.entry.js} +1 -1
  402. package/dist/webcomponents/{p-f47095cd.entry.js → p-29d05416.entry.js} +1 -1
  403. package/dist/webcomponents/p-2b39ab97.entry.js +1 -0
  404. package/dist/webcomponents/{p-7c51805a.entry.js → p-2d14f144.entry.js} +1 -1
  405. package/dist/webcomponents/{p-1d53f0b8.entry.js → p-2f658457.entry.js} +1 -1
  406. package/dist/webcomponents/{p-08ea8974.entry.js → p-33311d41.entry.js} +1 -1
  407. package/dist/webcomponents/p-35ae3497.entry.js +1 -0
  408. package/dist/webcomponents/{p-6849bf8e.entry.js → p-3fe420c4.entry.js} +1 -1
  409. package/dist/webcomponents/p-402caa84.entry.js +1 -0
  410. package/dist/webcomponents/p-406ebea6.entry.js +1 -0
  411. package/dist/webcomponents/p-42d4ea58.entry.js +1 -0
  412. package/dist/webcomponents/{p-4ba144ac.entry.js → p-431ba789.entry.js} +1 -1
  413. package/dist/webcomponents/{p-a8205044.entry.js → p-44450a94.entry.js} +1 -1
  414. package/dist/webcomponents/{p-28c7bef7.entry.js → p-46b6142b.entry.js} +4 -4
  415. package/dist/webcomponents/p-48e32b40.entry.js +1 -0
  416. package/dist/webcomponents/p-4c3d8cef.entry.js +1 -0
  417. package/dist/webcomponents/p-4e1653c2.entry.js +1 -0
  418. package/dist/webcomponents/{p-df199396.entry.js → p-522e7b24.entry.js} +1 -1
  419. package/dist/webcomponents/p-52cbd667.entry.js +1 -0
  420. package/dist/webcomponents/p-537aa971.entry.js +1 -0
  421. package/dist/webcomponents/{p-ae4297dd.entry.js → p-53daaca6.entry.js} +1 -1
  422. package/dist/webcomponents/{p-7322c86e.entry.js → p-5c17360c.entry.js} +1 -1
  423. package/dist/webcomponents/{p-6e18d13f.entry.js → p-613421d4.entry.js} +1 -1
  424. package/dist/webcomponents/p-62d3d62c.entry.js +1 -0
  425. package/dist/webcomponents/p-63300c63.entry.js +1 -0
  426. package/dist/webcomponents/p-65ed60bf.entry.js +1 -0
  427. package/dist/webcomponents/{p-bea4309d.entry.js → p-67332ff8.entry.js} +1 -1
  428. package/dist/webcomponents/{p-48bccf3b.entry.js → p-70f51444.entry.js} +1 -1
  429. package/dist/webcomponents/p-7186f4a7.entry.js +1 -0
  430. package/dist/webcomponents/p-71f9c48a.entry.js +1 -0
  431. package/dist/webcomponents/p-778e9fe9.entry.js +1 -0
  432. package/dist/webcomponents/p-77948b46.entry.js +1 -0
  433. package/dist/webcomponents/{p-b0bfa20f.entry.js → p-7cf87637.entry.js} +1 -1
  434. package/dist/webcomponents/{p-I8XpD1TX.js → p-7s1gsXM5.js} +1 -1
  435. package/dist/webcomponents/{p-3d85d046.entry.js → p-80331983.entry.js} +1 -1
  436. package/dist/webcomponents/{p-79055216.entry.js → p-8687e5d6.entry.js} +1 -1
  437. package/dist/webcomponents/{p-a7d5e434.entry.js → p-8d743490.entry.js} +1 -1
  438. package/dist/webcomponents/{p-15777cfe.entry.js → p-8ff839a4.entry.js} +1 -1
  439. package/dist/webcomponents/{p-57143978.entry.js → p-95cbb655.entry.js} +1 -1
  440. package/dist/webcomponents/{p-904a95e5.entry.js → p-9be67b19.entry.js} +1 -1
  441. package/dist/webcomponents/p-9c997d0b.entry.js +1 -0
  442. package/dist/webcomponents/{p-c3a2c619.entry.js → p-9c9a4eb7.entry.js} +1 -1
  443. package/dist/webcomponents/p-9d37b85f.entry.js +1 -0
  444. package/dist/webcomponents/p-9fc567d8.entry.js +1 -0
  445. package/dist/webcomponents/p-B71k50jz.js +1 -0
  446. package/dist/webcomponents/p-BF4U0yVj.js +1 -0
  447. package/dist/webcomponents/{p-zdIeCUeh.js → p-BHf9IqGw.js} +1 -1
  448. package/dist/webcomponents/p-BQ2TIFoY.js +1 -0
  449. package/dist/webcomponents/p-BSt6p1oq.js +1 -0
  450. package/dist/webcomponents/p-BY1mRAvj.js +1 -0
  451. package/dist/webcomponents/{p-YND5pTuF.js → p-Bb-6bNcq.js} +1 -1
  452. package/dist/webcomponents/p-BbZwa5UI.js +1 -0
  453. package/dist/webcomponents/p-BdKWuCys.js +1 -0
  454. package/dist/webcomponents/p-BfM6X7lF.js +1 -0
  455. package/dist/webcomponents/{p-BbYVgLcf.js → p-BjVfIXWC.js} +1 -1
  456. package/dist/webcomponents/{p-kpoIU4v_.js → p-Bn7inNWG.js} +1 -1
  457. package/dist/webcomponents/{p-BisQ61nK.js → p-BsGE9UDv.js} +1 -1
  458. package/dist/webcomponents/{p-BeszVz87.js → p-C5id7s_l.js} +1 -1
  459. package/dist/webcomponents/{p-CsNubTqD.js → p-CAJnQLZF.js} +1 -1
  460. package/dist/webcomponents/{p-Bz164TKZ.js → p-CB0mCq1M.js} +1 -1
  461. package/dist/webcomponents/p-CY7N7-0P.js +1 -0
  462. package/dist/webcomponents/p-CaAVuW6B.js +1 -0
  463. package/dist/webcomponents/p-Cb0FhuyU.js +1 -0
  464. package/dist/webcomponents/p-CbL73B6U.js +1 -0
  465. package/dist/webcomponents/p-CpaS1Lex.js +1 -0
  466. package/dist/webcomponents/p-CxLeEBSa.js +1 -0
  467. package/dist/webcomponents/p-DD0Mvpeu.js +1 -0
  468. package/dist/webcomponents/p-DDUmOl3v.js +1 -0
  469. package/dist/webcomponents/p-DIDloHpm.js +1 -0
  470. package/dist/webcomponents/{p-UD2JhYS2.js → p-DK2sRMlx.js} +1 -1
  471. package/dist/webcomponents/{p-DO3INvI2.js → p-DNo0OPOP.js} +1 -1
  472. package/dist/webcomponents/{p-BTkXk7ol.js → p-DRXvcLy9.js} +1 -1
  473. package/dist/webcomponents/p-Da3idOSV.js +1 -0
  474. package/dist/webcomponents/p-Dgflaz6J.js +1 -0
  475. package/dist/webcomponents/{p-9y5MOK55.js → p-DhGNCW2f.js} +1 -1
  476. package/dist/webcomponents/p-DsZZxRXY.js +1 -0
  477. package/dist/webcomponents/{p-CRFzwZW6.js → p-DxqCFDtF.js} +1 -1
  478. package/dist/webcomponents/p-ED_TzwCp.js +1 -0
  479. package/dist/webcomponents/p-JyHlIFWl.js +1 -0
  480. package/dist/webcomponents/{p-CfF8KKwx.js → p-RvUQ__Pq.js} +1 -1
  481. package/dist/webcomponents/{p-DWUnL_zj.js → p-Wh1V0gvF.js} +1 -1
  482. package/dist/webcomponents/{p-36d72e2d.entry.js → p-a6748a1d.entry.js} +1 -1
  483. package/dist/webcomponents/{p-ded22005.entry.js → p-a7ac285c.entry.js} +1 -1
  484. package/dist/webcomponents/{p-40ba49e4.entry.js → p-aa6194ef.entry.js} +1 -1
  485. package/dist/webcomponents/{p-463ae23a.entry.js → p-abbf14b5.entry.js} +1 -1
  486. package/dist/webcomponents/p-bc45aa92.entry.js +1 -0
  487. package/dist/webcomponents/p-bc81d165.entry.js +1 -0
  488. package/dist/webcomponents/p-c4c88660.entry.js +1 -0
  489. package/dist/webcomponents/p-c8bed49a.entry.js +1 -0
  490. package/dist/webcomponents/{p-5e10aa65.entry.js → p-d46dbb83.entry.js} +1 -1
  491. package/dist/webcomponents/{p-cebe360b.entry.js → p-e13d6ed3.entry.js} +1 -1
  492. package/dist/webcomponents/p-e6d1ed81.entry.js +1 -0
  493. package/dist/webcomponents/p-e7b66120.entry.js +1 -0
  494. package/dist/webcomponents/p-e9a5c837.entry.js +1 -0
  495. package/dist/webcomponents/p-eP3fmhta.js +1 -0
  496. package/dist/webcomponents/p-eb2d9e5b.entry.js +1 -0
  497. package/dist/webcomponents/{p-d77908ca.entry.js → p-ed901f9d.entry.js} +1 -1
  498. package/dist/webcomponents/{p-c5b48e8d.entry.js → p-f1cba43c.entry.js} +1 -1
  499. package/dist/webcomponents/{p-828a61b9.entry.js → p-f3c312b1.entry.js} +1 -1
  500. package/dist/webcomponents/p-f499a8de.entry.js +1 -0
  501. package/dist/webcomponents/{p-818f51fd.entry.js → p-f680e617.entry.js} +1 -1
  502. package/dist/webcomponents/p-f849a34e.entry.js +1 -0
  503. package/dist/webcomponents/p-fa1884b4.entry.js +1 -0
  504. package/dist/webcomponents/p-sw5RO19U.js +1 -0
  505. package/dist/webcomponents/{p-BNz6wy4f.js → p-xuDuc7qr.js} +1 -1
  506. package/dist/webcomponents/p-z-5r0gWn.js +1 -0
  507. package/dist/webcomponents/webcomponents.esm.js +1 -1
  508. package/package.json +2 -2
  509. package/dist/cjs/checkout.store-CV_fuGQw.js +0 -39
  510. package/dist/cjs/justifi-checkout-summary_6.cjs.entry.js +0 -698
  511. package/dist/cjs/terminals-list-params-state-BNbT1fuJ.js +0 -22
  512. package/dist/esm/checkout.store-B60siz2l.js +0 -36
  513. package/dist/esm/justifi-checkout-summary_6.entry.js +0 -691
  514. package/dist/esm/terminals-list-params-state-SMXQIZTt.js +0 -16
  515. package/dist/webcomponents/p-0932f6a9.entry.js +0 -1
  516. package/dist/webcomponents/p-09e768fe.entry.js +0 -1
  517. package/dist/webcomponents/p-0dcc83ac.entry.js +0 -1
  518. package/dist/webcomponents/p-131d799c.entry.js +0 -1
  519. package/dist/webcomponents/p-1bdce018.entry.js +0 -1
  520. package/dist/webcomponents/p-1f8cd44e.entry.js +0 -1
  521. package/dist/webcomponents/p-22be0859.entry.js +0 -1
  522. package/dist/webcomponents/p-2f31a4e5.entry.js +0 -1
  523. package/dist/webcomponents/p-3a4ca4df.entry.js +0 -1
  524. package/dist/webcomponents/p-424f491c.entry.js +0 -1
  525. package/dist/webcomponents/p-466f33d7.entry.js +0 -1
  526. package/dist/webcomponents/p-57802e57.entry.js +0 -1
  527. package/dist/webcomponents/p-5rVtZ2GJ.js +0 -1
  528. package/dist/webcomponents/p-77515be6.entry.js +0 -1
  529. package/dist/webcomponents/p-7WIgS5RM.js +0 -1
  530. package/dist/webcomponents/p-89e27079.entry.js +0 -1
  531. package/dist/webcomponents/p-8f0339de.entry.js +0 -1
  532. package/dist/webcomponents/p-9106fd74.entry.js +0 -1
  533. package/dist/webcomponents/p-9b75aced.entry.js +0 -1
  534. package/dist/webcomponents/p-BC8YDY7M.js +0 -1
  535. package/dist/webcomponents/p-BVD7g3cE.js +0 -1
  536. package/dist/webcomponents/p-Bb6FBEPP.js +0 -1
  537. package/dist/webcomponents/p-Bpcb3SsP.js +0 -1
  538. package/dist/webcomponents/p-Bt388eye.js +0 -1
  539. package/dist/webcomponents/p-BySyDTv5.js +0 -1
  540. package/dist/webcomponents/p-C1fMfnu0.js +0 -1
  541. package/dist/webcomponents/p-CCME-fyU.js +0 -1
  542. package/dist/webcomponents/p-CLwzqWk2.js +0 -1
  543. package/dist/webcomponents/p-CVQyw7ao.js +0 -1
  544. package/dist/webcomponents/p-C_CXv7AN.js +0 -1
  545. package/dist/webcomponents/p-CwZKT93w.js +0 -1
  546. package/dist/webcomponents/p-D599ZMGU.js +0 -1
  547. package/dist/webcomponents/p-DD74a16D.js +0 -1
  548. package/dist/webcomponents/p-DaDsBt65.js +0 -1
  549. package/dist/webcomponents/p-JgbsbAhz.js +0 -1
  550. package/dist/webcomponents/p-O3LY2Da6.js +0 -1
  551. package/dist/webcomponents/p-WEguiGt1.js +0 -1
  552. package/dist/webcomponents/p-a4172773.entry.js +0 -1
  553. package/dist/webcomponents/p-ae5a3c2a.entry.js +0 -1
  554. package/dist/webcomponents/p-ba8ae31f.entry.js +0 -1
  555. package/dist/webcomponents/p-be06d86a.entry.js +0 -1
  556. package/dist/webcomponents/p-d0e24727.entry.js +0 -1
  557. package/dist/webcomponents/p-dd257e60.entry.js +0 -1
  558. package/dist/webcomponents/p-dd689b5e.entry.js +0 -1
  559. package/dist/webcomponents/p-dd6d6ddb.entry.js +0 -1
  560. package/dist/webcomponents/p-dfd7c212.entry.js +0 -1
  561. package/dist/webcomponents/p-e830a580.entry.js +0 -1
  562. package/dist/webcomponents/p-e859ece8.entry.js +0 -1
  563. package/dist/webcomponents/p-eaea7cc1.entry.js +0 -1
  564. package/dist/webcomponents/p-f3a757b2.entry.js +0 -1
  565. package/dist/webcomponents/p-fa33df9f.entry.js +0 -1
  566. package/dist/webcomponents/p-ff3377e7.entry.js +0 -1
  567. package/dist/webcomponents/p-ff869ded.entry.js +0 -1
  568. package/dist/webcomponents/p-pska2q1M.js +0 -1
  569. package/dist/webcomponents/p-qMrd7_Gp.js +0 -1
  570. package/dist/webcomponents/p-vRhNRfmB.js +0 -1
  571. package/dist/webcomponents/p-zrUQD0Wr.js +0 -1
@@ -0,0 +1,1413 @@
1
+ import { r as registerInstance, h, c as createEvent, H as Host, g as getElement } from './index-Bn7inNWG.js';
2
+ import { z as text, r as radioListItem } from './parts-RvUQ__Pq.js';
3
+ import { f as formatCurrency } from './utils-BscIVFn8.js';
4
+ import { c as checkoutStore, a as onAnyChange, g as getAvailablePaymentMethodTypes, o as onChange } from './checkout.store-CKOWX2jL.js';
5
+ import { S as StyledHost } from './styled-host-CTAGIN84.js';
6
+ import './event-types-CZfYo5-1.js';
7
+ import { H as Header1 } from './header-1-3M9If0gM.js';
8
+ import { H as Header2, b as insuranceValuesOn, h as hasInsuranceValueChanged, i as insuranceValues } from './insurance-state-CTalqbNa.js';
9
+ import { H as Header3 } from './header-3-CWa41YWq.js';
10
+ import { J as JustifiAnalytics, c as checkPkgVersion } from './check-pkg-version-CeFbumLK.js';
11
+ import './config-state-DZeVYerv.js';
12
+ import './dinero-HXpYMWUU.js';
13
+ import { C as ComponentErrorSeverity, a as ComponentErrorCodes, b as ComponentErrorMessages } from './ComponentError-Cjcsf8ku.js';
14
+ import { P as PaymentMethodTypes, I as ICheckoutStatus } from './Refund-CVh70dXA.js';
15
+ import './Pagination-CLHwhyvu.js';
16
+ import './Business-BCoP0TAV.js';
17
+ import './Dispute-BH0Xfn-F.js';
18
+ import { g as getErrorCode, a as getErrorMessage } from './utils-BeQLScSm.js';
19
+ import { C as CheckoutService } from './checkout.service-Bbgi1I6V.js';
20
+ import { A as Api } from './Api-DAWuvzbl.js';
21
+ import { a as PAYMENT_MODE, b as PAYMENT_METHOD_TYPES, P as PAYMENT_METHODS } from './index-CbL73B6U.js';
22
+ import { C as CardBrandLabels } from './payment-method-option-utils-lUHAQVFl.js';
23
+ import './index-B_KxSZIF.js';
24
+ import './package-CxLeEBSa.js';
25
+ import './helpers-Mu7LQT-w.js';
26
+ import './state-options-BX8GieXu.js';
27
+
28
+ const Summary = class {
29
+ constructor(hostRef) {
30
+ registerInstance(this, hostRef);
31
+ }
32
+ render() {
33
+ return (h(StyledHost, { key: '2644d423d844136d86f7f6b1b80aa98b224146ac' }, h("section", { key: '2017758b2eb8bf6483ca4765e5f18279ff2f6de7' }, h("div", { key: '029f98c45be1e9c807eef1dbf1508e231c7215d1' }, h("div", { key: 'db1b7e220f5afd230ea1fcf5dc818f96d03f68b9', part: text }, checkoutStore === null || checkoutStore === void 0 ? void 0 : checkoutStore.paymentDescription), h("div", { key: 'b9d401af17512a5f5ef24350f8c9e9ad1163d83e' }, h("span", { key: '5d7dcef6b946ae455cb2b8e57089f0365b8bb52b', part: text }, "Total"), "\u00A0", h("span", { key: 'cfc8fc46c2f87011de758ccce92a9f4bfbe2ba88', part: text }, formatCurrency(+(checkoutStore === null || checkoutStore === void 0 ? void 0 : checkoutStore.totalAmount))))))));
34
+ }
35
+ };
36
+
37
+ const Header = class {
38
+ constructor(hostRef) {
39
+ registerInstance(this, hostRef);
40
+ this.levels = {
41
+ h1: Header1,
42
+ h2: Header2,
43
+ h3: Header3,
44
+ };
45
+ this.level = 'h1';
46
+ }
47
+ render() {
48
+ const HeaderComponent = this.levels[this.level];
49
+ return (h(StyledHost, { key: 'ae04a67a1eaf95d6d093fef23911ac4eb1523cfe' }, h(HeaderComponent, { key: '51b27dd180d113ebe9ac52f7ff10c494926f7cdf', text: this.text, class: this.class })));
50
+ }
51
+ };
52
+
53
+ const makeGetCheckout = ({ authToken, checkoutId, service }) => async ({ onSuccess, onError }) => {
54
+ var _a;
55
+ try {
56
+ const response = await service.fetchCheckout(authToken, checkoutId);
57
+ if (!response.error) {
58
+ const checkout = response.data;
59
+ onSuccess({ checkout });
60
+ }
61
+ else {
62
+ const responseError = getErrorMessage(response.error);
63
+ const code = getErrorCode((_a = response.error) === null || _a === void 0 ? void 0 : _a.code);
64
+ return onError({
65
+ error: responseError,
66
+ code,
67
+ severity: ComponentErrorSeverity.ERROR,
68
+ });
69
+ }
70
+ }
71
+ catch (error) {
72
+ const code = getErrorCode(error === null || error === void 0 ? void 0 : error.code);
73
+ return onError({
74
+ error: error.message || error,
75
+ code,
76
+ severity: ComponentErrorSeverity.ERROR,
77
+ });
78
+ }
79
+ };
80
+ const makeCheckoutComplete = ({ authToken, checkoutId, service }) => async ({ payment, onSuccess, onError }) => {
81
+ var _a;
82
+ try {
83
+ const response = await service.complete(authToken, checkoutId, payment);
84
+ if (!response.error) {
85
+ const checkout = response.data;
86
+ onSuccess({ checkout });
87
+ }
88
+ else {
89
+ const responseError = getErrorMessage(response.error);
90
+ const code = getErrorCode((_a = response.error) === null || _a === void 0 ? void 0 : _a.code);
91
+ return onError({
92
+ error: responseError,
93
+ code,
94
+ severity: ComponentErrorSeverity.ERROR,
95
+ });
96
+ }
97
+ }
98
+ catch (error) {
99
+ const code = getErrorCode(error === null || error === void 0 ? void 0 : error.code);
100
+ return onError({
101
+ error: error.message || error,
102
+ code,
103
+ severity: ComponentErrorSeverity.ERROR,
104
+ });
105
+ }
106
+ };
107
+
108
+ const api = Api();
109
+ class PlaidService {
110
+ async getLinkToken(authToken, accountId, checkoutId, signal) {
111
+ const endpoint = `plaid/${accountId}/link`;
112
+ const body = { checkout_id: checkoutId };
113
+ return api.post({ endpoint, body, authToken, signal });
114
+ }
115
+ async tokenizeBankAccount(authToken, accountId, publicToken, linkTokenId, paymentMethodGroupId, signal) {
116
+ const endpoint = `plaid/${accountId}/tokenize`;
117
+ const body = { public_token: publicToken };
118
+ if (linkTokenId) {
119
+ body.link_token_id = linkTokenId;
120
+ }
121
+ if (paymentMethodGroupId) {
122
+ body.payment_method_group_id = paymentMethodGroupId;
123
+ }
124
+ return api.post({ endpoint, body, authToken, signal });
125
+ }
126
+ }
127
+
128
+ const ModularCheckout = class {
129
+ constructor(hostRef) {
130
+ registerInstance(this, hostRef);
131
+ this.errorEvent = createEvent(this, "error-event");
132
+ this.submitEvent = createEvent(this, "submit-event");
133
+ this.checkoutChangedEvent = createEvent(this, "checkout-changed");
134
+ this.plaidService = new PlaidService();
135
+ this.handleApplePayCompleted = (event) => {
136
+ const { success, token, paymentMethodId, error } = event.detail;
137
+ if (success && token) {
138
+ checkoutStore.paymentToken = paymentMethodId;
139
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.applePay };
140
+ this.submitCheckout();
141
+ }
142
+ else {
143
+ console.error("Apple Pay completed but failed:", error);
144
+ this.errorEvent.emit({
145
+ message: (error === null || error === void 0 ? void 0 : error.message) || "Apple Pay payment failed",
146
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
147
+ severity: ComponentErrorSeverity.ERROR,
148
+ });
149
+ }
150
+ };
151
+ this.handleApplePayError = (event) => {
152
+ const { error } = event.detail;
153
+ console.error("Apple Pay error:", error);
154
+ this.errorEvent.emit({
155
+ message: error || "Apple Pay error occurred",
156
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
157
+ severity: ComponentErrorSeverity.ERROR,
158
+ });
159
+ };
160
+ this.handleApplePayCancelled = () => {
161
+ checkoutStore.paymentToken = undefined;
162
+ checkoutStore.selectedPaymentMethod = undefined;
163
+ };
164
+ }
165
+ connectedCallback() {
166
+ this.observer = new MutationObserver(() => {
167
+ this.queryFormRefs();
168
+ this.setupApplePayListeners(); // set up again listeners when DOM changes
169
+ });
170
+ this.observer.observe(this.hostEl, {
171
+ childList: true,
172
+ subtree: true,
173
+ });
174
+ checkoutStore.checkoutId = this.checkoutId;
175
+ const config = {
176
+ authToken: this.authToken,
177
+ checkoutId: this.checkoutId,
178
+ service: new CheckoutService(),
179
+ };
180
+ this.getCheckout = makeGetCheckout(config);
181
+ this.completeCheckout = makeCheckoutComplete(config);
182
+ // Emit checkout-changed whenever any store key changes
183
+ onAnyChange(() => {
184
+ this.emitCheckoutChanged();
185
+ });
186
+ }
187
+ componentWillLoad() {
188
+ this.analytics = new JustifiAnalytics(this);
189
+ checkPkgVersion();
190
+ checkoutStore.authToken = this.authToken;
191
+ this.fetchCheckout();
192
+ // Refresh the checkout data when insurance values actually change (not on initial load)
193
+ insuranceValuesOn("set", (key) => {
194
+ const value = insuranceValues[key];
195
+ if (value !== undefined && hasInsuranceValueChanged(key, value)) {
196
+ this.fetchCheckout();
197
+ }
198
+ });
199
+ }
200
+ componentDidLoad() {
201
+ this.queryFormRefs();
202
+ this.setupApplePayListeners();
203
+ }
204
+ disconnectedCallback() {
205
+ var _a;
206
+ (_a = this.observer) === null || _a === void 0 ? void 0 : _a.disconnect();
207
+ this.removeApplePayListeners();
208
+ }
209
+ fetchCheckout() {
210
+ if (!this.authToken || !this.checkoutId) {
211
+ this.errorEvent.emit({
212
+ message: ComponentErrorMessages.NOT_AUTHENTICATED,
213
+ errorCode: ComponentErrorCodes.NOT_AUTHENTICATED,
214
+ severity: ComponentErrorSeverity.ERROR,
215
+ });
216
+ return;
217
+ }
218
+ if (this.getCheckout) {
219
+ this.getCheckout({
220
+ onSuccess: ({ checkout }) => {
221
+ this.updateStore(checkout);
222
+ if (checkout.status === ICheckoutStatus.completed) {
223
+ this.errorEvent.emit({
224
+ message: ComponentErrorMessages.CHECKOUT_ALREADY_COMPLETED,
225
+ errorCode: ComponentErrorCodes.CHECKOUT_ALREADY_COMPLETED,
226
+ severity: ComponentErrorSeverity.ERROR,
227
+ });
228
+ return;
229
+ }
230
+ else if (checkout.status === ICheckoutStatus.expired) {
231
+ this.errorEvent.emit({
232
+ message: ComponentErrorMessages.CHECKOUT_EXPIRED,
233
+ errorCode: ComponentErrorCodes.CHECKOUT_EXPIRED,
234
+ severity: ComponentErrorSeverity.ERROR,
235
+ });
236
+ return;
237
+ }
238
+ },
239
+ onError: (error) => {
240
+ this.errorEvent.emit({
241
+ message: error.message,
242
+ errorCode: ComponentErrorCodes.FETCH_ERROR,
243
+ severity: ComponentErrorSeverity.ERROR,
244
+ });
245
+ },
246
+ });
247
+ }
248
+ }
249
+ updateStore(checkout) {
250
+ var _a, _b, _c, _d, _e;
251
+ checkoutStore.accountId = checkout.account_id;
252
+ checkoutStore.paymentMethods = checkout.payment_methods;
253
+ checkoutStore.paymentMethodGroupId = checkout.payment_method_group_id;
254
+ checkoutStore.paymentDescription = checkout.payment_description;
255
+ checkoutStore.totalAmount = checkout.total_amount;
256
+ checkoutStore.paymentAmount = checkout.payment_amount;
257
+ checkoutStore.bnplEnabled = checkout.payment_settings.bnpl_payments;
258
+ checkoutStore.insuranceEnabled = checkout.payment_settings.insurance_payments;
259
+ checkoutStore.bankAccountVerification = (_a = checkout.payment_settings) === null || _a === void 0 ? void 0 : _a.bank_account_verification;
260
+ checkoutStore.bnplProviderClientId = (_b = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _b === void 0 ? void 0 : _b.provider_client_id;
261
+ checkoutStore.bnplProviderMode = (_c = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _c === void 0 ? void 0 : _c.provider_mode;
262
+ checkoutStore.bnplProviderApiVersion = (_d = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _d === void 0 ? void 0 : _d.provider_api_version;
263
+ checkoutStore.bnplProviderCheckoutUrl =
264
+ (_e = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _e === void 0 ? void 0 : _e.provider_checkout_url;
265
+ }
266
+ emitCheckoutChanged() {
267
+ const detail = {
268
+ availablePaymentMethodTypes: getAvailablePaymentMethodTypes(),
269
+ selectedPaymentMethod: checkoutStore.selectedPaymentMethod,
270
+ savedPaymentMethods: checkoutStore.paymentMethods,
271
+ };
272
+ this.checkoutChangedEvent.emit(detail);
273
+ }
274
+ queryFormRefs() {
275
+ this.billingFormRef = this.hostEl.querySelector("justifi-billing-form, justifi-bank-account-billing-form-simple, justifi-card-billing-form-simple, justifi-billing-form-full");
276
+ this.applePayRef = this.hostEl.querySelector("justifi-apple-pay");
277
+ this.paymentMethodFormRef =
278
+ this.hostEl.querySelector('justifi-card-form, justifi-bank-account-form, justifi-tokenize-payment-method');
279
+ this.insuranceFormRef = this.hostEl.querySelector('justifi-season-interruption-insurance');
280
+ }
281
+ setupApplePayListeners() {
282
+ if (this.applePayRef) {
283
+ this.applePayRef.addEventListener("applePayCompleted", this.handleApplePayCompleted);
284
+ this.applePayRef.addEventListener("applePayError", this.handleApplePayError);
285
+ this.applePayRef.addEventListener("applePayCancelled", this.handleApplePayCancelled);
286
+ }
287
+ }
288
+ removeApplePayListeners() {
289
+ if (this.applePayRef) {
290
+ this.applePayRef.removeEventListener("applePayCompleted", this.handleApplePayCompleted);
291
+ this.applePayRef.removeEventListener("applePayError", this.handleApplePayError);
292
+ this.applePayRef.removeEventListener("applePayCancelled", this.handleApplePayCancelled);
293
+ }
294
+ }
295
+ async tokenizePaymentMethod(tokenizeArgs) {
296
+ var _a, _b, _c;
297
+ const billingInfoValues = (_b = (await ((_a = this.billingFormRef) === null || _a === void 0 ? void 0 : _a.getValues()))) !== null && _b !== void 0 ? _b : {};
298
+ const combinedBillingInfo = Object.assign(Object.assign({}, tokenizeArgs), billingInfoValues);
299
+ const paymentMethodMetadata = Object.assign({ accountId: checkoutStore.accountId, payment_method_group_id: undefined }, combinedBillingInfo);
300
+ if (checkoutStore.savePaymentMethod) {
301
+ paymentMethodMetadata.payment_method_group_id =
302
+ checkoutStore.paymentMethodGroupId;
303
+ }
304
+ const tokenizeResult = await ((_c = this.paymentMethodFormRef) === null || _c === void 0 ? void 0 : _c.tokenize({
305
+ clientId: this.authToken,
306
+ paymentMethodMetadata,
307
+ account: checkoutStore.accountId,
308
+ }));
309
+ if (tokenizeResult.error) {
310
+ return tokenizeResult;
311
+ }
312
+ checkoutStore.paymentToken = tokenizeResult.id;
313
+ return tokenizeResult.id;
314
+ }
315
+ // set the selected payment method to the checkout store from outside the component
316
+ async setSelectedPaymentMethod(paymentMethod) {
317
+ checkoutStore.selectedPaymentMethod = paymentMethod;
318
+ checkoutStore.paymentToken = paymentMethod.id || undefined;
319
+ }
320
+ // getAvailablePaymentMethods removed in favor of checkout-changed event
321
+ // if validation fails, the error will be emitted by the component
322
+ async validate() {
323
+ const promises = [];
324
+ if (checkoutStore.insuranceEnabled && this.insuranceFormRef) {
325
+ promises.push(this.insuranceFormRef.validate());
326
+ }
327
+ const isNewCard = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.card && checkoutStore.selectedPaymentMethod.id === undefined;
328
+ const isNewBankAccount = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.bankAccount && checkoutStore.selectedPaymentMethod.id === undefined;
329
+ // For new card/bank account, validate payment method + billing.
330
+ if (isNewCard ||
331
+ isNewBankAccount) {
332
+ if (this.paymentMethodFormRef)
333
+ promises.push(this.paymentMethodFormRef.validate());
334
+ if (this.billingFormRef)
335
+ promises.push(this.billingFormRef.validate());
336
+ }
337
+ if (promises.length === 0)
338
+ return true;
339
+ try {
340
+ const results = await Promise.all(promises);
341
+ // Normalize different validator return shapes:
342
+ // - boolean -> use it directly
343
+ // - object -> look for isValid; treat missing isValid as falsey only if explicitly false
344
+ const resultsAreValid = results.every(r => typeof r === 'boolean' ? r : (r === null || r === void 0 ? void 0 : r.isValid) !== false);
345
+ if (!resultsAreValid) {
346
+ this.errorEvent.emit({
347
+ message: 'Validation error',
348
+ errorCode: ComponentErrorCodes.VALIDATION_ERROR,
349
+ severity: ComponentErrorSeverity.ERROR,
350
+ });
351
+ return false;
352
+ }
353
+ return true;
354
+ }
355
+ catch (_a) {
356
+ // If any validator throws/rejects, consider the whole validation failed.
357
+ return false;
358
+ }
359
+ }
360
+ async submitCheckout(submitCheckoutArgs) {
361
+ var _a;
362
+ const isValid = await this.validate();
363
+ const isNewCard = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.card &&
364
+ checkoutStore.selectedPaymentMethod.id === undefined;
365
+ const isNewBankAccount = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.bankAccount &&
366
+ checkoutStore.selectedPaymentMethod.id === undefined;
367
+ const isPlaid = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.plaid;
368
+ const shouldTokenize = isNewCard || isNewBankAccount;
369
+ if (shouldTokenize) {
370
+ const tokenizeResult = await this.tokenizePaymentMethod(submitCheckoutArgs);
371
+ if (tokenizeResult === null || tokenizeResult === void 0 ? void 0 : tokenizeResult.error) {
372
+ this.errorEvent.emit({
373
+ message: tokenizeResult.error.message,
374
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
375
+ severity: ComponentErrorSeverity.ERROR,
376
+ });
377
+ return;
378
+ }
379
+ }
380
+ // For Plaid, perform exchange at submit time using stored public token and link token id
381
+ if (isPlaid && !checkoutStore.paymentToken) {
382
+ const publicToken = checkoutStore.plaidPublicToken;
383
+ const linkTokenId = checkoutStore.plaidLinkTokenId;
384
+ if (!publicToken) {
385
+ this.errorEvent.emit({
386
+ message: 'Missing Plaid public token. Please connect your bank.',
387
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
388
+ severity: ComponentErrorSeverity.ERROR,
389
+ });
390
+ return;
391
+ }
392
+ try {
393
+ const response = await this.plaidService.tokenizeBankAccount(checkoutStore.authToken, checkoutStore.accountId, publicToken, linkTokenId || undefined, checkoutStore.savePaymentMethod ? checkoutStore.paymentMethodGroupId : undefined);
394
+ if (response === null || response === void 0 ? void 0 : response.error) {
395
+ this.errorEvent.emit({
396
+ message: typeof response.error === 'string' ? response.error : response.error.message || 'Failed to tokenize bank account',
397
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
398
+ severity: ComponentErrorSeverity.ERROR,
399
+ });
400
+ return;
401
+ }
402
+ const paymentMethod = response === null || response === void 0 ? void 0 : response.data;
403
+ const token = ((_a = paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.bank_account) === null || _a === void 0 ? void 0 : _a.token) || (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.token) || (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.id);
404
+ checkoutStore.paymentToken = token;
405
+ }
406
+ catch (err) {
407
+ this.errorEvent.emit({
408
+ message: (err === null || err === void 0 ? void 0 : err.message) || 'Plaid exchange error',
409
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
410
+ severity: ComponentErrorSeverity.ERROR,
411
+ });
412
+ return;
413
+ }
414
+ }
415
+ if (!isValid) {
416
+ this.errorEvent.emit({
417
+ message: "Please fill in all required fields.",
418
+ errorCode: ComponentErrorCodes.VALIDATION_ERROR,
419
+ severity: ComponentErrorSeverity.ERROR,
420
+ });
421
+ return;
422
+ }
423
+ if (!checkoutStore.paymentToken) {
424
+ this.errorEvent.emit({
425
+ message: 'Payment token not found.',
426
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
427
+ severity: ComponentErrorSeverity.ERROR,
428
+ });
429
+ return;
430
+ }
431
+ let payment;
432
+ const mapTypeToPaymentMode = (type) => {
433
+ switch (type) {
434
+ case PaymentMethodTypes.card:
435
+ case PaymentMethodTypes.bankAccount:
436
+ case PaymentMethodTypes.plaid:
437
+ return PAYMENT_MODE.ECOM;
438
+ case PaymentMethodTypes.sezzle:
439
+ return PAYMENT_MODE.BNPL;
440
+ case PaymentMethodTypes.applePay:
441
+ return PAYMENT_MODE.APPLE_PAY;
442
+ default:
443
+ return undefined;
444
+ }
445
+ };
446
+ payment = {
447
+ payment_mode: mapTypeToPaymentMode(checkoutStore.selectedPaymentMethod.type),
448
+ payment_token: checkoutStore.paymentToken,
449
+ };
450
+ this.completeCheckout({
451
+ payment,
452
+ onSuccess: ({ checkout }) => {
453
+ this.submitEvent.emit({
454
+ checkout,
455
+ message: "Checkout completed successfully",
456
+ });
457
+ },
458
+ onError: (error) => {
459
+ this.errorEvent.emit({
460
+ message: error.message,
461
+ errorCode: ComponentErrorCodes.COMPLETE_CHECKOUT_ERROR,
462
+ severity: ComponentErrorSeverity.ERROR,
463
+ });
464
+ },
465
+ });
466
+ }
467
+ render() {
468
+ return h(Host, { key: '6d77d6adf39e471c1fac481dee997b71ebc01e24' });
469
+ }
470
+ get hostEl() { return getElement(this); }
471
+ };
472
+
473
+ const plaidIconSvg = 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjggMjkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImNzcy0xcmRhajhtIj48ZyBmaWxsPSIjMTExIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yNS43NjI5IDI2LjI2MjhMMjggMTcuNTMwOUwyNC45NjkxIDE0LjUwMDFMMjcuOTk5OSAxMS40NjkxTDI1Ljc2MjggMi43MzcwNkwxNy4wMzA5IDAuNUwxNC4wMDAxIDMuNTMxTDEwLjk2OSAwLjUwMDE0TDIuMjM3MDYgMi43MzczNEwwIDExLjQ2OTFMMy4wMzEyOCAxNC40OTk5TDAuMDAwMTQgMTcuNTMxTDIuMjM3MiAyNi4yNjI5TDEwLjk2OTEgMjguNUwxNC4wMDAxIDI1LjQ2OUwxNy4wMzEgMjguNDk5OUwyNS43NjI5IDI2LjI2MjhaTTE1LjczMjEgMjMuNzM3MUwxOC42MTg2IDIwLjg1MDVMMjIuMjkxMiAyNC41MjMzTDE3LjY5NTYgMjUuNzAwN0wxNS43MzIxIDIzLjczNzFaTTExLjExMzYgOS44ODE1NEwxNC4wMDAzIDYuOTk1MDJMMTYuODg2OCA5Ljg4MTRMMTQuMDAwMSAxMi43Njc5TDExLjExMzYgOS44ODE1NFpNMTIuMjY4MiAxNC41TDkuMzgxNTQgMTcuMzg2NUw2LjQ5NTAyIDE0LjVMOS4zODE1NCAxMS42MTM1TDEyLjI2ODIgMTQuNVpNMTguNjE4NyAxMS42MTMzTDIxLjUwNTMgMTQuNUwxOC42MTg2IDE3LjM4NjVMMTUuNzMyMSAxNC41TDE4LjYxODcgMTEuNjEzM1pNMTYuODg2NyAxOS4xMTg2TDE0LjAwMDEgMjIuMDA1MUwxMS4xMTM1IDE5LjExODVMMTQuMDAwMSAxNi4yMzE5TDE2Ljg4NjcgMTkuMTE4NlpNMTAuMzA0NCAyNS43MDA3TDUuNzA4NjQgMjQuNTIzM0w5LjM4MTU0IDIwLjg1MDRMMTIuMjY4MiAyMy43MzcxTDEwLjMwNDQgMjUuNzAwN1pNNC43NjMwOCAxNi4yMzE5TDcuNjQ5NiAxOS4xMTg1TDMuOTc2NyAyMi43OTE0TDIuNzk5MyAxOC4xOTU3TDQuNzYzMDggMTYuMjMxOVpNMy45NzY3IDYuMjA4MzZMNy42NDk3NCA5Ljg4MTRMNC43NjMwOCAxMi43NjgxTDIuNzk5MyAxMC44MDQxTDMuOTc2NyA2LjIwODM2Wk0xMi4yNjgzIDUuMjYyOTRMOS4zODE2OCA4LjE0OTZMNS43MDg5MiA0LjQ3NjdMMTAuMzA0NyAzLjI5OTNMMTIuMjY4MyA1LjI2Mjk0Wk0xNy42OTU5IDMuMjk5M0wyMi4yOTE1IDQuNDc2N0wxOC42MTg2IDguMTQ5NDZMMTUuNzMyMSA1LjI2Mjk0TDE3LjY5NTkgMy4yOTkzWk0yMy4yMzcyIDEyLjc2ODFMMjAuMzUwNSA5Ljg4MTRMMjQuMDIzMyA2LjIwODc4TDI1LjIwMDcgMTAuODA0NkwyMy4yMzcyIDEyLjc2ODFaTTI0LjAyMzMgMjIuNzkxNEwyMC4zNTA1IDE5LjExODZMMjMuMjM3MiAxNi4yMzIxTDI1LjIwMDcgMTguMTk1N0wyNC4wMjMzIDIyLjc5MTRaIj48L3BhdGg+PC9nPjwvc3ZnPgo=';
474
+
475
+ // Plaid-specific error codes
476
+ var PlaidErrorCodes;
477
+ (function (PlaidErrorCodes) {
478
+ PlaidErrorCodes["PLAID_SDK_LOAD_FAILED"] = "plaid-sdk-load-failed";
479
+ PlaidErrorCodes["PLAID_LINK_INIT_FAILED"] = "plaid-link-init-failed";
480
+ PlaidErrorCodes["PLAID_LINK_TOKEN_FAILED"] = "plaid-link-token-failed";
481
+ PlaidErrorCodes["PLAID_AUTHENTICATION_FAILED"] = "plaid-authentication-failed";
482
+ PlaidErrorCodes["PLAID_BANK_NOT_SUPPORTED"] = "plaid-bank-not-supported";
483
+ PlaidErrorCodes["PLAID_TOKEN_EXPIRED"] = "plaid-token-expired";
484
+ PlaidErrorCodes["PLAID_NETWORK_ERROR"] = "plaid-network-error";
485
+ PlaidErrorCodes["PLAID_USER_CANCELLED"] = "plaid-user-cancelled";
486
+ PlaidErrorCodes["PLAID_TIMEOUT"] = "plaid-timeout";
487
+ PlaidErrorCodes["PLAID_INVALID_CREDENTIALS"] = "plaid-invalid-credentials";
488
+ PlaidErrorCodes["PLAID_ACCOUNT_LOCKED"] = "plaid-account-locked";
489
+ PlaidErrorCodes["PLAID_MAINTENANCE"] = "plaid-maintenance";
490
+ PlaidErrorCodes["PLAID_RATE_LIMITED"] = "plaid-rate-limited";
491
+ })(PlaidErrorCodes || (PlaidErrorCodes = {}));
492
+ // Plaid error message mapping
493
+ const PLAID_ERROR_MESSAGES = {
494
+ [PlaidErrorCodes.PLAID_SDK_LOAD_FAILED]: 'Unable to load Plaid. Please refresh the page and try again.',
495
+ [PlaidErrorCodes.PLAID_LINK_INIT_FAILED]: 'Unable to initialize bank connection. Please try again.',
496
+ [PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED]: 'Unable to connect to bank service. Please try again.',
497
+ [PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED]: 'Bank authentication failed. Please try again.',
498
+ [PlaidErrorCodes.PLAID_BANK_NOT_SUPPORTED]: 'Your bank is not currently supported. Please try a different payment method.',
499
+ [PlaidErrorCodes.PLAID_TOKEN_EXPIRED]: 'Your bank session has expired. Please reconnect your account.',
500
+ [PlaidErrorCodes.PLAID_NETWORK_ERROR]: 'Network connection issue. Please check your internet connection and try again.',
501
+ [PlaidErrorCodes.PLAID_USER_CANCELLED]: 'Bank connection was cancelled. Click to try again.',
502
+ [PlaidErrorCodes.PLAID_TIMEOUT]: 'Bank connection timed out. Please try again.',
503
+ [PlaidErrorCodes.PLAID_INVALID_CREDENTIALS]: 'Invalid bank credentials. Please check your username and password.',
504
+ [PlaidErrorCodes.PLAID_ACCOUNT_LOCKED]: 'Your bank account is temporarily locked. Please contact your bank.',
505
+ [PlaidErrorCodes.PLAID_MAINTENANCE]: 'Bank service is temporarily unavailable. Please try again later.',
506
+ [PlaidErrorCodes.PLAID_RATE_LIMITED]: 'Too many connection attempts. Please wait a moment and try again.',
507
+ };
508
+ // Plaid error severity mapping
509
+ const PLAID_ERROR_SEVERITY = {
510
+ [PlaidErrorCodes.PLAID_SDK_LOAD_FAILED]: ComponentErrorSeverity.ERROR,
511
+ [PlaidErrorCodes.PLAID_LINK_INIT_FAILED]: ComponentErrorSeverity.ERROR,
512
+ [PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED]: ComponentErrorSeverity.ERROR,
513
+ [PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED]: ComponentErrorSeverity.ERROR,
514
+ [PlaidErrorCodes.PLAID_BANK_NOT_SUPPORTED]: ComponentErrorSeverity.WARNING,
515
+ [PlaidErrorCodes.PLAID_TOKEN_EXPIRED]: ComponentErrorSeverity.WARNING,
516
+ [PlaidErrorCodes.PLAID_NETWORK_ERROR]: ComponentErrorSeverity.WARNING,
517
+ [PlaidErrorCodes.PLAID_USER_CANCELLED]: ComponentErrorSeverity.INFO,
518
+ [PlaidErrorCodes.PLAID_TIMEOUT]: ComponentErrorSeverity.WARNING,
519
+ [PlaidErrorCodes.PLAID_INVALID_CREDENTIALS]: ComponentErrorSeverity.ERROR,
520
+ [PlaidErrorCodes.PLAID_ACCOUNT_LOCKED]: ComponentErrorSeverity.ERROR,
521
+ [PlaidErrorCodes.PLAID_MAINTENANCE]: ComponentErrorSeverity.WARNING,
522
+ [PlaidErrorCodes.PLAID_RATE_LIMITED]: ComponentErrorSeverity.WARNING,
523
+ };
524
+ const PlaidPaymentMethod = class {
525
+ constructor(hostRef) {
526
+ registerInstance(this, hostRef);
527
+ this.paymentMethodOptionSelected = createEvent(this, "paymentMethodOptionSelected");
528
+ this.plaidError = createEvent(this, "plaidError");
529
+ this.plaidErrorRecovered = createEvent(this, "plaidErrorRecovered");
530
+ this.isAuthenticating = false;
531
+ this.publicToken = null;
532
+ this.linkToken = null;
533
+ this.linkTokenId = null;
534
+ this.error = null;
535
+ this.plaidLink = null;
536
+ this.isSelected = false;
537
+ this.retryCount = 0;
538
+ this.isRetrying = false;
539
+ this.plaidService = new PlaidService();
540
+ this.maxRetries = 3;
541
+ this.retryDelay = 2000; // 2 seconds
542
+ this.timeoutId = null;
543
+ this.abortController = null;
544
+ this.hasLoggedDisabledWarning = false;
545
+ this.waitForStoreAndInitialize = () => {
546
+ // Check if store has necessary data
547
+ if (checkoutStore.authToken && checkoutStore.accountId && checkoutStore.checkoutId) {
548
+ this.initializePlaidLink();
549
+ }
550
+ else {
551
+ // Wait a bit and try again
552
+ setTimeout(() => {
553
+ this.waitForStoreAndInitialize();
554
+ }, 100);
555
+ }
556
+ };
557
+ this.initializePlaidLink = async () => {
558
+ try {
559
+ // Check if Plaid is available globally
560
+ if (typeof window.Plaid === 'undefined') {
561
+ this.handleError({
562
+ code: PlaidErrorCodes.PLAID_SDK_LOAD_FAILED,
563
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
564
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
565
+ retryable: true,
566
+ userAction: 'Refresh the page and try again'
567
+ });
568
+ return;
569
+ }
570
+ // Get link token from backend
571
+ await this.getLinkToken();
572
+ if (!this.linkToken) {
573
+ this.handleError({
574
+ code: PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED,
575
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED],
576
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED],
577
+ retryable: true,
578
+ userAction: 'Click to try again'
579
+ });
580
+ return;
581
+ }
582
+ // Initialize Plaid Link
583
+ const Plaid = window.Plaid;
584
+ this.plaidLink = Plaid.create({
585
+ token: this.linkToken,
586
+ onSuccess: this.handlePlaidSuccess,
587
+ onExit: this.handlePlaidExit,
588
+ onEvent: this.handlePlaidEvent,
589
+ onLoad: this.handlePlaidLoad,
590
+ });
591
+ }
592
+ catch (error) {
593
+ this.handleError({
594
+ code: PlaidErrorCodes.PLAID_LINK_INIT_FAILED,
595
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_LINK_INIT_FAILED],
596
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_LINK_INIT_FAILED],
597
+ originalError: error,
598
+ retryable: true,
599
+ userAction: 'Click to try again'
600
+ });
601
+ }
602
+ };
603
+ this.getLinkToken = async () => {
604
+ var _a, _b, _c, _d, _e;
605
+ try {
606
+ if (!checkoutStore.authToken || !checkoutStore.accountId) {
607
+ this.handleError({
608
+ code: PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED,
609
+ message: 'Missing authentication. Please refresh the page and try again.',
610
+ severity: ComponentErrorSeverity.ERROR,
611
+ retryable: false,
612
+ userAction: 'Refresh the page'
613
+ });
614
+ return;
615
+ }
616
+ // Create abort controller for timeout handling
617
+ this.abortController = new AbortController();
618
+ // Set timeout for the request
619
+ this.timeoutId = setTimeout(() => {
620
+ var _a;
621
+ (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
622
+ }, 30000); // 30 second timeout
623
+ const response = await this.plaidService.getLinkToken(checkoutStore.authToken, checkoutStore.accountId, checkoutStore.checkoutId, this.abortController.signal);
624
+ // Clear timeout
625
+ if (this.timeoutId) {
626
+ clearTimeout(this.timeoutId);
627
+ this.timeoutId = null;
628
+ }
629
+ if (response.error) {
630
+ const errorMessage = typeof response.error === 'string'
631
+ ? response.error
632
+ : response.error.message || 'Failed to get link token';
633
+ throw new Error(errorMessage);
634
+ }
635
+ // Some backends may return an id along with the link token
636
+ this.linkToken = response.data.link_token;
637
+ // Try to capture link token id if present in envelope
638
+ this.linkTokenId = (response === null || response === void 0 ? void 0 : response.id) || ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.id) || null;
639
+ if (this.linkTokenId) {
640
+ checkoutStore.plaidLinkTokenId = this.linkTokenId;
641
+ }
642
+ }
643
+ catch (error) {
644
+ // Clear timeout
645
+ if (this.timeoutId) {
646
+ clearTimeout(this.timeoutId);
647
+ this.timeoutId = null;
648
+ }
649
+ let errorCode = PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
650
+ let message = PLAID_ERROR_MESSAGES[errorCode];
651
+ let retryable = true;
652
+ // Handle specific error types
653
+ if (error.name === 'AbortError') {
654
+ errorCode = PlaidErrorCodes.PLAID_TIMEOUT;
655
+ message = PLAID_ERROR_MESSAGES[errorCode];
656
+ retryable = true;
657
+ }
658
+ else if (((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('network')) || ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('fetch'))) {
659
+ errorCode = PlaidErrorCodes.PLAID_NETWORK_ERROR;
660
+ message = PLAID_ERROR_MESSAGES[errorCode];
661
+ retryable = true;
662
+ }
663
+ else if (((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('401')) || ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('unauthorized'))) {
664
+ errorCode = PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
665
+ message = 'Authentication failed. Please refresh the page and try again.';
666
+ retryable = false;
667
+ }
668
+ this.handleError({
669
+ code: errorCode,
670
+ message: message,
671
+ severity: PLAID_ERROR_SEVERITY[errorCode],
672
+ originalError: error,
673
+ retryable,
674
+ userAction: retryable ? 'Click to try again' : 'Refresh the page'
675
+ });
676
+ }
677
+ };
678
+ this.mapApiErrorToPlaidError = (apiError) => {
679
+ if (typeof apiError === 'string') {
680
+ if (apiError.includes('rate_limit'))
681
+ return PlaidErrorCodes.PLAID_RATE_LIMITED;
682
+ if (apiError.includes('maintenance'))
683
+ return PlaidErrorCodes.PLAID_MAINTENANCE;
684
+ if (apiError.includes('not_authenticated'))
685
+ return PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
686
+ }
687
+ if (apiError === null || apiError === void 0 ? void 0 : apiError.code) {
688
+ switch (apiError.code) {
689
+ case 'rate_limited': return PlaidErrorCodes.PLAID_RATE_LIMITED;
690
+ case 'maintenance': return PlaidErrorCodes.PLAID_MAINTENANCE;
691
+ case 'not_authenticated': return PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
692
+ case 'invalid_parameter': return PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
693
+ default: return PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
694
+ }
695
+ }
696
+ return PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
697
+ };
698
+ this.openPlaidLink = () => {
699
+ if (this.plaidLink && this.linkToken) {
700
+ this.isAuthenticating = true;
701
+ this.clearError();
702
+ this.plaidLink.open();
703
+ }
704
+ };
705
+ this.handlePlaidSuccess = (publicToken, _metadata) => {
706
+ this.publicToken = publicToken;
707
+ this.isAuthenticating = false;
708
+ this.clearError();
709
+ this.retryCount = 0; // Reset retry count on success
710
+ // Ensure the component remains selected after successful authentication
711
+ if (!this.isSelected) {
712
+ this.isSelected = true;
713
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.plaid };
714
+ }
715
+ // Emit success event for parent components
716
+ this.plaidErrorRecovered.emit({
717
+ code: 'plaid-success',
718
+ message: 'Bank account connected successfully',
719
+ severity: ComponentErrorSeverity.INFO
720
+ });
721
+ // Store public token in checkout store; exchange will be handled on submit
722
+ checkoutStore.plaidPublicToken = publicToken;
723
+ };
724
+ // Exchange logic moved to Modular Checkout submit flow.
725
+ this.handlePlaidExit = (err, _metadata) => {
726
+ this.isAuthenticating = false;
727
+ if (err) {
728
+ this.handlePlaidError(err);
729
+ }
730
+ };
731
+ this.handlePlaidEvent = (eventName, metadata) => {
732
+ // Handle specific events if needed
733
+ switch (eventName) {
734
+ case 'OPEN':
735
+ this.isAuthenticating = true;
736
+ break;
737
+ case 'CLOSE':
738
+ this.isAuthenticating = false;
739
+ break;
740
+ case 'ERROR':
741
+ this.handlePlaidError(metadata);
742
+ break;
743
+ }
744
+ };
745
+ this.handlePlaidLoad = () => {
746
+ };
747
+ this.handlePlaidError = (error) => {
748
+ let errorCode = PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED;
749
+ let message = PLAID_ERROR_MESSAGES[errorCode];
750
+ let retryable = true;
751
+ let userAction = 'Click to try again';
752
+ // Map Plaid error codes to our error codes
753
+ if (error.error_code) {
754
+ switch (error.error_code) {
755
+ case 'INVALID_CREDENTIALS':
756
+ errorCode = PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
757
+ message = PLAID_ERROR_MESSAGES[errorCode];
758
+ retryable = true;
759
+ break;
760
+ case 'ITEM_LOGIN_REQUIRED':
761
+ errorCode = PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
762
+ message = 'Your bank requires re-authentication. Please try again.';
763
+ retryable = true;
764
+ break;
765
+ case 'ITEM_LOCKED':
766
+ errorCode = PlaidErrorCodes.PLAID_ACCOUNT_LOCKED;
767
+ message = PLAID_ERROR_MESSAGES[errorCode];
768
+ retryable = false;
769
+ userAction = 'Contact your bank';
770
+ break;
771
+ case 'INSTITUTION_NOT_RESPONDING':
772
+ errorCode = PlaidErrorCodes.PLAID_MAINTENANCE;
773
+ message = PLAID_ERROR_MESSAGES[errorCode];
774
+ retryable = true;
775
+ break;
776
+ case 'RATE_LIMIT_EXCEEDED':
777
+ errorCode = PlaidErrorCodes.PLAID_RATE_LIMITED;
778
+ message = PLAID_ERROR_MESSAGES[errorCode];
779
+ retryable = true;
780
+ break;
781
+ case 'INVALID_REQUEST':
782
+ errorCode = PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED;
783
+ message = 'Invalid request. Please try again.';
784
+ retryable = true;
785
+ break;
786
+ case 'PLAID_ERROR':
787
+ errorCode = PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED;
788
+ message = error.error_message || 'Bank authentication failed. Please try again.';
789
+ retryable = true;
790
+ break;
791
+ default:
792
+ // Use the error message from Plaid if available
793
+ if (error.error_message) {
794
+ message = error.error_message;
795
+ }
796
+ break;
797
+ }
798
+ }
799
+ // Handle specific error messages
800
+ if (error.error_message) {
801
+ const lowerMessage = error.error_message.toLowerCase();
802
+ if (lowerMessage.includes('not supported') || lowerMessage.includes('unsupported')) {
803
+ errorCode = PlaidErrorCodes.PLAID_BANK_NOT_SUPPORTED;
804
+ message = PLAID_ERROR_MESSAGES[errorCode];
805
+ retryable = false;
806
+ userAction = 'Try a different payment method';
807
+ }
808
+ else if (lowerMessage.includes('expired') || lowerMessage.includes('timeout')) {
809
+ errorCode = PlaidErrorCodes.PLAID_TOKEN_EXPIRED;
810
+ message = PLAID_ERROR_MESSAGES[errorCode];
811
+ retryable = true;
812
+ }
813
+ }
814
+ this.handleError({
815
+ code: errorCode,
816
+ message,
817
+ severity: PLAID_ERROR_SEVERITY[errorCode],
818
+ originalError: error,
819
+ retryable,
820
+ userAction
821
+ });
822
+ this.isAuthenticating = false;
823
+ };
824
+ this.handleError = (plaidError) => {
825
+ this.error = plaidError;
826
+ // Emit error event for parent components
827
+ this.plaidError.emit({
828
+ code: plaidError.code,
829
+ message: plaidError.message,
830
+ severity: plaidError.severity,
831
+ data: {
832
+ originalError: plaidError.originalError,
833
+ retryable: plaidError.retryable,
834
+ userAction: plaidError.userAction,
835
+ retryCount: this.retryCount
836
+ }
837
+ });
838
+ console.error('Plaid error:', plaidError);
839
+ // Auto-retry for retryable errors if under max retries
840
+ if (plaidError.retryable && this.retryCount < this.maxRetries) {
841
+ this.scheduleRetry();
842
+ }
843
+ };
844
+ this.scheduleRetry = () => {
845
+ if (this.isRetrying)
846
+ return;
847
+ this.isRetrying = true;
848
+ this.retryCount++;
849
+ setTimeout(() => {
850
+ this.isRetrying = false;
851
+ this.clearError();
852
+ this.waitForStoreAndInitialize();
853
+ }, this.retryDelay * this.retryCount); // Exponential backoff
854
+ };
855
+ this.clearError = () => {
856
+ if (this.error) {
857
+ this.error = null;
858
+ this.retryCount = 0;
859
+ }
860
+ };
861
+ // Watch for store changes to sync component state
862
+ this.syncWithStore = () => {
863
+ const shouldBeSelected = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.plaid;
864
+ if (this.isSelected !== shouldBeSelected) {
865
+ this.isSelected = shouldBeSelected;
866
+ }
867
+ };
868
+ }
869
+ onSelectionChange(newValue) {
870
+ // Ensure store is updated when component selection changes
871
+ if (newValue && checkoutStore.selectedPaymentMethod.type !== PaymentMethodTypes.plaid) {
872
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.plaid };
873
+ }
874
+ // Auto-start Plaid flow when selected and ready
875
+ if (newValue &&
876
+ this.plaidLink &&
877
+ !this.publicToken &&
878
+ !this.isAuthenticating &&
879
+ !this.error) {
880
+ this.openPlaidLink();
881
+ }
882
+ }
883
+ componentDidRender() {
884
+ if (!this.scriptRef)
885
+ return;
886
+ this.scriptRef.onload = () => {
887
+ // Wait for store to be populated before initializing
888
+ this.waitForStoreAndInitialize();
889
+ };
890
+ // Add error handler for script loading failures
891
+ this.scriptRef.onerror = () => {
892
+ this.handleError({
893
+ code: PlaidErrorCodes.PLAID_SDK_LOAD_FAILED,
894
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
895
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
896
+ retryable: true,
897
+ userAction: 'Refresh the page and try again'
898
+ });
899
+ };
900
+ }
901
+ componentWillLoad() {
902
+ // Initialize selection state based on store
903
+ this.isSelected = checkoutStore.selectedPaymentMethod.type === PaymentMethodTypes.plaid;
904
+ }
905
+ async resolvePaymentMethod() {
906
+ if (!this.publicToken) {
907
+ return { validationError: true };
908
+ }
909
+ return {
910
+ token: this.publicToken,
911
+ data: {
912
+ type: 'bank_account',
913
+ plaid_public_token: this.publicToken
914
+ }
915
+ };
916
+ }
917
+ // Returns a usable payment method token for checkout completion.
918
+ // Will perform the backend exchange if the token is not yet present in the store.
919
+ async getPaymentToken() {
920
+ return checkoutStore.paymentToken;
921
+ }
922
+ async handleSelectionClick() {
923
+ // Update local selection state
924
+ this.isSelected = true;
925
+ // Update store selection
926
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.plaid };
927
+ // If there's an error, clear it and try to initialize again
928
+ if (this.error) {
929
+ this.clearError();
930
+ this.waitForStoreAndInitialize();
931
+ return;
932
+ }
933
+ // If Plaid Link is ready and no public token exists, open Plaid Link
934
+ if (this.plaidLink && !this.publicToken && !this.isAuthenticating) {
935
+ this.openPlaidLink();
936
+ }
937
+ }
938
+ // Method to handle external selection changes (e.g., from other payment methods)
939
+ async setSelected(selected) {
940
+ this.isSelected = selected;
941
+ if (selected) {
942
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.plaid };
943
+ }
944
+ }
945
+ // Method to check if component is currently selected
946
+ async isCurrentlySelected() {
947
+ return this.isSelected;
948
+ }
949
+ // Method to handle external deselection (when another payment method is selected)
950
+ async deselect() {
951
+ this.isSelected = false;
952
+ // Don't clear the public token or error state as they might be needed if user reselects
953
+ }
954
+ // Method to reset component state (useful for testing or error recovery)
955
+ async reset() {
956
+ this.publicToken = null;
957
+ this.clearError();
958
+ this.isAuthenticating = false;
959
+ this.linkToken = null;
960
+ this.plaidLink = null;
961
+ this.retryCount = 0;
962
+ this.isRetrying = false;
963
+ // Clear any pending timeouts
964
+ if (this.timeoutId) {
965
+ clearTimeout(this.timeoutId);
966
+ this.timeoutId = null;
967
+ }
968
+ // Abort any pending requests
969
+ if (this.abortController) {
970
+ this.abortController.abort();
971
+ this.abortController = null;
972
+ }
973
+ }
974
+ // Method to check if component is ready for authentication
975
+ async isReadyForAuthentication() {
976
+ return !!(this.plaidLink && this.linkToken && !this.isAuthenticating);
977
+ }
978
+ // Method to manually retry after an error
979
+ async retry() {
980
+ if (this.error && this.error.retryable) {
981
+ this.clearError();
982
+ this.waitForStoreAndInitialize();
983
+ }
984
+ }
985
+ // Method to get current error information
986
+ async getErrorInfo() {
987
+ return this.error;
988
+ }
989
+ componentDidLoad() {
990
+ // Set up store change listener to keep component in sync
991
+ const unsubscribe = onChange('selectedPaymentMethod', this.syncWithStore);
992
+ // Store unsubscribe function for cleanup
993
+ this.unsubscribeFromStore = unsubscribe;
994
+ }
995
+ disconnectedCallback() {
996
+ // Clean up store subscription
997
+ if (this.unsubscribeFromStore) {
998
+ this.unsubscribeFromStore();
999
+ }
1000
+ // Clean up timeouts and abort controllers
1001
+ if (this.timeoutId) {
1002
+ clearTimeout(this.timeoutId);
1003
+ }
1004
+ if (this.abortController) {
1005
+ this.abortController.abort();
1006
+ }
1007
+ }
1008
+ render() {
1009
+ // Only allow use if enabled in checkout settings
1010
+ if (checkoutStore.bankAccountVerification !== true) {
1011
+ if (!this.hasLoggedDisabledWarning) {
1012
+ // Log once per component lifecycle
1013
+ console.warn('[PlaidPaymentMethod] bank_account_verification is disabled. Component will not render.');
1014
+ this.hasLoggedDisabledWarning = true;
1015
+ }
1016
+ return null;
1017
+ }
1018
+ const plaidLogo = (h("img", { class: "plaid-logo-img", src: plaidIconSvg, alt: "Plaid", title: "Plaid", style: {
1019
+ display: 'inline',
1020
+ width: '20px',
1021
+ height: '20px',
1022
+ marginLeft: '5px',
1023
+ marginTop: '-2px',
1024
+ } }));
1025
+ const renderErrorState = () => {
1026
+ if (!this.error)
1027
+ return null;
1028
+ const errorClass = this.error.severity === ComponentErrorSeverity.ERROR
1029
+ ? 'text-danger'
1030
+ : this.error.severity === ComponentErrorSeverity.WARNING
1031
+ ? 'text-warning'
1032
+ : 'text-info';
1033
+ return (h("div", { class: `${errorClass} mt-2` }, h("small", null, this.error.message), h("br", null), h("small", { class: "text-muted" }, this.error.userAction, this.error.retryable && this.retryCount < this.maxRetries && (h("span", null, " \u2022 Auto-retry in progress...")))));
1034
+ };
1035
+ const renderStatusState = () => {
1036
+ if (this.error)
1037
+ return null;
1038
+ if (this.isAuthenticating) {
1039
+ return (h("div", { class: "text-info mt-2" }, h("small", null, "Connecting to your bank...")));
1040
+ }
1041
+ if (this.publicToken) {
1042
+ return (h("div", { class: "text-success mt-2" }, h("small", null, "\u2713 Bank account connected successfully")));
1043
+ }
1044
+ if (this.isSelected && !this.publicToken && !this.error && !this.isAuthenticating) {
1045
+ return (h("div", { class: "text-muted mt-2" }, h("small", null, "Click to connect your bank account")));
1046
+ }
1047
+ return null;
1048
+ };
1049
+ return (h(StyledHost, { class: "payment-method" }, h("script", { src: "https://cdn.plaid.com/link/v2/stable/link-initialize.js", async: true, ref: (el) => (this.scriptRef = el) }), h("div", { title: "Pay with Plaid" }, h("div", { onClick: (event) => { event.preventDefault(); this.handleSelectionClick(); } }, "Pay with Bank Account ", plaidLogo, " "), renderErrorState(), renderStatusState())));
1050
+ }
1051
+ static get watchers() { return {
1052
+ "isSelected": ["onSelectionChange"]
1053
+ }; }
1054
+ };
1055
+
1056
+ const SavedPaymentMethods = class {
1057
+ constructor(hostRef) {
1058
+ registerInstance(this, hostRef);
1059
+ this.onPaymentMethodOptionClick = (paymentMethod) => (e) => {
1060
+ e.preventDefault();
1061
+ checkoutStore.selectedPaymentMethod = paymentMethod;
1062
+ checkoutStore.paymentToken = paymentMethod.id;
1063
+ };
1064
+ this.isAllowedPaymentMethod = (paymentMethod) => {
1065
+ if (paymentMethod.type === PAYMENT_METHOD_TYPES.CARD && checkoutStore.disableCreditCard) {
1066
+ return false;
1067
+ }
1068
+ if (paymentMethod.type === PAYMENT_METHOD_TYPES.BANK_ACCOUNT && checkoutStore.disableBankAccount) {
1069
+ return false;
1070
+ }
1071
+ return true;
1072
+ };
1073
+ }
1074
+ componentWillLoad() {
1075
+ if (!checkoutStore.paymentMethods.length) {
1076
+ console.warn('No saved payment methods available.');
1077
+ }
1078
+ if (checkoutStore.disablePaymentMethodGroup) {
1079
+ console.warn('Payment method group is disabled.');
1080
+ }
1081
+ }
1082
+ render() {
1083
+ if (checkoutStore.disablePaymentMethodGroup) {
1084
+ return null;
1085
+ }
1086
+ return (h(StyledHost, null, h("div", { class: "saved-payment-methods" }, checkoutStore.paymentMethods.length ? checkoutStore.paymentMethods
1087
+ .filter(this.isAllowedPaymentMethod)
1088
+ .map((paymentMethod) => (h("div", { class: "radio-list-item p-3", part: radioListItem, onClick: this.onPaymentMethodOptionClick(paymentMethod) }, h("form-control-radio", { name: "paymentMethodType", value: paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.id, checked: checkoutStore.paymentToken === (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.id), label: `${CardBrandLabels[paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.brand] || ''} *${paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.acct_last_four}` })))) : null)));
1089
+ }
1090
+ };
1091
+
1092
+ const sezzleLogo = (h("img", { class: "sezzle-smart-button-logo-img", src: "https://media.sezzle.com/branding/2.0/Sezzle_Logo_FullColor.svg", alt: "Sezzle", style: {
1093
+ display: 'inline',
1094
+ width: '80px',
1095
+ marginLeft: '5px',
1096
+ marginTop: '-5px',
1097
+ } }));
1098
+ const SezzlePaymentMethod = class {
1099
+ constructor(hostRef) {
1100
+ registerInstance(this, hostRef);
1101
+ this.paymentMethodOptionSelected = createEvent(this, "paymentMethodOptionSelected");
1102
+ this.paymentMethodOptionId = PAYMENT_METHODS.SEZZLE;
1103
+ this.initializeSezzleCheckout = () => {
1104
+ let resolveSezzlePromise;
1105
+ this.sezzlePromise = new Promise((resolve) => { resolveSezzlePromise = resolve; });
1106
+ const amount = Number(checkoutStore.paymentAmount);
1107
+ const Checkout = window.Checkout;
1108
+ const checkout = new Checkout({
1109
+ mode: 'popup',
1110
+ publicKey: checkoutStore.bnplProviderClientId,
1111
+ apiMode: checkoutStore.bnplProviderMode,
1112
+ apiVersion: checkoutStore.bnplProviderApiVersion,
1113
+ });
1114
+ checkout.sezzleButtonElement = this.sezzleButtonRef;
1115
+ checkout.init({
1116
+ onClick: function (event) {
1117
+ event.preventDefault();
1118
+ checkout.startCheckout({
1119
+ checkout_url: checkoutStore.bnplProviderCheckoutUrl,
1120
+ });
1121
+ },
1122
+ onComplete: (event) => resolveSezzlePromise({ bnpl: event.data }),
1123
+ onCancel: (event) => resolveSezzlePromise({ bnpl: event.data }),
1124
+ onFailure: (event) => resolveSezzlePromise({ bnpl: event.data }),
1125
+ });
1126
+ this.sezzleCheckout = checkout;
1127
+ this.installmentPlan = this.sezzleCheckout.getInstallmentPlan(amount);
1128
+ };
1129
+ }
1130
+ componentDidRender() {
1131
+ if (!this.scriptRef)
1132
+ return;
1133
+ this.scriptRef.onload = () => {
1134
+ this.sezzleButtonRef = document.createElement('button');
1135
+ this.initializeSezzleCheckout();
1136
+ };
1137
+ }
1138
+ async resolvePaymentMethod(insuranceValidation) {
1139
+ if (!insuranceValidation.isValid) {
1140
+ return { validationError: true };
1141
+ }
1142
+ this.sezzleButtonRef.click();
1143
+ return this.sezzlePromise;
1144
+ }
1145
+ async handleSelectionClick() {
1146
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.sezzle };
1147
+ this.paymentMethodOptionSelected.emit(this.paymentMethodOptionId);
1148
+ }
1149
+ render() {
1150
+ var _a, _b;
1151
+ if (!checkoutStore.bnplEnabled || checkoutStore.disableBnpl) {
1152
+ console.warn('justifi-sezzle-payment-method: BNPL is not enabled for this account.');
1153
+ return null;
1154
+ }
1155
+ return (h(StyledHost, { class: "payment-method" }, h("script", { src: "https://checkout-sdk.sezzle.com/checkout.min.js", async: true, ref: (el) => (this.scriptRef = el) }), h("div", null, h("div", null, "Buy now, pay later with ", sezzleLogo), this.installmentPlan && (h("small", null, h("span", null, (_a = this.installmentPlan) === null || _a === void 0 ? void 0 : _a.installments.length), "\u00A0", h("span", null, this.installmentPlan.schedule, " payments of"), "\u00A0", h("span", { class: "fw-bold" }, formatCurrency((_b = this.installmentPlan) === null || _b === void 0 ? void 0 : _b.installments[0].amountInCents)))))));
1156
+ }
1157
+ };
1158
+
1159
+ // Constants
1160
+ const PAYMENT_METHOD_TYPE_LABELS = {
1161
+ [PaymentMethodTypes.bankAccount]: 'New bank account',
1162
+ [PaymentMethodTypes.card]: 'New credit or debit card',
1163
+ };
1164
+ const ERROR_MESSAGES = {
1165
+ AUTH_TOKEN_REQUIRED: 'Auth token is required when using the tokenize-payment-method component not slotted in justifi-modular-checkout',
1166
+ ACCOUNT_ID_REQUIRED: 'Account ID is required when using the tokenize-payment-method component not slotted in justifi-modular-checkout',
1167
+ FORM_NOT_READY: 'Payment form not ready',
1168
+ VALIDATION_ERROR: 'Validation error',
1169
+ };
1170
+ const TokenizePaymentMethod = class {
1171
+ constructor(hostRef) {
1172
+ registerInstance(this, hostRef);
1173
+ this.errorEvent = createEvent(this, "error-event");
1174
+ this.submitEvent = createEvent(this, "submit-event");
1175
+ this.computedHideSubmitButton = false;
1176
+ this.isLoading = false;
1177
+ this.submitButtonText = 'Submit';
1178
+ }
1179
+ paymentMethodsChanged() {
1180
+ this.setDefaultSelectedPaymentMethod();
1181
+ }
1182
+ connectedCallback() {
1183
+ this.setDefaultSelectedPaymentMethod();
1184
+ this.setComputedHideSubmitButton();
1185
+ }
1186
+ disconnectedCallback() {
1187
+ var _a;
1188
+ (_a = this.analytics) === null || _a === void 0 ? void 0 : _a.cleanup();
1189
+ if (this.unsubscribeFromStore) {
1190
+ this.unsubscribeFromStore();
1191
+ }
1192
+ }
1193
+ componentWillLoad() {
1194
+ checkPkgVersion();
1195
+ this.analytics = new JustifiAnalytics(this);
1196
+ }
1197
+ handleRadioClick(event) {
1198
+ this.selectedPaymentMethod = event.detail;
1199
+ checkoutStore.selectedPaymentMethod = { type: event.detail };
1200
+ }
1201
+ async fillBillingForm(fields) {
1202
+ var _a;
1203
+ (_a = this.billingFormRef) === null || _a === void 0 ? void 0 : _a.fill(fields);
1204
+ }
1205
+ async tokenizePaymentMethod(event) {
1206
+ event === null || event === void 0 ? void 0 : event.preventDefault();
1207
+ this.validateRequiredProps();
1208
+ this.isLoading = true;
1209
+ try {
1210
+ const validation = await this.validate();
1211
+ if (!validation.isValid) {
1212
+ this.errorEvent.emit({
1213
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
1214
+ message: ERROR_MESSAGES.VALIDATION_ERROR,
1215
+ });
1216
+ this.isLoading = false;
1217
+ return;
1218
+ }
1219
+ const tokenizeResponse = await this.resolvePaymentMethod({ isValid: true });
1220
+ if (tokenizeResponse.error) {
1221
+ this.emitError({
1222
+ errorCode: tokenizeResponse.error.code,
1223
+ message: tokenizeResponse.error.message,
1224
+ });
1225
+ }
1226
+ this.submitEvent.emit({ response: tokenizeResponse });
1227
+ return tokenizeResponse;
1228
+ }
1229
+ catch (error) {
1230
+ const errorResponse = this.createErrorResponse(ComponentErrorCodes.TOKENIZE_ERROR, error.message);
1231
+ this.emitError({
1232
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
1233
+ message: error.message,
1234
+ });
1235
+ this.submitEvent.emit({ response: errorResponse });
1236
+ return errorResponse;
1237
+ }
1238
+ finally {
1239
+ this.isLoading = false;
1240
+ }
1241
+ }
1242
+ async validate() {
1243
+ if (!this.areFormsReady()) {
1244
+ return { isValid: false, errors: { general: ERROR_MESSAGES.FORM_NOT_READY } };
1245
+ }
1246
+ const [billingValidation, paymentMethodValidation] = await Promise.all([
1247
+ this.billingFormRef.validate(),
1248
+ this.paymentMethodFormRef.validate(),
1249
+ ]);
1250
+ const result = {
1251
+ isValid: billingValidation.isValid && paymentMethodValidation.isValid,
1252
+ errors: Object.assign(Object.assign({}, billingValidation.errors), paymentMethodValidation.errors),
1253
+ };
1254
+ return result;
1255
+ }
1256
+ async tokenize() {
1257
+ try {
1258
+ const billingFormFieldValues = await this.billingFormRef.getValues();
1259
+ const config = {
1260
+ clientId: this.authToken || checkoutStore.authToken,
1261
+ account: this.accountId || checkoutStore.accountId,
1262
+ paymentMethodMetadata: this.buildPaymentMethodMetadata(billingFormFieldValues),
1263
+ };
1264
+ return await this.paymentMethodFormRef.tokenize(config);
1265
+ }
1266
+ catch (error) {
1267
+ return error;
1268
+ }
1269
+ }
1270
+ // 9. Local methods
1271
+ validateRequiredProps() {
1272
+ if (!this.authToken && !checkoutStore.authToken) {
1273
+ this.emitError({
1274
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
1275
+ message: ERROR_MESSAGES.AUTH_TOKEN_REQUIRED,
1276
+ });
1277
+ }
1278
+ if (!this.accountId && !checkoutStore.accountId) {
1279
+ this.emitError({
1280
+ errorCode: ComponentErrorCodes.TOKENIZE_ERROR,
1281
+ message: ERROR_MESSAGES.ACCOUNT_ID_REQUIRED,
1282
+ });
1283
+ }
1284
+ }
1285
+ setDefaultSelectedPaymentMethod() {
1286
+ if (this.selectedPaymentMethod) {
1287
+ return;
1288
+ }
1289
+ if (!this.disableCreditCard) {
1290
+ this.selectedPaymentMethod = PaymentMethodTypes.card;
1291
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.card };
1292
+ }
1293
+ else if (!this.disableBankAccount) {
1294
+ this.selectedPaymentMethod = PaymentMethodTypes.bankAccount;
1295
+ checkoutStore.selectedPaymentMethod = { type: PaymentMethodTypes.bankAccount };
1296
+ }
1297
+ }
1298
+ setComputedHideSubmitButton() {
1299
+ // If hideSubmitButton prop is explicitly set, use that value
1300
+ if (this.hideSubmitButton !== undefined) {
1301
+ this.computedHideSubmitButton = this.hideSubmitButton;
1302
+ return;
1303
+ }
1304
+ // Otherwise, auto-detect if component is slotted within modular-checkout
1305
+ const isWithinModularCheckout = this.isSlottedWithinModularCheckout();
1306
+ this.computedHideSubmitButton = isWithinModularCheckout;
1307
+ }
1308
+ isSlottedWithinModularCheckout() {
1309
+ var _a;
1310
+ let parent = (_a = this.host) === null || _a === void 0 ? void 0 : _a.parentElement;
1311
+ while (parent) {
1312
+ if (parent.tagName === 'JUSTIFI-MODULAR-CHECKOUT') {
1313
+ return true;
1314
+ }
1315
+ parent = parent.parentElement;
1316
+ }
1317
+ return false;
1318
+ }
1319
+ get availablePaymentMethods() {
1320
+ const methods = [];
1321
+ if (!this.disableCreditCard) {
1322
+ methods.push(PaymentMethodTypes.card);
1323
+ }
1324
+ if (!this.disableBankAccount) {
1325
+ methods.push(PaymentMethodTypes.bankAccount);
1326
+ }
1327
+ return methods;
1328
+ }
1329
+ areFormsReady() {
1330
+ return !!(this.billingFormRef && this.paymentMethodFormRef);
1331
+ }
1332
+ emitError(errorData) {
1333
+ this.errorEvent.emit(Object.assign(Object.assign({}, errorData), { severity: ComponentErrorSeverity.ERROR }));
1334
+ }
1335
+ createErrorResponse(code, message) {
1336
+ return {
1337
+ error: {
1338
+ code: code,
1339
+ message,
1340
+ decline_code: undefined,
1341
+ },
1342
+ };
1343
+ }
1344
+ async resolvePaymentMethod(insuranceValidation) {
1345
+ if (!this.areFormsReady()) {
1346
+ return this.createErrorResponse('form_not_ready', ERROR_MESSAGES.FORM_NOT_READY);
1347
+ }
1348
+ try {
1349
+ const validation = await this.validate();
1350
+ if (!validation.isValid || !insuranceValidation.isValid) {
1351
+ const errorMessage = Object.values(validation.errors)[0] || ERROR_MESSAGES.VALIDATION_ERROR;
1352
+ return {
1353
+ validationError: true,
1354
+ error: {
1355
+ code: 'validation_error',
1356
+ message: String(errorMessage),
1357
+ decline_code: undefined,
1358
+ },
1359
+ };
1360
+ }
1361
+ const result = await this.performTokenization();
1362
+ return result;
1363
+ }
1364
+ catch (error) {
1365
+ return { error };
1366
+ }
1367
+ }
1368
+ async performTokenization() {
1369
+ var _a, _b;
1370
+ const tokenizeResponse = await this.tokenize();
1371
+ if (tokenizeResponse.error) {
1372
+ return { error: tokenizeResponse.error };
1373
+ }
1374
+ const tokenizeResponseData = tokenizeResponse.data;
1375
+ return {
1376
+ token: ((_a = tokenizeResponseData.card) === null || _a === void 0 ? void 0 : _a.token) || ((_b = tokenizeResponseData.bank_account) === null || _b === void 0 ? void 0 : _b.token),
1377
+ data: tokenizeResponseData,
1378
+ };
1379
+ }
1380
+ buildPaymentMethodMetadata(billingFormFieldValues) {
1381
+ return this.shouldSavePaymentMethod
1382
+ ? Object.assign(Object.assign({}, billingFormFieldValues), { payment_method_group_id: this.paymentMethodGroupID }) : Object.assign({}, billingFormFieldValues);
1383
+ }
1384
+ get paymentMethodGroupID() {
1385
+ return this.paymentMethodGroupId || checkoutStore.paymentMethodGroupId;
1386
+ }
1387
+ get shouldSavePaymentMethod() {
1388
+ return !!(this.paymentMethodGroupId || checkoutStore.savePaymentMethod);
1389
+ }
1390
+ get shouldHideRadioInput() {
1391
+ return this.disableCreditCard || this.disableBankAccount;
1392
+ }
1393
+ renderPaymentMethodOption(paymentMethodType) {
1394
+ const isSelected = this.selectedPaymentMethod === paymentMethodType && checkoutStore.selectedPaymentMethod.id === undefined;
1395
+ return (h("div", { class: "payment-method" }, h("justifi-radio-list-item", { name: "paymentMethodType", value: paymentMethodType, checked: isSelected, label: PAYMENT_METHOD_TYPE_LABELS[paymentMethodType], hidden: this.shouldHideRadioInput }), isSelected && this.renderSelectedPaymentMethodForm(paymentMethodType)));
1396
+ }
1397
+ renderSelectedPaymentMethodForm(paymentMethodId) {
1398
+ return (h("div", { class: "mt-4 pb-4" }, this.renderPaymentMethodForm(paymentMethodId), h("div", { class: "mt-4" }, h("justifi-billing-form", { ref: (el) => (this.billingFormRef = el), hideCardBillingForm: this.hideCardBillingForm, hideBankAccountBillingForm: this.hideBankAccountBillingForm, paymentMethodType: paymentMethodId })), h("div", { class: "mt-4" }, h("justifi-save-new-payment-method", { hidden: !this.paymentMethodGroupID, label: this.savePaymentMethodLabel }))));
1399
+ }
1400
+ renderPaymentMethodForm(paymentMethodId) {
1401
+ return paymentMethodId === PaymentMethodTypes.card ? (h("justifi-card-form", { ref: (el) => (this.paymentMethodFormRef = el) })) : (h("justifi-bank-account-form", { ref: (el) => (this.paymentMethodFormRef = el) }));
1402
+ }
1403
+ render() {
1404
+ return (h(StyledHost, { key: '8a7983cbb634e39612d9f464c3dde43c646356dd' }, h("form", { key: 'ef1d8bc768aeb880445283d4b00d41cd85b77d16' }, h("fieldset", { key: 'be8f72bb4aab7b52098f034a06ad8586fe3b89cb' }, h("div", { key: '0155b97ff6bf1c9364b2b71b337e981c89774bbe', class: "row gy-3" }, h("div", { key: '27bf72ad4b2729a94be20b8a22e196cb5550c078', class: "col-12" }, this.availablePaymentMethods.map((method) => this.renderPaymentMethodOption(method))), h("div", { key: '3a9c4c7bf7830f66d22fa99fc1ca12f3dcaad390', class: "col-12" }, h("justifi-button", { key: '860fbcdc509a72abecc1e6abe2c8ff45a565ea46', text: this.submitButtonText, variant: "primary", type: "submit", clickHandler: (e) => this.tokenizePaymentMethod(e), isLoading: this.isLoading, "data-testid": "submit-button", hidden: this.computedHideSubmitButton })))))));
1405
+ }
1406
+ get host() { return getElement(this); }
1407
+ static get watchers() { return {
1408
+ "disableCreditCard": ["paymentMethodsChanged"],
1409
+ "disableBankAccount": ["paymentMethodsChanged"]
1410
+ }; }
1411
+ };
1412
+
1413
+ export { Summary as justifi_checkout_summary, Header as justifi_header, ModularCheckout as justifi_modular_checkout, PlaidPaymentMethod as justifi_plaid_payment_method, SavedPaymentMethods as justifi_saved_payment_methods, SezzlePaymentMethod as justifi_sezzle_payment_method, TokenizePaymentMethod as justifi_tokenize_payment_method };