thirdweb 5.88.4 → 5.88.5-nightly-52cbcd2d57abf4d69ee417fe98fca815e19f2f34-20250216000400

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.
Files changed (174) hide show
  1. package/dist/cjs/contract/deployment/deploy-via-autofactory.js +33 -9
  2. package/dist/cjs/contract/deployment/deploy-via-autofactory.js.map +1 -1
  3. package/dist/cjs/exports/contract.js +3 -1
  4. package/dist/cjs/exports/contract.js.map +1 -1
  5. package/dist/cjs/exports/modules.js +3 -1
  6. package/dist/cjs/exports/modules.js.map +1 -1
  7. package/dist/cjs/extensions/modules/common/installPublishedModule.js +4 -1
  8. package/dist/cjs/extensions/modules/common/installPublishedModule.js.map +1 -1
  9. package/dist/cjs/extensions/prebuilts/deploy-published.js +14 -2
  10. package/dist/cjs/extensions/prebuilts/deploy-published.js.map +1 -1
  11. package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js +33 -0
  12. package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js.map +1 -0
  13. package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js +152 -0
  14. package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js.map +1 -0
  15. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +66 -56
  16. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
  17. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js +3 -1
  18. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js.map +1 -1
  19. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +2 -2
  20. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
  21. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js +13 -13
  22. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js.map +1 -1
  23. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js +6 -0
  24. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js.map +1 -1
  25. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js +3 -1
  26. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js.map +1 -1
  27. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js +2 -26
  28. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js.map +1 -1
  29. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js +1 -1
  30. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js.map +1 -1
  31. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +6 -12
  32. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
  33. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js +2 -2
  34. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js.map +1 -1
  35. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js +198 -0
  36. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js.map +1 -0
  37. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js +3 -3
  38. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js.map +1 -1
  39. package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js +1 -1
  40. package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
  41. package/dist/cjs/react/web/ui/components/buttons.js +11 -0
  42. package/dist/cjs/react/web/ui/components/buttons.js.map +1 -1
  43. package/dist/cjs/react/web/ui/components/token/TokenRow.js +36 -0
  44. package/dist/cjs/react/web/ui/components/token/TokenRow.js.map +1 -0
  45. package/dist/cjs/utils/abi/normalizeFunctionParams.js +6 -2
  46. package/dist/cjs/utils/abi/normalizeFunctionParams.js.map +1 -1
  47. package/dist/cjs/utils/ens/namehash.js.map +1 -1
  48. package/dist/cjs/version.js +1 -1
  49. package/dist/cjs/version.js.map +1 -1
  50. package/dist/esm/contract/deployment/deploy-via-autofactory.js +33 -9
  51. package/dist/esm/contract/deployment/deploy-via-autofactory.js.map +1 -1
  52. package/dist/esm/exports/contract.js +1 -0
  53. package/dist/esm/exports/contract.js.map +1 -1
  54. package/dist/esm/exports/modules.js +1 -0
  55. package/dist/esm/exports/modules.js.map +1 -1
  56. package/dist/esm/extensions/modules/common/installPublishedModule.js +4 -1
  57. package/dist/esm/extensions/modules/common/installPublishedModule.js.map +1 -1
  58. package/dist/esm/extensions/prebuilts/deploy-published.js +14 -2
  59. package/dist/esm/extensions/prebuilts/deploy-published.js.map +1 -1
  60. package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js +30 -0
  61. package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js.map +1 -0
  62. package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js +145 -0
  63. package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js.map +1 -0
  64. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +68 -58
  65. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
  66. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js +3 -1
  67. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js.map +1 -1
  68. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +1 -1
  69. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
  70. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js +13 -13
  71. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js.map +1 -1
  72. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js +6 -0
  73. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js.map +1 -1
  74. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js +3 -1
  75. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js.map +1 -1
  76. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js +3 -27
  77. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js.map +1 -1
  78. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js +1 -1
  79. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js.map +1 -1
  80. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +6 -12
  81. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
  82. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js +2 -2
  83. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js.map +1 -1
  84. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js +194 -0
  85. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js.map +1 -0
  86. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js +1 -1
  87. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js.map +1 -1
  88. package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js +1 -1
  89. package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
  90. package/dist/esm/react/web/ui/components/buttons.js +11 -0
  91. package/dist/esm/react/web/ui/components/buttons.js.map +1 -1
  92. package/dist/esm/react/web/ui/components/token/TokenRow.js +33 -0
  93. package/dist/esm/react/web/ui/components/token/TokenRow.js.map +1 -0
  94. package/dist/esm/utils/abi/normalizeFunctionParams.js +6 -2
  95. package/dist/esm/utils/abi/normalizeFunctionParams.js.map +1 -1
  96. package/dist/esm/utils/ens/namehash.js.map +1 -1
  97. package/dist/esm/version.js +1 -1
  98. package/dist/esm/version.js.map +1 -1
  99. package/dist/types/contract/deployment/deploy-via-autofactory.d.ts +8 -2
  100. package/dist/types/contract/deployment/deploy-via-autofactory.d.ts.map +1 -1
  101. package/dist/types/exports/contract.d.ts +1 -0
  102. package/dist/types/exports/contract.d.ts.map +1 -1
  103. package/dist/types/exports/modules.d.ts +1 -0
  104. package/dist/types/exports/modules.d.ts.map +1 -1
  105. package/dist/types/extensions/modules/common/installPublishedModule.d.ts +1 -0
  106. package/dist/types/extensions/modules/common/installPublishedModule.d.ts.map +1 -1
  107. package/dist/types/extensions/prebuilts/deploy-published.d.ts +2 -0
  108. package/dist/types/extensions/prebuilts/deploy-published.d.ts.map +1 -1
  109. package/dist/types/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.d.ts +70 -0
  110. package/dist/types/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.d.ts.map +1 -0
  111. package/dist/types/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.d.ts +100 -0
  112. package/dist/types/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.d.ts.map +1 -0
  113. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts.map +1 -1
  114. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.d.ts.map +1 -1
  115. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.d.ts.map +1 -1
  116. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.d.ts +1 -0
  117. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.d.ts.map +1 -1
  118. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.d.ts.map +1 -1
  119. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.d.ts.map +1 -1
  120. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts.map +1 -1
  121. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts +1 -0
  122. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts.map +1 -1
  123. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.d.ts.map +1 -1
  124. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/{PaymentSelectionScreen.d.ts → TokenSelectorScreen.d.ts} +19 -14
  125. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.d.ts.map +1 -0
  126. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.d.ts.map +1 -1
  127. package/dist/types/react/web/ui/components/buttons.d.ts.map +1 -1
  128. package/dist/types/react/web/ui/components/token/TokenRow.d.ts +14 -0
  129. package/dist/types/react/web/ui/components/token/TokenRow.d.ts.map +1 -0
  130. package/dist/types/utils/abi/normalizeFunctionParams.d.ts.map +1 -1
  131. package/dist/types/utils/ens/namehash.d.ts.map +1 -1
  132. package/dist/types/version.d.ts +1 -1
  133. package/dist/types/version.d.ts.map +1 -1
  134. package/package.json +1 -1
  135. package/src/contract/deployment/deploy-via-autofactory.test.ts +166 -0
  136. package/src/contract/deployment/deploy-via-autofactory.ts +50 -10
  137. package/src/exports/contract.ts +1 -0
  138. package/src/exports/modules.ts +1 -0
  139. package/src/extensions/modules/common/installPublishedModule.ts +5 -0
  140. package/src/extensions/prebuilts/deploy-published.ts +18 -2
  141. package/src/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.ts +55 -0
  142. package/src/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.ts +184 -0
  143. package/src/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.tsx +132 -86
  144. package/src/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.tsx +6 -1
  145. package/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx +1 -1
  146. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.tsx +67 -66
  147. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.tsx +7 -0
  148. package/src/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.ts +3 -1
  149. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.tsx +9 -75
  150. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.tsx +3 -1
  151. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.tsx +13 -41
  152. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.tsx +59 -53
  153. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.tsx +437 -0
  154. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.tsx +1 -1
  155. package/src/react/web/ui/ConnectWallet/screens/SignatureScreen.tsx +1 -1
  156. package/src/react/web/ui/components/buttons.tsx +12 -0
  157. package/src/react/web/ui/components/token/TokenRow.tsx +111 -0
  158. package/src/utils/abi/normalizeFunctionParams.test.ts +26 -1
  159. package/src/utils/abi/normalizeFunctionParams.ts +9 -4
  160. package/src/utils/ens/namehash.ts +4 -1
  161. package/src/version.ts +1 -1
  162. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +0 -85
  163. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +0 -1
  164. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js +0 -142
  165. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js.map +0 -1
  166. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +0 -81
  167. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +0 -1
  168. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js +0 -139
  169. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js.map +0 -1
  170. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.d.ts +0 -22
  171. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.d.ts.map +0 -1
  172. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.d.ts.map +0 -1
  173. package/src/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.tsx +0 -220
  174. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.tsx +0 -263
