@paypal/checkout-components 5.0.413 → 5.0.414

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.
@@ -11,7 +11,6 @@ import {
11
11
  getColorForABTest,
12
12
  getDefaultColorForFundingSource,
13
13
  throwErrorForInvalidButtonColor,
14
- hasInvalidScriptOptionsForFullRedesign,
15
14
  determineRandomButtonColor,
16
15
  getColorABTestFromStorage,
17
16
  } from "./props";
@@ -128,47 +127,6 @@ describe("determineRandomButtonColor", () => {
128
127
  });
129
128
  });
130
129
 
131
- describe("hasInvalidScriptOptionsForFullRedesign", () => {
132
- const validFundingSources = [
133
- FUNDING.PAYPAL,
134
- FUNDING.PAYLATER,
135
- FUNDING.CREDIT,
136
- FUNDING.CARD,
137
- FUNDING.VENMO,
138
- ];
139
- const invalidFundingSources = [FUNDING.APPLEPAY, FUNDING.IDEAL];
140
-
141
- // Test valid funding sources
142
- validFundingSources.forEach((fundingSource) => {
143
- it(`should return false for fundingSource: ${fundingSource}`, () => {
144
- const result = hasInvalidScriptOptionsForFullRedesign({
145
- fundingSource,
146
- });
147
-
148
- expect(result).toBe(false);
149
- });
150
- });
151
-
152
- // Test invalid funding sources
153
- invalidFundingSources.forEach((fundingSource) => {
154
- it(`should return true for fundingSource: ${fundingSource}`, () => {
155
- const result = hasInvalidScriptOptionsForFullRedesign({
156
- fundingSource,
157
- });
158
-
159
- expect(result).toBe(true);
160
- });
161
- });
162
-
163
- it("should return true when funding source is null", () => {
164
- const result = hasInvalidScriptOptionsForFullRedesign({
165
- fundingSource: null,
166
- });
167
-
168
- expect(result).toBe(true);
169
- });
170
- });
171
-
172
130
  describe("throwErrorForInvalidButtonColor", () => {
173
131
  it("should throw error with appropriate message for invalid color", () => {
174
132
  expect(() => {
@@ -199,58 +199,13 @@ export function getComponentScript(): () => void {
199
199
  }
200
200
  }
201
201
 
202
- function toggleLogos() {
203
- const LOGO_CLASS = {
204
- PAYPAL_LOGO: ".paypal-logo-paypal-rebrand",
205
- PP_LOGO: ".paypal-logo-pp-rebrand",
206
- PAYPAL_BUTTON: ".paypal-button-rebrand",
207
- BUTTON_LABEL: ".paypal-button-label-container",
208
- };
209
-
210
- const paylaterButtons = getElements(LOGO_CLASS.PAYPAL_BUTTON);
211
-
212
- for (const button of paylaterButtons) {
213
- const paypalLogo = button.querySelector(LOGO_CLASS.PAYPAL_LOGO);
214
- const ppLogo = button.querySelector(LOGO_CLASS.PP_LOGO);
215
- const buttonLabel = button.querySelector(LOGO_CLASS.BUTTON_LABEL);
216
-
217
- if (!buttonLabel || !paypalLogo || !ppLogo) {
218
- continue;
219
- }
220
-
221
- const buttonWidth = buttonLabel.offsetWidth;
222
- const gap = calculateGap(buttonLabel);
223
-
224
- // temporarily hide PayPal logos
225
- hideElement(paypalLogo);
226
- hideElement(ppLogo);
227
-
228
- const allElements = getAllChildren(buttonLabel);
229
- const textElements = allElements.filter(
230
- (el) => !el.classList.contains("paypal-logo-pp-rebrand")
231
- );
232
-
233
- const totalWidth = getElementsTotalWidth(textElements) + gap;
234
-
235
- if (totalWidth > buttonWidth) {
236
- hideElement(paypalLogo);
237
- showElement(ppLogo);
238
- } else {
239
- showElement(paypalLogo);
240
- hideElement(ppLogo);
241
- }
242
- }
243
- }
244
-
245
202
  const setDomReady = once(
246
203
  debounce(() => {
247
204
  window.addEventListener("resize", () => {
248
205
  toggleOptionals();
249
- toggleLogos();
250
206
  });
251
207
  setTimeout(() => {
252
208
  toggleOptionals();
253
- toggleLogos();
254
209
  });
255
210
  if (document.body) {
256
211
  document.body.classList.add(CLASS.DOM_READY);
@@ -260,12 +215,10 @@ export function getComponentScript(): () => void {
260
215
 
261
216
  const load = () => {
262
217
  toggleOptionals();
263
- toggleLogos();
264
218
  setDomReady();
265
219
  };
266
220
 
267
221
  toggleOptionals();
268
- toggleLogos();
269
222
  document.addEventListener("DOMContentLoaded", load);
270
223
  window.addEventListener("load", load);
271
224
  window.addEventListener("resize", load);
@@ -4,6 +4,10 @@ import { ENV } from "@paypal/sdk-constants/src";
4
4
  import { LOGO_CLASS } from "@paypal/sdk-logos/src";
5
5
 
6
6
  import { CLASS } from "../../../constants";
7
+ import {
8
+ REBRAND_LABEL_HEIGHT_RATIO,
9
+ REBRAND_LOGO_TRANSLATE_Y,
10
+ } from "../config";
7
11
 
8
12
  const MIN_VAULT_BUTTON_WIDTH = 250;
9
13
 
@@ -104,8 +108,8 @@ export const buttonStyle = `
104
108
 
105
109
  .${CLASS.BUTTON} .${CLASS.SPINNER} {
106
110
  position: absolute;
107
- height: 40px;
108
- width: 40px;
111
+ height: 50%;
112
+ aspect-ratio: 1;
109
113
  top: 50%;
110
114
  left: 50%;
111
115
  transform: translateX(-50%) translateY(-50%);
@@ -171,7 +175,7 @@ export const buttonRebrandStyle = `
171
175
  align-items: center;
172
176
  justify-content: center;
173
177
  flex-wrap: nowrap;
174
- height: 76%;
178
+ height: ${REBRAND_LABEL_HEIGHT_RATIO * 100}%;
175
179
  min-width: 0px;
176
180
  position: relative;
177
181
  }
@@ -200,12 +204,25 @@ export const buttonRebrandStyle = `
200
204
  height: 100%;
201
205
  }
202
206
 
203
- .${CLASS.BUTTON_REBRAND} .${CLASS.TAGLINE} {
207
+ .${CLASS.BUTTON_REBRAND} .${CLASS.BUTTON_LABEL} > .${CLASS.LOGO_REBRAND} {
208
+ transform: translateY(${REBRAND_LOGO_TRANSLATE_Y}%);
209
+ }
210
+
211
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=wechatpay] .${CLASS.TEXT},
212
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=satispay] .${CLASS.TEXT},
213
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=giropay] .${CLASS.TEXT},
214
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=paidy] .${CLASS.TEXT},
215
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=trustly] .${CLASS.TEXT} {
216
+ transform: translateY(-1px);
217
+ }
218
+
219
+ .${CLASS.BUTTON_REBRAND}.${CLASS.TAGLINE} {
204
220
  max-width: 100%;
205
221
  font-size: initial;
206
222
  font-weight: 400;
207
223
  display: block;
208
224
  text-align: center;
209
225
  width: auto;
226
+ margin-top: 8px;
210
227
  }
211
228
  `;
@@ -54,6 +54,10 @@ export const buttonColorStyle = `
54
54
  background: #54B4E0;
55
55
  overflow: inherit;
56
56
  }
57
+
58
+ .${CLASS.BUTTON_REBRAND}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.VENMO}].${CLASS.COLOR}-${BUTTON_COLOR.REBRAND_BLUE}:hover {
59
+ background: #0073E0;
60
+ }
57
61
  }
58
62
 
59
63
  @media (hover:hover) {
@@ -61,6 +65,10 @@ export const buttonColorStyle = `
61
65
  background: #3DB5FF;
62
66
  overflow: inherit;
63
67
  }
68
+
69
+ .${CLASS.BUTTON_REBRAND}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.VENMO}].${CLASS.COLOR}-${BUTTON_COLOR.REBRAND_BLUE}:active {
70
+ background: #0074FF;
71
+ }
64
72
  }
65
73
 
66
74
  .${CLASS.BUTTON}.${CLASS.COLOR}-${BUTTON_COLOR.REBRAND_DARKBLUE},
@@ -151,7 +159,7 @@ export const buttonColorStyle = `
151
159
  .${CLASS.BUTTON_REBRAND}:focus {
152
160
  outline: none;
153
161
  }
154
-
162
+
155
163
  .${CLASS.BUTTON_REBRAND}:focus::after {
156
164
  content: '';
157
165
  position: absolute;
@@ -160,7 +168,7 @@ export const buttonColorStyle = `
160
168
  bottom: 3px;
161
169
  left: 3px;
162
170
  border: 0.125rem solid #FFFFFF;
163
- border-radius: inherit;
171
+ border-radius: max(0px, calc(var(--btn-radius, 4px) - 3px));
164
172
  box-shadow: 0 0 0 0.2rem #0066F5;
165
173
  pointer-events: none;
166
174
  }
@@ -249,6 +257,14 @@ export const buttonColorStyle = `
249
257
  background: #E62601;
250
258
  }
251
259
 
260
+ .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.ITAU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT} {
261
+ background: #003087;
262
+ }
263
+
264
+ .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SEPA}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT} {
265
+ background: #eee;
266
+ }
267
+
252
268
  /* APM button hover actions */
253
269
  .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BANCONTACT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover,
254
270
  .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BLIK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover,
@@ -267,52 +283,62 @@ export const buttonColorStyle = `
267
283
  .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAYU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover,
268
284
  .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SATISPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover,
269
285
  .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAIDY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover,
270
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.WECHATPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover {
286
+ .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.WECHATPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover,
287
+ .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.ITAU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover {
271
288
  filter: brightness(1.2);
272
289
  overflow: inherit;
273
290
  }
274
291
 
275
- /* APM button on focus actions */
276
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BLIK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
277
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BANCONTACT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
278
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
279
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETOBANCARIO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
280
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.EPS}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
281
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.GIROPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
282
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.IDEAL}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
283
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MERCADOPAGO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
284
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MULTIBANCO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
285
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MYBANK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
286
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.OXXO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
287
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.P24}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
288
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SOFORT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
289
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.TRUSTLY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
290
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAYU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
291
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SATISPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
292
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAIDY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
293
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.WECHATPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus {
292
+ .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SEPA}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:hover {
293
+ filter: brightness(0.95);
294
+ overflow: inherit;
295
+ }
296
+
297
+ /* APM button on focus actions (legacy only) */
298
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BLIK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
299
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BANCONTACT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
300
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
301
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETOBANCARIO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
302
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.EPS}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
303
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.GIROPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
304
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.IDEAL}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
305
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MERCADOPAGO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
306
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MULTIBANCO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
307
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MYBANK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
308
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.OXXO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
309
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.P24}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
310
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SOFORT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
311
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.TRUSTLY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
312
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAYU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
313
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SATISPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
314
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAIDY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
315
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.WECHATPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
316
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.ITAU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus,
317
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SEPA}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus {
294
318
  outline: none;
295
319
  }
