@paypal/checkout-components 5.0.256-alpha.1 → 5.0.257

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 (184) hide show
  1. package/README.md +8 -0
  2. package/__sdk__.js +76 -76
  3. package/dist/button.js +1 -1
  4. package/globals.js +28 -30
  5. package/package.json +7 -5
  6. package/src/actions/save/index.js +17 -12
  7. package/src/constants/button.js +36 -36
  8. package/src/constants/class.js +32 -30
  9. package/src/constants/index.js +3 -3
  10. package/src/constants/misc.js +14 -12
  11. package/src/declarations.js +19 -19
  12. package/src/funding/applepay/config.jsx +51 -49
  13. package/src/funding/applepay/index.js +1 -1
  14. package/src/funding/applepay/style.scoped.scss +1 -1
  15. package/src/funding/applepay/template.jsx +16 -9
  16. package/src/funding/bancontact/config.jsx +48 -36
  17. package/src/funding/bancontact/index.js +1 -2
  18. package/src/funding/blik/config.jsx +48 -36
  19. package/src/funding/blik/index.js +1 -2
  20. package/src/funding/boleto/config.jsx +50 -38
  21. package/src/funding/boleto/index.js +1 -2
  22. package/src/funding/card/amex/config.js +9 -7
  23. package/src/funding/card/amex/index.js +1 -2
  24. package/src/funding/card/config.jsx +246 -178
  25. package/src/funding/card/discover/config.js +9 -6
  26. package/src/funding/card/discover/index.js +1 -2
  27. package/src/funding/card/elo/config.js +6 -6
  28. package/src/funding/card/elo/index.js +1 -2
  29. package/src/funding/card/hiper/config.js +9 -6
  30. package/src/funding/card/hiper/index.js +1 -2
  31. package/src/funding/card/index.js +1 -1
  32. package/src/funding/card/jcb/config.js +6 -6
  33. package/src/funding/card/jcb/index.js +1 -2
  34. package/src/funding/card/mastercard/config.js +9 -6
  35. package/src/funding/card/mastercard/index.js +1 -2
  36. package/src/funding/card/visa/config.js +9 -6
  37. package/src/funding/card/visa/index.js +1 -2
  38. package/src/funding/common.jsx +242 -216
  39. package/src/funding/config.js +212 -65
  40. package/src/funding/content.jsx +1946 -337
  41. package/src/funding/credit/config.jsx +74 -54
  42. package/src/funding/credit/index.js +1 -2
  43. package/src/funding/eps/config.jsx +45 -36
  44. package/src/funding/eps/index.js +1 -2
  45. package/src/funding/funding.js +193 -100
  46. package/src/funding/giropay/config.jsx +48 -37
  47. package/src/funding/giropay/index.js +1 -2
  48. package/src/funding/ideal/config.jsx +48 -36
  49. package/src/funding/ideal/index.js +1 -2
  50. package/src/funding/index.js +2 -2
  51. package/src/funding/itau/config.jsx +41 -40
  52. package/src/funding/itau/index.js +1 -1
  53. package/src/funding/maxima/config.jsx +25 -18
  54. package/src/funding/maxima/index.js +1 -2
  55. package/src/funding/mercadopago/config.jsx +48 -36
  56. package/src/funding/mercadopago/index.js +1 -2
  57. package/src/funding/multibanco/config.jsx +50 -38
  58. package/src/funding/multibanco/index.js +1 -2
  59. package/src/funding/mybank/config.jsx +48 -36
  60. package/src/funding/mybank/index.js +1 -2
  61. package/src/funding/oxxo/config.jsx +50 -38
  62. package/src/funding/oxxo/index.js +1 -2
  63. package/src/funding/p24/config.jsx +45 -36
  64. package/src/funding/p24/index.js +1 -2
  65. package/src/funding/paidy/config.jsx +50 -38
  66. package/src/funding/paidy/index.js +1 -1
  67. package/src/funding/paylater/config.jsx +118 -110
  68. package/src/funding/paylater/index.js +1 -2
  69. package/src/funding/paypal/config.jsx +43 -46
  70. package/src/funding/paypal/index.js +1 -2
  71. package/src/funding/paypal/style.scoped.scss +80 -74
  72. package/src/funding/paypal/template.jsx +450 -355
  73. package/src/funding/payu/config.jsx +50 -38
  74. package/src/funding/payu/index.js +1 -1
  75. package/src/funding/satispay/config.jsx +50 -38
  76. package/src/funding/satispay/index.js +1 -1
  77. package/src/funding/sepa/config.jsx +19 -12
  78. package/src/funding/sepa/index.js +1 -2
  79. package/src/funding/sofort/config.jsx +48 -36
  80. package/src/funding/sofort/index.js +1 -2
  81. package/src/funding/trustly/config.jsx +50 -38
  82. package/src/funding/trustly/index.js +1 -2
  83. package/src/funding/venmo/config.jsx +80 -74
  84. package/src/funding/venmo/index.js +1 -2
  85. package/src/funding/venmo/style.scoped.scss +30 -32
  86. package/src/funding/venmo/template.jsx +56 -56
  87. package/src/funding/verkkopankki/config.jsx +50 -38
  88. package/src/funding/verkkopankki/index.js +1 -1
  89. package/src/funding/wechatpay/config.jsx +48 -36
  90. package/src/funding/wechatpay/index.js +1 -2
  91. package/src/funding/zimpler/config.jsx +19 -12
  92. package/src/funding/zimpler/index.js +1 -2
  93. package/src/interface/actions.js +1 -1
  94. package/src/interface/button.js +60 -44
  95. package/src/interface/card-fields.js +11 -8
  96. package/src/interface/fields.js +7 -4
  97. package/src/interface/marks.js +4 -4
  98. package/src/interface/payment-fields.js +7 -4
  99. package/src/interface/wallet.js +4 -4
  100. package/src/lib/errors.js +7 -7
  101. package/src/lib/index.js +5 -5
  102. package/src/lib/isRTLLanguage.js +3 -3
  103. package/src/lib/perceived-latency-instrumentation.js +54 -36
  104. package/src/lib/security.js +21 -17
  105. package/src/lib/session.js +39 -35
  106. package/src/marks/component.jsx +114 -65
  107. package/src/marks/index.js +1 -2
  108. package/src/marks/template.jsx +79 -65
  109. package/src/types.js +48 -48
  110. package/src/ui/buttons/button.jsx +311 -249
  111. package/src/ui/buttons/buttonDesigns/control.jsx +3 -5
  112. package/src/ui/buttons/buttonDesigns/divideLogoAnimation.jsx +127 -99
  113. package/src/ui/buttons/buttonDesigns/index.js +78 -75
  114. package/src/ui/buttons/buttonDesigns/inlineLogoTextDesign.jsx +102 -82
  115. package/src/ui/buttons/buttonDesigns/script.jsx +24 -18
  116. package/src/ui/buttons/buttonDesigns/types.js +6 -7
  117. package/src/ui/buttons/buttons.jsx +318 -212
  118. package/src/ui/buttons/config.js +62 -59
  119. package/src/ui/buttons/content.jsx +304 -119
  120. package/src/ui/buttons/index.js +1 -1
  121. package/src/ui/buttons/menu-button/index.js +1 -1
  122. package/src/ui/buttons/menu-button/menu-button.jsx +29 -22
  123. package/src/ui/buttons/menu-button/menu-button.scoped.scss +16 -17
  124. package/src/ui/buttons/poweredBy.jsx +23 -23
  125. package/src/ui/buttons/props.js +677 -529
  126. package/src/ui/buttons/script.jsx +182 -160
  127. package/src/ui/buttons/spinner.jsx +4 -6
  128. package/src/ui/buttons/style.jsx +15 -14
  129. package/src/ui/buttons/styles/base.js +24 -16
  130. package/src/ui/buttons/styles/button.js +24 -22
  131. package/src/ui/buttons/styles/color.js +118 -118
  132. package/src/ui/buttons/styles/custom.js +30 -24
  133. package/src/ui/buttons/styles/index.js +1 -1
  134. package/src/ui/buttons/styles/labels.js +17 -13
  135. package/src/ui/buttons/styles/page.js +3 -3
  136. package/src/ui/buttons/styles/responsive.js +226 -118
  137. package/src/ui/buttons/tagline.jsx +53 -54
  138. package/src/ui/chevron.jsx +27 -16
  139. package/src/ui/index.js +3 -3
  140. package/src/ui/loading.jsx +25 -18
  141. package/src/ui/text/index.js +1 -1
  142. package/src/ui/text/style.scoped.scss +25 -26
  143. package/src/ui/text/text.jsx +42 -20
  144. package/src/ui/tracking.jsx +18 -11
  145. package/src/zoid/buttons/component.jsx +820 -677
  146. package/src/zoid/buttons/container.jsx +140 -107
  147. package/src/zoid/buttons/index.js +1 -1
  148. package/src/zoid/buttons/prerender.jsx +84 -64
  149. package/src/zoid/buttons/util.js +346 -254
  150. package/src/zoid/card-fields/component.jsx +581 -549
  151. package/src/zoid/card-fields/index.js +1 -1
  152. package/src/zoid/card-fields/prerender.jsx +20 -17
  153. package/src/zoid/card-form/component.js +155 -141
  154. package/src/zoid/card-form/index.js +1 -1
  155. package/src/zoid/checkout/component.jsx +314 -282
  156. package/src/zoid/checkout/config.js +2 -2
  157. package/src/zoid/checkout/content.js +190 -154
  158. package/src/zoid/checkout/hacks.js +31 -28
  159. package/src/zoid/checkout/index.js +2 -2
  160. package/src/zoid/checkout/props.js +27 -33
  161. package/src/zoid/installments/component.jsx +83 -70
  162. package/src/zoid/installments/index.js +1 -1
  163. package/src/zoid/installments/props.js +1 -1
  164. package/src/zoid/menu/component.jsx +53 -48
  165. package/src/zoid/menu/index.js +1 -1
  166. package/src/zoid/menu/props.js +1 -3
  167. package/src/zoid/modal/component.jsx +119 -106
  168. package/src/zoid/modal/index.js +1 -1
  169. package/src/zoid/modal/props.js +1 -3
  170. package/src/zoid/payment-fields/component.jsx +215 -191
  171. package/src/zoid/payment-fields/container.jsx +73 -64
  172. package/src/zoid/payment-fields/index.js +1 -1
  173. package/src/zoid/payment-fields/prerender.jsx +16 -14
  174. package/src/zoid/payment-fields/props.js +6 -6
  175. package/src/zoid/qr-code/component.jsx +131 -115
  176. package/src/zoid/qr-code/container.jsx +74 -68
  177. package/src/zoid/qr-code/index.js +1 -1
  178. package/src/zoid/qr-code/prerender.jsx +17 -12
  179. package/src/zoid/qr-code/types.js +2 -2
  180. package/src/zoid/wallet/component.jsx +298 -260
  181. package/src/zoid/wallet/container.jsx +73 -64
  182. package/src/zoid/wallet/index.js +1 -1
  183. package/src/zoid/wallet/prerender.jsx +14 -14
  184. package/src/zoid/wallet/props.js +4 -4
