@internetarchive/donation-form 1.0.1 → 1.0.3-alpha-webdev7960.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.js +157 -157
  38. package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
  39. package/dist/src/form-elements/contact-form/countries.js.map +1 -1
  40. package/dist/src/form-elements/header/donation-form-header.js +14 -14
  41. package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
  42. package/dist/src/form-elements/header/donation-summary.js +15 -15
  43. package/dist/src/form-elements/header/donation-summary.js.map +1 -1
  44. package/dist/src/form-elements/payment-selector.js +164 -164
  45. package/dist/src/form-elements/payment-selector.js.map +1 -1
  46. package/dist/src/form-elements/total-amount.js +16 -16
  47. package/dist/src/form-elements/total-amount.js.map +1 -1
  48. package/dist/src/modals/confirm-donation-modal-content.js +51 -51
  49. package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
  50. package/dist/src/modals/error-modal-content.js +22 -22
  51. package/dist/src/modals/error-modal-content.js.map +1 -1
  52. package/dist/src/modals/upsell-modal-content.js +182 -182
  53. package/dist/src/modals/upsell-modal-content.js.map +1 -1
  54. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +20 -20
  55. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
  56. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
  57. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
  58. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
  59. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
  60. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
  61. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
  62. package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
  63. package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
  64. package/dist/src/util/promisedSleep.js.map +1 -1
  65. package/dist/test/helpers/fillInContactForm.js.map +1 -1
  66. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
  67. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
  68. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
  69. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
  70. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
  71. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
  72. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  73. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  74. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  75. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  76. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  77. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  78. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  79. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  80. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  81. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  82. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  83. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  84. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  85. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  86. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  87. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  88. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  89. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  90. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  91. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  92. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  93. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  94. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  95. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  96. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  97. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  98. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  99. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  100. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  101. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  102. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  103. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  104. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  105. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  106. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  107. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  108. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  109. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  110. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  111. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  112. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  113. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  114. package/dist/test/tests/donation-form-controller.test.js +39 -39
  115. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  116. package/dist/test/tests/donation-form.test.js +4 -4
  117. package/dist/test/tests/donation-form.test.js.map +1 -1
  118. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +14 -14
  119. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  120. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  121. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  122. package/dist/test/tests/modals/error-modal-content.test.js +2 -2
  123. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  124. package/dist/test/tests/modals/upsell-modal-content.test.js +31 -31
  125. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  126. package/dist/test/tests/models/donation-payment-info.test.js +5 -5
  127. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  128. package/dist/test/tests/payment-clients.test.js.map +1 -1
  129. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  130. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  131. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  132. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  133. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  134. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  135. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  136. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  137. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  138. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  139. package/package.json +107 -107
  140. package/src/@types/analytics-handler/index.d.ts +8 -8
  141. package/src/@types/braintree-web/LICENSE +21 -21
  142. package/src/@types/braintree-web/index.d.ts +93 -93
  143. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  144. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  145. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  146. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  147. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  148. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  149. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  150. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  151. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  152. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  153. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  154. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  155. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  156. package/src/@types/braintree-web/package.json +64 -64
  157. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  158. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  159. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  160. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  161. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  162. package/src/@types/paypal-checkout-components/package.json +58 -58
  163. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  164. package/src/braintree-manager/braintree-manager.ts +281 -281
  165. package/src/braintree-manager/payment-clients.ts +146 -146
  166. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  167. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  168. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  169. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  170. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  171. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +97 -97
  172. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  173. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  174. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  175. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  176. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  177. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  178. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  179. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  180. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  181. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  182. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  183. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  184. package/src/braintree-manager/payment-providers.ts +147 -147
  185. package/src/donation-form-controller.ts +623 -623
  186. package/src/donation-form-error.ts +6 -6
  187. package/src/donation-form.ts +576 -576
  188. package/src/form-elements/badged-input.ts +109 -109
  189. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  190. package/src/form-elements/contact-form/contact-form.ts +434 -434
  191. package/src/form-elements/contact-form/countries.ts +252 -252
  192. package/src/form-elements/header/donation-form-header.ts +98 -98
  193. package/src/form-elements/header/donation-summary.ts +61 -61
  194. package/src/form-elements/payment-selector.ts +365 -365
  195. package/src/form-elements/total-amount.ts +46 -46
  196. package/src/modals/confirm-donation-modal-content.ts +168 -168
  197. package/src/modals/error-modal-content.ts +48 -48
  198. package/src/modals/upsell-modal-content.ts +284 -284
  199. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +439 -439
  200. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +109 -109
  201. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +232 -232
  202. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +111 -111
  203. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +331 -331
  204. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +119 -119
  205. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  206. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  207. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  208. package/src/util/promisedSleep.ts +3 -3
  209. package/dist/demo/app-root.d.ts +0 -0
  210. package/dist/demo/app-root.js +0 -2
  211. package/dist/demo/app-root.js.map +0 -1
