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

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-braintree-manager.d.ts +45 -45
  166. package/dist/test/mocks/mock-braintree-manager.js +71 -71
  167. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  168. package/dist/test/mocks/mock-donation-info.d.ts +4 -4
  169. package/dist/test/mocks/mock-donation-info.js +10 -10
  170. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  171. package/dist/test/mocks/mock-endpoint-manager.d.ts +12 -12
  172. package/dist/test/mocks/mock-endpoint-manager.js +19 -19
  173. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  174. package/dist/test/mocks/mock-hosted-fields-config.d.ts +4 -4
  175. package/dist/test/mocks/mock-hosted-fields-config.js +37 -37
  176. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  177. package/dist/test/mocks/mock-hosted-fields-container.d.ts +13 -13
  178. package/dist/test/mocks/mock-hosted-fields-container.js +27 -27
  179. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  180. package/dist/test/mocks/mock-lazy-loader.d.ts +15 -15
  181. package/dist/test/mocks/mock-lazy-loader.js +20 -20
  182. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  183. package/dist/test/mocks/mock-modal-manager.d.ts +17 -17
  184. package/dist/test/mocks/mock-modal-manager.js +26 -26
  185. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  186. package/dist/test/mocks/mock-payment-clients.d.ts +29 -29
  187. package/dist/test/mocks/mock-payment-clients.js +78 -78
  188. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  189. package/dist/test/mocks/mock-paypal-button-renderer.d.ts +5 -5
  190. package/dist/test/mocks/mock-paypal-button-renderer.js +6 -6
  191. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  192. package/dist/test/mocks/mock-recaptcha-manager.d.ts +7 -7
  193. package/dist/test/mocks/mock-recaptcha-manager.js +14 -14
  194. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  195. package/dist/test/mocks/models/mock-billing-info.d.ts +2 -2
  196. package/dist/test/mocks/models/mock-billing-info.js +9 -9
  197. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  198. package/dist/test/mocks/models/mock-custom-fields.d.ts +2 -2
  199. package/dist/test/mocks/models/mock-custom-fields.js +7 -7
  200. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  201. package/dist/test/mocks/models/mock-customer-info.d.ts +2 -2
  202. package/dist/test/mocks/models/mock-customer-info.js +6 -6
  203. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  204. package/dist/test/mocks/models/mock-donation-request.d.ts +2 -2
  205. package/dist/test/mocks/models/mock-donation-request.js +18 -18
  206. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  207. package/dist/test/mocks/models/mock-success-response.d.ts +2 -2
  208. package/dist/test/mocks/models/mock-success-response.js +14 -14
  209. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  210. package/dist/test/mocks/payment-clients/mock-applepay-client.d.ts +21 -21
  211. package/dist/test/mocks/payment-clients/mock-applepay-client.js +72 -72
  212. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  213. package/dist/test/mocks/payment-clients/mock-applepay-payment.d.ts +6 -6
  214. package/dist/test/mocks/payment-clients/mock-applepay-payment.js +42 -42
  215. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  216. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.d.ts +22 -22
  217. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js +35 -35
  218. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  219. package/dist/test/mocks/payment-clients/mock-applepay-session.d.ts +30 -30
  220. package/dist/test/mocks/payment-clients/mock-applepay-session.js +52 -52
  221. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  222. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.d.ts +10 -10
  223. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js +12 -12
  224. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  225. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.d.ts +22 -22
  226. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js +34 -34
  227. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  228. package/dist/test/mocks/payment-clients/mock-braintree-client.d.ts +14 -14
  229. package/dist/test/mocks/payment-clients/mock-braintree-client.js +19 -19
  230. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  231. package/dist/test/mocks/payment-clients/mock-data-collector.d.ts +11 -11
  232. package/dist/test/mocks/payment-clients/mock-data-collector.js +17 -17
  233. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  234. package/dist/test/mocks/payment-clients/mock-googlepay-client.d.ts +22 -22
  235. package/dist/test/mocks/payment-clients/mock-googlepay-client.js +42 -42
  236. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  237. package/dist/test/mocks/payment-clients/mock-googlepay-library.d.ts +10 -10
  238. package/dist/test/mocks/payment-clients/mock-googlepay-library.js +22 -22
  239. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  240. package/dist/test/mocks/payment-clients/mock-grecaptcha.d.ts +23 -23
  241. package/dist/test/mocks/payment-clients/mock-grecaptcha.js +62 -62
  242. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  243. package/dist/test/mocks/payment-clients/mock-hostedfields-client.d.ts +33 -33
  244. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js +54 -54
  245. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  246. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.d.ts +1 -1
  247. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js +50 -50
  248. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  249. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.d.ts +1 -1
  250. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js +13 -13
  251. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  252. package/dist/test/mocks/payment-clients/mock-paypal-client.d.ts +23 -23
  253. package/dist/test/mocks/payment-clients/mock-paypal-client.js +62 -62
  254. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  255. package/dist/test/mocks/payment-clients/mock-paypal-library.d.ts +4 -4
  256. package/dist/test/mocks/payment-clients/mock-paypal-library.js +9 -9
  257. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  258. package/dist/test/mocks/payment-clients/mock-venmo-client.d.ts +22 -22
  259. package/dist/test/mocks/payment-clients/mock-venmo-client.js +36 -36
  260. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  261. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.d.ts +10 -10
  262. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js +14 -14
  263. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  264. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.d.ts +9 -9
  265. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js +19 -19
  266. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  267. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.d.ts +18 -18
  268. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js +41 -41
  269. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  270. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.d.ts +8 -8
  271. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js +16 -16
  272. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  273. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.d.ts +28 -28
  274. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js +52 -52
  275. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  276. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.d.ts +11 -11
  277. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js +37 -37
  278. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  279. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.d.ts +12 -12
  280. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js +15 -15
  281. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  282. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.d.ts +7 -7
  283. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js +22 -22
  284. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  285. package/dist/test/mocks/payment-providers/mock-payment-providers.d.ts +21 -21
  286. package/dist/test/mocks/payment-providers/mock-payment-providers.js +45 -45
  287. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  288. package/dist/test/tests/braintree-manager.test.d.ts +1 -1
  289. package/dist/test/tests/braintree-manager.test.js +166 -166
  290. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  291. package/dist/test/tests/donation-form-controller.test.d.ts +1 -1
  292. package/dist/test/tests/donation-form-controller.test.js +188 -199
  293. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  294. package/dist/test/tests/donation-form.test.d.ts +1 -1
  295. package/dist/test/tests/donation-form.test.js +109 -109
  296. package/dist/test/tests/donation-form.test.js.map +1 -1
  297. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.d.ts +1 -1
  298. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +216 -216
  299. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  300. package/dist/test/tests/form-elements/donation-summary.test.d.ts +1 -1
  301. package/dist/test/tests/form-elements/donation-summary.test.js +36 -36
  302. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  303. package/dist/test/tests/form-elements/payment-selector.test.d.ts +1 -1
  304. package/dist/test/tests/form-elements/payment-selector.test.js +69 -69
  305. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  306. package/dist/test/tests/modals/error-modal-content.test.d.ts +1 -1
  307. package/dist/test/tests/modals/error-modal-content.test.js +14 -14
  308. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  309. package/dist/test/tests/modals/upsell-modal-content.test.d.ts +1 -1
  310. package/dist/test/tests/modals/upsell-modal-content.test.js +163 -163
  311. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  312. package/dist/test/tests/models/donation-payment-info.test.d.ts +1 -1
  313. package/dist/test/tests/models/donation-payment-info.test.js +74 -74
  314. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  315. package/dist/test/tests/payment-clients.test.d.ts +1 -1
  316. package/dist/test/tests/payment-clients.test.js +130 -130
  317. package/dist/test/tests/payment-clients.test.js.map +1 -1
  318. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.d.ts +1 -1
  319. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js +160 -160
  320. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  321. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.d.ts +1 -1
  322. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js +36 -36
  323. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  324. package/dist/test/tests/payment-providers/applepay.test.d.ts +1 -1
  325. package/dist/test/tests/payment-providers/applepay.test.js +78 -78
  326. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  327. package/dist/test/tests/payment-providers/creditcard.test.d.ts +1 -1
  328. package/dist/test/tests/payment-providers/creditcard.test.js +190 -190
  329. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  330. package/dist/test/tests/payment-providers/googlepay.test.d.ts +1 -1
  331. package/dist/test/tests/payment-providers/googlepay.test.js +48 -48
  332. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  333. package/dist/test/tests/payment-providers/payment-providers.test.d.ts +1 -1
  334. package/dist/test/tests/payment-providers/payment-providers.test.js +38 -38
  335. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  336. package/dist/test/tests/payment-providers/paypal-button-datasource.test.d.ts +1 -1
  337. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js +162 -162
  338. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  339. package/dist/test/tests/payment-providers/paypal.test.d.ts +1 -1
  340. package/dist/test/tests/payment-providers/paypal.test.js +38 -38
  341. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  342. package/dist/test/tests/payment-providers/venmo.test.d.ts +1 -1
  343. package/dist/test/tests/payment-providers/venmo.test.js +77 -77
  344. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  345. package/dist/test/tests/recaptcha-manager.test.d.ts +1 -1
  346. package/dist/test/tests/recaptcha-manager.test.js +70 -70
  347. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  348. package/package.json +101 -101
  349. package/src/@types/analytics-handler/index.d.ts +8 -8
  350. package/src/@types/braintree-web/LICENSE +21 -21
  351. package/src/@types/braintree-web/index.d.ts +93 -93
  352. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  353. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  354. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  355. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  356. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  357. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  358. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  359. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  360. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  361. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  362. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  363. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  364. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  365. package/src/@types/braintree-web/package.json +64 -64
  366. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  367. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  368. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  369. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  370. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  371. package/src/@types/paypal-checkout-components/package.json +58 -58
  372. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  373. package/src/braintree-manager/braintree-manager.ts +283 -283
  374. package/src/braintree-manager/payment-clients.ts +148 -148
  375. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  376. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  377. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  378. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  379. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  380. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +98 -98
  381. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  382. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  383. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  384. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  385. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  386. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  387. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  388. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  389. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  390. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  391. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  392. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  393. package/src/braintree-manager/payment-providers.ts +147 -147
  394. package/src/donation-form-controller.ts +619 -619
  395. package/src/donation-form-error.ts +6 -6
  396. package/src/donation-form.ts +566 -566
  397. package/src/form-elements/badged-input.ts +113 -113
  398. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  399. package/src/form-elements/contact-form/contact-form.ts +427 -427
  400. package/src/form-elements/contact-form/countries.ts +252 -252
  401. package/src/form-elements/header/donation-form-header.ts +100 -100
  402. package/src/form-elements/header/donation-summary.ts +61 -61
  403. package/src/form-elements/payment-selector.ts +293 -293
  404. package/src/form-elements/total-amount.ts +46 -46
  405. package/src/modals/confirm-donation-modal-content.ts +160 -160
  406. package/src/modals/error-modal-content.ts +48 -48
  407. package/src/modals/upsell-modal-content.ts +294 -294
  408. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +450 -450
  409. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +108 -108
  410. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +231 -231
  411. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +113 -113
  412. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +332 -332
  413. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +118 -118
  414. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  415. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  416. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  417. package/src/util/promisedSleep.ts +3 -3
  418. package/dist/test/mocks/mock-analytics-handler.d.ts +0 -8
  419. package/dist/test/mocks/mock-analytics-handler.js +0 -10
  420. package/dist/test/mocks/mock-analytics-handler.js.map +0 -1