@@ -1,420 +1,515 @@
1
1
  /* @flow */
2
2
  /** @jsx node */
3
3
 
4
- import { node, Fragment, Style, type ChildType } from '@krakenjs/jsx-pragmatic/src';
5
- import { PPLogo, PayPalLogo, CreditLogo, CreditMark, PayPalMark, GlyphCard, GlyphBank, LOGO_CLASS } from '@paypal/sdk-logos/src';
6
- import { FUNDING, WALLET_INSTRUMENT } from '@paypal/sdk-constants/src';
4
+ import {
5
+ node,
6
+ Fragment,
7
+ Style,
8
+ type ChildType,
9
+ } from "@krakenjs/jsx-pragmatic/src";
10
+ import {
11
+ PPLogoExternalImage,
12
+ PPLogoInlineSVG,
13
+ PayPalLogoExternalImage,
14
+ PayPalLogoInlineSVG,
15
+ CreditLogoExternalImage,
16
+ CreditLogoInlineSVG,
17
+ CreditMarkExternalImage,
18
+ CreditMarkInlineSVG,
19
+ PayPalMarkExternalImage,
20
+ PayPalMarkInlineSVG,
21
+ GlyphCardExternalImage,
22
+ GlyphCardInlineSVG,
23
+ GlyphBankExternalImage,
24
+ GlyphBankInlineSVG,
25
+ LOGO_CLASS,
26
+ } from "@paypal/sdk-logos/src";
27
+ import { FUNDING, WALLET_INSTRUMENT } from "@paypal/sdk-constants/src";
7
28
 
