@internetarchive/elements 1.1.7-webdev-9378.0 → 1.1.7-webdev-9054.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 (207) hide show
  1. package/dist/src/elements/ia-donation-form/analytics.d.ts +12 -0
  2. package/dist/src/elements/ia-donation-form/analytics.d.ts.map +1 -0
  3. package/dist/src/elements/ia-donation-form/analytics.js +2 -0
  4. package/dist/src/elements/ia-donation-form/analytics.js.map +1 -0
  5. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.d.ts +79 -0
  6. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.d.ts.map +1 -0
  7. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.js +2 -0
  8. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.js.map +1 -0
  9. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.d.ts +73 -0
  10. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.d.ts.map +1 -0
  11. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.js +126 -0
  12. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.js.map +1 -0
  13. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.d.ts +10 -0
  14. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.d.ts.map +1 -0
  15. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.js +9 -0
  16. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.js.map +1 -0
  17. package/dist/src/elements/ia-donation-form/braintree/payment-clients.d.ts +47 -0
  18. package/dist/src/elements/ia-donation-form/braintree/payment-clients.d.ts.map +1 -0
  19. package/dist/src/elements/ia-donation-form/braintree/payment-clients.js +104 -0
  20. package/dist/src/elements/ia-donation-form/braintree/payment-clients.js.map +1 -0
  21. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.d.ts +11 -0
  22. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.d.ts.map +1 -0
  23. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.js +2 -0
  24. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.js.map +1 -0
  25. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +20 -0
  26. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts.map +1 -0
  27. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.js +2 -0
  28. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -0
  29. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +21 -0
  30. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.d.ts.map +1 -0
  31. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.js +83 -0
  32. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -0
  33. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.d.ts +11 -0
  34. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.d.ts.map +1 -0
  35. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.js +13 -0
  36. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -0
  37. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.d.ts +27 -0
  38. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.d.ts.map +1 -0
  39. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.js +67 -0
  40. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.js.map +1 -0
  41. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.d.ts +19 -0
  42. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.d.ts.map +1 -0
  43. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.js +2 -0
  44. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.js.map +1 -0
  45. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.d.ts +42 -0
  46. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.d.ts.map +1 -0
  47. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.js +99 -0
  48. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.js.map +1 -0
  49. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.d.ts +14 -0
  50. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.d.ts.map +1 -0
  51. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.js +9 -0
  52. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.js.map +1 -0
  53. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.d.ts +40 -0
  54. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.d.ts.map +1 -0
  55. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.js +58 -0
  56. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.js.map +1 -0
  57. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.d.ts +8 -0
  58. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.d.ts.map +1 -0
  59. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.js +2 -0
  60. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.js.map +1 -0
  61. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts +19 -0
  62. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts.map +1 -0
  63. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js +45 -0
  64. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js.map +1 -0
  65. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.d.ts +57 -0
  66. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.d.ts.map +1 -0
  67. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.js +44 -0
  68. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.js.map +1 -0
  69. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts +14 -0
  70. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts.map +1 -0
  71. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.js +2 -0
  72. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.js.map +1 -0
  73. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.d.ts +27 -0
  74. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.d.ts.map +1 -0
  75. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.js +44 -0
  76. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.js.map +1 -0
  77. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts +8 -0
  78. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts.map +1 -0
  79. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js +2 -0
  80. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js.map +1 -0
  81. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.d.ts +44 -0
  82. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.d.ts.map +1 -0
  83. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.js +65 -0
  84. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.js.map +1 -0
  85. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.d.ts +25 -0
  86. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.d.ts.map +1 -0
  87. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.js +42 -0
  88. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.js.map +1 -0
  89. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.d.ts +18 -0
  90. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.d.ts.map +1 -0
  91. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.js +2 -0
  92. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.js.map +1 -0
  93. package/dist/src/elements/ia-donation-form/braintree/payment-providers.d.ts +42 -0
  94. package/dist/src/elements/ia-donation-form/braintree/payment-providers.d.ts.map +1 -0
  95. package/dist/src/elements/ia-donation-form/braintree/payment-providers.js +99 -0
  96. package/dist/src/elements/ia-donation-form/braintree/payment-providers.js.map +1 -0
  97. package/dist/src/elements/ia-donation-form/donation-form-error.d.ts +5 -0
  98. package/dist/src/elements/ia-donation-form/donation-form-error.d.ts.map +1 -0
  99. package/dist/src/elements/ia-donation-form/donation-form-error.js +8 -0
  100. package/dist/src/elements/ia-donation-form/donation-form-error.js.map +1 -0
  101. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.d.ts +118 -0
  102. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.d.ts.map +1 -0
  103. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.js +194 -0
  104. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.js.map +1 -0
  105. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.d.ts +24 -0
  106. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.d.ts.map +1 -0
  107. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.js +70 -0
  108. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.js.map +1 -0
  109. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.d.ts +44 -0
  110. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.d.ts.map +1 -0
  111. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.js +116 -0
  112. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.js.map +1 -0
  113. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.d.ts +24 -0
  114. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.d.ts.map +1 -0
  115. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.js +74 -0
  116. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.js.map +1 -0
  117. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.d.ts +47 -0
  118. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.d.ts.map +1 -0
  119. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.js +204 -0
  120. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.js.map +1 -0
  121. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.d.ts +30 -0
  122. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.d.ts.map +1 -0
  123. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.js +77 -0
  124. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.js.map +1 -0
  125. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.d.ts +80 -0
  126. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.d.ts.map +1 -0
  127. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.js +72 -0
  128. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.js.map +1 -0
  129. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.d.ts +2 -0
  130. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.d.ts.map +1 -0
  131. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.js +2 -0
  132. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.js.map +1 -0
  133. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.d.ts +3 -0
  134. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.d.ts.map +1 -0
  135. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.js +254 -0
  136. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.js.map +1 -0
  137. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.d.ts +68 -0
  138. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.d.ts.map +1 -0
  139. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.js +483 -0
  140. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.js.map +1 -0
  141. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.d.ts +26 -0
  142. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.d.ts.map +1 -0
  143. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.js +163 -0
  144. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.js.map +1 -0
  145. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.d.ts +39 -0
  146. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.d.ts.map +1 -0
  147. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.js +212 -0
  148. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.js.map +1 -0
  149. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.d.ts +118 -0
  150. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.d.ts.map +1 -0
  151. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.js +774 -0
  152. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.js.map +1 -0
  153. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.d.ts +31 -0
  154. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.d.ts.map +1 -0
  155. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.js +93 -0
  156. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.js.map +1 -0
  157. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.d.ts +33 -0
  158. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.d.ts.map +1 -0
  159. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.js +380 -0
  160. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.js.map +1 -0
  161. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.d.ts +11 -0
  162. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.d.ts.map +1 -0
  163. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.js +59 -0
  164. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.js.map +1 -0
  165. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.d.ts +10 -0
  166. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.d.ts.map +1 -0
  167. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.js +75 -0
  168. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.js.map +1 -0
  169. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.d.ts +111 -0
  170. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.d.ts.map +1 -0
  171. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.js +522 -0
  172. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.js.map +1 -0
  173. package/dist/src/elements/ia-donation-form/ia-donation-form.d.ts +95 -0
  174. package/dist/src/elements/ia-donation-form/ia-donation-form.d.ts.map +1 -0
  175. package/dist/src/elements/ia-donation-form/ia-donation-form.js +522 -0
  176. package/dist/src/elements/ia-donation-form/ia-donation-form.js.map +1 -0
  177. package/dist/src/elements/ia-donation-form/icons/apple-pay.svg +22 -0
  178. package/dist/src/elements/ia-donation-form/icons/calendar.svg +12 -0
  179. package/dist/src/elements/ia-donation-form/icons/credit-card.svg +7 -0
  180. package/dist/src/elements/ia-donation-form/icons/google-pay.svg +38 -0
  181. package/dist/src/elements/ia-donation-form/icons/lock.svg +6 -0
  182. package/dist/src/elements/ia-donation-form/icons/paypal.svg +39 -0
  183. package/dist/src/elements/ia-donation-form/icons/venmo.svg +9 -0
  184. package/dist/src/elements/ia-donation-form/icons.d.ts +9 -0
  185. package/dist/src/elements/ia-donation-form/icons.d.ts.map +1 -0
  186. package/dist/src/elements/ia-donation-form/icons.js +27 -0
  187. package/dist/src/elements/ia-donation-form/icons.js.map +1 -0
  188. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.d.ts +27 -0
  189. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.d.ts.map +1 -0
  190. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.js +195 -0
  191. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.js.map +1 -0
  192. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.d.ts +7 -0
  193. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.d.ts.map +1 -0
  194. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.js +63 -0
  195. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.js.map +1 -0
  196. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.d.ts +28 -0
  197. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.d.ts.map +1 -0
  198. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.js +313 -0
  199. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.js.map +1 -0
  200. package/dist/src/elements/ia-donation-form/recaptcha-manager.d.ts +36 -0
  201. package/dist/src/elements/ia-donation-form/recaptcha-manager.d.ts.map +1 -0
  202. package/dist/src/elements/ia-donation-form/recaptcha-manager.js +76 -0
  203. package/dist/src/elements/ia-donation-form/recaptcha-manager.js.map +1 -0
  204. package/dist/src/elements/ia-image-viewer/image-viewer-gestures.d.ts.map +1 -1
  205. package/dist/src/elements/ia-image-viewer/image-viewer-gestures.js +2 -4
  206. package/dist/src/elements/ia-image-viewer/image-viewer-gestures.js.map +1 -1
  207. package/package.json +12 -1
