@internetarchive/donation-form 0.5.18-alpha.1 → 0.5.18

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 (420) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +115 -115
  3. package/dist/demo/braintree-endpoint-manager.d.ts +9 -9
  4. package/dist/demo/braintree-endpoint-manager.js +45 -45
  5. package/dist/demo/braintree-endpoint-manager.js.map +1 -1
  6. package/dist/demo/demo-analytics-handler.d.ts +17 -17
  7. package/dist/demo/demo-analytics-handler.js +13 -13
  8. package/dist/demo/demo-analytics-handler.js.map +1 -1
  9. package/dist/demo/submit-form-with.d.ts +7 -7
  10. package/dist/demo/submit-form-with.js +21 -21
  11. package/dist/demo/submit-form-with.js.map +1 -1
  12. package/dist/index.d.ts +7 -7
  13. package/dist/index.js +7 -7
  14. package/dist/index.js.map +1 -1
  15. package/dist/src/braintree-manager/braintree-interfaces.d.ts +147 -147
  16. package/dist/src/braintree-manager/braintree-interfaces.js +5 -5
  17. package/dist/src/braintree-manager/braintree-interfaces.js.map +1 -1
  18. package/dist/src/braintree-manager/braintree-manager.d.ts +124 -124
  19. package/dist/src/braintree-manager/braintree-manager.js +149 -149
  20. package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
  21. package/dist/src/braintree-manager/payment-clients.d.ts +47 -47
  22. package/dist/src/braintree-manager/payment-clients.js +116 -116
  23. package/dist/src/braintree-manager/payment-clients.js.map +1 -1
  24. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.d.ts +8 -8
  25. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js.map +1 -1
  26. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.d.ts +6 -6
  27. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js.map +1 -1
  28. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +10 -10
  29. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -1
  30. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +21 -21
  31. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js +99 -99
  32. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
  33. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.d.ts +10 -10
  34. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js +12 -12
  35. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -1
  36. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.d.ts +20 -20
  37. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js +71 -71
  38. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
  39. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.d.ts +16 -16
  40. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map +1 -1
  41. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.d.ts +29 -29
  42. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js +99 -99
  43. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
  44. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.d.ts +11 -11
  45. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js +7 -7
  46. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js.map +1 -1
  47. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.d.ts +34 -34
  48. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js +52 -52
  49. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
  50. package/dist/src/braintree-manager/payment-providers/google-pay-interface.d.ts +7 -7
  51. package/dist/src/braintree-manager/payment-providers/google-pay-interface.js.map +1 -1
  52. package/dist/src/braintree-manager/payment-providers/google-pay.d.ts +18 -18
  53. package/dist/src/braintree-manager/payment-providers/google-pay.js +40 -40
  54. package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
  55. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.d.ts +145 -145
  56. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js +60 -60
  57. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
  58. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.d.ts +11 -11
  59. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js.map +1 -1
  60. package/dist/src/braintree-manager/payment-providers/paypal/paypal.d.ts +23 -23
  61. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js +46 -46
  62. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
  63. package/dist/src/braintree-manager/payment-providers/venmo-interface.d.ts +6 -6
  64. package/dist/src/braintree-manager/payment-providers/venmo-interface.js.map +1 -1
  65. package/dist/src/braintree-manager/payment-providers/venmo.d.ts +28 -28
  66. package/dist/src/braintree-manager/payment-providers/venmo.js +50 -50
  67. package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
  68. package/dist/src/braintree-manager/payment-providers-interface.d.ts +16 -16
  69. package/dist/src/braintree-manager/payment-providers-interface.js.map +1 -1
  70. package/dist/src/braintree-manager/payment-providers.d.ts +45 -45
  71. package/dist/src/braintree-manager/payment-providers.js +105 -105
  72. package/dist/src/braintree-manager/payment-providers.js.map +1 -1
  73. package/dist/src/donation-form-controller.d.ts +116 -116
  74. package/dist/src/donation-form-controller.js +562 -562
  75. package/dist/src/donation-form-controller.js.map +1 -1
  76. package/dist/src/donation-form-error.d.ts +3 -3
  77. package/dist/src/donation-form-error.js +6 -6
  78. package/dist/src/donation-form-error.js.map +1 -1
  79. package/dist/src/donation-form.d.ts +120 -120
  80. package/dist/src/donation-form.js +530 -530
  81. package/dist/src/donation-form.js.map +1 -1
  82. package/dist/src/form-elements/badged-input.d.ts +32 -32
  83. package/dist/src/form-elements/badged-input.js +124 -124
  84. package/dist/src/form-elements/badged-input.js.map +1 -1
  85. package/dist/src/form-elements/contact-form/autocomplete-field-options.d.ts +1 -1
  86. package/dist/src/form-elements/contact-form/autocomplete-field-options.js.map +1 -1
  87. package/dist/src/form-elements/contact-form/contact-form.d.ts +53 -53
  88. package/dist/src/form-elements/contact-form/contact-form.js +428 -428
  89. package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
  90. package/dist/src/form-elements/contact-form/countries.d.ts +3 -3
  91. package/dist/src/form-elements/contact-form/countries.js +252 -252
  92. package/dist/src/form-elements/contact-form/countries.js.map +1 -1
  93. package/dist/src/form-elements/header/donation-form-header.d.ts +27 -27
  94. package/dist/src/form-elements/header/donation-form-header.js +97 -97
  95. package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
  96. package/dist/src/form-elements/header/donation-summary.d.ts +11 -11
  97. package/dist/src/form-elements/header/donation-summary.js +57 -57
  98. package/dist/src/form-elements/header/donation-summary.js.map +1 -1
  99. package/dist/src/form-elements/payment-selector.d.ts +25 -25
  100. package/dist/src/form-elements/payment-selector.js +286 -286
  101. package/dist/src/form-elements/payment-selector.js.map +1 -1
  102. package/dist/src/form-elements/total-amount.d.ts +8 -8
  103. package/dist/src/form-elements/total-amount.js +47 -47
  104. package/dist/src/form-elements/total-amount.js.map +1 -1
  105. package/dist/src/modals/confirm-donation-modal-content.d.ts +31 -31
  106. package/dist/src/modals/confirm-donation-modal-content.js +168 -168
  107. package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
  108. package/dist/src/modals/error-modal-content.d.ts +14 -14
  109. package/dist/src/modals/error-modal-content.js +49 -49
  110. package/dist/src/modals/error-modal-content.js.map +1 -1
  111. package/dist/src/modals/upsell-modal-content.d.ts +32 -32
  112. package/dist/src/modals/upsell-modal-content.js +294 -294
  113. package/dist/src/modals/upsell-modal-content.js.map +1 -1
  114. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.d.ts +181 -181
  115. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +252 -252
  116. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
  117. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.d.ts +21 -21
  118. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js +76 -76
  119. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
  120. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.d.ts +70 -70
  121. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js +140 -140
  122. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
  123. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.d.ts +22 -22
  124. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js +74 -74
  125. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
  126. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.d.ts +52 -52
  127. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +239 -239
  128. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
  129. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.d.ts +30 -30
  130. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js +89 -89
  131. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
  132. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.d.ts +75 -75
  133. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js +94 -94
  134. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
  135. package/dist/src/payment-flow-handlers/payment-flow-handlers.d.ts +111 -111
  136. package/dist/src/payment-flow-handlers/payment-flow-handlers.js +107 -107
  137. package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
  138. package/dist/src/recaptcha-manager/recaptcha-manager.d.ts +48 -48
  139. package/dist/src/recaptcha-manager/recaptcha-manager.js +88 -88
  140. package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
  141. package/dist/src/util/promisedSleep.d.ts +1 -1
  142. package/dist/src/util/promisedSleep.js +3 -3
  143. package/dist/src/util/promisedSleep.js.map +1 -1
  144. package/dist/test/helpers/fillInContactForm.d.ts +2 -2
  145. package/dist/test/helpers/fillInContactForm.js +19 -19
  146. package/dist/test/helpers/fillInContactForm.js.map +1 -1
  147. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.d.ts +7 -7
  148. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js +9 -9
  149. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
  150. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.d.ts +15 -15
  151. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js +32 -32
  152. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
  153. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.d.ts +9 -9
  154. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js +15 -15
  155. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
  156. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.d.ts +15 -15
  157. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js +30 -30
  158. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
  159. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.d.ts +9 -9
  160. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js +17 -17
  161. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
  162. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.d.ts +30 -30
  163. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js +29 -29
  164. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
  165. package/dist/test/mocks/mock-analytics-handler.d.ts +8 -0
  166. package/dist/test/mocks/mock-analytics-handler.js +10 -0
  167. package/dist/test/mocks/mock-analytics-handler.js.map +1 -0
  168. package/dist/test/mocks/mock-braintree-manager.d.ts +45 -45
  169. package/dist/test/mocks/mock-braintree-manager.js +71 -71
  170. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  171. package/dist/test/mocks/mock-donation-info.d.ts +4 -4
  172. package/dist/test/mocks/mock-donation-info.js +10 -10
  173. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  174. package/dist/test/mocks/mock-endpoint-manager.d.ts +12 -12
  175. package/dist/test/mocks/mock-endpoint-manager.js +19 -19
  176. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  177. package/dist/test/mocks/mock-hosted-fields-config.d.ts +4 -4
  178. package/dist/test/mocks/mock-hosted-fields-config.js +37 -37
  179. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  180. package/dist/test/mocks/mock-hosted-fields-container.d.ts +13 -13
  181. package/dist/test/mocks/mock-hosted-fields-container.js +27 -27
  182. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  183. package/dist/test/mocks/mock-lazy-loader.d.ts +15 -15
  184. package/dist/test/mocks/mock-lazy-loader.js +20 -20
  185. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  186. package/dist/test/mocks/mock-modal-manager.d.ts +17 -17
  187. package/dist/test/mocks/mock-modal-manager.js +26 -26
  188. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  189. package/dist/test/mocks/mock-payment-clients.d.ts +29 -29
  190. package/dist/test/mocks/mock-payment-clients.js +78 -78
  191. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  192. package/dist/test/mocks/mock-paypal-button-renderer.d.ts +5 -5
  193. package/dist/test/mocks/mock-paypal-button-renderer.js +6 -6
  194. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  195. package/dist/test/mocks/mock-recaptcha-manager.d.ts +7 -7
  196. package/dist/test/mocks/mock-recaptcha-manager.js +14 -14
  197. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  198. package/dist/test/mocks/models/mock-billing-info.d.ts +2 -2
  199. package/dist/test/mocks/models/mock-billing-info.js +9 -9
  200. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  201. package/dist/test/mocks/models/mock-custom-fields.d.ts +2 -2
  202. package/dist/test/mocks/models/mock-custom-fields.js +7 -7
  203. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  204. package/dist/test/mocks/models/mock-customer-info.d.ts +2 -2
  205. package/dist/test/mocks/models/mock-customer-info.js +6 -6
  206. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  207. package/dist/test/mocks/models/mock-donation-request.d.ts +2 -2
  208. package/dist/test/mocks/models/mock-donation-request.js +18 -18
  209. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  210. package/dist/test/mocks/models/mock-success-response.d.ts +2 -2
  211. package/dist/test/mocks/models/mock-success-response.js +14 -14
  212. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  213. package/dist/test/mocks/payment-clients/mock-applepay-client.d.ts +21 -21
  214. package/dist/test/mocks/payment-clients/mock-applepay-client.js +72 -72
  215. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  216. package/dist/test/mocks/payment-clients/mock-applepay-payment.d.ts +6 -6
  217. package/dist/test/mocks/payment-clients/mock-applepay-payment.js +42 -42
  218. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  219. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.d.ts +22 -22
  220. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js +35 -35
  221. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  222. package/dist/test/mocks/payment-clients/mock-applepay-session.d.ts +30 -30
  223. package/dist/test/mocks/payment-clients/mock-applepay-session.js +52 -52
  224. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  225. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.d.ts +10 -10
  226. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js +12 -12
  227. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  228. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.d.ts +22 -22
  229. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js +34 -34
  230. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  231. package/dist/test/mocks/payment-clients/mock-braintree-client.d.ts +14 -14
  232. package/dist/test/mocks/payment-clients/mock-braintree-client.js +19 -19
  233. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  234. package/dist/test/mocks/payment-clients/mock-data-collector.d.ts +11 -11
  235. package/dist/test/mocks/payment-clients/mock-data-collector.js +17 -17
  236. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  237. package/dist/test/mocks/payment-clients/mock-googlepay-client.d.ts +22 -22
  238. package/dist/test/mocks/payment-clients/mock-googlepay-client.js +42 -42
  239. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  240. package/dist/test/mocks/payment-clients/mock-googlepay-library.d.ts +10 -10
  241. package/dist/test/mocks/payment-clients/mock-googlepay-library.js +22 -22
  242. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  243. package/dist/test/mocks/payment-clients/mock-grecaptcha.d.ts +23 -23
  244. package/dist/test/mocks/payment-clients/mock-grecaptcha.js +62 -62
  245. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  246. package/dist/test/mocks/payment-clients/mock-hostedfields-client.d.ts +33 -33
  247. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js +54 -54
  248. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  249. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.d.ts +1 -1
  250. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js +50 -50
  251. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  252. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.d.ts +1 -1
  253. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js +13 -13
  254. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  255. package/dist/test/mocks/payment-clients/mock-paypal-client.d.ts +23 -23
  256. package/dist/test/mocks/payment-clients/mock-paypal-client.js +62 -62
  257. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  258. package/dist/test/mocks/payment-clients/mock-paypal-library.d.ts +4 -4
  259. package/dist/test/mocks/payment-clients/mock-paypal-library.js +9 -9
  260. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  261. package/dist/test/mocks/payment-clients/mock-venmo-client.d.ts +22 -22
  262. package/dist/test/mocks/payment-clients/mock-venmo-client.js +36 -36
  263. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  264. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.d.ts +10 -10
  265. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js +14 -14
  266. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  267. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.d.ts +9 -9
  268. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js +19 -19
  269. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  270. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.d.ts +18 -18
  271. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js +41 -41
  272. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  273. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.d.ts +8 -8
  274. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js +16 -16
  275. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  276. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.d.ts +28 -28
  277. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js +52 -52
  278. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  279. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.d.ts +11 -11
  280. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js +37 -37
  281. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  282. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.d.ts +12 -12
  283. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js +15 -15
  284. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  285. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.d.ts +7 -7
  286. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js +22 -22
  287. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  288. package/dist/test/mocks/payment-providers/mock-payment-providers.d.ts +21 -21
  289. package/dist/test/mocks/payment-providers/mock-payment-providers.js +45 -45
  290. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  291. package/dist/test/tests/braintree-manager.test.d.ts +1 -1
  292. package/dist/test/tests/braintree-manager.test.js +166 -166
  293. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  294. package/dist/test/tests/donation-form-controller.test.d.ts +1 -1
  295. package/dist/test/tests/donation-form-controller.test.js +188 -188
  296. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  297. package/dist/test/tests/donation-form.test.d.ts +1 -1
  298. package/dist/test/tests/donation-form.test.js +109 -109
  299. package/dist/test/tests/donation-form.test.js.map +1 -1
  300. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.d.ts +1 -1
  301. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +216 -216
  302. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  303. package/dist/test/tests/form-elements/donation-summary.test.d.ts +1 -1
  304. package/dist/test/tests/form-elements/donation-summary.test.js +36 -36
  305. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  306. package/dist/test/tests/form-elements/payment-selector.test.d.ts +1 -1
  307. package/dist/test/tests/form-elements/payment-selector.test.js +69 -69
  308. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  309. package/dist/test/tests/modals/error-modal-content.test.d.ts +1 -1
  310. package/dist/test/tests/modals/error-modal-content.test.js +14 -14
  311. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  312. package/dist/test/tests/modals/upsell-modal-content.test.d.ts +1 -1
  313. package/dist/test/tests/modals/upsell-modal-content.test.js +163 -163
  314. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  315. package/dist/test/tests/models/donation-payment-info.test.d.ts +1 -1
  316. package/dist/test/tests/models/donation-payment-info.test.js +74 -74
  317. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  318. package/dist/test/tests/payment-clients.test.d.ts +1 -1
  319. package/dist/test/tests/payment-clients.test.js +130 -130
  320. package/dist/test/tests/payment-clients.test.js.map +1 -1
  321. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.d.ts +1 -1
  322. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js +160 -160
  323. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  324. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.d.ts +1 -1
  325. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js +36 -36
  326. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  327. package/dist/test/tests/payment-providers/applepay.test.d.ts +1 -1
  328. package/dist/test/tests/payment-providers/applepay.test.js +78 -78
  329. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  330. package/dist/test/tests/payment-providers/creditcard.test.d.ts +1 -1
  331. package/dist/test/tests/payment-providers/creditcard.test.js +190 -190
  332. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  333. package/dist/test/tests/payment-providers/googlepay.test.d.ts +1 -1
  334. package/dist/test/tests/payment-providers/googlepay.test.js +48 -48
  335. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  336. package/dist/test/tests/payment-providers/payment-providers.test.d.ts +1 -1
  337. package/dist/test/tests/payment-providers/payment-providers.test.js +38 -38
  338. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  339. package/dist/test/tests/payment-providers/paypal-button-datasource.test.d.ts +1 -1
  340. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js +162 -162
  341. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  342. package/dist/test/tests/payment-providers/paypal.test.d.ts +1 -1
  343. package/dist/test/tests/payment-providers/paypal.test.js +38 -38
  344. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  345. package/dist/test/tests/payment-providers/venmo.test.d.ts +1 -1
  346. package/dist/test/tests/payment-providers/venmo.test.js +77 -77
  347. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  348. package/dist/test/tests/recaptcha-manager.test.d.ts +1 -1
  349. package/dist/test/tests/recaptcha-manager.test.js +70 -70
  350. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  351. package/package.json +101 -101
  352. package/src/@types/analytics-handler/index.d.ts +8 -8
  353. package/src/@types/braintree-web/LICENSE +21 -21
  354. package/src/@types/braintree-web/index.d.ts +93 -93
  355. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  356. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  357. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  358. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  359. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  360. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  361. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  362. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  363. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  364. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  365. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  366. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  367. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  368. package/src/@types/braintree-web/package.json +64 -64
  369. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  370. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  371. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  372. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  373. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  374. package/src/@types/paypal-checkout-components/package.json +58 -58
  375. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  376. package/src/braintree-manager/braintree-manager.ts +283 -283
  377. package/src/braintree-manager/payment-clients.ts +148 -148
  378. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  379. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  380. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  381. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  382. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  383. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +98 -98
  384. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  385. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  386. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  387. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  388. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  389. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  390. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  391. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  392. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  393. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  394. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  395. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  396. package/src/braintree-manager/payment-providers.ts +147 -147
  397. package/src/donation-form-controller.ts +619 -619
  398. package/src/donation-form-error.ts +6 -6
  399. package/src/donation-form.ts +566 -566
  400. package/src/form-elements/badged-input.ts +113 -113
  401. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  402. package/src/form-elements/contact-form/contact-form.ts +427 -427
  403. package/src/form-elements/contact-form/countries.ts +252 -252
  404. package/src/form-elements/header/donation-form-header.ts +100 -100
  405. package/src/form-elements/header/donation-summary.ts +61 -61
  406. package/src/form-elements/payment-selector.ts +293 -293
  407. package/src/form-elements/total-amount.ts +46 -46
  408. package/src/modals/confirm-donation-modal-content.ts +160 -160
  409. package/src/modals/error-modal-content.ts +48 -48
  410. package/src/modals/upsell-modal-content.ts +294 -294
  411. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +450 -450
  412. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +108 -108
  413. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +231 -231
  414. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +113 -113
  415. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +332 -332
  416. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +118 -118
  417. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  418. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  419. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  420. package/src/util/promisedSleep.ts +3 -3