8
29
  import {
9
- type LogoOptions,
10
- type LabelOptions,
11
- type DesignExperimentLabelOptions,
12
- type WalletLabelOptions,
13
- type TagOptions,
14
- BasicLabel
15
- } from '../common';
16
- import { CLASS, ATTRIBUTE, BUTTON_LAYOUT } from '../../constants';
17
- import { componentContent } from '../content';
18
- import { Text, Space, PlaceHolder } from '../../ui/text';
19
- import { TrackingBeacon } from '../../ui/tracking';
20
- import { HIDDEN, VISIBLE, COMPRESSED, EXPANDED } from '../../ui/buttons/styles/labels';
21
-
22
- import css from './style.scoped.scss';
23
-
24
- export function Logo({ logoColor } : LogoOptions) : ChildType {
25
- return (
26
- <PayPalLogo logoColor={ logoColor } loadFromCDN={ __WEB__ } />
27
- );
30
+ type LogoOptions,
31
+ type LabelOptions,
32
+ type DesignExperimentLabelOptions,
33
+ type WalletLabelOptions,
34
+ type TagOptions,
35
+ BasicLabel,
36
+ } from "../common";
37
+ import { CLASS, ATTRIBUTE, BUTTON_LAYOUT } from "../../constants";
38
+ import { componentContent } from "../content";
39
+ import { Text, Space, PlaceHolder } from "../../ui/text";
40
+ import { TrackingBeacon } from "../../ui/tracking";
41
+ import {
42
+ HIDDEN,
43
+ VISIBLE,
44
+ COMPRESSED,
45
+ EXPANDED,
46
+ } from "../../ui/buttons/styles/labels";
47
+
48
+ import css from "./style.scoped.scss";
49
+
50
+ export function Logo({ logoColor }: LogoOptions): ChildType {
51
+ return __WEB__ ? (
52
+ <PayPalLogoExternalImage logoColor={logoColor} />
53
+ ) : (
54
+ <PayPalLogoInlineSVG logoColor={logoColor} />
55
+ );
28
56
  }
29
57
 
