Skip to content

Commit 3fec0e8

Browse files
authored
feat(checkout-widgets): Allow transparent overlays (#2725)
1 parent 0f37b99 commit 3fec0e8

File tree

33 files changed

+151
-34
lines changed

33 files changed

+151
-34
lines changed

packages/checkout/sdk/src/widgets/definitions/configurations/theme.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ export enum WidgetTheme {
55
LIGHT = 'light',
66
DARK = 'dark',
77
}
8+
9+
export type ThemeOverrides = {
10+
drawerBackground?: string;
11+
};

packages/checkout/sdk/src/widgets/definitions/configurations/widget.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { WidgetTheme } from './theme';
1+
import { ThemeOverrides, WidgetTheme } from './theme';
22

33
/**
44
* Widget Configuration represents the shared configuration options for the Commerce Widgets.
@@ -9,6 +9,7 @@ import { WidgetTheme } from './theme';
99
export type WidgetConfiguration = {
1010
/** The theme of the Commerce Widget (default: "DARK") */
1111
theme?: WidgetTheme;
12+
themeOverrides?: ThemeOverrides;
1213
language?: WidgetLanguage;
1314
walletConnect?: WalletConnectConfig;
1415
};

packages/checkout/widgets-lib/src/components/CoinSelector/CoinSelector.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type CoinSelectorProps = {
1818
optionsLoading?: boolean;
1919
children?: any;
2020
visible?: boolean;
21+
drawerBackground: string | undefined;
2122
};
2223

2324
const filterOptions = (filterBy: string, options: CoinSelectorOptionProps[]) => {
@@ -28,7 +29,7 @@ const filterOptions = (filterBy: string, options: CoinSelectorOptionProps[]) =>
2829
};
2930

3031
export function CoinSelector({
31-
heading, options, defaultTokenImage, optionsLoading, children, onCloseDrawer, visible,
32+
heading, options, defaultTokenImage, optionsLoading, children, onCloseDrawer, visible, drawerBackground,
3233
}: CoinSelectorProps) {
3334
const { t } = useTranslation();
3435

@@ -43,15 +44,21 @@ export function CoinSelector({
4344
return options;
4445
}
4546
return filterOptions(searchValue, options);
46-
}, [options, searchValue, filterOptions]);
47+
}, [options, searchValue]);
4748

4849
const handleCloseDrawer = () => {
4950
setSearchValue('');
5051
onCloseDrawer?.();
5152
};
5253

5354
return (
54-
<Drawer headerBarTitle={heading} size="full" onCloseDrawer={handleCloseDrawer} visible={visible}>
55+
<Drawer
56+
headerBarTitle={heading}
57+
size="full"
58+
onCloseDrawer={handleCloseDrawer}
59+
visible={visible}
60+
bgOverlaySx={drawerBackground ? { background: drawerBackground } : undefined}
61+
>
5562
<Drawer.Target>
5663
{children}
5764
</Drawer.Target>

packages/checkout/widgets-lib/src/components/FormComponents/SelectForm/SelectForm.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
} from '@biom3/react';
44
import { useCallback, useMemo, useState } from 'react';
55
import { Environment } from '@imtbl/config';
6-
import { WidgetTheme } from '@imtbl/checkout-sdk';
6+
import { ThemeOverrides, WidgetTheme } from '@imtbl/checkout-sdk';
77
import { TokenImage } from '../../TokenImage/TokenImage';
88
import { FormControlWrapper } from '../FormControlWrapper/FormControlWrapper';
99
import { CoinSelector } from '../../CoinSelector/CoinSelector';
@@ -26,7 +26,8 @@ interface SelectFormProps {
2626
screen: string;
2727
control: string;
2828
environment?: Environment;
29-
theme?: WidgetTheme,
29+
theme: WidgetTheme,
30+
themeOverrides: ThemeOverrides,
3031
}
3132

