@internetarchive/donation-form 1.0.3-alpha-webdev7960.1 → 1.0.3-webdev-8114.0

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 (211) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +115 -115
  3. package/dist/demo/braintree-endpoint-manager.js.map +1 -1
  4. package/dist/demo/demo-analytics-handler.js.map +1 -1
  5. package/dist/demo/submit-form-with.js.map +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/braintree-manager/braintree-interfaces.js.map +1 -1
  8. package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
  9. package/dist/src/braintree-manager/payment-clients.js.map +1 -1
  10. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js.map +1 -1
  11. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js.map +1 -1
  12. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -1
  13. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
  14. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -1
  15. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
  16. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map +1 -1
  17. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
  18. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js.map +1 -1
  19. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
  20. package/dist/src/braintree-manager/payment-providers/google-pay-interface.js.map +1 -1
  21. package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
  22. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
  23. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js.map +1 -1
  24. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
  25. package/dist/src/braintree-manager/payment-providers/venmo-interface.js.map +1 -1
  26. package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
  27. package/dist/src/braintree-manager/payment-providers-interface.js.map +1 -1
  28. package/dist/src/braintree-manager/payment-providers.js.map +1 -1
  29. package/dist/src/donation-form-controller.js +123 -123
  30. package/dist/src/donation-form-controller.js.map +1 -1
  31. package/dist/src/donation-form-error.js.map +1 -1
  32. package/dist/src/donation-form.js +107 -107
  33. package/dist/src/donation-form.js.map +1 -1
  34. package/dist/src/form-elements/badged-input.js +47 -47
  35. package/dist/src/form-elements/badged-input.js.map +1 -1
  36. package/dist/src/form-elements/contact-form/autocomplete-field-options.js.map +1 -1
  37. package/dist/src/form-elements/contact-form/contact-form.d.ts +1 -1
  38. package/dist/src/form-elements/contact-form/contact-form.js +174 -179
  39. package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
  40. package/dist/src/form-elements/contact-form/countries.js.map +1 -1
  41. package/dist/src/form-elements/header/donation-form-header.js +14 -14
  42. package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
  43. package/dist/src/form-elements/header/donation-summary.js +15 -15
  44. package/dist/src/form-elements/header/donation-summary.js.map +1 -1
  45. package/dist/src/form-elements/payment-selector.js +164 -164
  46. package/dist/src/form-elements/payment-selector.js.map +1 -1
  47. package/dist/src/form-elements/total-amount.js +16 -16
  48. package/dist/src/form-elements/total-amount.js.map +1 -1
  49. package/dist/src/modals/confirm-donation-modal-content.js +51 -51
  50. package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
  51. package/dist/src/modals/error-modal-content.js +22 -22
  52. package/dist/src/modals/error-modal-content.js.map +1 -1
  53. package/dist/src/modals/upsell-modal-content.js +182 -182
  54. package/dist/src/modals/upsell-modal-content.js.map +1 -1
  55. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +20 -20
  56. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
  57. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
  58. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
  59. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
  60. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
  61. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
  62. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
  63. package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
  64. package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
  65. package/dist/src/util/promisedSleep.js.map +1 -1
  66. package/dist/test/helpers/fillInContactForm.js.map +1 -1
  67. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
  68. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
  69. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
  70. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
  71. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
  72. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
  73. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  74. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  75. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  76. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  77. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  78. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  79. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  80. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  81. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  82. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  83. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  84. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  85. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  86. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  87. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  88. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  89. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  90. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  91. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  92. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  93. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  94. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  95. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  96. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  97. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  98. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  99. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  100. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  101. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  102. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  103. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  104. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  105. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  106. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  107. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  108. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  109. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  110. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  111. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  112. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  113. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  114. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  115. package/dist/test/tests/donation-form-controller.test.js +39 -39
  116. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  117. package/dist/test/tests/donation-form.test.js +4 -4
  118. package/dist/test/tests/donation-form.test.js.map +1 -1
  119. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +14 -14
  120. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  121. package/dist/test/tests/form-elements/contact-form.test.d.ts +1 -0
  122. package/dist/test/tests/form-elements/contact-form.test.js +132 -0
  123. package/dist/test/tests/form-elements/contact-form.test.js.map +1 -0
  124. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  125. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  126. package/dist/test/tests/modals/error-modal-content.test.js +2 -2
  127. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  128. package/dist/test/tests/modals/upsell-modal-content.test.js +31 -31
  129. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  130. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  131. package/dist/test/tests/payment-clients.test.js.map +1 -1
  132. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  133. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  134. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  135. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  136. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  137. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  138. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  139. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  140. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  141. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  142. package/package.json +107 -107
  143. package/src/@types/analytics-handler/index.d.ts +8 -8
  144. package/src/@types/braintree-web/LICENSE +21 -21
  145. package/src/@types/braintree-web/index.d.ts +93 -93
  146. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  147. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  148. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  149. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  150. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  151. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  152. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  153. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  154. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  155. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  156. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  157. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  158. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  159. package/src/@types/braintree-web/package.json +64 -64
  160. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  161. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  162. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  163. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  164. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  165. package/src/@types/paypal-checkout-components/package.json +58 -58
  166. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  167. package/src/braintree-manager/braintree-manager.ts +281 -281
  168. package/src/braintree-manager/payment-clients.ts +146 -146
  169. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  170. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  171. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  172. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  173. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  174. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +97 -97
  175. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  176. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  177. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  178. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  179. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  180. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  181. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  182. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  183. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  184. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  185. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  186. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  187. package/src/braintree-manager/payment-providers.ts +147 -147
  188. package/src/donation-form-controller.ts +623 -623
  189. package/src/donation-form-error.ts +6 -6
  190. package/src/donation-form.ts +576 -576
  191. package/src/form-elements/badged-input.ts +109 -109
  192. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  193. package/src/form-elements/contact-form/contact-form.ts +432 -434
  194. package/src/form-elements/contact-form/countries.ts +252 -252
  195. package/src/form-elements/header/donation-form-header.ts +98 -98
  196. package/src/form-elements/header/donation-summary.ts +61 -61
  197. package/src/form-elements/payment-selector.ts +365 -365
  198. package/src/form-elements/total-amount.ts +46 -46
  199. package/src/modals/confirm-donation-modal-content.ts +168 -168
  200. package/src/modals/error-modal-content.ts +48 -48
  201. package/src/modals/upsell-modal-content.ts +284 -284
  202. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +439 -439
  203. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +109 -109
  204. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +232 -232
  205. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +111 -111
  206. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +331 -331
  207. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +119 -119
  208. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  209. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  210. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  211. package/src/util/promisedSleep.ts +3 -3
