@internetarchive/donation-form 0.5.17 → 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 -188
  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,295 +1,295 @@
1
- import { __decorate } from "tslib";
2
- import { LitElement, html, css } from 'lit';
3
- import { customElement, property, query } from 'lit/decorators.js';
4
- import { CurrencyValidator } from '@internetarchive/donation-form-currency-validator';
5
- export var UpsellModalCTAMode;
6
- (function (UpsellModalCTAMode) {
7
- UpsellModalCTAMode["YesButton"] = "YesButton";
8
- UpsellModalCTAMode["PayPalUpsellSlot"] = "PayPalUpsellSlot";
9
- })(UpsellModalCTAMode || (UpsellModalCTAMode = {}));
10
- /**
11
- * This is the content that we show in the upsell modal.
12
- *
13
- * It has an amount input, "Yes" and "No Thanks" options and a switch to optionally
14
- * show the PayPal upsell button.
15
- *
16
- * @export
17
- * @class UpsellModalContent
18
- * @extends {LitElement}
19
- */
20
- let UpsellModalContent = class UpsellModalContent extends LitElement {
21
- constructor() {
22
- super(...arguments);
23
- this.yesButtonMode = UpsellModalCTAMode.YesButton;
24
- this.amount = 5;
25
- this.currencyValidator = new CurrencyValidator();
26
- }
27
- /** @inheritdoc */
28
- render() {
29
- return html `
30
- <h3>Thank you for donating!</h3>
31
- <button @click=${this.noThanksSelected} class="cta-button" id="no-button">
32
- Continue
33
- </button>
34
- <p class="or_separator"><span>or</span></p>
35
- <h3>Consider donating monthly</h3>
36
- <p class="appeal">
37
- Monthly support helps us reliably plan for the future.
38
- </p>
39
- <div class="monthly-amount">
40
- <h1>Enter your monthly amount</h1>
41
- <div class="amount-input">
42
- <span class="dollar-symbol">$</span>
43
- <input
44
- id="amount-input"
45
- type="text"
46
- tabindex="0"
47
- value=${this.amount}
48
- @input=${this.amountChanged}
49
- @keydown=${this.currencyValidator.keydown}
50
- />
51
- </div>
52
- <div class="error ${this.error ? '' : 'hidden'}">${this.error}</div>
53
- </div>
54
-
55
- ${this.yesButton}
56
- `;
57
- }
58
- get yesButton() {
59
- switch (this.yesButtonMode) {
60
- case UpsellModalCTAMode.YesButton:
61
- return html `
62
- <button
63
- class="cta-button"
64
- tabindex="0"
65
- id="yes-button"
66
- @click=${this.yesSelected}
67
- .disabled=${this.error !== undefined}
68
- >
69
- YES, I'll donate monthly
70
- </button>
71
- `;
72
- case UpsellModalCTAMode.PayPalUpsellSlot:
73
- return html `
74
- <div class="paypal-upsell-slot-container">
75
- <div class="paypal-upsell-slot-blocker ${this.error ? '' : 'hidden'}"></div>
76
- <button class="cta-button" id="paypal-cover-button">
77
- YES, I'll donate monthly
78
- </button>
79
- <slot class="paypal-upsell-slot"></slot>
80
- </div>
81
- `;
82
- }
83
- }
84
- amountChanged(e) {
85
- const target = e.target;
86
- const amount = target.value;
87
- if (amount.length === 0) {
88
- return;
89
- }
90
- this.handleCustomAmountInput(amount);
91
- }
92
- handleCustomAmountInput(value) {
93
- const amount = parseFloat(value);
94
- if (isNaN(amount)) {
95
- this.error = html `
96
- Please enter a valid amount.
97
- `;
98
- }
99
- else {
100
- this.processAmount(amount);
101
- }
102
- }
103
- processAmount(amount) {
104
- if (amount >= 10000) {
105
- this.error = html `
106
- To make a donation of $10,000 or more, please contact our philanthropy department at
107
- <a href="mailto:donations@archive.org">donations@archive.org</a>
108
- `;
109
- return;
110
- }
111
- if (amount < 1) {
112
- if (this.amountInput && this.amountInput.value.length > 0) {
113
- this.error = html `
114
- The minimum donation amount is $1.
115
- `;
116
- }
117
- return;
118
- }
119
- this.error = undefined;
120
- this.amount = amount;
121
- const event = new CustomEvent('amountChanged', { detail: { amount: this.amount } });
122
- this.dispatchEvent(event);
123
- }
124
- yesSelected() {
125
- const event = new CustomEvent('yesSelected', { detail: { amount: this.amount } });
126
- this.dispatchEvent(event);
127
- }
128
- noThanksSelected() {
129
- this.dispatchEvent(new Event('noThanksSelected'));
130
- }
131
- /** @inheritdoc */
132
- static get styles() {
133
- const ctaButtonColor = css `var(--upsellCTAButtonColor, #194880)`;
134
- const ctaButtonDisabledColor = css `var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;
135
- const amountInputOffset = css `var(--upsellAmountInputOffset, -1rem)`;
136
- return css `
137
- .monthly-amount {
138
- background-color: #fff;
139
- padding: 0.5rem 0.625rem;
140
- border-radius: 5px;
141
- text-align: center;
142
- margin-bottom: 0.5rem;
143
- margin-top: 0;
144
- }
145
-
146
- .monthly-amount h1 {
147
- font-size: 1.8rem;
148
- font-weight: bold;
149
- text-align: center;
150
- line-height: 1.2em;
151
- margin: 0;
152
- padding: 0.5rem 0 0 0;
153
- }
154
-
155
- .hidden {
156
- display: none;
157
- }
158
-
159
- h3 {
160
- text-align: center;
161
- font-size: 1.8rem;
162
- margin: 0 1rem 0.5rem 1rem;
163
- }
164
-
165
- .appeal {
166
- text-align: center;
167
- font-size: 1.6rem;
168
- margin: 0.5rem 1rem;
169
- }
170
-
171
- .amount-input {
172
- transform: translate(${amountInputOffset}, 0); /* translate slightly to center the input */
173
- }
174
-
175
- .amount-input .dollar-symbol {
176
- font-size: 1.8rem;
177
- font-weight: bold;
178
- }
179
-
180
- .amount-input input {
181
- width: 100px;
182
- text-align: center;
183
- border: none;
184
- border-bottom: 1px solid gray;
185
- font-weight: bold;
186
- font-size: 3.4rem;
187
- }
188
-
189
- .cta-button {
190
- font-size: 2rem;
191
- display: block;
192
- width: 100%;
193
- margin-top: 0.5rem;
194
- padding: 1rem 2rem;
195
- background-color: ${ctaButtonColor};
196
- color: #fff;
197
- border-radius: 5px;
198
- border: 0;
199
- font-weight: bold;
200
- line-height: normal;
201
- outline: none;
202
- cursor: pointer;
203
- }
204
-
205
- .cta-button:disabled {
206
- background-color: ${ctaButtonDisabledColor};
207
- cursor: not-allowed;
208
- }
209
-
210
- .paypal-upsell-slot {
211
- text-align: center;
212
- }
213
-
214
- .paypal-upsell-slot-blocker {
215
- position: absolute;
216
- width: 100%;
217
- height: 4.5rem;
218
- bottom: 0;
219
- z-index: 250;
220
- cursor: not-allowed;
221
- background-color: rgba(255, 255, 255, 0.5);
222
- }
223
-
224
- .paypal-upsell-slot-blocker.hidden {
225
- display: none;
226
- }
227
-
228
- #paypal-cover-button {
229
- position: absolute;
230
- width: 100%;
231
- bottom: 0;
232
- }
233
-
234
- .paypal-upsell-slot-container {
235
- position: relative;
236
- }
237
-
238
- .paypal-upsell-slot-container .paypal-cta {
239
- font-size: 2.4rem;
240
- font-weight: bold;
241
- margin: 0 1rem 1rem 1rem;
242
- text-align: center;
243
- }
244
-
245
- .error {
246
- font-size: 1.4rem;
247
- margin: 0.5rem 0;
248
- color: red;
249
- }
250
-
251
- .or_separator {
252
- position: relative;
253
- margin: 0 2rem;
254
- font-size: 2.6rem;
255
- font-weight: bold;
256
- text-transform: uppercase;
257
- text-align: center;
258
- }
259
-
260
- .or_separator:before {
261
- position: absolute;
262
- top: calc(50% - 1px);
263
- right: 0;
264
- left: 0;
265
- height: 2px;
266
- content: '';
267
- background: #333;
268
- }
269
-
270
- .or_separator span {
271
- display: inline-block;
272
- position: relative;
273
- padding: 0 1rem;
274
- background: #f5f5f7;
275
- }
276
- `;
277
- }
278
- };
279
- __decorate([
280
- property({ type: String })
281
- ], UpsellModalContent.prototype, "yesButtonMode", void 0);
282
- __decorate([
283
- property({ type: Number })
284
- ], UpsellModalContent.prototype, "amount", void 0);
285
- __decorate([
286
- property({ type: Object })
287
- ], UpsellModalContent.prototype, "error", void 0);
288
- __decorate([
289
- query('#amount-input')
290
- ], UpsellModalContent.prototype, "amountInput", void 0);
291
- UpsellModalContent = __decorate([
292
- customElement('upsell-modal-content')
293
- ], UpsellModalContent);
294
- export { UpsellModalContent };
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
+ import { CurrencyValidator } from '@internetarchive/donation-form-currency-validator';
5
+ export var UpsellModalCTAMode;
6
+ (function (UpsellModalCTAMode) {
7
+ UpsellModalCTAMode["YesButton"] = "YesButton";
8
+ UpsellModalCTAMode["PayPalUpsellSlot"] = "PayPalUpsellSlot";
9
+ })(UpsellModalCTAMode || (UpsellModalCTAMode = {}));
10
+ /**
11
+ * This is the content that we show in the upsell modal.
12
+ *
13
+ * It has an amount input, "Yes" and "No Thanks" options and a switch to optionally
14
+ * show the PayPal upsell button.
15
+ *
16
+ * @export
17
+ * @class UpsellModalContent
18
+ * @extends {LitElement}
19
+ */
20
+ let UpsellModalContent = class UpsellModalContent extends LitElement {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.yesButtonMode = UpsellModalCTAMode.YesButton;
24
+ this.amount = 5;
25
+ this.currencyValidator = new CurrencyValidator();
26
+ }
27
+ /** @inheritdoc */
28
+ render() {
29
+ return html `
30
+ <h3>Thank you for donating!</h3>
31
+ <button @click=${this.noThanksSelected} class="cta-button" id="no-button">
32
+ Continue
33
+ </button>
34
+ <p class="or_separator"><span>or</span></p>
35
+ <h3>Consider donating monthly</h3>
36
+ <p class="appeal">
37
+ Monthly support helps us reliably plan for the future.
38
+ </p>
39
+ <div class="monthly-amount">
40
+ <h1>Enter your monthly amount</h1>
41
+ <div class="amount-input">
42
+ <span class="dollar-symbol">$</span>
43
+ <input
44
+ id="amount-input"
45
+ type="text"
46
+ tabindex="0"
47
+ value=${this.amount}
48
+ @input=${this.amountChanged}
49
+ @keydown=${this.currencyValidator.keydown}
50
+ />
51
+ </div>
52
+ <div class="error ${this.error ? '' : 'hidden'}">${this.error}</div>
53
+ </div>
54
+
55
+ ${this.yesButton}
56
+ `;
57
+ }
58
+ get yesButton() {
59
+ switch (this.yesButtonMode) {
60
+ case UpsellModalCTAMode.YesButton:
61
+ return html `
62
+ <button
63
+ class="cta-button"
64
+ tabindex="0"
65
+ id="yes-button"
66
+ @click=${this.yesSelected}
67
+ .disabled=${this.error !== undefined}
68
+ >
69
+ YES, I'll donate monthly
70
+ </button>
71
+ `;
72
+ case UpsellModalCTAMode.PayPalUpsellSlot:
73
+ return html `
74
+ <div class="paypal-upsell-slot-container">
75
+ <div class="paypal-upsell-slot-blocker ${this.error ? '' : 'hidden'}"></div>
76
+ <button class="cta-button" id="paypal-cover-button">
77
+ YES, I'll donate monthly
78
+ </button>
79
+ <slot class="paypal-upsell-slot"></slot>
80
+ </div>
81
+ `;
82
+ }
83
+ }
84
+ amountChanged(e) {
85
+ const target = e.target;
86
+ const amount = target.value;
87
+ if (amount.length === 0) {
88
+ return;
89
+ }
90
+ this.handleCustomAmountInput(amount);
91
+ }
92
+ handleCustomAmountInput(value) {
93
+ const amount = parseFloat(value);
94
+ if (isNaN(amount)) {
95
+ this.error = html `
96
+ Please enter a valid amount.
97
+ `;
98
+ }
99
+ else {
100
+ this.processAmount(amount);
101
+ }
102
+ }
103
+ processAmount(amount) {
104
+ if (amount >= 10000) {
105
+ this.error = html `
106
+ To make a donation of $10,000 or more, please contact our philanthropy department at
107
+ <a href="mailto:donations@archive.org">donations@archive.org</a>
108
+ `;
109
+ return;
110
+ }
111
+ if (amount < 1) {
112
+ if (this.amountInput && this.amountInput.value.length > 0) {
113
+ this.error = html `
114
+ The minimum donation amount is $1.
115
+ `;
116
+ }
117
+ return;
118
+ }
119
+ this.error = undefined;
120
+ this.amount = amount;
121
+ const event = new CustomEvent('amountChanged', { detail: { amount: this.amount } });
122
+ this.dispatchEvent(event);
123
+ }
124
+ yesSelected() {
125
+ const event = new CustomEvent('yesSelected', { detail: { amount: this.amount } });
126
+ this.dispatchEvent(event);
127
+ }
128
+ noThanksSelected() {
129
+ this.dispatchEvent(new Event('noThanksSelected'));
130
+ }
131
+ /** @inheritdoc */
132
+ static get styles() {
133
+ const ctaButtonColor = css `var(--upsellCTAButtonColor, #194880)`;
134
+ const ctaButtonDisabledColor = css `var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;
135
+ const amountInputOffset = css `var(--upsellAmountInputOffset, -1rem)`;
136
+ return css `
137
+ .monthly-amount {
138
+ background-color: #fff;
139
+ padding: 0.5rem 0.625rem;
140
+ border-radius: 5px;
141
+ text-align: center;
142
+ margin-bottom: 0.5rem;
143
+ margin-top: 0;
144
+ }
145
+
146
+ .monthly-amount h1 {
147
+ font-size: 1.8rem;
148
+ font-weight: bold;
149
+ text-align: center;
150
+ line-height: 1.2em;
151
+ margin: 0;
152
+ padding: 0.5rem 0 0 0;
153
+ }
154
+
155
+ .hidden {
156
+ display: none;
157
+ }
158
+
159
+ h3 {
160
+ text-align: center;
161
+ font-size: 1.8rem;
162
+ margin: 0 1rem 0.5rem 1rem;
163
+ }
164
+
165
+ .appeal {
166
+ text-align: center;
167
+ font-size: 1.6rem;
168
+ margin: 0.5rem 1rem;
169
+ }
170
+
171
+ .amount-input {
172
+ transform: translate(${amountInputOffset}, 0); /* translate slightly to center the input */
173
+ }
174
+
175
+ .amount-input .dollar-symbol {
176
+ font-size: 1.8rem;
177
+ font-weight: bold;
178
+ }
179
+
180
+ .amount-input input {
181
+ width: 100px;
182
+ text-align: center;
183
+ border: none;
184
+ border-bottom: 1px solid gray;
185
+ font-weight: bold;
186
+ font-size: 3.4rem;
187
+ }
188
+
189
+ .cta-button {
190
+ font-size: 2rem;
191
+ display: block;
192
+ width: 100%;
193
+ margin-top: 0.5rem;
194
+ padding: 1rem 2rem;
195
+ background-color: ${ctaButtonColor};
196
+ color: #fff;
197
+ border-radius: 5px;
198
+ border: 0;
199
+ font-weight: bold;
200
+ line-height: normal;
201
+ outline: none;
202
+ cursor: pointer;
203
+ }
204
+
205
+ .cta-button:disabled {
206
+ background-color: ${ctaButtonDisabledColor};
207
+ cursor: not-allowed;
208
+ }
209
+
210
+ .paypal-upsell-slot {
211
+ text-align: center;
212
+ }
213
+
214
+ .paypal-upsell-slot-blocker {
215
+ position: absolute;
216
+ width: 100%;
217
+ height: 4.5rem;
218
+ bottom: 0;
219
+ z-index: 250;
220
+ cursor: not-allowed;
221
+ background-color: rgba(255, 255, 255, 0.5);
222
+ }
223
+
224
+ .paypal-upsell-slot-blocker.hidden {
225
+ display: none;
226
+ }
227
+
228
+ #paypal-cover-button {
229
+ position: absolute;
230
+ width: 100%;
231
+ bottom: 0;
232
+ }
233
+
234
+ .paypal-upsell-slot-container {
235
+ position: relative;
236
+ }
237
+
238
+ .paypal-upsell-slot-container .paypal-cta {
239
+ font-size: 2.4rem;
240
+ font-weight: bold;
241
+ margin: 0 1rem 1rem 1rem;
242
+ text-align: center;
243
+ }
244
+
245
+ .error {
246
+ font-size: 1.4rem;
247
+ margin: 0.5rem 0;
248
+ color: red;
249
+ }
250
+
251
+ .or_separator {
252
+ position: relative;
253
+ margin: 0 2rem;
254
+ font-size: 2.6rem;
255
+ font-weight: bold;
256
+ text-transform: uppercase;
257
+ text-align: center;
258
+ }
259
+
260
+ .or_separator:before {
261
+ position: absolute;
262
+ top: calc(50% - 1px);
263
+ right: 0;
264
+ left: 0;
265
+ height: 2px;
266
+ content: '';
267
+ background: #333;
268
+ }
269
+
270
+ .or_separator span {
271
+ display: inline-block;
272
+ position: relative;
273
+ padding: 0 1rem;
274
+ background: #f5f5f7;
275
+ }
276
+ `;
277
+ }
278
+ };
279
+ __decorate([
280
+ property({ type: String })
281
+ ], UpsellModalContent.prototype, "yesButtonMode", void 0);
282
+ __decorate([
283
+ property({ type: Number })
284
+ ], UpsellModalContent.prototype, "amount", void 0);
285
+ __decorate([
286
+ property({ type: Object })
287
+ ], UpsellModalContent.prototype, "error", void 0);
288
+ __decorate([
289
+ query('#amount-input')
290
+ ], UpsellModalContent.prototype, "amountInput", void 0);
291
+ UpsellModalContent = __decorate([
292
+ customElement('upsell-modal-content')
293
+ ], UpsellModalContent);
294
+ export { UpsellModalContent };
295
295
  //# sourceMappingURL=upsell-modal-content.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upsell-modal-content.js","sourceRoot":"","sources":["../../../src/modals/upsell-modal-content.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css, CSSResult, TemplateResult } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { CurrencyValidator } from '@internetarchive/donation-form-currency-validator';\n\nexport enum UpsellModalCTAMode {\n YesButton = 'YesButton',\n PayPalUpsellSlot = 'PayPalUpsellSlot',\n}\n\n/**\n * This is the content that we show in the upsell modal.\n *\n * It has an amount input, \"Yes\" and \"No Thanks\" options and a switch to optionally\n * show the PayPal upsell button.\n *\n * @export\n * @class UpsellModalContent\n * @extends {LitElement}\n */\n@customElement('upsell-modal-content')\nexport class UpsellModalContent extends LitElement {\n @property({ type: String }) yesButtonMode: UpsellModalCTAMode = UpsellModalCTAMode.YesButton;\n\n @property({ type: Number }) amount = 5;\n\n @property({ type: Object }) error?: TemplateResult;\n\n @query('#amount-input') amountInput!: HTMLInputElement;\n\n private currencyValidator: CurrencyValidator = new CurrencyValidator();\n\n /** @inheritdoc */\n render(): TemplateResult {\n return html`\n <h3>Thank you for donating!</h3>\n <button @click=${this.noThanksSelected} class=\"cta-button\" id=\"no-button\">\n Continue\n </button>\n <p class=\"or_separator\"><span>or</span></p>\n <h3>Consider donating monthly</h3>\n <p class=\"appeal\">\n Monthly support helps us reliably plan for the future.\n </p>\n <div class=\"monthly-amount\">\n <h1>Enter your monthly amount</h1>\n <div class=\"amount-input\">\n <span class=\"dollar-symbol\">$</span>\n <input\n id=\"amount-input\"\n type=\"text\"\n tabindex=\"0\"\n value=${this.amount}\n @input=${this.amountChanged}\n @keydown=${this.currencyValidator.keydown}\n />\n </div>\n <div class=\"error ${this.error ? '' : 'hidden'}\">${this.error}</div>\n </div>\n\n ${this.yesButton}\n `;\n }\n\n private get yesButton(): TemplateResult {\n switch (this.yesButtonMode) {\n case UpsellModalCTAMode.YesButton:\n return html`\n <button\n class=\"cta-button\"\n tabindex=\"0\"\n id=\"yes-button\"\n @click=${this.yesSelected}\n .disabled=${this.error !== undefined}\n >\n YES, I'll donate monthly\n </button>\n `;\n case UpsellModalCTAMode.PayPalUpsellSlot:\n return html`\n <div class=\"paypal-upsell-slot-container\">\n <div class=\"paypal-upsell-slot-blocker ${this.error ? '' : 'hidden'}\"></div>\n <button class=\"cta-button\" id=\"paypal-cover-button\">\n YES, I'll donate monthly\n </button>\n <slot class=\"paypal-upsell-slot\"></slot>\n </div>\n `;\n }\n }\n\n private amountChanged(e: Event): void {\n const target = e.target as HTMLInputElement;\n const amount = target.value;\n if (amount.length === 0) {\n return;\n }\n this.handleCustomAmountInput(amount);\n }\n\n private handleCustomAmountInput(value: string): void {\n const amount = parseFloat(value);\n if (isNaN(amount)) {\n this.error = html`\n Please enter a valid amount.\n `;\n } else {\n this.processAmount(amount);\n }\n }\n\n private processAmount(amount: number): void {\n if (amount >= 10000) {\n this.error = html`\n To make a donation of $10,000 or more, please contact our philanthropy department at\n <a href=\"mailto:donations@archive.org\">donations@archive.org</a>\n `;\n return;\n }\n\n if (amount < 1) {\n if (this.amountInput && this.amountInput.value.length > 0) {\n this.error = html`\n The minimum donation amount is $1.\n `;\n }\n return;\n }\n\n this.error = undefined;\n\n this.amount = amount;\n\n const event = new CustomEvent('amountChanged', { detail: { amount: this.amount } });\n this.dispatchEvent(event);\n }\n\n private yesSelected(): void {\n const event = new CustomEvent('yesSelected', { detail: { amount: this.amount } });\n this.dispatchEvent(event);\n }\n\n private noThanksSelected(): void {\n this.dispatchEvent(new Event('noThanksSelected'));\n }\n\n /** @inheritdoc */\n static get styles(): CSSResult {\n const ctaButtonColor = css`var(--upsellCTAButtonColor, #194880)`;\n const ctaButtonDisabledColor = css`var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;\n const amountInputOffset = css`var(--upsellAmountInputOffset, -1rem)`;\n\n return css`\n .monthly-amount {\n background-color: #fff;\n padding: 0.5rem 0.625rem;\n border-radius: 5px;\n text-align: center;\n margin-bottom: 0.5rem;\n margin-top: 0;\n }\n\n .monthly-amount h1 {\n font-size: 1.8rem;\n font-weight: bold;\n text-align: center;\n line-height: 1.2em;\n margin: 0;\n padding: 0.5rem 0 0 0;\n }\n\n .hidden {\n display: none;\n }\n\n h3 {\n text-align: center;\n font-size: 1.8rem;\n margin: 0 1rem 0.5rem 1rem;\n }\n\n .appeal {\n text-align: center;\n font-size: 1.6rem;\n margin: 0.5rem 1rem;\n }\n\n .amount-input {\n transform: translate(${amountInputOffset}, 0); /* translate slightly to center the input */\n }\n\n .amount-input .dollar-symbol {\n font-size: 1.8rem;\n font-weight: bold;\n }\n\n .amount-input input {\n width: 100px;\n text-align: center;\n border: none;\n border-bottom: 1px solid gray;\n font-weight: bold;\n font-size: 3.4rem;\n }\n\n .cta-button {\n font-size: 2rem;\n display: block;\n width: 100%;\n margin-top: 0.5rem;\n padding: 1rem 2rem;\n background-color: ${ctaButtonColor};\n color: #fff;\n border-radius: 5px;\n border: 0;\n font-weight: bold;\n line-height: normal;\n outline: none;\n cursor: pointer;\n }\n\n .cta-button:disabled {\n background-color: ${ctaButtonDisabledColor};\n cursor: not-allowed;\n }\n\n .paypal-upsell-slot {\n text-align: center;\n }\n\n .paypal-upsell-slot-blocker {\n position: absolute;\n width: 100%;\n height: 4.5rem;\n bottom: 0;\n z-index: 250;\n cursor: not-allowed;\n background-color: rgba(255, 255, 255, 0.5);\n }\n\n .paypal-upsell-slot-blocker.hidden {\n display: none;\n }\n\n #paypal-cover-button {\n position: absolute;\n width: 100%;\n bottom: 0;\n }\n\n .paypal-upsell-slot-container {\n position: relative;\n }\n\n .paypal-upsell-slot-container .paypal-cta {\n font-size: 2.4rem;\n font-weight: bold;\n margin: 0 1rem 1rem 1rem;\n text-align: center;\n }\n\n .error {\n font-size: 1.4rem;\n margin: 0.5rem 0;\n color: red;\n }\n\n .or_separator {\n position: relative;\n margin: 0 2rem;\n font-size: 2.6rem;\n font-weight: bold;\n text-transform: uppercase;\n text-align: center;\n }\n\n .or_separator:before {\n position: absolute;\n top: calc(50% - 1px);\n right: 0;\n left: 0;\n height: 2px;\n content: '';\n background: #333;\n }\n\n .or_separator span {\n display: inline-block;\n position: relative;\n padding: 0 1rem;\n background: #f5f5f7;\n }\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"upsell-modal-content.js","sourceRoot":"","sources":["../../../src/modals/upsell-modal-content.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css, CSSResult, TemplateResult } from 'lit';\r\nimport { customElement, property, query } from 'lit/decorators.js';\r\nimport { CurrencyValidator } from '@internetarchive/donation-form-currency-validator';\r\n\r\nexport enum UpsellModalCTAMode {\r\n YesButton = 'YesButton',\r\n PayPalUpsellSlot = 'PayPalUpsellSlot',\r\n}\r\n\r\n/**\r\n * This is the content that we show in the upsell modal.\r\n *\r\n * It has an amount input, \"Yes\" and \"No Thanks\" options and a switch to optionally\r\n * show the PayPal upsell button.\r\n *\r\n * @export\r\n * @class UpsellModalContent\r\n * @extends {LitElement}\r\n */\r\n@customElement('upsell-modal-content')\r\nexport class UpsellModalContent extends LitElement {\r\n @property({ type: String }) yesButtonMode: UpsellModalCTAMode = UpsellModalCTAMode.YesButton;\r\n\r\n @property({ type: Number }) amount = 5;\r\n\r\n @property({ type: Object }) error?: TemplateResult;\r\n\r\n @query('#amount-input') amountInput!: HTMLInputElement;\r\n\r\n private currencyValidator: CurrencyValidator = new CurrencyValidator();\r\n\r\n /** @inheritdoc */\r\n render(): TemplateResult {\r\n return html`\r\n <h3>Thank you for donating!</h3>\r\n <button @click=${this.noThanksSelected} class=\"cta-button\" id=\"no-button\">\r\n Continue\r\n </button>\r\n <p class=\"or_separator\"><span>or</span></p>\r\n <h3>Consider donating monthly</h3>\r\n <p class=\"appeal\">\r\n Monthly support helps us reliably plan for the future.\r\n </p>\r\n <div class=\"monthly-amount\">\r\n <h1>Enter your monthly amount</h1>\r\n <div class=\"amount-input\">\r\n <span class=\"dollar-symbol\">$</span>\r\n <input\r\n id=\"amount-input\"\r\n type=\"text\"\r\n tabindex=\"0\"\r\n value=${this.amount}\r\n @input=${this.amountChanged}\r\n @keydown=${this.currencyValidator.keydown}\r\n />\r\n </div>\r\n <div class=\"error ${this.error ? '' : 'hidden'}\">${this.error}</div>\r\n </div>\r\n\r\n ${this.yesButton}\r\n `;\r\n }\r\n\r\n private get yesButton(): TemplateResult {\r\n switch (this.yesButtonMode) {\r\n case UpsellModalCTAMode.YesButton:\r\n return html`\r\n <button\r\n class=\"cta-button\"\r\n tabindex=\"0\"\r\n id=\"yes-button\"\r\n @click=${this.yesSelected}\r\n .disabled=${this.error !== undefined}\r\n >\r\n YES, I'll donate monthly\r\n </button>\r\n `;\r\n case UpsellModalCTAMode.PayPalUpsellSlot:\r\n return html`\r\n <div class=\"paypal-upsell-slot-container\">\r\n <div class=\"paypal-upsell-slot-blocker ${this.error ? '' : 'hidden'}\"></div>\r\n <button class=\"cta-button\" id=\"paypal-cover-button\">\r\n YES, I'll donate monthly\r\n </button>\r\n <slot class=\"paypal-upsell-slot\"></slot>\r\n </div>\r\n `;\r\n }\r\n }\r\n\r\n private amountChanged(e: Event): void {\r\n const target = e.target as HTMLInputElement;\r\n const amount = target.value;\r\n if (amount.length === 0) {\r\n return;\r\n }\r\n this.handleCustomAmountInput(amount);\r\n }\r\n\r\n private handleCustomAmountInput(value: string): void {\r\n const amount = parseFloat(value);\r\n if (isNaN(amount)) {\r\n this.error = html`\r\n Please enter a valid amount.\r\n `;\r\n } else {\r\n this.processAmount(amount);\r\n }\r\n }\r\n\r\n private processAmount(amount: number): void {\r\n if (amount >= 10000) {\r\n this.error = html`\r\n To make a donation of $10,000 or more, please contact our philanthropy department at\r\n <a href=\"mailto:donations@archive.org\">donations@archive.org</a>\r\n `;\r\n return;\r\n }\r\n\r\n if (amount < 1) {\r\n if (this.amountInput && this.amountInput.value.length > 0) {\r\n this.error = html`\r\n The minimum donation amount is $1.\r\n `;\r\n }\r\n return;\r\n }\r\n\r\n this.error = undefined;\r\n\r\n this.amount = amount;\r\n\r\n const event = new CustomEvent('amountChanged', { detail: { amount: this.amount } });\r\n this.dispatchEvent(event);\r\n }\r\n\r\n private yesSelected(): void {\r\n const event = new CustomEvent('yesSelected', { detail: { amount: this.amount } });\r\n this.dispatchEvent(event);\r\n }\r\n\r\n private noThanksSelected(): void {\r\n this.dispatchEvent(new Event('noThanksSelected'));\r\n }\r\n\r\n /** @inheritdoc */\r\n static get styles(): CSSResult {\r\n const ctaButtonColor = css`var(--upsellCTAButtonColor, #194880)`;\r\n const ctaButtonDisabledColor = css`var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;\r\n const amountInputOffset = css`var(--upsellAmountInputOffset, -1rem)`;\r\n\r\n return css`\r\n .monthly-amount {\r\n background-color: #fff;\r\n padding: 0.5rem 0.625rem;\r\n border-radius: 5px;\r\n text-align: center;\r\n margin-bottom: 0.5rem;\r\n margin-top: 0;\r\n }\r\n\r\n .monthly-amount h1 {\r\n font-size: 1.8rem;\r\n font-weight: bold;\r\n text-align: center;\r\n line-height: 1.2em;\r\n margin: 0;\r\n padding: 0.5rem 0 0 0;\r\n }\r\n\r\n .hidden {\r\n display: none;\r\n }\r\n\r\n h3 {\r\n text-align: center;\r\n font-size: 1.8rem;\r\n margin: 0 1rem 0.5rem 1rem;\r\n }\r\n\r\n .appeal {\r\n text-align: center;\r\n font-size: 1.6rem;\r\n margin: 0.5rem 1rem;\r\n }\r\n\r\n .amount-input {\r\n transform: translate(${amountInputOffset}, 0); /* translate slightly to center the input */\r\n }\r\n\r\n .amount-input .dollar-symbol {\r\n font-size: 1.8rem;\r\n font-weight: bold;\r\n }\r\n\r\n .amount-input input {\r\n width: 100px;\r\n text-align: center;\r\n border: none;\r\n border-bottom: 1px solid gray;\r\n font-weight: bold;\r\n font-size: 3.4rem;\r\n }\r\n\r\n .cta-button {\r\n font-size: 2rem;\r\n display: block;\r\n width: 100%;\r\n margin-top: 0.5rem;\r\n padding: 1rem 2rem;\r\n background-color: ${ctaButtonColor};\r\n color: #fff;\r\n border-radius: 5px;\r\n border: 0;\r\n font-weight: bold;\r\n line-height: normal;\r\n outline: none;\r\n cursor: pointer;\r\n }\r\n\r\n .cta-button:disabled {\r\n background-color: ${ctaButtonDisabledColor};\r\n cursor: not-allowed;\r\n }\r\n\r\n .paypal-upsell-slot {\r\n text-align: center;\r\n }\r\n\r\n .paypal-upsell-slot-blocker {\r\n position: absolute;\r\n width: 100%;\r\n height: 4.5rem;\r\n bottom: 0;\r\n z-index: 250;\r\n cursor: not-allowed;\r\n background-color: rgba(255, 255, 255, 0.5);\r\n }\r\n\r\n .paypal-upsell-slot-blocker.hidden {\r\n display: none;\r\n }\r\n\r\n #paypal-cover-button {\r\n position: absolute;\r\n width: 100%;\r\n bottom: 0;\r\n }\r\n\r\n .paypal-upsell-slot-container {\r\n position: relative;\r\n }\r\n\r\n .paypal-upsell-slot-container .paypal-cta {\r\n font-size: 2.4rem;\r\n font-weight: bold;\r\n margin: 0 1rem 1rem 1rem;\r\n text-align: center;\r\n }\r\n\r\n .error {\r\n font-size: 1.4rem;\r\n margin: 0.5rem 0;\r\n color: red;\r\n }\r\n\r\n .or_separator {\r\n position: relative;\r\n margin: 0 2rem;\r\n font-size: 2.6rem;\r\n font-weight: bold;\r\n text-transform: uppercase;\r\n text-align: center;\r\n }\r\n\r\n .or_separator:before {\r\n position: absolute;\r\n top: calc(50% - 1px);\r\n right: 0;\r\n left: 0;\r\n height: 2px;\r\n content: '';\r\n background: #333;\r\n }\r\n\r\n .or_separator span {\r\n display: inline-block;\r\n position: relative;\r\n padding: 0 1rem;\r\n background: #f5f5f7;\r\n }\r\n `;\r\n }\r\n}\r\n"]}