3233
export function SelectForm({
@@ -45,7 +46,8 @@ export function SelectForm({
4546
screen,
4647
control,
4748
environment = Environment.PRODUCTION,
48-
theme = WidgetTheme.DARK,
49+
theme,
50+
themeOverrides,
4951
}: SelectFormProps) {
5052
const { track } = useAnalytics();
5153
const [coinSelectorOpen, setCoinSelectorOpen] = useState<boolean>(false);
@@ -87,6 +89,7 @@ export function SelectForm({
8789
optionsLoading={optionsLoading ?? false}
8890
visible={coinSelectorOpen}
8991
onCloseDrawer={() => setCoinSelectorOpen(false)}
92+
drawerBackground={themeOverrides.drawerBackground}
9093
/>
9194
<FormControlWrapper
9295
testId={`${testId}-select-control`}

packages/checkout/widgets-lib/src/components/FormComponents/SelectInput/SelectInput.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Box, OptionKey } from '@biom3/react';
2-
import { WidgetTheme } from '@imtbl/checkout-sdk';
2+
import { ThemeOverrides, WidgetTheme } from '@imtbl/checkout-sdk';
33
import { Environment } from '@imtbl/config';
44
import {
55
inputStyle,
@@ -12,7 +12,6 @@ import { CoinSelectorOptionProps } from '../../CoinSelector/CoinSelectorOption';
1212
import { UserJourney } from '../../../context/analytics-provider/SegmentAnalyticsProvider';
1313

1414
interface SelectInputProps {
15-
1615
testId: string;
1716
options: CoinSelectorOptionProps[];
1817
selectTextAlign?: 'left' | 'right';
@@ -40,7 +39,8 @@ interface SelectInputProps {
4039
screen: string;
4140
control: string;
4241
environment?: Environment;
43-
theme?: WidgetTheme;
42+
theme: WidgetTheme;
43+
themeOverrides: ThemeOverrides;
4444
}
4545

4646
export function SelectInput({
@@ -72,6 +72,7 @@ export function SelectInput({
7272
control,
7373
environment,
7474
theme,
75+
themeOverrides,
7576
}: SelectInputProps) {
7677
return (
7778
<Box sx={selectInputBoxStyle}>
@@ -92,6 +93,7 @@ export function SelectInput({
9293
screen={screen}
9394
environment={environment}
9495
theme={theme}
96+
themeOverrides={themeOverrides}
9597
/>
9698
</Box>
9799
<Box sx={inputStyle}>

packages/checkout/widgets-lib/src/components/Transactions/Transactions.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
WalletProviderRdns,
1212
ChainSlug,
1313
Checkout,
14+
ThemeOverrides,
1415
} from '@imtbl/checkout-sdk';
1516
import { useTranslation } from 'react-i18next';
1617
import { JsonRpcProvider } from 'ethers';
@@ -60,6 +61,7 @@ import { WalletChangeEvent } from '../WalletDrawer/WalletDrawerEvents';
6061
type TransactionsProps = {
6162
defaultTokenImage: string;
6263
onBackButtonClick: () => void;
64+
themeOverrides: ThemeOverrides;
6365
};
6466

6567
const getTransactionsDetails = async (tokenBridge: TokenBridge, checkout: Checkout, recipient: string) => {
@@ -99,6 +101,7 @@ const getTransactionsDetails = async (tokenBridge: TokenBridge, checkout: Checko
99101
export function Transactions({
100102
defaultTokenImage,
101103
onBackButtonClick,
104+
themeOverrides,
102105
}: TransactionsProps) {
103106
const {
104107
eventTargetState: { eventTarget },
@@ -448,6 +451,7 @@ export function Transactions({
448451
setShowWalletDrawer(show);
449452
}}
450453
onWalletChange={handleWalletChange}
454+
drawerBackground={themeOverrides.drawerBackground}
451455
/>
452456
</Box>
453457
</SimpleLayout>

packages/checkout/widgets-lib/src/components/WalletDrawer/ConnectWalletDrawer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ type ConnectWalletDrawerProps = {
4646
}[];
4747
getShouldRequestWalletPermissions?: (providerInfo: EIP6963ProviderInfo) => boolean | undefined;
4848
shouldIdentifyUser?: boolean;
49+
drawerBackground: string | undefined;
4950
};
5051

5152
export function ConnectWalletDrawer({
@@ -61,6 +62,7 @@ export function ConnectWalletDrawer({
6162
disabledOptions = [],
6263
getShouldRequestWalletPermissions,
6364
shouldIdentifyUser = true,
65+
drawerBackground,
6466
}: ConnectWalletDrawerProps) {
6567
const {
6668
providersState: { checkout, fromProvider, lockedToProvider },
@@ -222,6 +224,7 @@ export function ConnectWalletDrawer({
222224
}}
223225
onWalletChange={handleOnWalletChangeEvent}
224226
bottomSlot={bottomSlot}
227+
drawerBackground={drawerBackground}
225228
/>
226229
<UnableToConnectDrawer
227230
visible={showUnableToConnectDrawer}

packages/checkout/widgets-lib/src/components/WalletDrawer/DeliverToWalletDrawer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ type DeliverToWalletDrawerProps = {
1616
provider: WrappedBrowserProvider,
1717
providerInfo: EIP6963ProviderInfo
1818
) => void;
19+
drawerBackground: string | undefined;
1920
};
2021

2122
export function DeliverToWalletDrawer({
2223
visible,
2324
onClose,
2425
onConnect,
2526
walletOptions,
27+
drawerBackground,
2628
}: DeliverToWalletDrawerProps) {
2729
const {
2830
providersState: { fromProviderInfo },
@@ -50,6 +52,7 @@ export function DeliverToWalletDrawer({
5052
providerType="to"
5153
walletOptions={walletOptions}
5254
onConnect={handleOnConnect}
55+
drawerBackground={drawerBackground}
5356
getShouldRequestWalletPermissions={
5457
selectedSameFromWalletType
5558
}

packages/checkout/widgets-lib/src/components/WalletDrawer/PayWithWalletDrawer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ type PayWithWalletDrawerProps = {
1313
walletOptions: EIP6963ProviderDetail[];
1414
insufficientBalance?: boolean;
1515
showOnRampOption?: boolean;
16+
drawerBackground: string | undefined;
1617
};
1718

1819
export function PayWithWalletDrawer({
@@ -23,6 +24,7 @@ export function PayWithWalletDrawer({
2324
walletOptions,
2425
insufficientBalance,
2526
showOnRampOption = true,
27+
drawerBackground,
2628
}: PayWithWalletDrawerProps) {
2729
const { t } = useTranslation();
2830
const { providersState: { fromProviderInfo } } = useProvidersContext();
@@ -79,6 +81,7 @@ export function PayWithWalletDrawer({
7981
bottomSlot={payWithCardItem}
8082
onConnect={handleOnConnect}
8183
shouldIdentifyUser={false}
84+
drawerBackground={drawerBackground}
8285
/>
8386
);
8487
}

packages/checkout/widgets-lib/src/components/WalletDrawer/WalletDrawer.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ interface WalletDrawerProps {
3535
label: string;
3636
rdns: string;
3737
}[];
38+
drawerBackground: string | undefined;
3839
}
40+
3941
export function WalletDrawer({
4042
testId,
4143
drawerText,
@@ -48,6 +50,7 @@ export function WalletDrawer({
4850
menuItemSize,
4951
bottomSlot,
5052
disabledOptions,
53+
drawerBackground,
5154
}: WalletDrawerProps) {
5255
const { t } = useTranslation();
5356
const { isWalletConnectEnabled, openWalletConnectModal } = useWalletConnect();
@@ -105,6 +108,7 @@ export function WalletDrawer({
105108
setShowDrawer(false);
106109
}}
107110
visible={showDrawer}
111+
bgOverlaySx={drawerBackground ? { background: drawerBackground } : undefined}
108112
>
109113
{showWalletSelectorTarget && (
110114
<Drawer.Target>

0 commit comments

Comments
 (0)