296
320
 
297
- /* APM button after focus actions */
298
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BLIK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
299
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BANCONTACT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
300
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
301
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETOBANCARIO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
302
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.EPS}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
303
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.GIROPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
304
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.IDEAL}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
305
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MERCADOPAGO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
306
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MULTIBANCO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
307
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MYBANK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
308
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.OXXO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
309
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.P24}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
310
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SOFORT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
311
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.TRUSTLY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
312
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAYU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
313
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SATISPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
314
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAIDY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
315
- .${CLASS.BUTTON}[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.WECHATPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after {
321
+ /* APM button after focus actions (legacy only) */
322
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BLIK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
323
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BANCONTACT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
324
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
325
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.BOLETOBANCARIO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
326
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.EPS}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
327
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.GIROPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
328
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.IDEAL}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
329
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MERCADOPAGO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
330
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MULTIBANCO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
331
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.MYBANK}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
332
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.OXXO}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
333
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.P24}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
334
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SOFORT}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
335
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.TRUSTLY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
336
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAYU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
337
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SATISPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
338
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.PAIDY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
339
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.WECHATPAY}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
340
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.ITAU}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after,
341
+ .${CLASS.BUTTON}:not(.${CLASS.BUTTON_REBRAND})[${ATTRIBUTE.FUNDING_SOURCE}=${FUNDING.SEPA}].${CLASS.COLOR}-${BUTTON_COLOR.DEFAULT}:focus::after {
316
342
  content: '';
317
343
  position: absolute;
318
344
  top: 5px;
@@ -0,0 +1,71 @@
1
+ /* @flow */
2
+
3
+ import { describe, expect, test } from "vitest";
4
+
5
+ import {
6
+ BUTTON_REDESIGN_STYLE,
7
+ BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE,
8
+ } from "../config";
9
+
10
+ describe("BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE config", () => {
11
+ test("should include all BUTTON_REDESIGN_STYLE buckets", () => {
12
+ Object.keys(BUTTON_REDESIGN_STYLE).forEach((key) => {
13
+ expect(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE).toHaveProperty(key);
14
+ });
15
+ });
16
+
17
+ test("should have XL_BIG bucket with correct values", () => {
18
+ expect(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE.XL_BIG).toEqual({
19
+ minHeight: 60,
20
+ maxHeight: 65,
21
+ gap: 6,
22
+ fontSize: 20,
23
+ });
24
+ });
25
+
26
+ test("should have XXL_SMALL bucket with correct values", () => {
27
+ expect(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE.XXL_SMALL).toEqual({
28
+ minHeight: 65,
29
+ maxHeight: 70,
30
+ gap: 7,
31
+ fontSize: 22,
32
+ });
33
+ });
34
+
35
+ test("should have XXL_BIG bucket with correct values", () => {
36
+ expect(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE.XXL_BIG).toEqual({
37
+ minHeight: 70,
38
+ maxHeight: 75,
39
+ gap: 7,
40
+ fontSize: 24,
41
+ });
42
+ });
43
+
44
+ test("should have XXXL bucket with correct values", () => {
45
+ expect(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE.XXXL).toEqual({
46
+ minHeight: 75,
47
+ maxHeight: 200,
48
+ gap: 8,
49
+ fontSize: 26,
50
+ });
51
+ });
52
+
53
+ test("should have no gaps in height coverage between buckets", () => {
54
+ const buckets = Object.keys(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE)
55
+ .map((key) => BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE[key])
56
+ .filter((b) => b.minHeight !== undefined && b.maxHeight !== undefined)
57
+ .sort((a, b) => a.minHeight - b.minHeight);
58
+
59
+ for (let i = 1; i < buckets.length; i++) {
60
+ expect(buckets[i].minHeight).toBeLessThanOrEqual(
61
+ buckets[i - 1].maxHeight
62
+ );
63
+ }
64
+ });
65
+
66
+ test("should have continuous height coverage up to 200", () => {
67
+ const keys = Object.keys(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE);
68
+ const lastKey = keys[keys.length - 1];
69
+ expect(BUTTON_REDESIGN_DISABLEMAXHEIGHT_STYLE[lastKey].maxHeight).toBe(200);
70
+ });
71
+ });
@@ -72,9 +72,32 @@ export const labelStyle = `
72
72
  CLASS.BUTTON_LABEL
73
73
  } {
74
74
  font-family: PayPal Pro Book, system-ui, -apple-system, Roboto, "Segoe UI", Helvetica-Neue, Helvetica, Arial, sans-serif;
75
+ font-weight: 500;
75
76
  }
76
77
 
77
78
  .${CLASS.BUTTON_REBRAND}[data-funding-source=venmo] .${CLASS.BUTTON_LABEL} {
78
79
  font-family: Scto Grotesk A, system-ui, -apple-system, Roboto, "Segoe UI", Helvetica-Neue, Helvetica, Arial, sans-serif;
79
80
  }
81
+
82
+ /* targeting only credit and paylater buttons for the logo swap */
83
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=credit],
84
+ .${CLASS.BUTTON_REBRAND}[data-funding-source=paylater] {
85
+ container-type: size;
86
+ container-name: paylater-credit-btn;
87
+ }
88
+
89
+ .${CLASS.BUTTON_REBRAND} .${CLASS.LOGO_PP_REBRAND} {
90
+ display: none;
91
+ }
92
+
93
+ /* At smaller sizes, swap out the full paypal watermark for the smaller pp monogram. At 150px-200px wide: 25-40px show wordmark, 45px triggers monogram. */
94
+ @container paylater-credit-btn ((max-width: 197px) and (min-height: 43px)) or ((max-width: 147px) and (max-height: 43px)) or ((max-width: 250px) and (min-height: 60px)) {
95
+ .${CLASS.BUTTON_LABEL} > .${CLASS.LOGO_REBRAND} {
96
+ display: none;
97
+ }
98
+
99
+ .${CLASS.BUTTON_LABEL} > .${CLASS.LOGO_PP_REBRAND} {
100
+ display: inline-block;
101
+ }
102
+ }
80
103
  `;