@@ -1,139 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { IdCardIcon } from "@radix-ui/react-icons";
3
- import { useQuery } from "@tanstack/react-query";
4
- import { getCachedChain } from "../../../../../../../chains/utils.js";
5
- import { NATIVE_TOKEN_ADDRESS } from "../../../../../../../constants/addresses.js";
6
- import { getWalletBalance, } from "../../../../../../../wallets/utils/getWalletBalance.js";
7
- import { useCustomTheme } from "../../../../../../core/design-system/CustomThemeProvider.js";
8
- import { iconSize, radius, spacing, } from "../../../../../../core/design-system/index.js";
9
- import { useChainMetadata } from "../../../../../../core/hooks/others/useChainQuery.js";
10
- import { useActiveAccount } from "../../../../../../core/hooks/wallets/useActiveAccount.js";
11
- import { useConnectedWallets } from "../../../../../../core/hooks/wallets/useConnectedWallets.js";
12
- import { LoadingScreen } from "../../../../../wallets/shared/LoadingScreen.js";
13
- import { Spacer } from "../../../../components/Spacer.js";
14
- import { Container } from "../../../../components/basic.js";
15
- import { Button } from "../../../../components/buttons.js";
16
- import { Text } from "../../../../components/text.js";
17
- import { OutlineWalletIcon } from "../../../icons/OutlineWalletIcon.js";
18
- import { isNativeToken } from "../../nativeToken.js";
19
- import { WalletRowWithBalances } from "../WalletSelectorButton.js";
20
- export function PaymentSelectionScreen(props) {
21
- const theme = useCustomTheme();
22
- const connectedWallets = useConnectedWallets();
23
- // if all wallets are connected and showAll wallets is disabled, hide the connect button
24
- const hideConnectButton = !props.showAllWallets &&
25
- props.wallets?.every((w) => connectedWallets.includes(w));
26
- const chainInfo = useChainMetadata(props.toChain);
27
- const activeAccount = useActiveAccount();
28
- const walletsAndBalances = useQuery({
29
- queryKey: [
30
- "wallets-and-balances",
31
- connectedWallets.map((w) => w.getAccount()?.address),
32
- props.sourceSupportedTokens,
33
- props.toChain.id,
34
- props.toToken,
35
- props.tokenAmount,
36
- props.mode,
37
- activeAccount?.address,
38
- ],
39
- queryFn: async () => {
40
- // in parallel, get the balances of all the wallets on each of the sourceSupportedTokens
41
- const walletBalanceMap = new Map();
42
- const balancePromises = connectedWallets.flatMap((wallet) => {
43
- const account = wallet.getAccount();
44
- if (!account)
45
- return [];
46
- walletBalanceMap.set(wallet, []);
47
- // inject the destination token too since it can be used as well to pay/transfer
48
- const toToken = isNativeToken(props.toToken)
49
- ? {
50
- address: NATIVE_TOKEN_ADDRESS,
51
- name: chainInfo.data?.nativeCurrency.name || "",
52
- symbol: chainInfo.data?.nativeCurrency.symbol || "",
53
- icon: chainInfo.data?.icon?.url,
54
- }
55
- : props.toToken;
56
- const tokens = {
57
- ...props.sourceSupportedTokens,
58
- [props.toChain.id]: [
59
- toToken,
60
- ...(props.sourceSupportedTokens?.[props.toChain.id] || []),
61
- ],
62
- };
63
- return Object.entries(tokens).flatMap(([chainId, tokens]) => {
64
- return tokens.map(async (token) => {
65
- try {
66
- const chain = getCachedChain(Number(chainId));
67
- const balance = await getWalletBalance({
68
- address: account.address,
69
- chain,
70
- tokenAddress: isNativeToken(token) ? undefined : token.address,
71
- client: props.client,
72
- });
73
- // show the token if:
74
- // - its not the destination token and balance is greater than 0
75
- // - its the destination token and balance is greater than the token amount AND we the account is not the default account in fund_wallet mode
76
- const shouldInclude = token.address === toToken.address &&
77
- chain.id === props.toChain.id
78
- ? props.mode === "fund_wallet" &&
79
- account.address === activeAccount?.address
80
- ? false
81
- : Number(balance.displayValue) > Number(props.tokenAmount)
82
- : balance.value > 0n;
83
- if (shouldInclude) {
84
- const existingBalances = walletBalanceMap.get(wallet) || [];
85
- existingBalances.push({ balance, chain, token });
86
- existingBalances.sort((a, b) => {
87
- if (a.chain.id === props.toChain.id &&
88
- a.token.address === toToken.address)
89
- return -1;
90
- if (b.chain.id === props.toChain.id &&
91
- b.token.address === toToken.address)
92
- return 1;
93
- if (a.chain.id === props.toChain.id)
94
- return -1;
95
- if (b.chain.id === props.toChain.id)
96
- return 1;
97
- return a.chain.id > b.chain.id ? 1 : -1;
98
- });
99
- }
100
- }
101
- catch (error) {
102
- console.error(`Failed to fetch balance for wallet ${wallet.id} on chain ${chainId} for token ${token.symbol}:`, error);
103
- }
104
- });
105
- });
106
- });
107
- await Promise.all(balancePromises);
108
- return walletBalanceMap;
109
- },
110
- enabled: !!props.sourceSupportedTokens && !!chainInfo.data,
111
- });
112
- if (walletsAndBalances.isLoading || !walletsAndBalances.data) {
113
- return _jsx(LoadingScreen, {});
114
- }
115
- const filteredWallets = Array.from(walletsAndBalances.data?.entries() || [])
116
- .filter(([w]) => !props.hiddenWallets?.includes(w.id))
117
- .filter(([, balances]) => {
118
- const hasEnoughBalance = balances.some((b) => b.balance.value > 0);
119
- return hasEnoughBalance;
120
- });
121
- return (_jsxs(Container, { children: [_jsxs(Container, { flex: "column", gap: "xs", children: [filteredWallets.length === 0 && (_jsx(Container, { flex: "column", gap: "xs", py: "md", children: _jsx(Text, { size: "xs", color: "secondaryText", center: true, children: _jsx("i", { children: "Insufficient funds in connected wallets" }) }) })), filteredWallets.map(([w, balances]) => {
122
- const address = w.getAccount()?.address;
123
- if (!address)
124
- return null;
125
- return (_jsx(WalletRowWithBalances, { wallet: w, balances: balances, client: props.client, address: address, onClick: props.onSelect }, w.id));
126
- }), !hideConnectButton && (_jsx(Button, { variant: "secondary", fullWidth: true, onClick: props.onConnect, gap: "xs", bg: "tertiaryBg", style: {
127
- borderRadius: radius.lg,
128
- border: `1px solid ${theme.colors.borderColor}`,
129
- padding: spacing.sm,
130
- }, children: _jsxs(Container, { flex: "row", gap: "sm", center: "y", expand: true, color: "secondaryIconColor", children: [_jsx(OutlineWalletIcon, { size: iconSize.md }), _jsx(Text, { size: "sm", color: "primaryText", children: "Pay with another wallet" })] }) })), props.payWithFiatEnabled && (_jsx(Button, { variant: "secondary", fullWidth: true, gap: "xs", bg: "tertiaryBg", onClick: props.onSelectFiat, style: {
131
- borderRadius: radius.lg,
132
- border: `1px solid ${theme.colors.borderColor}`,
133
- padding: spacing.sm,
134
- }, children: _jsxs(Container, { flex: "row", gap: "sm", center: "y", expand: true, color: "secondaryIconColor", children: [_jsx(IdCardIcon, { style: {
135
- width: iconSize.md,
136
- height: iconSize.md,
137
- } }), _jsx(Text, { size: "sm", color: "primaryText", children: "Pay with credit card" })] }) }))] }), _jsx(Spacer, { y: "sm" })] }));
138
- }
139
- //# sourceMappingURL=PaymentSelectionScreen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentSelectionScreen.js","sourceRoot":"","sources":["../../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.tsx"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { Chain } from "../../../../../../chains/types.js";
2
- import type { ThirdwebClient } from "../../../../../../client/client.js";
3
- import type { Wallet } from "../../../../../../wallets/interfaces/wallet.js";
4
- import type { WalletId } from "../../../../../../wallets/wallet-types.js";
5
- import { type fontSize, iconSize } from "../../../../../core/design-system/index.js";
6
- import type { TokenInfo } from "../../../../../core/utils/defaultTokens.js";
7
- import type { TokenBalance } from "./swap/PaymentSelectionScreen.js";
8
- export declare function WalletRowWithBalances(props: {
9
- client: ThirdwebClient;
10
- address: string;
11
- wallet: Wallet;
12
- balances: TokenBalance[];
13
- onClick: (wallet: Wallet, token: TokenInfo, chain: Chain) => void;
14
- }): import("react/jsx-runtime.js").JSX.Element;
15
- export declare function WalletRow(props: {
16
- client: ThirdwebClient;
17
- address: string;
18
- iconSize?: keyof typeof iconSize;
19
- textSize?: keyof typeof fontSize;
20
- walletId?: WalletId;
21
- }): import("react/jsx-runtime.js").JSX.Element;
22
- //# sourceMappingURL=WalletSelectorButton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WalletSelectorButton.d.ts","sourceRoot":"","sources":["../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gDAAgD,CAAC;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EACL,KAAK,QAAQ,EACb,QAAQ,EAGT,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAW5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnE,8CAsDA;AAwDD,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,8CAoDA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentSelectionScreen.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAC;AAChF,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAO7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+DAA+D,CAAC;AAIlG,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACV,MAAM,+CAA+C,CAAC;AAOvD,OAAO,EAAE,KAAK,kBAAkB,EAAiB,MAAM,sBAAsB,CAAC;AAG9E,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,sBAAsB,CAAC;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,eAAe,GAAG,SAAS,CAAC;IACnD,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnE,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,8CA8MA"}
@@ -1,220 +0,0 @@
1
- import styled from "@emotion/styled";
2
- import { ChevronRightIcon } from "@radix-ui/react-icons";
3
- import { useState } from "react";
4
- import type { Chain } from "../../../../../../chains/types.js";
5
- import type { ThirdwebClient } from "../../../../../../client/client.js";
6
- import { shortenAddress } from "../../../../../../utils/address.js";
7
- import type { Wallet } from "../../../../../../wallets/interfaces/wallet.js";
8
- import type { WalletId } from "../../../../../../wallets/wallet-types.js";
9
- import { useCustomTheme } from "../../../../../core/design-system/CustomThemeProvider.js";
10
- import {
11
- type fontSize,
12
- iconSize,
13
- radius,
14
- spacing,
15
- } from "../../../../../core/design-system/index.js";
16
- import { useChainName } from "../../../../../core/hooks/others/useChainQuery.js";
17
- import type { TokenInfo } from "../../../../../core/utils/defaultTokens.js";
18
- import { useEnsAvatar, useEnsName } from "../../../../../core/utils/wallet.js";
19
- import { Img } from "../../../components/Img.js";
20
- import { TokenIcon } from "../../../components/TokenIcon.js";
21
- import { WalletImage } from "../../../components/WalletImage.js";
22
- import { Container } from "../../../components/basic.js";
23
- import { Button } from "../../../components/buttons.js";
24
- import { Text } from "../../../components/text.js";
25
- import { Blobbie } from "../../Blobbie.js";
26
- import { formatTokenBalance } from "../formatTokenBalance.js";
27
- import { FiatValue } from "./swap/FiatValue.js";
28
- import type { TokenBalance } from "./swap/PaymentSelectionScreen.js";
29
-
30
- export function WalletRowWithBalances(props: {
31
- client: ThirdwebClient;
32
- address: string;
33
- wallet: Wallet;
34
- balances: TokenBalance[];
35
- onClick: (wallet: Wallet, token: TokenInfo, chain: Chain) => void;
36
- }) {
37
- const theme = useCustomTheme();
38
- const [showAll, setShowAll] = useState(false);
39
- const maxDisplayedBalances = 3;
40
- const displayedBalances = showAll
41
- ? props.balances
42
- : props.balances.slice(0, maxDisplayedBalances);
43
-
44
- return (
45
- <Container
46
- bg="tertiaryBg"
47
- style={{
48
- borderRadius: radius.lg,
49
- border: `1px solid ${theme.colors.borderColor}`,
50
- }}
51
- >
52
- <Container style={{ padding: spacing.sm }}>
53
- <WalletRow {...props} />
54
- </Container>
55
- <div style={{ borderTop: `1px solid ${theme.colors.borderColor}` }} />
56
- <Container flex="column">
57
- {props.balances.length > 0 ? (
58
- <>
59
- {displayedBalances.map((b) => (
60
- <TokenBalanceRow
61
- client={props.client}
62
- onClick={() => props.onClick(props.wallet, b.token, b.chain)}
63
- key={`${b.token.address}-${b.chain.id}`}
64
- tokenBalance={b}
65
- wallet={props.wallet}
66
- />
67
- ))}
68
- {props.balances.length > maxDisplayedBalances && (
69
- <StyledButton
70
- variant="secondary"
71
- onClick={() => setShowAll(!showAll)}
72
- style={{
73
- justifyContent: "start",
74
- }}
75
- >
76
- <Text size="xs">{showAll ? "Show less" : "Show more"}</Text>
77
- </StyledButton>
78
- )}
79
- </>
80
- ) : (
81
- <Container style={{ padding: spacing.sm }}>
82
- <Text size="sm" color="secondaryText">
83
- Not enough funds
84
- </Text>
85
- </Container>
86
- )}
87
- </Container>
88
- </Container>
89
- );
90
- }
91
-
92
- function TokenBalanceRow(props: {
93
- client: ThirdwebClient;
94
- tokenBalance: TokenBalance;
95
- wallet: Wallet;
96
- onClick: (token: TokenInfo, wallet: Wallet) => void;
97
- }) {
98
- const { tokenBalance, wallet, onClick, client } = props;
99
- const chainInfo = useChainName(tokenBalance.chain);
100
- return (
101
- <StyledButton
102
- onClick={() => onClick(tokenBalance.token, wallet)}
103
- variant="secondary"
104
- >
105
- <Container flex="row" center="y" gap="md">
106
- <TokenIcon
107
- token={tokenBalance.token}
108
- chain={tokenBalance.chain}
109
- size="md"
110
- client={client}
111
- />
112
- <Container flex="column" gap="3xs">
113
- <Text size="xs" color="primaryText">
114
- {tokenBalance.token.symbol}
115
- </Text>
116
- {chainInfo && <Text size="xs">{chainInfo.name}</Text>}
117
- </Container>
118
- </Container>
119
- <Container flex="row" center="y" gap="3xs" color="secondaryText">
120
- <Container
121
- flex="column"
122
- color="secondaryText"
123
- gap="3xs"
124
- style={{
125
- justifyContent: "flex-end",
126
- alignItems: "flex-end",
127
- }}
128
- >
129
- <Text size="xs" color="primaryText">
130
- {formatTokenBalance(tokenBalance.balance, true, 2)}
131
- </Text>
132
- <FiatValue
133
- tokenAmount={tokenBalance.balance.displayValue}
134
- token={tokenBalance.token}
135
- chain={tokenBalance.chain}
136
- client={client}
137
- size="xs"
138
- />
139
- </Container>
140
- <ChevronRightIcon width={iconSize.md} height={iconSize.md} />
141
- </Container>
142
- </StyledButton>
143
- );
144
- }
145
-
146
- export function WalletRow(props: {
147
- client: ThirdwebClient;
148
- address: string;
149
- iconSize?: keyof typeof iconSize;
150
- textSize?: keyof typeof fontSize;
151
- walletId?: WalletId;
152
- }) {
153
- const { client, address } = props;
154
- const walletId = props.walletId;
155
- const theme = useCustomTheme();
156
- const ensNameQuery = useEnsName({
157
- client,
158
- address,
159
- });
160
- const addressOrENS = ensNameQuery.data || shortenAddress(address);
161
- const ensAvatarQuery = useEnsAvatar({
162
- client,
163
- ensName: ensNameQuery.data,
164
- });
165
- return (
166
- <Container flex="row" center="y" gap="sm" color="secondaryText">
167
- {ensAvatarQuery.data ? (
168
- <Img
169
- src={ensAvatarQuery.data}
170
- width={props.iconSize ? iconSize[props.iconSize] : iconSize.md}
171
- height={props.iconSize ? iconSize[props.iconSize] : iconSize.md}
172
- style={{
173
- borderRadius: radius.sm,
174
- overflow: "hidden",
175
- border: `1px solid ${theme.colors.borderColor}`,
176
- }}
177
- client={props.client}
178
- />
179
- ) : walletId ? (
180
- <WalletImage
181
- id={walletId}
182
- size={props.iconSize || iconSize.md}
183
- client={props.client}
184
- />
185
- ) : (
186
- <Container
187
- style={{
188
- width: iconSize.md,
189
- height: iconSize.md,
190
- borderRadius: radius.sm,
191
- overflow: "hidden",
192
- border: `1px solid ${theme.colors.borderColor}`,
193
- }}
194
- >
195
- <Blobbie address={props.address} size={Number(iconSize.md)} />
196
- </Container>
197
- )}
198
-
199
- <Text size={props.textSize || "sm"} color="primaryText">
200
- {addressOrENS || shortenAddress(props.address)}
201
- </Text>
202
- </Container>
203
- );
204
- }
205
-
206
- const StyledButton = /* @__PURE__ */ styled(Button)((_) => {
207
- const theme = useCustomTheme();
208
- return {
209
- background: theme.colors.tertiaryBg,
210
- justifyContent: "space-between",
211
- flexDirection: "row",
212
- padding: spacing.sm,
213
- gap: spacing.sm,
214
- "&:hover": {
215
- background: theme.colors.secondaryButtonBg,
216
- transform: "scale(1.01)",
217
- },
218
- transition: "background 200ms ease, transform 150ms ease",
219
- };
220
- });
@@ -1,263 +0,0 @@
1
- import { IdCardIcon } from "@radix-ui/react-icons";
2
- import { useQuery } from "@tanstack/react-query";
3
- import type { Chain } from "../../../../../../../chains/types.js";
4
- import { getCachedChain } from "../../../../../../../chains/utils.js";
5
- import type { ThirdwebClient } from "../../../../../../../client/client.js";
6
- import { NATIVE_TOKEN_ADDRESS } from "../../../../../../../constants/addresses.js";
7
- import type { Wallet } from "../../../../../../../wallets/interfaces/wallet.js";
8
- import {
9
- type GetWalletBalanceResult,
10
- getWalletBalance,
11
- } from "../../../../../../../wallets/utils/getWalletBalance.js";
12
- import type { WalletId } from "../../../../../../../wallets/wallet-types.js";
13
- import { useCustomTheme } from "../../../../../../core/design-system/CustomThemeProvider.js";
14
- import {
15
- iconSize,
16
- radius,
17
- spacing,
18
- } from "../../../../../../core/design-system/index.js";
19
- import type { PayUIOptions } from "../../../../../../core/hooks/connection/ConnectButtonProps.js";
20
- import { useChainMetadata } from "../../../../../../core/hooks/others/useChainQuery.js";
21
- import { useActiveAccount } from "../../../../../../core/hooks/wallets/useActiveAccount.js";
22
- import { useConnectedWallets } from "../../../../../../core/hooks/wallets/useConnectedWallets.js";
23
- import type {
24
- SupportedTokens,
25
- TokenInfo,
26
- } from "../../../../../../core/utils/defaultTokens.js";
27
- import { LoadingScreen } from "../../../../../wallets/shared/LoadingScreen.js";
28
- import { Spacer } from "../../../../components/Spacer.js";
29
- import { Container } from "../../../../components/basic.js";
30
- import { Button } from "../../../../components/buttons.js";
31
- import { Text } from "../../../../components/text.js";
32
- import { OutlineWalletIcon } from "../../../icons/OutlineWalletIcon.js";
33
- import { type ERC20OrNativeToken, isNativeToken } from "../../nativeToken.js";
34
- import { WalletRowWithBalances } from "../WalletSelectorButton.js";
35
-
36
- export type TokenBalance = {
37
- balance: GetWalletBalanceResult;
38
- chain: Chain;
39
- token: TokenInfo;
40
- };
41
-
42
- export function PaymentSelectionScreen(props: {
43
- client: ThirdwebClient;
44
- mode: PayUIOptions["mode"];
45
- showAllWallets: boolean;
46
- sourceSupportedTokens: SupportedTokens | undefined;
47
- toChain: Chain;
48
- toToken: ERC20OrNativeToken;
49
- tokenAmount: string;
50
- wallets: Wallet[] | undefined;
51
- onSelect: (wallet: Wallet, token: TokenInfo, chain: Chain) => void;
52
- onSelectFiat: () => void;
53
- onBack: () => void;
54
- onConnect: () => void;
55
- hiddenWallets?: WalletId[];
56
- payWithFiatEnabled: boolean;
57
- }) {
58
- const theme = useCustomTheme();
59
- const connectedWallets = useConnectedWallets();
60
-
61
- // if all wallets are connected and showAll wallets is disabled, hide the connect button
62
- const hideConnectButton =
63
- !props.showAllWallets &&
64
- props.wallets?.every((w) => connectedWallets.includes(w));
65
-
66
- const chainInfo = useChainMetadata(props.toChain);
67
- const activeAccount = useActiveAccount();
68
-
69
- const walletsAndBalances = useQuery({
70
- queryKey: [
71
- "wallets-and-balances",
72
- connectedWallets.map((w) => w.getAccount()?.address),
73
- props.sourceSupportedTokens,
74
- props.toChain.id,
75
- props.toToken,
76
- props.tokenAmount,
77
- props.mode,
78
- activeAccount?.address,
79
- ],
80
- queryFn: async () => {
81
- // in parallel, get the balances of all the wallets on each of the sourceSupportedTokens
82
- const walletBalanceMap = new Map<Wallet, TokenBalance[]>();
83
-
84
- const balancePromises = connectedWallets.flatMap((wallet) => {
85
- const account = wallet.getAccount();
86
- if (!account) return [];
87
- walletBalanceMap.set(wallet, []);
88
-
89
- // inject the destination token too since it can be used as well to pay/transfer
90
- const toToken = isNativeToken(props.toToken)
91
- ? {
92
- address: NATIVE_TOKEN_ADDRESS,
93
- name: chainInfo.data?.nativeCurrency.name || "",
94
- symbol: chainInfo.data?.nativeCurrency.symbol || "",
95
- icon: chainInfo.data?.icon?.url,
96
- }
97
- : props.toToken;
98
-
99
- const tokens = {
100
- ...props.sourceSupportedTokens,
101
- [props.toChain.id]: [
102
- toToken,
103
- ...(props.sourceSupportedTokens?.[props.toChain.id] || []),
104
- ],
105
- };
106
-
107
- return Object.entries(tokens).flatMap(([chainId, tokens]) => {
108
- return tokens.map(async (token) => {
109
- try {
110
- const chain = getCachedChain(Number(chainId));
111
- const balance = await getWalletBalance({
112
- address: account.address,
113
- chain,
114
- tokenAddress: isNativeToken(token) ? undefined : token.address,
115
- client: props.client,
116
- });
117
-
118
- // show the token if:
119
- // - its not the destination token and balance is greater than 0
120
- // - its the destination token and balance is greater than the token amount AND we the account is not the default account in fund_wallet mode
121
- const shouldInclude =
122
- token.address === toToken.address &&
123
- chain.id === props.toChain.id
124
- ? props.mode === "fund_wallet" &&
125
- account.address === activeAccount?.address
126
- ? false
127
- : Number(balance.displayValue) > Number(props.tokenAmount)
128
- : balance.value > 0n;
129
-
130
- if (shouldInclude) {
131
- const existingBalances = walletBalanceMap.get(wallet) || [];
132
- existingBalances.push({ balance, chain, token });
133
- existingBalances.sort((a, b) => {
134
- if (
135
- a.chain.id === props.toChain.id &&
136
- a.token.address === toToken.address
137
- )
138
- return -1;
139
- if (
140
- b.chain.id === props.toChain.id &&
141
- b.token.address === toToken.address
142
- )
143
- return 1;
144
- if (a.chain.id === props.toChain.id) return -1;
145
- if (b.chain.id === props.toChain.id) return 1;
146
- return a.chain.id > b.chain.id ? 1 : -1;
147
- });
148
- }
149
- } catch (error) {
150
- console.error(
151
- `Failed to fetch balance for wallet ${wallet.id} on chain ${chainId} for token ${token.symbol}:`,
152
- error,
153
- );
154
- }
155
- });
156
- });
157
- });
158
-
159
- await Promise.all(balancePromises);
160
- return walletBalanceMap;
161
- },
162
- enabled: !!props.sourceSupportedTokens && !!chainInfo.data,
163
- });
164
-
165
- if (walletsAndBalances.isLoading || !walletsAndBalances.data) {
166
- return <LoadingScreen />;
167
- }
168
-
169
- const filteredWallets = Array.from(walletsAndBalances.data?.entries() || [])
170
- .filter(([w]) => !props.hiddenWallets?.includes(w.id))
171
- .filter(([, balances]) => {
172
- const hasEnoughBalance = balances.some((b) => b.balance.value > 0);
173
- return hasEnoughBalance;
174
- });
175
-
176
- return (
177
- <Container>
178
- <Container flex="column" gap="xs">
179
- {filteredWallets.length === 0 && (
180
- <Container flex="column" gap="xs" py="md">
181
- <Text size="xs" color="secondaryText" center>
182
- <i>Insufficient funds in connected wallets</i>
183
- </Text>
184
- </Container>
185
- )}
186
- {filteredWallets.map(([w, balances]) => {
187
- const address = w.getAccount()?.address;
188
- if (!address) return null;
189
- return (
190
- <WalletRowWithBalances
191
- key={w.id}
192
- wallet={w}
193
- balances={balances}
194
- client={props.client}
195
- address={address}
196
- onClick={props.onSelect}
197
- />
198
- );
199
- })}
200
- {!hideConnectButton && (
201
- <Button
202
- variant="secondary"
203
- fullWidth
204
- onClick={props.onConnect}
205
- gap="xs"
206
- bg="tertiaryBg"
207
- style={{
208
- borderRadius: radius.lg,
209
- border: `1px solid ${theme.colors.borderColor}`,
210
- padding: spacing.sm,
211
- }}
212
- >
213
- <Container
214
- flex="row"
215
- gap="sm"
216
- center="y"
217
- expand
218
- color="secondaryIconColor"
219
- >
220
- <OutlineWalletIcon size={iconSize.md} />
221
- <Text size="sm" color="primaryText">
222
- Pay with another wallet
223
- </Text>
224
- </Container>
225
- </Button>
226
- )}
227
- {props.payWithFiatEnabled && (
228
- <Button
229
- variant="secondary"
230
- fullWidth
231
- gap="xs"
232
- bg="tertiaryBg"
233
- onClick={props.onSelectFiat}
234
- style={{
235
- borderRadius: radius.lg,
236
- border: `1px solid ${theme.colors.borderColor}`,
237
- padding: spacing.sm,
238
- }}
239
- >
240
- <Container
241
- flex="row"
242
- gap="sm"
243
- center="y"
244
- expand
245
- color="secondaryIconColor"
246
- >
247
- <IdCardIcon
248
- style={{
249
- width: iconSize.md,
250
- height: iconSize.md,
251
- }}
252
- />
253
- <Text size="sm" color="primaryText">
254
- Pay with credit card
255
- </Text>
256
- </Container>
257
- </Button>
258
- )}
259
- </Container>
260
- <Spacer y="sm" />
261
- </Container>
262
- );
263
- }