@justifi/webcomponents 5.7.7 → 6.0.0-rc.10

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 (756) hide show
  1. package/dist/cjs/{Api-DLhABIj9.js → Api-DyimBzKT.js} +1 -1
  2. package/dist/cjs/{ComponentError-C4MdBBMe.js → ComponentError-D4OLnOkg.js} +10 -0
  3. package/dist/cjs/{Refund-1bG6RRPO.js → Refund-BefKONu4.js} +248 -1
  4. package/dist/cjs/additional-questions-details_5.cjs.entry.js +2 -1
  5. package/dist/cjs/bank-account-document-form-inputs_4.cjs.entry.js +8 -9
  6. package/dist/cjs/bank-account-form.cjs.entry.js +66 -0
  7. package/dist/cjs/{business.service-CaCyLLFW.js → business.service-BB6zl4Gc.js} +3 -5
  8. package/dist/cjs/card-form.cjs.entry.js +74 -0
  9. package/dist/cjs/{check-pkg-version-D6Kztnv7.js → check-pkg-version-DiQ-d5Nl.js} +10 -6
  10. package/dist/cjs/{checkout.service-DgD37tJv.js → checkout.service-B-R80p4f.js} +3 -5
  11. package/dist/cjs/checkout.store-BGvYPPz0.js +88 -0
  12. package/dist/cjs/checkouts-list-core.cjs.entry.js +6 -7
  13. package/dist/cjs/{checkouts-table-Bzpqcsu0.js → checkouts-table-DjMdEiEW.js} +1 -1
  14. package/dist/cjs/{custom-popper.cjs.entry.js → custom-popper_2.cjs.entry.js} +22 -2
  15. package/dist/cjs/dinero-BwNN_k7x.js +1657 -0
  16. package/dist/cjs/{dispute.service-C0w_4Agq.js → dispute.service-B5tITFAh.js} +3 -5
  17. package/dist/cjs/form-alert_5.cjs.entry.js +4 -4
  18. package/dist/cjs/form-control-checkbox.cjs.entry.js +2 -2
  19. package/dist/cjs/form-control-date.cjs.entry.js +2 -2
  20. package/dist/cjs/form-control-file-v2_2.cjs.entry.js +3 -3
  21. package/dist/cjs/form-control-monetary-provisioning.cjs.entry.js +2 -2
  22. package/dist/cjs/form-control-monetary.cjs.entry.js +4 -3
  23. package/dist/cjs/form-control-number-masked_2.cjs.entry.js +3 -3
  24. package/dist/cjs/form-control-number.cjs.entry.js +2 -2
  25. package/dist/cjs/form-control-radio.cjs.entry.js +2 -2
  26. package/dist/cjs/{form-control-select_3.cjs.entry.js → form-control-select_2.cjs.entry.js} +4 -23
  27. package/dist/cjs/{get-business-BJrtsomz.js → get-business-o5jPq_ME.js} +2 -2
  28. package/dist/cjs/{get-payment-details-BbfnopoD.js → get-payment-details-BfgRmNL4.js} +5 -7
  29. package/dist/cjs/{get-payout-csv-CXEQkjDm.js → get-payout-csv-DE_D9y08.js} +2 -2
  30. package/dist/cjs/{get-subaccounts-CpCJjnYt.js → get-subaccounts-Bnfv2tEN.js} +5 -7
  31. package/dist/cjs/gross-payment-chart-core.cjs.entry.js +3 -2
  32. package/dist/cjs/{iframe-input_4.cjs.entry.js → hidden-input_2.cjs.entry.js} +111 -153
  33. package/dist/cjs/index-D-dD-aC2.js +30 -0
  34. package/dist/cjs/index.cjs.js +8 -0
  35. package/dist/cjs/{insurance-state-e44s1lUQ.js → insurance-state-d2thhXUX.js} +18 -0
  36. package/dist/cjs/justifi-additional-questions-form-step-core_6.cjs.entry.js +4 -5
  37. package/dist/cjs/justifi-additional-questions-form-step_9.cjs.entry.js +17 -18
  38. package/dist/cjs/justifi-additional-statement_8.cjs.entry.js +8 -8
  39. package/dist/cjs/justifi-apple-pay.cjs.entry.js +782 -0
  40. package/dist/cjs/justifi-bank-account-billing-form-simple_9.cjs.entry.js +373 -0
  41. package/dist/cjs/justifi-business-details.cjs.entry.js +11 -12
  42. package/dist/cjs/justifi-business-form.cjs.entry.js +10 -11
  43. package/dist/cjs/justifi-business-representative-form-inputs.cjs.entry.js +1 -1
  44. package/dist/cjs/justifi-checkout-summary_7.cjs.entry.js +1421 -0
  45. package/dist/cjs/justifi-checkout.cjs.entry.js +69 -99
  46. package/dist/cjs/justifi-checkouts-list-filters.cjs.entry.js +11 -12
  47. package/dist/cjs/justifi-checkouts-list.cjs.entry.js +13 -14
  48. package/dist/cjs/justifi-dispute-management-core.cjs.entry.js +1 -1
  49. package/dist/cjs/justifi-dispute-management.cjs.entry.js +10 -11
  50. package/dist/cjs/justifi-dispute-notification_3.cjs.entry.js +13 -14
  51. package/dist/cjs/justifi-gross-payment-chart.cjs.entry.js +8 -9
  52. package/dist/cjs/justifi-order-terminals.cjs.entry.js +12 -13
  53. package/dist/cjs/justifi-owner-form_3.cjs.entry.js +12 -13
  54. package/dist/cjs/justifi-payment-details.cjs.entry.js +11 -12
  55. package/dist/cjs/justifi-payment-provisioning-core.cjs.entry.js +2 -2
  56. package/dist/cjs/justifi-payment-provisioning.cjs.entry.js +11 -12
  57. package/dist/cjs/justifi-payment-transactions-list.cjs.entry.js +10 -11
  58. package/dist/cjs/justifi-payments-list-filters.cjs.entry.js +4 -3
  59. package/dist/cjs/justifi-payments-list.cjs.entry.js +12 -13
  60. package/dist/cjs/justifi-payout-details.cjs.entry.js +10 -11
  61. package/dist/cjs/justifi-payout-transactions-list.cjs.entry.js +10 -11
  62. package/dist/cjs/justifi-payouts-list-filters.cjs.entry.js +4 -3
  63. package/dist/cjs/justifi-payouts-list.cjs.entry.js +13 -14
  64. package/dist/cjs/justifi-refund-payment.cjs.entry.js +10 -11
  65. package/dist/cjs/justifi-saved-payment-method.cjs.entry.js +31 -0
  66. package/dist/cjs/justifi-season-interruption-insurance.cjs.entry.js +120 -18
  67. package/dist/cjs/justifi-skeleton.cjs.entry.js +17 -0
  68. package/dist/cjs/justifi-terminal-orders-list-filters.cjs.entry.js +6 -7
  69. package/dist/cjs/justifi-terminal-orders-list.cjs.entry.js +10 -11
  70. package/dist/cjs/justifi-terminals-list-filters.cjs.entry.js +5 -6
  71. package/dist/cjs/justifi-terminals-list.cjs.entry.js +12 -13
  72. package/dist/cjs/loader.cjs.js +1 -1
  73. package/dist/cjs/{package-C0-LCfay.js → package-Be2aoTf8.js} +1 -1
  74. package/dist/cjs/payment-details-core.cjs.entry.js +10 -9
  75. package/dist/cjs/payment-method-option-utils-WYHIHy-l.js +15 -0
  76. package/dist/cjs/payment-method-option.cjs.entry.js +17 -0
  77. package/dist/cjs/{payment-provisioning-actions-BkWSDJQQ.js → payment-provisioning-actions-CZVlnRA0.js} +2 -2
  78. package/dist/cjs/{payment.service-CtSdIJoy.js → payment.service-aR96UW5e.js} +3 -5
  79. package/dist/cjs/payments-list-core.cjs.entry.js +6 -7
  80. package/dist/cjs/{payments-table-CUGE6F-R.js → payments-table-BE8u0-i0.js} +1 -1
  81. package/dist/cjs/payout-details-core.cjs.entry.js +5 -4
  82. package/dist/cjs/{payout.service-7DP6F8x7.js → payout.service-6Cl_yXXQ.js} +3 -5
  83. package/dist/cjs/payouts-list-core.cjs.entry.js +6 -7
  84. package/dist/cjs/{payouts-table-Ca9HqjV7.js → payouts-table-BbydhJUr.js} +1 -1
  85. package/dist/cjs/table-filters-menu.cjs.entry.js +1 -1
  86. package/dist/cjs/terminal-orders-list-core.cjs.entry.js +6 -7
  87. package/dist/cjs/{terminal-orders-table-DPe_2FNB.js → terminal-orders-table-B4HjERrK.js} +3 -5
  88. package/dist/cjs/terminal-quantity-selector.cjs.entry.js +1 -1
  89. package/dist/cjs/{terminal.service-BR9g1yaB.js → terminal.service-D1FAYZzd.js} +3 -5
  90. package/dist/cjs/terminals-list-core.cjs.entry.js +6 -7
  91. package/dist/cjs/{terminals-table-DDoJIYZu.js → terminals-table-C79Xc4FI.js} +1 -1
  92. package/dist/cjs/{utils-Dewr6SlQ.js → utils-ChCUZgUy.js} +3 -1661
  93. package/dist/cjs/{utils-l0veqT9y.js → utils-DvUQQLmR.js} +1 -1
  94. package/dist/cjs/webcomponents.cjs.js +1 -1
  95. package/dist/collection/actions/checkout/checkout-actions.js +2 -1
  96. package/dist/collection/api/ApplePay.js +119 -0
  97. package/dist/collection/api/BillingInformation.js +1 -0
  98. package/dist/collection/api/Checkout.js +1 -3
  99. package/dist/collection/api/ComponentError.js +10 -0
  100. package/dist/collection/api/Payment.js +5 -2
  101. package/dist/collection/api/PaymentMethod.js +1 -0
  102. package/dist/collection/api/services/apple-pay.service.js +293 -0
  103. package/dist/collection/api/services/plaid.service.js +20 -0
  104. package/dist/collection/assets/plaid-icon.svg +1 -0
  105. package/dist/collection/collection-manifest.json +17 -9
  106. package/dist/collection/components/business-forms/business-form/additional-questions/additional-questions.js +1 -1
  107. package/dist/collection/components/business-forms/business-form/business-core-info/business-core-info.js +1 -1
  108. package/dist/collection/components/business-forms/business-form/business-representative/business-representative.js +1 -1
  109. package/dist/collection/components/business-forms/business-form/legal-address-form/legal-address-form.js +1 -1
  110. package/dist/collection/components/business-forms/owner-form/identity-address/identity-address-form.js +1 -1
  111. package/dist/collection/components/business-forms/owner-form/owner-form-core.js +1 -1
  112. package/dist/collection/components/business-forms/owner-form/owner-form-inputs.js +1 -1
  113. package/dist/collection/components/business-forms/owner-form/owner-form.js +1 -1
  114. package/dist/collection/components/business-forms/payment-provisioning/additional-questions/business-additional-questions-form-step.js +1 -1
  115. package/dist/collection/components/business-forms/payment-provisioning/bank-account/bank-account-document-inputs.js +1 -1
  116. package/dist/collection/components/business-forms/payment-provisioning/bank-account/bank-account-form-inputs.js +1 -1
  117. package/dist/collection/components/business-forms/payment-provisioning/bank-account/business-bank-account-form-step.js +1 -1
  118. package/dist/collection/components/business-forms/payment-provisioning/business-core-info/business-core-info-form-step.js +1 -1
  119. package/dist/collection/components/business-forms/payment-provisioning/business-owners/business-owners-form-step.js +1 -1
  120. package/dist/collection/components/business-forms/payment-provisioning/business-representative/business-representative-form-inputs.js +1 -1
  121. package/dist/collection/components/business-forms/payment-provisioning/business-representative/business-representative-form-step.js +1 -1
  122. package/dist/collection/components/business-forms/payment-provisioning/form-control-monetary-provisioning.js +2 -2
  123. package/dist/collection/components/business-forms/payment-provisioning/legal-address-form/legal-address-form-step.js +1 -1
  124. package/dist/collection/components/business-forms/payment-provisioning/payment-provisioning-core.js +1 -1
  125. package/dist/collection/components/business-forms/payment-provisioning/payment-provisioning-form-buttons.js +1 -1
  126. package/dist/collection/components/business-forms/payment-provisioning/payment-provisioning-form-steps.js +1 -1
  127. package/dist/collection/components/business-forms/payment-provisioning/payment-provisioning.js +1 -1
  128. package/dist/collection/components/business-forms/payment-provisioning/terms-and-conditions/business-terms-conditions-form-step.js +1 -1
  129. package/dist/collection/components/checkout/billing-form/billing-form-schema.js +3 -3
  130. package/dist/collection/components/checkout/card-form/card-form.js +2 -2
  131. package/dist/collection/components/checkout/checkout.js +136 -53
  132. package/dist/collection/components/checkout/payment-method-option-utils.js +0 -1
  133. package/dist/collection/components/checkout/save-new-payment-method.js +9 -5
  134. package/dist/collection/components/checkout/saved-payment-method.js +1 -1
  135. package/dist/collection/components/checkouts-list/checkouts-list-core.js +1 -1
  136. package/dist/collection/components/checkouts-list/checkouts-list-filters.js +1 -1
  137. package/dist/collection/components/checkouts-list/checkouts-list.js +1 -1
  138. package/dist/collection/components/dispute-management/dispute-management-core.js +1 -1
  139. package/dist/collection/components/dispute-management/dispute-management.js +1 -1
  140. package/dist/collection/components/dispute-management/dispute-notification.js +1 -1
  141. package/dist/collection/components/dispute-management/dispute-response/additional-statement.js +1 -1
  142. package/dist/collection/components/dispute-management/dispute-response/cancellation-policy.js +1 -1
  143. package/dist/collection/components/dispute-management/dispute-response/customer-details.js +1 -1
  144. package/dist/collection/components/dispute-management/dispute-response/dispute-response-core.js +1 -1
  145. package/dist/collection/components/dispute-management/dispute-response/dispute-response.js +1 -1
  146. package/dist/collection/components/dispute-management/dispute-response/duplicate-charge.js +1 -1
  147. package/dist/collection/components/dispute-management/dispute-response/electronic-evidence.js +1 -1
  148. package/dist/collection/components/dispute-management/dispute-response/product-or-service.js +1 -1
  149. package/dist/collection/components/dispute-management/dispute-response/refund-policy.js +1 -1
  150. package/dist/collection/components/dispute-management/dispute-response/shipping-details.js +1 -1
  151. package/dist/collection/components/filters/table-filters-menu.js +1 -1
  152. package/dist/collection/components/gross-payment-chart/gross-payment-chart-core.js +1 -1
  153. package/dist/collection/components/insurance/insurance-state.js +18 -1
  154. package/dist/collection/components/insurance/season-interruption/season-interruption-insurance.js +118 -12
  155. package/dist/collection/components/modular-checkout/ModularCheckout.js +28 -0
  156. package/dist/collection/components/modular-checkout/modular-checkout.js +525 -0
  157. package/dist/collection/components/modular-checkout/sub-components/apple-pay-skeleton.js +10 -0
  158. package/dist/collection/components/modular-checkout/sub-components/apple-pay.js +509 -0
  159. package/dist/collection/components/{checkout/billing-form → modular-checkout/sub-components}/bank-account-billing-form-simple.js +7 -5
  160. package/dist/collection/components/modular-checkout/sub-components/bank-account-skeleton.js +10 -0
  161. package/dist/collection/components/modular-checkout/sub-components/bank-account.js +98 -0
  162. package/dist/collection/components/{checkout/billing-form → modular-checkout/sub-components}/billing-form-full.js +12 -8
  163. package/dist/collection/components/{checkout/billing-form → modular-checkout/sub-components}/card-billing-form-simple.js +7 -5
  164. package/dist/collection/components/modular-checkout/sub-components/card-form-skeleton.js +10 -0
  165. package/dist/collection/components/modular-checkout/sub-components/card-form.js +102 -0
  166. package/dist/collection/components/modular-checkout/sub-components/payment-method-option.js +113 -0
  167. package/dist/collection/components/modular-checkout/sub-components/plaid-payment-method.js +885 -0
  168. package/dist/collection/components/modular-checkout/sub-components/plaid-payment-method.test.js +124 -0
  169. package/dist/collection/components/modular-checkout/sub-components/saved-payment-methods.js +42 -0
  170. package/dist/collection/components/modular-checkout/sub-components/sezzle-payment-method.js +144 -0
  171. package/dist/collection/components/modular-checkout/sub-components/summary.js +12 -0
  172. package/dist/collection/components/order-terminals/order-terminals.js +1 -1
  173. package/dist/collection/components/order-terminals/terminal-quantity-selector/terminal-quantity-selector.js +1 -1
  174. package/dist/collection/components/payment-details/payment-details-core.js +8 -8
  175. package/dist/collection/components/payment-transactions-list/payment-transactions-list.js +1 -1
  176. package/dist/collection/components/payments-list/payments-list-core.js +1 -1
  177. package/dist/collection/components/payments-list/payments-list-filters.js +2 -2
  178. package/dist/collection/components/payments-list/payments-list.js +1 -1
  179. package/dist/collection/components/payout-details/payout-details-core.js +3 -3
  180. package/dist/collection/components/payout-transactions-list/payout-transactions-list.js +1 -1
  181. package/dist/collection/components/payouts-list/payouts-list-core.js +1 -1
  182. package/dist/collection/components/payouts-list/payouts-list-filters.js +2 -2
  183. package/dist/collection/components/payouts-list/payouts-list.js +1 -1
  184. package/dist/collection/components/terminal-orders-list/terminal-orders-list-core.js +1 -1
  185. package/dist/collection/components/terminal-orders-list/terminal-orders-list-filters.js +2 -2
  186. package/dist/collection/components/terminal-orders-list/terminal-orders-list.js +1 -1
  187. package/dist/collection/components/terminals-list/terminals-list-core.js +1 -1
  188. package/dist/collection/components/terminals-list/terminals-list-filters.js +1 -1
  189. package/dist/collection/components/terminals-list/terminals-list.js +1 -1
  190. package/dist/collection/components/tokenize-payment-method/tokenize-payment-method.js +317 -78
  191. package/dist/collection/index.js +1 -0
  192. package/dist/collection/store/checkout.store.js +78 -0
  193. package/dist/collection/ui-components/apple-pay-button.js +146 -0
  194. package/dist/collection/ui-components/custom-popper/custom-popper.js +2 -2
  195. package/dist/collection/ui-components/form/form-control-checkbox.js +2 -2
  196. package/dist/collection/ui-components/form/form-control-date.js +2 -2
  197. package/dist/collection/ui-components/form/form-control-file-v2.js +1 -1
  198. package/dist/collection/ui-components/form/form-control-file.js +2 -2
  199. package/dist/collection/ui-components/form/form-control-monetary.js +2 -2
  200. package/dist/collection/ui-components/form/form-control-number-masked.js +2 -2
  201. package/dist/collection/ui-components/form/form-control-number.js +2 -2
  202. package/dist/collection/ui-components/form/form-control-radio.js +5 -5
  203. package/dist/collection/ui-components/form/form-control-select.js +2 -2
  204. package/dist/collection/ui-components/form/form-control-text.js +2 -2
  205. package/dist/collection/ui-components/form/form-control-textarea.js +2 -2
  206. package/dist/collection/ui-components/form/hidden-input.js +1 -1
  207. package/dist/collection/ui-components/form/iframe-input.js +10 -5
  208. package/dist/collection/ui-components/index.js +1 -0
  209. package/dist/collection/ui-components/shadow-dom-components/justifi-button.js +176 -0
  210. package/dist/collection/ui-components/shadow-dom-components/justifi-header.js +83 -0
  211. package/dist/collection/ui-components/shadow-dom-components/justifi-radio-list-item.js +155 -0
  212. package/dist/collection/ui-components/shadow-dom-components/justifi-skeleton.js +108 -0
  213. package/dist/collection/utils/check-pkg-version.js +6 -0
  214. package/dist/docs.json +5408 -5097
  215. package/dist/esm/{Api-BJv2_XdA.js → Api-DAWuvzbl.js} +1 -1
  216. package/dist/esm/{ComponentError-SdntD1xf.js → ComponentError-Cjcsf8ku.js} +11 -1
  217. package/dist/esm/{Dispute-7MWRbTXI.js → Dispute-BH0Xfn-F.js} +1 -1
  218. package/dist/esm/{Refund-Dwnnpqim.js → Refund-CVh70dXA.js} +247 -2
  219. package/dist/esm/additional-questions-details_5.entry.js +4 -3
  220. package/dist/esm/{badge-XXatxWS0.js → badge-DSYSJcRy.js} +1 -1
  221. package/dist/esm/bank-account-document-form-inputs_4.entry.js +12 -13
  222. package/dist/{module/bank-account-form2.js → esm/bank-account-form.entry.js} +12 -36
  223. package/dist/esm/business-details-core.entry.js +3 -3
  224. package/dist/esm/{business.service-Di9jP2_p.js → business.service-cQrH5BqF.js} +4 -6
  225. package/dist/esm/{button-C-ZZ9yD1.js → button-CpllL0At.js} +1 -1
  226. package/dist/esm/card-form.entry.js +72 -0
  227. package/dist/esm/{check-pkg-version-8KHO3ihW.js → check-pkg-version-CAnDiqiu.js} +11 -7
  228. package/dist/esm/{checkout.service-l-H_OIZa.js → checkout.service-Bbgi1I6V.js} +4 -6
  229. package/dist/esm/checkout.store-CCdFOPCK.js +83 -0
  230. package/dist/esm/checkouts-list-core.entry.js +11 -12
  231. package/dist/esm/{checkouts-table-DmwocPX2.js → checkouts-table-Ddf2I-Ul.js} +3 -3
  232. package/dist/esm/{custom-popper.entry.js → custom-popper_2.entry.js} +22 -3
  233. package/dist/esm/dinero-HXpYMWUU.js +1655 -0
  234. package/dist/esm/{dispute.service-CaEbHFjw.js → dispute.service-CrZsNDW8.js} +4 -6
  235. package/dist/esm/form-alert_5.entry.js +5 -5
  236. package/dist/esm/form-control-checkbox.entry.js +5 -5
  237. package/dist/esm/form-control-date.entry.js +4 -4
  238. package/dist/esm/{form-control-error-text-eKr_QuRZ.js → form-control-error-text-R7U07nTg.js} +1 -1
  239. package/dist/esm/form-control-file-v2_2.entry.js +5 -5
  240. package/dist/esm/{form-control-help-text-Dw2vjMQ5.js → form-control-help-text-CRLH-2f7.js} +1 -1
  241. package/dist/esm/form-control-monetary-provisioning.entry.js +5 -5
  242. package/dist/esm/form-control-monetary.entry.js +7 -6
  243. package/dist/esm/form-control-number-masked_2.entry.js +5 -5
  244. package/dist/esm/form-control-number.entry.js +5 -5
  245. package/dist/esm/form-control-radio.entry.js +3 -3
  246. package/dist/esm/{form-control-select_3.entry.js → form-control-select_2.entry.js} +7 -25
  247. package/dist/esm/{get-business-GEPTefIj.js → get-business-Crb6P-iI.js} +2 -2
  248. package/dist/esm/{get-payment-details-BOpjKcRB.js → get-payment-details-0VzpMNY9.js} +5 -7
  249. package/dist/esm/{get-payout-csv-D7IYYqVL.js → get-payout-csv-D-Lnooki.js} +2 -2
  250. package/dist/esm/{get-subaccounts-0Ri4RB5r.js → get-subaccounts-9UMbyFiT.js} +6 -8
  251. package/dist/esm/gross-payment-chart-core.entry.js +6 -5
  252. package/dist/esm/{header-1-BnwrlkS-.js → header-1-3M9If0gM.js} +1 -1
  253. package/dist/esm/{header-3-IOnOCyak.js → header-3-CWa41YWq.js} +1 -1
  254. package/dist/esm/{iframe-input_4.entry.js → hidden-input_2.entry.js} +106 -146
  255. package/dist/esm/index-CbL73B6U.js +30 -0
  256. package/dist/esm/index.js +1 -1
  257. package/dist/esm/insurance-state-CTalqbNa.js +45 -0
  258. package/dist/esm/justifi-additional-questions-form-step-core_6.entry.js +8 -9
  259. package/dist/esm/justifi-additional-questions-form-step_9.entry.js +20 -21
  260. package/dist/esm/justifi-additional-statement_8.entry.js +9 -9
  261. package/dist/esm/justifi-apple-pay.entry.js +780 -0
  262. package/dist/esm/justifi-bank-account-billing-form-simple_9.entry.js +363 -0
  263. package/dist/esm/justifi-business-details.entry.js +13 -14
  264. package/dist/esm/justifi-business-form.entry.js +15 -16
  265. package/dist/esm/justifi-business-representative-form-inputs.entry.js +2 -2
  266. package/dist/esm/justifi-checkout-summary_7.entry.js +1413 -0
  267. package/dist/esm/justifi-checkout.entry.js +69 -99
  268. package/dist/esm/justifi-checkouts-list-filters.entry.js +7 -8
  269. package/dist/esm/justifi-checkouts-list.entry.js +15 -16
  270. package/dist/esm/justifi-details.entry.js +2 -2
  271. package/dist/esm/justifi-dispute-management-core.entry.js +2 -2
  272. package/dist/esm/justifi-dispute-management.entry.js +11 -12
  273. package/dist/esm/justifi-dispute-notification_3.entry.js +16 -17
  274. package/dist/esm/justifi-gross-payment-chart.entry.js +11 -12
  275. package/dist/esm/justifi-order-terminals.entry.js +15 -16
  276. package/dist/esm/justifi-owner-form_3.entry.js +14 -15
  277. package/dist/esm/justifi-payment-details.entry.js +13 -14
  278. package/dist/esm/justifi-payment-provisioning-core.entry.js +4 -4
  279. package/dist/esm/justifi-payment-provisioning.entry.js +12 -13
  280. package/dist/esm/justifi-payment-transactions-list.entry.js +14 -15
  281. package/dist/esm/justifi-payments-list-filters.entry.js +5 -4
  282. package/dist/esm/justifi-payments-list.entry.js +15 -16
  283. package/dist/esm/justifi-payout-details.entry.js +13 -14
  284. package/dist/esm/justifi-payout-transactions-list.entry.js +14 -15
  285. package/dist/esm/justifi-payouts-list-filters.entry.js +5 -4
  286. package/dist/esm/justifi-payouts-list.entry.js +17 -18
  287. package/dist/esm/justifi-refund-payment.entry.js +14 -15
  288. package/dist/esm/justifi-saved-payment-method.entry.js +29 -0
  289. package/dist/esm/justifi-season-interruption-insurance.entry.js +122 -20
  290. package/dist/esm/justifi-skeleton.entry.js +15 -0
  291. package/dist/esm/justifi-terminal-orders-list-filters.entry.js +8 -9
  292. package/dist/esm/justifi-terminal-orders-list.entry.js +13 -14
  293. package/dist/esm/justifi-terminals-list-filters.entry.js +7 -8
  294. package/dist/esm/justifi-terminals-list.entry.js +15 -16
  295. package/dist/esm/loader.js +1 -1
  296. package/dist/esm/{package-BOCuVjGs.js → package-CnWtPu8L.js} +1 -1
  297. package/dist/esm/pagination-menu.entry.js +1 -1
  298. package/dist/esm/{parts-CVGBVdVC.js → parts-RvUQ__Pq.js} +1 -1
  299. package/dist/esm/payment-details-core.entry.js +15 -14
  300. package/dist/esm/payment-method-option-utils-lUHAQVFl.js +15 -0
  301. package/dist/esm/payment-method-option.entry.js +15 -0
  302. package/dist/esm/{payment-provisioning-actions-BIfyW239.js → payment-provisioning-actions-ONP8lDnV.js} +2 -2
  303. package/dist/esm/{payment.service-Dz5mhgIm.js → payment.service-TxyxCg0E.js} +4 -6
  304. package/dist/esm/payments-list-core.entry.js +12 -13
  305. package/dist/esm/{payments-status-CN8wEqKC.js → payments-status-5orNU2Rd.js} +1 -1
  306. package/dist/esm/{payments-table-SmMgUr5X.js → payments-table-gkJV5GNK.js} +3 -3
  307. package/dist/esm/payout-details-core.entry.js +11 -10
  308. package/dist/esm/{payout.service-DUnRbCmv.js → payout.service-BOwZ4wWh.js} +4 -6
  309. package/dist/esm/payouts-list-core.entry.js +12 -13
  310. package/dist/esm/{payouts-status-BzTh9X2W.js → payouts-status-CZPwa2AE.js} +1 -1
  311. package/dist/esm/{payouts-table-SB6q0e7V.js → payouts-table-0PtktGRd.js} +3 -3
  312. package/dist/esm/{skeleton-DK6mW457.js → skeleton-qMb0_Cjy.js} +1 -1
  313. package/dist/esm/{spinner-CWoD0q_S.js → spinner-DUzyWLhj.js} +1 -1
  314. package/dist/esm/{table-KCj3mM1K.js → table-Br3n9Xu-.js} +2 -2
  315. package/dist/esm/table-filters-menu.entry.js +3 -3
  316. package/dist/esm/terminal-orders-list-core.entry.js +11 -12
  317. package/dist/esm/{terminal-orders-table-CPsSDEWs.js → terminal-orders-table-DTBSIMlJ.js} +6 -8
  318. package/dist/esm/terminal-quantity-selector.entry.js +2 -2
  319. package/dist/esm/{terminal.service-Vhk3qPk2.js → terminal.service-E6dZlM43.js} +4 -6
  320. package/dist/esm/terminals-list-core.entry.js +11 -12
  321. package/dist/esm/{terminals-table-CAavYaG5.js → terminals-table-TGUKTi7I.js} +3 -3
  322. package/dist/esm/{utils-Dccsn9BY.js → utils-BeQLScSm.js} +1 -1
  323. package/dist/esm/{utils-CKEiU2Q5.js → utils-BscIVFn8.js} +3 -1660
  324. package/dist/esm/{utils-_kzStVq_.js → utils-Dg6gMUTv.js} +1 -1
  325. package/dist/esm/webcomponents.js +1 -1
  326. package/dist/module/{check-pkg-version.js → Analytics.js} +28 -24
  327. package/dist/module/ModularCheckout.js +30 -0
  328. package/dist/module/Refund.js +331 -1
  329. package/dist/module/additional-questions.js +1 -1
  330. package/dist/module/additional-statement.js +2 -2
  331. package/dist/module/badge.js +1 -1
  332. package/dist/module/bank-account-billing-form-simple.js +9 -4
  333. package/dist/module/bank-account-document-inputs.js +3 -5
  334. package/dist/module/bank-account-form-inputs2.js +1 -1
  335. package/dist/module/bank-account-form.js +86 -1
  336. package/dist/module/bank-account.js +103 -0
  337. package/dist/module/billing-form-full.js +14 -11
  338. package/dist/module/billing-form-schema.js +3 -3
  339. package/dist/module/business-additional-questions-form-step.js +2 -2
  340. package/dist/module/business-bank-account-form-step-core.js +2 -4
  341. package/dist/module/business-bank-account-form-step.js +3 -5
  342. package/dist/module/business-core-info-form-step.js +2 -2
  343. package/dist/module/business-core-info.js +1 -1
  344. package/dist/module/business-details-core2.js +1 -0
  345. package/dist/module/business-documents-on-file2.js +2 -1
  346. package/dist/module/business-owners-form-step-core.js +1 -0
  347. package/dist/module/business-owners-form-step.js +2 -2
  348. package/dist/module/business-representative-form-inputs.js +1 -1
  349. package/dist/module/business-representative-form-step.js +2 -2
  350. package/dist/module/business-representative.js +1 -1
  351. package/dist/module/business-terms-conditions-form-step.js +2 -4
  352. package/dist/module/business.service.js +1 -3
  353. package/dist/module/button.js +1 -1
  354. package/dist/module/cancellation-policy.js +2 -2
  355. package/dist/module/card-billing-form-simple.js +9 -4
  356. package/dist/module/card-form.js +94 -1
  357. package/dist/module/card-form2.js +28 -13
  358. package/dist/module/checkout.service.js +1 -3
  359. package/dist/module/checkout.store.js +81 -0
  360. package/dist/module/checkouts-list-core2.js +6 -6
  361. package/dist/module/custom-popper2.js +2 -2
  362. package/dist/module/customer-details.js +2 -2
  363. package/dist/module/dinero.js +1655 -0
  364. package/dist/module/dispute-management-core.js +2 -2
  365. package/dist/module/dispute-notification.js +3 -2
  366. package/dist/module/dispute-response-actions.js +1 -3
  367. package/dist/module/dispute-response-core.js +2 -2
  368. package/dist/module/dispute-response.js +4 -3
  369. package/dist/module/duplicate-charge.js +2 -2
  370. package/dist/module/electronic-evidence.js +2 -2
  371. package/dist/module/form-alert2.js +1 -1
  372. package/dist/module/form-control-checkbox2.js +4 -3
  373. package/dist/module/form-control-date2.js +3 -2
  374. package/dist/module/form-control-file-v22.js +1 -1
  375. package/dist/module/form-control-file2.js +3 -2
  376. package/dist/module/form-control-monetary-provisioning2.js +4 -3
  377. package/dist/module/form-control-monetary2.js +4 -3
  378. package/dist/module/form-control-number-masked2.js +3 -2
  379. package/dist/module/form-control-number.js +4 -3
  380. package/dist/module/form-control-radio2.js +4 -4
  381. package/dist/module/form-control-select2.js +3 -2
  382. package/dist/module/form-control-text2.js +3 -2
  383. package/dist/module/form-control-textarea2.js +3 -3
  384. package/dist/module/get-business.js +1 -1
  385. package/dist/module/get-payment-details.js +2 -4
  386. package/dist/module/get-payout-csv.js +1 -1
  387. package/dist/module/get-subaccounts.js +2 -4
  388. package/dist/module/gross-payment-chart-core2.js +2 -2
  389. package/dist/module/header-2.js +8 -0
  390. package/dist/module/header-3.js +8 -0
  391. package/dist/module/hidden-input2.js +2 -2
  392. package/dist/module/identity-address-form.js +1 -1
  393. package/dist/module/iframe-input2.js +6 -6
  394. package/dist/module/index.js +1 -0
  395. package/dist/module/insurance-state.js +18 -7
  396. package/dist/module/{justifi-checkout-core.d.ts → justifi-apple-pay.d.ts} +4 -4
  397. package/dist/module/justifi-apple-pay.js +811 -0
  398. package/dist/module/justifi-bank-account-form.d.ts +11 -0
  399. package/dist/module/justifi-bank-account-form.js +6 -0
  400. package/dist/module/justifi-business-details.js +2 -2
  401. package/dist/module/justifi-business-form.js +4 -5
  402. package/dist/module/justifi-button.d.ts +11 -0
  403. package/dist/module/justifi-button.js +6 -0
  404. package/dist/module/justifi-button2.js +41 -0
  405. package/dist/module/justifi-card-form.d.ts +11 -0
  406. package/dist/module/justifi-card-form.js +6 -0
  407. package/dist/module/justifi-checkout-summary.d.ts +11 -0
  408. package/dist/module/justifi-checkout-summary.js +6 -0
  409. package/dist/module/justifi-checkout.js +147 -139
  410. package/dist/module/justifi-checkouts-list-filters.js +4 -5
  411. package/dist/module/justifi-checkouts-list.js +5 -6
  412. package/dist/module/justifi-dispute-management.js +3 -4
  413. package/dist/module/justifi-gross-payment-chart.js +2 -4
  414. package/dist/module/justifi-header.d.ts +11 -0
  415. package/dist/module/justifi-header.js +6 -0
  416. package/dist/module/justifi-header2.js +43 -0
  417. package/dist/module/justifi-modular-checkout.d.ts +11 -0
  418. package/dist/module/justifi-modular-checkout.js +6 -0
  419. package/dist/module/justifi-order-terminals.js +7 -7
  420. package/dist/module/justifi-payment-details.js +2 -2
  421. package/dist/module/justifi-payment-provisioning.js +3 -5
  422. package/dist/module/justifi-payment-transactions-list.js +7 -7
  423. package/dist/module/justifi-payments-list-filters.js +4 -3
  424. package/dist/module/justifi-payments-list.js +5 -6
  425. package/dist/module/justifi-payout-details.js +3 -5
  426. package/dist/module/justifi-payout-transactions-list.js +7 -7
  427. package/dist/module/justifi-payouts-list-filters.js +4 -3
  428. package/dist/module/justifi-payouts-list.js +5 -6
  429. package/dist/module/justifi-plaid-payment-method.d.ts +11 -0
  430. package/dist/module/justifi-plaid-payment-method.js +6 -0
  431. package/dist/module/justifi-radio-list-item.d.ts +11 -0
  432. package/dist/module/justifi-radio-list-item.js +6 -0
  433. package/dist/module/justifi-radio-list-item2.js +55 -0
  434. package/dist/module/justifi-refund-payment.js +3 -4
  435. package/dist/module/justifi-saved-payment-method.js +57 -1
  436. package/dist/module/justifi-saved-payment-methods.d.ts +11 -0
  437. package/dist/module/justifi-saved-payment-methods.js +6 -0
  438. package/dist/module/justifi-season-interruption-insurance.js +124 -24
  439. package/dist/module/justifi-skeleton.d.ts +11 -0
  440. package/dist/module/justifi-skeleton.js +39 -0
  441. package/dist/module/justifi-terminal-orders-list-filters.js +5 -6
  442. package/dist/module/justifi-terminal-orders-list.js +5 -6
  443. package/dist/module/justifi-terminals-list-filters.js +4 -5
  444. package/dist/module/justifi-terminals-list.js +5 -6
  445. package/dist/module/justifi-tokenize-payment-method.js +1 -219
  446. package/dist/module/legal-address-form-step.js +2 -2
  447. package/dist/module/legal-address-form.js +1 -1
  448. package/dist/module/modular-checkout.js +406 -0
  449. package/dist/module/owner-form-core2.js +3 -2
  450. package/dist/module/owner-form-inputs2.js +1 -1
  451. package/dist/module/owner-form.js +1 -1
  452. package/dist/module/package.js +3 -3
  453. package/dist/module/pagination-menu2.js +1 -1
  454. package/dist/module/parts.js +1 -1
  455. package/dist/module/payment-details-core2.js +10 -9
  456. package/dist/module/payment-method-option-utils.js +15 -0
  457. package/dist/module/payment-method-option.d.ts +11 -0
  458. package/dist/module/payment-method-option.js +54 -0
  459. package/dist/module/payment-provisioning-actions.js +1 -1
  460. package/dist/module/payment-provisioning-core.js +3 -2
  461. package/dist/module/payment-provisioning-form-buttons.js +2 -1
  462. package/dist/module/payment-provisioning-form-steps.js +1 -1
  463. package/dist/module/payment-provisioning-loading.js +1 -0
  464. package/dist/module/payment.service.js +1 -3
  465. package/dist/module/payments-list-core2.js +6 -6
  466. package/dist/module/payout-details-core2.js +5 -4
  467. package/dist/module/payout.service.js +1 -3
  468. package/dist/module/payouts-list-core2.js +6 -6
  469. package/dist/module/plaid-payment-method.js +687 -0
  470. package/dist/module/product-or-service.js +2 -2
  471. package/dist/module/refund-policy.js +2 -2
  472. package/dist/module/save-new-payment-method.js +13 -6
  473. package/dist/module/saved-payment-methods.js +75 -0
  474. package/dist/module/sezzle-payment-method.js +34 -35
  475. package/dist/module/shipping-details.js +2 -2
  476. package/dist/module/spinner.js +1 -1
  477. package/dist/module/summary.js +35 -0
  478. package/dist/module/table-filters-menu2.js +1 -1
  479. package/dist/module/table.js +1 -1
  480. package/dist/module/terminal-orders-list-core2.js +6 -6
  481. package/dist/module/terminal-quantity-selector2.js +2 -2
  482. package/dist/module/terminal.service.js +1 -3
  483. package/dist/module/terminals-list-core2.js +6 -6
  484. package/dist/module/tokenize-payment-method.js +410 -0
  485. package/dist/module/utils2.js +3 -1660
  486. package/dist/module/utils4.js +1 -1
  487. package/dist/types/api/ApplePay.d.ts +196 -0
  488. package/dist/types/api/BillingInformation.d.ts +13 -0
  489. package/dist/types/api/Checkout.d.ts +23 -26
  490. package/dist/types/api/ComponentError.d.ts +10 -1
  491. package/dist/types/api/Payment.d.ts +4 -3
  492. package/dist/types/api/PaymentMethod.d.ts +21 -0
  493. package/dist/types/api/services/apple-pay.service.d.ts +55 -0
  494. package/dist/types/api/services/plaid.service.d.ts +12 -0
  495. package/dist/types/components/checkout/billing-form/billing-form-schema.d.ts +4 -4
  496. package/dist/types/components/checkout/checkout.d.ts +26 -11
  497. package/dist/types/components/checkout/save-new-payment-method.d.ts +1 -1
  498. package/dist/types/components/insurance/insurance-state.d.ts +2 -1
  499. package/dist/types/components/insurance/season-interruption/season-interruption-insurance.d.ts +9 -3
  500. package/dist/types/components/modular-checkout/ModularCheckout.d.ts +31 -0
  501. package/dist/types/components/modular-checkout/modular-checkout.d.ts +43 -0
  502. package/dist/types/components/modular-checkout/sub-components/apple-pay-skeleton.d.ts +6 -0
  503. package/dist/types/components/modular-checkout/sub-components/apple-pay.d.ts +39 -0
  504. package/dist/types/components/{checkout/billing-form → modular-checkout/sub-components}/bank-account-billing-form-simple.d.ts +1 -1
  505. package/dist/types/components/modular-checkout/sub-components/bank-account-skeleton.d.ts +6 -0
  506. package/dist/types/components/modular-checkout/sub-components/bank-account.d.ts +18 -0
  507. package/dist/types/components/{checkout/billing-form → modular-checkout/sub-components}/billing-form-full.d.ts +1 -2
  508. package/dist/types/components/{checkout/billing-form → modular-checkout/sub-components}/card-billing-form-simple.d.ts +1 -1
  509. package/dist/types/components/modular-checkout/sub-components/card-form-skeleton.d.ts +6 -0
  510. package/dist/types/components/modular-checkout/sub-components/card-form.d.ts +20 -0
  511. package/dist/types/components/modular-checkout/sub-components/payment-method-option.d.ts +8 -0
  512. package/dist/types/components/modular-checkout/sub-components/plaid-payment-method.d.ts +80 -0
  513. package/dist/types/components/modular-checkout/sub-components/plaid-payment-method.test.d.ts +1 -0
  514. package/dist/types/components/modular-checkout/sub-components/saved-payment-methods.d.ts +7 -0
  515. package/dist/types/components/{checkout → modular-checkout/sub-components}/sezzle-payment-method.d.ts +4 -10
  516. package/dist/types/components/modular-checkout/sub-components/summary.d.ts +3 -0
  517. package/dist/types/components/tokenize-payment-method/tokenize-payment-method.d.ts +45 -17
  518. package/dist/types/components.d.ts +468 -223
  519. package/dist/types/index.d.ts +2 -0
  520. package/dist/types/store/checkout.store.d.ts +38 -0
  521. package/dist/types/ui-components/apple-pay-button.d.ts +17 -0
  522. package/dist/types/ui-components/form/form-control-radio.d.ts +1 -1
  523. package/dist/types/ui-components/form/iframe-input.d.ts +2 -1
  524. package/dist/types/ui-components/index.d.ts +1 -0
  525. package/dist/types/ui-components/shadow-dom-components/justifi-button.d.ts +13 -0
  526. package/dist/types/ui-components/shadow-dom-components/justifi-radio-list-item.d.ts +12 -0
  527. package/dist/types/ui-components/shadow-dom-components/justifi-skeleton.d.ts +10 -0
  528. package/dist/webcomponents/index.esm.js +1 -0
  529. package/dist/webcomponents/p-0803d130.entry.js +1 -0
  530. package/dist/webcomponents/{p-BtyEAd0R.js → p-0Om7jLBs.js} +1 -1
  531. package/dist/webcomponents/p-117b7f47.entry.js +1 -0
  532. package/dist/webcomponents/p-17093105.entry.js +1 -0
  533. package/dist/webcomponents/p-1a08b47f.entry.js +1 -0
  534. package/dist/webcomponents/p-1bcb3852.entry.js +1 -0
  535. package/dist/webcomponents/p-1eb2b847.entry.js +1 -0
  536. package/dist/webcomponents/p-2f7aa249.entry.js +1 -0
  537. package/dist/webcomponents/{p-7a0661a2.entry.js → p-2fa34c82.entry.js} +4 -4
  538. package/dist/webcomponents/p-33311d41.entry.js +1 -0
  539. package/dist/webcomponents/p-336c31b3.entry.js +1 -0
  540. package/dist/webcomponents/p-3f33c940.entry.js +1 -0
  541. package/dist/webcomponents/p-442f86e8.entry.js +1 -0
  542. package/dist/webcomponents/{p-80b6c011.entry.js → p-44450a94.entry.js} +1 -1
  543. package/dist/webcomponents/p-464e7a8e.entry.js +1 -0
  544. package/dist/webcomponents/p-50392803.entry.js +1 -0
  545. package/dist/webcomponents/p-52cbd667.entry.js +1 -0
  546. package/dist/webcomponents/{p-d43a4316.entry.js → p-54ca3070.entry.js} +1 -1
  547. package/dist/webcomponents/{p-BTS3E50C.js → p-5aA7gjr5.js} +1 -1
  548. package/dist/webcomponents/p-5ad0f438.entry.js +1 -0
  549. package/dist/webcomponents/p-613421d4.entry.js +1 -0
  550. package/dist/webcomponents/p-62d12566.entry.js +1 -0
  551. package/dist/webcomponents/p-65ed60bf.entry.js +1 -0
  552. package/dist/webcomponents/p-6cf30a24.entry.js +1 -0
  553. package/dist/webcomponents/{p-bcadc072.entry.js → p-70f51444.entry.js} +1 -1
  554. package/dist/webcomponents/p-729dbd8f.entry.js +1 -0
  555. package/dist/webcomponents/p-77948b46.entry.js +1 -0
  556. package/dist/webcomponents/p-7bcfaff4.entry.js +1 -0
  557. package/dist/webcomponents/{p-96247d70.entry.js → p-7cf87637.entry.js} +1 -1
  558. package/dist/webcomponents/p-7dd74e6f.entry.js +1 -0
  559. package/dist/webcomponents/{p-ck6bcYXe.js → p-7s1gsXM5.js} +1 -1
  560. package/dist/webcomponents/p-80331983.entry.js +1 -0
  561. package/dist/webcomponents/p-85f20746.entry.js +1 -0
  562. package/dist/webcomponents/p-8687e5d6.entry.js +1 -0
  563. package/dist/webcomponents/p-89ecd650.entry.js +1 -0
  564. package/dist/webcomponents/p-8a6718b6.entry.js +1 -0
  565. package/dist/webcomponents/p-8d6b81ba.entry.js +1 -0
  566. package/dist/webcomponents/p-8d743490.entry.js +1 -0
  567. package/dist/webcomponents/p-8f7396b1.entry.js +1 -0
  568. package/dist/webcomponents/p-8ff839a4.entry.js +1 -0
  569. package/dist/webcomponents/{p-d53c3370.entry.js → p-95cbb655.entry.js} +1 -1
  570. package/dist/webcomponents/p-98cffba9.entry.js +1 -0
  571. package/dist/webcomponents/{p-cdd2c7c8.entry.js → p-9a2c044f.entry.js} +1 -1
  572. package/dist/webcomponents/p-9be67b19.entry.js +1 -0
  573. package/dist/webcomponents/p-9e8021a1.entry.js +1 -0
  574. package/dist/webcomponents/p-9fc0ea58.entry.js +1 -0
  575. package/dist/webcomponents/p-9fc567d8.entry.js +1 -0
  576. package/dist/webcomponents/p-9fcff84c.entry.js +1 -0
  577. package/dist/webcomponents/p-B71k50jz.js +1 -0
  578. package/dist/webcomponents/p-BF4U0yVj.js +1 -0
  579. package/dist/webcomponents/{p-7MWRbTXI.js → p-BH0Xfn-F.js} +1 -1
  580. package/dist/webcomponents/p-BHf9IqGw.js +1 -0
  581. package/dist/webcomponents/p-BSt6p1oq.js +1 -0
  582. package/dist/webcomponents/{p-BQQ7ifKz.js → p-Bb-6bNcq.js} +1 -1
  583. package/dist/webcomponents/p-BbZwa5UI.js +1 -0
  584. package/dist/webcomponents/p-BdKWuCys.js +1 -0
  585. package/dist/webcomponents/p-BfM6X7lF.js +1 -0
  586. package/dist/webcomponents/{p-DK0C7j0u.js → p-BjVfIXWC.js} +1 -1
  587. package/dist/webcomponents/{p-BpWSwi9x.js → p-BsGE9UDv.js} +1 -1
  588. package/dist/webcomponents/{p-DV1c2IYS.js → p-C5id7s_l.js} +1 -1
  589. package/dist/webcomponents/{p-dzS7n4Xj.js → p-CAJnQLZF.js} +1 -1
  590. package/dist/webcomponents/{p-DetWIU1e.js → p-CB0mCq1M.js} +1 -1
  591. package/dist/webcomponents/p-CaAVuW6B.js +1 -0
  592. package/dist/webcomponents/p-Cb0FhuyU.js +1 -0
  593. package/dist/webcomponents/p-CbL73B6U.js +1 -0
  594. package/dist/webcomponents/p-Cjcsf8ku.js +1 -0
  595. package/dist/webcomponents/p-CnWtPu8L.js +1 -0
  596. package/dist/webcomponents/{p-C5RuuShs.js → p-D2muobcE.js} +1 -1
  597. package/dist/webcomponents/{p-v6yK8Vbe.js → p-DD0Mvpeu.js} +1 -1
  598. package/dist/webcomponents/{p-B_t2t34m.js → p-DDUmOl3v.js} +1 -1
  599. package/dist/webcomponents/p-DH8F0bsw.js +1 -0
  600. package/dist/webcomponents/p-DIDloHpm.js +1 -0
  601. package/dist/webcomponents/p-DIjoBk44.js +1 -0
  602. package/dist/webcomponents/p-DK2sRMlx.js +1 -0
  603. package/dist/webcomponents/{p-qGbNz93o.js → p-DNo0OPOP.js} +1 -1
  604. package/dist/webcomponents/p-DRXvcLy9.js +1 -0
  605. package/dist/webcomponents/p-DYGIC0QH.js +1 -0
  606. package/dist/webcomponents/p-DZYcH7jA.js +1 -0
  607. package/dist/webcomponents/p-Da3idOSV.js +1 -0
  608. package/dist/webcomponents/p-Dgflaz6J.js +1 -0
  609. package/dist/webcomponents/p-ED_TzwCp.js +1 -0
  610. package/dist/webcomponents/p-HXpYMWUU.js +1 -0
  611. package/dist/webcomponents/p-JyHlIFWl.js +1 -0
  612. package/dist/webcomponents/{p-CVGBVdVC.js → p-RvUQ__Pq.js} +1 -1
  613. package/dist/webcomponents/p-Wh1V0gvF.js +1 -0
  614. package/dist/webcomponents/p-ZpPDShvP.js +1 -0
  615. package/dist/webcomponents/p-a55f07af.entry.js +1 -0
  616. package/dist/webcomponents/p-aa6194ef.entry.js +1 -0
  617. package/dist/webcomponents/p-ab6a5dc9.entry.js +1 -0
  618. package/dist/webcomponents/p-af9c4174.entry.js +1 -0
  619. package/dist/webcomponents/p-b7d2f2eb.entry.js +1 -0
  620. package/dist/webcomponents/p-bbc4b4cb.entry.js +1 -0
  621. package/dist/webcomponents/p-c599e526.entry.js +1 -0
  622. package/dist/webcomponents/p-d62cd269.entry.js +1 -0
  623. package/dist/webcomponents/p-d9dd7d24.entry.js +1 -0
  624. package/dist/webcomponents/p-dd7352da.entry.js +1 -0
  625. package/dist/webcomponents/p-e8a67dc7.entry.js +1 -0
  626. package/dist/webcomponents/p-eb2d9e5b.entry.js +1 -0
  627. package/dist/webcomponents/p-eddaca4e.entry.js +1 -0
  628. package/dist/webcomponents/p-ef32fe0e.entry.js +1 -0
  629. package/dist/webcomponents/{p-c51651aa.entry.js → p-f1cba43c.entry.js} +1 -1
  630. package/dist/webcomponents/p-f1f0b405.entry.js +1 -0
  631. package/dist/webcomponents/p-f499a8de.entry.js +1 -0
  632. package/dist/webcomponents/p-f4d0cdf0.entry.js +1 -0
  633. package/dist/webcomponents/p-f680e617.entry.js +1 -0
  634. package/dist/webcomponents/p-f7c4222f.entry.js +1 -0
  635. package/dist/webcomponents/p-fa1884b4.entry.js +1 -0
  636. package/dist/webcomponents/p-z-5r0gWn.js +1 -0
  637. package/dist/webcomponents/webcomponents.esm.js +1 -1
  638. package/package.json +2 -2
  639. package/dist/cjs/Checkout-BbhldGDh.js +0 -103
  640. package/dist/cjs/Payment-D6XuQ4Ve.js +0 -151
  641. package/dist/cjs/bank-account-form_9.cjs.entry.js +0 -544
  642. package/dist/cjs/iframe-input-styles-state-DH-5a2Mg.js +0 -26
  643. package/dist/cjs/justifi-checkout-core.cjs.entry.js +0 -141
  644. package/dist/cjs/justifi-season-interruption-insurance-core.cjs.entry.js +0 -124
  645. package/dist/cjs/justifi-tokenize-payment-method.cjs.entry.js +0 -80
  646. package/dist/collection/components/checkout/checkout-core.js +0 -454
  647. package/dist/collection/components/checkout/new-payment-method.js +0 -378
  648. package/dist/collection/components/checkout/payment-method-options.js +0 -440
  649. package/dist/collection/components/checkout/sezzle-payment-method.js +0 -240
  650. package/dist/collection/components/insurance/season-interruption/season-interruption-insurance-core.js +0 -447
  651. package/dist/esm/Checkout-CIUkm9aQ.js +0 -101
  652. package/dist/esm/Payment-DrCqUoz-.js +0 -149
  653. package/dist/esm/bank-account-form_9.entry.js +0 -534
  654. package/dist/esm/iframe-input-styles-state-Cqb62KAu.js +0 -23
  655. package/dist/esm/insurance-state-DRFl0tWj.js +0 -28
  656. package/dist/esm/justifi-checkout-core.entry.js +0 -139
  657. package/dist/esm/justifi-season-interruption-insurance-core.entry.js +0 -122
  658. package/dist/esm/justifi-tokenize-payment-method.entry.js +0 -78
  659. package/dist/module/Checkout.js +0 -121
  660. package/dist/module/Payment.js +0 -204
  661. package/dist/module/checkout-core.js +0 -292
  662. package/dist/module/justifi-checkout-core.js +0 -6
  663. package/dist/module/justifi-new-payment-method.d.ts +0 -11
  664. package/dist/module/justifi-new-payment-method.js +0 -6
  665. package/dist/module/justifi-payment-method-options.d.ts +0 -11
  666. package/dist/module/justifi-payment-method-options.js +0 -6
  667. package/dist/module/justifi-season-interruption-insurance-core.d.ts +0 -11
  668. package/dist/module/justifi-season-interruption-insurance-core.js +0 -6
  669. package/dist/module/new-payment-method.js +0 -222
  670. package/dist/module/payment-method-options.js +0 -237
  671. package/dist/module/saved-payment-method.js +0 -79
  672. package/dist/module/season-interruption-insurance-core.js +0 -168
  673. package/dist/types/components/checkout/checkout-core.d.ts +0 -49
  674. package/dist/types/components/checkout/new-payment-method.d.ts +0 -31
  675. package/dist/types/components/checkout/payment-method-options.d.ts +0 -32
  676. package/dist/types/components/insurance/season-interruption/season-interruption-insurance-core.d.ts +0 -32
  677. package/dist/webcomponents/p-08e1bf28.entry.js +0 -1
  678. package/dist/webcomponents/p-09cb06ed.entry.js +0 -1
  679. package/dist/webcomponents/p-0adbbb23.entry.js +0 -1
  680. package/dist/webcomponents/p-0b067d3c.entry.js +0 -1
  681. package/dist/webcomponents/p-0bfd309e.entry.js +0 -1
  682. package/dist/webcomponents/p-0f005fdd.entry.js +0 -1
  683. package/dist/webcomponents/p-0nMw2Aul.js +0 -1
  684. package/dist/webcomponents/p-14dc17fd.entry.js +0 -1
  685. package/dist/webcomponents/p-266f1ff3.entry.js +0 -1
  686. package/dist/webcomponents/p-35387685.entry.js +0 -1
  687. package/dist/webcomponents/p-3946adfa.entry.js +0 -1
  688. package/dist/webcomponents/p-3c44b724.entry.js +0 -1
  689. package/dist/webcomponents/p-3e3b5cdb.entry.js +0 -1
  690. package/dist/webcomponents/p-41876098.entry.js +0 -1
  691. package/dist/webcomponents/p-45edf188.entry.js +0 -1
  692. package/dist/webcomponents/p-4786f2d0.entry.js +0 -1
  693. package/dist/webcomponents/p-4c1c55bb.entry.js +0 -1
  694. package/dist/webcomponents/p-4f358b63.entry.js +0 -1
  695. package/dist/webcomponents/p-5375df08.entry.js +0 -1
  696. package/dist/webcomponents/p-575b972d.entry.js +0 -1
  697. package/dist/webcomponents/p-580aa2e3.entry.js +0 -1
  698. package/dist/webcomponents/p-5b857a1c.entry.js +0 -1
  699. package/dist/webcomponents/p-5c9d1c35.entry.js +0 -1
  700. package/dist/webcomponents/p-690514f2.entry.js +0 -1
  701. package/dist/webcomponents/p-6a853571.entry.js +0 -1
  702. package/dist/webcomponents/p-724e4e6c.entry.js +0 -1
  703. package/dist/webcomponents/p-756a7021.entry.js +0 -1
  704. package/dist/webcomponents/p-89431ee2.entry.js +0 -1
  705. package/dist/webcomponents/p-8f5c1ae6.entry.js +0 -1
  706. package/dist/webcomponents/p-989d56de.entry.js +0 -1
  707. package/dist/webcomponents/p-99f7a36d.entry.js +0 -1
  708. package/dist/webcomponents/p-BCgpQGhw.js +0 -1
  709. package/dist/webcomponents/p-BOCuVjGs.js +0 -1
  710. package/dist/webcomponents/p-BUSn_ReW.js +0 -1
  711. package/dist/webcomponents/p-BZtgbC0H.js +0 -1
  712. package/dist/webcomponents/p-Bs-84XY6.js +0 -1
  713. package/dist/webcomponents/p-BvXjypQm.js +0 -1
  714. package/dist/webcomponents/p-C-wMveZe.js +0 -1
  715. package/dist/webcomponents/p-CCl9g-ln.js +0 -1
  716. package/dist/webcomponents/p-CDPZXQAo.js +0 -1
  717. package/dist/webcomponents/p-CKEiU2Q5.js +0 -1
  718. package/dist/webcomponents/p-CS4_rnSp.js +0 -1
  719. package/dist/webcomponents/p-CnMP2-Xk.js +0 -1
  720. package/dist/webcomponents/p-Cs0cIpIm.js +0 -1
  721. package/dist/webcomponents/p-CxHdQoIo.js +0 -1
  722. package/dist/webcomponents/p-DFWnHEN2.js +0 -1
  723. package/dist/webcomponents/p-DKSNNnPC.js +0 -1
  724. package/dist/webcomponents/p-DjFzWJxk.js +0 -1
  725. package/dist/webcomponents/p-DnGswpsl.js +0 -1
  726. package/dist/webcomponents/p-DniQ6yo6.js +0 -1
  727. package/dist/webcomponents/p-DsLxs70Z.js +0 -1
  728. package/dist/webcomponents/p-DtdcFDM_.js +0 -1
  729. package/dist/webcomponents/p-DwF36W04.js +0 -1
  730. package/dist/webcomponents/p-L4y68wud.js +0 -1
  731. package/dist/webcomponents/p-SdntD1xf.js +0 -1
  732. package/dist/webcomponents/p-a09ca567.entry.js +0 -1
  733. package/dist/webcomponents/p-a3313ebe.entry.js +0 -1
  734. package/dist/webcomponents/p-aeaafe28.entry.js +0 -1
  735. package/dist/webcomponents/p-b25bbf0a.entry.js +0 -1
  736. package/dist/webcomponents/p-b7594923.entry.js +0 -1
  737. package/dist/webcomponents/p-b79e302a.entry.js +0 -1
  738. package/dist/webcomponents/p-ba268a78.entry.js +0 -1
  739. package/dist/webcomponents/p-ba68ea4f.entry.js +0 -1
  740. package/dist/webcomponents/p-bf0e00be.entry.js +0 -1
  741. package/dist/webcomponents/p-c15d8dd0.entry.js +0 -1
  742. package/dist/webcomponents/p-c28f2569.entry.js +0 -1
  743. package/dist/webcomponents/p-c5911cd9.entry.js +0 -1
  744. package/dist/webcomponents/p-cefb9a76.entry.js +0 -1
  745. package/dist/webcomponents/p-d2ae3c55.entry.js +0 -1
  746. package/dist/webcomponents/p-d2e1d179.entry.js +0 -1
  747. package/dist/webcomponents/p-d4d58793.entry.js +0 -1
  748. package/dist/webcomponents/p-dc6b707a.entry.js +0 -1
  749. package/dist/webcomponents/p-dfd9aff0.entry.js +0 -1
  750. package/dist/webcomponents/p-e4682bb6.entry.js +0 -1
  751. package/dist/webcomponents/p-ee566062.entry.js +0 -1
  752. package/dist/webcomponents/p-ef07d761.entry.js +0 -1
  753. package/dist/webcomponents/p-f24b04eb.entry.js +0 -1
  754. package/dist/webcomponents/p-f8e974af.entry.js +0 -1
  755. package/dist/webcomponents/p-fb60bc7a.entry.js +0 -1
  756. package/dist/webcomponents/p-znmwKCgq.js +0 -1