@@ -1,531 +1,531 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { LitElement, html, css } from 'lit';
3
- import { customElement, property, query } from 'lit/decorators.js';
4
- import lockImg from '@internetarchive/icon-lock';
5
- // we have to import the registered component independently from the definition below
6
- // because inside each of these files, we're registering the custom element inside
7
- // these files and by simply importing the class name, you lose that behavior
8
- // See https://github.com/microsoft/TypeScript/issues/9191 for more discussion
9
- import './form-elements/payment-selector';
10
- import './form-elements/header/donation-form-header';
11
- import { DonationPaymentInfo, PaymentProvider, DonationType, defaultDonationAmounts, } from '@internetarchive/donation-form-data-models';
12
- import { EditDonationAmountSelectionLayout, EditDonationFrequencySelectionMode, } from '@internetarchive/donation-form-edit-donation';
13
- import '@internetarchive/donation-form-section';
14
- import { DonationFormSectionBadgeMode, } from '@internetarchive/donation-form-section';
15
- import { UpsellModalCTAMode } from './modals/upsell-modal-content';
16
- import './form-elements/total-amount';
17
- let DonationForm = class DonationForm extends LitElement {
18
- constructor() {
19
- super(...arguments);
20
- this.amountOptions = defaultDonationAmounts;
21
- this.amountSelectionLayout = EditDonationAmountSelectionLayout.MultiLine;
22
- this.frequencySelectionMode = EditDonationFrequencySelectionMode.Button;
23
- this.creditCardVisible = false;
24
- this.contactFormVisible = false;
25
- this.donationInfoValid = true;
26
- this.paypalButtonNeedsRender = true;
27
- this.flowHandlersConfigured = false;
28
- this.flowHandlerListenersBound = false;
29
- }
30
- /** @inheritdoc */
31
- render() {
32
- var _a;
33
- return html `
34
- <donation-form-header
35
- .amountOptions=${this.amountOptions}
36
- .amountSelectionLayout=${this.amountSelectionLayout}
37
- .frequencySelectionMode=${this.frequencySelectionMode}
38
- @donationInfoChanged=${this.donationInfoChanged}
39
- @editDonationError=${this.editDonationError}
40
- >
41
- </donation-form-header>
42
-
43
- <donation-form-section
44
- .badgeMode=${DonationFormSectionBadgeMode.HideBadgeLeaveSpacing}
45
- id="total-amount-section"
46
- >
47
- <donation-form-total-amount .donationInfo=${this.donationInfo}>
48
- </donation-form-total-amount>
49
- </donation-form-section>
50
-
51
- <donation-form-section
52
- .sectionBadge=${this.paymentSelectorNumberingStart}
53
- headline="Choose a payment method"
54
- >
55
- <payment-selector
56
- .paymentProviders=${(_a = this.braintreeManager) === null || _a === void 0 ? void 0 : _a.paymentProviders}
57
- @firstUpdated=${this.paymentSelectorFirstUpdated}
58
- @creditCardSelected=${this.creditCardSelected}
59
- @venmoSelected=${this.venmoSelected}
60
- @applePaySelected=${this.applePaySelected}
61
- @googlePaySelected=${this.googlePaySelected}
62
- @paypalBlockerSelected=${this.paypalBlockerSelected}
63
- tabindex="0"
64
- >
65
- <slot name="paypal-button" slot="paypal-button"></slot>
66
- </payment-selector>
67
- </donation-form-section>
68
-
69
- <div class="contact-form-section ${this.contactFormVisible ? '' : 'hidden'}">
70
- ${this.contactFormSectionTemplate}
71
- </div>
72
- <slot name="recaptcha"></slot>
73
- `;
74
- }
75
- showConfirmationModalDev(options) {
76
- var _a;
77
- return __awaiter(this, void 0, void 0, function* () {
78
- (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.showConfirmationStepModal(options);
79
- });
80
- }
81
- /**
82
- * This is a developer convenience method that allows us to show the upsell modal without going
83
- * through the purchasing flow. If it's showing the PayPal button, it will trigger
84
- * the PayPal button render
85
- *
86
- * @param {{
87
- * oneTimeAmount: number;
88
- * ctaMode?: UpsellModalCTAMode;
89
- * yesSelected?: (amount: number) => void;
90
- * noSelected?: () => void;
91
- * amountChanged?: (amount: number) => void;
92
- * userClosedModalCallback?: () => void;
93
- * }} options
94
- * @returns {Promise<void>}
95
- * @memberof DonationForm
96
- */
97
- showUpsellModalDev(options) {
98
- var _a, _b;
99
- return __awaiter(this, void 0, void 0, function* () {
100
- (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.showUpsellModal(options);
101
- if (options.ctaMode === UpsellModalCTAMode.PayPalUpsellSlot) {
102
- const handler = yield ((_b = this.braintreeManager) === null || _b === void 0 ? void 0 : _b.paymentProviders.paypalHandler.get());
103
- const donationInfo = new DonationPaymentInfo({
104
- amount: options.oneTimeAmount,
105
- donationType: DonationType.OneTime,
106
- coverFees: false,
107
- });
108
- handler === null || handler === void 0 ? void 0 : handler.renderPayPalButton({
109
- selector: '#paypal-upsell-button',
110
- style: {
111
- color: 'blue',
112
- label: 'paypal',
113
- shape: 'rect',
114
- size: 'responsive',
115
- tagline: false,
116
- },
117
- donationInfo: donationInfo,
118
- });
119
- }
120
- });
121
- }
122
- get contactFormSectionTemplate() {
123
- return html `
124
- <donation-form-section
125
- .sectionBadge=${this.paymentSelectorNumberingStart + 1}
126
- headline="Enter payment information"
127
- id="contactFormSection"
128
- >
129
- <slot name="contact-form"></slot>
130
- <div class="credit-card-fields" class="${this.creditCardVisible ? '' : 'hidden'}">
131
- <slot name="braintree-hosted-fields"></slot>
132
- </div>
133
- </donation-form-section>
134
-
135
- <donation-form-section .sectionBadge=${this.paymentSelectorNumberingStart + 2}>
136
- <slot name="recaptcha"></slot>
137
- <button id="donate-button" @click=${this.donateClicked}>
138
- Donate
139
- </button>
140
-
141
- <div class="secure-process-note">
142
- ${lockImg} Your payment will be securely processed
143
- </div>
144
- </donation-form-section>
145
- `;
146
- }
147
- /**
148
- * Where to start the numbering of the payment selector
149
- *
150
- * - If we show the frequency selector in button mode, it becomes section 1, which makes
151
- * the amount selection section 2, and the payment selector section 3.
152
- * - If we show the frequency selector in checkbox mode, it is no longer section 1. The amount
153
- * selector becomes section 1 and the payment selector becomes section 2.
154
- *
155
- * Visually:
156
- *
157
- * Button Mode:
158
- * 1. Frequency selector
159
- * 2. Amount selector
160
- * 3. Payment selector
161
- * 4. Contact info
162
- * 5. Donate button
163
- *
164
- * Checkbox Mode:
165
- * 1. Amount selector (including the monthly checkbox)
166
- * 2. Payment selector <-- changes from 3 to 2
167
- * 3. Contact info <-- changes from 4 to 3
168
- * 4. Donate button <-- changes from 5 to 4
169
- *
170
- * @readonly
171
- * @private
172
- * @type {number}
173
- * @memberof DonationForm
174
- */
175
- get paymentSelectorNumberingStart() {
176
- return this.frequencySelectionMode === EditDonationFrequencySelectionMode.Button ? 3 : 2;
177
- }
178
- editDonationError() {
179
- this.donationInfoValid = false;
180
- }
181
- paymentSelectorFirstUpdated() {
182
- var _a;
183
- if ((_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) {
184
- this.renderPayPalButtonIfNeeded();
185
- }
186
- }
187
- applePaySelected(e) {
188
- var _a, _b;
189
- this.selectedPaymentProvider = PaymentProvider.ApplePay;
190
- this.contactFormVisible = false;
191
- this.creditCardVisible = false;
192
- if (!this.donationInfoValid) {
193
- this.showInvalidDonationInfoAlert();
194
- return;
195
- }
196
- const originalEvent = e.detail.originalEvent;
197
- this.donationInfo && ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.applePayHandler) === null || _b === void 0 ? void 0 : _b.paymentInitiated(this.donationInfo, originalEvent));
198
- this.emitPaymentFlowStartedEvent();
199
- }
200
- googlePaySelected() {
201
- var _a, _b;
202
- this.selectedPaymentProvider = PaymentProvider.GooglePay;
203
- this.contactFormVisible = false;
204
- this.creditCardVisible = false;
205
- if (!this.donationInfoValid) {
206
- this.showInvalidDonationInfoAlert();
207
- }
208
- else {
209
- this.donationInfo && ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.googlePayHandler) === null || _b === void 0 ? void 0 : _b.paymentInitiated(this.donationInfo));
210
- this.emitPaymentFlowStartedEvent();
211
- }
212
- }
213
- creditCardSelected() {
214
- return __awaiter(this, void 0, void 0, function* () {
215
- if (!this.donationInfoValid) {
216
- this.showInvalidDonationInfoAlert();
217
- return;
218
- }
219
- this.selectedPaymentProvider = PaymentProvider.CreditCard;
220
- this.contactFormVisible = true;
221
- this.creditCardVisible = true;
222
- this.focusContactForm();
223
- });
224
- }
225
- venmoSelected() {
226
- return __awaiter(this, void 0, void 0, function* () {
227
- if (!this.donationInfoValid) {
228
- this.showInvalidDonationInfoAlert();
229
- return;
230
- }
231
- this.selectedPaymentProvider = PaymentProvider.Venmo;
232
- this.contactFormVisible = true;
233
- this.creditCardVisible = false;
234
- this.focusContactForm();
235
- });
236
- }
237
- paypalBlockerSelected() {
238
- this.contactFormVisible = false;
239
- this.creditCardVisible = false;
240
- this.showInvalidDonationInfoAlert();
241
- }
242
- focusContactForm() {
243
- var _a;
244
- return __awaiter(this, void 0, void 0, function* () {
245
- yield this.updateComplete;
246
- if (this.contactFormSection) {
247
- (_a = this.contactForm) === null || _a === void 0 ? void 0 : _a.focus();
248
- }
249
- });
250
- }
251
- donateClicked() {
252
- return __awaiter(this, void 0, void 0, function* () {
253
- if (!this.contactForm) {
254
- alert('Please enter contact info.');
255
- return;
256
- }
257
- if (!this.donationInfoValid || !this.donationInfo) {
258
- this.showInvalidDonationInfoAlert();
259
- return;
260
- }
261
- const contactInfo = this.contactForm.donorContactInfo;
262
- switch (this.selectedPaymentProvider) {
263
- case PaymentProvider.CreditCard:
264
- this.handleCreditCardDonationFlow(contactInfo, this.donationInfo);
265
- break;
266
- case PaymentProvider.Venmo:
267
- this.handleVenmoDonationFlow(contactInfo, this.donationInfo);
268
- break;
269
- }
270
- });
271
- }
272
- handleCreditCardDonationFlow(contactInfo, donationInfo) {
273
- var _a, _b, _c;
274
- return __awaiter(this, void 0, void 0, function* () {
275
- const creditCardFlowHandler = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.creditCardHandler;
276
- const creditCardHandler = yield ((_b = this.braintreeManager) === null || _b === void 0 ? void 0 : _b.paymentProviders.creditCardHandler.get());
277
- creditCardHandler === null || creditCardHandler === void 0 ? void 0 : creditCardHandler.hideErrorMessage();
278
- const valid = (_c = this.contactForm) === null || _c === void 0 ? void 0 : _c.reportValidity();
279
- const hostedFieldsResponse = yield (creditCardFlowHandler === null || creditCardFlowHandler === void 0 ? void 0 : creditCardFlowHandler.tokenizeFields());
280
- if (!valid || hostedFieldsResponse === undefined) {
281
- return;
282
- }
283
- this.emitPaymentFlowStartedEvent();
284
- creditCardFlowHandler === null || creditCardFlowHandler === void 0 ? void 0 : creditCardFlowHandler.paymentInitiated(hostedFieldsResponse, donationInfo, contactInfo);
285
- });
286
- }
287
- handleVenmoDonationFlow(contactInfo, donationInfo) {
288
- var _a, _b, _c;
289
- return __awaiter(this, void 0, void 0, function* () {
290
- const valid = (_a = this.contactForm) === null || _a === void 0 ? void 0 : _a.reportValidity();
291
- if (!valid) {
292
- return;
293
- }
294
- (_c = (_b = this.paymentFlowHandlers) === null || _b === void 0 ? void 0 : _b.venmoHandler) === null || _c === void 0 ? void 0 : _c.paymentInitiated(contactInfo, donationInfo);
295
- });
296
- }
297
- emitPaymentFlowStartedEvent() {
298
- if (!this.selectedPaymentProvider) {
299
- return;
300
- }
301
- const event = new CustomEvent('paymentFlowStarted', {
302
- detail: { paymentProvider: this.selectedPaymentProvider },
303
- });
304
- this.dispatchEvent(event);
305
- }
306
- emitPaymentFlowConfirmedEvent() {
307
- if (!this.selectedPaymentProvider) {
308
- return;
309
- }
310
- const event = new CustomEvent('paymentFlowConfirmed', {
311
- detail: { paymentProvider: this.selectedPaymentProvider },
312
- });
313
- this.dispatchEvent(event);
314
- }
315
- emitPaymentFlowCancelledEvent() {
316
- if (!this.selectedPaymentProvider) {
317
- return;
318
- }
319
- const event = new CustomEvent('paymentFlowCancelled', {
320
- detail: { paymentProvider: this.selectedPaymentProvider },
321
- });
322
- this.dispatchEvent(event);
323
- }
324
- emitPaymentFlowErrorEvent(error) {
325
- if (!this.selectedPaymentProvider) {
326
- return;
327
- }
328
- const event = new CustomEvent('paymentFlowError', {
329
- detail: { paymentProvider: this.selectedPaymentProvider, error: error },
330
- });
331
- this.dispatchEvent(event);
332
- }
333
- showInvalidDonationInfoAlert() {
334
- alert('Please enter a valid donation amount.');
335
- }
336
- renderPayPalButtonIfNeeded() {
337
- var _a, _b;
338
- return __awaiter(this, void 0, void 0, function* () {
339
- if (!this.paypalButtonNeedsRender) {
340
- return;
341
- }
342
- this.paypalButtonNeedsRender = false;
343
- this.donationInfo &&
344
- (yield ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.renderPayPalButton(this.donationInfo)));
345
- this.paymentSelector.showPaypalButton();
346
- });
347
- }
348
- updated(changedProperties) {
349
- var _a, _b;
350
- if (changedProperties.has('donationInfo') && this.donationInfo) {
351
- // The PayPal button has a standalone datasource since we don't initiate the payment
352
- // through code so it has to have the donation info ready when the user taps the button.
353
- (_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.updateDonationInfo(this.donationInfo);
354
- this.donationFormHeader.donationInfo = this.donationInfo;
355
- }
356
- if ((changedProperties.has('paymentFlowHandlers') || changedProperties.has('donationInfo')) &&
357
- this.donationInfo &&
358
- this.paymentFlowHandlers) {
359
- this.setupFlowHandlers();
360
- }
361
- if (changedProperties.has('donationInfoValid')) {
362
- this.paymentSelector.donationInfoValid = this.donationInfoValid;
363
- }
364
- if (changedProperties.has('selectedPaymentProvider')) {
365
- const event = new CustomEvent('paymentProviderSelected', {
366
- detail: {
367
- paymentProvider: this.selectedPaymentProvider,
368
- previousPaymentProvider: changedProperties.get('selectedPaymentProvider'),
369
- },
370
- });
371
- this.dispatchEvent(event);
372
- }
373
- }
374
- setupFlowHandlers() {
375
- var _a, _b;
376
- if (this.flowHandlersConfigured) {
377
- return;
378
- }
379
- this.flowHandlersConfigured = true;
380
- this.bindFlowListenerEvents();
381
- this.renderPayPalButtonIfNeeded();
382
- this.donationInfo && ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.updateDonationInfo(this.donationInfo));
383
- }
384
- bindFlowListenerEvents() {
385
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
386
- if (this.flowHandlerListenersBound) {
387
- return;
388
- }
389
- this.flowHandlerListenersBound = true;
390
- (_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.on('payPalPaymentStarted', () => {
391
- this.selectedPaymentProvider = PaymentProvider.PayPal;
392
- this.emitPaymentFlowStartedEvent();
393
- });
394
- (_d = (_c = this.paymentFlowHandlers) === null || _c === void 0 ? void 0 : _c.paypalHandler) === null || _d === void 0 ? void 0 : _d.on('payPalPaymentConfirmed', () => {
395
- this.selectedPaymentProvider = PaymentProvider.PayPal;
396
- this.emitPaymentFlowConfirmedEvent();
397
- });
398
- (_f = (_e = this.paymentFlowHandlers) === null || _e === void 0 ? void 0 : _e.paypalHandler) === null || _f === void 0 ? void 0 : _f.on('payPalPaymentCancelled', () => {
399
- this.selectedPaymentProvider = PaymentProvider.PayPal;
400
- this.emitPaymentFlowCancelledEvent();
401
- });
402
- (_h = (_g = this.paymentFlowHandlers) === null || _g === void 0 ? void 0 : _g.paypalHandler) === null || _h === void 0 ? void 0 : _h.on('payPalPaymentError', (datasource, error) => {
403
- this.selectedPaymentProvider = PaymentProvider.PayPal;
404
- this.emitPaymentFlowErrorEvent(error);
405
- });
406
- (_k = (_j = this.paymentFlowHandlers) === null || _j === void 0 ? void 0 : _j.googlePayHandler) === null || _k === void 0 ? void 0 : _k.on('paymentCancelled', () => {
407
- this.selectedPaymentProvider = PaymentProvider.GooglePay;
408
- this.emitPaymentFlowCancelledEvent();
409
- });
410
- }
411
- donationInfoChanged(e) {
412
- const donationInfo = e.detail.donationInfo;
413
- this.donationInfo = new DonationPaymentInfo({
414
- amount: donationInfo.amount,
415
- donationType: donationInfo.donationType,
416
- coverFees: donationInfo.coverFees,
417
- });
418
- this.donationInfoValid = true;
419
- const event = new CustomEvent('donationInfoChanged', { detail: { donationInfo } });
420
- this.dispatchEvent(event);
421
- }
422
- /** @inheritdoc */
423
- static get styles() {
424
- const donateButtonFontSize = css `var(--donateButtonFontSize, 2.6rem)`;
425
- const donateButtonHeight = css `var(--donateButtonHeight, 4rem)`;
426
- const donateButtonColor = css `var(--donateButtonColor, rgba(49, 164, 129, 1))`;
427
- const donateButtonTextColor = css `var(--donateButtonTextColor, #fff)`;
428
- const donateButtonHoverColor = css `var(--donateButtonHoverColor, rgba(39, 131, 103, 1))`;
429
- const totalAmountTopMargin = css `var(--donateTotalAmountTopMargin, 1.5rem)`;
430
- const totalAmountBottomMargin = css `var(--donateTotalAmountBottomMargin, 1.2rem)`;
431
- return css `
432
- h1 {
433
- margin: 0;
434
- padding: 0;
435
- }
436
-
437
- .hidden {
438
- display: none;
439
- }
440
-
441
- .secure-process-note {
442
- margin-top: 0.5em;
443
- font-size: 0.75em;
444
- text-align: center;
445
- }
446
-
447
- .secure-process-note svg {
448
- width: 1.2rem;
449
- height: 1.5rem;
450
- vertical-align: bottom;
451
- }
452
-
453
- #donate-button {
454
- width: 100%;
455
- appearance: none;
456
- -webkit-appearance: none;
457
- font-size: ${donateButtonFontSize};
458
- font-weight: bold;
459
- text-align: center;
460
- color: ${donateButtonTextColor};
461
- cursor: pointer;
462
- border: none;
463
- border-radius: 5px;
464
- background-color: ${donateButtonColor};
465
- padding-top: 0.5rem;
466
- padding-bottom: 0.5rem;
467
- height: ${donateButtonHeight};
468
- }
469
-
470
- #donate-button:hover {
471
- background-color: ${donateButtonHoverColor};
472
- }
473
-
474
- #total-amount-section {
475
- display: block;
476
- margin-top: ${totalAmountTopMargin};
477
- margin-bottom: ${totalAmountBottomMargin};
478
- }
479
- `;
480
- }
481
- };
482
- __decorate([
483
- property({ type: Object })
484
- ], DonationForm.prototype, "braintreeManager", void 0);
485
- __decorate([
486
- property({ type: Object })
487
- ], DonationForm.prototype, "paymentFlowHandlers", void 0);
488
- __decorate([
489
- property({ type: Object })
490
- ], DonationForm.prototype, "donationRequest", void 0);
491
- __decorate([
492
- property({ type: Object })
493
- ], DonationForm.prototype, "donationInfo", void 0);
494
- __decorate([
495
- property({ type: Object })
496
- ], DonationForm.prototype, "contactForm", void 0);
497
- __decorate([
498
- property({ type: Array })
499
- ], DonationForm.prototype, "amountOptions", void 0);
500
- __decorate([
501
- property({ type: String })
502
- ], DonationForm.prototype, "amountSelectionLayout", void 0);
503
- __decorate([
504
- property({ type: String })
505
- ], DonationForm.prototype, "frequencySelectionMode", void 0);
506
- __decorate([
507
- property({ type: Boolean })
508
- ], DonationForm.prototype, "creditCardVisible", void 0);
509
- __decorate([
510
- property({ type: Boolean })
511
- ], DonationForm.prototype, "contactFormVisible", void 0);
512
- __decorate([
513
- property({ type: Boolean })
514
- ], DonationForm.prototype, "donationInfoValid", void 0);
515
- __decorate([
516
- property({ type: String })
517
- ], DonationForm.prototype, "selectedPaymentProvider", void 0);
518
- __decorate([
519
- query('#contactFormSection')
520
- ], DonationForm.prototype, "contactFormSection", void 0);
521
- __decorate([
522
- query('donation-form-header')
523
- ], DonationForm.prototype, "donationFormHeader", void 0);
524
- __decorate([
525
- query('payment-selector')
526
- ], DonationForm.prototype, "paymentSelector", void 0);
527
- DonationForm = __decorate([
528
- customElement('donation-form')
529
- ], DonationForm);
530
- export { DonationForm };
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
+ import lockImg from '@internetarchive/icon-lock';
5
+ // we have to import the registered component independently from the definition below
6
+ // because inside each of these files, we're registering the custom element inside
7
+ // these files and by simply importing the class name, you lose that behavior
8
+ // See https://github.com/microsoft/TypeScript/issues/9191 for more discussion
9
+ import './form-elements/payment-selector';
10
+ import './form-elements/header/donation-form-header';
11
+ import { DonationPaymentInfo, PaymentProvider, DonationType, defaultDonationAmounts, } from '@internetarchive/donation-form-data-models';
12
+ import { EditDonationAmountSelectionLayout, EditDonationFrequencySelectionMode, } from '@internetarchive/donation-form-edit-donation';
13
+ import '@internetarchive/donation-form-section';
14
+ import { DonationFormSectionBadgeMode, } from '@internetarchive/donation-form-section';
15
+ import { UpsellModalCTAMode } from './modals/upsell-modal-content';
16
+ import './form-elements/total-amount';
17
+ let DonationForm = class DonationForm extends LitElement {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.amountOptions = defaultDonationAmounts;
21
+ this.amountSelectionLayout = EditDonationAmountSelectionLayout.MultiLine;
22
+ this.frequencySelectionMode = EditDonationFrequencySelectionMode.Button;
23
+ this.creditCardVisible = false;
24
+ this.contactFormVisible = false;
25
+ this.donationInfoValid = true;
26
+ this.paypalButtonNeedsRender = true;
27
+ this.flowHandlersConfigured = false;
28
+ this.flowHandlerListenersBound = false;
29
+ }
30
+ /** @inheritdoc */
31
+ render() {
32
+ var _a;
33
+ return html `
34
+ <donation-form-header
35
+ .amountOptions=${this.amountOptions}
36
+ .amountSelectionLayout=${this.amountSelectionLayout}
37
+ .frequencySelectionMode=${this.frequencySelectionMode}
38
+ @donationInfoChanged=${this.donationInfoChanged}
39
+ @editDonationError=${this.editDonationError}
40
+ >
41
+ </donation-form-header>
42
+
43
+ <donation-form-section
44
+ .badgeMode=${DonationFormSectionBadgeMode.HideBadgeLeaveSpacing}
45
+ id="total-amount-section"
46
+ >
47
+ <donation-form-total-amount .donationInfo=${this.donationInfo}>
48
+ </donation-form-total-amount>
49
+ </donation-form-section>
50
+
51
+ <donation-form-section
52
+ .sectionBadge=${this.paymentSelectorNumberingStart}
53
+ headline="Choose a payment method"
54
+ >
55
+ <payment-selector
56
+ .paymentProviders=${(_a = this.braintreeManager) === null || _a === void 0 ? void 0 : _a.paymentProviders}
57
+ @firstUpdated=${this.paymentSelectorFirstUpdated}
58
+ @creditCardSelected=${this.creditCardSelected}
59
+ @venmoSelected=${this.venmoSelected}
60
+ @applePaySelected=${this.applePaySelected}
61
+ @googlePaySelected=${this.googlePaySelected}
62
+ @paypalBlockerSelected=${this.paypalBlockerSelected}
63
+ tabindex="0"
64
+ >
65
+ <slot name="paypal-button" slot="paypal-button"></slot>
66
+ </payment-selector>
67
+ </donation-form-section>
68
+
69
+ <div class="contact-form-section ${this.contactFormVisible ? '' : 'hidden'}">
70
+ ${this.contactFormSectionTemplate}
71
+ </div>
72
+ <slot name="recaptcha"></slot>
73
+ `;
74
+ }
75
+ showConfirmationModalDev(options) {
76
+ var _a;
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.showConfirmationStepModal(options);
79
+ });
80
+ }
81
+ /**
82
+ * This is a developer convenience method that allows us to show the upsell modal without going
83
+ * through the purchasing flow. If it's showing the PayPal button, it will trigger
84
+ * the PayPal button render
85
+ *
86
+ * @param {{
87
+ * oneTimeAmount: number;
88
+ * ctaMode?: UpsellModalCTAMode;
89
+ * yesSelected?: (amount: number) => void;
90
+ * noSelected?: () => void;
91
+ * amountChanged?: (amount: number) => void;
92
+ * userClosedModalCallback?: () => void;
93
+ * }} options
94
+ * @returns {Promise<void>}
95
+ * @memberof DonationForm
96
+ */
97
+ showUpsellModalDev(options) {
98
+ var _a, _b;
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.showUpsellModal(options);
101
+ if (options.ctaMode === UpsellModalCTAMode.PayPalUpsellSlot) {
102
+ const handler = yield ((_b = this.braintreeManager) === null || _b === void 0 ? void 0 : _b.paymentProviders.paypalHandler.get());
103
+ const donationInfo = new DonationPaymentInfo({
104
+ amount: options.oneTimeAmount,
105
+ donationType: DonationType.OneTime,
106
+ coverFees: false,
107
+ });
108
+ handler === null || handler === void 0 ? void 0 : handler.renderPayPalButton({
109
+ selector: '#paypal-upsell-button',
110
+ style: {
111
+ color: 'blue',
112
+ label: 'paypal',
113
+ shape: 'rect',
114
+ size: 'responsive',
115
+ tagline: false,
116
+ },
117
+ donationInfo: donationInfo,
118
+ });
119
+ }
120
+ });
121
+ }
122
+ get contactFormSectionTemplate() {
123
+ return html `
124
+ <donation-form-section
125
+ .sectionBadge=${this.paymentSelectorNumberingStart + 1}
126
+ headline="Enter payment information"
127
+ id="contactFormSection"
128
+ >
129
+ <slot name="contact-form"></slot>
130
+ <div class="credit-card-fields" class="${this.creditCardVisible ? '' : 'hidden'}">
131
+ <slot name="braintree-hosted-fields"></slot>
132
+ </div>
133
+ </donation-form-section>
134
+
135
+ <donation-form-section .sectionBadge=${this.paymentSelectorNumberingStart + 2}>
136
+ <slot name="recaptcha"></slot>
137
+ <button id="donate-button" @click=${this.donateClicked}>
138
+ Donate
139
+ </button>
140
+
141
+ <div class="secure-process-note">
142
+ ${lockImg} Your payment will be securely processed
143
+ </div>
144
+ </donation-form-section>
145
+ `;
146
+ }
147
+ /**
148
+ * Where to start the numbering of the payment selector
149
+ *
150
+ * - If we show the frequency selector in button mode, it becomes section 1, which makes
151
+ * the amount selection section 2, and the payment selector section 3.
152
+ * - If we show the frequency selector in checkbox mode, it is no longer section 1. The amount
153
+ * selector becomes section 1 and the payment selector becomes section 2.
154
+ *
155
+ * Visually:
156
+ *
157
+ * Button Mode:
158
+ * 1. Frequency selector
159
+ * 2. Amount selector
160
+ * 3. Payment selector
161
+ * 4. Contact info
162
+ * 5. Donate button
163
+ *
164
+ * Checkbox Mode:
165
+ * 1. Amount selector (including the monthly checkbox)
166
+ * 2. Payment selector <-- changes from 3 to 2
167
+ * 3. Contact info <-- changes from 4 to 3
168
+ * 4. Donate button <-- changes from 5 to 4
169
+ *
170
+ * @readonly
171
+ * @private
172
+ * @type {number}
173
+ * @memberof DonationForm
174
+ */
175
+ get paymentSelectorNumberingStart() {
176
+ return this.frequencySelectionMode === EditDonationFrequencySelectionMode.Button ? 3 : 2;
177
+ }
178
+ editDonationError() {
179
+ this.donationInfoValid = false;
180
+ }
181
+ paymentSelectorFirstUpdated() {
182
+ var _a;
183
+ if ((_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) {
184
+ this.renderPayPalButtonIfNeeded();
185
+ }
186
+ }
187
+ applePaySelected(e) {
188
+ var _a, _b;
189
+ this.selectedPaymentProvider = PaymentProvider.ApplePay;
190
+ this.contactFormVisible = false;
191
+ this.creditCardVisible = false;
192
+ if (!this.donationInfoValid) {
193
+ this.showInvalidDonationInfoAlert();
194
+ return;
195
+ }
196
+ const originalEvent = e.detail.originalEvent;
197
+ this.donationInfo && ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.applePayHandler) === null || _b === void 0 ? void 0 : _b.paymentInitiated(this.donationInfo, originalEvent));
198
+ this.emitPaymentFlowStartedEvent();
199
+ }
200
+ googlePaySelected() {
201
+ var _a, _b;
202
+ this.selectedPaymentProvider = PaymentProvider.GooglePay;
203
+ this.contactFormVisible = false;
204
+ this.creditCardVisible = false;
205
+ if (!this.donationInfoValid) {
206
+ this.showInvalidDonationInfoAlert();
207
+ }
208
+ else {
209
+ this.donationInfo && ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.googlePayHandler) === null || _b === void 0 ? void 0 : _b.paymentInitiated(this.donationInfo));
210
+ this.emitPaymentFlowStartedEvent();
211
+ }
212
+ }
213
+ creditCardSelected() {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ if (!this.donationInfoValid) {
216
+ this.showInvalidDonationInfoAlert();
217
+ return;
218
+ }
219
+ this.selectedPaymentProvider = PaymentProvider.CreditCard;
220
+ this.contactFormVisible = true;
221
+ this.creditCardVisible = true;
222
+ this.focusContactForm();
223
+ });
224
+ }
225
+ venmoSelected() {
226
+ return __awaiter(this, void 0, void 0, function* () {
227
+ if (!this.donationInfoValid) {
228
+ this.showInvalidDonationInfoAlert();
229
+ return;
230
+ }
231
+ this.selectedPaymentProvider = PaymentProvider.Venmo;
232
+ this.contactFormVisible = true;
233
+ this.creditCardVisible = false;
234
+ this.focusContactForm();
235
+ });
236
+ }
237
+ paypalBlockerSelected() {
238
+ this.contactFormVisible = false;
239
+ this.creditCardVisible = false;
240
+ this.showInvalidDonationInfoAlert();
241
+ }
242
+ focusContactForm() {
243
+ var _a;
244
+ return __awaiter(this, void 0, void 0, function* () {
245
+ yield this.updateComplete;
246
+ if (this.contactFormSection) {
247
+ (_a = this.contactForm) === null || _a === void 0 ? void 0 : _a.focus();
248
+ }
249
+ });
250
+ }
251
+ donateClicked() {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ if (!this.contactForm) {
254
+ alert('Please enter contact info.');
255
+ return;
256
+ }
257
+ if (!this.donationInfoValid || !this.donationInfo) {
258
+ this.showInvalidDonationInfoAlert();
259
+ return;
260
+ }
261
+ const contactInfo = this.contactForm.donorContactInfo;
262
+ switch (this.selectedPaymentProvider) {
263
+ case PaymentProvider.CreditCard:
264
+ this.handleCreditCardDonationFlow(contactInfo, this.donationInfo);
265
+ break;
266
+ case PaymentProvider.Venmo:
267
+ this.handleVenmoDonationFlow(contactInfo, this.donationInfo);
268
+ break;
269
+ }
270
+ });
271
+ }
272
+ handleCreditCardDonationFlow(contactInfo, donationInfo) {
273
+ var _a, _b, _c;
274
+ return __awaiter(this, void 0, void 0, function* () {
275
+ const creditCardFlowHandler = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.creditCardHandler;
276
+ const creditCardHandler = yield ((_b = this.braintreeManager) === null || _b === void 0 ? void 0 : _b.paymentProviders.creditCardHandler.get());
277
+ creditCardHandler === null || creditCardHandler === void 0 ? void 0 : creditCardHandler.hideErrorMessage();
278
+ const valid = (_c = this.contactForm) === null || _c === void 0 ? void 0 : _c.reportValidity();
279
+ const hostedFieldsResponse = yield (creditCardFlowHandler === null || creditCardFlowHandler === void 0 ? void 0 : creditCardFlowHandler.tokenizeFields());
280
+ if (!valid || hostedFieldsResponse === undefined) {
281
+ return;
282
+ }
283
+ this.emitPaymentFlowStartedEvent();
284
+ creditCardFlowHandler === null || creditCardFlowHandler === void 0 ? void 0 : creditCardFlowHandler.paymentInitiated(hostedFieldsResponse, donationInfo, contactInfo);
285
+ });
286
+ }
287
+ handleVenmoDonationFlow(contactInfo, donationInfo) {
288
+ var _a, _b, _c;
289
+ return __awaiter(this, void 0, void 0, function* () {
290
+ const valid = (_a = this.contactForm) === null || _a === void 0 ? void 0 : _a.reportValidity();
291
+ if (!valid) {
292
+ return;
293
+ }
294
+ (_c = (_b = this.paymentFlowHandlers) === null || _b === void 0 ? void 0 : _b.venmoHandler) === null || _c === void 0 ? void 0 : _c.paymentInitiated(contactInfo, donationInfo);
295
+ });
296
+ }
297
+ emitPaymentFlowStartedEvent() {
298
+ if (!this.selectedPaymentProvider) {
299
+ return;
300
+ }
301
+ const event = new CustomEvent('paymentFlowStarted', {
302
+ detail: { paymentProvider: this.selectedPaymentProvider },
303
+ });
304
+ this.dispatchEvent(event);
305
+ }
306
+ emitPaymentFlowConfirmedEvent() {
307
+ if (!this.selectedPaymentProvider) {
308
+ return;
309
+ }
310
+ const event = new CustomEvent('paymentFlowConfirmed', {
311
+ detail: { paymentProvider: this.selectedPaymentProvider },
312
+ });
313
+ this.dispatchEvent(event);
314
+ }
315
+ emitPaymentFlowCancelledEvent() {
316
+ if (!this.selectedPaymentProvider) {
317
+ return;
318
+ }
319
+ const event = new CustomEvent('paymentFlowCancelled', {
320
+ detail: { paymentProvider: this.selectedPaymentProvider },
321
+ });
322
+ this.dispatchEvent(event);
323
+ }
324
+ emitPaymentFlowErrorEvent(error) {
325
+ if (!this.selectedPaymentProvider) {
326
+ return;
327
+ }
328
+ const event = new CustomEvent('paymentFlowError', {
329
+ detail: { paymentProvider: this.selectedPaymentProvider, error: error },
330
+ });
331
+ this.dispatchEvent(event);
332
+ }
333
+ showInvalidDonationInfoAlert() {
334
+ alert('Please enter a valid donation amount.');
335
+ }
336
+ renderPayPalButtonIfNeeded() {
337
+ var _a, _b;
338
+ return __awaiter(this, void 0, void 0, function* () {
339
+ if (!this.paypalButtonNeedsRender) {
340
+ return;
341
+ }
342
+ this.paypalButtonNeedsRender = false;
343
+ this.donationInfo &&
344
+ (yield ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.renderPayPalButton(this.donationInfo)));
345
+ this.paymentSelector.showPaypalButton();
346
+ });
347
+ }
348
+ updated(changedProperties) {
349
+ var _a, _b;
350
+ if (changedProperties.has('donationInfo') && this.donationInfo) {
351
+ // The PayPal button has a standalone datasource since we don't initiate the payment
352
+ // through code so it has to have the donation info ready when the user taps the button.
353
+ (_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.updateDonationInfo(this.donationInfo);
354
+ this.donationFormHeader.donationInfo = this.donationInfo;
355
+ }
356
+ if ((changedProperties.has('paymentFlowHandlers') || changedProperties.has('donationInfo')) &&
357
+ this.donationInfo &&
358
+ this.paymentFlowHandlers) {
359
+ this.setupFlowHandlers();
360
+ }
361
+ if (changedProperties.has('donationInfoValid')) {
362
+ this.paymentSelector.donationInfoValid = this.donationInfoValid;
363
+ }
364
+ if (changedProperties.has('selectedPaymentProvider')) {
365
+ const event = new CustomEvent('paymentProviderSelected', {
366
+ detail: {
367
+ paymentProvider: this.selectedPaymentProvider,
368
+ previousPaymentProvider: changedProperties.get('selectedPaymentProvider'),
369
+ },
370
+ });
371
+ this.dispatchEvent(event);
372
+ }
373
+ }
374
+ setupFlowHandlers() {
375
+ var _a, _b;
376
+ if (this.flowHandlersConfigured) {
377
+ return;
378
+ }
379
+ this.flowHandlersConfigured = true;
380
+ this.bindFlowListenerEvents();
381
+ this.renderPayPalButtonIfNeeded();
382
+ this.donationInfo && ((_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.updateDonationInfo(this.donationInfo));
383
+ }
384
+ bindFlowListenerEvents() {
385
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
386
+ if (this.flowHandlerListenersBound) {
387
+ return;
388
+ }
389
+ this.flowHandlerListenersBound = true;
390
+ (_b = (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.paypalHandler) === null || _b === void 0 ? void 0 : _b.on('payPalPaymentStarted', () => {
391
+ this.selectedPaymentProvider = PaymentProvider.PayPal;
392
+ this.emitPaymentFlowStartedEvent();
393
+ });
394
+ (_d = (_c = this.paymentFlowHandlers) === null || _c === void 0 ? void 0 : _c.paypalHandler) === null || _d === void 0 ? void 0 : _d.on('payPalPaymentConfirmed', () => {
395
+ this.selectedPaymentProvider = PaymentProvider.PayPal;
396
+ this.emitPaymentFlowConfirmedEvent();
397
+ });
398
+ (_f = (_e = this.paymentFlowHandlers) === null || _e === void 0 ? void 0 : _e.paypalHandler) === null || _f === void 0 ? void 0 : _f.on('payPalPaymentCancelled', () => {
399
+ this.selectedPaymentProvider = PaymentProvider.PayPal;
400
+ this.emitPaymentFlowCancelledEvent();
401
+ });
402
+ (_h = (_g = this.paymentFlowHandlers) === null || _g === void 0 ? void 0 : _g.paypalHandler) === null || _h === void 0 ? void 0 : _h.on('payPalPaymentError', (datasource, error) => {
403
+ this.selectedPaymentProvider = PaymentProvider.PayPal;
404
+ this.emitPaymentFlowErrorEvent(error);
405
+ });
406
+ (_k = (_j = this.paymentFlowHandlers) === null || _j === void 0 ? void 0 : _j.googlePayHandler) === null || _k === void 0 ? void 0 : _k.on('paymentCancelled', () => {
407
+ this.selectedPaymentProvider = PaymentProvider.GooglePay;
408
+ this.emitPaymentFlowCancelledEvent();
409
+ });
410
+ }
411
+ donationInfoChanged(e) {
412
+ const donationInfo = e.detail.donationInfo;
413
+ this.donationInfo = new DonationPaymentInfo({
414
+ amount: donationInfo.amount,
415
+ donationType: donationInfo.donationType,
416
+ coverFees: donationInfo.coverFees,
417
+ });
418
+ this.donationInfoValid = true;
419
+ const event = new CustomEvent('donationInfoChanged', { detail: { donationInfo } });
420
+ this.dispatchEvent(event);
421
+ }
422
+ /** @inheritdoc */
423
+ static get styles() {
424
+ const donateButtonFontSize = css `var(--donateButtonFontSize, 2.6rem)`;
425
+ const donateButtonHeight = css `var(--donateButtonHeight, 4rem)`;
426
+ const donateButtonColor = css `var(--donateButtonColor, rgba(49, 164, 129, 1))`;
427
+ const donateButtonTextColor = css `var(--donateButtonTextColor, #fff)`;
428
+ const donateButtonHoverColor = css `var(--donateButtonHoverColor, rgba(39, 131, 103, 1))`;
429
+ const totalAmountTopMargin = css `var(--donateTotalAmountTopMargin, 1.5rem)`;
430
+ const totalAmountBottomMargin = css `var(--donateTotalAmountBottomMargin, 1.2rem)`;
431
+ return css `
432
+ h1 {
433
+ margin: 0;
434
+ padding: 0;
435
+ }
436
+
437
+ .hidden {
438
+ display: none;
439
+ }
440
+
441
+ .secure-process-note {
442
+ margin-top: 0.5em;
443
+ font-size: 0.75em;
444
+ text-align: center;
445
+ }
446
+
447
+ .secure-process-note svg {
448
+ width: 1.2rem;
449
+ height: 1.5rem;
450
+ vertical-align: bottom;
451
+ }
452
+
453
+ #donate-button {
454
+ width: 100%;
455
+ appearance: none;
456
+ -webkit-appearance: none;
457
+ font-size: ${donateButtonFontSize};
458
+ font-weight: bold;
459
+ text-align: center;
460
+ color: ${donateButtonTextColor};
461
+ cursor: pointer;
462
+ border: none;
463
+ border-radius: 5px;
464
+ background-color: ${donateButtonColor};
465
+ padding-top: 0.5rem;
466
+ padding-bottom: 0.5rem;
467
+ height: ${donateButtonHeight};
468
+ }
469
+
470
+ #donate-button:hover {
471
+ background-color: ${donateButtonHoverColor};
472
+ }
473
+
474
+ #total-amount-section {
475
+ display: block;
476
+ margin-top: ${totalAmountTopMargin};
477
+ margin-bottom: ${totalAmountBottomMargin};
478
+ }
479
+ `;
480
+ }
481
+ };
482
+ __decorate([
483
+ property({ type: Object })
484
+ ], DonationForm.prototype, "braintreeManager", void 0);
485
+ __decorate([
486
+ property({ type: Object })
487
+ ], DonationForm.prototype, "paymentFlowHandlers", void 0);
488
+ __decorate([
489
+ property({ type: Object })
490
+ ], DonationForm.prototype, "donationRequest", void 0);
491
+ __decorate([
492
+ property({ type: Object })
493
+ ], DonationForm.prototype, "donationInfo", void 0);
494
+ __decorate([
495
+ property({ type: Object })
496
+ ], DonationForm.prototype, "contactForm", void 0);
497
+ __decorate([
498
+ property({ type: Array })
499
+ ], DonationForm.prototype, "amountOptions", void 0);
500
+ __decorate([
501
+ property({ type: String })
502
+ ], DonationForm.prototype, "amountSelectionLayout", void 0);
503
+ __decorate([
504
+ property({ type: String })
505
+ ], DonationForm.prototype, "frequencySelectionMode", void 0);
506
+ __decorate([
507
+ property({ type: Boolean })
508
+ ], DonationForm.prototype, "creditCardVisible", void 0);
509
+ __decorate([
510
+ property({ type: Boolean })
511
+ ], DonationForm.prototype, "contactFormVisible", void 0);
512
+ __decorate([
513
+ property({ type: Boolean })
514
+ ], DonationForm.prototype, "donationInfoValid", void 0);
515
+ __decorate([
516
+ property({ type: String })
517
+ ], DonationForm.prototype, "selectedPaymentProvider", void 0);
518
+ __decorate([
519
+ query('#contactFormSection')
520
+ ], DonationForm.prototype, "contactFormSection", void 0);
521
+ __decorate([
522
+ query('donation-form-header')
523
+ ], DonationForm.prototype, "donationFormHeader", void 0);
524
+ __decorate([
525
+ query('payment-selector')
526
+ ], DonationForm.prototype, "paymentSelector", void 0);
527
+ DonationForm = __decorate([
528
+ customElement('donation-form')
529
+ ], DonationForm);
530
+ export { DonationForm };
531
531
  //# sourceMappingURL=donation-form.js.map