@@ -24,105 +24,105 @@ let PaymentSelector = class PaymentSelector extends LitElement {
24
24
  /** @inheritdoc */
25
25
  render() {
26
26
  const paymentSelectedCss = this.paymentModeSelected ? 'payment-selected' : '';
27
- return html `
28
- <div
27
+ return html `
28
+ <div
29
29
  class="payment-container ${this.donationInfoValid
30
30
  ? 'donation-info-valid'
31
- : 'donation-info-invalid'} ${paymentSelectedCss}"
32
- >
33
- <div class="payment-provider-container">
34
- <button
31
+ : 'donation-info-invalid'} ${paymentSelectedCss}"
32
+ >
33
+ <div class="payment-provider-container">
34
+ <button
35
35
  class="applepay provider-button ${this.applePayMode} ${this.paymentModeSelected ===
36
36
  'apple'
37
37
  ? 'selected'
38
- : ''}"
38
+ : ''}"
39
39
  @click=${(e) => {
40
40
  this.paymentModeSelected = 'apple';
41
41
  this.applePaySelected(e);
42
- }}
43
- tabindex="0"
44
- >
45
- <div class="payment-image">${applePayButtonImage}</div>
46
- </button>
47
-
48
- <button
42
+ }}
43
+ tabindex="0"
44
+ >
45
+ <div class="payment-image">${applePayButtonImage}</div>
46
+ </button>
47
+
48
+ <button
49
49
  class="googlepay provider-button ${this.googlePayMode} ${this.paymentModeSelected ===
50
50
  'google'
51
51
  ? 'selected'
52
- : ''}"
52
+ : ''}"
53
53
  @click=${() => {
54
54
  this.paymentModeSelected = 'google';
55
55
  this.googlePaySelected();
56
- }}
57
- tabindex="0"
58
- >
59
- <div class="payment-image">${googlePayButtonImage}</div>
60
- </button>
61
-
62
- <button
56
+ }}
57
+ tabindex="0"
58
+ >
59
+ <div class="payment-image">${googlePayButtonImage}</div>
60
+ </button>
61
+
62
+ <button
63
63
  class="venmo provider-button ${this.venmoMode} ${this.paymentModeSelected === 'venmo'
64
64
  ? 'selected'
65
- : ''}"
65
+ : ''}"
66
66
  @click=${() => {
67
67
  this.paymentModeSelected = 'venmo';
68
68
  this.venmoSelected();
69
- }}
70
- tabindex="0"
71
- >
72
- <div class="payment-image">${venmoButtonImage}</div>
73
- </button>
74
-
75
- <div
76
- class="paypal-container provider-button ${this.payPalMode}
77
- ${this.paymentModeSelected === 'paypal' ? 'selected' : ''}"
78
- tabindex="0"
79
- >
80
- <div class="payment-image">
81
- <div
82
- class="paypal-local-button"
69
+ }}
70
+ tabindex="0"
71
+ >
72
+ <div class="payment-image">${venmoButtonImage}</div>
73
+ </button>
74
+
75
+ <div
76
+ class="paypal-container provider-button ${this.payPalMode}
77
+ ${this.paymentModeSelected === 'paypal' ? 'selected' : ''}"
78
+ tabindex="0"
79
+ >
80
+ <div class="payment-image">
81
+ <div
82
+ class="paypal-local-button"
83
83
  @click=${() => {
84
84
  this.paymentModeSelected = 'paypal';
85
85
  this.localPaypalButtonClicked();
86
- }}
87
- >
88
- ${paypalButtonImage}
89
- </div>
90
- <slot name="paypal-button"></slot>
91
- </div>
92
- </div>
93
- </div>
94
-
95
- <div class="credit-card-container">
96
- <button
86
+ }}
87
+ >
88
+ ${paypalButtonImage}
89
+ </div>
90
+ <slot name="paypal-button"></slot>
91
+ </div>
92
+ </div>
93
+ </div>
94
+
95
+ <div class="credit-card-container">
96
+ <button
97
97
  @click=${() => {
98
98
  this.paymentModeSelected = 'cc';
99
99
  this.creditCardSelected();
100
- }}
100
+ }}
101
101
  class="button-style credit-card-button ${this.paymentModeSelected === 'cc'
102
102
  ? 'selected'
103
- : ''}"
104
- tabindex="0"
105
- >
106
- <div class="cc-title">Credit Card</div>
107
- <div class="cc-background"></div>
108
- </button>
109
- </div>
110
- </div>
111
-
103
+ : ''}"
104
+ tabindex="0"
105
+ >
106
+ <div class="cc-title">Credit Card</div>
107
+ <div class="cc-background"></div>
108
+ </button>
109
+ </div>
110
+ </div>
111
+
112
112
  ${this.paymentModeSelected
113
- ? html `
114
- <button
115
- id="change-payment-method"
113
+ ? html `
114
+ <button
115
+ id="change-payment-method"
116
116
  @click=${() => {
117
117
  this.paymentModeSelected = undefined;
118
118
  this.dispatchEvent(new Event('resetPaymentMethod'));
119
119
  this.setButtonVisibility();
120
- }}
121
- >
122
- Change payment method
123
- </button>
120
+ }}
121
+ >
122
+ Change payment method
123
+ </button>
124
124
  `
125
- : nothing}
125
+ : nothing}
126
126
  `;
127
127
  }
128
128
  /** @inheritdoc */