@@ -0,0 +1,1421 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-C9hBD-32.js');
4
+ var parts = require('./parts-9jMf1erK.js');
5
+ var utils = require('./utils-ChCUZgUy.js');
6
+ var checkout_store = require('./checkout.store-BGvYPPz0.js');
7
+ var styledHost = require('./styled-host-BfVJlAsJ.js');
8
+ require('./event-types-YOY5TKUN.js');
9
+ var header1 = require('./header-1-DRA3f4Jh.js');
10
+ var insuranceState = require('./insurance-state-d2thhXUX.js');
11
+ var header3 = require('./header-3-sOdOpfx3.js');
12
+ var checkPkgVersion = require('./check-pkg-version-DiQ-d5Nl.js');
13
+ require('./config-state-BBOZIS8x.js');
14
+ require('./dinero-BwNN_k7x.js');
15
+ var ComponentError = require('./ComponentError-D4OLnOkg.js');
16
+ var Refund = require('./Refund-BefKONu4.js');
17
+ require('./Pagination-Dediz133.js');
18
+ require('./Business-DCRzZf0w.js');
19
+ require('./Dispute-CruQTF6_.js');
20
+ var utils$1 = require('./utils-DvUQQLmR.js');
21
+ var checkout_service = require('./checkout.service-B-R80p4f.js');
22
+ var index$1 = require('./index-D-dD-aC2.js');
23
+ var Api = require('./Api-DyimBzKT.js');
24
+ var paymentMethodOptionUtils = require('./payment-method-option-utils-WYHIHy-l.js');
25
+ require('./index-B32W0A3m.js');
26
+ require('./package-Be2aoTf8.js');
27
+ require('./helpers-B5OCqlIM.js');
28
+ require('./state-options-CIT9xdTz.js');
29
+
30
+ const Summary = class {
31
+ constructor(hostRef) {
32
+ index.registerInstance(this, hostRef);
33
+ }
34
+ render() {
35
+ return (index.h(styledHost.StyledHost, { key: 'fccb819d66329424af42e9c53effec29a6c9784d' }, index.h("section", { key: '0ee7a4e0579f7f222a9db82e6b4db6bb92542d9e' }, index.h("div", { key: 'bdf74b2bc5db35b96ca75d50783b790bb482a76e' }, index.h("div", { key: '851b481bd6beb1fcaadc106d27d131f8b07d1c9a', part: parts.text }, checkout_store.checkoutStore === null || checkout_store.checkoutStore === void 0 ? void 0 : checkout_store.checkoutStore.paymentDescription), index.h("div", { key: '0b261bc0e2d65cf989778e02df51b3265816f7aa' }, index.h("span", { key: '0eee0017ddf25ae45d6b5c828071098f45e6e19d', part: parts.text }, "Total"), "\u00A0", index.h("span", { key: 'd21576f14c3437f70a4b85b9dfc01107392d663a', part: parts.text }, utils.formatCurrency(+(checkout_store.checkoutStore === null || checkout_store.checkoutStore === void 0 ? void 0 : checkout_store.checkoutStore.totalAmount))))))));
36
+ }
37
+ };
38
+
39
+ const Header = class {
40
+ constructor(hostRef) {
41
+ index.registerInstance(this, hostRef);
42
+ this.levels = {
43
+ h1: header1.Header1,
44
+ h2: insuranceState.Header2,
45
+ h3: header3.Header3,
46
+ };
47
+ this.level = 'h1';
48
+ }
49
+ render() {
50
+ const HeaderComponent = this.levels[this.level];
51
+ return (index.h(styledHost.StyledHost, { key: 'ae04a67a1eaf95d6d093fef23911ac4eb1523cfe' }, index.h(HeaderComponent, { key: '51b27dd180d113ebe9ac52f7ff10c494926f7cdf', text: this.text, class: this.class })));
52
+ }
53
+ };
54
+
55
+ const makeGetCheckout = ({ authToken, checkoutId, service }) => async ({ onSuccess, onError }) => {
56
+ var _a;
57
+ try {
58
+ const response = await service.fetchCheckout(authToken, checkoutId);
59
+ if (!response.error) {
60
+ const checkout = response.data;
61
+ onSuccess({ checkout });
62
+ }
63
+ else {
64
+ const responseError = utils$1.getErrorMessage(response.error);
65
+ const code = utils$1.getErrorCode((_a = response.error) === null || _a === void 0 ? void 0 : _a.code);
66
+ return onError({
67
+ error: responseError,
68
+ code,
69
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
70
+ });
71
+ }
72
+ }
73
+ catch (error) {
74
+ const code = utils$1.getErrorCode(error === null || error === void 0 ? void 0 : error.code);
75
+ return onError({
76
+ error: error.message || error,
77
+ code,
78
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
79
+ });
80
+ }
81
+ };
82
+ const makeCheckoutComplete = ({ authToken, checkoutId, service }) => async ({ payment, onSuccess, onError }) => {
83
+ var _a;
84
+ try {
85
+ const response = await service.complete(authToken, checkoutId, payment);
86
+ if (!response.error) {
87
+ const checkout = response.data;
88
+ onSuccess({ checkout });
89
+ }
90
+ else {
91
+ const responseError = utils$1.getErrorMessage(response.error);
92
+ const code = utils$1.getErrorCode((_a = response.error) === null || _a === void 0 ? void 0 : _a.code);
93
+ return onError({
94
+ error: responseError,
95
+ code,
96
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
97
+ });
98
+ }
99
+ }
100
+ catch (error) {
101
+ const code = utils$1.getErrorCode(error === null || error === void 0 ? void 0 : error.code);
102
+ return onError({
103
+ error: error.message || error,
104
+ code,
105
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
106
+ });
107
+ }
108
+ };
109
+
110
+ const ModularCheckout = class {
111
+ constructor(hostRef) {
112
+ index.registerInstance(this, hostRef);
113
+ this.errorEvent = index.createEvent(this, "error-event");
114
+ this.submitEvent = index.createEvent(this, "submit-event");
115
+ this.checkoutChangedEvent = index.createEvent(this, "checkout-changed");
116
+ this.savePaymentMethod = false;
117
+ this.handleApplePayCompleted = (event) => {
118
+ const { success, token, paymentMethodId, error } = event.detail;
119
+ if (success && token) {
120
+ checkout_store.checkoutStore.paymentToken = paymentMethodId;
121
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.applePay };
122
+ this.submitCheckout();
123
+ }
124
+ else {
125
+ console.error("Apple Pay completed but failed:", error);
126
+ this.errorEvent.emit({
127
+ message: (error === null || error === void 0 ? void 0 : error.message) || "Apple Pay payment failed",
128
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
129
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
130
+ });
131
+ }
132
+ };
133
+ this.handleApplePayError = (event) => {
134
+ const { error } = event.detail;
135
+ console.error("Apple Pay error:", error);
136
+ this.errorEvent.emit({
137
+ message: error || "Apple Pay error occurred",
138
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
139
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
140
+ });
141
+ };
142
+ this.handleApplePayCancelled = () => {
143
+ checkout_store.checkoutStore.paymentToken = undefined;
144
+ checkout_store.checkoutStore.selectedPaymentMethod = undefined;
145
+ };
146
+ }
147
+ savePaymentMethodChanged(newValue) {
148
+ checkout_store.checkoutStore.savePaymentMethod = newValue;
149
+ }
150
+ connectedCallback() {
151
+ this.observer = new MutationObserver(() => {
152
+ this.queryFormRefs();
153
+ this.setupApplePayListeners(); // set up again listeners when DOM changes
154
+ });
155
+ this.observer.observe(this.hostEl, {
156
+ childList: true,
157
+ subtree: true,
158
+ });
159
+ checkout_store.checkoutStore.checkoutId = this.checkoutId;
160
+ const config = {
161
+ authToken: this.authToken,
162
+ checkoutId: this.checkoutId,
163
+ service: new checkout_service.CheckoutService(),
164
+ };
165
+ this.getCheckout = makeGetCheckout(config);
166
+ this.completeCheckout = makeCheckoutComplete(config);
167
+ // Emit checkout-changed whenever any store key changes
168
+ checkout_store.onAnyChange(() => {
169
+ this.emitCheckoutChanged();
170
+ });
171
+ }
172
+ componentWillLoad() {
173
+ this.analytics = new checkPkgVersion.JustifiAnalytics(this);
174
+ checkPkgVersion.checkPkgVersion();
175
+ checkout_store.checkoutStore.authToken = this.authToken;
176
+ checkout_store.checkoutStore.savePaymentMethod = this.savePaymentMethod;
177
+ this.fetchCheckout();
178
+ // Refresh the checkout data when insurance values actually change (not on initial load)
179
+ insuranceState.insuranceValuesOn("set", (key) => {
180
+ const value = insuranceState.insuranceValues[key];
181
+ if (value !== undefined && insuranceState.hasInsuranceValueChanged(key, value)) {
182
+ this.fetchCheckout();
183
+ }
184
+ });
185
+ }
186
+ componentDidLoad() {
187
+ this.queryFormRefs();
188
+ this.setupApplePayListeners();
189
+ }
190
+ disconnectedCallback() {
191
+ var _a;
192
+ (_a = this.observer) === null || _a === void 0 ? void 0 : _a.disconnect();
193
+ this.removeApplePayListeners();
194
+ }
195
+ fetchCheckout() {
196
+ if (!this.authToken || !this.checkoutId) {
197
+ this.errorEvent.emit({
198
+ message: ComponentError.ComponentErrorMessages.NOT_AUTHENTICATED,
199
+ errorCode: ComponentError.ComponentErrorCodes.NOT_AUTHENTICATED,
200
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
201
+ });
202
+ return;
203
+ }
204
+ if (this.getCheckout) {
205
+ this.getCheckout({
206
+ onSuccess: ({ checkout }) => {
207
+ this.updateStore(checkout);
208
+ if (checkout.status === Refund.ICheckoutStatus.completed) {
209
+ this.errorEvent.emit({
210
+ message: ComponentError.ComponentErrorMessages.CHECKOUT_ALREADY_COMPLETED,
211
+ errorCode: ComponentError.ComponentErrorCodes.CHECKOUT_ALREADY_COMPLETED,
212
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
213
+ });
214
+ return;
215
+ }
216
+ else if (checkout.status === Refund.ICheckoutStatus.expired) {
217
+ this.errorEvent.emit({
218
+ message: ComponentError.ComponentErrorMessages.CHECKOUT_EXPIRED,
219
+ errorCode: ComponentError.ComponentErrorCodes.CHECKOUT_EXPIRED,
220
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
221
+ });
222
+ return;
223
+ }
224
+ },
225
+ onError: (error) => {
226
+ this.errorEvent.emit({
227
+ message: error.message,
228
+ errorCode: ComponentError.ComponentErrorCodes.FETCH_ERROR,
229
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
230
+ });
231
+ },
232
+ });
233
+ }
234
+ }
235
+ updateStore(checkout) {
236
+ var _a, _b, _c, _d, _e;
237
+ checkout_store.checkoutStore.accountId = checkout.account_id;
238
+ checkout_store.checkoutStore.paymentMethods = checkout.payment_methods;
239
+ checkout_store.checkoutStore.paymentMethodGroupId = checkout.payment_method_group_id;
240
+ checkout_store.checkoutStore.paymentDescription = checkout.payment_description;
241
+ checkout_store.checkoutStore.totalAmount = checkout.total_amount;
242
+ checkout_store.checkoutStore.paymentAmount = checkout.payment_amount;
243
+ checkout_store.checkoutStore.bnplEnabled = checkout.payment_settings.bnpl_payments;
244
+ checkout_store.checkoutStore.insuranceEnabled = checkout.payment_settings.insurance_payments;
245
+ checkout_store.checkoutStore.bankAccountVerification = (_a = checkout.payment_settings) === null || _a === void 0 ? void 0 : _a.bank_account_verification;
246
+ checkout_store.checkoutStore.bnplProviderClientId = (_b = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _b === void 0 ? void 0 : _b.provider_client_id;
247
+ checkout_store.checkoutStore.bnplProviderMode = (_c = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _c === void 0 ? void 0 : _c.provider_mode;
248
+ checkout_store.checkoutStore.bnplProviderApiVersion = (_d = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _d === void 0 ? void 0 : _d.provider_api_version;
249
+ checkout_store.checkoutStore.bnplProviderCheckoutUrl =
250
+ (_e = checkout === null || checkout === void 0 ? void 0 : checkout.bnpl) === null || _e === void 0 ? void 0 : _e.provider_checkout_url;
251
+ }
252
+ emitCheckoutChanged() {
253
+ const detail = {
254
+ availablePaymentMethodTypes: checkout_store.getAvailablePaymentMethodTypes(),
255
+ selectedPaymentMethod: checkout_store.checkoutStore.selectedPaymentMethod,
256
+ savedPaymentMethods: checkout_store.checkoutStore.paymentMethods,
257
+ };
258
+ this.checkoutChangedEvent.emit(detail);
259
+ }
260
+ queryFormRefs() {
261
+ this.billingFormRef = this.hostEl.querySelector("justifi-billing-form, justifi-bank-account-billing-form-simple, justifi-card-billing-form-simple, justifi-billing-form-full");
262
+ this.applePayRef = this.hostEl.querySelector("justifi-apple-pay");
263
+ this.paymentMethodFormRef =
264
+ this.hostEl.querySelector('justifi-card-form, justifi-bank-account-form, justifi-tokenize-payment-method');
265
+ this.insuranceFormRef = this.hostEl.querySelector('justifi-season-interruption-insurance');
266
+ }
267
+ setupApplePayListeners() {
268
+ if (this.applePayRef) {
269
+ this.applePayRef.addEventListener("applePayCompleted", this.handleApplePayCompleted);
270
+ this.applePayRef.addEventListener("applePayError", this.handleApplePayError);
271
+ this.applePayRef.addEventListener("applePayCancelled", this.handleApplePayCancelled);
272
+ }
273
+ }
274
+ removeApplePayListeners() {
275
+ if (this.applePayRef) {
276
+ this.applePayRef.removeEventListener("applePayCompleted", this.handleApplePayCompleted);
277
+ this.applePayRef.removeEventListener("applePayError", this.handleApplePayError);
278
+ this.applePayRef.removeEventListener("applePayCancelled", this.handleApplePayCancelled);
279
+ }
280
+ }
281
+ async tokenizePaymentMethod(tokenizeArgs) {
282
+ var _a, _b, _c;
283
+ const billingInfoValues = (_b = (await ((_a = this.billingFormRef) === null || _a === void 0 ? void 0 : _a.getValues()))) !== null && _b !== void 0 ? _b : {};
284
+ const combinedBillingInfo = Object.assign(Object.assign({}, tokenizeArgs), billingInfoValues);
285
+ const paymentMethodMetadata = Object.assign({ accountId: checkout_store.checkoutStore.accountId, payment_method_group_id: undefined }, combinedBillingInfo);
286
+ if (checkout_store.checkoutStore.savePaymentMethod) {
287
+ paymentMethodMetadata.payment_method_group_id =
288
+ checkout_store.checkoutStore.paymentMethodGroupId;
289
+ }
290
+ const tokenizeResult = await ((_c = this.paymentMethodFormRef) === null || _c === void 0 ? void 0 : _c.tokenize({
291
+ clientId: this.authToken,
292
+ paymentMethodMetadata,
293
+ account: checkout_store.checkoutStore.accountId,
294
+ }));
295
+ if (tokenizeResult.error) {
296
+ return tokenizeResult;
297
+ }
298
+ checkout_store.checkoutStore.paymentToken = tokenizeResult.id;
299
+ return tokenizeResult.id;
300
+ }
301
+ // set the selected payment method to the checkout store from outside the component
302
+ async setSelectedPaymentMethod(paymentMethod) {
303
+ checkout_store.checkoutStore.selectedPaymentMethod = paymentMethod;
304
+ }
305
+ // getAvailablePaymentMethods removed in favor of checkout-changed event
306
+ // if validation fails, the error will be emitted by the component
307
+ async validate() {
308
+ const promises = [];
309
+ if (checkout_store.checkoutStore.insuranceEnabled && this.insuranceFormRef) {
310
+ promises.push(this.insuranceFormRef.validate());
311
+ }
312
+ const isNewCard = checkout_store.checkoutStore.selectedPaymentMethod.type === Refund.PaymentMethodTypes.card && checkout_store.checkoutStore.selectedPaymentMethod.id === undefined;
313
+ const isNewBankAccount = checkout_store.checkoutStore.selectedPaymentMethod.type === Refund.PaymentMethodTypes.bankAccount && checkout_store.checkoutStore.selectedPaymentMethod.id === undefined;
314
+ // For new card/bank account, validate payment method + billing.
315
+ if (isNewCard ||
316
+ isNewBankAccount) {
317
+ if (this.paymentMethodFormRef)
318
+ promises.push(this.paymentMethodFormRef.validate());
319
+ if (this.billingFormRef)
320
+ promises.push(this.billingFormRef.validate());
321
+ }
322
+ if (promises.length === 0)
323
+ return true;
324
+ try {
325
+ const results = await Promise.all(promises);
326
+ // Normalize different validator return shapes:
327
+ // - boolean -> use it directly
328
+ // - object -> look for isValid; treat missing isValid as falsey only if explicitly false
329
+ const resultsAreValid = results.every(r => typeof r === 'boolean' ? r : (r === null || r === void 0 ? void 0 : r.isValid) !== false);
330
+ if (!resultsAreValid) {
331
+ this.errorEvent.emit({
332
+ message: 'Validation error',
333
+ errorCode: ComponentError.ComponentErrorCodes.VALIDATION_ERROR,
334
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
335
+ });
336
+ return false;
337
+ }
338
+ return true;
339
+ }
340
+ catch (_a) {
341
+ // If any validator throws/rejects, consider the whole validation failed.
342
+ return false;
343
+ }
344
+ }
345
+ async submitCheckout(submitCheckoutArgs) {
346
+ const isValid = await this.validate();
347
+ const isNewCard = checkout_store.checkoutStore.selectedPaymentMethod.type === Refund.PaymentMethodTypes.card &&
348
+ checkout_store.checkoutStore.selectedPaymentMethod.id === undefined;
349
+ const isNewBankAccount = checkout_store.checkoutStore.selectedPaymentMethod.type === Refund.PaymentMethodTypes.bankAccount &&
350
+ checkout_store.checkoutStore.selectedPaymentMethod.id === undefined;
351
+ const shouldTokenize = isNewCard || isNewBankAccount;
352
+ if (shouldTokenize) {
353
+ const tokenizeResult = await this.tokenizePaymentMethod(submitCheckoutArgs);
354
+ if (tokenizeResult === null || tokenizeResult === void 0 ? void 0 : tokenizeResult.error) {
355
+ this.errorEvent.emit({
356
+ message: tokenizeResult.error.message,
357
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
358
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
359
+ });
360
+ return;
361
+ }
362
+ }
363
+ if (!isValid) {
364
+ this.errorEvent.emit({
365
+ message: "Please fill in all required fields.",
366
+ errorCode: ComponentError.ComponentErrorCodes.VALIDATION_ERROR,
367
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
368
+ });
369
+ return;
370
+ }
371
+ if (!checkout_store.checkoutStore.paymentToken) {
372
+ this.errorEvent.emit({
373
+ message: 'Payment token not found.',
374
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
375
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
376
+ });
377
+ }
378
+ let payment;
379
+ const mapTypeToPaymentMode = (type) => {
380
+ switch (type) {
381
+ case Refund.PaymentMethodTypes.card:
382
+ case Refund.PaymentMethodTypes.bankAccount:
383
+ case Refund.PaymentMethodTypes.plaid:
384
+ return index$1.PAYMENT_MODE.ECOM;
385
+ case Refund.PaymentMethodTypes.sezzle:
386
+ return index$1.PAYMENT_MODE.BNPL;
387
+ case Refund.PaymentMethodTypes.applePay:
388
+ return index$1.PAYMENT_MODE.APPLE_PAY;
389
+ default:
390
+ return undefined;
391
+ }
392
+ };
393
+ payment = {
394
+ payment_mode: mapTypeToPaymentMode(checkout_store.checkoutStore.selectedPaymentMethod.type),
395
+ payment_token: checkout_store.checkoutStore.paymentToken,
396
+ };
397
+ this.completeCheckout({
398
+ payment,
399
+ onSuccess: ({ checkout }) => {
400
+ this.submitEvent.emit({
401
+ checkout,
402
+ message: "Checkout completed successfully",
403
+ });
404
+ },
405
+ onError: (error) => {
406
+ this.errorEvent.emit({
407
+ message: error.message,
408
+ errorCode: ComponentError.ComponentErrorCodes.COMPLETE_CHECKOUT_ERROR,
409
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
410
+ });
411
+ },
412
+ });
413
+ }
414
+ render() {
415
+ return index.h(index.Host, { key: '4df5d1aa50fbeee7da93f8e19e45f6907b6ae2c7' });
416
+ }
417
+ get hostEl() { return index.getElement(this); }
418
+ static get watchers() { return {
419
+ "savePaymentMethod": ["savePaymentMethodChanged"]
420
+ }; }
421
+ };
422
+
423
+ const plaidIconSvg = 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjggMjkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImNzcy0xcmRhajhtIj48ZyBmaWxsPSIjMTExIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yNS43NjI5IDI2LjI2MjhMMjggMTcuNTMwOUwyNC45NjkxIDE0LjUwMDFMMjcuOTk5OSAxMS40NjkxTDI1Ljc2MjggMi43MzcwNkwxNy4wMzA5IDAuNUwxNC4wMDAxIDMuNTMxTDEwLjk2OSAwLjUwMDE0TDIuMjM3MDYgMi43MzczNEwwIDExLjQ2OTFMMy4wMzEyOCAxNC40OTk5TDAuMDAwMTQgMTcuNTMxTDIuMjM3MiAyNi4yNjI5TDEwLjk2OTEgMjguNUwxNC4wMDAxIDI1LjQ2OUwxNy4wMzEgMjguNDk5OUwyNS43NjI5IDI2LjI2MjhaTTE1LjczMjEgMjMuNzM3MUwxOC42MTg2IDIwLjg1MDVMMjIuMjkxMiAyNC41MjMzTDE3LjY5NTYgMjUuNzAwN0wxNS43MzIxIDIzLjczNzFaTTExLjExMzYgOS44ODE1NEwxNC4wMDAzIDYuOTk1MDJMMTYuODg2OCA5Ljg4MTRMMTQuMDAwMSAxMi43Njc5TDExLjExMzYgOS44ODE1NFpNMTIuMjY4MiAxNC41TDkuMzgxNTQgMTcuMzg2NUw2LjQ5NTAyIDE0LjVMOS4zODE1NCAxMS42MTM1TDEyLjI2ODIgMTQuNVpNMTguNjE4NyAxMS42MTMzTDIxLjUwNTMgMTQuNUwxOC42MTg2IDE3LjM4NjVMMTUuNzMyMSAxNC41TDE4LjYxODcgMTEuNjEzM1pNMTYuODg2NyAxOS4xMTg2TDE0LjAwMDEgMjIuMDA1MUwxMS4xMTM1IDE5LjExODVMMTQuMDAwMSAxNi4yMzE5TDE2Ljg4NjcgMTkuMTE4NlpNMTAuMzA0NCAyNS43MDA3TDUuNzA4NjQgMjQuNTIzM0w5LjM4MTU0IDIwLjg1MDRMMTIuMjY4MiAyMy43MzcxTDEwLjMwNDQgMjUuNzAwN1pNNC43NjMwOCAxNi4yMzE5TDcuNjQ5NiAxOS4xMTg1TDMuOTc2NyAyMi43OTE0TDIuNzk5MyAxOC4xOTU3TDQuNzYzMDggMTYuMjMxOVpNMy45NzY3IDYuMjA4MzZMNy42NDk3NCA5Ljg4MTRMNC43NjMwOCAxMi43NjgxTDIuNzk5MyAxMC44MDQxTDMuOTc2NyA2LjIwODM2Wk0xMi4yNjgzIDUuMjYyOTRMOS4zODE2OCA4LjE0OTZMNS43MDg5MiA0LjQ3NjdMMTAuMzA0NyAzLjI5OTNMMTIuMjY4MyA1LjI2Mjk0Wk0xNy42OTU5IDMuMjk5M0wyMi4yOTE1IDQuNDc2N0wxOC42MTg2IDguMTQ5NDZMMTUuNzMyMSA1LjI2Mjk0TDE3LjY5NTkgMy4yOTkzWk0yMy4yMzcyIDEyLjc2ODFMMjAuMzUwNSA5Ljg4MTRMMjQuMDIzMyA2LjIwODc4TDI1LjIwMDcgMTAuODA0NkwyMy4yMzcyIDEyLjc2ODFaTTI0LjAyMzMgMjIuNzkxNEwyMC4zNTA1IDE5LjExODZMMjMuMjM3MiAxNi4yMzIxTDI1LjIwMDcgMTguMTk1N0wyNC4wMjMzIDIyLjc5MTRaIj48L3BhdGg+PC9nPjwvc3ZnPgo=';
424
+
425
+ const api = Api.Api();
426
+ class PlaidService {
427
+ async getLinkToken(authToken, accountId, checkoutId, signal) {
428
+ const endpoint = `plaid/${accountId}/link`;
429
+ const body = { checkout_id: checkoutId };
430
+ return api.post({ endpoint, body, authToken, signal });
431
+ }
432
+ async tokenizeBankAccount(authToken, accountId, publicToken, linkTokenId, paymentMethodGroupId, signal) {
433
+ const endpoint = `plaid/${accountId}/tokenize`;
434
+ const body = { public_token: publicToken };
435
+ if (linkTokenId) {
436
+ body.link_token_id = linkTokenId;
437
+ }
438
+ if (paymentMethodGroupId) {
439
+ body.payment_method_group_id = paymentMethodGroupId;
440
+ }
441
+ return api.post({ endpoint, body, authToken, signal });
442
+ }
443
+ }
444
+
445
+ // Plaid-specific error codes
446
+ var PlaidErrorCodes;
447
+ (function (PlaidErrorCodes) {
448
+ PlaidErrorCodes["PLAID_SDK_LOAD_FAILED"] = "plaid-sdk-load-failed";
449
+ PlaidErrorCodes["PLAID_LINK_INIT_FAILED"] = "plaid-link-init-failed";
450
+ PlaidErrorCodes["PLAID_LINK_TOKEN_FAILED"] = "plaid-link-token-failed";
451
+ PlaidErrorCodes["PLAID_AUTHENTICATION_FAILED"] = "plaid-authentication-failed";
452
+ PlaidErrorCodes["PLAID_BANK_NOT_SUPPORTED"] = "plaid-bank-not-supported";
453
+ PlaidErrorCodes["PLAID_TOKEN_EXPIRED"] = "plaid-token-expired";
454
+ PlaidErrorCodes["PLAID_NETWORK_ERROR"] = "plaid-network-error";
455
+ PlaidErrorCodes["PLAID_USER_CANCELLED"] = "plaid-user-cancelled";
456
+ PlaidErrorCodes["PLAID_TIMEOUT"] = "plaid-timeout";
457
+ PlaidErrorCodes["PLAID_INVALID_CREDENTIALS"] = "plaid-invalid-credentials";
458
+ PlaidErrorCodes["PLAID_ACCOUNT_LOCKED"] = "plaid-account-locked";
459
+ PlaidErrorCodes["PLAID_MAINTENANCE"] = "plaid-maintenance";
460
+ PlaidErrorCodes["PLAID_RATE_LIMITED"] = "plaid-rate-limited";
461
+ })(PlaidErrorCodes || (PlaidErrorCodes = {}));
462
+ // Plaid error message mapping
463
+ const PLAID_ERROR_MESSAGES = {
464
+ [PlaidErrorCodes.PLAID_SDK_LOAD_FAILED]: 'Unable to load Plaid. Please refresh the page and try again.',
465
+ [PlaidErrorCodes.PLAID_LINK_INIT_FAILED]: 'Unable to initialize bank connection. Please try again.',
466
+ [PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED]: 'Unable to connect to bank service. Please try again.',
467
+ [PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED]: 'Bank authentication failed. Please try again.',
468
+ [PlaidErrorCodes.PLAID_BANK_NOT_SUPPORTED]: 'Your bank is not currently supported. Please try a different payment method.',
469
+ [PlaidErrorCodes.PLAID_TOKEN_EXPIRED]: 'Your bank session has expired. Please reconnect your account.',
470
+ [PlaidErrorCodes.PLAID_NETWORK_ERROR]: 'Network connection issue. Please check your internet connection and try again.',
471
+ [PlaidErrorCodes.PLAID_USER_CANCELLED]: 'Bank connection was cancelled. Click to try again.',
472
+ [PlaidErrorCodes.PLAID_TIMEOUT]: 'Bank connection timed out. Please try again.',
473
+ [PlaidErrorCodes.PLAID_INVALID_CREDENTIALS]: 'Invalid bank credentials. Please check your username and password.',
474
+ [PlaidErrorCodes.PLAID_ACCOUNT_LOCKED]: 'Your bank account is temporarily locked. Please contact your bank.',
475
+ [PlaidErrorCodes.PLAID_MAINTENANCE]: 'Bank service is temporarily unavailable. Please try again later.',
476
+ [PlaidErrorCodes.PLAID_RATE_LIMITED]: 'Too many connection attempts. Please wait a moment and try again.',
477
+ };
478
+ // Plaid error severity mapping
479
+ const PLAID_ERROR_SEVERITY = {
480
+ [PlaidErrorCodes.PLAID_SDK_LOAD_FAILED]: ComponentError.ComponentErrorSeverity.ERROR,
481
+ [PlaidErrorCodes.PLAID_LINK_INIT_FAILED]: ComponentError.ComponentErrorSeverity.ERROR,
482
+ [PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED]: ComponentError.ComponentErrorSeverity.ERROR,
483
+ [PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED]: ComponentError.ComponentErrorSeverity.ERROR,
484
+ [PlaidErrorCodes.PLAID_BANK_NOT_SUPPORTED]: ComponentError.ComponentErrorSeverity.WARNING,
485
+ [PlaidErrorCodes.PLAID_TOKEN_EXPIRED]: ComponentError.ComponentErrorSeverity.WARNING,
486
+ [PlaidErrorCodes.PLAID_NETWORK_ERROR]: ComponentError.ComponentErrorSeverity.WARNING,
487
+ [PlaidErrorCodes.PLAID_USER_CANCELLED]: ComponentError.ComponentErrorSeverity.INFO,
488
+ [PlaidErrorCodes.PLAID_TIMEOUT]: ComponentError.ComponentErrorSeverity.WARNING,
489
+ [PlaidErrorCodes.PLAID_INVALID_CREDENTIALS]: ComponentError.ComponentErrorSeverity.ERROR,
490
+ [PlaidErrorCodes.PLAID_ACCOUNT_LOCKED]: ComponentError.ComponentErrorSeverity.ERROR,
491
+ [PlaidErrorCodes.PLAID_MAINTENANCE]: ComponentError.ComponentErrorSeverity.WARNING,
492
+ [PlaidErrorCodes.PLAID_RATE_LIMITED]: ComponentError.ComponentErrorSeverity.WARNING,
493
+ };
494
+ const PlaidPaymentMethod = class {
495
+ constructor(hostRef) {
496
+ index.registerInstance(this, hostRef);
497
+ this.paymentMethodOptionSelected = index.createEvent(this, "paymentMethodOptionSelected");
498
+ this.plaidError = index.createEvent(this, "plaidError");
499
+ this.plaidErrorRecovered = index.createEvent(this, "plaidErrorRecovered");
500
+ this.isAuthenticating = false;
501
+ this.publicToken = null;
502
+ this.linkToken = null;
503
+ this.linkTokenId = null;
504
+ this.error = null;
505
+ this.plaidLink = null;
506
+ this.isSelected = false;
507
+ this.retryCount = 0;
508
+ this.isRetrying = false;
509
+ this.plaidService = new PlaidService();
510
+ this.maxRetries = 3;
511
+ this.retryDelay = 2000; // 2 seconds
512
+ this.timeoutId = null;
513
+ this.abortController = null;
514
+ this.hasLoggedDisabledWarning = false;
515
+ this.waitForStoreAndInitialize = () => {
516
+ // Check if store has necessary data
517
+ if (checkout_store.checkoutStore.authToken && checkout_store.checkoutStore.accountId && checkout_store.checkoutStore.checkoutId) {
518
+ this.initializePlaidLink();
519
+ }
520
+ else {
521
+ // Wait a bit and try again
522
+ setTimeout(() => {
523
+ this.waitForStoreAndInitialize();
524
+ }, 100);
525
+ }
526
+ };
527
+ this.initializePlaidLink = async () => {
528
+ try {
529
+ // Check if Plaid is available globally
530
+ if (typeof window.Plaid === 'undefined') {
531
+ this.handleError({
532
+ code: PlaidErrorCodes.PLAID_SDK_LOAD_FAILED,
533
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
534
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
535
+ retryable: true,
536
+ userAction: 'Refresh the page and try again'
537
+ });
538
+ return;
539
+ }
540
+ // Get link token from backend
541
+ await this.getLinkToken();
542
+ if (!this.linkToken) {
543
+ this.handleError({
544
+ code: PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED,
545
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED],
546
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED],
547
+ retryable: true,
548
+ userAction: 'Click to try again'
549
+ });
550
+ return;
551
+ }
552
+ // Initialize Plaid Link
553
+ const Plaid = window.Plaid;
554
+ this.plaidLink = Plaid.create({
555
+ token: this.linkToken,
556
+ onSuccess: this.handlePlaidSuccess,
557
+ onExit: this.handlePlaidExit,
558
+ onEvent: this.handlePlaidEvent,
559
+ onLoad: this.handlePlaidLoad,
560
+ });
561
+ }
562
+ catch (error) {
563
+ this.handleError({
564
+ code: PlaidErrorCodes.PLAID_LINK_INIT_FAILED,
565
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_LINK_INIT_FAILED],
566
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_LINK_INIT_FAILED],
567
+ originalError: error,
568
+ retryable: true,
569
+ userAction: 'Click to try again'
570
+ });
571
+ }
572
+ };
573
+ this.getLinkToken = async () => {
574
+ var _a, _b, _c, _d, _e;
575
+ try {
576
+ if (!checkout_store.checkoutStore.authToken || !checkout_store.checkoutStore.accountId) {
577
+ this.handleError({
578
+ code: PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED,
579
+ message: 'Missing authentication. Please refresh the page and try again.',
580
+ severity: ComponentError.ComponentErrorSeverity.ERROR,
581
+ retryable: false,
582
+ userAction: 'Refresh the page'
583
+ });
584
+ return;
585
+ }
586
+ // Create abort controller for timeout handling
587
+ this.abortController = new AbortController();
588
+ // Set timeout for the request
589
+ this.timeoutId = setTimeout(() => {
590
+ var _a;
591
+ (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
592
+ }, 30000); // 30 second timeout
593
+ const response = await this.plaidService.getLinkToken(checkout_store.checkoutStore.authToken, checkout_store.checkoutStore.accountId, checkout_store.checkoutStore.checkoutId, this.abortController.signal);
594
+ // Clear timeout
595
+ if (this.timeoutId) {
596
+ clearTimeout(this.timeoutId);
597
+ this.timeoutId = null;
598
+ }
599
+ if (response.error) {
600
+ const errorMessage = typeof response.error === 'string'
601
+ ? response.error
602
+ : response.error.message || 'Failed to get link token';
603
+ throw new Error(errorMessage);
604
+ }
605
+ // Some backends may return an id along with the link token
606
+ this.linkToken = response.data.link_token;
607
+ // Try to capture link token id if present in envelope
608
+ 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;
609
+ }
610
+ catch (error) {
611
+ // Clear timeout
612
+ if (this.timeoutId) {
613
+ clearTimeout(this.timeoutId);
614
+ this.timeoutId = null;
615
+ }
616
+ let errorCode = PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
617
+ let message = PLAID_ERROR_MESSAGES[errorCode];
618
+ let retryable = true;
619
+ // Handle specific error types
620
+ if (error.name === 'AbortError') {
621
+ errorCode = PlaidErrorCodes.PLAID_TIMEOUT;
622
+ message = PLAID_ERROR_MESSAGES[errorCode];
623
+ retryable = true;
624
+ }
625
+ 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'))) {
626
+ errorCode = PlaidErrorCodes.PLAID_NETWORK_ERROR;
627
+ message = PLAID_ERROR_MESSAGES[errorCode];
628
+ retryable = true;
629
+ }
630
+ 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'))) {
631
+ errorCode = PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
632
+ message = 'Authentication failed. Please refresh the page and try again.';
633
+ retryable = false;
634
+ }
635
+ this.handleError({
636
+ code: errorCode,
637
+ message: message,
638
+ severity: PLAID_ERROR_SEVERITY[errorCode],
639
+ originalError: error,
640
+ retryable,
641
+ userAction: retryable ? 'Click to try again' : 'Refresh the page'
642
+ });
643
+ }
644
+ };
645
+ this.mapApiErrorToPlaidError = (apiError) => {
646
+ if (typeof apiError === 'string') {
647
+ if (apiError.includes('rate_limit'))
648
+ return PlaidErrorCodes.PLAID_RATE_LIMITED;
649
+ if (apiError.includes('maintenance'))
650
+ return PlaidErrorCodes.PLAID_MAINTENANCE;
651
+ if (apiError.includes('not_authenticated'))
652
+ return PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
653
+ }
654
+ if (apiError === null || apiError === void 0 ? void 0 : apiError.code) {
655
+ switch (apiError.code) {
656
+ case 'rate_limited': return PlaidErrorCodes.PLAID_RATE_LIMITED;
657
+ case 'maintenance': return PlaidErrorCodes.PLAID_MAINTENANCE;
658
+ case 'not_authenticated': return PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
659
+ case 'invalid_parameter': return PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
660
+ default: return PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
661
+ }
662
+ }
663
+ return PlaidErrorCodes.PLAID_LINK_TOKEN_FAILED;
664
+ };
665
+ this.openPlaidLink = () => {
666
+ if (this.plaidLink && this.linkToken) {
667
+ this.isAuthenticating = true;
668
+ this.clearError();
669
+ this.plaidLink.open();
670
+ }
671
+ };
672
+ this.handlePlaidSuccess = (publicToken, _metadata) => {
673
+ this.publicToken = publicToken;
674
+ this.isAuthenticating = false;
675
+ this.clearError();
676
+ this.retryCount = 0; // Reset retry count on success
677
+ // Ensure the component remains selected after successful authentication
678
+ if (!this.isSelected) {
679
+ this.isSelected = true;
680
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.plaid };
681
+ }
682
+ // Emit success event for parent components
683
+ this.plaidErrorRecovered.emit({
684
+ code: 'plaid-success',
685
+ message: 'Bank account connected successfully',
686
+ severity: ComponentError.ComponentErrorSeverity.INFO
687
+ });
688
+ // Immediately exchange the public token for a payment method token via backend
689
+ this.exchangePublicTokenForPaymentMethod();
690
+ };
691
+ this.exchangePublicTokenForPaymentMethod = async () => {
692
+ var _a;
693
+ if (!this.publicToken) {
694
+ console.error('[PlaidPaymentMethod] exchange: missing publicToken');
695
+ return;
696
+ }
697
+ if (!checkout_store.checkoutStore.authToken || !checkout_store.checkoutStore.accountId) {
698
+ console.error('[PlaidPaymentMethod] exchange: missing auth/account context');
699
+ return;
700
+ }
701
+ try {
702
+ const response = await this.plaidService.tokenizeBankAccount(checkout_store.checkoutStore.authToken, checkout_store.checkoutStore.accountId, this.publicToken, this.linkTokenId || undefined, checkout_store.checkoutStore.savePaymentMethod ? checkout_store.checkoutStore.paymentMethodGroupId : undefined);
703
+ if (response === null || response === void 0 ? void 0 : response.error) {
704
+ console.error('[PlaidPaymentMethod] exchange: backend error', response.error);
705
+ return;
706
+ }
707
+ // Extract token from payment method response
708
+ const paymentMethod = response === null || response === void 0 ? void 0 : response.data;
709
+ 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);
710
+ if (!token) {
711
+ console.error('[PlaidPaymentMethod] exchange: no token in response');
712
+ return;
713
+ }
714
+ // Save for downstream submit flows
715
+ checkout_store.checkoutStore.paymentToken = token;
716
+ }
717
+ catch (err) {
718
+ console.error('[PlaidPaymentMethod] exchange: exception', {
719
+ message: (err === null || err === void 0 ? void 0 : err.message) || String(err),
720
+ });
721
+ }
722
+ };
723
+ this.handlePlaidExit = (err, _metadata) => {
724
+ this.isAuthenticating = false;
725
+ if (err) {
726
+ this.handlePlaidError(err);
727
+ }
728
+ };
729
+ this.handlePlaidEvent = (eventName, metadata) => {
730
+ // Handle specific events if needed
731
+ switch (eventName) {
732
+ case 'OPEN':
733
+ this.isAuthenticating = true;
734
+ break;
735
+ case 'CLOSE':
736
+ this.isAuthenticating = false;
737
+ break;
738
+ case 'ERROR':
739
+ this.handlePlaidError(metadata);
740
+ break;
741
+ }
742
+ };
743
+ this.handlePlaidLoad = () => {
744
+ };
745
+ this.handlePlaidError = (error) => {
746
+ let errorCode = PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED;
747
+ let message = PLAID_ERROR_MESSAGES[errorCode];
748
+ let retryable = true;
749
+ let userAction = 'Click to try again';
750
+ // Map Plaid error codes to our error codes
751
+ if (error.error_code) {
752
+ switch (error.error_code) {
753
+ case 'INVALID_CREDENTIALS':
754
+ errorCode = PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
755
+ message = PLAID_ERROR_MESSAGES[errorCode];
756
+ retryable = true;
757
+ break;
758
+ case 'ITEM_LOGIN_REQUIRED':
759
+ errorCode = PlaidErrorCodes.PLAID_INVALID_CREDENTIALS;
760
+ message = 'Your bank requires re-authentication. Please try again.';
761
+ retryable = true;
762
+ break;
763
+ case 'ITEM_LOCKED':
764
+ errorCode = PlaidErrorCodes.PLAID_ACCOUNT_LOCKED;
765
+ message = PLAID_ERROR_MESSAGES[errorCode];
766
+ retryable = false;
767
+ userAction = 'Contact your bank';
768
+ break;
769
+ case 'INSTITUTION_NOT_RESPONDING':
770
+ errorCode = PlaidErrorCodes.PLAID_MAINTENANCE;
771
+ message = PLAID_ERROR_MESSAGES[errorCode];
772
+ retryable = true;
773
+ break;
774
+ case 'RATE_LIMIT_EXCEEDED':
775
+ errorCode = PlaidErrorCodes.PLAID_RATE_LIMITED;
776
+ message = PLAID_ERROR_MESSAGES[errorCode];
777
+ retryable = true;
778
+ break;
779
+ case 'INVALID_REQUEST':
780
+ errorCode = PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED;
781
+ message = 'Invalid request. Please try again.';
782
+ retryable = true;
783
+ break;
784
+ case 'PLAID_ERROR':
785
+ errorCode = PlaidErrorCodes.PLAID_AUTHENTICATION_FAILED;
786
+ message = error.error_message || 'Bank authentication failed. Please try again.';
787
+ retryable = true;
788
+ break;
789
+ default:
790
+ // Use the error message from Plaid if available
791
+ if (error.error_message) {
792
+ message = error.error_message;
793
+ }
794
+ break;
795
+ }
796
+ }
797
+ // Handle specific error messages
798
+ if (error.error_message) {
799
+ const lowerMessage = error.error_message.toLowerCase();
800
+ if (lowerMessage.includes('not supported') || lowerMessage.includes('unsupported')) {
801
+ errorCode = PlaidErrorCodes.PLAID_BANK_NOT_SUPPORTED;
802
+ message = PLAID_ERROR_MESSAGES[errorCode];
803
+ retryable = false;
804
+ userAction = 'Try a different payment method';
805
+ }
806
+ else if (lowerMessage.includes('expired') || lowerMessage.includes('timeout')) {
807
+ errorCode = PlaidErrorCodes.PLAID_TOKEN_EXPIRED;
808
+ message = PLAID_ERROR_MESSAGES[errorCode];
809
+ retryable = true;
810
+ }
811
+ }
812
+ this.handleError({
813
+ code: errorCode,
814
+ message,
815
+ severity: PLAID_ERROR_SEVERITY[errorCode],
816
+ originalError: error,
817
+ retryable,
818
+ userAction
819
+ });
820
+ this.isAuthenticating = false;
821
+ };
822
+ this.handleError = (plaidError) => {
823
+ this.error = plaidError;
824
+ // Emit error event for parent components
825
+ this.plaidError.emit({
826
+ code: plaidError.code,
827
+ message: plaidError.message,
828
+ severity: plaidError.severity,
829
+ data: {
830
+ originalError: plaidError.originalError,
831
+ retryable: plaidError.retryable,
832
+ userAction: plaidError.userAction,
833
+ retryCount: this.retryCount
834
+ }
835
+ });
836
+ console.error('Plaid error:', plaidError);
837
+ // Auto-retry for retryable errors if under max retries
838
+ if (plaidError.retryable && this.retryCount < this.maxRetries) {
839
+ this.scheduleRetry();
840
+ }
841
+ };
842
+ this.scheduleRetry = () => {
843
+ if (this.isRetrying)
844
+ return;
845
+ this.isRetrying = true;
846
+ this.retryCount++;
847
+ setTimeout(() => {
848
+ this.isRetrying = false;
849
+ this.clearError();
850
+ this.waitForStoreAndInitialize();
851
+ }, this.retryDelay * this.retryCount); // Exponential backoff
852
+ };
853
+ this.clearError = () => {
854
+ if (this.error) {
855
+ this.error = null;
856
+ this.retryCount = 0;
857
+ }
858
+ };
859
+ // Watch for store changes to sync component state
860
+ this.syncWithStore = () => {
861
+ const shouldBeSelected = checkout_store.checkoutStore.selectedPaymentMethod.type === Refund.PaymentMethodTypes.plaid;
862
+ if (this.isSelected !== shouldBeSelected) {
863
+ this.isSelected = shouldBeSelected;
864
+ }
865
+ };
866
+ }
867
+ onSelectionChange(newValue) {
868
+ // Ensure store is updated when component selection changes
869
+ if (newValue && checkout_store.checkoutStore.selectedPaymentMethod.type !== Refund.PaymentMethodTypes.plaid) {
870
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.plaid };
871
+ }
872
+ // Auto-start Plaid flow when selected and ready
873
+ if (newValue &&
874
+ this.plaidLink &&
875
+ !this.publicToken &&
876
+ !this.isAuthenticating &&
877
+ !this.error) {
878
+ this.openPlaidLink();
879
+ }
880
+ }
881
+ componentDidRender() {
882
+ if (!this.scriptRef)
883
+ return;
884
+ this.scriptRef.onload = () => {
885
+ // Wait for store to be populated before initializing
886
+ this.waitForStoreAndInitialize();
887
+ };
888
+ // Add error handler for script loading failures
889
+ this.scriptRef.onerror = () => {
890
+ this.handleError({
891
+ code: PlaidErrorCodes.PLAID_SDK_LOAD_FAILED,
892
+ message: PLAID_ERROR_MESSAGES[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
893
+ severity: PLAID_ERROR_SEVERITY[PlaidErrorCodes.PLAID_SDK_LOAD_FAILED],
894
+ retryable: true,
895
+ userAction: 'Refresh the page and try again'
896
+ });
897
+ };
898
+ }
899
+ componentWillLoad() {
900
+ // Initialize selection state based on store
901
+ this.isSelected = checkout_store.checkoutStore.selectedPaymentMethod.type === Refund.PaymentMethodTypes.plaid;
902
+ }
903
+ async resolvePaymentMethod() {
904
+ if (!this.publicToken) {
905
+ return { validationError: true };
906
+ }
907
+ return {
908
+ token: this.publicToken,
909
+ data: {
910
+ type: 'bank_account',
911
+ plaid_public_token: this.publicToken
912
+ }
913
+ };
914
+ }
915
+ // Returns a usable payment method token for checkout completion.
916
+ // Will perform the backend exchange if the token is not yet present in the store.
917
+ async getPaymentToken() {
918
+ if (checkout_store.checkoutStore.paymentToken) {
919
+ return checkout_store.checkoutStore.paymentToken;
920
+ }
921
+ await this.exchangePublicTokenForPaymentMethod();
922
+ return checkout_store.checkoutStore.paymentToken;
923
+ }
924
+ async handleSelectionClick() {
925
+ // Update local selection state
926
+ this.isSelected = true;
927
+ // Update store selection
928
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.plaid };
929
+ // If there's an error, clear it and try to initialize again
930
+ if (this.error) {
931
+ this.clearError();
932
+ this.waitForStoreAndInitialize();
933
+ return;
934
+ }
935
+ // If Plaid Link is ready and no public token exists, open Plaid Link
936
+ if (this.plaidLink && !this.publicToken && !this.isAuthenticating) {
937
+ this.openPlaidLink();
938
+ }
939
+ }
940
+ // Method to handle external selection changes (e.g., from other payment methods)
941
+ async setSelected(selected) {
942
+ this.isSelected = selected;
943
+ if (selected) {
944
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.plaid };
945
+ }
946
+ }
947
+ // Method to check if component is currently selected
948
+ async isCurrentlySelected() {
949
+ return this.isSelected;
950
+ }
951
+ // Method to handle external deselection (when another payment method is selected)
952
+ async deselect() {
953
+ this.isSelected = false;
954
+ // Don't clear the public token or error state as they might be needed if user reselects
955
+ }
956
+ // Method to reset component state (useful for testing or error recovery)
957
+ async reset() {
958
+ this.publicToken = null;
959
+ this.clearError();
960
+ this.isAuthenticating = false;
961
+ this.linkToken = null;
962
+ this.plaidLink = null;
963
+ this.retryCount = 0;
964
+ this.isRetrying = false;
965
+ // Clear any pending timeouts
966
+ if (this.timeoutId) {
967
+ clearTimeout(this.timeoutId);
968
+ this.timeoutId = null;
969
+ }
970
+ // Abort any pending requests
971
+ if (this.abortController) {
972
+ this.abortController.abort();
973
+ this.abortController = null;
974
+ }
975
+ }
976
+ // Method to check if component is ready for authentication
977
+ async isReadyForAuthentication() {
978
+ return !!(this.plaidLink && this.linkToken && !this.isAuthenticating);
979
+ }
980
+ // Method to manually retry after an error
981
+ async retry() {
982
+ if (this.error && this.error.retryable) {
983
+ this.clearError();
984
+ this.waitForStoreAndInitialize();
985
+ }
986
+ }
987
+ // Method to get current error information
988
+ async getErrorInfo() {
989
+ return this.error;
990
+ }
991
+ componentDidLoad() {
992
+ // Set up store change listener to keep component in sync
993
+ const unsubscribe = checkout_store.onChange('selectedPaymentMethod', this.syncWithStore);
994
+ // Store unsubscribe function for cleanup
995
+ this.unsubscribeFromStore = unsubscribe;
996
+ }
997
+ disconnectedCallback() {
998
+ // Clean up store subscription
999
+ if (this.unsubscribeFromStore) {
1000
+ this.unsubscribeFromStore();
1001
+ }
1002
+ // Clean up timeouts and abort controllers
1003
+ if (this.timeoutId) {
1004
+ clearTimeout(this.timeoutId);
1005
+ }
1006
+ if (this.abortController) {
1007
+ this.abortController.abort();
1008
+ }
1009
+ }
1010
+ render() {
1011
+ // Only allow use if enabled in checkout settings
1012
+ if (checkout_store.checkoutStore.bankAccountVerification !== true) {
1013
+ if (!this.hasLoggedDisabledWarning) {
1014
+ // Log once per component lifecycle
1015
+ console.warn('[PlaidPaymentMethod] bank_account_verification is disabled. Component will not render.');
1016
+ this.hasLoggedDisabledWarning = true;
1017
+ }
1018
+ return null;
1019
+ }
1020
+ const plaidLogo = (index.h("img", { class: "plaid-logo-img", src: plaidIconSvg, alt: "Plaid", title: "Plaid", style: {
1021
+ display: 'inline',
1022
+ width: '20px',
1023
+ height: '20px',
1024
+ marginLeft: '5px',
1025
+ marginTop: '-2px',
1026
+ } }));
1027
+ const renderErrorState = () => {
1028
+ if (!this.error)
1029
+ return null;
1030
+ const errorClass = this.error.severity === ComponentError.ComponentErrorSeverity.ERROR
1031
+ ? 'text-danger'
1032
+ : this.error.severity === ComponentError.ComponentErrorSeverity.WARNING
1033
+ ? 'text-warning'
1034
+ : 'text-info';
1035
+ return (index.h("div", { class: `${errorClass} mt-2` }, index.h("small", null, this.error.message), index.h("br", null), index.h("small", { class: "text-muted" }, this.error.userAction, this.error.retryable && this.retryCount < this.maxRetries && (index.h("span", null, " \u2022 Auto-retry in progress...")))));
1036
+ };
1037
+ const renderStatusState = () => {
1038
+ if (this.error)
1039
+ return null;
1040
+ if (this.isAuthenticating) {
1041
+ return (index.h("div", { class: "text-info mt-2" }, index.h("small", null, "Connecting to your bank...")));
1042
+ }
1043
+ if (this.publicToken) {
1044
+ return (index.h("div", { class: "text-success mt-2" }, index.h("small", null, "\u2713 Bank account connected successfully")));
1045
+ }
1046
+ if (this.isSelected && !this.publicToken && !this.error && !this.isAuthenticating) {
1047
+ return (index.h("div", { class: "text-muted mt-2" }, index.h("small", null, "Click to connect your bank account")));
1048
+ }
1049
+ return null;
1050
+ };
1051
+ return (index.h(styledHost.StyledHost, { class: "payment-method" }, index.h("script", { src: "https://cdn.plaid.com/link/v2/stable/link-initialize.js", async: true, ref: (el) => (this.scriptRef = el) }), index.h("div", { title: "Pay with Plaid" }, index.h("div", { onClick: (event) => { event.preventDefault(); this.handleSelectionClick(); } }, "Pay with Bank Account ", plaidLogo, " "), renderErrorState(), renderStatusState())));
1052
+ }
1053
+ static get watchers() { return {
1054
+ "isSelected": ["onSelectionChange"]
1055
+ }; }
1056
+ };
1057
+
1058
+ const SavedPaymentMethods = class {
1059
+ constructor(hostRef) {
1060
+ index.registerInstance(this, hostRef);
1061
+ this.onPaymentMethodOptionClick = (paymentMethod) => (e) => {
1062
+ e.preventDefault();
1063
+ checkout_store.checkoutStore.selectedPaymentMethod = paymentMethod;
1064
+ checkout_store.checkoutStore.paymentToken = paymentMethod.id;
1065
+ };
1066
+ this.isAllowedPaymentMethod = (paymentMethod) => {
1067
+ if (paymentMethod.type === index$1.PAYMENT_METHOD_TYPES.CARD && checkout_store.checkoutStore.disableCreditCard) {
1068
+ return false;
1069
+ }
1070
+ if (paymentMethod.type === index$1.PAYMENT_METHOD_TYPES.BANK_ACCOUNT && checkout_store.checkoutStore.disableBankAccount) {
1071
+ return false;
1072
+ }
1073
+ return true;
1074
+ };
1075
+ }
1076
+ componentWillLoad() {
1077
+ if (!checkout_store.checkoutStore.paymentMethods.length) {
1078
+ console.warn('No saved payment methods available.');
1079
+ }
1080
+ if (checkout_store.checkoutStore.disablePaymentMethodGroup) {
1081
+ console.warn('Payment method group is disabled.');
1082
+ }
1083
+ }
1084
+ render() {
1085
+ if (checkout_store.checkoutStore.disablePaymentMethodGroup) {
1086
+ return null;
1087
+ }
1088
+ return (index.h(styledHost.StyledHost, null, index.h("div", { class: "saved-payment-methods" }, checkout_store.checkoutStore.paymentMethods.length ? checkout_store.checkoutStore.paymentMethods
1089
+ .filter(this.isAllowedPaymentMethod)
1090
+ .map((paymentMethod) => (index.h("div", { class: "radio-list-item p-3", part: parts.radioListItem, onClick: this.onPaymentMethodOptionClick(paymentMethod) }, index.h("form-control-radio", { name: "paymentMethodType", value: paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.id, checked: checkout_store.checkoutStore.paymentToken === (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.id), label: `${paymentMethodOptionUtils.CardBrandLabels[paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.brand] || ''} *${paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.acct_last_four}` })))) : null)));
1091
+ }
1092
+ };
1093
+
1094
+ const sezzleLogo = (index.h("img", { class: "sezzle-smart-button-logo-img", src: "https://media.sezzle.com/branding/2.0/Sezzle_Logo_FullColor.svg", alt: "Sezzle", style: {
1095
+ display: 'inline',
1096
+ width: '80px',
1097
+ marginLeft: '5px',
1098
+ marginTop: '-5px',
1099
+ } }));
1100
+ const SezzlePaymentMethod = class {
1101
+ constructor(hostRef) {
1102
+ index.registerInstance(this, hostRef);
1103
+ this.paymentMethodOptionSelected = index.createEvent(this, "paymentMethodOptionSelected");
1104
+ this.paymentMethodOptionId = index$1.PAYMENT_METHODS.SEZZLE;
1105
+ this.initializeSezzleCheckout = () => {
1106
+ let resolveSezzlePromise;
1107
+ this.sezzlePromise = new Promise((resolve) => { resolveSezzlePromise = resolve; });
1108
+ const amount = Number(checkout_store.checkoutStore.paymentAmount);
1109
+ const Checkout = window.Checkout;
1110
+ const checkout = new Checkout({
1111
+ mode: 'popup',
1112
+ publicKey: checkout_store.checkoutStore.bnplProviderClientId,
1113
+ apiMode: checkout_store.checkoutStore.bnplProviderMode,
1114
+ apiVersion: checkout_store.checkoutStore.bnplProviderApiVersion,
1115
+ });
1116
+ checkout.sezzleButtonElement = this.sezzleButtonRef;
1117
+ checkout.init({
1118
+ onClick: function (event) {
1119
+ event.preventDefault();
1120
+ checkout.startCheckout({
1121
+ checkout_url: checkout_store.checkoutStore.bnplProviderCheckoutUrl,
1122
+ });
1123
+ },
1124
+ onComplete: (event) => resolveSezzlePromise({ bnpl: event.data }),
1125
+ onCancel: (event) => resolveSezzlePromise({ bnpl: event.data }),
1126
+ onFailure: (event) => resolveSezzlePromise({ bnpl: event.data }),
1127
+ });
1128
+ this.sezzleCheckout = checkout;
1129
+ this.installmentPlan = this.sezzleCheckout.getInstallmentPlan(amount);
1130
+ };
1131
+ }
1132
+ componentDidRender() {
1133
+ if (!this.scriptRef)
1134
+ return;
1135
+ this.scriptRef.onload = () => {
1136
+ this.sezzleButtonRef = document.createElement('button');
1137
+ this.initializeSezzleCheckout();
1138
+ };
1139
+ }
1140
+ async resolvePaymentMethod(insuranceValidation) {
1141
+ if (!insuranceValidation.isValid) {
1142
+ return { validationError: true };
1143
+ }
1144
+ this.sezzleButtonRef.click();
1145
+ return this.sezzlePromise;
1146
+ }
1147
+ async handleSelectionClick() {
1148
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.sezzle };
1149
+ this.paymentMethodOptionSelected.emit(this.paymentMethodOptionId);
1150
+ }
1151
+ render() {
1152
+ var _a, _b;
1153
+ if (!checkout_store.checkoutStore.bnplEnabled || checkout_store.checkoutStore.disableBnpl) {
1154
+ console.warn('justifi-sezzle-payment-method: BNPL is not enabled for this account.');
1155
+ return null;
1156
+ }
1157
+ return (index.h(styledHost.StyledHost, { class: "payment-method" }, index.h("script", { src: "https://checkout-sdk.sezzle.com/checkout.min.js", async: true, ref: (el) => (this.scriptRef = el) }), index.h("div", null, index.h("div", null, "Buy now, pay later with ", sezzleLogo), this.installmentPlan && (index.h("small", null, index.h("span", null, (_a = this.installmentPlan) === null || _a === void 0 ? void 0 : _a.installments.length), "\u00A0", index.h("span", null, this.installmentPlan.schedule, " payments of"), "\u00A0", index.h("span", { class: "fw-bold" }, utils.formatCurrency((_b = this.installmentPlan) === null || _b === void 0 ? void 0 : _b.installments[0].amountInCents)))))));
1158
+ }
1159
+ };
1160
+
1161
+ // Constants
1162
+ const PAYMENT_METHOD_TYPE_LABELS = {
1163
+ [Refund.PaymentMethodTypes.bankAccount]: 'New bank account',
1164
+ [Refund.PaymentMethodTypes.card]: 'New credit or debit card',
1165
+ };
1166
+ const ERROR_MESSAGES = {
1167
+ AUTH_TOKEN_REQUIRED: 'Auth token is required when using the tokenize-payment-method component not slotted in justifi-modular-checkout',
1168
+ ACCOUNT_ID_REQUIRED: 'Account ID is required when using the tokenize-payment-method component not slotted in justifi-modular-checkout',
1169
+ FORM_NOT_READY: 'Payment form not ready',
1170
+ VALIDATION_ERROR: 'Validation error',
1171
+ };
1172
+ const TokenizePaymentMethod = class {
1173
+ constructor(hostRef) {
1174
+ index.registerInstance(this, hostRef);
1175
+ this.errorEvent = index.createEvent(this, "error-event");
1176
+ this.submitEvent = index.createEvent(this, "submit-event");
1177
+ this.computedHideSubmitButton = false;
1178
+ this.isLoading = false;
1179
+ this.submitButtonText = 'Submit';
1180
+ }
1181
+ paymentMethodsChanged() {
1182
+ this.setDefaultSelectedPaymentMethod();
1183
+ }
1184
+ connectedCallback() {
1185
+ this.setDefaultSelectedPaymentMethod();
1186
+ this.setComputedHideSubmitButton();
1187
+ }
1188
+ disconnectedCallback() {
1189
+ var _a;
1190
+ (_a = this.analytics) === null || _a === void 0 ? void 0 : _a.cleanup();
1191
+ if (this.unsubscribeFromStore) {
1192
+ this.unsubscribeFromStore();
1193
+ }
1194
+ }
1195
+ componentWillLoad() {
1196
+ checkPkgVersion.checkPkgVersion();
1197
+ this.analytics = new checkPkgVersion.JustifiAnalytics(this);
1198
+ }
1199
+ handleRadioClick(event) {
1200
+ this.selectedPaymentMethod = event.detail;
1201
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: event.detail };
1202
+ }
1203
+ async fillBillingForm(fields) {
1204
+ var _a;
1205
+ (_a = this.billingFormRef) === null || _a === void 0 ? void 0 : _a.fill(fields);
1206
+ }
1207
+ async tokenizePaymentMethod(event) {
1208
+ event === null || event === void 0 ? void 0 : event.preventDefault();
1209
+ this.validateRequiredProps();
1210
+ this.isLoading = true;
1211
+ try {
1212
+ const validation = await this.validate();
1213
+ if (!validation.isValid) {
1214
+ this.errorEvent.emit({
1215
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
1216
+ message: ERROR_MESSAGES.VALIDATION_ERROR,
1217
+ });
1218
+ this.isLoading = false;
1219
+ return;
1220
+ }
1221
+ const tokenizeResponse = await this.resolvePaymentMethod({ isValid: true });
1222
+ if (tokenizeResponse.error) {
1223
+ this.emitError({
1224
+ errorCode: tokenizeResponse.error.code,
1225
+ message: tokenizeResponse.error.message,
1226
+ });
1227
+ }
1228
+ this.submitEvent.emit({ response: tokenizeResponse });
1229
+ return tokenizeResponse;
1230
+ }
1231
+ catch (error) {
1232
+ const errorResponse = this.createErrorResponse(ComponentError.ComponentErrorCodes.TOKENIZE_ERROR, error.message);
1233
+ this.emitError({
1234
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
1235
+ message: error.message,
1236
+ });
1237
+ this.submitEvent.emit({ response: errorResponse });
1238
+ return errorResponse;
1239
+ }
1240
+ finally {
1241
+ this.isLoading = false;
1242
+ }
1243
+ }
1244
+ async validate() {
1245
+ if (!this.areFormsReady()) {
1246
+ return { isValid: false, errors: { general: ERROR_MESSAGES.FORM_NOT_READY } };
1247
+ }
1248
+ const [billingValidation, paymentMethodValidation] = await Promise.all([
1249
+ this.billingFormRef.validate(),
1250
+ this.paymentMethodFormRef.validate(),
1251
+ ]);
1252
+ const result = {
1253
+ isValid: billingValidation.isValid && paymentMethodValidation.isValid,
1254
+ errors: Object.assign(Object.assign({}, billingValidation.errors), paymentMethodValidation.errors),
1255
+ };
1256
+ return result;
1257
+ }
1258
+ async tokenize() {
1259
+ try {
1260
+ const billingFormFieldValues = await this.billingFormRef.getValues();
1261
+ const config = {
1262
+ clientId: this.authToken || checkout_store.checkoutStore.authToken,
1263
+ account: this.accountId || checkout_store.checkoutStore.accountId,
1264
+ paymentMethodMetadata: this.buildPaymentMethodMetadata(billingFormFieldValues),
1265
+ };
1266
+ return await this.paymentMethodFormRef.tokenize(config);
1267
+ }
1268
+ catch (error) {
1269
+ return error;
1270
+ }
1271
+ }
1272
+ // 9. Local methods
1273
+ validateRequiredProps() {
1274
+ if (!this.authToken && !checkout_store.checkoutStore.authToken) {
1275
+ this.emitError({
1276
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
1277
+ message: ERROR_MESSAGES.AUTH_TOKEN_REQUIRED,
1278
+ });
1279
+ }
1280
+ if (!this.accountId && !checkout_store.checkoutStore.accountId) {
1281
+ this.emitError({
1282
+ errorCode: ComponentError.ComponentErrorCodes.TOKENIZE_ERROR,
1283
+ message: ERROR_MESSAGES.ACCOUNT_ID_REQUIRED,
1284
+ });
1285
+ }
1286
+ }
1287
+ setDefaultSelectedPaymentMethod() {
1288
+ if (this.selectedPaymentMethod) {
1289
+ return;
1290
+ }
1291
+ if (!this.disableCreditCard) {
1292
+ this.selectedPaymentMethod = Refund.PaymentMethodTypes.card;
1293
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.card };
1294
+ }
1295
+ else if (!this.disableBankAccount) {
1296
+ this.selectedPaymentMethod = Refund.PaymentMethodTypes.bankAccount;
1297
+ checkout_store.checkoutStore.selectedPaymentMethod = { type: Refund.PaymentMethodTypes.bankAccount };
1298
+ }
1299
+ }
1300
+ setComputedHideSubmitButton() {
1301
+ // If hideSubmitButton prop is explicitly set, use that value
1302
+ if (this.hideSubmitButton !== undefined) {
1303
+ this.computedHideSubmitButton = this.hideSubmitButton;
1304
+ return;
1305
+ }
1306
+ // Otherwise, auto-detect if component is slotted within modular-checkout
1307
+ const isWithinModularCheckout = this.isSlottedWithinModularCheckout();
1308
+ this.computedHideSubmitButton = isWithinModularCheckout;
1309
+ }
1310
+ isSlottedWithinModularCheckout() {
1311
+ var _a;
1312
+ let parent = (_a = this.host) === null || _a === void 0 ? void 0 : _a.parentElement;
1313
+ while (parent) {
1314
+ if (parent.tagName === 'JUSTIFI-MODULAR-CHECKOUT') {
1315
+ return true;
1316
+ }
1317
+ parent = parent.parentElement;
1318
+ }
1319
+ return false;
1320
+ }
1321
+ get availablePaymentMethods() {
1322
+ const methods = [];
1323
+ if (!this.disableCreditCard) {
1324
+ methods.push(Refund.PaymentMethodTypes.card);
1325
+ }
1326
+ if (!this.disableBankAccount) {
1327
+ methods.push(Refund.PaymentMethodTypes.bankAccount);
1328
+ }
1329
+ return methods;
1330
+ }
1331
+ areFormsReady() {
1332
+ return !!(this.billingFormRef && this.paymentMethodFormRef);
1333
+ }
1334
+ emitError(errorData) {
1335
+ this.errorEvent.emit(Object.assign(Object.assign({}, errorData), { severity: ComponentError.ComponentErrorSeverity.ERROR }));
1336
+ }
1337
+ createErrorResponse(code, message) {
1338
+ return {
1339
+ error: {
1340
+ code: code,
1341
+ message,
1342
+ decline_code: undefined,
1343
+ },
1344
+ };
1345
+ }
1346
+ async resolvePaymentMethod(insuranceValidation) {
1347
+ if (!this.areFormsReady()) {
1348
+ return this.createErrorResponse('form_not_ready', ERROR_MESSAGES.FORM_NOT_READY);
1349
+ }
1350
+ try {
1351
+ const validation = await this.validate();
1352
+ if (!validation.isValid || !insuranceValidation.isValid) {
1353
+ const errorMessage = Object.values(validation.errors)[0] || ERROR_MESSAGES.VALIDATION_ERROR;
1354
+ return {
1355
+ validationError: true,
1356
+ error: {
1357
+ code: 'validation_error',
1358
+ message: String(errorMessage),
1359
+ decline_code: undefined,
1360
+ },
1361
+ };
1362
+ }
1363
+ const result = await this.performTokenization();
1364
+ return result;
1365
+ }
1366
+ catch (error) {
1367
+ return { error };
1368
+ }
1369
+ }
1370
+ async performTokenization() {
1371
+ var _a, _b;
1372
+ const tokenizeResponse = await this.tokenize();
1373
+ if (tokenizeResponse.error) {
1374
+ return { error: tokenizeResponse.error };
1375
+ }
1376
+ const tokenizeResponseData = tokenizeResponse.data;
1377
+ return {
1378
+ token: ((_a = tokenizeResponseData.card) === null || _a === void 0 ? void 0 : _a.token) || ((_b = tokenizeResponseData.bank_account) === null || _b === void 0 ? void 0 : _b.token),
1379
+ data: tokenizeResponseData,
1380
+ };
1381
+ }
1382
+ buildPaymentMethodMetadata(billingFormFieldValues) {
1383
+ return this.shouldSavePaymentMethod
1384
+ ? Object.assign(Object.assign({}, billingFormFieldValues), { payment_method_group_id: this.paymentMethodGroupID }) : Object.assign({}, billingFormFieldValues);
1385
+ }
1386
+ get paymentMethodGroupID() {
1387
+ return this.paymentMethodGroupId || checkout_store.checkoutStore.paymentMethodGroupId;
1388
+ }
1389
+ get shouldSavePaymentMethod() {
1390
+ return !!(this.paymentMethodGroupId || checkout_store.checkoutStore.savePaymentMethod);
1391
+ }
1392
+ get shouldHideRadioInput() {
1393
+ return this.disableCreditCard || this.disableBankAccount;
1394
+ }
1395
+ renderPaymentMethodOption(paymentMethodType) {
1396
+ const isSelected = this.selectedPaymentMethod === paymentMethodType && checkout_store.checkoutStore.selectedPaymentMethod.id === undefined;
1397
+ return (index.h("div", { class: "payment-method" }, index.h("justifi-radio-list-item", { name: "paymentMethodType", value: paymentMethodType, checked: isSelected, label: PAYMENT_METHOD_TYPE_LABELS[paymentMethodType], hidden: this.shouldHideRadioInput }), isSelected && this.renderSelectedPaymentMethodForm(paymentMethodType)));
1398
+ }
1399
+ renderSelectedPaymentMethodForm(paymentMethodId) {
1400
+ return (index.h("div", { class: "mt-4 pb-4" }, this.renderPaymentMethodForm(paymentMethodId), index.h("div", { class: "mt-4" }, index.h("justifi-billing-form", { ref: (el) => (this.billingFormRef = el), hideCardBillingForm: this.hideCardBillingForm, hideBankAccountBillingForm: this.hideBankAccountBillingForm, paymentMethodType: paymentMethodId })), index.h("div", { class: "mt-4" }, index.h("justifi-save-new-payment-method", { hidden: !this.paymentMethodGroupID }))));
1401
+ }
1402
+ renderPaymentMethodForm(paymentMethodId) {
1403
+ return paymentMethodId === Refund.PaymentMethodTypes.card ? (index.h("justifi-card-form", { ref: (el) => (this.paymentMethodFormRef = el) })) : (index.h("justifi-bank-account-form", { ref: (el) => (this.paymentMethodFormRef = el) }));
1404
+ }
1405
+ render() {
1406
+ return (index.h(styledHost.StyledHost, { key: 'a89908d2f192d86edf016b052734f81f46e00f8b' }, index.h("form", { key: '527d1e5ff94a2db8b2d1223d7beda86fdaf08ff0' }, index.h("fieldset", { key: 'd8479461d3788dbcb319f1eaf99b7e05c00c49f9' }, index.h("div", { key: '17f68ee0dceb8353ca54ccf383dc2709444a3b26', class: "row gy-3" }, index.h("div", { key: '3568f3ac4ef04a9a245d61f2b94f3b79371b0a6f', class: "col-12" }, this.availablePaymentMethods.map((method) => this.renderPaymentMethodOption(method))), index.h("div", { key: '97be6dbaf8373a82a706a7eb97e9107baa6c1823', class: "col-12" }, index.h("justifi-button", { key: 'afcd192881ad092f8d31a01e571541079d4d33ac', text: this.submitButtonText, variant: "primary", type: "submit", clickHandler: (e) => this.tokenizePaymentMethod(e), isLoading: this.isLoading, "data-testid": "submit-button", hidden: this.computedHideSubmitButton })))))));
1407
+ }
1408
+ get host() { return index.getElement(this); }
1409
+ static get watchers() { return {
1410
+ "disableCreditCard": ["paymentMethodsChanged"],
1411
+ "disableBankAccount": ["paymentMethodsChanged"]
1412
+ }; }
1413
+ };
1414
+
1415
+ exports.justifi_checkout_summary = Summary;
1416
+ exports.justifi_header = Header;
1417
+ exports.justifi_modular_checkout = ModularCheckout;
1418
+ exports.justifi_plaid_payment_method = PlaidPaymentMethod;
1419
+ exports.justifi_saved_payment_methods = SavedPaymentMethods;
1420
+ exports.justifi_sezzle_payment_method = SezzlePaymentMethod;
1421
+ exports.justifi_tokenize_payment_method = TokenizePaymentMethod;