30
- function getPersonalizationText({ personalization, layout, multiple } : LabelOptions) : ?string {
31
- const personalizationText = personalization && personalization.buttonText && personalization.buttonText.text;
32
-
33
- if (!personalizationText) {
34
- return;
35
- }
36
-
37
- if (personalizationText.match(/[{}]/)) {
38
- return;
39
- }
40
-
41
- if (layout === BUTTON_LAYOUT.HORIZONTAL && multiple) {
42
- return;
43
- }
44
-
45
- return personalizationText;
58
+ function getPersonalizationText({
59
+ personalization,
60
+ layout,
61
+ multiple,
62
+ }: LabelOptions): ?string {
63
+ const personalizationText =
64
+ personalization &&
65
+ personalization.buttonText &&
66
+ personalization.buttonText.text;
67
+
68
+ if (!personalizationText) {
69
+ return;
70
+ }
71
+
72
+ if (personalizationText.match(/[{}]/)) {
73
+ return;
74
+ }
75
+
76
+ if (layout === BUTTON_LAYOUT.HORIZONTAL && multiple) {
77
+ return;
78
+ }
79
+
80
+ return personalizationText;
46
81
  }
47
82
 
48
- function getPersonalizationTracker({ personalization } : LabelOptions) : ?string {
49
- const personalizationTracker = personalization && personalization.buttonText && personalization.buttonText.tracking && personalization.buttonText.tracking.impression;
83
+ function getPersonalizationTracker({ personalization }: LabelOptions): ?string {
84
+ const personalizationTracker =
85
+ personalization &&
86
+ personalization.buttonText &&
87
+ personalization.buttonText.tracking &&
88
+ personalization.buttonText.tracking.impression;
50
89
 
51
- if (!personalizationTracker) {
52
- return;
53
- }
90
+ if (!personalizationTracker) {
91
+ return;
92
+ }
54
93
 
55
- return personalizationTracker;
94
+ return personalizationTracker;
56
95
  }
57
96
 
58
- function getButtonPersonalizationStyle(opts : LabelOptions) : ?ChildType {
59
- if (__TEST__) {
60
- return null;
61
- }
97
+ function getButtonPersonalizationStyle(opts: LabelOptions): ?ChildType {
98
+ if (__TEST__) {
99
+ return null;
100
+ }
62
101
 
63
- const { tagline } = opts;
102
+ const { tagline } = opts;
64
103
 
65
- const personalizationText = !tagline && getPersonalizationText(opts);
104
+ const personalizationText = !tagline && getPersonalizationText(opts);
66
105
 
67
- const MIN_WIDTH = 300;
68
- const PERSONALIZATION_DURATION = 5;
106
+ const MIN_WIDTH = 300;
107
+ const PERSONALIZATION_DURATION = 5;
69
108
 
70
- const PAYPAL_BUTTON = `.${ CLASS.BUTTON }[${ ATTRIBUTE.FUNDING_SOURCE }=${ FUNDING.PAYPAL }]`;
109
+ const PAYPAL_BUTTON = `.${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAYPAL}]`;
71
110
 
72
- return (
73
- <style innerHTML={ `
74
- @media only screen and (max-width: ${ MIN_WIDTH }px) {
75
- .${ CLASS.DOM_READY } ${ PAYPAL_BUTTON } .${ CLASS.PERSONALIZATION_TEXT } {
76
- ${ HIDDEN }
111
+ return (
112
+ <style
113
+ innerHTML={`
114
+ @media only screen and (max-width: ${MIN_WIDTH}px) {
115
+ .${CLASS.DOM_READY} ${PAYPAL_BUTTON} .${
116
+ CLASS.PERSONALIZATION_TEXT
117
+ } {
118
+ ${HIDDEN}
77
119
  }
78
120
  }
79
121
 
80
- @media only screen and (min-width: ${ MIN_WIDTH }px) {
81
- .${ CLASS.DOM_READY } ${ PAYPAL_BUTTON } .${ LOGO_CLASS.LOGO }.${ LOGO_CLASS.LOGO }-${ FUNDING.PAYPAL } {
82
- animation: ${ personalizationText ? `toggle-paypal-logo ${ PERSONALIZATION_DURATION }s 0s forwards` : `none` };
122
+ @media only screen and (min-width: ${MIN_WIDTH}px) {
123
+ .${CLASS.DOM_READY} ${PAYPAL_BUTTON} .${LOGO_CLASS.LOGO}.${
124
+ LOGO_CLASS.LOGO
125
+ }-${FUNDING.PAYPAL} {
126
+ animation: ${
127
+ personalizationText
128
+ ? `toggle-paypal-logo ${PERSONALIZATION_DURATION}s 0s forwards`
129
+ : `none`
130
+ };
83
131
  }
84
132
 
85
- .${ CLASS.DOM_READY } ${ PAYPAL_BUTTON } .${ CLASS.TEXT }:not(.${ CLASS.PERSONALIZATION_TEXT }):not(.${ CLASS.HIDDEN }) {
86
- ${ COMPRESSED }
87
- ${ VISIBLE }
88
- animation: ${ personalizationText ? `show-text-delayed ${ PERSONALIZATION_DURATION }s 0s forwards` : `show-text 1s 0s forwards` };
133
+ .${CLASS.DOM_READY} ${PAYPAL_BUTTON} .${CLASS.TEXT}:not(.${
134
+ CLASS.PERSONALIZATION_TEXT
135
+ }):not(.${CLASS.HIDDEN}) {
136
+ ${COMPRESSED}
137
+ ${VISIBLE}
138
+ animation: ${
139
+ personalizationText
140
+ ? `show-text-delayed ${PERSONALIZATION_DURATION}s 0s forwards`
141
+ : `show-text 1s 0s forwards`
142
+ };
89
143
  }
90
144
 
91
- .${ CLASS.DOM_READY } ${ PAYPAL_BUTTON } .${ CLASS.PERSONALIZATION_TEXT } {
92
- ${ COMPRESSED }
93
- ${ VISIBLE }
94
- animation: show-personalization-text ${ PERSONALIZATION_DURATION }s 0s forwards;
145
+ .${CLASS.DOM_READY} ${PAYPAL_BUTTON} .${
146
+ CLASS.PERSONALIZATION_TEXT
147
+ } {
148
+ ${COMPRESSED}
149
+ ${VISIBLE}
150
+ animation: show-personalization-text ${PERSONALIZATION_DURATION}s 0s forwards;
95
151
  }
96
152
  }
97
153
 
98
154
  @keyframes toggle-paypal-logo {
99
- 0% { ${ EXPANDED } }
100
- 15% { ${ COMPRESSED } }
101
- 85% { ${ COMPRESSED } }
102
- 100% { ${ EXPANDED } }
155
+ 0% { ${EXPANDED} }
156
+ 15% { ${COMPRESSED} }
157
+ 85% { ${COMPRESSED} }
158
+ 100% { ${EXPANDED} }
103
159
  }
104
160
 
105
161
  @keyframes show-text-delayed {
106
- 0% { ${ COMPRESSED } }
107
- 85% { ${ COMPRESSED } }
108
- 100% { ${ EXPANDED } }
162
+ 0% { ${COMPRESSED} }
163
+ 85% { ${COMPRESSED} }
164
+ 100% { ${EXPANDED} }
109
165
  }
110
166
 
111
167
  @keyframes show-personalization-text {
112
- 0% { ${ COMPRESSED } }
113
- 15% { ${ COMPRESSED } }
114
- 25% { ${ EXPANDED } }
115
- 70% { ${ EXPANDED } }
116
- 85% { ${ COMPRESSED } }
117
- 100% { ${ COMPRESSED } }
168
+ 0% { ${COMPRESSED} }
169
+ 15% { ${COMPRESSED} }
170
+ 25% { ${EXPANDED} }
171
+ 70% { ${EXPANDED} }
172
+ 85% { ${COMPRESSED} }
173
+ 100% { ${COMPRESSED} }
118
174
  }
119
- ` } />
120
- );
175
+ `}
176
+ />
177
+ );
121
178
  }
122
179
 
123
- function ButtonPersonalization(opts : LabelOptions) : ?ChildType {
124
- if (__WEB__) {
125
- return;
126
- }
127
-
128
- const { nonce, tagline, label } = opts;
129
-
130
- if (tagline || !label) {
131
- return;
132
- }
133
-
134
- const personalizationText = getPersonalizationText(opts);
135
- const personalizationTracker = getPersonalizationTracker(opts);
136
-
137
- if (!personalizationText) {
138
- return;
139
- }
140
-
141
- return (
142
- <Fragment>
143
- <Text className={ [ CLASS.PERSONALIZATION_TEXT ] } optional={ 2 }>{ personalizationText }</Text>
144
- {
145
- personalizationTracker &&
146
- <TrackingBeacon url={ personalizationTracker } nonce={ nonce } />
147
- }
148
- {
149
- getButtonPersonalizationStyle(opts)
150
- }
151
- </Fragment>
152
-
153
- );
180
+ function ButtonPersonalization(opts: LabelOptions): ?ChildType {
181
+ if (__WEB__) {
182
+ return;
183
+ }
184
+
185
+ const { nonce, tagline, label } = opts;
186
+
187
+ if (tagline || !label) {
188
+ return;
189
+ }
190
+
191
+ const personalizationText = getPersonalizationText(opts);
192
+ const personalizationTracker = getPersonalizationTracker(opts);
193
+
194
+ if (!personalizationText) {
195
+ return;
196
+ }
197
+
198
+ return (
199
+ <Fragment>
200
+ <Text className={[CLASS.PERSONALIZATION_TEXT]} optional={2}>
201
+ {personalizationText}
202
+ </Text>
203
+ {personalizationTracker && (
204
+ <TrackingBeacon url={personalizationTracker} nonce={nonce} />
205
+ )}
206
+ {getButtonPersonalizationStyle(opts)}
207
+ </Fragment>
208
+ );
154
209
  }
155
210
 
156
-
157
- export function Label(opts : LabelOptions) : ChildType {
158
- return (
159
- <Fragment>
160
- <BasicLabel { ...opts } />
161
- <ButtonPersonalization { ...opts } />
162
- </Fragment>
163
- );
211
+ export function Label(opts: LabelOptions): ChildType {
212
+ return (
213
+ <Fragment>
214
+ <BasicLabel {...opts} />
215
+ <ButtonPersonalization {...opts} />
216
+ </Fragment>
217
+ );
164
218
  }
165
219
 
166
- export function DesignExperimentLabel(opts : DesignExperimentLabelOptions) : ChildType {
167
- const { buttonDesignComponent, ...updatedOpts } = opts;
168
- const basicLabel = (<BasicLabel { ...updatedOpts } />);
169
- const buttonPersonalization = (<ButtonPersonalization { ...updatedOpts } />);
170
- return (
171
- <Fragment>
172
- { basicLabel }
173
- { buttonDesignComponent }
174
- { buttonPersonalization }
175
- </Fragment>
176
- );
220
+ export function DesignExperimentLabel(
221
+ opts: DesignExperimentLabelOptions
222
+ ): ChildType {
223
+ const { buttonDesignComponent, ...updatedOpts } = opts;
224
+ const basicLabel = <BasicLabel {...updatedOpts} />;
225
+ const buttonPersonalization = <ButtonPersonalization {...updatedOpts} />;
226
+ return (
227
+ <Fragment>
228
+ {basicLabel}
229
+ {buttonDesignComponent}
230
+ {buttonPersonalization}
231
+ </Fragment>
232
+ );
177
233
  }
178
234
 
179
- export function WalletLabelOld(opts : WalletLabelOptions) : ?ChildType {
180
- const { logoColor, instrument, locale, content, commit } = opts;
235
+ export function WalletLabelOld(opts: WalletLabelOptions): ?ChildType {
236
+ const { logoColor, instrument, locale, content, commit } = opts;
181
237
 
182
- if (__WEB__) {
183
- return;
184
- }
238
+ if (__WEB__) {
239
+ return;
240
+ }
185
241
 
186
- if (!instrument) {
187
- throw new Error(`Expected instrument`);
188
- }
242
+ if (!instrument) {
243
+ throw new Error(`Expected instrument`);
244
+ }
189
245
 
190
- let logo;
246
+ let logo;
191
247
 
192
- if (instrument.logoUrl) {
193
- logo = <img class='card-art' src={ instrument.logoUrl } />;
194
- } else if (instrument.type === WALLET_INSTRUMENT.CARD) {
195
- logo = <GlyphCard logoColor={ logoColor } loadFromCDN={ __WEB__ } />;
196
- } else if (instrument.type === WALLET_INSTRUMENT.BANK) {
197
- logo = <GlyphBank logoColor={ logoColor } loadFromCDN={ __WEB__ } />;
198
- } else if (instrument.type === WALLET_INSTRUMENT.CREDIT) {
199
- logo = <CreditLogo locale={ locale } logoColor={ logoColor } loadFromCDN={ __WEB__ } />;
200
- }
201
-
202
- return (
203
- <Style css={ css }>
204
- <div class='wallet-label'>
205
- <div class='paypal-mark'>
206
- <PPLogo logoColor={ logoColor } loadFromCDN={ __WEB__ } />
207
- </div>
208
- {
209
- (instrument.oneClick && commit && content) &&
210
- <div class='pay-label'>
211
- <Space />
212
- <Text>{ content.payNow }</Text>
213
- </div>
214
- }
215
- <div class='paypal-wordmark'>
216
- <Space />
217
- <PayPalLogo logoColor={ logoColor } loadFromCDN={ __WEB__ } />
218
- </div>
219
- <div class='divider'>|</div>
220
- {
221
- logo &&
222
- <div class='logo' optional>
223
- { logo }
224
- <Space />
225
- </div>
226
- }
227
- <div class='label'>
228
- <Text className={ [ 'limit' ] }>
229
- { instrument.label }
230
- </Text>
231
- </div>
232
- </div>
233
- </Style>
248
+ if (instrument.logoUrl) {
249
+ logo = <img class="card-art" src={instrument.logoUrl} />;
250
+ } else if (instrument.type === WALLET_INSTRUMENT.CARD) {
251
+ logo = __WEB__ ? (
252
+ <GlyphCardExternalImage logoColor={logoColor} />
253
+ ) : (
254
+ <GlyphCardInlineSVG logoColor={logoColor} />
234
255
  );
235
- }
236
-
237
- function ShowPayLabel(opts) : ?ChildType {
238
- const {instrument, content, payNow, textColor, logo, label } = opts;
239
-
240
- return (
241
- <div class='show-pay-label'>
242
- <div class='pay-label' optional={ 2 }>
243
- <Space />
244
- {
245
- (instrument && content)
246
- ? <Text>{ payNow ? content.payNow : content.payWith }</Text>
247
- : <Text><PlaceHolder chars={ 7 } color={ textColor } /></Text>
248
- }
249
- <Space />
250
- </div>
251
- <div class='logo' optional={ 1 }>
252
- {
253
- (instrument && logo)
254
- ? logo
255
- : <Text><PlaceHolder chars={ 4 } color={ textColor } /></Text>
256
- }
257
- </div>
258
- <div class='label'>
259
- <Space />
260
- {
261
- (instrument && label)
262
- ? <Text>{ label }</Text>
263
- : <Text><PlaceHolder chars={ 6 } color={ textColor } /></Text>
264
- }
265
- </div>
266
- </div>
256
+ } else if (instrument.type === WALLET_INSTRUMENT.BANK) {
257
+ logo = __WEB__ ? (
258
+ <GlyphBankExternalImage logoColor={logoColor} />
259
+ ) : (
260
+ <GlyphBankInlineSVG logoColor={logoColor} />
267
261
  );
268
- }
269
-
270
- function ShowInstrumentsOnFile(opts) : ?ChildType {
271
- const { instrument, textColor, logo, label, content } = opts;
272
-
273
- return (
274
- <div class='show-instruments-on-file'>
275
- {
276
- instrument?.secondaryInstruments?.[0]
277
- ? (
278
- <div class='balance'>
279
- <Text>{ content?.balance } &</Text>
280
- <Space />
281
- </div>
282
- )
283
- : null
284
- }
285
- {
286
- (instrument?.type === "balance")
287
- ? (
288
- <div class='paypal-balance'>
289
- <Text>{ content?.payPalBalance }</Text>
290
- </div>
291
- )
292
- : (
293
- <div class='fi-container'>
294
- <div class='fi-logo'>
295
- {
296
- (instrument && logo)
297
- ? logo
298
- : <Text><PlaceHolder chars={ 4 } color={ textColor } /></Text>
299
- }
300
- </div>
301
- <div class='fi-label'>
302
- <Space />
303
- {
304
- (instrument && label)
305
- ? <Text>{ label }</Text>
306
- : <Text><PlaceHolder chars={ 6 } color={ textColor } /></Text>
307
- }
308
- </div>
309
- </div>
310
- )
311
- }
312
- </div>
262
+ } else if (instrument.type === WALLET_INSTRUMENT.CREDIT) {
263
+ logo = __WEB__ ? (
264
+ <CreditLogoExternalImage locale={locale} logoColor={logoColor} />
265
+ ) : (
266
+ <CreditLogoInlineSVG locale={locale} logoColor={logoColor} />
313
267
  );
268
+ }
269
+
270
+ return (
271
+ <Style css={css}>
272
+ <div class="wallet-label">
273
+ <div class="paypal-mark">
274
+ {__WEB__ ? (
275
+ <PPLogoExternalImage logoColor={logoColor} />
276
+ ) : (
277
+ <PPLogoInlineSVG logoColor={logoColor} />
278
+ )}
279
+ </div>
280
+ {instrument.oneClick && commit && content && (
281
+ <div class="pay-label">
282
+ <Space />
283
+ <Text>{content.payNow}</Text>
284
+ </div>
285
+ )}
286
+ <div class="paypal-wordmark">
287
+ <Space />
288
+ {__WEB__ ? (
289
+ <PayPalLogoExternalImage logoColor={logoColor} />
290
+ ) : (
291
+ <PayPalLogoInlineSVG logoColor={logoColor} />
292
+ )}
293
+ </div>
294
+ <div class="divider">|</div>
295
+ {logo && (
296
+ <div class="logo" optional>
297
+ {logo}
298
+ <Space />
299
+ </div>
300
+ )}
301
+ <div class="label">
302
+ <Text className={["limit"]}>{instrument.label}</Text>
303
+ </div>
304
+ </div>
305
+ </Style>
306
+ );
314
307
  }
315
308
 
316
- export function WalletLabel(opts : WalletLabelOptions) : ?ChildType {
317
- const { logoColor, instrument, content, commit, vault, textColor, fundingSource, showPayLabel } = opts;
318
-
319
- if (instrument && !instrument.type) {
320
- return WalletLabelOld(opts);
321
- }
322
-
323
- let logo;
324
- let label;
325
- let branded;
326
-
327
- if (instrument && typeof instrument.branded === 'boolean') {
328
- branded = instrument.branded;
329
- } else if (fundingSource === FUNDING.PAYPAL || fundingSource === FUNDING.CREDIT) {
330
- branded = true;
331
- } else if (fundingSource === FUNDING.CARD) {
332
- branded = false;
333
- } else {
334
- branded = true;
335
- }
336
-
337
- if (instrument) {
338
- if (instrument.type === WALLET_INSTRUMENT.CARD && instrument.label) {
339
- logo = instrument.logoUrl
340
- ? <img class='card-art' src={ instrument.logoUrl } />
341
- : <GlyphCard logoColor={ logoColor } loadFromCDN={ __WEB__ } />;
342
-
343
- label = instrument.label.replace('••••', '••');
344
-
345
- } else if (instrument.type === WALLET_INSTRUMENT.BANK && instrument.label) {
346
- logo = instrument.logoUrl
347
- ? <img class='card-art' src={ instrument.logoUrl } />
348
- : <GlyphBank logoColor={ logoColor } loadFromCDN={ __WEB__ } />;
349
-
350
- label = instrument.label.replace('••••', '••');
351
-
352
- } else if (instrument.type === WALLET_INSTRUMENT.CREDIT) {
353
- logo = <CreditMark loadFromCDN={ __WEB__ } />;
309
+ function ShowPayLabel(opts): ?ChildType {
310
+ const { instrument, content, payNow, textColor, logo, label } = opts;
311
+
312
+ return (
313
+ <div class="show-pay-label">
314
+ <div class="pay-label" optional={2}>
315
+ <Space />
316
+ {instrument && content ? (
317
+ <Text>{payNow ? content.payNow : content.payWith}</Text>
318
+ ) : (
319
+ <Text>
320
+ <PlaceHolder chars={7} color={textColor} />
321
+ </Text>
322
+ )}
323
+ <Space />
324
+ </div>
325
+ <div class="logo" optional={1}>
326
+ {instrument && logo ? (
327
+ logo
328
+ ) : (
329
+ <Text>
330
+ <PlaceHolder chars={4} color={textColor} />
331
+ </Text>
332
+ )}
333
+ </div>
334
+ <div class="label">
335
+ <Space />
336
+ {instrument && label ? (
337
+ <Text>{label}</Text>
338
+ ) : (
339
+ <Text>
340
+ <PlaceHolder chars={6} color={textColor} />
341
+ </Text>
342
+ )}
343
+ </div>
344
+ </div>
345
+ );
346
+ }
354
347
 
355
- label = content && content.credit;
348
+ function ShowInstrumentsOnFile(opts): ?ChildType {
349
+ const { instrument, textColor, logo, label, content } = opts;
356
350
 
357
- } else if (instrument.type === WALLET_INSTRUMENT.BALANCE) {
358
- logo = <PayPalMark loadFromCDN={ __WEB__ } />;
351
+ return (
352
+ <div class="show-instruments-on-file">
353
+ {instrument?.secondaryInstruments?.[0] ? (
354
+ <div class="balance">
355
+ <Text>{content?.balance} &</Text>
356
+ <Space />
357
+ </div>
358
+ ) : null}
359
+ {instrument?.type === "balance" ? (
360
+ <div class="paypal-balance">
361
+ <Text>{content?.payPalBalance}</Text>
362
+ </div>
363
+ ) : (
364
+ <div class="fi-container">
365
+ <div class="fi-logo">
366
+ {instrument && logo ? (
367
+ logo
368
+ ) : (
369
+ <Text>
370
+ <PlaceHolder chars={4} color={textColor} />
371
+ </Text>
372
+ )}
373
+ </div>
374
+ <div class="fi-label">
375
+ <Space />
376
+ {instrument && label ? (
377
+ <Text>{label}</Text>
378
+ ) : (
379
+ <Text>
380
+ <PlaceHolder chars={6} color={textColor} />
381
+ </Text>
382
+ )}
383
+ </div>
384
+ </div>
385
+ )}
386
+ </div>
387
+ );
388
+ }
359
389
 
360
- label = content && content.balance;
390
+ export function WalletLabel(opts: WalletLabelOptions): ?ChildType {
391
+ const {
392
+ logoColor,
393
+ instrument,
394
+ content,
395
+ commit,
396
+ vault,
397
+ textColor,
398
+ fundingSource,
399
+ showPayLabel,
400
+ } = opts;
401
+
402
+ if (instrument && !instrument.type) {
403
+ return WalletLabelOld(opts);
404
+ }
405
+
406
+ let logo;
407
+ let label;
408
+ let branded;
409
+
410
+ if (instrument && typeof instrument.branded === "boolean") {
411
+ branded = instrument.branded;
412
+ } else if (
413
+ fundingSource === FUNDING.PAYPAL ||
414
+ fundingSource === FUNDING.CREDIT
415
+ ) {
416
+ branded = true;
417
+ } else if (fundingSource === FUNDING.CARD) {
418
+ branded = false;
419
+ } else {
420
+ branded = true;
421
+ }
422
+
423
+ if (instrument) {
424
+ const cardSVG = __WEB__ ? (
425
+ <GlyphCardExternalImage logoColor={logoColor} />
426
+ ) : (
427
+ <GlyphCardInlineSVG logoColor={logoColor} />
428
+ );
429
+ const bankSVG = __WEB__ ? (
430
+ <GlyphBankExternalImage logoColor={logoColor} />
431
+ ) : (
432
+ <GlyphBankInlineSVG logoColor={logoColor} />
433
+ );
361
434
 
362
- } else if (instrument.label) {
363
- label = instrument.label;
364
- }
365
- }
435
+ if (instrument.type === WALLET_INSTRUMENT.CARD && instrument.label) {
436
+ logo = instrument.logoUrl ? (
437
+ <img class="card-art" src={instrument.logoUrl} />
438
+ ) : (
439
+ cardSVG
440
+ );
441
+
442
+ label = instrument.label.replace("••••", "••");
443
+ } else if (instrument.type === WALLET_INSTRUMENT.BANK && instrument.label) {
444
+ logo = instrument.logoUrl ? (
445
+ <img class="card-art" src={instrument.logoUrl} />
446
+ ) : (
447
+ bankSVG
448
+ );
449
+
450
+ label = instrument.label.replace("••••", "••");
451
+ } else if (instrument.type === WALLET_INSTRUMENT.CREDIT) {
452
+ logo = __WEB__ ? <CreditMarkExternalImage /> : <CreditMarkInlineSVG />;
366
453
 
367
- const payNow = Boolean((instrument && instrument.oneClick) && commit && !vault);
454
+ label = content && content.credit;
455
+ } else if (instrument.type === WALLET_INSTRUMENT.BALANCE) {
456
+ logo = __WEB__ ? <PayPalMarkExternalImage /> : <PayPalMarkInlineSVG />;
368
457
 
369
- const attrs = {};
370
- if (payNow) {
371
- attrs[ATTRIBUTE.PAY_NOW] = true;
458
+ label = content && content.balance;
459
+ } else if (instrument.label) {
460
+ label = instrument.label;
372
461
  }
373
-
374
- return (
375
- <Style css={ css }>
376
- <div class='wallet-label-new' { ...attrs }>
377
- {
378
- branded
379
- ? (
380
- <div class='paypal-mark'>
381
- <PPLogo logoColor={ logoColor } loadFromCDN={ __WEB__ } />
382
- <Space />
383
- </div>
384
- )
385
- : null
386
- }
387
- {
388
- showPayLabel
389
- ? <ShowPayLabel
390
- instrument={ instrument }
391
- content={ content }
392
- payNow={ payNow }
393
- textColor={ textColor }
394
- logo={ logo }
395
- label={ label }
396
- />
397
- : <ShowInstrumentsOnFile
398
- instrument={ instrument }
399
- textColor={ textColor }
400
- logo={ logo }
401
- label={ label }
402
- content={ content }
403
- />
404
- }
405
- </div>
406
- </Style>
407
- );
462
+ }
463
+
464
+ const payNow = Boolean(instrument && instrument.oneClick && commit && !vault);
465
+
466
+ const attrs = {};
467
+ if (payNow) {
468
+ attrs[ATTRIBUTE.PAY_NOW] = true;
469
+ }
470
+
471
+ return (
472
+ <Style css={css}>
473
+ <div class="wallet-label-new" {...attrs}>
474
+ {branded ? (
475
+ <div class="paypal-mark">
476
+ {__WEB__ ? (
477
+ <PPLogoExternalImage logoColor={logoColor} />
478
+ ) : (
479
+ <PPLogoInlineSVG logoColor={logoColor} />
480
+ )}
481
+ <Space />
482
+ </div>
483
+ ) : null}
484
+ {showPayLabel ? (
485
+ <ShowPayLabel
486
+ instrument={instrument}
487
+ content={content}
488
+ payNow={payNow}
489
+ textColor={textColor}
490
+ logo={logo}
491
+ label={label}
492
+ />
493
+ ) : (
494
+ <ShowInstrumentsOnFile
495
+ instrument={instrument}
496
+ textColor={textColor}
497
+ logo={logo}
498
+ label={label}
499
+ content={content}
500
+ />
501
+ )}
502
+ </div>
503
+ </Style>
504
+ );
408
505
  }
409
506
 
410
- export function Tag({ multiple, locale: { lang } } : TagOptions) : ?ChildType {
411
- if (__WEB__) {
412
- return null;
413
- }
507
+ export function Tag({ multiple, locale: { lang } }: TagOptions): ?ChildType {
508
+ if (__WEB__) {
509
+ return null;
510
+ }
414
511
 
415
- const { DualTag, SaferTag } = componentContent[lang];
512
+ const { DualTag, SaferTag } = componentContent[lang];
416
513
 
417
- return (multiple && DualTag)
418
- ? <DualTag optional />
419
- : <SaferTag optional />;
514
+ return multiple && DualTag ? <DualTag optional /> : <SaferTag optional />;
420
515
  }