@transferwise/comparison-components 18.1.8 → 18.1.12
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.
- package/CHANGELOG.md +12 -0
- package/dist/es/{ComparisonTableHeroContainer-836793a7.js → ComparisonTableHeroContainer-56b62473.js} +2 -2
- package/dist/es/{ComparisonTableHeroContainer-836793a7.js.map → ComparisonTableHeroContainer-56b62473.js.map} +1 -1
- package/dist/es/{ErrorTemplate-6dd1c21e.js → ErrorTemplate-dff7551e.js} +2 -2
- package/dist/es/{ErrorTemplate-6dd1c21e.js.map → ErrorTemplate-dff7551e.js.map} +1 -1
- package/dist/es/ProviderComparisonTable-3202e291.js +2 -0
- package/dist/es/{ProviderComparisonTable-f9fc6ff2.js.map → ProviderComparisonTable-3202e291.js.map} +1 -1
- package/dist/es/ReceiveAmount-0f17f4d4.js +2 -0
- package/dist/es/{ReceiveAmount-7b364554.js.map → ReceiveAmount-0f17f4d4.js.map} +1 -1
- package/dist/es/TransferFeeComparisonContainer-c727c52c.js +2 -0
- package/dist/es/TransferFeeComparisonContainer-c727c52c.js.map +1 -0
- package/dist/es/TravelMoney-b59d1dba.js +2 -0
- package/dist/es/{TravelMoney-d76d2cb2.js.map → TravelMoney-b59d1dba.js.map} +1 -1
- package/dist/es/clients.js +1 -1
- package/dist/es/clients.js.map +1 -1
- package/dist/es/comparison/index.js +1 -1
- package/dist/es/comparison/index.js.map +1 -1
- package/dist/es/comparison-table/index.js +1 -1
- package/dist/es/comparison-table-hero/index.js +1 -1
- package/dist/es/currencyFormatting-48cd4654.js +2 -0
- package/dist/es/{currencyFormatting-636a7fb2.js.map → currencyFormatting-48cd4654.js.map} +1 -1
- package/dist/es/extractQuote-1993120b.js +2 -0
- package/dist/es/extractQuote-1993120b.js.map +1 -0
- package/dist/es/{index-72bb1d8a.js → index-b36b3adc.js} +2 -2
- package/dist/es/{index-72bb1d8a.js.map → index-b36b3adc.js.map} +1 -1
- package/dist/es/index.js +1 -1
- package/dist/es/index.js.map +1 -1
- package/dist/es/provider-comparison-table/index.js +1 -1
- package/dist/es/provider-comparison-widget/index.js +1 -1
- package/dist/es/provider-comparison-widget/index.js.map +1 -1
- package/dist/es/slicedToArray-03b06e52.js +2 -0
- package/dist/es/slicedToArray-03b06e52.js.map +1 -0
- package/dist/es/transfer-fee-comparison/index.js +1 -1
- package/dist/es/transformQuotesResponse.js +1 -1
- package/dist/es/transformQuotesResponse.js.map +1 -1
- package/dist/es/transformQuotesResponseV2.js +1 -1
- package/dist/es/travel-money/index.js +1 -1
- package/dist/umd/comparison-components.css +1 -1
- package/dist/umd/comparison-components.js +6 -6
- package/dist/umd/comparison-components.js.map +1 -1
- package/dist/umd/transfer-fee-comparison/transfer-fee-comparison.css +1 -1
- package/dist/umd/transfer-fee-comparison/transfer-fee-comparison.js +6 -6
- package/dist/umd/transfer-fee-comparison/transfer-fee-comparison.js.map +1 -1
- package/package.json +1 -1
- package/src/common/IsMobile/IsMobile.ts +9 -0
- package/src/common/IsMobile/index.js +1 -0
- package/src/common/UseClientWidth/index.js +1 -0
- package/src/common/UseClientWidth/useClientWidth.js +43 -0
- package/src/resources/clients/quotes/__test__/transformQuotesResponseV2.spec.ts +4 -5
- package/src/resources/clients/quotes/transformQuotesResponseV2.ts +3 -3
- package/src/transfer-fee-comparison/TransferFeeComparisonContainer.tsx +2 -0
- package/src/transfer-fee-comparison/domain/LegacyComparisons.ts +1 -1
- package/src/transfer-fee-comparison/transfer-fee-comparison-table-row/TransferFeeComparisonTableRow.module.less +5 -8
- package/src/transfer-fee-comparison/transfer-fee-comparison-table-row/TransferFeeComparisonTableRow.tsx +47 -7
- package/src/transfer-fee-comparison/transfer-fee-comparison-table-row/fee-makeup-popover/FeeMakeupPopover.tsx +15 -2
- package/src/transfer-fee-comparison/transfer-fee-comparison-table-row/fee-makeup-popover/fee-makeup-popover.module.less +14 -0
- package/dist/es/ProviderComparisonTable-f9fc6ff2.js +0 -2
- package/dist/es/ReceiveAmount-7b364554.js +0 -2
- package/dist/es/TransferFeeComparisonContainer-c83c1df1.js +0 -2
- package/dist/es/TransferFeeComparisonContainer-c83c1df1.js.map +0 -1
- package/dist/es/TravelMoney-d76d2cb2.js +0 -2
- package/dist/es/currencyFormatting-636a7fb2.js +0 -2
- package/dist/es/extractQuote-0450d6a9.js +0 -2
- package/dist/es/extractQuote-0450d6a9.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transferwise/comparison-components",
|
|
3
|
-
"version": "18.1.
|
|
3
|
+
"version": "18.1.12",
|
|
4
4
|
"description": "Display a comparison table of providers given a route and amount.",
|
|
5
5
|
"homepage": "https://wise.com/gb/compare/",
|
|
6
6
|
"main": "dist/umd/comparison-components.js",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Breakpoint } from '@transferwise/components';
|
|
2
|
+
|
|
3
|
+
import { default as useClientWidth } from '../UseClientWidth';
|
|
4
|
+
|
|
5
|
+
export function IsMobile(): boolean {
|
|
6
|
+
const windowReference = typeof window === 'undefined' ? undefined : window;
|
|
7
|
+
const [clientWidth] = useClientWidth({ ref: windowReference }) as unknown as number[];
|
|
8
|
+
return clientWidth <= Breakpoint.SMALL;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { IsMobile as default } from './IsMobile';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useClientWidth as default } from './useClientWidth';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Copied from:
|
|
2
|
+
// https://github.com/transferwise/neptune-web/blob/5e97eae7a6b0575faf7853b802a35a000459472c/packages/components/src/common/hooks/useClientWidth/useClientWidth.js
|
|
3
|
+
import throttle from 'lodash.throttle';
|
|
4
|
+
import { useLayoutEffect, useState, useEffect } from 'react';
|
|
5
|
+
|
|
6
|
+
const THROTTLE_MS = 100;
|
|
7
|
+
|
|
8
|
+
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
|
|
9
|
+
|
|
10
|
+
export const useClientWidth = ({ ref, throttleMs = THROTTLE_MS }) => {
|
|
11
|
+
const [clientWidth, setClientWidth] = useState(null);
|
|
12
|
+
|
|
13
|
+
useIsomorphicLayoutEffect(() => {
|
|
14
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping
|
|
15
|
+
const updateClientWidth = () => {
|
|
16
|
+
if (ref) {
|
|
17
|
+
// when `ref` is a window
|
|
18
|
+
if (ref.innerWidth) {
|
|
19
|
+
setClientWidth(ref.innerWidth);
|
|
20
|
+
}
|
|
21
|
+
// when `ref` is an element
|
|
22
|
+
else if (ref.current) {
|
|
23
|
+
setClientWidth(ref.current.clientWidth);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
// This assignment saves a reference to the function so it will be the same passed to both addEventListener removeEventListener.
|
|
28
|
+
// If throttle gets passed directly to both add and removeEventListenet the results will be that the event
|
|
29
|
+
// won't get removed even if the component is unmounted.
|
|
30
|
+
const attachedFunction = throttle(updateClientWidth, throttleMs);
|
|
31
|
+
|
|
32
|
+
window.addEventListener('resize', attachedFunction, true);
|
|
33
|
+
|
|
34
|
+
updateClientWidth();
|
|
35
|
+
|
|
36
|
+
return () => window.removeEventListener('resize', attachedFunction, true);
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
return [clientWidth];
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// eslint-disable-next-line fp/no-mutation
|
|
43
|
+
useClientWidth.THROTTLE_MS = THROTTLE_MS;
|
|
@@ -18,18 +18,17 @@ describe('quotes v3 response transformations to the canonical model V2', () => {
|
|
|
18
18
|
fee: 2,
|
|
19
19
|
dateCollected: new Date('2018-10-23T12:03:27'),
|
|
20
20
|
receivedAmount: 1278.44,
|
|
21
|
-
sendAmount: 1280.44,
|
|
22
21
|
},
|
|
23
22
|
{
|
|
24
23
|
rate: 1,
|
|
25
24
|
fee: 3,
|
|
26
25
|
dateCollected: new Date('2018-10-23T12:03:27'),
|
|
27
26
|
receivedAmount: 1277.44,
|
|
28
|
-
sendAmount: 1280.44,
|
|
29
27
|
},
|
|
30
28
|
],
|
|
31
29
|
},
|
|
32
30
|
],
|
|
31
|
+
sendAmount: 1280.44,
|
|
33
32
|
sourceCurrency: 'GBP',
|
|
34
33
|
targetCurrency: 'EUR',
|
|
35
34
|
};
|
|
@@ -81,11 +80,11 @@ describe('quotes v3 response transformations to the canonical model V2', () => {
|
|
|
81
80
|
fee: 2,
|
|
82
81
|
dateCollected: new Date('2018-10-23T12:03:27'),
|
|
83
82
|
receivedAmount: 1252.8712,
|
|
84
|
-
sendAmount: 1280.44,
|
|
85
83
|
},
|
|
86
84
|
],
|
|
87
85
|
},
|
|
88
86
|
],
|
|
87
|
+
sendAmount: 1280.44,
|
|
89
88
|
sourceCurrency: 'GBP',
|
|
90
89
|
targetCurrency: 'EUR',
|
|
91
90
|
};
|
|
@@ -112,10 +111,10 @@ describe('quotes v3 response transformations to the canonical model V2', () => {
|
|
|
112
111
|
},
|
|
113
112
|
{
|
|
114
113
|
type: FeeType.HIDDEN,
|
|
115
|
-
amount: { value: 25.
|
|
114
|
+
amount: { value: 25.57, currency: 'GBP' },
|
|
116
115
|
},
|
|
117
116
|
],
|
|
118
|
-
total: { value: 27.
|
|
117
|
+
total: { value: 27.57, currency: 'GBP' },
|
|
119
118
|
},
|
|
120
119
|
receiveAmount: { value: 1252.8712, currency: 'EUR' },
|
|
121
120
|
},
|
|
@@ -20,9 +20,9 @@ function extractHiddenFeeInSourceCurrency(
|
|
|
20
20
|
) {
|
|
21
21
|
const expectedReceivedAmount = midmarketRate * (sendAmount - marketedFee);
|
|
22
22
|
const hiddenFeePaidOnTargetCurrency =
|
|
23
|
-
receivedAmount < expectedReceivedAmount ? expectedReceivedAmount - receivedAmount : 0;
|
|
23
|
+
receivedAmount < expectedReceivedAmount - 0.1 ? expectedReceivedAmount - receivedAmount : 0;
|
|
24
24
|
|
|
25
|
-
return parseFloat((hiddenFeePaidOnTargetCurrency * (1 / midmarketRate)).toFixed(
|
|
25
|
+
return parseFloat((hiddenFeePaidOnTargetCurrency * (1 / midmarketRate)).toFixed(2));
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
function extractFees(
|
|
@@ -57,7 +57,7 @@ function transformQuotesResponseV2(
|
|
|
57
57
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
58
58
|
const quote: LegacyQuote = extractQuote(p.quotes, quotesResults.targetCurrency);
|
|
59
59
|
const hiddenFee: number = extractHiddenFeeInSourceCurrency(
|
|
60
|
-
|
|
60
|
+
quotesResults.sendAmount,
|
|
61
61
|
quote.receivedAmount,
|
|
62
62
|
quote.fee,
|
|
63
63
|
midmarketRate,
|
|
@@ -57,6 +57,8 @@ const TransferFeeComparisonContainer = ({
|
|
|
57
57
|
? filter(quotes, urlLocale)
|
|
58
58
|
: quotes;
|
|
59
59
|
|
|
60
|
+
filteredQuotes.sort((a, b) => a.fees.total.value - b.fees.total.value);
|
|
61
|
+
|
|
60
62
|
const getTrackingAttributes = () => {
|
|
61
63
|
return {
|
|
62
64
|
largestProviderEnabled: enableLargestProviderFiltering,
|
|
@@ -2,6 +2,7 @@ type LegacyComparisons = {
|
|
|
2
2
|
providers: Provider[];
|
|
3
3
|
sourceCurrency: string;
|
|
4
4
|
targetCurrency: string;
|
|
5
|
+
sendAmount: number;
|
|
5
6
|
};
|
|
6
7
|
|
|
7
8
|
type Provider = {
|
|
@@ -16,7 +17,6 @@ type LegacyQuote = {
|
|
|
16
17
|
fee: number;
|
|
17
18
|
rate: number;
|
|
18
19
|
receivedAmount: number;
|
|
19
|
-
sendAmount: number;
|
|
20
20
|
dateCollected: Date;
|
|
21
21
|
};
|
|
22
22
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
.row__provider-logo {
|
|
29
29
|
position: relative;
|
|
30
30
|
flex: 1;
|
|
31
|
-
margin-left: @spacer;
|
|
31
|
+
margin-left: @spacer * 1.5;
|
|
32
32
|
|
|
33
33
|
@media (min-width: @screen-md) {
|
|
34
34
|
margin-left: @spacer * 6;
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
.row__fee {
|
|
53
|
-
margin: 0 (@spacer *
|
|
53
|
+
margin: 0 (@spacer * 1.5);
|
|
54
54
|
|
|
55
55
|
@media (min-width: @screen-md) {
|
|
56
56
|
margin: 0 (@spacer * 1.5);
|
|
@@ -58,13 +58,10 @@
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
.row__fee-makeup {
|
|
61
|
-
position: relative;
|
|
62
|
-
width: 24px;
|
|
63
|
-
height: 24px;
|
|
64
|
-
margin-top: -25px;
|
|
65
|
-
margin-right: @spacer;
|
|
66
|
-
|
|
67
61
|
@media (min-width: @screen-md) {
|
|
62
|
+
position: relative;
|
|
63
|
+
width: 24px;
|
|
64
|
+
height: 24px;
|
|
68
65
|
margin-top: -24px;
|
|
69
66
|
margin-right: @spacer * 3;
|
|
70
67
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
// eslint-disable-next-line no-restricted-imports
|
|
1
|
+
import React, { useState, MouseEvent } from 'react';
|
|
3
2
|
|
|
3
|
+
import IsMobile from '../../common/IsMobile';
|
|
4
4
|
import ProviderLogo from '../../common/ProviderLogo';
|
|
5
5
|
import Locale from '../../domain/Locale';
|
|
6
6
|
import TW_ALIAS from '../../resources/provider-constants';
|
|
@@ -29,6 +29,15 @@ const TransferFeeComparisonTableRow = ({
|
|
|
29
29
|
currency: quote.route.sourceCurrency,
|
|
30
30
|
value: 0,
|
|
31
31
|
};
|
|
32
|
+
const [feeBreakdownOpen, setFeeBreakdownOpen] = useState(false);
|
|
33
|
+
const isMobile = IsMobile() as boolean;
|
|
34
|
+
|
|
35
|
+
const handleRowClick = (event: MouseEvent<HTMLDivElement>) => {
|
|
36
|
+
const target = event.target as HTMLElement;
|
|
37
|
+
if (isMobile && !(isTargetAnotherBottomSheet(target) || feeBreakdownOpen)) {
|
|
38
|
+
setFeeBreakdownOpen(true);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
32
41
|
|
|
33
42
|
const logo: string =
|
|
34
43
|
quote.provider.alias === TW_ALIAS
|
|
@@ -36,8 +45,8 @@ const TransferFeeComparisonTableRow = ({
|
|
|
36
45
|
: quote.provider.logoUrl;
|
|
37
46
|
|
|
38
47
|
return (
|
|
39
|
-
|
|
40
|
-
<tr className={containerStyle(quote)}>
|
|
48
|
+
<>
|
|
49
|
+
<tr onClick={handleRowClick} className={containerStyle(quote)}>
|
|
41
50
|
<td className={componentStyles.row__providerLogo}>
|
|
42
51
|
<ProviderLogo
|
|
43
52
|
logo={logo}
|
|
@@ -59,17 +68,23 @@ const TransferFeeComparisonTableRow = ({
|
|
|
59
68
|
<FeeMakeupPopover
|
|
60
69
|
quote={quote}
|
|
61
70
|
midmarketRate={midmarketRate}
|
|
71
|
+
open={feeBreakdownOpen}
|
|
72
|
+
onClose={() => setFeeBreakdownOpen(false)}
|
|
62
73
|
urlLocale={urlLocale}
|
|
63
74
|
locale={locale}
|
|
64
75
|
/>
|
|
65
76
|
</td>
|
|
66
77
|
</tr>
|
|
67
78
|
{!nextQuote || isProviderWise(quote) || isProviderWise(nextQuote) ? (
|
|
68
|
-
|
|
79
|
+
<tr />
|
|
69
80
|
) : (
|
|
70
|
-
<
|
|
81
|
+
<tr>
|
|
82
|
+
<td>
|
|
83
|
+
<hr className={componentStyles.transferFeeComparisonTableRow__border} />
|
|
84
|
+
</td>
|
|
85
|
+
</tr>
|
|
71
86
|
)}
|
|
72
|
-
|
|
87
|
+
</>
|
|
73
88
|
);
|
|
74
89
|
};
|
|
75
90
|
|
|
@@ -79,4 +94,29 @@ const containerStyle = (quote: TransferFeeComparisonQuote) =>
|
|
|
79
94
|
const isProviderWise = (quote: TransferFeeComparisonQuote) =>
|
|
80
95
|
quote && quote.provider.alias === TW_ALIAS;
|
|
81
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Neptune's Bottomsheet propagates the onClick events to child components, and this is an issue here because
|
|
99
|
+
* the user can trigger the opening of a bottom sheet when trying to close another one.
|
|
100
|
+
*
|
|
101
|
+
* This is problematic specially because we have the "PoweredBy" bottom sheet in each row, too.
|
|
102
|
+
*
|
|
103
|
+
* This function takes the target (the element the user clicked) and check if it's clicking on top of the
|
|
104
|
+
* "Powered By" element, or on another bottom sheet.
|
|
105
|
+
*
|
|
106
|
+
* @param target
|
|
107
|
+
*/
|
|
108
|
+
const isTargetAnotherBottomSheet = (target: HTMLElement): boolean => {
|
|
109
|
+
const targetClassName = target.className;
|
|
110
|
+
if (typeof target.className !== 'string') {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return (
|
|
114
|
+
targetClassName.startsWith('twLogo') ||
|
|
115
|
+
targetClassName.startsWith('poweredBy') ||
|
|
116
|
+
targetClassName.startsWith('np-popover') ||
|
|
117
|
+
targetClassName.startsWith('np-bottom-sheet') ||
|
|
118
|
+
targetClassName.includes('dimmer')
|
|
119
|
+
);
|
|
120
|
+
};
|
|
121
|
+
|
|
82
122
|
export default TransferFeeComparisonTableRow;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Info, Size } from '@transferwise/components';
|
|
1
|
+
import { BottomSheet, Info, Size } from '@transferwise/components';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { IntlProvider } from 'react-intl';
|
|
4
4
|
|
|
5
|
+
import { default as IsMobile } from '../../../common/IsMobile';
|
|
5
6
|
import Locale from '../../../domain/Locale';
|
|
6
7
|
import TransferFeeComparisonQuote, { FeeType } from '../../domain/Quote';
|
|
7
8
|
|
|
@@ -13,6 +14,8 @@ import componentStyles from './fee-makeup-popover.module.less';
|
|
|
13
14
|
export type FeeMakeupPopoverProps = {
|
|
14
15
|
quote: TransferFeeComparisonQuote;
|
|
15
16
|
midmarketRate: number;
|
|
17
|
+
open: boolean;
|
|
18
|
+
onClose: () => void;
|
|
16
19
|
urlLocale: string;
|
|
17
20
|
locale: Locale;
|
|
18
21
|
};
|
|
@@ -20,13 +23,23 @@ export type FeeMakeupPopoverProps = {
|
|
|
20
23
|
const FeeMakeupPopover = ({
|
|
21
24
|
quote,
|
|
22
25
|
midmarketRate,
|
|
26
|
+
open,
|
|
27
|
+
onClose,
|
|
23
28
|
urlLocale,
|
|
24
29
|
locale,
|
|
25
30
|
}: FeeMakeupPopoverProps): JSX.Element => {
|
|
31
|
+
const content = PopoverContent(quote, midmarketRate, urlLocale, locale);
|
|
32
|
+
|
|
26
33
|
return (
|
|
27
34
|
<div className={componentStyles.feeMakeupPopover__container}>
|
|
28
35
|
<IntlProvider locale={locale} messages={translations[locale]} defaultLocale={Locale.DEFAULT}>
|
|
29
|
-
|
|
36
|
+
{IsMobile() ? (
|
|
37
|
+
<BottomSheet open={open} onClose={onClose}>
|
|
38
|
+
{content}
|
|
39
|
+
</BottomSheet>
|
|
40
|
+
) : (
|
|
41
|
+
<Info content={content} size={Size.SMALL} aria-label={translations[locale].close} />
|
|
42
|
+
)}
|
|
30
43
|
</IntlProvider>
|
|
31
44
|
</div>
|
|
32
45
|
);
|
|
@@ -12,17 +12,31 @@
|
|
|
12
12
|
|
|
13
13
|
.fee-makeup-popover__font-header {
|
|
14
14
|
margin-bottom: 15px;
|
|
15
|
+
padding-right: 16px;
|
|
16
|
+
padding-left: 16px;
|
|
15
17
|
color: @brand-navy;
|
|
16
18
|
font-family: @font-family-base;
|
|
17
19
|
font-size: @font-size-medium;
|
|
18
20
|
line-height: 120%;
|
|
21
|
+
|
|
22
|
+
@media (min-width: @screen-md) {
|
|
23
|
+
padding-right: 0;
|
|
24
|
+
padding-left: 0;
|
|
25
|
+
}
|
|
19
26
|
}
|
|
20
27
|
|
|
21
28
|
.fee-makeup-popover__font-paragraph {
|
|
29
|
+
padding-right: 16px;
|
|
30
|
+
padding-left: 16px;
|
|
22
31
|
color: @brand-grey;
|
|
23
32
|
font-family: @font-family-base;
|
|
24
33
|
font-size: @font-size-small;
|
|
25
34
|
line-height: 150%;
|
|
35
|
+
|
|
36
|
+
@media (min-width: @screen-md) {
|
|
37
|
+
padding-right: 0;
|
|
38
|
+
padding-left: 0;
|
|
39
|
+
}
|
|
26
40
|
}
|
|
27
41
|
|
|
28
42
|
.fee-makeup-popover__total-amount {
|