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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +115 -115
  3. package/dist/demo/braintree-endpoint-manager.d.ts +9 -9
  4. package/dist/demo/braintree-endpoint-manager.js +45 -45
  5. package/dist/demo/braintree-endpoint-manager.js.map +1 -1
  6. package/dist/demo/demo-analytics-handler.d.ts +17 -17
  7. package/dist/demo/demo-analytics-handler.js +13 -13
  8. package/dist/demo/demo-analytics-handler.js.map +1 -1
  9. package/dist/demo/submit-form-with.d.ts +7 -7
  10. package/dist/demo/submit-form-with.js +21 -21
  11. package/dist/demo/submit-form-with.js.map +1 -1
  12. package/dist/index.d.ts +7 -7
  13. package/dist/index.js +7 -7
  14. package/dist/index.js.map +1 -1
  15. package/dist/src/braintree-manager/braintree-interfaces.d.ts +147 -147
  16. package/dist/src/braintree-manager/braintree-interfaces.js +5 -5
  17. package/dist/src/braintree-manager/braintree-interfaces.js.map +1 -1
  18. package/dist/src/braintree-manager/braintree-manager.d.ts +124 -124
  19. package/dist/src/braintree-manager/braintree-manager.js +149 -149
  20. package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
  21. package/dist/src/braintree-manager/payment-clients.d.ts +47 -47
  22. package/dist/src/braintree-manager/payment-clients.js +116 -116
  23. package/dist/src/braintree-manager/payment-clients.js.map +1 -1
  24. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.d.ts +8 -8
  25. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js.map +1 -1
  26. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.d.ts +6 -6
  27. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js.map +1 -1
  28. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +10 -10
  29. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -1
  30. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +21 -21
  31. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js +99 -99
  32. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
  33. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.d.ts +10 -10
  34. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js +12 -12
  35. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -1
  36. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.d.ts +20 -20
  37. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js +71 -71
  38. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
  39. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.d.ts +16 -16
  40. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map +1 -1
  41. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.d.ts +29 -29
  42. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js +99 -99
  43. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
  44. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.d.ts +11 -11
  45. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js +7 -7
  46. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js.map +1 -1
  47. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.d.ts +34 -34
  48. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js +52 -52
  49. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
  50. package/dist/src/braintree-manager/payment-providers/google-pay-interface.d.ts +7 -7
  51. package/dist/src/braintree-manager/payment-providers/google-pay-interface.js.map +1 -1
  52. package/dist/src/braintree-manager/payment-providers/google-pay.d.ts +18 -18
  53. package/dist/src/braintree-manager/payment-providers/google-pay.js +40 -40
  54. package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
  55. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.d.ts +145 -145
  56. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js +60 -60
  57. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
  58. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.d.ts +11 -11
  59. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js.map +1 -1
  60. package/dist/src/braintree-manager/payment-providers/paypal/paypal.d.ts +23 -23
  61. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js +46 -46
  62. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
  63. package/dist/src/braintree-manager/payment-providers/venmo-interface.d.ts +6 -6
  64. package/dist/src/braintree-manager/payment-providers/venmo-interface.js.map +1 -1
  65. package/dist/src/braintree-manager/payment-providers/venmo.d.ts +28 -28
  66. package/dist/src/braintree-manager/payment-providers/venmo.js +50 -50
  67. package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
  68. package/dist/src/braintree-manager/payment-providers-interface.d.ts +16 -16
  69. package/dist/src/braintree-manager/payment-providers-interface.js.map +1 -1
  70. package/dist/src/braintree-manager/payment-providers.d.ts +45 -45
  71. package/dist/src/braintree-manager/payment-providers.js +105 -105
  72. package/dist/src/braintree-manager/payment-providers.js.map +1 -1
  73. package/dist/src/donation-form-controller.d.ts +116 -116
  74. package/dist/src/donation-form-controller.js +562 -562
  75. package/dist/src/donation-form-controller.js.map +1 -1
  76. package/dist/src/donation-form-error.d.ts +3 -3
  77. package/dist/src/donation-form-error.js +6 -6
  78. package/dist/src/donation-form-error.js.map +1 -1
  79. package/dist/src/donation-form.d.ts +120 -120
  80. package/dist/src/donation-form.js +530 -530
  81. package/dist/src/donation-form.js.map +1 -1
  82. package/dist/src/form-elements/badged-input.d.ts +32 -32
  83. package/dist/src/form-elements/badged-input.js +124 -124
  84. package/dist/src/form-elements/badged-input.js.map +1 -1
  85. package/dist/src/form-elements/contact-form/autocomplete-field-options.d.ts +1 -1
  86. package/dist/src/form-elements/contact-form/autocomplete-field-options.js.map +1 -1
  87. package/dist/src/form-elements/contact-form/contact-form.d.ts +53 -53
  88. package/dist/src/form-elements/contact-form/contact-form.js +428 -428
  89. package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
  90. package/dist/src/form-elements/contact-form/countries.d.ts +3 -3
  91. package/dist/src/form-elements/contact-form/countries.js +252 -252
  92. package/dist/src/form-elements/contact-form/countries.js.map +1 -1
  93. package/dist/src/form-elements/header/donation-form-header.d.ts +27 -27
  94. package/dist/src/form-elements/header/donation-form-header.js +97 -97
  95. package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
  96. package/dist/src/form-elements/header/donation-summary.d.ts +11 -11
  97. package/dist/src/form-elements/header/donation-summary.js +57 -57
  98. package/dist/src/form-elements/header/donation-summary.js.map +1 -1
  99. package/dist/src/form-elements/payment-selector.d.ts +25 -25
  100. package/dist/src/form-elements/payment-selector.js +286 -286
  101. package/dist/src/form-elements/payment-selector.js.map +1 -1
  102. package/dist/src/form-elements/total-amount.d.ts +8 -8
  103. package/dist/src/form-elements/total-amount.js +47 -47
  104. package/dist/src/form-elements/total-amount.js.map +1 -1
  105. package/dist/src/modals/confirm-donation-modal-content.d.ts +31 -31
  106. package/dist/src/modals/confirm-donation-modal-content.js +168 -168
  107. package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
  108. package/dist/src/modals/error-modal-content.d.ts +14 -14
  109. package/dist/src/modals/error-modal-content.js +49 -49
  110. package/dist/src/modals/error-modal-content.js.map +1 -1
  111. package/dist/src/modals/upsell-modal-content.d.ts +32 -32
  112. package/dist/src/modals/upsell-modal-content.js +294 -294
  113. package/dist/src/modals/upsell-modal-content.js.map +1 -1
  114. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.d.ts +181 -181
  115. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +252 -252
  116. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
  117. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.d.ts +21 -21
  118. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js +76 -76
  119. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
  120. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.d.ts +70 -70
  121. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js +140 -140
  122. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
  123. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.d.ts +22 -22
  124. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js +74 -74
  125. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
  126. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.d.ts +52 -52
  127. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +239 -239
  128. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
  129. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.d.ts +30 -30
  130. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js +89 -89
  131. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
  132. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.d.ts +75 -75
  133. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js +94 -94
  134. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
  135. package/dist/src/payment-flow-handlers/payment-flow-handlers.d.ts +111 -111
  136. package/dist/src/payment-flow-handlers/payment-flow-handlers.js +107 -107
  137. package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
  138. package/dist/src/recaptcha-manager/recaptcha-manager.d.ts +48 -48
  139. package/dist/src/recaptcha-manager/recaptcha-manager.js +88 -88
  140. package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
  141. package/dist/src/util/promisedSleep.d.ts +1 -1
  142. package/dist/src/util/promisedSleep.js +3 -3
  143. package/dist/src/util/promisedSleep.js.map +1 -1
  144. package/dist/test/helpers/fillInContactForm.d.ts +2 -2
  145. package/dist/test/helpers/fillInContactForm.js +19 -19
  146. package/dist/test/helpers/fillInContactForm.js.map +1 -1
  147. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.d.ts +7 -7
  148. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js +9 -9
  149. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
  150. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.d.ts +15 -15
  151. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js +32 -32
  152. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
  153. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.d.ts +9 -9
  154. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js +15 -15
  155. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
  156. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.d.ts +15 -15
  157. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js +30 -30
  158. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
  159. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.d.ts +9 -9
  160. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js +17 -17
  161. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
  162. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.d.ts +30 -30
  163. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js +29 -29
  164. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
  165. package/dist/test/mocks/mock-analytics-handler.d.ts +8 -0
  166. package/dist/test/mocks/mock-analytics-handler.js +10 -0
  167. package/dist/test/mocks/mock-analytics-handler.js.map +1 -0
  168. package/dist/test/mocks/mock-braintree-manager.d.ts +45 -45
  169. package/dist/test/mocks/mock-braintree-manager.js +71 -71
  170. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  171. package/dist/test/mocks/mock-donation-info.d.ts +4 -4
  172. package/dist/test/mocks/mock-donation-info.js +10 -10
  173. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  174. package/dist/test/mocks/mock-endpoint-manager.d.ts +12 -12
  175. package/dist/test/mocks/mock-endpoint-manager.js +19 -19
  176. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  177. package/dist/test/mocks/mock-hosted-fields-config.d.ts +4 -4
  178. package/dist/test/mocks/mock-hosted-fields-config.js +37 -37
  179. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  180. package/dist/test/mocks/mock-hosted-fields-container.d.ts +13 -13
  181. package/dist/test/mocks/mock-hosted-fields-container.js +27 -27
  182. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  183. package/dist/test/mocks/mock-lazy-loader.d.ts +15 -15
  184. package/dist/test/mocks/mock-lazy-loader.js +20 -20
  185. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  186. package/dist/test/mocks/mock-modal-manager.d.ts +17 -17
  187. package/dist/test/mocks/mock-modal-manager.js +26 -26
  188. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  189. package/dist/test/mocks/mock-payment-clients.d.ts +29 -29
  190. package/dist/test/mocks/mock-payment-clients.js +78 -78
  191. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  192. package/dist/test/mocks/mock-paypal-button-renderer.d.ts +5 -5
  193. package/dist/test/mocks/mock-paypal-button-renderer.js +6 -6
  194. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  195. package/dist/test/mocks/mock-recaptcha-manager.d.ts +7 -7
  196. package/dist/test/mocks/mock-recaptcha-manager.js +14 -14
  197. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  198. package/dist/test/mocks/models/mock-billing-info.d.ts +2 -2
  199. package/dist/test/mocks/models/mock-billing-info.js +9 -9
  200. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  201. package/dist/test/mocks/models/mock-custom-fields.d.ts +2 -2
  202. package/dist/test/mocks/models/mock-custom-fields.js +7 -7
  203. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  204. package/dist/test/mocks/models/mock-customer-info.d.ts +2 -2
  205. package/dist/test/mocks/models/mock-customer-info.js +6 -6
  206. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  207. package/dist/test/mocks/models/mock-donation-request.d.ts +2 -2
  208. package/dist/test/mocks/models/mock-donation-request.js +18 -18
  209. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  210. package/dist/test/mocks/models/mock-success-response.d.ts +2 -2
  211. package/dist/test/mocks/models/mock-success-response.js +14 -14
  212. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  213. package/dist/test/mocks/payment-clients/mock-applepay-client.d.ts +21 -21
  214. package/dist/test/mocks/payment-clients/mock-applepay-client.js +72 -72
  215. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  216. package/dist/test/mocks/payment-clients/mock-applepay-payment.d.ts +6 -6
  217. package/dist/test/mocks/payment-clients/mock-applepay-payment.js +42 -42
  218. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  219. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.d.ts +22 -22
  220. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js +35 -35
  221. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  222. package/dist/test/mocks/payment-clients/mock-applepay-session.d.ts +30 -30
  223. package/dist/test/mocks/payment-clients/mock-applepay-session.js +52 -52
  224. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  225. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.d.ts +10 -10
  226. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js +12 -12
  227. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  228. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.d.ts +22 -22
  229. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js +34 -34
  230. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  231. package/dist/test/mocks/payment-clients/mock-braintree-client.d.ts +14 -14
  232. package/dist/test/mocks/payment-clients/mock-braintree-client.js +19 -19
  233. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  234. package/dist/test/mocks/payment-clients/mock-data-collector.d.ts +11 -11
  235. package/dist/test/mocks/payment-clients/mock-data-collector.js +17 -17
  236. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  237. package/dist/test/mocks/payment-clients/mock-googlepay-client.d.ts +22 -22
  238. package/dist/test/mocks/payment-clients/mock-googlepay-client.js +42 -42
  239. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  240. package/dist/test/mocks/payment-clients/mock-googlepay-library.d.ts +10 -10
  241. package/dist/test/mocks/payment-clients/mock-googlepay-library.js +22 -22
  242. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  243. package/dist/test/mocks/payment-clients/mock-grecaptcha.d.ts +23 -23
  244. package/dist/test/mocks/payment-clients/mock-grecaptcha.js +62 -62
  245. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  246. package/dist/test/mocks/payment-clients/mock-hostedfields-client.d.ts +33 -33
  247. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js +54 -54
  248. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  249. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.d.ts +1 -1
  250. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js +50 -50
  251. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  252. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.d.ts +1 -1
  253. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js +13 -13
  254. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  255. package/dist/test/mocks/payment-clients/mock-paypal-client.d.ts +23 -23
  256. package/dist/test/mocks/payment-clients/mock-paypal-client.js +62 -62
  257. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  258. package/dist/test/mocks/payment-clients/mock-paypal-library.d.ts +4 -4
  259. package/dist/test/mocks/payment-clients/mock-paypal-library.js +9 -9
  260. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  261. package/dist/test/mocks/payment-clients/mock-venmo-client.d.ts +22 -22
  262. package/dist/test/mocks/payment-clients/mock-venmo-client.js +36 -36
  263. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  264. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.d.ts +10 -10
  265. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js +14 -14
  266. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  267. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.d.ts +9 -9
  268. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js +19 -19
  269. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  270. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.d.ts +18 -18
  271. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js +41 -41
  272. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  273. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.d.ts +8 -8
  274. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js +16 -16
  275. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  276. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.d.ts +28 -28
  277. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js +52 -52
  278. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  279. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.d.ts +11 -11
  280. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js +37 -37
  281. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  282. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.d.ts +12 -12
  283. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js +15 -15
  284. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  285. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.d.ts +7 -7
  286. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js +22 -22
  287. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  288. package/dist/test/mocks/payment-providers/mock-payment-providers.d.ts +21 -21
  289. package/dist/test/mocks/payment-providers/mock-payment-providers.js +45 -45
  290. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  291. package/dist/test/tests/braintree-manager.test.d.ts +1 -1
  292. package/dist/test/tests/braintree-manager.test.js +166 -166
  293. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  294. package/dist/test/tests/donation-form-controller.test.d.ts +1 -1
  295. package/dist/test/tests/donation-form-controller.test.js +188 -188
  296. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  297. package/dist/test/tests/donation-form.test.d.ts +1 -1
  298. package/dist/test/tests/donation-form.test.js +109 -109
  299. package/dist/test/tests/donation-form.test.js.map +1 -1
  300. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.d.ts +1 -1
  301. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +216 -216
  302. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  303. package/dist/test/tests/form-elements/donation-summary.test.d.ts +1 -1
  304. package/dist/test/tests/form-elements/donation-summary.test.js +36 -36
  305. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  306. package/dist/test/tests/form-elements/payment-selector.test.d.ts +1 -1
  307. package/dist/test/tests/form-elements/payment-selector.test.js +69 -69
  308. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  309. package/dist/test/tests/modals/error-modal-content.test.d.ts +1 -1
  310. package/dist/test/tests/modals/error-modal-content.test.js +14 -14
  311. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  312. package/dist/test/tests/modals/upsell-modal-content.test.d.ts +1 -1
  313. package/dist/test/tests/modals/upsell-modal-content.test.js +163 -163
  314. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  315. package/dist/test/tests/models/donation-payment-info.test.d.ts +1 -1
  316. package/dist/test/tests/models/donation-payment-info.test.js +74 -74
  317. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  318. package/dist/test/tests/payment-clients.test.d.ts +1 -1
  319. package/dist/test/tests/payment-clients.test.js +130 -130
  320. package/dist/test/tests/payment-clients.test.js.map +1 -1
  321. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.d.ts +1 -1
  322. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js +160 -160
  323. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  324. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.d.ts +1 -1
  325. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js +36 -36
  326. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  327. package/dist/test/tests/payment-providers/applepay.test.d.ts +1 -1
  328. package/dist/test/tests/payment-providers/applepay.test.js +78 -78
  329. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  330. package/dist/test/tests/payment-providers/creditcard.test.d.ts +1 -1
  331. package/dist/test/tests/payment-providers/creditcard.test.js +190 -190
  332. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  333. package/dist/test/tests/payment-providers/googlepay.test.d.ts +1 -1
  334. package/dist/test/tests/payment-providers/googlepay.test.js +48 -48
  335. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  336. package/dist/test/tests/payment-providers/payment-providers.test.d.ts +1 -1
  337. package/dist/test/tests/payment-providers/payment-providers.test.js +38 -38
  338. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  339. package/dist/test/tests/payment-providers/paypal-button-datasource.test.d.ts +1 -1
  340. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js +162 -162
  341. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  342. package/dist/test/tests/payment-providers/paypal.test.d.ts +1 -1
  343. package/dist/test/tests/payment-providers/paypal.test.js +38 -38
  344. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  345. package/dist/test/tests/payment-providers/venmo.test.d.ts +1 -1
  346. package/dist/test/tests/payment-providers/venmo.test.js +77 -77
  347. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  348. package/dist/test/tests/recaptcha-manager.test.d.ts +1 -1
  349. package/dist/test/tests/recaptcha-manager.test.js +70 -70
  350. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  351. package/package.json +101 -101
  352. package/src/@types/analytics-handler/index.d.ts +8 -8
  353. package/src/@types/braintree-web/LICENSE +21 -21
  354. package/src/@types/braintree-web/index.d.ts +93 -93
  355. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  356. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  357. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  358. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  359. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  360. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  361. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  362. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  363. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  364. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  365. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  366. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  367. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  368. package/src/@types/braintree-web/package.json +64 -64
  369. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  370. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  371. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  372. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  373. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  374. package/src/@types/paypal-checkout-components/package.json +58 -58
  375. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  376. package/src/braintree-manager/braintree-manager.ts +283 -283
  377. package/src/braintree-manager/payment-clients.ts +148 -148
  378. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  379. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  380. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  381. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  382. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  383. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +98 -98
  384. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  385. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  386. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  387. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  388. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  389. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  390. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  391. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  392. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  393. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  394. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  395. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  396. package/src/braintree-manager/payment-providers.ts +147 -147
  397. package/src/donation-form-controller.ts +619 -619
  398. package/src/donation-form-error.ts +6 -6
  399. package/src/donation-form.ts +566 -566
  400. package/src/form-elements/badged-input.ts +113 -113
  401. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  402. package/src/form-elements/contact-form/contact-form.ts +427 -427
  403. package/src/form-elements/contact-form/countries.ts +252 -252
  404. package/src/form-elements/header/donation-form-header.ts +100 -100
  405. package/src/form-elements/header/donation-summary.ts +61 -61
  406. package/src/form-elements/payment-selector.ts +293 -293
  407. package/src/form-elements/total-amount.ts +46 -46
  408. package/src/modals/confirm-donation-modal-content.ts +160 -160
  409. package/src/modals/error-modal-content.ts +48 -48
  410. package/src/modals/upsell-modal-content.ts +294 -294
  411. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +450 -450
  412. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +108 -108
  413. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +231 -231
  414. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +113 -113
  415. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +332 -332
  416. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +118 -118
  417. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  418. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  419. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  420. package/src/util/promisedSleep.ts +3 -3