@@ -226,104 +226,104 @@ let PaymentSelector = class PaymentSelector extends LitElement {
226
226
  const paymentButtonWidthCss = css `var(--paymentButtonWidth, 5rem)`;
227
227
  const paymentButtonHeightCss = css `var(--paymentButtonHeight, 3.2rem)`;
228
228
  const creditCardFontSizeCss = css `var(--creditCardFontSize, 1.8rem)`;
229
- return css `
230
- button {
231
- color: inherit;
232
- font-family: inherit;
233
- }
234
-
235
- .payment-container {
236
- width: 100%;
237
- }
238
-
239
- .payment-provider-container {
240
- display: grid;
241
- grid-template-columns: 1fr 1fr 1fr 1fr;
242
- grid-gap: 1rem;
243
- margin-bottom: 1rem;
244
- max-width: 23rem;
245
- }
246
-
247
- .provider-button {
248
- border: 0;
249
- padding: 0;
250
- background: none;
251
- cursor: pointer;
252
- width: ${paymentButtonWidthCss};
253
- height: ${paymentButtonHeightCss};
254
- }
255
-
256
- .provider-button.unavailable {
257
- display: none;
258
- }
259
-
260
- .provider-button.loading {
261
- border: 1px solid #ddd;
262
- border-radius: 2px;
263
- /* account for the borders that don't exist once the provider loads, otherwise the layout shifts */
264
- margin-bottom: -2px;
265
- }
266
-
267
- .provider-button.loading .payment-image {
268
- display: none;
269
- }
270
-
271
- .paypal-local-button {
272
- position: absolute;
273
- width: ${paymentButtonWidthCss};
274
- height: ${paymentButtonHeightCss};
275
- }
276
-
277
- .donation-info-valid .paypal-local-button {
278
- z-index: 0;
279
- }
280
-
281
- .donation-info-invalid .paypal-local-button {
282
- z-index: 250;
283
- }
284
-
285
- .credit-card-button {
286
- color: var(--ccButtonFontColor, #333);
287
- background-color: var(--ccButtonColor, white);
288
- border: 1px solid #333;
289
- border-radius: 4px;
290
- cursor: pointer;
291
- margin: 0;
292
- padding: 0.7rem 1rem;
293
- width: 100%;
294
- }
295
-
296
- .credit-card-button .cc-background {
297
- height: 2.4rem;
298
- width: 100%;
299
- background-repeat: no-repeat;
300
- background-image: url(https://archive.org/images/cc_logos.png);
301
- background-position: 50% 50%;
302
- background-size: contain;
303
- }
304
-
305
- .credit-card-button .cc-title {
306
- font-size: ${creditCardFontSizeCss};
307
- font-weight: 700;
308
- margin-bottom: 0.5rem;
309
- }
310
-
311
- button#change-payment-method {
312
- margin-top: 10px;
313
- background: white;
314
- border: 1px solid;
315
- border-radius: 3px;
316
- padding: 5px;
317
- }
318
-
319
- button#change-payment-method:hover {
320
- cursor: pointer;
321
- }
322
-
323
- .payment-selected button:not(.selected),
324
- .payment-selected .paypal-container:not(.selected) {
325
- display: none;
326
- }
229
+ return css `
230
+ button {
231
+ color: inherit;
232
+ font-family: inherit;
233
+ }
234
+
235
+ .payment-container {
236
+ width: 100%;
237
+ }
238
+
239
+ .payment-provider-container {
240
+ display: grid;
241
+ grid-template-columns: 1fr 1fr 1fr 1fr;
242
+ grid-gap: 1rem;
243
+ margin-bottom: 1rem;
244
+ max-width: 23rem;
245
+ }
246
+
247
+ .provider-button {
248
+ border: 0;
249
+ padding: 0;
250
+ background: none;
251
+ cursor: pointer;
252
+ width: ${paymentButtonWidthCss};
253
+ height: ${paymentButtonHeightCss};
254
+ }
255
+
256
+ .provider-button.unavailable {
257
+ display: none;
258
+ }
259
+
260
+ .provider-button.loading {
261
+ border: 1px solid #ddd;
262
+ border-radius: 2px;
263
+ /* account for the borders that don't exist once the provider loads, otherwise the layout shifts */
264
+ margin-bottom: -2px;
265
+ }
266
+
267
+ .provider-button.loading .payment-image {
268
+ display: none;
269
+ }
270
+
271
+ .paypal-local-button {
272
+ position: absolute;
273
+ width: ${paymentButtonWidthCss};
274
+ height: ${paymentButtonHeightCss};
275
+ }
276
+
277
+ .donation-info-valid .paypal-local-button {
278
+ z-index: 0;
279
+ }
280
+
281
+ .donation-info-invalid .paypal-local-button {
282
+ z-index: 250;
283
+ }
284
+
285
+ .credit-card-button {
286
+ color: var(--ccButtonFontColor, #333);
287
+ background-color: var(--ccButtonColor, white);
288
+ border: 1px solid #333;
289
+ border-radius: 4px;
290
+ cursor: pointer;
291
+ margin: 0;
292
+ padding: 0.7rem 1rem;
293
+ width: 100%;
294
+ }
295
+
296
+ .credit-card-button .cc-background {
297
+ height: 2.4rem;
298
+ width: 100%;
299
+ background-repeat: no-repeat;
300
+ background-image: url(https://archive.org/images/cc_logos.png);
301
+ background-position: 50% 50%;
302
+ background-size: contain;
303
+ }
304
+
305
+ .credit-card-button .cc-title {
306
+ font-size: ${creditCardFontSizeCss};
307
+ font-weight: 700;
308
+ margin-bottom: 0.5rem;
309
+ }
310
+
311
+ button#change-payment-method {
312
+ margin-top: 10px;
313
+ background: white;
314
+ border: 1px solid;
315
+ border-radius: 3px;
316
+ padding: 5px;
317
+ }
318
+
319
+ button#change-payment-method:hover {
320
+ cursor: pointer;
321
+ }
322
+
323
+ .payment-selected button:not(.selected),
324
+ .payment-selected .paypal-container:not(.selected) {
325
+ display: none;
326
+ }
327
327
  `;
328
328
  }
329
329
  };
@@ -1 +1 @@
1
- {"version":3,"file":"payment-selector.js","sourceRoot":"","sources":["../../../src/form-elements/payment-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css, CSSResult, TemplateResult, PropertyValues, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\nimport applePayButtonImage from '@internetarchive/icon-applepay/index.js';\r\nimport googlePayButtonImage from '@internetarchive/icon-googlepay/index.js';\r\nimport paypalButtonImage from '@internetarchive/icon-paypal/index.js';\r\nimport venmoButtonImage from '@internetarchive/icon-venmo/index.js';\r\nimport { PaymentProvidersInterface } from '../braintree-manager/payment-providers-interface';\r\n\r\nenum PaymentButtonMode {\r\n Loading = 'loading',\r\n Available = 'available',\r\n Unavailable = 'unavailable',\r\n}\r\n\r\n@customElement('payment-selector')\r\nexport class PaymentSelector extends LitElement {\r\n @property({ type: Boolean }) donationInfoValid = true;\r\n\r\n @property({ type: Object }) paymentProviders?: PaymentProvidersInterface;\r\n\r\n @property({ type: String }) private applePayMode: PaymentButtonMode = PaymentButtonMode.Loading;\r\n\r\n @property({ type: String }) private googlePayMode: PaymentButtonMode = PaymentButtonMode.Loading;\r\n\r\n @property({ type: String }) private venmoMode: PaymentButtonMode = PaymentButtonMode.Loading;\r\n\r\n @property({ type: String }) private payPalMode: PaymentButtonMode = PaymentButtonMode.Loading;\r\n\r\n @property({ type: String }) private paymentModeSelected:\r\n | 'apple'\r\n | 'google'\r\n | 'venmo'\r\n | 'cc'\r\n | 'paypal'\r\n | undefined = undefined;\r\n\r\n /** @inheritdoc */\r\n render(): TemplateResult {\r\n const paymentSelectedCss = this.paymentModeSelected ? 'payment-selected' : '';\r\n return html`\r\n <div\r\n class=\"payment-container ${this.donationInfoValid\r\n ? 'donation-info-valid'\r\n : 'donation-info-invalid'} ${paymentSelectedCss}\"\r\n >\r\n <div class=\"payment-provider-container\">\r\n <button\r\n class=\"applepay provider-button ${this.applePayMode} ${this.paymentModeSelected ===\r\n 'apple'\r\n ? 'selected'\r\n : ''}\"\r\n @click=${(e: Event) => {\r\n this.paymentModeSelected = 'apple';\r\n this.applePaySelected(e);\r\n }}\r\n tabindex=\"0\"\r\n >\r\n <div class=\"payment-image\">${applePayButtonImage}</div>\r\n </button>\r\n\r\n <button\r\n class=\"googlepay provider-button ${this.googlePayMode} ${this.paymentModeSelected ===\r\n 'google'\r\n ? 'selected'\r\n : ''}\"\r\n @click=${() => {\r\n this.paymentModeSelected = 'google';\r\n this.googlePaySelected();\r\n }}\r\n tabindex=\"0\"\r\n >\r\n <div class=\"payment-image\">${googlePayButtonImage}</div>\r\n </button>\r\n\r\n <button\r\n class=\"venmo provider-button ${this.venmoMode} ${this.paymentModeSelected === 'venmo'\r\n ? 'selected'\r\n : ''}\"\r\n @click=${() => {\r\n this.paymentModeSelected = 'venmo';\r\n this.venmoSelected();\r\n }}\r\n tabindex=\"0\"\r\n >\r\n <div class=\"payment-image\">${venmoButtonImage}</div>\r\n </button>\r\n\r\n <div\r\n class=\"paypal-container provider-button ${this.payPalMode}\r\n ${this.paymentModeSelected === 'paypal' ? 'selected' : ''}\"\r\n tabindex=\"0\"\r\n >\r\n <div class=\"payment-image\">\r\n <div\r\n class=\"paypal-local-button\"\r\n @click=${() => {\r\n this.paymentModeSelected = 'paypal';\r\n this.localPaypalButtonClicked();\r\n }}\r\n >\r\n ${paypalButtonImage}\r\n </div>\r\n <slot name=\"paypal-button\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"credit-card-container\">\r\n <button\r\n @click=${() => {\r\n this.paymentModeSelected = 'cc';\r\n this.creditCardSelected();\r\n }}\r\n class=\"button-style credit-card-button ${this.paymentModeSelected === 'cc'\r\n ? 'selected'\r\n : ''}\"\r\n tabindex=\"0\"\r\n >\r\n <div class=\"cc-title\">Credit Card</div>\r\n <div class=\"cc-background\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n ${this.paymentModeSelected\r\n ? html`\r\n <button\r\n id=\"change-payment-method\"\r\n @click=${() => {\r\n this.paymentModeSelected = undefined;\r\n this.dispatchEvent(new Event('resetPaymentMethod'));\r\n this.setButtonVisibility();\r\n }}\r\n >\r\n Change payment method\r\n </button>\r\n `\r\n : nothing}\r\n `;\r\n }\r\n\r\n /** @inheritdoc */\r\n firstUpdated(): void {\r\n this.dispatchEvent(new Event('firstUpdated'));\r\n }\r\n\r\n /** @inheritdoc */\r\n updated(changed: PropertyValues): void {\r\n if (changed.has('paymentProviders')) {\r\n this.setButtonVisibility();\r\n }\r\n }\r\n\r\n showPaypalButton(): void {\r\n this.payPalMode = PaymentButtonMode.Available;\r\n }\r\n\r\n private async setButtonVisibility(): Promise<void> {\r\n this.paymentProviders?.venmoHandler\r\n .get()\r\n .then(handler => {\r\n if (!handler) {\r\n this.venmoMode = PaymentButtonMode.Unavailable;\r\n return;\r\n }\r\n\r\n handler\r\n .isBrowserSupported()\r\n .then(supported => {\r\n this.venmoMode = supported\r\n ? PaymentButtonMode.Available\r\n : PaymentButtonMode.Unavailable;\r\n })\r\n .catch(reason => {\r\n console.error('error loading venmo', reason);\r\n this.venmoMode = PaymentButtonMode.Unavailable;\r\n });\r\n })\r\n .catch(reason => {\r\n console.error('venmo unavailable', reason);\r\n this.venmoMode = PaymentButtonMode.Unavailable;\r\n });\r\n\r\n this.paymentProviders?.applePayHandler\r\n .get()\r\n .then(handler => {\r\n if (!handler) {\r\n console.error('applePayHandler unavailable');\r\n this.applePayMode = PaymentButtonMode.Unavailable;\r\n return;\r\n }\r\n\r\n handler\r\n .isAvailable()\r\n .then(supported => {\r\n this.applePayMode = supported\r\n ? PaymentButtonMode.Available\r\n : PaymentButtonMode.Unavailable;\r\n })\r\n .catch(reason => {\r\n console.error('error loading applepay', reason);\r\n this.applePayMode = PaymentButtonMode.Unavailable;\r\n });\r\n })\r\n .catch(reason => {\r\n console.error('apple pay unavailable', reason);\r\n this.applePayMode = PaymentButtonMode.Unavailable;\r\n });\r\n\r\n this.paymentProviders?.googlePayHandler\r\n .get()\r\n .then(handler => {\r\n if (!handler) {\r\n console.error('google pay handler unavailable');\r\n this.googlePayMode = PaymentButtonMode.Unavailable;\r\n return;\r\n }\r\n\r\n handler\r\n .isBrowserSupported()\r\n .then(supported => {\r\n this.googlePayMode = supported\r\n ? PaymentButtonMode.Available\r\n : PaymentButtonMode.Unavailable;\r\n })\r\n .catch(reason => {\r\n console.error('error loading googlepay', reason);\r\n this.googlePayMode = PaymentButtonMode.Unavailable;\r\n });\r\n })\r\n .catch(reason => {\r\n console.error('google pay unavailable', reason);\r\n this.googlePayMode = PaymentButtonMode.Unavailable;\r\n });\r\n }\r\n\r\n private googlePaySelected(): void {\r\n this.dispatchEvent(new Event('googlePaySelected'));\r\n }\r\n\r\n private applePaySelected(e: Event): void {\r\n const event = new CustomEvent('applePaySelected', { detail: { originalEvent: e } });\r\n this.dispatchEvent(event);\r\n }\r\n\r\n private venmoSelected(): void {\r\n this.dispatchEvent(new Event('venmoSelected'));\r\n }\r\n\r\n private creditCardSelected(): void {\r\n this.dispatchEvent(new Event('creditCardSelected'));\r\n }\r\n\r\n private localPaypalButtonClicked(): void {\r\n this.dispatchEvent(new Event('paypalBlockerSelected'));\r\n }\r\n\r\n /** @inheritdoc */\r\n static get styles(): CSSResult {\r\n const paymentButtonWidthCss = css`var(--paymentButtonWidth, 5rem)`;\r\n const paymentButtonHeightCss = css`var(--paymentButtonHeight, 3.2rem)`;\r\n const creditCardFontSizeCss = css`var(--creditCardFontSize, 1.8rem)`;\r\n\r\n return css`\r\n button {\r\n color: inherit;\r\n font-family: inherit;\r\n }\r\n\r\n .payment-container {\r\n width: 100%;\r\n }\r\n\r\n .payment-provider-container {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr 1fr 1fr;\r\n grid-gap: 1rem;\r\n margin-bottom: 1rem;\r\n max-width: 23rem;\r\n }\r\n\r\n .provider-button {\r\n border: 0;\r\n padding: 0;\r\n background: none;\r\n cursor: pointer;\r\n width: ${paymentButtonWidthCss};\r\n height: ${paymentButtonHeightCss};\r\n }\r\n\r\n .provider-button.unavailable {\r\n display: none;\r\n }\r\n\r\n .provider-button.loading {\r\n border: 1px solid #ddd;\r\n border-radius: 2px;\r\n /* account for the borders that don't exist once the provider loads, otherwise the layout shifts */\r\n margin-bottom: -2px;\r\n }\r\n\r\n .provider-button.loading .payment-image {\r\n display: none;\r\n }\r\n\r\n .paypal-local-button {\r\n position: absolute;\r\n width: ${paymentButtonWidthCss};\r\n height: ${paymentButtonHeightCss};\r\n }\r\n\r\n .donation-info-valid .paypal-local-button {\r\n z-index: 0;\r\n }\r\n\r\n .donation-info-invalid .paypal-local-button {\r\n z-index: 250;\r\n }\r\n\r\n .credit-card-button {\r\n color: var(--ccButtonFontColor, #333);\r\n background-color: var(--ccButtonColor, white);\r\n border: 1px solid #333;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n margin: 0;\r\n padding: 0.7rem 1rem;\r\n width: 100%;\r\n }\r\n\r\n .credit-card-button .cc-background {\r\n height: 2.4rem;\r\n width: 100%;\r\n background-repeat: no-repeat;\r\n background-image: url(https://archive.org/images/cc_logos.png);\r\n background-position: 50% 50%;\r\n background-size: contain;\r\n }\r\n\r\n .credit-card-button .cc-title {\r\n font-size: ${creditCardFontSizeCss};\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n }\r\n\r\n button#change-payment-method {\r\n margin-top: 10px;\r\n background: white;\r\n border: 1px solid;\r\n border-radius: 3px;\r\n padding: 5px;\r\n }\r\n\r\n button#change-payment-method:hover {\r\n cursor: pointer;\r\n }\r\n\r\n .payment-selected button:not(.selected),\r\n .payment-selected .paypal-container:not(.selected) {\r\n display: none;\r\n }\r\n `;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"payment-selector.js","sourceRoot":"","sources":["../../../src/form-elements/payment-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css, CSSResult, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport applePayButtonImage from '@internetarchive/icon-applepay/index.js';\nimport googlePayButtonImage from '@internetarchive/icon-googlepay/index.js';\nimport paypalButtonImage from '@internetarchive/icon-paypal/index.js';\nimport venmoButtonImage from '@internetarchive/icon-venmo/index.js';\nimport { PaymentProvidersInterface } from '../braintree-manager/payment-providers-interface';\n\nenum PaymentButtonMode {\n Loading = 'loading',\n Available = 'available',\n Unavailable = 'unavailable',\n}\n\n@customElement('payment-selector')\nexport class PaymentSelector extends LitElement {\n @property({ type: Boolean }) donationInfoValid = true;\n\n @property({ type: Object }) paymentProviders?: PaymentProvidersInterface;\n\n @property({ type: String }) private applePayMode: PaymentButtonMode = PaymentButtonMode.Loading;\n\n @property({ type: String }) private googlePayMode: PaymentButtonMode = PaymentButtonMode.Loading;\n\n @property({ type: String }) private venmoMode: PaymentButtonMode = PaymentButtonMode.Loading;\n\n @property({ type: String }) private payPalMode: PaymentButtonMode = PaymentButtonMode.Loading;\n\n @property({ type: String }) private paymentModeSelected:\n | 'apple'\n | 'google'\n | 'venmo'\n | 'cc'\n | 'paypal'\n | undefined = undefined;\n\n /** @inheritdoc */\n render(): TemplateResult {\n const paymentSelectedCss = this.paymentModeSelected ? 'payment-selected' : '';\n return html`\n <div\n class=\"payment-container ${this.donationInfoValid\n ? 'donation-info-valid'\n : 'donation-info-invalid'} ${paymentSelectedCss}\"\n >\n <div class=\"payment-provider-container\">\n <button\n class=\"applepay provider-button ${this.applePayMode} ${this.paymentModeSelected ===\n 'apple'\n ? 'selected'\n : ''}\"\n @click=${(e: Event) => {\n this.paymentModeSelected = 'apple';\n this.applePaySelected(e);\n }}\n tabindex=\"0\"\n >\n <div class=\"payment-image\">${applePayButtonImage}</div>\n </button>\n\n <button\n class=\"googlepay provider-button ${this.googlePayMode} ${this.paymentModeSelected ===\n 'google'\n ? 'selected'\n : ''}\"\n @click=${() => {\n this.paymentModeSelected = 'google';\n this.googlePaySelected();\n }}\n tabindex=\"0\"\n >\n <div class=\"payment-image\">${googlePayButtonImage}</div>\n </button>\n\n <button\n class=\"venmo provider-button ${this.venmoMode} ${this.paymentModeSelected === 'venmo'\n ? 'selected'\n : ''}\"\n @click=${() => {\n this.paymentModeSelected = 'venmo';\n this.venmoSelected();\n }}\n tabindex=\"0\"\n >\n <div class=\"payment-image\">${venmoButtonImage}</div>\n </button>\n\n <div\n class=\"paypal-container provider-button ${this.payPalMode}\n ${this.paymentModeSelected === 'paypal' ? 'selected' : ''}\"\n tabindex=\"0\"\n >\n <div class=\"payment-image\">\n <div\n class=\"paypal-local-button\"\n @click=${() => {\n this.paymentModeSelected = 'paypal';\n this.localPaypalButtonClicked();\n }}\n >\n ${paypalButtonImage}\n </div>\n <slot name=\"paypal-button\"></slot>\n </div>\n </div>\n </div>\n\n <div class=\"credit-card-container\">\n <button\n @click=${() => {\n this.paymentModeSelected = 'cc';\n this.creditCardSelected();\n }}\n class=\"button-style credit-card-button ${this.paymentModeSelected === 'cc'\n ? 'selected'\n : ''}\"\n tabindex=\"0\"\n >\n <div class=\"cc-title\">Credit Card</div>\n <div class=\"cc-background\"></div>\n </button>\n </div>\n </div>\n\n ${this.paymentModeSelected\n ? html`\n <button\n id=\"change-payment-method\"\n @click=${() => {\n this.paymentModeSelected = undefined;\n this.dispatchEvent(new Event('resetPaymentMethod'));\n this.setButtonVisibility();\n }}\n >\n Change payment method\n </button>\n `\n : nothing}\n `;\n }\n\n /** @inheritdoc */\n firstUpdated(): void {\n this.dispatchEvent(new Event('firstUpdated'));\n }\n\n /** @inheritdoc */\n updated(changed: PropertyValues): void {\n if (changed.has('paymentProviders')) {\n this.setButtonVisibility();\n }\n }\n\n showPaypalButton(): void {\n this.payPalMode = PaymentButtonMode.Available;\n }\n\n private async setButtonVisibility(): Promise<void> {\n this.paymentProviders?.venmoHandler\n .get()\n .then(handler => {\n if (!handler) {\n this.venmoMode = PaymentButtonMode.Unavailable;\n return;\n }\n\n handler\n .isBrowserSupported()\n .then(supported => {\n this.venmoMode = supported\n ? PaymentButtonMode.Available\n : PaymentButtonMode.Unavailable;\n })\n .catch(reason => {\n console.error('error loading venmo', reason);\n this.venmoMode = PaymentButtonMode.Unavailable;\n });\n })\n .catch(reason => {\n console.error('venmo unavailable', reason);\n this.venmoMode = PaymentButtonMode.Unavailable;\n });\n\n this.paymentProviders?.applePayHandler\n .get()\n .then(handler => {\n if (!handler) {\n console.error('applePayHandler unavailable');\n this.applePayMode = PaymentButtonMode.Unavailable;\n return;\n }\n\n handler\n .isAvailable()\n .then(supported => {\n this.applePayMode = supported\n ? PaymentButtonMode.Available\n : PaymentButtonMode.Unavailable;\n })\n .catch(reason => {\n console.error('error loading applepay', reason);\n this.applePayMode = PaymentButtonMode.Unavailable;\n });\n })\n .catch(reason => {\n console.error('apple pay unavailable', reason);\n this.applePayMode = PaymentButtonMode.Unavailable;\n });\n\n this.paymentProviders?.googlePayHandler\n .get()\n .then(handler => {\n if (!handler) {\n console.error('google pay handler unavailable');\n this.googlePayMode = PaymentButtonMode.Unavailable;\n return;\n }\n\n handler\n .isBrowserSupported()\n .then(supported => {\n this.googlePayMode = supported\n ? PaymentButtonMode.Available\n : PaymentButtonMode.Unavailable;\n })\n .catch(reason => {\n console.error('error loading googlepay', reason);\n this.googlePayMode = PaymentButtonMode.Unavailable;\n });\n })\n .catch(reason => {\n console.error('google pay unavailable', reason);\n this.googlePayMode = PaymentButtonMode.Unavailable;\n });\n }\n\n private googlePaySelected(): void {\n this.dispatchEvent(new Event('googlePaySelected'));\n }\n\n private applePaySelected(e: Event): void {\n const event = new CustomEvent('applePaySelected', { detail: { originalEvent: e } });\n this.dispatchEvent(event);\n }\n\n private venmoSelected(): void {\n this.dispatchEvent(new Event('venmoSelected'));\n }\n\n private creditCardSelected(): void {\n this.dispatchEvent(new Event('creditCardSelected'));\n }\n\n private localPaypalButtonClicked(): void {\n this.dispatchEvent(new Event('paypalBlockerSelected'));\n }\n\n /** @inheritdoc */\n static get styles(): CSSResult {\n const paymentButtonWidthCss = css`var(--paymentButtonWidth, 5rem)`;\n const paymentButtonHeightCss = css`var(--paymentButtonHeight, 3.2rem)`;\n const creditCardFontSizeCss = css`var(--creditCardFontSize, 1.8rem)`;\n\n return css`\n button {\n color: inherit;\n font-family: inherit;\n }\n\n .payment-container {\n width: 100%;\n }\n\n .payment-provider-container {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 1fr;\n grid-gap: 1rem;\n margin-bottom: 1rem;\n max-width: 23rem;\n }\n\n .provider-button {\n border: 0;\n padding: 0;\n background: none;\n cursor: pointer;\n width: ${paymentButtonWidthCss};\n height: ${paymentButtonHeightCss};\n }\n\n .provider-button.unavailable {\n display: none;\n }\n\n .provider-button.loading {\n border: 1px solid #ddd;\n border-radius: 2px;\n /* account for the borders that don't exist once the provider loads, otherwise the layout shifts */\n margin-bottom: -2px;\n }\n\n .provider-button.loading .payment-image {\n display: none;\n }\n\n .paypal-local-button {\n position: absolute;\n width: ${paymentButtonWidthCss};\n height: ${paymentButtonHeightCss};\n }\n\n .donation-info-valid .paypal-local-button {\n z-index: 0;\n }\n\n .donation-info-invalid .paypal-local-button {\n z-index: 250;\n }\n\n .credit-card-button {\n color: var(--ccButtonFontColor, #333);\n background-color: var(--ccButtonColor, white);\n border: 1px solid #333;\n border-radius: 4px;\n cursor: pointer;\n margin: 0;\n padding: 0.7rem 1rem;\n width: 100%;\n }\n\n .credit-card-button .cc-background {\n height: 2.4rem;\n width: 100%;\n background-repeat: no-repeat;\n background-image: url(https://archive.org/images/cc_logos.png);\n background-position: 50% 50%;\n background-size: contain;\n }\n\n .credit-card-button .cc-title {\n font-size: ${creditCardFontSizeCss};\n font-weight: 700;\n margin-bottom: 0.5rem;\n }\n\n button#change-payment-method {\n margin-top: 10px;\n background: white;\n border: 1px solid;\n border-radius: 3px;\n padding: 5px;\n }\n\n button#change-payment-method:hover {\n cursor: pointer;\n }\n\n .payment-selected button:not(.selected),\n .payment-selected .paypal-container:not(.selected) {\n display: none;\n }\n `;\n }\n}\n"]}
@@ -5,9 +5,9 @@ import { customElement, property } from 'lit/decorators.js';
5
5
  import currency from 'currency.js';
6
6
  let TotalAmount = class TotalAmount extends LitElement {
7
7
  render() {
8
- return html `
9
- <div class="top-line"></div>
10
- <div class="total-line">Total: ${this.totalAmount}</div>
8
+ return html `
9
+ <div class="top-line"></div>
10
+ <div class="total-line">Total: ${this.totalAmount}</div>
11
11
  `;
12
12
  }
13
13
  get totalAmount() {
@@ -22,19 +22,19 @@ let TotalAmount = class TotalAmount extends LitElement {
22
22
  const lineThickness = css `var(--totalAmountLineThickness, 2px)`;
23
23
  const totalAmountVerticalSpacing = css `var(--totalAmountVerticalSpacing, 0.5rem)`;
24
24
  const totalAmountFontSize = css `var(--totalAmountFontSize, 2.6rem)`;
25
- return css `
26
- .top-line {
27
- width: 100%;
28
- height: ${lineThickness};
29
- background-color: ${lineColor};
30
- }
31
-
32
- .total-line {
33
- font-size: ${totalAmountFontSize};
34
- font-weight: bold;
35
- text-align: center;
36
- margin-top: ${totalAmountVerticalSpacing};
37
- }
25
+ return css `
26
+ .top-line {
27
+ width: 100%;
28
+ height: ${lineThickness};
29
+ background-color: ${lineColor};
30
+ }
31
+
32
+ .total-line {
33
+ font-size: ${totalAmountFontSize};
34
+ font-weight: bold;
35
+ text-align: center;
36
+ margin-top: ${totalAmountVerticalSpacing};
37
+ }
38
38
  `;
39
39
  }
40
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"total-amount.js","sourceRoot":"","sources":["../../../src/form-elements/total-amount.ts"],"names":[],"mappings":";AAAA,OAAO,EAAuB,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,GAAG,EAAa,IAAI,EAAE,UAAU,EAAkB,MAAM,KAAK,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,QAAQ,MAAM,aAAa,CAAC;AAG5B,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAIzC,MAAM;QACJ,OAAO,IAAI,CAAA;;uCAEwB,IAAI,CAAC,WAAW;KAClD,CAAC;IACJ,CAAC;IAED,IAAY,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,MAAM;QACf,MAAM,SAAS,GAAG,GAAG,CAAA,mCAAmC,CAAC;QACzD,MAAM,aAAa,GAAG,GAAG,CAAA,sCAAsC,CAAC;QAChE,MAAM,0BAA0B,GAAG,GAAG,CAAA,2CAA2C,CAAC;QAClF,MAAM,mBAAmB,GAAG,GAAG,CAAA,oCAAoC,CAAC;QAEpE,OAAO,GAAG,CAAA;;;kBAGI,aAAa;4BACH,SAAS;;;;qBAIhB,mBAAmB;;;sBAGlB,0BAA0B;;KAE3C,CAAC;IACJ,CAAC;CACF,CAAA;AArCC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDACQ;AAFxB,WAAW;IADvB,aAAa,CAAC,4BAA4B,CAAC;GAC/B,WAAW,CAuCvB","sourcesContent":["import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';\r\nimport { css, CSSResult, html, LitElement, TemplateResult } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport currency from 'currency.js';\r\n\r\n@customElement('donation-form-total-amount')\r\nexport class TotalAmount extends LitElement {\r\n @property({ type: Object })\r\n donationInfo?: DonationPaymentInfo;\r\n\r\n render(): TemplateResult {\r\n return html`\r\n <div class=\"top-line\"></div>\r\n <div class=\"total-line\">Total: ${this.totalAmount}</div>\r\n `;\r\n }\r\n\r\n private get totalAmount(): string | undefined {\r\n if (!this.donationInfo) return;\r\n const amount = currency(this.donationInfo.total, { symbol: '$' }).format();\r\n const monthly = this.donationInfo.donationType === DonationType.Monthly ? '/month' : '';\r\n return `${amount}${monthly}`;\r\n }\r\n\r\n static get styles(): CSSResult {\r\n const lineColor = css`var(--totalAmountLineColor, #333)`;\r\n const lineThickness = css`var(--totalAmountLineThickness, 2px)`;\r\n const totalAmountVerticalSpacing = css`var(--totalAmountVerticalSpacing, 0.5rem)`;\r\n const totalAmountFontSize = css`var(--totalAmountFontSize, 2.6rem)`;\r\n\r\n return css`\r\n .top-line {\r\n width: 100%;\r\n height: ${lineThickness};\r\n background-color: ${lineColor};\r\n }\r\n\r\n .total-line {\r\n font-size: ${totalAmountFontSize};\r\n font-weight: bold;\r\n text-align: center;\r\n margin-top: ${totalAmountVerticalSpacing};\r\n }\r\n `;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"total-amount.js","sourceRoot":"","sources":["../../../src/form-elements/total-amount.ts"],"names":[],"mappings":";AAAA,OAAO,EAAuB,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,GAAG,EAAa,IAAI,EAAE,UAAU,EAAkB,MAAM,KAAK,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,QAAQ,MAAM,aAAa,CAAC;AAG5B,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAIzC,MAAM;QACJ,OAAO,IAAI,CAAA;;uCAEwB,IAAI,CAAC,WAAW;KAClD,CAAC;IACJ,CAAC;IAED,IAAY,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,MAAM;QACf,MAAM,SAAS,GAAG,GAAG,CAAA,mCAAmC,CAAC;QACzD,MAAM,aAAa,GAAG,GAAG,CAAA,sCAAsC,CAAC;QAChE,MAAM,0BAA0B,GAAG,GAAG,CAAA,2CAA2C,CAAC;QAClF,MAAM,mBAAmB,GAAG,GAAG,CAAA,oCAAoC,CAAC;QAEpE,OAAO,GAAG,CAAA;;;kBAGI,aAAa;4BACH,SAAS;;;;qBAIhB,mBAAmB;;;sBAGlB,0BAA0B;;KAE3C,CAAC;IACJ,CAAC;CACF,CAAA;AArCC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDACQ;AAFxB,WAAW;IADvB,aAAa,CAAC,4BAA4B,CAAC;GAC/B,WAAW,CAuCvB","sourcesContent":["import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';\nimport { css, CSSResult, html, LitElement, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport currency from 'currency.js';\n\n@customElement('donation-form-total-amount')\nexport class TotalAmount extends LitElement {\n @property({ type: Object })\n donationInfo?: DonationPaymentInfo;\n\n render(): TemplateResult {\n return html`\n <div class=\"top-line\"></div>\n <div class=\"total-line\">Total: ${this.totalAmount}</div>\n `;\n }\n\n private get totalAmount(): string | undefined {\n if (!this.donationInfo) return;\n const amount = currency(this.donationInfo.total, { symbol: '$' }).format();\n const monthly = this.donationInfo.donationType === DonationType.Monthly ? '/month' : '';\n return `${amount}${monthly}`;\n }\n\n static get styles(): CSSResult {\n const lineColor = css`var(--totalAmountLineColor, #333)`;\n const lineThickness = css`var(--totalAmountLineThickness, 2px)`;\n const totalAmountVerticalSpacing = css`var(--totalAmountVerticalSpacing, 0.5rem)`;\n const totalAmountFontSize = css`var(--totalAmountFontSize, 2.6rem)`;\n\n return css`\n .top-line {\n width: 100%;\n height: ${lineThickness};\n background-color: ${lineColor};\n }\n\n .total-line {\n font-size: ${totalAmountFontSize};\n font-weight: bold;\n text-align: center;\n margin-top: ${totalAmountVerticalSpacing};\n }\n `;\n }\n}\n"]}
@@ -24,19 +24,19 @@ let ConfirmDonationContent = class ConfirmDonationContent extends LitElement {
24
24
  }
25
25
  get confirmationText() {
26
26
  const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
27
- return html `
28
- <p>
29
- You are about to make a <b>${this.donationType}</b> donation of
30
- <b>${amount} ${this.currencyType}</b> to the Internet Archive.
31
- </p>
27
+ return html `
28
+ <p>
29
+ You are about to make a <b>${this.donationType}</b> donation of
30
+ <b>${amount} ${this.currencyType}</b> to the Internet Archive.
31
+ </p>
32
32
  `;
33
33
  }
34
34
  get confirmUpsellText() {
35
35
  const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
36
- return html `<p>
37
- You are about to begin making <b>monthly</b> donations of
38
- <b>${amount} ${this.currencyType}</b> to the Internet Archive. (Your first recurring
39
- contribution will be next month.)
36
+ return html `<p>
37
+ You are about to begin making <b>monthly</b> donations of
38
+ <b>${amount} ${this.currencyType}</b> to the Internet Archive. (Your first recurring
39
+ contribution will be next month.)
40
40
  </p>`;
41
41
  }
42
42
  confirm() {
@@ -52,53 +52,53 @@ let ConfirmDonationContent = class ConfirmDonationContent extends LitElement {
52
52
  }
53
53
  /** @inheritdoc */
54
54
  render() {
55
- return html `
56
- ${this.donationType === DonationType.Upsell ? this.confirmUpsellText : this.confirmationText}
57
-
58
- <div class="cta-group">
59
- <button id="confirm" @click=${() => this.confirm()}>${this.confirmCTA}</button>
60
- <button id="cancel" @click=${() => this.cancel()}>Cancel</button>
61
- </div>
55
+ return html `
56
+ ${this.donationType === DonationType.Upsell ? this.confirmUpsellText : this.confirmationText}
57
+
58
+ <div class="cta-group">
59
+ <button id="confirm" @click=${() => this.confirm()}>${this.confirmCTA}</button>
60
+ <button id="cancel" @click=${() => this.cancel()}>Cancel</button>
61
+ </div>
62
62
  `;
63
63
  }
64
64
  static get styles() {
65
65
  const ctaButtonColor = css `var(--upsellCTAButtonColor, #194880)`;
66
66
  const ctaButtonDisabledColor = css `var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;
67
- return css `
68
- :host {
69
- display: block;
70
- }
71
-
72
- button {
73
- outline: none;
74
- cursor: pointer;
75
- }
76
-
77
- button#confirm {
78
- font-size: 2rem;
79
- display: block;
80
- width: 100%;
81
- margin-top: 0.5rem;
82
- padding: 1rem 2rem;
83
- background-color: ${ctaButtonColor};
84
- color: #fff;
85
- border-radius: 5px;
86
- border: 0;
87
- font-weight: bold;
88
- line-height: normal;
89
- }
90
-
91
- button#cancel {
92
- margin-top: 1rem;
93
- border: 0;
94
- text-decoration: underline;
95
- background-color: transparent;
96
- }
97
-
98
- button:disabled {
99
- background-color: ${ctaButtonDisabledColor};
100
- cursor: not-allowed;
101
- }
67
+ return css `
68
+ :host {
69
+ display: block;
70
+ }
71
+
72
+ button {
73
+ outline: none;
74
+ cursor: pointer;
75
+ }
76
+
77
+ button#confirm {
78
+ font-size: 2rem;
79
+ display: block;
80
+ width: 100%;
81
+ margin-top: 0.5rem;
82
+ padding: 1rem 2rem;
83
+ background-color: ${ctaButtonColor};
84
+ color: #fff;
85
+ border-radius: 5px;
86
+ border: 0;
87
+ font-weight: bold;
88
+ line-height: normal;
89
+ }
90
+
91
+ button#cancel {
92
+ margin-top: 1rem;
93
+ border: 0;
94
+ text-decoration: underline;
95
+ background-color: transparent;
96
+ }
97
+
98
+ button:disabled {
99
+ background-color: ${ctaButtonDisabledColor};
100
+ cursor: not-allowed;
101
+ }
102
102
  }`;
103
103
  }
104
104
  /**