Skip to content

Commit 8784d61

Browse files
committed
[MNY-189] SDK: SwapWidget UI improvements
1 parent fddb791 commit 8784d61

File tree

12 files changed

+556
-317
lines changed

12 files changed

+556
-317
lines changed

.changeset/nine-otters-pay.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
SwapWidget UI improvements

apps/dashboard/src/@/utils/sdk-component-theme.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ export function getSDKTheme(theme: "light" | "dark"): Theme {
3131
selectedTextBg: "hsl(var(--inverted))",
3232
selectedTextColor: "hsl(var(--inverted-foreground))",
3333
separatorLine: "hsl(var(--border))",
34-
skeletonBg: "hsl(var(--muted))",
34+
skeletonBg: "hsl(var(--secondary-foreground)/15%)",
3535
success: "hsl(var(--success-text))",
36-
tertiaryBg: "hsl(var(--muted)/50%)",
36+
tertiaryBg: "hsl(var(--muted)/30%)",
3737
tooltipBg: "hsl(var(--popover))",
3838
tooltipText: "hsl(var(--popover-foreground))",
3939
},

packages/thirdweb/src/react/core/design-system/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ export const iconSize = {
200200
"4xl": "128",
201201
lg: "32",
202202
md: "24",
203+
"sm+": "20",
203204
sm: "16",
204205
xl: "48",
205206
xs: "12",

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/SwapWidget.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ export type SwapWidgetProps = {
162162
* @default true
163163
*/
164164
persistTokenSelections?: boolean;
165+
onDisconnect?: () => void;
165166
};
166167

167168
/**
@@ -393,6 +394,7 @@ function SwapWidgetContent(props: SwapWidgetProps) {
393394
if (screen.id === "1:swap-ui" || !activeWalletInfo) {
394395
return (
395396
<SwapUI
397+
onDisconnect={props.onDisconnect}
396398
showThirdwebBranding={
397399
props.showThirdwebBranding === undefined
398400
? true

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/common.tsx

Lines changed: 0 additions & 35 deletions
This file was deleted.

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/select-token-ui.tsx

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { DiscIcon } from "@radix-ui/react-icons";
21
import { useMemo, useState } from "react";
32
import type { Token } from "../../../../../bridge/index.js";
43
import type { BridgeChain } from "../../../../../bridge/types/Chain.js";
54
import type { ThirdwebClient } from "../../../../../client/client.js";
65
import { toTokens } from "../../../../../utils/units.js";
6+
import { useCustomTheme } from "../../../../core/design-system/CustomThemeProvider.js";
77
import {
88
fontSize,
99
iconSize,
@@ -12,15 +12,13 @@ import {
1212
} from "../../../../core/design-system/index.js";
1313
import { CoinsIcon } from "../../ConnectWallet/icons/CoinsIcon.js";
1414
import { WalletDotIcon } from "../../ConnectWallet/icons/WalletDotIcon.js";
15-
import { formatTokenAmount } from "../../ConnectWallet/screens/formatTokenBalance.js";
1615
import { Container, Line, ModalHeader } from "../../components/basic.js";
1716
import { Button } from "../../components/buttons.js";
1817
import { Img } from "../../components/Img.js";
1918
import { Skeleton } from "../../components/Skeleton.js";
2019
import { Spacer } from "../../components/Spacer.js";
2120
import { Spinner } from "../../components/Spinner.js";
2221
import { Text } from "../../components/text.js";
23-
import { DecimalRenderer } from "./common.js";
2422
import { SearchInput } from "./SearchInput.js";
2523
import { SelectChainButton } from "./SelectChainButton.js";
2624
import { SelectBridgeChain } from "./select-chain.js";
@@ -31,6 +29,7 @@ import {
3129
useTokenBalances,
3230
useTokens,
3331
} from "./use-tokens.js";
32+
import { tokenAmountFormatter } from "./utils.js";
3433

3534
/**
3635
* @internal
@@ -398,6 +397,7 @@ function TokenButton(props: {
398397
onSelect: (tokenWithPrices: TokenSelection) => void;
399398
isSelected: boolean;
400399
}) {
400+
const theme = useCustomTheme();
401401
const tokenBalanceInUnits =
402402
"balance" in props.token
403403
? toTokens(BigInt(props.token.balance), props.token.decimals)
@@ -451,7 +451,14 @@ function TokenButton(props: {
451451
}}
452452
fallback={
453453
<Container color="secondaryText">
454-
<DiscIcon width={iconSize.lg} height={iconSize.lg} />
454+
<Container
455+
style={{
456+
background: `linear-gradient(45deg, white, ${theme.colors.accentText})`,
457+
borderRadius: radius.full,
458+
width: `${iconSize.lg}px`,
459+
height: `${iconSize.lg}px`,
460+
}}
461+
/>
455462
</Container>
456463
}
457464
/>
@@ -470,21 +477,18 @@ function TokenButton(props: {
470477
width: "100%",
471478
}}
472479
>
473-
<Text size="md" color="primaryText" weight={500}>
480+
<Text size="md" color="primaryText">
474481
{props.token.symbol}
475482
</Text>
483+
476484
{"balance" in props.token && (
477-
<DecimalRenderer
478-
integerSize="md"
479-
fractionSize="sm"
480-
value={formatTokenAmount(
481-
BigInt(props.token.balance),
482-
props.token.decimals,
483-
3,
485+
<Text size="md" color="primaryText">
486+
{tokenAmountFormatter.format(
487+
Number(
488+
toTokens(BigInt(props.token.balance), props.token.decimals),
489+
),
484490
)}
485-
color="primaryText"
486-
weight={500}
487-
/>
491+
</Text>
488492
)}
489493
</Container>
490494
<Container
@@ -495,9 +499,8 @@ function TokenButton(props: {
495499
}}
496500
>
497501
<Text
498-
size="sm"
502+
size="xs"
499503
color="secondaryText"
500-
weight={400}
501504
style={{
502505
overflow: "hidden",
503506
textOverflow: "ellipsis",
@@ -509,16 +512,9 @@ function TokenButton(props: {
509512
</Text>
510513
{usdValue && (
511514
<Container flex="row">
512-
<Text size="sm" color="secondaryText" weight={400}>
513-
$
515+
<Text size="xs" color="secondaryText" weight={400}>
516+
${usdValue.toFixed(2)}
514517
</Text>
515-
<DecimalRenderer
516-
value={usdValue.toFixed(2)}
517-
color="secondaryText"
518-
weight={500}
519-
integerSize="sm"
520-
fractionSize="xs"
521-
/>
522518
</Container>
523519
)}
524520
</Container>

0 commit comments

Comments
 (0)