@@ -1,429 +1,429 @@
1
- import { __decorate } from "tslib";
2
- import { LitElement, html, css } from 'lit';
3
- import { customElement, property, query } from 'lit/decorators.js';
4
- import { ifDefined } from 'lit/directives/if-defined.js';
5
- import { BillingInfo, CustomerInfo, DonorContactInfo, } from '@internetarchive/donation-form-data-models';
6
- import { SpacerOption } from '../badged-input';
7
- import '../badged-input';
8
- import emailImg from '@internetarchive/icon-email';
9
- import localePinImg from '@internetarchive/icon-locale-pin';
10
- import userIcon from '@internetarchive/icon-user';
11
- import { countries } from './countries';
12
- let ContactForm = class ContactForm extends LitElement {
13
- constructor() {
14
- super(...arguments);
15
- /** @keyof countries */
16
- this.selectedCountry = 'US';
17
- }
18
- reportValidity() {
19
- const fieldBadgedInputs = [
20
- [this.emailField, this.emailBadgedInput],
21
- [this.firstNameField, this.firstNameBadgedInput],
22
- [this.lastNameField, this.lastNameBadgedInput],
23
- [this.regionField, this.regionBadgedInput],
24
- [this.localityField, this.localityBadgedInput],
25
- [this.streetAddressField, this.streetAddressBadgedInput],
26
- [this.postalCodeField, this.postalBadgedInput],
27
- ];
28
- let isValid = true;
29
- fieldBadgedInputs.forEach(([inputElement, badgedInput]) => {
30
- const fieldValid = inputElement.checkValidity();
31
- isValid = isValid && fieldValid;
32
- if (!fieldValid) {
33
- badgedInput.error = true;
34
- }
35
- });
36
- if (!isValid) {
37
- this.errorMessage.innerText = 'Please enter any missing contact information below';
38
- }
39
- else {
40
- this.errorMessage.innerText = '';
41
- }
42
- return isValid;
43
- }
44
- focus() {
45
- this.emailField.focus();
46
- }
47
- /** @inheritdoc */
48
- render() {
49
- return html `
50
- <div id="donation-contact-form-error-message"></div>
51
- <form>
52
- <fieldset>
53
- <div class="row">
54
- ${this.generateInput({
55
- id: 'donation-contact-form-email',
56
- placeholder: 'Email',
57
- required: true,
58
- fieldType: 'email',
59
- name: 'email',
60
- autocomplete: 'email',
61
- maxlength: 255,
62
- icon: emailImg,
63
- })}
64
- </div>
65
- </fieldset>
66
-
67
- <fieldset>
68
- <div class="row">
69
- ${this.generateInput({
70
- id: 'donation-contact-form-first-name',
71
- placeholder: 'First name',
72
- name: 'fname',
73
- required: true,
74
- maxlength: 255,
75
- autocomplete: 'given-name',
76
- icon: userIcon,
77
- })}
78
- </div>
79
- <div class="row">
80
- ${this.generateInput({
81
- id: 'donation-contact-form-last-name',
82
- placeholder: 'Last name',
83
- name: 'lname',
84
- autocomplete: 'family-name',
85
- required: true,
86
- maxlength: 255,
87
- })}
88
- </div>
89
- </fieldset>
90
- <fieldset>
91
- <div class="row">
92
- ${this.generateInput({
93
- id: 'donation-contact-form-street-address',
94
- placeholder: 'Address Line 1',
95
- required: true,
96
- autocomplete: 'address-line1',
97
- icon: localePinImg,
98
- name: 'street-address',
99
- })}
100
- </div>
101
- <div class="row">
102
- ${this.generateInput({
103
- id: 'donation-contact-form-extended-address',
104
- placeholder: 'Address Line 2 (optional)',
105
- autocomplete: 'address-line2',
106
- required: false,
107
- name: 'extended-address',
108
- })}
109
- </div>
110
- <div class="row">
111
- ${this.generateInput({
112
- id: 'donation-contact-form-locality',
113
- placeholder: 'City',
114
- autocomplete: 'address-level2',
115
- required: true,
116
- name: 'locality',
117
- })}
118
- </div>
119
- <div class="row">
120
- ${this.generateInput({
121
- id: 'donation-contact-form-region',
122
- placeholder: 'State / Province',
123
- autocomplete: 'address-level1',
124
- required: true,
125
- name: 'region',
126
- })}
127
- ${this.generateInput({
128
- id: 'donation-contact-form-postal-code',
129
- placeholder: 'Zip / Postal',
130
- autocomplete: 'postal-code',
131
- required: true,
132
- name: 'postal',
133
- maxlength: 9,
134
- // must start with a character, then may contain spaces
135
- validationPattern: '[a-zA-Z\\-\\d]+[a-zA-Z\\-\\d\\s]*',
136
- iconSpaceOption: SpacerOption.CompressSpace,
137
- })}
138
- </div>
139
- <div class="row">
140
- ${this.countrySelectorTemplate}
141
- </div>
142
- </fieldset>
143
- </form>
144
- ${this.getStyles}
145
- `;
146
- }
147
- get countrySelectorTemplate() {
148
- return html `
149
- <badged-input>
150
- <select id="donation-contact-form-countryCodeAlpha2"
151
- @change=${(e) => {
152
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
153
- const currCountry = this.selectedCountry;
154
- this.selectedCountry = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.value) ? (_b = e.target) === null || _b === void 0 ? void 0 : _b.value : currCountry;
155
- // update required visual cue on region/state/province & postal code fields
156
- if (this.selectedCountry === 'US') {
157
- (_c = this.postalBadgedInput) === null || _c === void 0 ? void 0 : _c.setAttribute('required', '');
158
- (_d = this.postalCodeField) === null || _d === void 0 ? void 0 : _d.setAttribute('required', '');
159
- (_e = this.regionBadgedInput) === null || _e === void 0 ? void 0 : _e.setAttribute('required', '');
160
- (_f = this.regionField) === null || _f === void 0 ? void 0 : _f.setAttribute('required', '');
161
- }
162
- else {
163
- (_g = this.postalBadgedInput) === null || _g === void 0 ? void 0 : _g.removeAttribute('required');
164
- (_h = this.postalCodeField) === null || _h === void 0 ? void 0 : _h.removeAttribute('required');
165
- (_j = this.regionBadgedInput) === null || _j === void 0 ? void 0 : _j.removeAttribute('required');
166
- (_k = this.regionField) === null || _k === void 0 ? void 0 : _k.removeAttribute('required');
167
- }
168
- }}>
169
- ${Object.keys(countries).map(key => {
170
- const name = countries[key];
171
- return html `
172
- <option value=${key} ?selected=${key === this.selectedCountry}>${name}</option>
173
- `;
174
- })}
175
- </select>
176
- </badged-input>
177
- `;
178
- }
179
- /** @inheritdoc */
180
- createRenderRoot() {
181
- // Render template without shadow DOM. Note that shadow DOM features like
182
- // encapsulated CSS and slots are unavailable.
183
- // Form autofill does not work properly in the shadow DOM
184
- // so we need our form fields in the light DOM
185
- return this;
186
- }
187
- // reset the error state when the user focuses the input
188
- inputFocused(e) {
189
- this.errorMessage.innerText = '';
190
- const input = e.target;
191
- const inputIdentifier = input.id;
192
- const badgedInput = this.querySelector(`badged-input.${inputIdentifier}`);
193
- badgedInput.error = false;
194
- }
195
- generateInput(options) {
196
- var _a, _b, _c, _d;
197
- const required = (_a = options.required) !== null && _a !== void 0 ? _a : true;
198
- const fieldType = (_b = options.fieldType) !== null && _b !== void 0 ? _b : 'text';
199
- const iconOption = (_c = options.iconSpaceOption) !== null && _c !== void 0 ? _c : SpacerOption.LeaveSpace;
200
- return html `
201
- <badged-input
202
- class=${options.id}
203
- .icon=${options.icon}
204
- .iconSpaceOption=${iconOption}
205
- ?required=${options.required}
206
- >
207
- <label for=${options.id}>${options.placeholder}</label>
208
- <input
209
- type=${fieldType}
210
- id=${options.id}
211
- class="donation-contact-form-input"
212
- name=${options.name}
213
- aria-label=${options.placeholder}
214
- placeholder=${options.placeholder}
215
- maxlength=${ifDefined(options.maxlength)}
216
- autocomplete=${(_d = options.autocomplete) !== null && _d !== void 0 ? _d : 'on'}
217
- pattern=${ifDefined(options.validationPattern)}
218
- @focus=${this.inputFocused}
219
- ?required=${required}
220
- />
221
- </badged-input>
222
- `;
223
- }
224
- get donorContactInfo() {
225
- return new DonorContactInfo({
226
- billing: this.billingInfo,
227
- customer: this.contactInfo,
228
- });
229
- }
230
- get billingInfo() {
231
- const billingInfo = new BillingInfo({
232
- streetAddress: this.streetAddressField.value,
233
- extendedAddress: this.extendedAddressField.value,
234
- locality: this.localityField.value,
235
- region: this.regionField.value,
236
- postalCode: this.postalCodeField.value,
237
- countryCodeAlpha2: this.countryCodeAlpha2Field.value,
238
- });
239
- return billingInfo;
240
- }
241
- get contactInfo() {
242
- return new CustomerInfo({
243
- email: this.emailField.value,
244
- firstName: this.firstNameField.value,
245
- lastName: this.lastNameField.value,
246
- });
247
- }
248
- /**
249
- * This is not the normal LitElement styles block.
250
- *
251
- * This element uses the clear DOM instead of the shadow DOM so it can't use
252
- * the shadowRoot's isolated styling. This is a bit of a workaround to keep all of
253
- * the styling local by writing out our own <style> tag and just be careful about
254
- * the selectors since they will leak outside of this component.
255
- *
256
- * @readonly
257
- * @private
258
- * @type {TemplateResult}
259
- * @memberof ContactForm
260
- */
261
- get getStyles() {
262
- const noIconSpacerWidth = css `var(--badgedInputNoIconSpacerWidth, 3rem)`;
263
- const iconSpacerWidth = css `var(--badgedInputIconSpacerWidth, 5rem)`;
264
- const fieldSetSpacing = css `var(--fieldSetSpacing, 1rem)`;
265
- const fieldFontFamily = css `var(--fontFamily, "Helvetica Neue", Helvetica, Arial, sans-serif)`;
266
- const fieldFontSize = css `var(--contactFieldFontSize, 1.6rem)`;
267
- const fieldFontColor = css `var(--inputFieldFontColor, #333)`;
268
- const iconFieldWidth = css `calc(100% - ${iconSpacerWidth})`;
269
- const noIconFieldWidth = css `calc(100% - ${noIconSpacerWidth})`;
270
- return html `
271
- <style>
272
- /*
273
- **NOTE**
274
- This element is in the lightDOM so be sure to prefix all styles
275
- with "contact-form" so styles don't leak.
276
- */
277
- contact-form fieldset {
278
- border: 0;
279
- padding: 0;
280
- margin: 0;
281
- margin-bottom: ${fieldSetSpacing};
282
- background-color: white;
283
- }
284
-
285
- /* These 1px and 0 margins in the next few selectors are to account for the
286
- double outlines caused by the fields being right next to each other */
287
- contact-form .row {
288
- display: flex;
289
- margin: -1px 0 0 0;
290
- }
291
-
292
- contact-form fieldset .row:first-child {
293
- margin-top: 0;
294
- }
295
-
296
- contact-form badged-input.donation-contact-form-region {
297
- width: 60%;
298
- }
299
-
300
- contact-form badged-input.donation-contact-form-postal-code {
301
- width: 40%;
302
- }
303
-
304
- contact-form #donation-contact-form-region {
305
- width: ${iconFieldWidth};
306
- }
307
-
308
- contact-form #donation-contact-form-postal-code {
309
- width: ${noIconFieldWidth};
310
- }
311
-
312
- contact-form #donation-contact-form-error-message {
313
- color: red;
314
- font-size: 1.4rem;
315
- margin-bottom: 0.6rem;
316
- }
317
-
318
- contact-form #donation-contact-form-last-name {
319
- width: ${noIconFieldWidth};
320
- }
321
-
322
- /* only show for screen readers */
323
- contact-form label {
324
- position: absolute;
325
- left: -10000px;
326
- top: auto;
327
- width: 1px;
328
- height: 1px;
329
- overflow: hidden;
330
- }
331
-
332
- contact-form .donation-contact-form-input {
333
- width: ${iconFieldWidth};
334
- border: 0;
335
- outline: 0;
336
- background: transparent;
337
- font-weight: bold;
338
- color: ${fieldFontColor};
339
- font-size: ${fieldFontSize};
340
- padding: 0;
341
- font-family: ${fieldFontFamily};
342
- }
343
-
344
- contact-form .donation-contact-form-input::placeholder {
345
- color: revert;
346
- }
347
-
348
- contact-form #donation-contact-form-countryCodeAlpha2 {
349
- width: ${iconFieldWidth};
350
- height: 100%;
351
- box-sizing: border-box;
352
- font-weight: bold;
353
- font-size: ${fieldFontSize};
354
- font-family: ${fieldFontFamily};
355
- border: 0;
356
- background: #fff;
357
- -webkit-appearance: none;
358
- -moz-appearance: none;
359
- appearance: none;
360
- }
361
- </style>
362
- `;
363
- }
364
- };
365
- __decorate([
366
- query('badged-input.donation-contact-form-email')
367
- ], ContactForm.prototype, "emailBadgedInput", void 0);
368
- __decorate([
369
- query('#donation-contact-form-email')
370
- ], ContactForm.prototype, "emailField", void 0);
371
- __decorate([
372
- query('badged-input.donation-contact-form-first-name')
373
- ], ContactForm.prototype, "firstNameBadgedInput", void 0);
374
- __decorate([
375
- query('#donation-contact-form-first-name')
376
- ], ContactForm.prototype, "firstNameField", void 0);
377
- __decorate([
378
- query('badged-input.donation-contact-form-last-name')
379
- ], ContactForm.prototype, "lastNameBadgedInput", void 0);
380
- __decorate([
381
- query('#donation-contact-form-last-name')
382
- ], ContactForm.prototype, "lastNameField", void 0);
383
- __decorate([
384
- query('badged-input.donation-contact-form-postal-code')
385
- ], ContactForm.prototype, "postalBadgedInput", void 0);
386
- __decorate([
387
- query('#donation-contact-form-postal-code')
388
- ], ContactForm.prototype, "postalCodeField", void 0);
389
- __decorate([
390
- query('badged-input.donation-contact-form-street-address')
391
- ], ContactForm.prototype, "streetAddressBadgedInput", void 0);
392
- __decorate([
393
- query('#donation-contact-form-street-address')
394
- ], ContactForm.prototype, "streetAddressField", void 0);
395
- __decorate([
396
- query('badged-input.donation-contact-form-extended-address')
397
- ], ContactForm.prototype, "extendedAddressBadgedInput", void 0);
398
- __decorate([
399
- query('#donation-contact-form-extended-address')
400
- ], ContactForm.prototype, "extendedAddressField", void 0);
401
- __decorate([
402
- query('badged-input.donation-contact-form-locality')
403
- ], ContactForm.prototype, "localityBadgedInput", void 0);
404
- __decorate([
405
- query('#donation-contact-form-locality')
406
- ], ContactForm.prototype, "localityField", void 0);
407
- __decorate([
408
- query('badged-input.donation-contact-form-region')
409
- ], ContactForm.prototype, "regionBadgedInput", void 0);
410
- __decorate([
411
- query('#donation-contact-form-region')
412
- ], ContactForm.prototype, "regionField", void 0);
413
- __decorate([
414
- query('#donation-contact-form-countryCodeAlpha2')
415
- ], ContactForm.prototype, "countryCodeAlpha2Field", void 0);
416
- __decorate([
417
- query('#donation-contact-form-error-message')
418
- ], ContactForm.prototype, "errorMessage", void 0);
419
- __decorate([
420
- query('form')
421
- ], ContactForm.prototype, "form", void 0);
422
- __decorate([
423
- property({ type: String })
424
- ], ContactForm.prototype, "selectedCountry", void 0);
425
- ContactForm = __decorate([
426
- customElement('contact-form')
427
- ], ContactForm);
428
- export { ContactForm };
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import { BillingInfo, CustomerInfo, DonorContactInfo, } from '@internetarchive/donation-form-data-models';
6
+ import { SpacerOption } from '../badged-input';
7
+ import '../badged-input';
8
+ import emailImg from '@internetarchive/icon-email';
9
+ import localePinImg from '@internetarchive/icon-locale-pin';
10
+ import userIcon from '@internetarchive/icon-user';
11
+ import { countries } from './countries';
12
+ let ContactForm = class ContactForm extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ /** @keyof countries */
16
+ this.selectedCountry = 'US';
17
+ }
18
+ reportValidity() {
19
+ const fieldBadgedInputs = [
20
+ [this.emailField, this.emailBadgedInput],
21
+ [this.firstNameField, this.firstNameBadgedInput],
22
+ [this.lastNameField, this.lastNameBadgedInput],
23
+ [this.regionField, this.regionBadgedInput],
24
+ [this.localityField, this.localityBadgedInput],
25
+ [this.streetAddressField, this.streetAddressBadgedInput],
26
+ [this.postalCodeField, this.postalBadgedInput],
27
+ ];
28
+ let isValid = true;
29
+ fieldBadgedInputs.forEach(([inputElement, badgedInput]) => {
30
+ const fieldValid = inputElement.checkValidity();
31
+ isValid = isValid && fieldValid;
32
+ if (!fieldValid) {
33
+ badgedInput.error = true;
34
+ }
35
+ });
36
+ if (!isValid) {
37
+ this.errorMessage.innerText = 'Please enter any missing contact information below';
38
+ }
39
+ else {
40
+ this.errorMessage.innerText = '';
41
+ }
42
+ return isValid;
43
+ }
44
+ focus() {
45
+ this.emailField.focus();
46
+ }
47
+ /** @inheritdoc */
48
+ render() {
49
+ return html `
50
+ <div id="donation-contact-form-error-message"></div>
51
+ <form>
52
+ <fieldset>
53
+ <div class="row">
54
+ ${this.generateInput({
55
+ id: 'donation-contact-form-email',
56
+ placeholder: 'Email',
57
+ required: true,
58
+ fieldType: 'email',
59
+ name: 'email',
60
+ autocomplete: 'email',
61
+ maxlength: 255,
62
+ icon: emailImg,
63
+ })}
64
+ </div>
65
+ </fieldset>
66
+
67
+ <fieldset>
68
+ <div class="row">
69
+ ${this.generateInput({
70
+ id: 'donation-contact-form-first-name',
71
+ placeholder: 'First name',
72
+ name: 'fname',
73
+ required: true,
74
+ maxlength: 255,
75
+ autocomplete: 'given-name',
76
+ icon: userIcon,
77
+ })}
78
+ </div>
79
+ <div class="row">
80
+ ${this.generateInput({
81
+ id: 'donation-contact-form-last-name',
82
+ placeholder: 'Last name',
83
+ name: 'lname',
84
+ autocomplete: 'family-name',
85
+ required: true,
86
+ maxlength: 255,
87
+ })}
88
+ </div>
89
+ </fieldset>
90
+ <fieldset>
91
+ <div class="row">
92
+ ${this.generateInput({
93
+ id: 'donation-contact-form-street-address',
94
+ placeholder: 'Address Line 1',
95
+ required: true,
96
+ autocomplete: 'address-line1',
97
+ icon: localePinImg,
98
+ name: 'street-address',
99
+ })}
100
+ </div>
101
+ <div class="row">
102
+ ${this.generateInput({
103
+ id: 'donation-contact-form-extended-address',
104
+ placeholder: 'Address Line 2 (optional)',
105
+ autocomplete: 'address-line2',
106
+ required: false,
107
+ name: 'extended-address',
108
+ })}
109
+ </div>
110
+ <div class="row">
111
+ ${this.generateInput({
112
+ id: 'donation-contact-form-locality',
113
+ placeholder: 'City',
114
+ autocomplete: 'address-level2',
115
+ required: true,
116
+ name: 'locality',
117
+ })}
118
+ </div>
119
+ <div class="row">
120
+ ${this.generateInput({
121
+ id: 'donation-contact-form-region',
122
+ placeholder: 'State / Province',
123
+ autocomplete: 'address-level1',
124
+ required: true,
125
+ name: 'region',
126
+ })}
127
+ ${this.generateInput({
128
+ id: 'donation-contact-form-postal-code',
129
+ placeholder: 'Zip / Postal',
130
+ autocomplete: 'postal-code',
131
+ required: true,
132
+ name: 'postal',
133
+ maxlength: 9,
134
+ // must start with a character, then may contain spaces
135
+ validationPattern: '[a-zA-Z\\-\\d]+[a-zA-Z\\-\\d\\s]*',
136
+ iconSpaceOption: SpacerOption.CompressSpace,
137
+ })}
138
+ </div>
139
+ <div class="row">
140
+ ${this.countrySelectorTemplate}
141
+ </div>
142
+ </fieldset>
143
+ </form>
144
+ ${this.getStyles}
145
+ `;
146
+ }
147
+ get countrySelectorTemplate() {
148
+ return html `
149
+ <badged-input>
150
+ <select id="donation-contact-form-countryCodeAlpha2"
151
+ @change=${(e) => {
152
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
153
+ const currCountry = this.selectedCountry;
154
+ this.selectedCountry = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.value) ? (_b = e.target) === null || _b === void 0 ? void 0 : _b.value : currCountry;
155
+ // update required visual cue on region/state/province & postal code fields
156
+ if (this.selectedCountry === 'US') {
157
+ (_c = this.postalBadgedInput) === null || _c === void 0 ? void 0 : _c.setAttribute('required', '');
158
+ (_d = this.postalCodeField) === null || _d === void 0 ? void 0 : _d.setAttribute('required', '');
159
+ (_e = this.regionBadgedInput) === null || _e === void 0 ? void 0 : _e.setAttribute('required', '');
160
+ (_f = this.regionField) === null || _f === void 0 ? void 0 : _f.setAttribute('required', '');
161
+ }
162
+ else {
163
+ (_g = this.postalBadgedInput) === null || _g === void 0 ? void 0 : _g.removeAttribute('required');
164
+ (_h = this.postalCodeField) === null || _h === void 0 ? void 0 : _h.removeAttribute('required');
165
+ (_j = this.regionBadgedInput) === null || _j === void 0 ? void 0 : _j.removeAttribute('required');
166
+ (_k = this.regionField) === null || _k === void 0 ? void 0 : _k.removeAttribute('required');
167
+ }
168
+ }}>
169
+ ${Object.keys(countries).map(key => {
170
+ const name = countries[key];
171
+ return html `
172
+ <option value=${key} ?selected=${key === this.selectedCountry}>${name}</option>
173
+ `;
174
+ })}
175
+ </select>
176
+ </badged-input>
177
+ `;
178
+ }
179
+ /** @inheritdoc */
180
+ createRenderRoot() {
181
+ // Render template without shadow DOM. Note that shadow DOM features like
182
+ // encapsulated CSS and slots are unavailable.
183
+ // Form autofill does not work properly in the shadow DOM
184
+ // so we need our form fields in the light DOM
185
+ return this;
186
+ }
187
+ // reset the error state when the user focuses the input
188
+ inputFocused(e) {
189
+ this.errorMessage.innerText = '';
190
+ const input = e.target;
191
+ const inputIdentifier = input.id;
192
+ const badgedInput = this.querySelector(`badged-input.${inputIdentifier}`);
193
+ badgedInput.error = false;
194
+ }
195
+ generateInput(options) {
196
+ var _a, _b, _c, _d;
197
+ const required = (_a = options.required) !== null && _a !== void 0 ? _a : true;
198
+ const fieldType = (_b = options.fieldType) !== null && _b !== void 0 ? _b : 'text';
199
+ const iconOption = (_c = options.iconSpaceOption) !== null && _c !== void 0 ? _c : SpacerOption.LeaveSpace;
200
+ return html `
201
+ <badged-input
202
+ class=${options.id}
203
+ .icon=${options.icon}
204
+ .iconSpaceOption=${iconOption}
205
+ ?required=${options.required}
206
+ >
207
+ <label for=${options.id}>${options.placeholder}</label>
208
+ <input
209
+ type=${fieldType}
210
+ id=${options.id}
211
+ class="donation-contact-form-input"
212
+ name=${options.name}
213
+ aria-label=${options.placeholder}
214
+ placeholder=${options.placeholder}
215
+ maxlength=${ifDefined(options.maxlength)}
216
+ autocomplete=${(_d = options.autocomplete) !== null && _d !== void 0 ? _d : 'on'}
217
+ pattern=${ifDefined(options.validationPattern)}
218
+ @focus=${this.inputFocused}
219
+ ?required=${required}
220
+ />
221
+ </badged-input>
222
+ `;
223
+ }
224
+ get donorContactInfo() {
225
+ return new DonorContactInfo({
226
+ billing: this.billingInfo,
227
+ customer: this.contactInfo,
228
+ });
229
+ }
230
+ get billingInfo() {
231
+ const billingInfo = new BillingInfo({
232
+ streetAddress: this.streetAddressField.value,
233
+ extendedAddress: this.extendedAddressField.value,
234
+ locality: this.localityField.value,
235
+ region: this.regionField.value,
236
+ postalCode: this.postalCodeField.value,
237
+ countryCodeAlpha2: this.countryCodeAlpha2Field.value,
238
+ });
239
+ return billingInfo;
240
+ }
241
+ get contactInfo() {
242
+ return new CustomerInfo({
243
+ email: this.emailField.value,
244
+ firstName: this.firstNameField.value,
245
+ lastName: this.lastNameField.value,
246
+ });
247
+ }
248
+ /**
249
+ * This is not the normal LitElement styles block.
250
+ *
251
+ * This element uses the clear DOM instead of the shadow DOM so it can't use
252
+ * the shadowRoot's isolated styling. This is a bit of a workaround to keep all of
253
+ * the styling local by writing out our own <style> tag and just be careful about
254
+ * the selectors since they will leak outside of this component.
255
+ *
256
+ * @readonly
257
+ * @private
258
+ * @type {TemplateResult}
259
+ * @memberof ContactForm
260
+ */
261
+ get getStyles() {
262
+ const noIconSpacerWidth = css `var(--badgedInputNoIconSpacerWidth, 3rem)`;
263
+ const iconSpacerWidth = css `var(--badgedInputIconSpacerWidth, 5rem)`;
264
+ const fieldSetSpacing = css `var(--fieldSetSpacing, 1rem)`;
265
+ const fieldFontFamily = css `var(--fontFamily, "Helvetica Neue", Helvetica, Arial, sans-serif)`;
266
+ const fieldFontSize = css `var(--contactFieldFontSize, 1.6rem)`;
267
+ const fieldFontColor = css `var(--inputFieldFontColor, #333)`;
268
+ const iconFieldWidth = css `calc(100% - ${iconSpacerWidth})`;
269
+ const noIconFieldWidth = css `calc(100% - ${noIconSpacerWidth})`;
270
+ return html `
271
+ <style>
272
+ /*
273
+ **NOTE**
274
+ This element is in the lightDOM so be sure to prefix all styles
275
+ with "contact-form" so styles don't leak.
276
+ */
277
+ contact-form fieldset {
278
+ border: 0;
279
+ padding: 0;
280
+ margin: 0;
281
+ margin-bottom: ${fieldSetSpacing};
282
+ background-color: white;
283
+ }
284
+
285
+ /* These 1px and 0 margins in the next few selectors are to account for the
286
+ double outlines caused by the fields being right next to each other */
287
+ contact-form .row {
288
+ display: flex;
289
+ margin: -1px 0 0 0;
290
+ }
291
+
292
+ contact-form fieldset .row:first-child {
293
+ margin-top: 0;
294
+ }
295
+
296
+ contact-form badged-input.donation-contact-form-region {
297
+ width: 60%;
298
+ }
299
+
300
+ contact-form badged-input.donation-contact-form-postal-code {
301
+ width: 40%;
302
+ }
303
+
304
+ contact-form #donation-contact-form-region {
305
+ width: ${iconFieldWidth};
306
+ }
307
+
308
+ contact-form #donation-contact-form-postal-code {
309
+ width: ${noIconFieldWidth};
310
+ }
311
+
312
+ contact-form #donation-contact-form-error-message {
313
+ color: red;
314
+ font-size: 1.4rem;
315
+ margin-bottom: 0.6rem;
316
+ }
317
+
318
+ contact-form #donation-contact-form-last-name {
319
+ width: ${noIconFieldWidth};
320
+ }
321
+
322
+ /* only show for screen readers */
323
+ contact-form label {
324
+ position: absolute;
325
+ left: -10000px;
326
+ top: auto;
327
+ width: 1px;
328
+ height: 1px;
329
+ overflow: hidden;
330
+ }
331
+
332
+ contact-form .donation-contact-form-input {
333
+ width: ${iconFieldWidth};
334
+ border: 0;
335
+ outline: 0;
336
+ background: transparent;
337
+ font-weight: bold;
338
+ color: ${fieldFontColor};
339
+ font-size: ${fieldFontSize};
340
+ padding: 0;
341
+ font-family: ${fieldFontFamily};
342
+ }
343
+
344
+ contact-form .donation-contact-form-input::placeholder {
345
+ color: revert;
346
+ }
347
+
348
+ contact-form #donation-contact-form-countryCodeAlpha2 {
349
+ width: ${iconFieldWidth};
350
+ height: 100%;
351
+ box-sizing: border-box;
352
+ font-weight: bold;
353
+ font-size: ${fieldFontSize};
354
+ font-family: ${fieldFontFamily};
355
+ border: 0;
356
+ background: #fff;
357
+ -webkit-appearance: none;
358
+ -moz-appearance: none;
359
+ appearance: none;
360
+ }
361
+ </style>
362
+ `;
363
+ }
364
+ };
365
+ __decorate([
366
+ query('badged-input.donation-contact-form-email')
367
+ ], ContactForm.prototype, "emailBadgedInput", void 0);
368
+ __decorate([
369
+ query('#donation-contact-form-email')
370
+ ], ContactForm.prototype, "emailField", void 0);
371
+ __decorate([
372
+ query('badged-input.donation-contact-form-first-name')
373
+ ], ContactForm.prototype, "firstNameBadgedInput", void 0);
374
+ __decorate([
375
+ query('#donation-contact-form-first-name')
376
+ ], ContactForm.prototype, "firstNameField", void 0);
377
+ __decorate([
378
+ query('badged-input.donation-contact-form-last-name')
379
+ ], ContactForm.prototype, "lastNameBadgedInput", void 0);
380
+ __decorate([
381
+ query('#donation-contact-form-last-name')
382
+ ], ContactForm.prototype, "lastNameField", void 0);
383
+ __decorate([
384
+ query('badged-input.donation-contact-form-postal-code')
385
+ ], ContactForm.prototype, "postalBadgedInput", void 0);
386
+ __decorate([
387
+ query('#donation-contact-form-postal-code')
388
+ ], ContactForm.prototype, "postalCodeField", void 0);
389
+ __decorate([
390
+ query('badged-input.donation-contact-form-street-address')
391
+ ], ContactForm.prototype, "streetAddressBadgedInput", void 0);
392
+ __decorate([
393
+ query('#donation-contact-form-street-address')
394
+ ], ContactForm.prototype, "streetAddressField", void 0);
395
+ __decorate([
396
+ query('badged-input.donation-contact-form-extended-address')
397
+ ], ContactForm.prototype, "extendedAddressBadgedInput", void 0);
398
+ __decorate([
399
+ query('#donation-contact-form-extended-address')
400
+ ], ContactForm.prototype, "extendedAddressField", void 0);
401
+ __decorate([
402
+ query('badged-input.donation-contact-form-locality')
403
+ ], ContactForm.prototype, "localityBadgedInput", void 0);
404
+ __decorate([
405
+ query('#donation-contact-form-locality')
406
+ ], ContactForm.prototype, "localityField", void 0);
407
+ __decorate([
408
+ query('badged-input.donation-contact-form-region')
409
+ ], ContactForm.prototype, "regionBadgedInput", void 0);
410
+ __decorate([
411
+ query('#donation-contact-form-region')
412
+ ], ContactForm.prototype, "regionField", void 0);
413
+ __decorate([
414
+ query('#donation-contact-form-countryCodeAlpha2')
415
+ ], ContactForm.prototype, "countryCodeAlpha2Field", void 0);
416
+ __decorate([
417
+ query('#donation-contact-form-error-message')
418
+ ], ContactForm.prototype, "errorMessage", void 0);
419
+ __decorate([
420
+ query('form')
421
+ ], ContactForm.prototype, "form", void 0);
422
+ __decorate([
423
+ property({ type: String })
424
+ ], ContactForm.prototype, "selectedCountry", void 0);
425
+ ContactForm = __decorate([
426
+ customElement('contact-form')
427
+ ], ContactForm);
428
+ export { ContactForm };
429
429
  //# sourceMappingURL=contact-form.js.map