@@ -1,46 +1,46 @@
1
- import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';
2
- import { css, CSSResult, html, LitElement, TemplateResult } from 'lit';
3
- import { customElement, property } from 'lit/decorators.js';
4
- import currency from 'currency.js';
5
-
6
- @customElement('donation-form-total-amount')
7
- export class TotalAmount extends LitElement {
8
- @property({ type: Object })
9
- donationInfo?: DonationPaymentInfo;
10
-
11
- render(): TemplateResult {
12
- return html`
13
- <div class="top-line"></div>
14
- <div class="total-line">Total: ${this.totalAmount}</div>
15
- `;
16
- }
17
-
18
- private get totalAmount(): string | undefined {
19
- if (!this.donationInfo) return;
20
- const amount = currency(this.donationInfo.total, { symbol: '$' }).format();
21
- const monthly = this.donationInfo.donationType === DonationType.Monthly ? '/month' : '';
22
- return `${amount}${monthly}`;
23
- }
24
-
25
- static get styles(): CSSResult {
26
- const lineColor = css`var(--totalAmountLineColor, #333)`;
27
- const lineThickness = css`var(--totalAmountLineThickness, 2px)`;
28
- const totalAmountVerticalSpacing = css`var(--totalAmountVerticalSpacing, 0.5rem)`;
29
- const totalAmountFontSize = css`var(--totalAmountFontSize, 2.6rem)`;
30
-
31
- return css`
32
- .top-line {
33
- width: 100%;
34
- height: ${lineThickness};
35
- background-color: ${lineColor};
36
- }
37
-
38
- .total-line {
39
- font-size: ${totalAmountFontSize};
40
- font-weight: bold;
41
- text-align: center;
42
- margin-top: ${totalAmountVerticalSpacing};
43
- }
44
- `;
45
- }
46
- }
1
+ import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';
2
+ import { css, CSSResult, html, LitElement, TemplateResult } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import currency from 'currency.js';
5
+
6
+ @customElement('donation-form-total-amount')
7
+ export class TotalAmount extends LitElement {
8
+ @property({ type: Object })
9
+ donationInfo?: DonationPaymentInfo;
10
+
11
+ render(): TemplateResult {
12
+ return html`
13
+ <div class="top-line"></div>
14
+ <div class="total-line">Total: ${this.totalAmount}</div>
15
+ `;
16
+ }
17
+
18
+ private get totalAmount(): string | undefined {
19
+ if (!this.donationInfo) return;
20
+ const amount = currency(this.donationInfo.total, { symbol: '$' }).format();
21
+ const monthly = this.donationInfo.donationType === DonationType.Monthly ? '/month' : '';
22
+ return `${amount}${monthly}`;
23
+ }
24
+
25
+ static get styles(): CSSResult {
26
+ const lineColor = css`var(--totalAmountLineColor, #333)`;
27
+ const lineThickness = css`var(--totalAmountLineThickness, 2px)`;
28
+ const totalAmountVerticalSpacing = css`var(--totalAmountVerticalSpacing, 0.5rem)`;
29
+ const totalAmountFontSize = css`var(--totalAmountFontSize, 2.6rem)`;
30
+
31
+ return css`
32
+ .top-line {
33
+ width: 100%;
34
+ height: ${lineThickness};
35
+ background-color: ${lineColor};
36
+ }
37
+
38
+ .total-line {
39
+ font-size: ${totalAmountFontSize};
40
+ font-weight: bold;
41
+ text-align: center;
42
+ margin-top: ${totalAmountVerticalSpacing};
43
+ }
44
+ `;
45
+ }
46
+ }
@@ -1,168 +1,168 @@
1
- import { LitElement, html, TemplateResult, css, CSSResultGroup } from 'lit';
2
- import { customElement, property } from 'lit/decorators.js';
3
- import { DonationType } from '@internetarchive/donation-form-data-models';
4
- import currency from 'currency.js';
5
-
6
- /**
7
- * This is the content that we show in the upsell modal.
8
- *
9
- * It has an amount input, "Yes" and "No Thanks" options and a switch to optionally
10
- * show the PayPal upsell button.
11
- *
12
- * @export
13
- * @class ConfirmDonationContent
14
- * @extends {LitElement}
15
- */
16
- @customElement('confirm-donation-modal')
17
- export class ConfirmDonationContent extends LitElement {
18
- @property({ type: Number }) amount = 5;
19
-
20
- @property({ type: String }) currencyType = '$';
21
-
22
- @property({ type: String }) donationType: DonationType = DonationType.OneTime;
23
-
24
- @property({ type: Function }) confirmDonation: Function = (): void => {};
25
-
26
- @property({ type: Function }) cancelDonation: Function = (): void => {};
27
-
28
- get confirmationText(): TemplateResult {
29
- const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
30
- return html`
31
- <p>
32
- You are about to make a <b>${this.donationType}</b> donation of
33
- <b>${amount} ${this.currencyType}</b> to the Internet Archive.
34
- </p>
35
- `;
36
- }
37
-
38
- get confirmUpsellText(): TemplateResult {
39
- const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
40
- return html`<p>
41
- You are about to begin making <b>monthly</b> donations of
42
- <b>${amount} ${this.currencyType}</b> to the Internet Archive. (Your first recurring
43
- contribution will be next month.)
44
- </p>`;
45
- }
46
-
47
- confirm(): void {
48
- this?.confirmDonation();
49
- }
50
-
51
- cancel(): void {
52
- this?.cancelDonation();
53
- }
54
-
55
- get confirmCTA(): string {
56
- return this.donationType === DonationType.Upsell
57
- ? 'Start monthly donation'
58
- : 'Complete donation';
59
- }
60
-
61
- /** @inheritdoc */
62
- render(): TemplateResult {
63
- return html`
64
- ${this.donationType === DonationType.Upsell ? this.confirmUpsellText : this.confirmationText}
65
-
66
- <div class="cta-group">
67
- <button id="confirm" @click=${(): void => this.confirm()}>${this.confirmCTA}</button>
68
- <button id="cancel" @click=${(): void => this.cancel()}>Cancel</button>
69
- </div>
70
- `;
71
- }
72
-
73
- static get styles(): CSSResultGroup {
74
- const ctaButtonColor = css`var(--upsellCTAButtonColor, #194880)`;
75
- const ctaButtonDisabledColor = css`var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;
76
-
77
- return css`
78
- :host {
79
- display: block;
80
- }
81
-
82
- button {
83
- outline: none;
84
- cursor: pointer;
85
- }
86
-
87
- button#confirm {
88
- font-size: 2rem;
89
- display: block;
90
- width: 100%;
91
- margin-top: 0.5rem;
92
- padding: 1rem 2rem;
93
- background-color: ${ctaButtonColor};
94
- color: #fff;
95
- border-radius: 5px;
96
- border: 0;
97
- font-weight: bold;
98
- line-height: normal;
99
- }
100
-
101
- button#cancel {
102
- margin-top: 1rem;
103
- border: 0;
104
- text-decoration: underline;
105
- background-color: transparent;
106
- }
107
-
108
- button:disabled {
109
- background-color: ${ctaButtonDisabledColor};
110
- cursor: not-allowed;
111
- }
112
- }`;
113
- }
114
-
115
- /**
116
- * https://developer.paypal.com/docs/reports/reference/paypal-supported-currencies/
117
- */
118
- get currencySymbol(): string {
119
- switch (this.currencyType) {
120
- case 'AUD':
121
- return 'AU$';
122
- case 'BRL':
123
- return 'R$';
124
- case 'CAD':
125
- return 'CA$';
126
- case 'CHF':
127
- return 'Fr';
128
- case 'CNY':
129
- return '¥';
130
- case 'CZK':
131
- return 'Kč';
132
- case 'DKK':
133
- return 'Kr';
134
- case 'EUR':
135
- return '€';
136
- case 'GBP':
137
- return '£';
138
- case 'HKD':
139
- return 'HK$';
140
- case 'HUF':
141
- return 'Ft';
142
- case 'ILS':
143
- return '₪';
144
- case 'JPY':
145
- return '¥';
146
- case 'MXN':
147
- return 'MX$';
148
- case 'MYR':
149
- return 'RM';
150
- case 'NOK':
151
- return 'kr';
152
- case 'PLN':
153
- return 'zł';
154
- case 'RUB':
155
- return '₽';
156
- case 'SEK':
157
- return 'kr';
158
- case 'SGD':
159
- return 'S$';
160
- case 'THB':
161
- return '฿';
162
- case 'TYD':
163
- return 'NT$';
164
- default:
165
- return '$'; // $ as default USD, NZD
166
- }
167
- }
168
- }
1
+ import { LitElement, html, TemplateResult, css, CSSResultGroup } from 'lit';
2
+ import { customElement, property } from 'lit/decorators.js';
3
+ import { DonationType } from '@internetarchive/donation-form-data-models';
4
+ import currency from 'currency.js';
5
+
6
+ /**
7
+ * This is the content that we show in the upsell modal.
8
+ *
9
+ * It has an amount input, "Yes" and "No Thanks" options and a switch to optionally
10
+ * show the PayPal upsell button.
11
+ *
12
+ * @export
13
+ * @class ConfirmDonationContent
14
+ * @extends {LitElement}
15
+ */
16
+ @customElement('confirm-donation-modal')
17
+ export class ConfirmDonationContent extends LitElement {
18
+ @property({ type: Number }) amount = 5;
19
+
20
+ @property({ type: String }) currencyType = '$';
21
+
22
+ @property({ type: String }) donationType: DonationType = DonationType.OneTime;
23
+
24
+ @property({ type: Function }) confirmDonation: Function = (): void => {};
25
+
26
+ @property({ type: Function }) cancelDonation: Function = (): void => {};
27
+
28
+ get confirmationText(): TemplateResult {
29
+ const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
30
+ return html`
31
+ <p>
32
+ You are about to make a <b>${this.donationType}</b> donation of
33
+ <b>${amount} ${this.currencyType}</b> to the Internet Archive.
34
+ </p>
35
+ `;
36
+ }
37
+
38
+ get confirmUpsellText(): TemplateResult {
39
+ const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
40
+ return html`<p>
41
+ You are about to begin making <b>monthly</b> donations of
42
+ <b>${amount} ${this.currencyType}</b> to the Internet Archive. (Your first recurring
43
+ contribution will be next month.)
44
+ </p>`;
45
+ }
46
+
47
+ confirm(): void {
48
+ this?.confirmDonation();
49
+ }
50
+
51
+ cancel(): void {
52
+ this?.cancelDonation();
53
+ }
54
+
55
+ get confirmCTA(): string {
56
+ return this.donationType === DonationType.Upsell
57
+ ? 'Start monthly donation'
58
+ : 'Complete donation';
59
+ }
60
+
61
+ /** @inheritdoc */
62
+ render(): TemplateResult {
63
+ return html`
64
+ ${this.donationType === DonationType.Upsell ? this.confirmUpsellText : this.confirmationText}
65
+
66
+ <div class="cta-group">
67
+ <button id="confirm" @click=${(): void => this.confirm()}>${this.confirmCTA}</button>
68
+ <button id="cancel" @click=${(): void => this.cancel()}>Cancel</button>
69
+ </div>
70
+ `;
71
+ }
72
+
73
+ static get styles(): CSSResultGroup {
74
+ const ctaButtonColor = css`var(--upsellCTAButtonColor, #194880)`;
75
+ const ctaButtonDisabledColor = css`var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;
76
+
77
+ return css`
78
+ :host {
79
+ display: block;
80
+ }
81
+
82
+ button {
83
+ outline: none;
84
+ cursor: pointer;
85
+ }
86
+
87
+ button#confirm {
88
+ font-size: 2rem;
89
+ display: block;
90
+ width: 100%;
91
+ margin-top: 0.5rem;
92
+ padding: 1rem 2rem;
93
+ background-color: ${ctaButtonColor};
94
+ color: #fff;
95
+ border-radius: 5px;
96
+ border: 0;
97
+ font-weight: bold;
98
+ line-height: normal;
99
+ }
100
+
101
+ button#cancel {
102
+ margin-top: 1rem;
103
+ border: 0;
104
+ text-decoration: underline;
105
+ background-color: transparent;
106
+ }
107
+
108
+ button:disabled {
109
+ background-color: ${ctaButtonDisabledColor};
110
+ cursor: not-allowed;
111
+ }
112
+ }`;
113
+ }
114
+
115
+ /**
116
+ * https://developer.paypal.com/docs/reports/reference/paypal-supported-currencies/
117
+ */
118
+ get currencySymbol(): string {
119
+ switch (this.currencyType) {
120
+ case 'AUD':
121
+ return 'AU$';
122
+ case 'BRL':
123
+ return 'R$';
124
+ case 'CAD':
125
+ return 'CA$';
126
+ case 'CHF':
127
+ return 'Fr';
128
+ case 'CNY':
129
+ return '¥';
130
+ case 'CZK':
131
+ return 'Kč';
132
+ case 'DKK':
133
+ return 'Kr';
134
+ case 'EUR':
135
+ return '€';
136
+ case 'GBP':
137
+ return '£';
138
+ case 'HKD':
139
+ return 'HK$';
140
+ case 'HUF':
141
+ return 'Ft';
142
+ case 'ILS':
143
+ return '₪';
144
+ case 'JPY':
145
+ return '¥';
146
+ case 'MXN':
147
+ return 'MX$';
148
+ case 'MYR':
149
+ return 'RM';
150
+ case 'NOK':
151
+ return 'kr';
152
+ case 'PLN':
153
+ return 'zł';
154
+ case 'RUB':
155
+ return '₽';
156
+ case 'SEK':
157
+ return 'kr';
158
+ case 'SGD':
159
+ return 'S$';
160
+ case 'THB':
161
+ return '฿';
162
+ case 'TYD':
163
+ return 'NT$';
164
+ default:
165
+ return '$'; // $ as default USD, NZD
166
+ }
167
+ }
168
+ }
@@ -1,48 +1,48 @@
1
- import { LitElement, html, css, CSSResult, TemplateResult } from 'lit';
2
- import { customElement } from 'lit/decorators.js';
3
-
4
- /**
5
- * This is shown at the bottom of the error modal.
6
- *
7
- * @export
8
- * @class ErrorModalContent
9
- * @extends {LitElement}
10
- */
11
- @customElement('donation-form-error-modal-content')
12
- export class ErrorModalContent extends LitElement {
13
- /** @inheritdoc */
14
- render(): TemplateResult {
15
- return html`
16
- <div class="container">
17
- <a
18
- href="https://help.archive.org/help/why-is-there-a-problem-processing-my-donation/"
19
- rel="noopener"
20
- target="_blank"
21
- >
22
- Questions?
23
- </a>
24
- </div>
25
- `;
26
- }
27
-
28
- /** @inheritdoc */
29
- static get styles(): CSSResult {
30
- const questionsLinkTopMargin = css`var(--errorModalQuestionsLinkTopMargin, 1rem)`;
31
- const questionsLinkFontColor = css`var(--errorModalQuestionsLinkFontColor, #333)`;
32
- const questionsLinkFontSize = css`var(--errorModalQuestionsLinkFontSize, 1.4rem)`;
33
-
34
- return css`
35
- .container {
36
- margin-top: ${questionsLinkTopMargin};
37
- text-align: center;
38
- }
39
-
40
- a,
41
- a:link,
42
- a:visited {
43
- color: ${questionsLinkFontColor};
44
- font-size: ${questionsLinkFontSize};
45
- }
46
- `;
47
- }
48
- }
1
+ import { LitElement, html, css, CSSResult, TemplateResult } from 'lit';
2
+ import { customElement } from 'lit/decorators.js';
3
+
4
+ /**
5
+ * This is shown at the bottom of the error modal.
6
+ *
7
+ * @export
8
+ * @class ErrorModalContent
9
+ * @extends {LitElement}
10
+ */
11
+ @customElement('donation-form-error-modal-content')
12
+ export class ErrorModalContent extends LitElement {
13
+ /** @inheritdoc */
14
+ render(): TemplateResult {
15
+ return html`
16
+ <div class="container">
17
+ <a
18
+ href="https://help.archive.org/help/why-is-there-a-problem-processing-my-donation/"
19
+ rel="noopener"
20
+ target="_blank"
21
+ >
22
+ Questions?
23
+ </a>
24
+ </div>
25
+ `;
26
+ }
27
+
28
+ /** @inheritdoc */
29
+ static get styles(): CSSResult {
30
+ const questionsLinkTopMargin = css`var(--errorModalQuestionsLinkTopMargin, 1rem)`;
31
+ const questionsLinkFontColor = css`var(--errorModalQuestionsLinkFontColor, #333)`;
32
+ const questionsLinkFontSize = css`var(--errorModalQuestionsLinkFontSize, 1.4rem)`;
33
+
34
+ return css`
35
+ .container {
36
+ margin-top: ${questionsLinkTopMargin};
37
+ text-align: center;
38
+ }
39
+
40
+ a,
41
+ a:link,
42
+ a:visited {
43
+ color: ${questionsLinkFontColor};
44
+ font-size: ${questionsLinkFontSize};
45
+ }
46
+ `;
47
+ }
48
+ }