@@ -1,563 +1,563 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { LitElement, html } from 'lit';
3
- import { customElement, property, query } from 'lit/decorators.js';
4
- import currency from 'currency.js';
5
- import { LazyLoaderService, } from '@internetarchive/lazy-loader-service';
6
- import { PaymentClients } from './braintree-manager/payment-clients';
7
- import { BraintreeManager } from './braintree-manager/braintree-manager';
8
- import { PaymentFlowHandlers, } from './payment-flow-handlers/payment-flow-handlers';
9
- import { RecaptchaManager } from './recaptcha-manager/recaptcha-manager';
10
- import { HostedFieldConfiguration } from './braintree-manager/payment-providers/credit-card/hosted-field-configuration';
11
- import { HostedFieldContainer, } from './braintree-manager/payment-providers/credit-card/hosted-field-container';
12
- import './form-elements/badged-input';
13
- import './form-elements/contact-form/contact-form';
14
- import creditCardImg from '@internetarchive/icon-credit-card';
15
- import calendarImg from '@internetarchive/icon-calendar';
16
- import lockImg from '@internetarchive/icon-lock';
17
- import { EditDonationAmountSelectionLayout, EditDonationFrequencySelectionMode, } from '@internetarchive/donation-form-edit-donation';
18
- import { DonationPaymentInfo, DonationType, defaultDonationAmounts, defaultSelectedDonationInfo, } from '@internetarchive/donation-form-data-models';
19
- /**
20
- * The DonationFormController orchestrates several of the interactions between
21
- * the various pieces of the donation form like modals, braintree, paypal, and recaptcha
22
- *
23
- * @export
24
- * @class RadioPlayerController
25
- * @extends {LitElement}
26
- */
27
- let DonationFormController = class DonationFormController extends LitElement {
28
- constructor() {
29
- super(...arguments);
30
- this.analyticsCategory = 'DonationForm';
31
- this.amountOptions = defaultDonationAmounts;
32
- this.donationInfo = defaultSelectedDonationInfo;
33
- this.amountSelectionLayout = EditDonationAmountSelectionLayout.MultiLine;
34
- this.frequencySelectionMode = EditDonationFrequencySelectionMode.Button;
35
- this.lazyLoaderService = new LazyLoaderService();
36
- this.recaptchaManagerSetup = false;
37
- }
38
- /** @inheritdoc */
39
- updated(changedProperties) {
40
- var _a, _b, _c;
41
- if (changedProperties.has('referrer') && this.referrer) {
42
- (_a = this.braintreeManager) === null || _a === void 0 ? void 0 : _a.setReferrer(this.referrer);
43
- this.logDonationFlowEvent('referrer', this.referrer);
44
- }
45
- if (changedProperties.has('loggedInUser') && this.loggedInUser) {
46
- (_b = this.braintreeManager) === null || _b === void 0 ? void 0 : _b.setLoggedInUser(this.loggedInUser);
47
- }
48
- if (changedProperties.has('origin') && this.origin) {
49
- (_c = this.braintreeManager) === null || _c === void 0 ? void 0 : _c.setOrigin(this.origin);
50
- this.logDonationFlowEvent('origin', this.origin);
51
- }
52
- if (changedProperties.has('paymentClients') ||
53
- changedProperties.has('braintreeAuthToken') ||
54
- changedProperties.has('endpointManager') ||
55
- changedProperties.has('environment')) {
56
- this.setupBraintreeManager();
57
- this.setupRecaptchaManager();
58
- }
59
- if (changedProperties.has('recaptchaSiteKey')) {
60
- this.setupRecaptchaManager();
61
- }
62
- if (changedProperties.has('braintreeManager') ||
63
- changedProperties.has('recaptchaManager') ||
64
- changedProperties.has('modalManager') ||
65
- changedProperties.has('recaptchaElement')) {
66
- this.setupPaymentFlowHandlers();
67
- }
68
- if ((changedProperties.has('environment') || changedProperties.has('lazyLoaderService')) &&
69
- this.environment) {
70
- this.paymentClients = new PaymentClients(this.lazyLoaderService, this.environment);
71
- }
72
- }
73
- showConfirmationStepDev(options) {
74
- return __awaiter(this, void 0, void 0, function* () {
75
- this.donationForm.showConfirmationModalDev(options);
76
- });
77
- }
78
- showUpsellModalDev(options) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- this.donationForm.showUpsellModalDev(options);
81
- });
82
- }
83
- setupBraintreeManager() {
84
- if (this.braintreeManager === undefined &&
85
- this.braintreeAuthToken &&
86
- this.endpointManager &&
87
- this.paymentClients &&
88
- this.environment) {
89
- this.braintreeManager = new BraintreeManager({
90
- paymentClients: this.paymentClients,
91
- endpointManager: this.endpointManager,
92
- authorizationToken: this.braintreeAuthToken,
93
- venmoProfileId: this.venmoProfileId,
94
- googlePayMerchantId: this.googlePayMerchantId,
95
- hostedFieldConfig: this.hostedFieldConfig,
96
- hostingEnvironment: this.environment,
97
- referrer: this.referrer,
98
- loggedInUser: this.loggedInUser,
99
- origin: this.origin,
100
- });
101
- this.braintreeManager.on('paymentProvidersHostedFieldsRetry', (retryNumber) => {
102
- const event = new CustomEvent('paymentProvidersHostedFieldsRetry', {
103
- detail: { retryNumber },
104
- });
105
- this.dispatchEvent(event);
106
- });
107
- this.braintreeManager.on('paymentProvidersHostedFieldsFailed', (error) => {
108
- const event = new CustomEvent('paymentProvidersHostedFieldsFailed', {
109
- detail: { error },
110
- });
111
- this.dispatchEvent(event);
112
- });
113
- }
114
- }
115
- setupRecaptchaManager() {
116
- return __awaiter(this, void 0, void 0, function* () {
117
- if (!this.recaptchaSiteKey || !this.paymentClients || this.recaptchaManagerSetup) {
118
- return;
119
- }
120
- this.recaptchaManagerSetup = true;
121
- const grecaptchaLibrary = yield this.paymentClients.recaptchaLibrary.get();
122
- this.recaptchaManager = new RecaptchaManager({
123
- grecaptchaLibrary: grecaptchaLibrary,
124
- siteKey: this.recaptchaSiteKey,
125
- });
126
- });
127
- }
128
- /** @inheritdoc */
129
- firstUpdated() {
130
- this.configureFromQueryParams();
131
- this.trackViewedEvent();
132
- }
133
- configureFromQueryParams() {
134
- const urlParams = new URLSearchParams(window.location.search);
135
- let amountOptions = this.amountOptions;
136
- const amountOptionsParam = urlParams.get('dollarAmounts');
137
- if (amountOptionsParam) {
138
- const stripBrackets = amountOptionsParam.slice(1, -1);
139
- const splitValues = stripBrackets.split(',');
140
- const numberArray = splitValues
141
- .map(value => parseFloat(value))
142
- .filter(value => !isNaN(value));
143
- amountOptions = numberArray;
144
- }
145
- let coverFees = this.donationInfo.coverFees;
146
- const coverFeesParam = urlParams.get('coverFees');
147
- if (coverFeesParam) {
148
- coverFees = coverFeesParam === 'true';
149
- }
150
- let frequency = this.donationInfo.donationType;
151
- const frequencyParam = urlParams.get('contrib_type');
152
- if (frequencyParam === 'monthly') {
153
- frequency = DonationType.Monthly;
154
- }
155
- let amount = this.donationInfo.amount;
156
- const amountParam = urlParams.get('amt');
157
- if (amountParam) {
158
- const parsedAmount = currency(amountParam).value;
159
- if (parsedAmount > 0) {
160
- amount = parsedAmount;
161
- }
162
- }
163
- const amountLayoutParam = urlParams.get('amountLayout');
164
- if (amountLayoutParam) {
165
- const amountLayout = amountLayoutParam;
166
- if (Object.values(EditDonationAmountSelectionLayout).includes(amountLayout)) {
167
- this.amountSelectionLayout = amountLayout;
168
- }
169
- }
170
- const frequencyModeParam = urlParams.get('frequencyMode');
171
- if (frequencyModeParam) {
172
- const frequencyMode = frequencyModeParam;
173
- if (Object.values(EditDonationFrequencySelectionMode).includes(frequencyMode)) {
174
- this.frequencySelectionMode = frequencyMode;
175
- }
176
- }
177
- const donationInfo = new DonationPaymentInfo({
178
- donationType: frequency,
179
- amount: amount,
180
- coverFees: coverFees,
181
- });
182
- this.amountOptions = amountOptions;
183
- this.donationInfo = donationInfo;
184
- }
185
- setupPaymentFlowHandlers() {
186
- var _a;
187
- // only set up once
188
- if (this.paymentFlowHandlers) {
189
- return;
190
- }
191
- // verify we have all of the dependencies
192
- if (!this.braintreeManager ||
193
- !this.recaptchaManager ||
194
- !this.modalManager ||
195
- !this.recaptchaElement) {
196
- return;
197
- }
198
- this.paymentFlowHandlers = new PaymentFlowHandlers({
199
- braintreeManager: this.braintreeManager,
200
- modalManager: this.modalManager,
201
- recaptchaManager: this.recaptchaManager,
202
- resources: {
203
- analytics: {
204
- logEvent: this.logEvent.bind(this),
205
- logDonationFlowEvent: this.logDonationFlowEvent.bind(this),
206
- },
207
- }
208
- });
209
- this.donationForm.braintreeManager = this.braintreeManager;
210
- this.donationForm.paymentFlowHandlers = this.paymentFlowHandlers;
211
- this.braintreeManager.startup();
212
- (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.startup();
213
- this.recaptchaManager.setup(this.recaptchaElement, 1, 'light', 'image');
214
- }
215
- get hostedFieldConfig() {
216
- const hostedFieldStyle = {
217
- input: {
218
- 'font-size': '16px',
219
- 'font-family': '"Helvetica Neue", Helvetica, Arial, sans-serif',
220
- 'font-weight': '700',
221
- color: '#333',
222
- },
223
- ':focus': {
224
- color: '#333',
225
- },
226
- '.valid': {},
227
- '.invalid': {
228
- color: '#b00b00',
229
- },
230
- };
231
- const hostedFieldFieldOptions = {
232
- number: {
233
- selector: '#braintree-creditcard',
234
- placeholder: 'Card number',
235
- },
236
- cvv: {
237
- selector: '#braintree-cvv',
238
- placeholder: 'CVC',
239
- },
240
- expirationDate: {
241
- selector: '#braintree-expiration',
242
- placeholder: 'MM / YY',
243
- },
244
- };
245
- const hostedFieldContainer = new HostedFieldContainer({
246
- number: this.braintreeNumberInput,
247
- cvv: this.braintreeCVVInput,
248
- expirationDate: this.braintreeExpirationDateInput,
249
- errorContainer: this.braintreeErrorMessage,
250
- });
251
- const config = new HostedFieldConfiguration({
252
- hostedFieldStyle,
253
- hostedFieldFieldOptions,
254
- hostedFieldContainer,
255
- });
256
- return config;
257
- }
258
- /** @inheritdoc */
259
- render() {
260
- return html `
261
- <div class="donation-form-controller-container">
262
- <donation-form
263
- .environment=${this.environment}
264
- .braintreeManager=${this.braintreeManager}
265
- .contactForm=${this.contactForm}
266
- .amountOptions=${this.amountOptions}
267
- .donationInfo=${this.donationInfo}
268
- .amountSelectionLayout=${this.amountSelectionLayout}
269
- .frequencySelectionMode=${this.frequencySelectionMode}
270
- @donationInfoChanged=${this.donationInfoChanged}
271
- @paymentProviderSelected=${this.paymentProviderSelected}
272
- @paymentFlowStarted=${this.paymentFlowStarted}
273
- @paymentFlowConfirmed=${this.paymentFlowConfirmed}
274
- @paymentFlowCancelled=${this.paymentFlowCancelled}
275
- @paymentFlowError=${this.paymentFlowError}
276
- >
277
- <!--
278
- Why are these slots here?
279
-
280
- Due to the way Braintree, PayPal, and Recaptcha work, they cannot exist
281
- in the shadowDOM so must exist in the clearDOM and get passed
282
- in through a <slot>.
283
-
284
- Braintree / PayPal are working on a solution to this. See:
285
- - https://github.com/braintree/braintree-web-drop-in/issues/614#issuecomment-616796104
286
- - https://github.com/braintree/braintree-web-drop-in/issues/296#issuecomment-616749307
287
- - https://github.com/paypal/paypal-checkout-components/issues/353#issuecomment-595956216
288
- -->
289
- <div slot="braintree-hosted-fields">
290
- <div id="braintree-error-message"></div>
291
- <div class="braintree-row">
292
- <badged-input .icon=${creditCardImg} ?required=${true} class="creditcard">
293
- <div class="braintree-input" id="braintree-creditcard"></div>
294
- </badged-input>
295
- </div>
296
- <div class="braintree-row">
297
- <badged-input .icon=${calendarImg} ?required=${true} class="expiration">
298
- <div class="braintree-input" id="braintree-expiration"></div>
299
- </badged-input>
300
- <badged-input .icon=${lockImg} ?required=${true} class="cvv">
301
- <div class="braintree-input" id="braintree-cvv"></div>
302
- </badged-input>
303
- </div>
304
- </div>
305
-
306
- <!--
307
- Form autocompletion does not work in the shadowDOM so
308
- we slot the contact form in from the lightDOM and pass
309
- in a reference to it in the <donation-form> tag above
310
- -->
311
- <div slot="contact-form">
312
- <contact-form></contact-form>
313
- </div>
314
-
315
- <div slot="paypal-button">
316
- <div id="paypal-button"></div>
317
- </div>
318
-
319
- <slot name="recaptcha" slot="recaptcha"> </slot>
320
- </donation-form>
321
- </div>
322
-
323
- ${this.getStyles}
324
- `;
325
- }
326
- /** @inheritdoc */
327
- createRenderRoot() {
328
- // Render template without shadow DOM. Note that shadow DOM features like
329
- // encapsulated CSS and slots are unavailable.
330
- // We have to do this to accomodate the PayPal buttons and HostedFields,
331
- // which do not work in the shadow DOM
332
- return this;
333
- }
334
- donationInfoChanged() {
335
- this.logEvent('DonationInfoChanged');
336
- }
337
- trackViewedEvent() {
338
- this.logEvent('Viewed');
339
- }
340
- paymentProviderSelected(e) {
341
- const paymentProvider = e.detail.paymentProvider;
342
- const previousPaymentProvider = e.detail.previousPaymentProvider;
343
- const providerNoSpaces = this.removeSpaces(paymentProvider);
344
- let eventName = `ProviderFirstSelected-${providerNoSpaces}`;
345
- let previousProviderInfo;
346
- if (previousPaymentProvider !== undefined) {
347
- eventName = `ProviderChangedTo-${providerNoSpaces}`;
348
- previousProviderInfo = `ProviderChangedFrom-${this.removeSpaces(previousPaymentProvider)}`;
349
- }
350
- this.logEvent(eventName, previousProviderInfo);
351
- }
352
- paymentFlowConfirmed(e) {
353
- const selectedProvider = e.detail.paymentProvider;
354
- const providerNoSpaces = this.removeSpaces(selectedProvider);
355
- this.logEvent('PaymentFlowConfirmed', providerNoSpaces);
356
- }
357
- paymentFlowStarted(e) {
358
- const selectedProvider = e.detail.paymentProvider;
359
- const providerNoSpaces = this.removeSpaces(selectedProvider);
360
- this.logEvent('PaymentFlowStarted', providerNoSpaces);
361
- }
362
- paymentFlowCancelled(e) {
363
- const selectedProvider = e.detail.paymentProvider;
364
- const providerNoSpaces = this.removeSpaces(selectedProvider);
365
- this.logEvent('PaymentFlowCancelled', providerNoSpaces);
366
- }
367
- paymentFlowError(e) {
368
- const selectedProvider = e.detail.paymentProvider;
369
- const providerNoSpaces = this.removeSpaces(selectedProvider);
370
- const error = e.detail.error;
371
- const detail = `${providerNoSpaces}-${error}`;
372
- this.logEvent('PaymentFlowError', detail);
373
- }
374
- removeSpaces(original) {
375
- return original.replace(/\s+/g, '');
376
- }
377
- /**
378
- * Log an event
379
- *
380
- * @param {string} action Name of event
381
- * @param {string} label Event label, optional
382
- */
383
- logEvent(action, label) {
384
- var _a;
385
- const analyticEvent = { action, label, category: this.analyticsCategory };
386
- (_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEvent(analyticEvent);
387
- }
388
- /**
389
- * Logs `DonationFlow` Event category into no sample bucket
390
- *
391
- * @param {string} action Name of event
392
- * @param {string} label Event label, optional
393
- */
394
- logDonationFlowEvent(action, label) {
395
- var _a;
396
- const analyticEvent = { action, label, category: 'DonationFlow' };
397
- (_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling(analyticEvent);
398
- }
399
- /**
400
- * This is not the normal LitElement styles block.
401
- *
402
- * This element uses the clear DOM instead of the shadow DOM, it can't use
403
- * the shadowRoot's isolated styling. This is a bit of a workaround to keep all of
404
- * the styling local by writing out our own <style> tag and just be careful about
405
- * the selectors since they will leak outside of this component.
406
- *
407
- * @readonly
408
- * @private
409
- * @type {TemplateResult}
410
- * @memberof IADonationFormController
411
- */
412
- get getStyles() {
413
- return html `
414
- <style>
415
- .donation-form-controller-container {
416
- color: var(--donateFormTextColor, #333);
417
- background-color: var(--donateFormBgColor, transparent);
418
-
419
- --formSectionContentBackgroundColor: var(--donateFormBgColor, transparent);
420
-
421
- --editFormBadgeBgColor: var(--donateFormBadgeBgColor, #333);
422
- --formSectionBadgeBackgroundColor: var(--donateFormBadgeBgColor, #333);
423
-
424
- --editFormBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
425
- --formSectionBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
426
-
427
- --paymentButtonFontColor: var(--donateFormPaymentOptionTextColor);
428
- --paymentButtonColor: var(--donateFormPaymentOptionBgColor);
429
-
430
- --paymentButtonSelectedColor: var(--donateFormSelectedOptionBgColor);
431
- --paymentButtonSelectedFontColor: var(--donateFormSelectedOptionTextColor);
432
- }
433
- .donation-form-controller-container donation-form:focus {
434
- outline: none;
435
- }
436
-
437
- .donation-form-controller-container #paypal-button {
438
- opacity: 0.001;
439
- width: 5rem;
440
- height: 3rem;
441
- overflow: hidden;
442
- }
443
-
444
- .donation-form-controller-container .braintree-row {
445
- display: flex;
446
- margin-top: -1px;
447
- }
448
-
449
- .donation-form-controller-container badged-input {
450
- width: 100%;
451
- }
452
-
453
- .donation-form-controller-container badged-input.cvv {
454
- margin-left: -1px;
455
- }
456
-
457
- .donation-form-controller-container .braintree-input {
458
- width: 100%;
459
- height: 100%;
460
- }
461
-
462
- .donation-form-controller-container #braintree-error-message {
463
- color: red;
464
- font-size: 1.4rem;
465
- margin-bottom: 0.6rem;
466
- }
467
-
468
- .donation-form-controller-container div[slot="braintree-hosted-fields"] {
469
- background-color: white;
470
- }
471
- </style>
472
- `;
473
- }
474
- };
475
- __decorate([
476
- property({ type: String })
477
- ], DonationFormController.prototype, "environment", void 0);
478
- __decorate([
479
- property({ type: String })
480
- ], DonationFormController.prototype, "braintreeAuthToken", void 0);
481
- __decorate([
482
- property({ type: String })
483
- ], DonationFormController.prototype, "recaptchaSiteKey", void 0);
484
- __decorate([
485
- property({ type: String })
486
- ], DonationFormController.prototype, "venmoProfileId", void 0);
487
- __decorate([
488
- property({ type: String })
489
- ], DonationFormController.prototype, "googlePayMerchantId", void 0);
490
- __decorate([
491
- property({ type: String })
492
- ], DonationFormController.prototype, "analyticsCategory", void 0);
493
- __decorate([
494
- property({ type: Array })
495
- ], DonationFormController.prototype, "amountOptions", void 0);
496
- __decorate([
497
- property({ type: Object })
498
- ], DonationFormController.prototype, "donationInfo", void 0);
499
- __decorate([
500
- property({ type: String })
501
- ], DonationFormController.prototype, "amountSelectionLayout", void 0);
502
- __decorate([
503
- property({ type: String })
504
- ], DonationFormController.prototype, "frequencySelectionMode", void 0);
505
- __decorate([
506
- property({ type: String })
507
- ], DonationFormController.prototype, "referrer", void 0);
508
- __decorate([
509
- property({ type: String })
510
- ], DonationFormController.prototype, "loggedInUser", void 0);
511
- __decorate([
512
- property({ type: String })
513
- ], DonationFormController.prototype, "origin", void 0);
514
- __decorate([
515
- property({ type: Object })
516
- ], DonationFormController.prototype, "endpointManager", void 0);
517
- __decorate([
518
- property({ type: Object })
519
- ], DonationFormController.prototype, "analyticsHandler", void 0);
520
- __decorate([
521
- property({ type: Object })
522
- ], DonationFormController.prototype, "modalManager", void 0);
523
- __decorate([
524
- property({ type: Object })
525
- ], DonationFormController.prototype, "recaptchaElement", void 0);
526
- __decorate([
527
- property({ type: Object })
528
- ], DonationFormController.prototype, "braintreeManager", void 0);
529
- __decorate([
530
- property({ type: Object })
531
- ], DonationFormController.prototype, "recaptchaManager", void 0);
532
- __decorate([
533
- property({ type: Object })
534
- ], DonationFormController.prototype, "paymentFlowHandlers", void 0);
535
- __decorate([
536
- property({ type: Object })
537
- ], DonationFormController.prototype, "paymentClients", void 0);
538
- __decorate([
539
- property({ type: Object })
540
- ], DonationFormController.prototype, "lazyLoaderService", void 0);
541
- __decorate([
542
- query('donation-form')
543
- ], DonationFormController.prototype, "donationForm", void 0);
544
- __decorate([
545
- query('#braintree-creditcard')
546
- ], DonationFormController.prototype, "braintreeNumberInput", void 0);
547
- __decorate([
548
- query('#braintree-cvv')
549
- ], DonationFormController.prototype, "braintreeCVVInput", void 0);
550
- __decorate([
551
- query('#braintree-expiration')
552
- ], DonationFormController.prototype, "braintreeExpirationDateInput", void 0);
553
- __decorate([
554
- query('#braintree-error-message')
555
- ], DonationFormController.prototype, "braintreeErrorMessage", void 0);
556
- __decorate([
557
- query('contact-form')
558
- ], DonationFormController.prototype, "contactForm", void 0);
559
- DonationFormController = __decorate([
560
- customElement('donation-form-controller')
561
- ], DonationFormController);
562
- export { DonationFormController };
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { LitElement, html } from 'lit';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
+ import currency from 'currency.js';
5
+ import { LazyLoaderService, } from '@internetarchive/lazy-loader-service';
6
+ import { PaymentClients } from './braintree-manager/payment-clients';
7
+ import { BraintreeManager } from './braintree-manager/braintree-manager';
8
+ import { PaymentFlowHandlers, } from './payment-flow-handlers/payment-flow-handlers';
9
+ import { RecaptchaManager } from './recaptcha-manager/recaptcha-manager';
10
+ import { HostedFieldConfiguration } from './braintree-manager/payment-providers/credit-card/hosted-field-configuration';
11
+ import { HostedFieldContainer, } from './braintree-manager/payment-providers/credit-card/hosted-field-container';
12
+ import './form-elements/badged-input';
13
+ import './form-elements/contact-form/contact-form';
14
+ import creditCardImg from '@internetarchive/icon-credit-card';
15
+ import calendarImg from '@internetarchive/icon-calendar';
16
+ import lockImg from '@internetarchive/icon-lock';
17
+ import { EditDonationAmountSelectionLayout, EditDonationFrequencySelectionMode, } from '@internetarchive/donation-form-edit-donation';
18
+ import { DonationPaymentInfo, DonationType, defaultDonationAmounts, defaultSelectedDonationInfo, } from '@internetarchive/donation-form-data-models';
19
+ /**
20
+ * The DonationFormController orchestrates several of the interactions between
21
+ * the various pieces of the donation form like modals, braintree, paypal, and recaptcha
22
+ *
23
+ * @export
24
+ * @class RadioPlayerController
25
+ * @extends {LitElement}
26
+ */
27
+ let DonationFormController = class DonationFormController extends LitElement {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.analyticsCategory = 'DonationForm';
31
+ this.amountOptions = defaultDonationAmounts;
32
+ this.donationInfo = defaultSelectedDonationInfo;
33
+ this.amountSelectionLayout = EditDonationAmountSelectionLayout.MultiLine;
34
+ this.frequencySelectionMode = EditDonationFrequencySelectionMode.Button;
35
+ this.lazyLoaderService = new LazyLoaderService();
36
+ this.recaptchaManagerSetup = false;
37
+ }
38
+ /** @inheritdoc */
39
+ updated(changedProperties) {
40
+ var _a, _b, _c;
41
+ if (changedProperties.has('referrer') && this.referrer) {
42
+ (_a = this.braintreeManager) === null || _a === void 0 ? void 0 : _a.setReferrer(this.referrer);
43
+ this.logDonationFlowEvent('referrer', this.referrer);
44
+ }
45
+ if (changedProperties.has('loggedInUser') && this.loggedInUser) {
46
+ (_b = this.braintreeManager) === null || _b === void 0 ? void 0 : _b.setLoggedInUser(this.loggedInUser);
47
+ }
48
+ if (changedProperties.has('origin') && this.origin) {
49
+ (_c = this.braintreeManager) === null || _c === void 0 ? void 0 : _c.setOrigin(this.origin);
50
+ this.logDonationFlowEvent('origin', this.origin);
51
+ }
52
+ if (changedProperties.has('paymentClients') ||
53
+ changedProperties.has('braintreeAuthToken') ||
54
+ changedProperties.has('endpointManager') ||
55
+ changedProperties.has('environment')) {
56
+ this.setupBraintreeManager();
57
+ this.setupRecaptchaManager();
58
+ }
59
+ if (changedProperties.has('recaptchaSiteKey')) {
60
+ this.setupRecaptchaManager();
61
+ }
62
+ if (changedProperties.has('braintreeManager') ||
63
+ changedProperties.has('recaptchaManager') ||
64
+ changedProperties.has('modalManager') ||
65
+ changedProperties.has('recaptchaElement')) {
66
+ this.setupPaymentFlowHandlers();
67
+ }
68
+ if ((changedProperties.has('environment') || changedProperties.has('lazyLoaderService')) &&
69
+ this.environment) {
70
+ this.paymentClients = new PaymentClients(this.lazyLoaderService, this.environment);
71
+ }
72
+ }
73
+ showConfirmationStepDev(options) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ this.donationForm.showConfirmationModalDev(options);
76
+ });
77
+ }
78
+ showUpsellModalDev(options) {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ this.donationForm.showUpsellModalDev(options);
81
+ });
82
+ }
83
+ setupBraintreeManager() {
84
+ if (this.braintreeManager === undefined &&
85
+ this.braintreeAuthToken &&
86
+ this.endpointManager &&
87
+ this.paymentClients &&
88
+ this.environment) {
89
+ this.braintreeManager = new BraintreeManager({
90
+ paymentClients: this.paymentClients,
91
+ endpointManager: this.endpointManager,
92
+ authorizationToken: this.braintreeAuthToken,
93
+ venmoProfileId: this.venmoProfileId,
94
+ googlePayMerchantId: this.googlePayMerchantId,
95
+ hostedFieldConfig: this.hostedFieldConfig,
96
+ hostingEnvironment: this.environment,
97
+ referrer: this.referrer,
98
+ loggedInUser: this.loggedInUser,
99
+ origin: this.origin,
100
+ });
101
+ this.braintreeManager.on('paymentProvidersHostedFieldsRetry', (retryNumber) => {
102
+ const event = new CustomEvent('paymentProvidersHostedFieldsRetry', {
103
+ detail: { retryNumber },
104
+ });
105
+ this.dispatchEvent(event);
106
+ });
107
+ this.braintreeManager.on('paymentProvidersHostedFieldsFailed', (error) => {
108
+ const event = new CustomEvent('paymentProvidersHostedFieldsFailed', {
109
+ detail: { error },
110
+ });
111
+ this.dispatchEvent(event);
112
+ });
113
+ }
114
+ }
115
+ setupRecaptchaManager() {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ if (!this.recaptchaSiteKey || !this.paymentClients || this.recaptchaManagerSetup) {
118
+ return;
119
+ }
120
+ this.recaptchaManagerSetup = true;
121
+ const grecaptchaLibrary = yield this.paymentClients.recaptchaLibrary.get();
122
+ this.recaptchaManager = new RecaptchaManager({
123
+ grecaptchaLibrary: grecaptchaLibrary,
124
+ siteKey: this.recaptchaSiteKey,
125
+ });
126
+ });
127
+ }
128
+ /** @inheritdoc */
129
+ firstUpdated() {
130
+ this.configureFromQueryParams();
131
+ this.trackViewedEvent();
132
+ }
133
+ configureFromQueryParams() {
134
+ const urlParams = new URLSearchParams(window.location.search);
135
+ let amountOptions = this.amountOptions;
136
+ const amountOptionsParam = urlParams.get('dollarAmounts');
137
+ if (amountOptionsParam) {
138
+ const stripBrackets = amountOptionsParam.slice(1, -1);
139
+ const splitValues = stripBrackets.split(',');
140
+ const numberArray = splitValues
141
+ .map(value => parseFloat(value))
142
+ .filter(value => !isNaN(value));
143
+ amountOptions = numberArray;
144
+ }
145
+ let coverFees = this.donationInfo.coverFees;
146
+ const coverFeesParam = urlParams.get('coverFees');
147
+ if (coverFeesParam) {
148
+ coverFees = coverFeesParam === 'true';
149
+ }
150
+ let frequency = this.donationInfo.donationType;
151
+ const frequencyParam = urlParams.get('contrib_type');
152
+ if (frequencyParam === 'monthly') {
153
+ frequency = DonationType.Monthly;
154
+ }
155
+ let amount = this.donationInfo.amount;
156
+ const amountParam = urlParams.get('amt');
157
+ if (amountParam) {
158
+ const parsedAmount = currency(amountParam).value;
159
+ if (parsedAmount > 0) {
160
+ amount = parsedAmount;
161
+ }
162
+ }
163
+ const amountLayoutParam = urlParams.get('amountLayout');
164
+ if (amountLayoutParam) {
165
+ const amountLayout = amountLayoutParam;
166
+ if (Object.values(EditDonationAmountSelectionLayout).includes(amountLayout)) {
167
+ this.amountSelectionLayout = amountLayout;
168
+ }
169
+ }
170
+ const frequencyModeParam = urlParams.get('frequencyMode');
171
+ if (frequencyModeParam) {
172
+ const frequencyMode = frequencyModeParam;
173
+ if (Object.values(EditDonationFrequencySelectionMode).includes(frequencyMode)) {
174
+ this.frequencySelectionMode = frequencyMode;
175
+ }
176
+ }
177
+ const donationInfo = new DonationPaymentInfo({
178
+ donationType: frequency,
179
+ amount: amount,
180
+ coverFees: coverFees,
181
+ });
182
+ this.amountOptions = amountOptions;
183
+ this.donationInfo = donationInfo;
184
+ }
185
+ setupPaymentFlowHandlers() {
186
+ var _a;
187
+ // only set up once
188
+ if (this.paymentFlowHandlers) {
189
+ return;
190
+ }
191
+ // verify we have all of the dependencies
192
+ if (!this.braintreeManager ||
193
+ !this.recaptchaManager ||
194
+ !this.modalManager ||
195
+ !this.recaptchaElement) {
196
+ return;
197
+ }
198
+ this.paymentFlowHandlers = new PaymentFlowHandlers({
199
+ braintreeManager: this.braintreeManager,
200
+ modalManager: this.modalManager,
201
+ recaptchaManager: this.recaptchaManager,
202
+ resources: {
203
+ analytics: {
204
+ logEvent: this.logEvent.bind(this),
205
+ logDonationFlowEvent: this.logDonationFlowEvent.bind(this),
206
+ },
207
+ }
208
+ });
209
+ this.donationForm.braintreeManager = this.braintreeManager;
210
+ this.donationForm.paymentFlowHandlers = this.paymentFlowHandlers;
211
+ this.braintreeManager.startup();
212
+ (_a = this.paymentFlowHandlers) === null || _a === void 0 ? void 0 : _a.startup();
213
+ this.recaptchaManager.setup(this.recaptchaElement, 1, 'light', 'image');
214
+ }
215
+ get hostedFieldConfig() {
216
+ const hostedFieldStyle = {
217
+ input: {
218
+ 'font-size': '16px',
219
+ 'font-family': '"Helvetica Neue", Helvetica, Arial, sans-serif',
220
+ 'font-weight': '700',
221
+ color: '#333',
222
+ },
223
+ ':focus': {
224
+ color: '#333',
225
+ },
226
+ '.valid': {},
227
+ '.invalid': {
228
+ color: '#b00b00',
229
+ },
230
+ };
231
+ const hostedFieldFieldOptions = {
232
+ number: {
233
+ selector: '#braintree-creditcard',
234
+ placeholder: 'Card number',
235
+ },
236
+ cvv: {
237
+ selector: '#braintree-cvv',
238
+ placeholder: 'CVC',
239
+ },
240
+ expirationDate: {
241
+ selector: '#braintree-expiration',
242
+ placeholder: 'MM / YY',
243
+ },
244
+ };
245
+ const hostedFieldContainer = new HostedFieldContainer({
246
+ number: this.braintreeNumberInput,
247
+ cvv: this.braintreeCVVInput,
248
+ expirationDate: this.braintreeExpirationDateInput,
249
+ errorContainer: this.braintreeErrorMessage,
250
+ });
251
+ const config = new HostedFieldConfiguration({
252
+ hostedFieldStyle,
253
+ hostedFieldFieldOptions,
254
+ hostedFieldContainer,
255
+ });
256
+ return config;
257
+ }
258
+ /** @inheritdoc */
259
+ render() {
260
+ return html `
261
+ <div class="donation-form-controller-container">
262
+ <donation-form
263
+ .environment=${this.environment}
264
+ .braintreeManager=${this.braintreeManager}
265
+ .contactForm=${this.contactForm}
266
+ .amountOptions=${this.amountOptions}
267
+ .donationInfo=${this.donationInfo}
268
+ .amountSelectionLayout=${this.amountSelectionLayout}
269
+ .frequencySelectionMode=${this.frequencySelectionMode}
270
+ @donationInfoChanged=${this.donationInfoChanged}
271
+ @paymentProviderSelected=${this.paymentProviderSelected}
272
+ @paymentFlowStarted=${this.paymentFlowStarted}
273
+ @paymentFlowConfirmed=${this.paymentFlowConfirmed}
274
+ @paymentFlowCancelled=${this.paymentFlowCancelled}
275
+ @paymentFlowError=${this.paymentFlowError}
276
+ >
277
+ <!--
278
+ Why are these slots here?
279
+
280
+ Due to the way Braintree, PayPal, and Recaptcha work, they cannot exist
281
+ in the shadowDOM so must exist in the clearDOM and get passed
282
+ in through a <slot>.
283
+
284
+ Braintree / PayPal are working on a solution to this. See:
285
+ - https://github.com/braintree/braintree-web-drop-in/issues/614#issuecomment-616796104
286
+ - https://github.com/braintree/braintree-web-drop-in/issues/296#issuecomment-616749307
287
+ - https://github.com/paypal/paypal-checkout-components/issues/353#issuecomment-595956216
288
+ -->
289
+ <div slot="braintree-hosted-fields">
290
+ <div id="braintree-error-message"></div>
291
+ <div class="braintree-row">
292
+ <badged-input .icon=${creditCardImg} ?required=${true} class="creditcard">
293
+ <div class="braintree-input" id="braintree-creditcard"></div>
294
+ </badged-input>
295
+ </div>
296
+ <div class="braintree-row">
297
+ <badged-input .icon=${calendarImg} ?required=${true} class="expiration">
298
+ <div class="braintree-input" id="braintree-expiration"></div>
299
+ </badged-input>
300
+ <badged-input .icon=${lockImg} ?required=${true} class="cvv">
301
+ <div class="braintree-input" id="braintree-cvv"></div>
302
+ </badged-input>
303
+ </div>
304
+ </div>
305
+
306
+ <!--
307
+ Form autocompletion does not work in the shadowDOM so
308
+ we slot the contact form in from the lightDOM and pass
309
+ in a reference to it in the <donation-form> tag above
310
+ -->
311
+ <div slot="contact-form">
312
+ <contact-form></contact-form>
313
+ </div>
314
+
315
+ <div slot="paypal-button">
316
+ <div id="paypal-button"></div>
317
+ </div>
318
+
319
+ <slot name="recaptcha" slot="recaptcha"> </slot>
320
+ </donation-form>
321
+ </div>
322
+
323
+ ${this.getStyles}
324
+ `;
325
+ }
326
+ /** @inheritdoc */
327
+ createRenderRoot() {
328
+ // Render template without shadow DOM. Note that shadow DOM features like
329
+ // encapsulated CSS and slots are unavailable.
330
+ // We have to do this to accomodate the PayPal buttons and HostedFields,
331
+ // which do not work in the shadow DOM
332
+ return this;
333
+ }
334
+ donationInfoChanged() {
335
+ this.logEvent('DonationInfoChanged');
336
+ }
337
+ trackViewedEvent() {
338
+ this.logEvent('Viewed');
339
+ }
340
+ paymentProviderSelected(e) {
341
+ const paymentProvider = e.detail.paymentProvider;
342
+ const previousPaymentProvider = e.detail.previousPaymentProvider;
343
+ const providerNoSpaces = this.removeSpaces(paymentProvider);
344
+ let eventName = `ProviderFirstSelected-${providerNoSpaces}`;
345
+ let previousProviderInfo;
346
+ if (previousPaymentProvider !== undefined) {
347
+ eventName = `ProviderChangedTo-${providerNoSpaces}`;
348
+ previousProviderInfo = `ProviderChangedFrom-${this.removeSpaces(previousPaymentProvider)}`;
349
+ }
350
+ this.logEvent(eventName, previousProviderInfo);
351
+ }
352
+ paymentFlowConfirmed(e) {
353
+ const selectedProvider = e.detail.paymentProvider;
354
+ const providerNoSpaces = this.removeSpaces(selectedProvider);
355
+ this.logEvent('PaymentFlowConfirmed', providerNoSpaces);
356
+ }
357
+ paymentFlowStarted(e) {
358
+ const selectedProvider = e.detail.paymentProvider;
359
+ const providerNoSpaces = this.removeSpaces(selectedProvider);
360
+ this.logEvent('PaymentFlowStarted', providerNoSpaces);
361
+ }
362
+ paymentFlowCancelled(e) {
363
+ const selectedProvider = e.detail.paymentProvider;
364
+ const providerNoSpaces = this.removeSpaces(selectedProvider);
365
+ this.logEvent('PaymentFlowCancelled', providerNoSpaces);
366
+ }
367
+ paymentFlowError(e) {
368
+ const selectedProvider = e.detail.paymentProvider;
369
+ const providerNoSpaces = this.removeSpaces(selectedProvider);
370
+ const error = e.detail.error;
371
+ const detail = `${providerNoSpaces}-${error}`;
372
+ this.logEvent('PaymentFlowError', detail);
373
+ }
374
+ removeSpaces(original) {
375
+ return original.replace(/\s+/g, '');
376
+ }
377
+ /**
378
+ * Log an event
379
+ *
380
+ * @param {string} action Name of event
381
+ * @param {string} label Event label, optional
382
+ */
383
+ logEvent(action, label) {
384
+ var _a;
385
+ const analyticEvent = { action, label, category: this.analyticsCategory };
386
+ (_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEvent(analyticEvent);
387
+ }
388
+ /**
389
+ * Logs `DonationFlow` Event category into no sample bucket
390
+ *
391
+ * @param {string} action Name of event
392
+ * @param {string} label Event label, optional
393
+ */
394
+ logDonationFlowEvent(action, label) {
395
+ var _a;
396
+ const analyticEvent = { action, label, category: 'DonationFlow' };
397
+ (_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling(analyticEvent);
398
+ }
399
+ /**
400
+ * This is not the normal LitElement styles block.
401
+ *
402
+ * This element uses the clear DOM instead of the shadow DOM, it can't use
403
+ * the shadowRoot's isolated styling. This is a bit of a workaround to keep all of
404
+ * the styling local by writing out our own <style> tag and just be careful about
405
+ * the selectors since they will leak outside of this component.
406
+ *
407
+ * @readonly
408
+ * @private
409
+ * @type {TemplateResult}
410
+ * @memberof IADonationFormController
411
+ */
412
+ get getStyles() {
413
+ return html `
414
+ <style>
415
+ .donation-form-controller-container {
416
+ color: var(--donateFormTextColor, #333);
417
+ background-color: var(--donateFormBgColor, transparent);
418
+
419
+ --formSectionContentBackgroundColor: var(--donateFormBgColor, transparent);
420
+
421
+ --editFormBadgeBgColor: var(--donateFormBadgeBgColor, #333);
422
+ --formSectionBadgeBackgroundColor: var(--donateFormBadgeBgColor, #333);
423
+
424
+ --editFormBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
425
+ --formSectionBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
426
+
427
+ --paymentButtonFontColor: var(--donateFormPaymentOptionTextColor);
428
+ --paymentButtonColor: var(--donateFormPaymentOptionBgColor);
429
+
430
+ --paymentButtonSelectedColor: var(--donateFormSelectedOptionBgColor);
431
+ --paymentButtonSelectedFontColor: var(--donateFormSelectedOptionTextColor);
432
+ }
433
+ .donation-form-controller-container donation-form:focus {
434
+ outline: none;
435
+ }
436
+
437
+ .donation-form-controller-container #paypal-button {
438
+ opacity: 0.001;
439
+ width: 5rem;
440
+ height: 3rem;
441
+ overflow: hidden;
442
+ }
443
+
444
+ .donation-form-controller-container .braintree-row {
445
+ display: flex;
446
+ margin-top: -1px;
447
+ }
448
+
449
+ .donation-form-controller-container badged-input {
450
+ width: 100%;
451
+ }
452
+
453
+ .donation-form-controller-container badged-input.cvv {
454
+ margin-left: -1px;
455
+ }
456
+
457
+ .donation-form-controller-container .braintree-input {
458
+ width: 100%;
459
+ height: 100%;
460
+ }
461
+
462
+ .donation-form-controller-container #braintree-error-message {
463
+ color: red;
464
+ font-size: 1.4rem;
465
+ margin-bottom: 0.6rem;
466
+ }
467
+
468
+ .donation-form-controller-container div[slot="braintree-hosted-fields"] {
469
+ background-color: white;
470
+ }
471
+ </style>
472
+ `;
473
+ }
474
+ };
475
+ __decorate([
476
+ property({ type: String })
477
+ ], DonationFormController.prototype, "environment", void 0);
478
+ __decorate([
479
+ property({ type: String })
480
+ ], DonationFormController.prototype, "braintreeAuthToken", void 0);
481
+ __decorate([
482
+ property({ type: String })
483
+ ], DonationFormController.prototype, "recaptchaSiteKey", void 0);
484
+ __decorate([
485
+ property({ type: String })
486
+ ], DonationFormController.prototype, "venmoProfileId", void 0);
487
+ __decorate([
488
+ property({ type: String })
489
+ ], DonationFormController.prototype, "googlePayMerchantId", void 0);
490
+ __decorate([
491
+ property({ type: String })
492
+ ], DonationFormController.prototype, "analyticsCategory", void 0);
493
+ __decorate([
494
+ property({ type: Array })
495
+ ], DonationFormController.prototype, "amountOptions", void 0);
496
+ __decorate([
497
+ property({ type: Object })
498
+ ], DonationFormController.prototype, "donationInfo", void 0);
499
+ __decorate([
500
+ property({ type: String })
501
+ ], DonationFormController.prototype, "amountSelectionLayout", void 0);
502
+ __decorate([
503
+ property({ type: String })
504
+ ], DonationFormController.prototype, "frequencySelectionMode", void 0);
505
+ __decorate([
506
+ property({ type: String })
507
+ ], DonationFormController.prototype, "referrer", void 0);
508
+ __decorate([
509
+ property({ type: String })
510
+ ], DonationFormController.prototype, "loggedInUser", void 0);
511
+ __decorate([
512
+ property({ type: String })
513
+ ], DonationFormController.prototype, "origin", void 0);
514
+ __decorate([
515
+ property({ type: Object })
516
+ ], DonationFormController.prototype, "endpointManager", void 0);
517
+ __decorate([
518
+ property({ type: Object })
519
+ ], DonationFormController.prototype, "analyticsHandler", void 0);
520
+ __decorate([
521
+ property({ type: Object })
522
+ ], DonationFormController.prototype, "modalManager", void 0);
523
+ __decorate([
524
+ property({ type: Object })
525
+ ], DonationFormController.prototype, "recaptchaElement", void 0);
526
+ __decorate([
527
+ property({ type: Object })
528
+ ], DonationFormController.prototype, "braintreeManager", void 0);
529
+ __decorate([
530
+ property({ type: Object })
531
+ ], DonationFormController.prototype, "recaptchaManager", void 0);
532
+ __decorate([
533
+ property({ type: Object })
534
+ ], DonationFormController.prototype, "paymentFlowHandlers", void 0);
535
+ __decorate([
536
+ property({ type: Object })
537
+ ], DonationFormController.prototype, "paymentClients", void 0);
538
+ __decorate([
539
+ property({ type: Object })
540
+ ], DonationFormController.prototype, "lazyLoaderService", void 0);
541
+ __decorate([
542
+ query('donation-form')
543
+ ], DonationFormController.prototype, "donationForm", void 0);
544
+ __decorate([
545
+ query('#braintree-creditcard')
546
+ ], DonationFormController.prototype, "braintreeNumberInput", void 0);
547
+ __decorate([
548
+ query('#braintree-cvv')
549
+ ], DonationFormController.prototype, "braintreeCVVInput", void 0);
550
+ __decorate([
551
+ query('#braintree-expiration')
552
+ ], DonationFormController.prototype, "braintreeExpirationDateInput", void 0);
553
+ __decorate([
554
+ query('#braintree-error-message')
555
+ ], DonationFormController.prototype, "braintreeErrorMessage", void 0);
556
+ __decorate([
557
+ query('contact-form')
558
+ ], DonationFormController.prototype, "contactForm", void 0);
559
+ DonationFormController = __decorate([
560
+ customElement('donation-form-controller')
561
+ ], DonationFormController);
562
+ export { DonationFormController };
563
563
  //# sourceMappingURL=donation-form-controller.js.map