thirdweb 5.107.0 → 5.107.1-nightly-51177fbe17153b711d80ec87b43aadc8ca12fb9e-20250921000348
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/dist/cjs/bridge/Token.js +7 -1
- package/dist/cjs/bridge/Token.js.map +1 -1
- package/dist/cjs/react/core/design-system/index.js +1 -0
- package/dist/cjs/react/core/design-system/index.js.map +1 -1
- package/dist/cjs/react/core/hooks/contract/useContractEvents.js +1 -1
- package/dist/cjs/react/core/hooks/contract/useWaitForReceipt.js +1 -1
- package/dist/cjs/react/core/hooks/contract/useWaitForReceipt.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/SearchInput.js +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/SearchInput.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/SwapWidget.js +43 -28
- package/dist/cjs/react/web/ui/Bridge/swap-widget/SwapWidget.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-chain.js +9 -7
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-chain.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-token-ui.js +82 -46
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-token-ui.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/swap-ui.js +215 -80
- package/dist/cjs/react/web/ui/Bridge/swap-widget/swap-ui.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/utils.js +6 -0
- package/dist/cjs/react/web/ui/Bridge/swap-widget/utils.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/icons/ArrowUpDownIcon.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/icons/ArrowUpDownIcon.js.map +1 -1
- package/dist/cjs/react/web/ui/components/buttons.js +5 -2
- package/dist/cjs/react/web/ui/components/buttons.js.map +1 -1
- package/dist/cjs/react/web/ui/components/formElements.js +4 -1
- package/dist/cjs/react/web/ui/components/formElements.js.map +1 -1
- package/dist/cjs/react/web/ui/hooks/useisMobile.js +19 -0
- package/dist/cjs/react/web/ui/hooks/useisMobile.js.map +1 -0
- package/dist/cjs/rpc/rpc.js +1 -1
- package/dist/cjs/stories/Bridge/Swap/SelectChain.stories.js +16 -6
- package/dist/cjs/stories/Bridge/Swap/SelectChain.stories.js.map +1 -1
- package/dist/cjs/stories/Bridge/Swap/SwapWidget.stories.js +6 -11
- package/dist/cjs/stories/Bridge/Swap/SwapWidget.stories.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/ecosystem.js +1 -1
- package/dist/esm/bridge/Token.js +7 -1
- package/dist/esm/bridge/Token.js.map +1 -1
- package/dist/esm/react/core/design-system/index.js +1 -0
- package/dist/esm/react/core/design-system/index.js.map +1 -1
- package/dist/esm/react/core/hooks/contract/useContractEvents.js +1 -1
- package/dist/esm/react/core/hooks/contract/useWaitForReceipt.js +1 -1
- package/dist/esm/react/core/hooks/contract/useWaitForReceipt.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/SearchInput.js +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/SearchInput.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/SwapWidget.js +43 -28
- package/dist/esm/react/web/ui/Bridge/swap-widget/SwapWidget.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-chain.js +11 -9
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-chain.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-token-ui.js +83 -47
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-token-ui.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/swap-ui.js +218 -83
- package/dist/esm/react/web/ui/Bridge/swap-widget/swap-ui.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/utils.js +5 -0
- package/dist/esm/react/web/ui/Bridge/swap-widget/utils.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/icons/ArrowUpDownIcon.js +2 -2
- package/dist/esm/react/web/ui/ConnectWallet/icons/ArrowUpDownIcon.js.map +1 -1
- package/dist/esm/react/web/ui/components/buttons.js +5 -2
- package/dist/esm/react/web/ui/components/buttons.js.map +1 -1
- package/dist/esm/react/web/ui/components/formElements.js +5 -2
- package/dist/esm/react/web/ui/components/formElements.js.map +1 -1
- package/dist/esm/react/web/ui/hooks/useisMobile.js +16 -0
- package/dist/esm/react/web/ui/hooks/useisMobile.js.map +1 -0
- package/dist/esm/rpc/rpc.js +1 -1
- package/dist/esm/stories/Bridge/Swap/SelectChain.stories.js +12 -4
- package/dist/esm/stories/Bridge/Swap/SelectChain.stories.js.map +1 -1
- package/dist/esm/stories/Bridge/Swap/SwapWidget.stories.js +7 -12
- package/dist/esm/stories/Bridge/Swap/SwapWidget.stories.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/wallets/in-app/native/ecosystem.js +1 -1
- package/dist/types/bridge/Token.d.ts +4 -0
- package/dist/types/bridge/Token.d.ts.map +1 -1
- package/dist/types/bridge/types/Token.d.ts +2 -0
- package/dist/types/bridge/types/Token.d.ts.map +1 -1
- package/dist/types/react/core/design-system/index.d.ts +1 -0
- package/dist/types/react/core/design-system/index.d.ts.map +1 -1
- package/dist/types/react/core/hooks/contract/useContractEvents.d.ts +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/SearchInput.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/SwapWidget.d.ts +4 -0
- package/dist/types/react/web/ui/Bridge/swap-widget/SwapWidget.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/select-chain.d.ts +1 -0
- package/dist/types/react/web/ui/Bridge/swap-widget/select-chain.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/select-token-ui.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/swap-ui.d.ts +2 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/swap-ui.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/utils.d.ts +1 -0
- package/dist/types/react/web/ui/Bridge/swap-widget/utils.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/basic.d.ts +1 -1
- package/dist/types/react/web/ui/components/basic.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/buttons.d.ts +1 -0
- package/dist/types/react/web/ui/components/buttons.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/formElements.d.ts.map +1 -1
- package/dist/types/react/web/ui/hooks/useisMobile.d.ts +2 -0
- package/dist/types/react/web/ui/hooks/useisMobile.d.ts.map +1 -0
- package/dist/types/stories/Bridge/Swap/SelectChain.stories.d.ts +4 -2
- package/dist/types/stories/Bridge/Swap/SelectChain.stories.d.ts.map +1 -1
- package/dist/types/stories/Bridge/Swap/SwapWidget.stories.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/ecosystem.d.ts +1 -1
- package/package.json +3 -3
- package/src/bridge/Token.ts +13 -0
- package/src/bridge/types/Token.ts +2 -0
- package/src/react/core/design-system/index.ts +1 -0
- package/src/react/core/hooks/contract/useContractEvents.ts +1 -1
- package/src/react/core/hooks/contract/useWaitForReceipt.ts +1 -1
- package/src/react/web/ui/Bridge/swap-widget/SearchInput.tsx +1 -0
- package/src/react/web/ui/Bridge/swap-widget/SwapWidget.tsx +61 -45
- package/src/react/web/ui/Bridge/swap-widget/select-chain.tsx +25 -12
- package/src/react/web/ui/Bridge/swap-widget/select-token-ui.tsx +302 -197
- package/src/react/web/ui/Bridge/swap-widget/swap-ui.tsx +496 -233
- package/src/react/web/ui/Bridge/swap-widget/utils.ts +6 -0
- package/src/react/web/ui/ConnectWallet/icons/ArrowUpDownIcon.tsx +10 -10
- package/src/react/web/ui/components/basic.tsx +1 -1
- package/src/react/web/ui/components/buttons.tsx +6 -2
- package/src/react/web/ui/components/formElements.tsx +5 -1
- package/src/react/web/ui/hooks/useisMobile.ts +21 -0
- package/src/rpc/rpc.ts +1 -1
- package/src/stories/Bridge/Swap/SelectChain.stories.tsx +40 -2
- package/src/stories/Bridge/Swap/SwapWidget.stories.tsx +18 -13
- package/src/version.ts +1 -1
- package/src/wallets/in-app/native/ecosystem.ts +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/common.js +0 -17
- package/dist/cjs/react/web/ui/Bridge/swap-widget/common.js.map +0 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/common.js +0 -14
- package/dist/esm/react/web/ui/Bridge/swap-widget/common.js.map +0 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/common.d.ts +0 -9
- package/dist/types/react/web/ui/Bridge/swap-widget/common.d.ts.map +0 -1
- package/src/react/web/ui/Bridge/swap-widget/common.tsx +0 -35
|
@@ -162,6 +162,10 @@ export type SwapWidgetProps = {
|
|
|
162
162
|
* @default true
|
|
163
163
|
*/
|
|
164
164
|
persistTokenSelections?: boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Called when the user disconnects the active wallet
|
|
167
|
+
*/
|
|
168
|
+
onDisconnect?: () => void;
|
|
165
169
|
};
|
|
166
170
|
|
|
167
171
|
/**
|
|
@@ -325,46 +329,11 @@ function SwapWidgetContent(props: SwapWidgetProps) {
|
|
|
325
329
|
});
|
|
326
330
|
|
|
327
331
|
const [buyToken, setBuyToken] = useState<TokenSelection | undefined>(() => {
|
|
328
|
-
|
|
329
|
-
return {
|
|
330
|
-
tokenAddress:
|
|
331
|
-
props.prefill.buyToken.tokenAddress ||
|
|
332
|
-
getAddress(NATIVE_TOKEN_ADDRESS),
|
|
333
|
-
chainId: props.prefill.buyToken.chainId,
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
if (!isPersistEnabled) {
|
|
338
|
-
return undefined;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
const lastUsedBuyToken = getLastUsedTokens()?.buyToken;
|
|
342
|
-
|
|
343
|
-
// the token that will be set as initial value of sell token
|
|
344
|
-
const sellToken = getInitialSellToken(
|
|
345
|
-
props.prefill,
|
|
346
|
-
getLastUsedTokens()?.sellToken,
|
|
347
|
-
);
|
|
348
|
-
|
|
349
|
-
// if both tokens are same, ignore "buyToken", keep "sellToken"
|
|
350
|
-
if (
|
|
351
|
-
lastUsedBuyToken &&
|
|
352
|
-
sellToken &&
|
|
353
|
-
lastUsedBuyToken.tokenAddress.toLowerCase() ===
|
|
354
|
-
sellToken.tokenAddress.toLowerCase() &&
|
|
355
|
-
lastUsedBuyToken.chainId === sellToken.chainId
|
|
356
|
-
) {
|
|
357
|
-
return undefined;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
return lastUsedBuyToken;
|
|
332
|
+
return getInitialTokens(props.prefill, isPersistEnabled).buyToken;
|
|
361
333
|
});
|
|
362
334
|
|
|
363
335
|
const [sellToken, setSellToken] = useState<TokenSelection | undefined>(() => {
|
|
364
|
-
return
|
|
365
|
-
props.prefill,
|
|
366
|
-
isPersistEnabled ? getLastUsedTokens()?.sellToken : undefined,
|
|
367
|
-
);
|
|
336
|
+
return getInitialTokens(props.prefill, isPersistEnabled).sellToken;
|
|
368
337
|
});
|
|
369
338
|
|
|
370
339
|
// persist selections to localStorage whenever they change
|
|
@@ -394,6 +363,7 @@ function SwapWidgetContent(props: SwapWidgetProps) {
|
|
|
394
363
|
if (screen.id === "1:swap-ui" || !activeWalletInfo) {
|
|
395
364
|
return (
|
|
396
365
|
<SwapUI
|
|
366
|
+
onDisconnect={props.onDisconnect}
|
|
397
367
|
showThirdwebBranding={
|
|
398
368
|
props.showThirdwebBranding === undefined
|
|
399
369
|
? true
|
|
@@ -533,17 +503,63 @@ function SwapWidgetContent(props: SwapWidgetProps) {
|
|
|
533
503
|
return null;
|
|
534
504
|
}
|
|
535
505
|
|
|
536
|
-
function
|
|
506
|
+
function getInitialTokens(
|
|
537
507
|
prefill: SwapWidgetProps["prefill"],
|
|
538
|
-
|
|
539
|
-
) {
|
|
540
|
-
|
|
508
|
+
isPersistEnabled: boolean,
|
|
509
|
+
): {
|
|
510
|
+
buyToken: TokenSelection | undefined;
|
|
511
|
+
sellToken: TokenSelection | undefined;
|
|
512
|
+
} {
|
|
513
|
+
const lastUsedTokens = isPersistEnabled ? getLastUsedTokens() : undefined;
|
|
514
|
+
const buyToken = prefill?.buyToken
|
|
515
|
+
? {
|
|
516
|
+
tokenAddress:
|
|
517
|
+
prefill.buyToken.tokenAddress || getAddress(NATIVE_TOKEN_ADDRESS),
|
|
518
|
+
chainId: prefill.buyToken.chainId,
|
|
519
|
+
}
|
|
520
|
+
: lastUsedTokens?.buyToken;
|
|
521
|
+
|
|
522
|
+
const sellToken = prefill?.sellToken
|
|
523
|
+
? {
|
|
524
|
+
tokenAddress:
|
|
525
|
+
prefill.sellToken.tokenAddress || getAddress(NATIVE_TOKEN_ADDRESS),
|
|
526
|
+
chainId: prefill.sellToken.chainId,
|
|
527
|
+
}
|
|
528
|
+
: lastUsedTokens?.sellToken;
|
|
529
|
+
|
|
530
|
+
// if both tokens are same
|
|
531
|
+
if (
|
|
532
|
+
buyToken &&
|
|
533
|
+
sellToken &&
|
|
534
|
+
buyToken.tokenAddress?.toLowerCase() ===
|
|
535
|
+
sellToken.tokenAddress?.toLowerCase() &&
|
|
536
|
+
buyToken.chainId === sellToken.chainId
|
|
537
|
+
) {
|
|
538
|
+
// if sell token prefill is specified, ignore buy token
|
|
539
|
+
if (prefill?.sellToken) {
|
|
540
|
+
return {
|
|
541
|
+
buyToken: undefined,
|
|
542
|
+
sellToken: sellToken,
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// if buy token prefill is specified, ignore sell token
|
|
547
|
+
if (prefill?.buyToken) {
|
|
548
|
+
return {
|
|
549
|
+
buyToken: buyToken,
|
|
550
|
+
sellToken: undefined,
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// if none of the two are specified via prefill, keep buy token
|
|
541
555
|
return {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
chainId: prefill.sellToken.chainId,
|
|
556
|
+
buyToken: buyToken,
|
|
557
|
+
sellToken: undefined,
|
|
545
558
|
};
|
|
546
559
|
}
|
|
547
560
|
|
|
548
|
-
return
|
|
561
|
+
return {
|
|
562
|
+
buyToken: buyToken,
|
|
563
|
+
sellToken: sellToken,
|
|
564
|
+
};
|
|
549
565
|
}
|
|
@@ -4,6 +4,7 @@ import type { ThirdwebClient } from "../../../../../client/client.js";
|
|
|
4
4
|
import {
|
|
5
5
|
fontSize,
|
|
6
6
|
iconSize,
|
|
7
|
+
radius,
|
|
7
8
|
spacing,
|
|
8
9
|
} from "../../../../core/design-system/index.js";
|
|
9
10
|
import { Container, Line, ModalHeader } from "../../components/basic.js";
|
|
@@ -21,6 +22,7 @@ type SelectBuyTokenProps = {
|
|
|
21
22
|
client: ThirdwebClient;
|
|
22
23
|
onSelectChain: (chain: BridgeChain) => void;
|
|
23
24
|
selectedChain: BridgeChain | undefined;
|
|
25
|
+
isMobile: boolean;
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
/**
|
|
@@ -56,11 +58,15 @@ export function SelectBridgeChainUI(
|
|
|
56
58
|
});
|
|
57
59
|
|
|
58
60
|
return (
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
<Container fullHeight flex="column">
|
|
62
|
+
{props.isMobile && (
|
|
63
|
+
<>
|
|
64
|
+
<Container px="md" py="md+">
|
|
65
|
+
<ModalHeader onBack={props.onBack} title="Select Chain" />
|
|
66
|
+
</Container>
|
|
67
|
+
<Line />
|
|
68
|
+
</>
|
|
69
|
+
)}
|
|
64
70
|
|
|
65
71
|
<Spacer y="md" />
|
|
66
72
|
|
|
@@ -79,10 +85,12 @@ export function SelectBridgeChainUI(
|
|
|
79
85
|
<Spacer y="sm" />
|
|
80
86
|
|
|
81
87
|
<Container
|
|
88
|
+
expand
|
|
82
89
|
px="md"
|
|
90
|
+
gap={props.isMobile ? undefined : "xxs"}
|
|
83
91
|
flex="column"
|
|
84
92
|
style={{
|
|
85
|
-
|
|
93
|
+
maxHeight: props.isMobile ? "400px" : "none",
|
|
86
94
|
overflowY: "auto",
|
|
87
95
|
scrollbarWidth: "none",
|
|
88
96
|
paddingBottom: spacing.md,
|
|
@@ -95,6 +103,7 @@ export function SelectBridgeChainUI(
|
|
|
95
103
|
client={props.client}
|
|
96
104
|
onClick={() => props.onSelectChain(chain)}
|
|
97
105
|
isSelected={chain.chainId === props.selectedChain?.chainId}
|
|
106
|
+
isMobile={props.isMobile}
|
|
98
107
|
/>
|
|
99
108
|
))}
|
|
100
109
|
|
|
@@ -119,7 +128,7 @@ export function SelectBridgeChainUI(
|
|
|
119
128
|
</div>
|
|
120
129
|
)}
|
|
121
130
|
</Container>
|
|
122
|
-
</
|
|
131
|
+
</Container>
|
|
123
132
|
);
|
|
124
133
|
}
|
|
125
134
|
|
|
@@ -144,6 +153,7 @@ function ChainButton(props: {
|
|
|
144
153
|
client: ThirdwebClient;
|
|
145
154
|
onClick: () => void;
|
|
146
155
|
isSelected: boolean;
|
|
156
|
+
isMobile: boolean;
|
|
147
157
|
}) {
|
|
148
158
|
return (
|
|
149
159
|
<Button
|
|
@@ -152,18 +162,21 @@ function ChainButton(props: {
|
|
|
152
162
|
style={{
|
|
153
163
|
justifyContent: "flex-start",
|
|
154
164
|
fontWeight: 500,
|
|
155
|
-
fontSize: fontSize.md,
|
|
165
|
+
fontSize: props.isMobile ? fontSize.md : fontSize.sm,
|
|
156
166
|
border: "1px solid transparent",
|
|
157
|
-
padding: `${spacing.
|
|
167
|
+
padding: !props.isMobile ? `${spacing.xs} ${spacing.xs}` : undefined,
|
|
158
168
|
}}
|
|
159
|
-
gap="sm"
|
|
160
169
|
onClick={props.onClick}
|
|
170
|
+
gap="sm"
|
|
161
171
|
>
|
|
162
172
|
<Img
|
|
163
173
|
src={props.chain.icon}
|
|
164
174
|
client={props.client}
|
|
165
|
-
width={iconSize.lg}
|
|
166
|
-
height={iconSize.lg}
|
|
175
|
+
width={props.isMobile ? iconSize.lg : iconSize.md}
|
|
176
|
+
height={props.isMobile ? iconSize.lg : iconSize.md}
|
|
177
|
+
style={{
|
|
178
|
+
borderRadius: radius.full,
|
|
179
|
+
}}
|
|
167
180
|
/>
|
|
168
181
|
{cleanedChainName(props.chain.name)}
|
|
169
182
|
</Button>
|