@@ -0,0 +1,522 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, LitElement, } from 'lit';
3
+ import { property, query } from 'lit/decorators.js';
4
+ import { customElement } from '../../util/custom-element.js';
5
+ import currency from 'currency.js';
6
+ import { LazyLoaderService, } from '@internetarchive/lazy-loader-service';
7
+ import { BraintreeManager } from './braintree/braintree-manager.js';
8
+ import { PaymentClients, } from './braintree/payment-clients.js';
9
+ import { HostedFieldConfiguration } from './braintree/payment-providers/credit-card/hosted-field-configuration.js';
10
+ import { PaymentFlowHandlers, } from './flow-handlers/payment-flow-handlers.js';
11
+ import { EditDonationAmountSelectionLayout, EditDonationFrequencySelectionMode, } from './form-elements/ia-donation-edit-donation.js';
12
+ import { DonationPaymentInfo, defaultDonationAmounts, defaultSelectedDonationInfo, } from './models/donation-payment-info.js';
13
+ import { DonationType } from './models/donation-type.js';
14
+ import { RecaptchaManager, } from './recaptcha-manager.js';
15
+ import './form-elements/contact-form/ia-donation-contact-form.js';
16
+ import './form-elements/ia-donation-credit-card-fields.js';
17
+ import './ia-donation-form.js';
18
+ /**
19
+ * Wires the donation form to everything around it: Braintree and the payment
20
+ * libraries, the modal manager, recaptcha, and analytics. Give it the
21
+ * environment, tokens and an endpoint manager and it builds the rest.
22
+ *
23
+ * It renders into the light DOM, because Braintree's hosted fields, the
24
+ * PayPal button and recaptcha all refuse to work inside a shadow root. Those
25
+ * are rendered here and slotted into `<ia-donation-form>`.
26
+ */
27
+ let IADonationFormController = class IADonationFormController extends LitElement {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.analyticsCategory = 'DonationForm';
31
+ this.amountOptions = defaultDonationAmounts;
32
+ this.donationInfo = defaultSelectedDonationInfo;
33
+ this.amountSelectionLayout = EditDonationAmountSelectionLayout.MultiLine;
34
+ this.frequencySelectionMode = EditDonationFrequencySelectionMode.Button;
35
+ this.donorEmail = '';
36
+ this.lazyLoaderService = new LazyLoaderService();
37
+ this.recaptchaManagerSetup = false;
38
+ }
39
+ updated(changedProperties) {
40
+ if (changedProperties.has('referrer') && this.referrer) {
41
+ this.braintreeManager?.setReferrer(this.referrer);
42
+ this.logDonationFlowEvent('referrer', this.referrer);
43
+ }
44
+ if (changedProperties.has('loggedInUser') && this.loggedInUser) {
45
+ this.braintreeManager?.setLoggedInUser(this.loggedInUser);
46
+ }
47
+ if (changedProperties.has('origin') && this.origin) {
48
+ this.braintreeManager?.setOrigin(this.origin);
49
+ this.logDonationFlowEvent('origin', this.origin);
50
+ }
51
+ if (changedProperties.has('paymentClients') ||
52
+ changedProperties.has('braintreeAuthToken') ||
53
+ changedProperties.has('endpointManager') ||
54
+ changedProperties.has('environment')) {
55
+ this.setupBraintreeManager();
56
+ this.setupRecaptchaManager();
57
+ }
58
+ if (changedProperties.has('recaptchaSiteKey')) {
59
+ this.setupRecaptchaManager();
60
+ }
61
+ if (changedProperties.has('braintreeManager') ||
62
+ changedProperties.has('recaptchaManager') ||
63
+ changedProperties.has('modalManager') ||
64
+ changedProperties.has('recaptchaElement')) {
65
+ this.setupPaymentFlowHandlers();
66
+ }
67
+ // Build the default clients for the environment, unless the consumer
68
+ // supplied their own
69
+ if ((changedProperties.has('environment') ||
70
+ changedProperties.has('lazyLoaderService')) &&
71
+ this.environment &&
72
+ (this.paymentClients === undefined ||
73
+ this.paymentClients === this.defaultPaymentClients)) {
74
+ this.defaultPaymentClients = new PaymentClients(this.lazyLoaderService, this.environment);
75
+ this.paymentClients = this.defaultPaymentClients;
76
+ }
77
+ }
78
+ /** Developer convenience: show the confirmation step without a payment. */
79
+ async showConfirmationStepDev(options) {
80
+ this.donationForm.showConfirmationModalDev(options);
81
+ }
82
+ /** Developer convenience: show the upsell modal without a payment. */
83
+ async showUpsellModalDev(options) {
84
+ this.donationForm.showUpsellModalDev(options);
85
+ }
86
+ setupBraintreeManager() {
87
+ if (this.braintreeManager === undefined &&
88
+ this.braintreeAuthToken &&
89
+ this.endpointManager &&
90
+ this.paymentClients &&
91
+ this.environment) {
92
+ this.braintreeManager = new BraintreeManager({
93
+ paymentClients: this.paymentClients,
94
+ endpointManager: this.endpointManager,
95
+ authorizationToken: this.braintreeAuthToken,
96
+ venmoProfileId: this.venmoProfileId,
97
+ googlePayMerchantId: this.googlePayMerchantId,
98
+ hostedFieldConfig: this.hostedFieldConfig,
99
+ hostingEnvironment: this.environment,
100
+ referrer: this.referrer,
101
+ loggedInUser: this.loggedInUser,
102
+ origin: this.origin,
103
+ });
104
+ this.braintreeManager.on('paymentProvidersHostedFieldsRetry', (retryNumber) => {
105
+ this.dispatchEvent(new CustomEvent('paymentProvidersHostedFieldsRetry', {
106
+ detail: { retryNumber },
107
+ }));
108
+ });
109
+ this.braintreeManager.on('paymentProvidersHostedFieldsFailed', (error) => {
110
+ this.dispatchEvent(new CustomEvent('paymentProvidersHostedFieldsFailed', {
111
+ detail: { error },
112
+ }));
113
+ });
114
+ }
115
+ }
116
+ async setupRecaptchaManager() {
117
+ if (!this.recaptchaSiteKey ||
118
+ !this.paymentClients ||
119
+ this.recaptchaManagerSetup) {
120
+ return;
121
+ }
122
+ this.recaptchaManagerSetup = true;
123
+ const grecaptchaLibrary = await this.paymentClients.recaptchaLibrary.get();
124
+ this.recaptchaManager = new RecaptchaManager({
125
+ grecaptchaLibrary,
126
+ siteKey: this.recaptchaSiteKey,
127
+ });
128
+ }
129
+ firstUpdated() {
130
+ this.configureFromQueryParams();
131
+ this.trackViewedEvent();
132
+ }
133
+ /**
134
+ * The donate page links carry the starting configuration in the query
135
+ * string: `amt`, `contrib_type`, `coverFees`, `dollarAmounts`,
136
+ * `amountLayout` and `frequencyMode`.
137
+ */
138
+ configureFromQueryParams() {
139
+ const urlParams = new URLSearchParams(window.location.search);
140
+ let amountOptions = this.amountOptions;
141
+ const amountOptionsParam = urlParams.get('dollarAmounts');
142
+ if (amountOptionsParam) {
143
+ // e.g. `[5,10,25]`
144
+ const stripBrackets = amountOptionsParam.slice(1, -1);
145
+ amountOptions = stripBrackets
146
+ .split(',')
147
+ .map((value) => parseFloat(value))
148
+ .filter((value) => !isNaN(value));
149
+ }
150
+ let coverFees = this.donationInfo.coverFees;
151
+ const coverFeesParam = urlParams.get('coverFees');
152
+ if (coverFeesParam) {
153
+ coverFees = coverFeesParam === 'true';
154
+ }
155
+ let frequency = this.donationInfo.donationType;
156
+ const frequencyParam = urlParams.get('contrib_type');
157
+ if (frequencyParam === 'monthly') {
158
+ frequency = DonationType.Monthly;
159
+ }
160
+ let amount = this.donationInfo.amount;
161
+ const amountParam = urlParams.get('amt');
162
+ if (amountParam) {
163
+ const parsedAmount = currency(amountParam).value;
164
+ if (parsedAmount > 0) {
165
+ amount = parsedAmount;
166
+ }
167
+ }
168
+ const amountLayoutParam = urlParams.get('amountLayout');
169
+ if (amountLayoutParam) {
170
+ const amountLayout = amountLayoutParam;
171
+ if (Object.values(EditDonationAmountSelectionLayout).includes(amountLayout)) {
172
+ this.amountSelectionLayout = amountLayout;
173
+ }
174
+ }
175
+ const frequencyModeParam = urlParams.get('frequencyMode');
176
+ if (frequencyModeParam) {
177
+ const frequencyMode = frequencyModeParam;
178
+ if (Object.values(EditDonationFrequencySelectionMode).includes(frequencyMode)) {
179
+ this.frequencySelectionMode = frequencyMode;
180
+ }
181
+ }
182
+ this.amountOptions = amountOptions;
183
+ this.donationInfo = new DonationPaymentInfo({
184
+ donationType: frequency,
185
+ amount,
186
+ coverFees,
187
+ });
188
+ }
189
+ setupPaymentFlowHandlers() {
190
+ if (this.paymentFlowHandlers) {
191
+ return;
192
+ }
193
+ if (!this.braintreeManager ||
194
+ !this.recaptchaManager ||
195
+ !this.modalManager ||
196
+ !this.recaptchaElement) {
197
+ return;
198
+ }
199
+ this.paymentFlowHandlers = new PaymentFlowHandlers({
200
+ braintreeManager: this.braintreeManager,
201
+ modalManager: this.modalManager,
202
+ recaptchaManager: this.recaptchaManager,
203
+ analytics: {
204
+ logEvent: this.logEvent.bind(this),
205
+ logDonationFlowEvent: this.logDonationFlowEvent.bind(this),
206
+ },
207
+ });
208
+ this.donationForm.braintreeManager = this.braintreeManager;
209
+ this.donationForm.paymentFlowHandlers = this.paymentFlowHandlers;
210
+ this.braintreeManager.startup();
211
+ this.paymentFlowHandlers.startup();
212
+ this.recaptchaManager.setup(this.recaptchaElement, 1, 'light', 'image');
213
+ }
214
+ get hostedFieldConfig() {
215
+ const hostedFieldStyle = {
216
+ input: {
217
+ 'font-size': '16px',
218
+ 'font-family': '"Helvetica Neue", Helvetica, Arial, sans-serif',
219
+ 'font-weight': '700',
220
+ color: '#333',
221
+ },
222
+ ':focus': {
223
+ color: '#333',
224
+ },
225
+ // The text color stays the same when valid or invalid. The badged
226
+ // input's red border and the error message already show the error
227
+ // state, and red text on top of them is confusing.
228
+ '.valid': {
229
+ color: '#333',
230
+ },
231
+ '.invalid': {
232
+ color: '#333',
233
+ },
234
+ };
235
+ // No placeholders. The visible labels above each field are the only text.
236
+ const hostedFieldFieldOptions = {
237
+ number: {
238
+ selector: '#braintree-creditcard',
239
+ },
240
+ cvv: {
241
+ selector: '#braintree-cvv',
242
+ },
243
+ expirationDate: {
244
+ selector: '#braintree-expiration',
245
+ },
246
+ };
247
+ const hostedFieldContainer = this.creditCardFieldsElement.hostedFieldContainer;
248
+ return new HostedFieldConfiguration({
249
+ hostedFieldStyle,
250
+ hostedFieldFieldOptions,
251
+ hostedFieldContainer,
252
+ });
253
+ }
254
+ render() {
255
+ return html `
256
+ <div class="ia-donation-form-controller-container">
257
+ <ia-donation-form
258
+ .braintreeManager=${this.braintreeManager}
259
+ .contactForm=${this.contactForm}
260
+ .amountOptions=${this.amountOptions}
261
+ .donationInfo=${this.donationInfo}
262
+ .amountSelectionLayout=${this.amountSelectionLayout}
263
+ .frequencySelectionMode=${this.frequencySelectionMode}
264
+ @donationInfoChanged=${this.donationInfoChanged}
265
+ @paymentProviderSelected=${this.paymentProviderSelected}
266
+ @paymentFlowStarted=${this.paymentFlowStarted}
267
+ @paymentFlowConfirmed=${this.paymentFlowConfirmed}
268
+ @paymentFlowCancelled=${this.paymentFlowCancelled}
269
+ @paymentFlowError=${this.paymentFlowError}
270
+ >
271
+ <!--
272
+ Braintree's hosted fields, the PayPal button and recaptcha can't
273
+ live in a shadow root, so they render here in the light DOM and
274
+ are slotted into the form. See
275
+ https://github.com/braintree/braintree-web-drop-in/issues/614
276
+ and https://github.com/paypal/paypal-checkout-components/issues/353
277
+ -->
278
+ <div slot="braintree-hosted-fields">
279
+ <ia-donation-credit-card-fields></ia-donation-credit-card-fields>
280
+ </div>
281
+
282
+ <!-- Autofill doesn't reach into shadow DOM, so the contact form is light DOM too -->
283
+ <div slot="contact-form">
284
+ <ia-donation-contact-form
285
+ .donorEmail=${this.donorEmail}
286
+ ></ia-donation-contact-form>
287
+ </div>
288
+
289
+ <div slot="paypal-button">
290
+ <div id="paypal-button"></div>
291
+ </div>
292
+
293
+ <slot name="recaptcha" slot="recaptcha"></slot>
294
+ </ia-donation-form>
295
+ </div>
296
+
297
+ ${this.getStyles}
298
+ `;
299
+ }
300
+ /** Light DOM, for the payment libraries that can't render into a shadow root */
301
+ createRenderRoot() {
302
+ return this;
303
+ }
304
+ donationInfoChanged(e) {
305
+ this.logEvent('DonationInfoChanged');
306
+ this.donationInfo = e.detail.donationInfo;
307
+ }
308
+ trackViewedEvent() {
309
+ this.logEvent('Viewed');
310
+ }
311
+ paymentProviderSelected(e) {
312
+ const paymentProvider = e.detail.paymentProvider;
313
+ const previousPaymentProvider = e.detail.previousPaymentProvider;
314
+ const providerNoSpaces = this.removeSpaces(paymentProvider ?? 'unset');
315
+ let eventName = `ProviderFirstSelected-${providerNoSpaces}`;
316
+ let previousProviderInfo;
317
+ if (previousPaymentProvider !== undefined) {
318
+ eventName = `ProviderChangedTo-${providerNoSpaces}`;
319
+ previousProviderInfo = `ProviderChangedFrom-${this.removeSpaces(previousPaymentProvider)}`;
320
+ }
321
+ this.logEvent(eventName, previousProviderInfo);
322
+ }
323
+ paymentFlowConfirmed(e) {
324
+ this.logEvent('PaymentFlowConfirmed', this.removeSpaces(e.detail.paymentProvider));
325
+ }
326
+ paymentFlowStarted(e) {
327
+ this.logEvent('PaymentFlowStarted', this.removeSpaces(e.detail.paymentProvider));
328
+ }
329
+ paymentFlowCancelled(e) {
330
+ this.logEvent('PaymentFlowCancelled', this.removeSpaces(e.detail.paymentProvider));
331
+ }
332
+ paymentFlowError(e) {
333
+ const providerNoSpaces = this.removeSpaces(e.detail.paymentProvider);
334
+ this.logEvent('PaymentFlowError', `${providerNoSpaces}-${e.detail.error}`);
335
+ }
336
+ removeSpaces(original) {
337
+ return original.replace(/\s+/g, '');
338
+ }
339
+ /** A sampled event in this form's category */
340
+ logEvent(action, label) {
341
+ const analyticEvent = {
342
+ action,
343
+ label,
344
+ category: this.analyticsCategory,
345
+ };
346
+ this.analyticsHandler?.sendEvent(analyticEvent);
347
+ }
348
+ /** An unsampled event in the `DonationFlow` category */
349
+ logDonationFlowEvent(action, label) {
350
+ const analyticEvent = {
351
+ action,
352
+ label,
353
+ category: 'DonationFlow',
354
+ };
355
+ this.analyticsHandler?.sendEventNoSampling(analyticEvent);
356
+ }
357
+ /**
358
+ * The element renders into the light DOM, so instead of a `styles` block
359
+ * it writes its own `<style>` tag, scoped to its container class.
360
+ *
361
+ * The `--ia-donation-form-*` variables set here are the consumer-facing
362
+ * theming for the whole form; they fan out to the sections, the amount
363
+ * picker and the payment buttons.
364
+ */
365
+ get getStyles() {
366
+ return html `
367
+ <style>
368
+ .ia-donation-form-controller-container {
369
+ --donation-form-controller-base-font-size--: var(
370
+ --ia-donation-form-base-font-size,
371
+ 10px
372
+ );
373
+ color: var(--ia-donation-form-text-color, #333);
374
+ background-color: var(
375
+ --ia-donation-form-background-color,
376
+ transparent
377
+ );
378
+
379
+ --ia-donation-section-background-color: var(
380
+ --ia-donation-form-background-color,
381
+ transparent
382
+ );
383
+ --ia-donation-edit-background-color: var(
384
+ --ia-donation-form-background-color,
385
+ transparent
386
+ );
387
+
388
+ --ia-donation-section-badge-background-color: var(
389
+ --ia-donation-form-badge-background-color,
390
+ #333
391
+ );
392
+ --ia-donation-edit-badge-background-color: var(
393
+ --ia-donation-form-badge-background-color,
394
+ #333
395
+ );
396
+
397
+ --ia-donation-section-badge-font-color: var(
398
+ --ia-donation-form-badge-text-color,
399
+ #fff
400
+ );
401
+ --ia-donation-edit-badge-font-color: var(
402
+ --ia-donation-form-badge-text-color,
403
+ #fff
404
+ );
405
+
406
+ --ia-donation-edit-button-font-color: var(
407
+ --ia-donation-form-payment-option-text-color
408
+ );
409
+ --ia-donation-edit-button-color: var(
410
+ --ia-donation-form-payment-option-background-color
411
+ );
412
+ --ia-donation-edit-button-selected-color: var(
413
+ --ia-donation-form-selected-option-background-color
414
+ );
415
+ --ia-donation-edit-button-selected-font-color: var(
416
+ --ia-donation-form-selected-option-text-color
417
+ );
418
+ }
419
+
420
+ .ia-donation-form-controller-container ia-donation-form:focus {
421
+ outline: none;
422
+ }
423
+
424
+ /* The real PayPal button, kept but nearly invisible under the local one */
425
+ .ia-donation-form-controller-container #paypal-button {
426
+ opacity: 0.001;
427
+ width: calc(var(--donation-form-controller-base-font-size--) * 5);
428
+ height: calc(var(--donation-form-controller-base-font-size--) * 3);
429
+ overflow: hidden;
430
+ }
431
+
432
+ .ia-donation-form-controller-container
433
+ div[slot='braintree-hosted-fields'] {
434
+ background-color: white;
435
+ }
436
+ </style>
437
+ `;
438
+ }
439
+ };
440
+ __decorate([
441
+ property({ type: String })
442
+ ], IADonationFormController.prototype, "environment", void 0);
443
+ __decorate([
444
+ property({ type: String })
445
+ ], IADonationFormController.prototype, "braintreeAuthToken", void 0);
446
+ __decorate([
447
+ property({ type: String })
448
+ ], IADonationFormController.prototype, "recaptchaSiteKey", void 0);
449
+ __decorate([
450
+ property({ type: String })
451
+ ], IADonationFormController.prototype, "venmoProfileId", void 0);
452
+ __decorate([
453
+ property({ type: String })
454
+ ], IADonationFormController.prototype, "googlePayMerchantId", void 0);
455
+ __decorate([
456
+ property({ type: String })
457
+ ], IADonationFormController.prototype, "analyticsCategory", void 0);
458
+ __decorate([
459
+ property({ type: Array })
460
+ ], IADonationFormController.prototype, "amountOptions", void 0);
461
+ __decorate([
462
+ property({ type: Object })
463
+ ], IADonationFormController.prototype, "donationInfo", void 0);
464
+ __decorate([
465
+ property({ type: String })
466
+ ], IADonationFormController.prototype, "amountSelectionLayout", void 0);
467
+ __decorate([
468
+ property({ type: String })
469
+ ], IADonationFormController.prototype, "frequencySelectionMode", void 0);
470
+ __decorate([
471
+ property({ type: String })
472
+ ], IADonationFormController.prototype, "referrer", void 0);
473
+ __decorate([
474
+ property({ type: String })
475
+ ], IADonationFormController.prototype, "loggedInUser", void 0);
476
+ __decorate([
477
+ property({ type: String })
478
+ ], IADonationFormController.prototype, "origin", void 0);
479
+ __decorate([
480
+ property({ type: String })
481
+ ], IADonationFormController.prototype, "donorEmail", void 0);
482
+ __decorate([
483
+ property({ type: Object })
484
+ ], IADonationFormController.prototype, "endpointManager", void 0);
485
+ __decorate([
486
+ property({ type: Object })
487
+ ], IADonationFormController.prototype, "analyticsHandler", void 0);
488
+ __decorate([
489
+ property({ type: Object })
490
+ ], IADonationFormController.prototype, "modalManager", void 0);
491
+ __decorate([
492
+ property({ type: Object })
493
+ ], IADonationFormController.prototype, "recaptchaElement", void 0);
494
+ __decorate([
495
+ property({ type: Object })
496
+ ], IADonationFormController.prototype, "braintreeManager", void 0);
497
+ __decorate([
498
+ property({ type: Object })
499
+ ], IADonationFormController.prototype, "recaptchaManager", void 0);
500
+ __decorate([
501
+ property({ type: Object })
502
+ ], IADonationFormController.prototype, "paymentFlowHandlers", void 0);
503
+ __decorate([
504
+ property({ type: Object })
505
+ ], IADonationFormController.prototype, "paymentClients", void 0);
506
+ __decorate([
507
+ property({ type: Object })
508
+ ], IADonationFormController.prototype, "lazyLoaderService", void 0);
509
+ __decorate([
510
+ query('ia-donation-form')
511
+ ], IADonationFormController.prototype, "donationForm", void 0);
512
+ __decorate([
513
+ query('ia-donation-credit-card-fields')
514
+ ], IADonationFormController.prototype, "creditCardFieldsElement", void 0);
515
+ __decorate([
516
+ query('ia-donation-contact-form')
517
+ ], IADonationFormController.prototype, "contactForm", void 0);
518
+ IADonationFormController = __decorate([
519
+ customElement('ia-donation-form-controller')
520
+ ], IADonationFormController);
521
+ export { IADonationFormController };
522
+ //# sourceMappingURL=ia-donation-form-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ia-donation-form-controller.js","sourceRoot":"","sources":["../../../../src/elements/ia-donation-form/ia-donation-form-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as braintree from 'braintree-web';\nimport {\n html,\n LitElement,\n type PropertyValues,\n type TemplateResult,\n} from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { customElement } from '@src/util/custom-element';\nimport currency from 'currency.js';\nimport {\n LazyLoaderService,\n type LazyLoaderServiceInterface,\n} from '@internetarchive/lazy-loader-service';\nimport type { ModalManagerInterface } from '@internetarchive/modal-manager';\nimport type {\n AnalyticsEvent,\n AnalyticsManagerInterface,\n} from '@internetarchive/analytics-manager';\n\nimport { BraintreeManager } from './braintree/braintree-manager';\nimport type {\n BraintreeEndpointManagerInterface,\n BraintreeManagerInterface,\n} from './braintree/braintree-manager-interface';\nimport type { HostingEnvironment } from './braintree/hosting-environment';\nimport {\n PaymentClients,\n type PaymentClientsInterface,\n} from './braintree/payment-clients';\nimport { HostedFieldConfiguration } from './braintree/payment-providers/credit-card/hosted-field-configuration';\nimport {\n PaymentFlowHandlers,\n type PaymentFlowHandlersInterface,\n} from './flow-handlers/payment-flow-handlers';\nimport type { IADonationContactForm } from './form-elements/contact-form/ia-donation-contact-form';\nimport {\n EditDonationAmountSelectionLayout,\n EditDonationFrequencySelectionMode,\n} from './form-elements/ia-donation-edit-donation';\nimport type { IADonationCreditCardFields } from './form-elements/ia-donation-credit-card-fields';\nimport type { IADonationForm } from './ia-donation-form';\nimport {\n DonationPaymentInfo,\n defaultDonationAmounts,\n defaultSelectedDonationInfo,\n} from './models/donation-payment-info';\nimport { DonationType } from './models/donation-type';\nimport type { PaymentProvider } from './models/payment-provider';\nimport type { UpsellModalCTAMode } from './modals/ia-donation-upsell-modal-content';\nimport {\n RecaptchaManager,\n type RecaptchaManagerInterface,\n} from './recaptcha-manager';\nimport './form-elements/contact-form/ia-donation-contact-form';\nimport './form-elements/ia-donation-credit-card-fields';\nimport './ia-donation-form';\n\n/**\n * Wires the donation form to everything around it: Braintree and the payment\n * libraries, the modal manager, recaptcha, and analytics. Give it the\n * environment, tokens and an endpoint manager and it builds the rest.\n *\n * It renders into the light DOM, because Braintree's hosted fields, the\n * PayPal button and recaptcha all refuse to work inside a shadow root. Those\n * are rendered here and slotted into `<ia-donation-form>`.\n */\n@customElement('ia-donation-form-controller')\nexport class IADonationFormController extends LitElement {\n @property({ type: String }) environment?: HostingEnvironment;\n\n @property({ type: String }) braintreeAuthToken?: string;\n\n @property({ type: String }) recaptchaSiteKey?: string;\n\n @property({ type: String }) venmoProfileId?: string;\n\n @property({ type: String }) googlePayMerchantId?: string;\n\n @property({ type: String }) analyticsCategory = 'DonationForm';\n\n @property({ type: Array }) amountOptions: number[] = defaultDonationAmounts;\n\n @property({ type: Object }) donationInfo: DonationPaymentInfo =\n defaultSelectedDonationInfo;\n\n @property({ type: String })\n amountSelectionLayout: EditDonationAmountSelectionLayout =\n EditDonationAmountSelectionLayout.MultiLine;\n\n @property({ type: String })\n frequencySelectionMode: EditDonationFrequencySelectionMode =\n EditDonationFrequencySelectionMode.Button;\n\n @property({ type: String }) referrer?: string;\n\n @property({ type: String }) loggedInUser?: string;\n\n @property({ type: String }) origin?: string;\n\n @property({ type: String }) donorEmail: string = '';\n\n @property({ type: Object })\n endpointManager?: BraintreeEndpointManagerInterface;\n\n @property({ type: Object }) analyticsHandler?: AnalyticsManagerInterface;\n\n @property({ type: Object }) modalManager?: ModalManagerInterface;\n\n /** The element recaptcha renders its (invisible) widget into. Must be in the light DOM. */\n @property({ type: Object }) recaptchaElement?: HTMLElement;\n\n @property({ type: Object }) braintreeManager?: BraintreeManagerInterface;\n\n @property({ type: Object }) recaptchaManager?: RecaptchaManagerInterface;\n\n @property({ type: Object })\n paymentFlowHandlers?: PaymentFlowHandlersInterface;\n\n @property({ type: Object }) paymentClients?: PaymentClientsInterface;\n\n /** The clients this element built itself, so it knows when it may rebuild them */\n private defaultPaymentClients?: PaymentClientsInterface;\n\n @property({ type: Object })\n lazyLoaderService: LazyLoaderServiceInterface = new LazyLoaderService();\n\n @query('ia-donation-form') private donationForm!: IADonationForm;\n\n @query('ia-donation-credit-card-fields')\n private creditCardFieldsElement!: IADonationCreditCardFields;\n\n @query('ia-donation-contact-form')\n private contactForm?: IADonationContactForm;\n\n updated(changedProperties: PropertyValues): void {\n if (changedProperties.has('referrer') && this.referrer) {\n this.braintreeManager?.setReferrer(this.referrer);\n this.logDonationFlowEvent('referrer', this.referrer);\n }\n\n if (changedProperties.has('loggedInUser') && this.loggedInUser) {\n this.braintreeManager?.setLoggedInUser(this.loggedInUser);\n }\n\n if (changedProperties.has('origin') && this.origin) {\n this.braintreeManager?.setOrigin(this.origin);\n this.logDonationFlowEvent('origin', this.origin);\n }\n\n if (\n changedProperties.has('paymentClients') ||\n changedProperties.has('braintreeAuthToken') ||\n changedProperties.has('endpointManager') ||\n changedProperties.has('environment')\n ) {\n this.setupBraintreeManager();\n this.setupRecaptchaManager();\n }\n\n if (changedProperties.has('recaptchaSiteKey')) {\n this.setupRecaptchaManager();\n }\n\n if (\n changedProperties.has('braintreeManager') ||\n changedProperties.has('recaptchaManager') ||\n changedProperties.has('modalManager') ||\n changedProperties.has('recaptchaElement')\n ) {\n this.setupPaymentFlowHandlers();\n }\n\n // Build the default clients for the environment, unless the consumer\n // supplied their own\n if (\n (changedProperties.has('environment') ||\n changedProperties.has('lazyLoaderService')) &&\n this.environment &&\n (this.paymentClients === undefined ||\n this.paymentClients === this.defaultPaymentClients)\n ) {\n this.defaultPaymentClients = new PaymentClients(\n this.lazyLoaderService,\n this.environment,\n );\n this.paymentClients = this.defaultPaymentClients;\n }\n }\n\n /** Developer convenience: show the confirmation step without a payment. */\n async showConfirmationStepDev(options: {\n donationType: DonationType;\n amount: number;\n currencyType: string;\n cancelDonationCB: () => void;\n confirmDonationCB: () => void;\n }): Promise<void> {\n this.donationForm.showConfirmationModalDev(options);\n }\n\n /** Developer convenience: show the upsell modal without a payment. */\n async showUpsellModalDev(options: {\n oneTimeAmount: number;\n ctaMode?: UpsellModalCTAMode;\n yesSelected?: (amount: number) => void;\n noSelected?: () => void;\n amountChanged?: (amount: number) => void;\n userClosedModalCallback?: () => void;\n }): Promise<void> {\n this.donationForm.showUpsellModalDev(options);\n }\n\n private setupBraintreeManager(): void {\n if (\n this.braintreeManager === undefined &&\n this.braintreeAuthToken &&\n this.endpointManager &&\n this.paymentClients &&\n this.environment\n ) {\n this.braintreeManager = new BraintreeManager({\n paymentClients: this.paymentClients,\n endpointManager: this.endpointManager,\n authorizationToken: this.braintreeAuthToken,\n venmoProfileId: this.venmoProfileId,\n googlePayMerchantId: this.googlePayMerchantId,\n hostedFieldConfig: this.hostedFieldConfig,\n hostingEnvironment: this.environment,\n referrer: this.referrer,\n loggedInUser: this.loggedInUser,\n origin: this.origin,\n });\n\n this.braintreeManager.on(\n 'paymentProvidersHostedFieldsRetry',\n (retryNumber: number) => {\n this.dispatchEvent(\n new CustomEvent('paymentProvidersHostedFieldsRetry', {\n detail: { retryNumber },\n }),\n );\n },\n );\n\n this.braintreeManager.on(\n 'paymentProvidersHostedFieldsFailed',\n (error: unknown) => {\n this.dispatchEvent(\n new CustomEvent('paymentProvidersHostedFieldsFailed', {\n detail: { error },\n }),\n );\n },\n );\n }\n }\n\n private recaptchaManagerSetup = false;\n\n private async setupRecaptchaManager(): Promise<void> {\n if (\n !this.recaptchaSiteKey ||\n !this.paymentClients ||\n this.recaptchaManagerSetup\n ) {\n return;\n }\n this.recaptchaManagerSetup = true;\n const grecaptchaLibrary = await this.paymentClients.recaptchaLibrary.get();\n this.recaptchaManager = new RecaptchaManager({\n grecaptchaLibrary,\n siteKey: this.recaptchaSiteKey,\n });\n }\n\n firstUpdated(): void {\n this.configureFromQueryParams();\n this.trackViewedEvent();\n }\n\n /**\n * The donate page links carry the starting configuration in the query\n * string: `amt`, `contrib_type`, `coverFees`, `dollarAmounts`,\n * `amountLayout` and `frequencyMode`.\n */\n private configureFromQueryParams(): void {\n const urlParams = new URLSearchParams(window.location.search);\n\n let amountOptions = this.amountOptions;\n const amountOptionsParam = urlParams.get('dollarAmounts');\n if (amountOptionsParam) {\n // e.g. `[5,10,25]`\n const stripBrackets = amountOptionsParam.slice(1, -1);\n amountOptions = stripBrackets\n .split(',')\n .map((value) => parseFloat(value))\n .filter((value) => !isNaN(value));\n }\n\n let coverFees = this.donationInfo.coverFees;\n const coverFeesParam = urlParams.get('coverFees');\n if (coverFeesParam) {\n coverFees = coverFeesParam === 'true';\n }\n\n let frequency = this.donationInfo.donationType;\n const frequencyParam = urlParams.get('contrib_type');\n if (frequencyParam === 'monthly') {\n frequency = DonationType.Monthly;\n }\n\n let amount = this.donationInfo.amount;\n const amountParam = urlParams.get('amt');\n if (amountParam) {\n const parsedAmount = currency(amountParam).value;\n if (parsedAmount > 0) {\n amount = parsedAmount;\n }\n }\n\n const amountLayoutParam = urlParams.get('amountLayout');\n if (amountLayoutParam) {\n const amountLayout =\n amountLayoutParam as EditDonationAmountSelectionLayout;\n if (\n Object.values(EditDonationAmountSelectionLayout).includes(amountLayout)\n ) {\n this.amountSelectionLayout = amountLayout;\n }\n }\n\n const frequencyModeParam = urlParams.get('frequencyMode');\n if (frequencyModeParam) {\n const frequencyMode =\n frequencyModeParam as EditDonationFrequencySelectionMode;\n if (\n Object.values(EditDonationFrequencySelectionMode).includes(\n frequencyMode,\n )\n ) {\n this.frequencySelectionMode = frequencyMode;\n }\n }\n\n this.amountOptions = amountOptions;\n this.donationInfo = new DonationPaymentInfo({\n donationType: frequency,\n amount,\n coverFees,\n });\n }\n\n private setupPaymentFlowHandlers(): void {\n if (this.paymentFlowHandlers) {\n return;\n }\n\n if (\n !this.braintreeManager ||\n !this.recaptchaManager ||\n !this.modalManager ||\n !this.recaptchaElement\n ) {\n return;\n }\n\n this.paymentFlowHandlers = new PaymentFlowHandlers({\n braintreeManager: this.braintreeManager,\n modalManager: this.modalManager,\n recaptchaManager: this.recaptchaManager,\n analytics: {\n logEvent: this.logEvent.bind(this),\n logDonationFlowEvent: this.logDonationFlowEvent.bind(this),\n },\n });\n\n this.donationForm.braintreeManager = this.braintreeManager;\n this.donationForm.paymentFlowHandlers = this.paymentFlowHandlers;\n\n this.braintreeManager.startup();\n this.paymentFlowHandlers.startup();\n this.recaptchaManager.setup(this.recaptchaElement, 1, 'light', 'image');\n }\n\n private get hostedFieldConfig(): HostedFieldConfiguration {\n const hostedFieldStyle: Record<string, Record<string, string>> = {\n input: {\n 'font-size': '16px',\n 'font-family': '\"Helvetica Neue\", Helvetica, Arial, sans-serif',\n 'font-weight': '700',\n color: '#333',\n },\n ':focus': {\n color: '#333',\n },\n // The text color stays the same when valid or invalid. The badged\n // input's red border and the error message already show the error\n // state, and red text on top of them is confusing.\n '.valid': {\n color: '#333',\n },\n '.invalid': {\n color: '#333',\n },\n };\n\n // No placeholders. The visible labels above each field are the only text.\n const hostedFieldFieldOptions: braintree.HostedFieldFieldOptions = {\n number: {\n selector: '#braintree-creditcard',\n },\n cvv: {\n selector: '#braintree-cvv',\n },\n expirationDate: {\n selector: '#braintree-expiration',\n },\n };\n\n const hostedFieldContainer =\n this.creditCardFieldsElement.hostedFieldContainer;\n\n return new HostedFieldConfiguration({\n hostedFieldStyle,\n hostedFieldFieldOptions,\n hostedFieldContainer,\n });\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"ia-donation-form-controller-container\">\n <ia-donation-form\n .braintreeManager=${this.braintreeManager}\n .contactForm=${this.contactForm}\n .amountOptions=${this.amountOptions}\n .donationInfo=${this.donationInfo}\n .amountSelectionLayout=${this.amountSelectionLayout}\n .frequencySelectionMode=${this.frequencySelectionMode}\n @donationInfoChanged=${this.donationInfoChanged}\n @paymentProviderSelected=${this.paymentProviderSelected}\n @paymentFlowStarted=${this.paymentFlowStarted}\n @paymentFlowConfirmed=${this.paymentFlowConfirmed}\n @paymentFlowCancelled=${this.paymentFlowCancelled}\n @paymentFlowError=${this.paymentFlowError}\n >\n <!--\n Braintree's hosted fields, the PayPal button and recaptcha can't\n live in a shadow root, so they render here in the light DOM and\n are slotted into the form. See\n https://github.com/braintree/braintree-web-drop-in/issues/614\n and https://github.com/paypal/paypal-checkout-components/issues/353\n -->\n <div slot=\"braintree-hosted-fields\">\n <ia-donation-credit-card-fields></ia-donation-credit-card-fields>\n </div>\n\n <!-- Autofill doesn't reach into shadow DOM, so the contact form is light DOM too -->\n <div slot=\"contact-form\">\n <ia-donation-contact-form\n .donorEmail=${this.donorEmail}\n ></ia-donation-contact-form>\n </div>\n\n <div slot=\"paypal-button\">\n <div id=\"paypal-button\"></div>\n </div>\n\n <slot name=\"recaptcha\" slot=\"recaptcha\"></slot>\n </ia-donation-form>\n </div>\n\n ${this.getStyles}\n `;\n }\n\n /** Light DOM, for the payment libraries that can't render into a shadow root */\n createRenderRoot(): this {\n return this;\n }\n\n private donationInfoChanged(e: CustomEvent): void {\n this.logEvent('DonationInfoChanged');\n this.donationInfo = e.detail.donationInfo;\n }\n\n private trackViewedEvent(): void {\n this.logEvent('Viewed');\n }\n\n private paymentProviderSelected(e: CustomEvent): void {\n const paymentProvider = e.detail.paymentProvider as\n | PaymentProvider\n | undefined;\n const previousPaymentProvider = e.detail.previousPaymentProvider as\n | PaymentProvider\n | undefined;\n const providerNoSpaces = this.removeSpaces(paymentProvider ?? 'unset');\n let eventName = `ProviderFirstSelected-${providerNoSpaces}`;\n let previousProviderInfo: string | undefined;\n if (previousPaymentProvider !== undefined) {\n eventName = `ProviderChangedTo-${providerNoSpaces}`;\n previousProviderInfo = `ProviderChangedFrom-${this.removeSpaces(\n previousPaymentProvider,\n )}`;\n }\n\n this.logEvent(eventName, previousProviderInfo);\n }\n\n private paymentFlowConfirmed(e: CustomEvent): void {\n this.logEvent(\n 'PaymentFlowConfirmed',\n this.removeSpaces(e.detail.paymentProvider),\n );\n }\n\n private paymentFlowStarted(e: CustomEvent): void {\n this.logEvent(\n 'PaymentFlowStarted',\n this.removeSpaces(e.detail.paymentProvider),\n );\n }\n\n private paymentFlowCancelled(e: CustomEvent): void {\n this.logEvent(\n 'PaymentFlowCancelled',\n this.removeSpaces(e.detail.paymentProvider),\n );\n }\n\n private paymentFlowError(e: CustomEvent): void {\n const providerNoSpaces = this.removeSpaces(e.detail.paymentProvider);\n this.logEvent('PaymentFlowError', `${providerNoSpaces}-${e.detail.error}`);\n }\n\n private removeSpaces(original: string): string {\n return original.replace(/\\s+/g, '');\n }\n\n /** A sampled event in this form's category */\n private logEvent(action: string, label?: string): void {\n const analyticEvent: AnalyticsEvent = {\n action,\n label,\n category: this.analyticsCategory,\n };\n this.analyticsHandler?.sendEvent(analyticEvent);\n }\n\n /** An unsampled event in the `DonationFlow` category */\n private logDonationFlowEvent(action: string, label?: string): void {\n const analyticEvent: AnalyticsEvent = {\n action,\n label,\n category: 'DonationFlow',\n };\n this.analyticsHandler?.sendEventNoSampling(analyticEvent);\n }\n\n /**\n * The element renders into the light DOM, so instead of a `styles` block\n * it writes its own `<style>` tag, scoped to its container class.\n *\n * The `--ia-donation-form-*` variables set here are the consumer-facing\n * theming for the whole form; they fan out to the sections, the amount\n * picker and the payment buttons.\n */\n private get getStyles(): TemplateResult {\n return html`\n <style>\n .ia-donation-form-controller-container {\n --donation-form-controller-base-font-size--: var(\n --ia-donation-form-base-font-size,\n 10px\n );\n color: var(--ia-donation-form-text-color, #333);\n background-color: var(\n --ia-donation-form-background-color,\n transparent\n );\n\n --ia-donation-section-background-color: var(\n --ia-donation-form-background-color,\n transparent\n );\n --ia-donation-edit-background-color: var(\n --ia-donation-form-background-color,\n transparent\n );\n\n --ia-donation-section-badge-background-color: var(\n --ia-donation-form-badge-background-color,\n #333\n );\n --ia-donation-edit-badge-background-color: var(\n --ia-donation-form-badge-background-color,\n #333\n );\n\n --ia-donation-section-badge-font-color: var(\n --ia-donation-form-badge-text-color,\n #fff\n );\n --ia-donation-edit-badge-font-color: var(\n --ia-donation-form-badge-text-color,\n #fff\n );\n\n --ia-donation-edit-button-font-color: var(\n --ia-donation-form-payment-option-text-color\n );\n --ia-donation-edit-button-color: var(\n --ia-donation-form-payment-option-background-color\n );\n --ia-donation-edit-button-selected-color: var(\n --ia-donation-form-selected-option-background-color\n );\n --ia-donation-edit-button-selected-font-color: var(\n --ia-donation-form-selected-option-text-color\n );\n }\n\n .ia-donation-form-controller-container ia-donation-form:focus {\n outline: none;\n }\n\n /* The real PayPal button, kept but nearly invisible under the local one */\n .ia-donation-form-controller-container #paypal-button {\n opacity: 0.001;\n width: calc(var(--donation-form-controller-base-font-size--) * 5);\n height: calc(var(--donation-form-controller-base-font-size--) * 3);\n overflow: hidden;\n }\n\n .ia-donation-form-controller-container\n div[slot='braintree-hosted-fields'] {\n background-color: white;\n }\n </style>\n `;\n }\n}\n"]}