thirdweb 5.47.1 → 5.48.0

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 (362) hide show
  1. package/dist/cjs/adapters/ethers5.js +87 -1
  2. package/dist/cjs/adapters/ethers5.js.map +1 -1
  3. package/dist/cjs/adapters/ethers6.js +85 -15
  4. package/dist/cjs/adapters/ethers6.js.map +1 -1
  5. package/dist/cjs/adapters/viem.js +117 -43
  6. package/dist/cjs/adapters/viem.js.map +1 -1
  7. package/dist/cjs/contract/actions/compiler-metadata.js.map +1 -1
  8. package/dist/cjs/exports/utils.js +7 -1
  9. package/dist/cjs/exports/utils.js.map +1 -1
  10. package/dist/cjs/extensions/erc721/read/getOwnedNFTs.js +1 -0
  11. package/dist/cjs/extensions/erc721/read/getOwnedNFTs.js.map +1 -1
  12. package/dist/cjs/react/core/design-system/index.js +1 -0
  13. package/dist/cjs/react/core/design-system/index.js.map +1 -1
  14. package/dist/cjs/react/core/hooks/transaction/transaction-button-utils.js.map +1 -1
  15. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js +58 -1
  16. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  17. package/dist/cjs/react/core/hooks/wallets/useAddConnectedWallet.js +23 -0
  18. package/dist/cjs/react/core/hooks/wallets/useAddConnectedWallet.js.map +1 -0
  19. package/dist/cjs/react/native/ui/connect/ConnectModal.js +1 -0
  20. package/dist/cjs/react/native/ui/connect/ConnectModal.js.map +1 -1
  21. package/dist/cjs/react/native/ui/transaction/TransactionButton.js +1 -1
  22. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +62 -53
  23. package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
  24. package/dist/cjs/react/web/ui/ConnectWallet/MenuButton.js +0 -1
  25. package/dist/cjs/react/web/ui/ConnectWallet/MenuButton.js.map +1 -1
  26. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js +3 -1
  27. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js.map +1 -1
  28. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +1 -1
  29. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
  30. package/dist/cjs/react/web/ui/ConnectWallet/WalletSelector.js +8 -6
  31. package/dist/cjs/react/web/ui/ConnectWallet/WalletSelector.js.map +1 -1
  32. package/dist/cjs/react/web/ui/ConnectWallet/locale/en.js +1 -1
  33. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +1 -2
  34. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +1 -1
  35. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js +9 -9
  36. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js.map +1 -1
  37. package/dist/cjs/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.js +3 -3
  38. package/dist/cjs/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.js.map +1 -1
  39. package/dist/cjs/react/web/ui/ConnectWallet/screens/LinkProfileScreen.js +1 -1
  40. package/dist/cjs/react/web/ui/ConnectWallet/screens/LinkProfileScreen.js.map +1 -1
  41. package/dist/cjs/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js +7 -1
  42. package/dist/cjs/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js.map +1 -1
  43. package/dist/cjs/react/web/ui/TransactionButton/index.js +1 -1
  44. package/dist/cjs/react/web/ui/components/ChainIcon.js +3 -2
  45. package/dist/cjs/react/web/ui/components/ChainIcon.js.map +1 -1
  46. package/dist/cjs/react/web/ui/components/CopyAddress.js +22 -0
  47. package/dist/cjs/react/web/ui/components/CopyAddress.js.map +1 -0
  48. package/dist/cjs/react/web/ui/components/IconContainer.js +25 -0
  49. package/dist/cjs/react/web/ui/components/IconContainer.js.map +1 -0
  50. package/dist/cjs/react/web/ui/components/Modal.js +1 -1
  51. package/dist/cjs/react/web/ui/components/Modal.js.map +1 -1
  52. package/dist/cjs/react/web/ui/components/WalletImage.js +4 -11
  53. package/dist/cjs/react/web/ui/components/WalletImage.js.map +1 -1
  54. package/dist/cjs/react/web/ui/components/formElements.js +3 -3
  55. package/dist/cjs/react/web/ui/components/formElements.js.map +1 -1
  56. package/dist/cjs/react/web/wallets/in-app/CountrySelector.js +1 -3
  57. package/dist/cjs/react/web/wallets/in-app/CountrySelector.js.map +1 -1
  58. package/dist/cjs/react/web/wallets/in-app/InAppWalletConnectUI.js +4 -0
  59. package/dist/cjs/react/web/wallets/in-app/InAppWalletConnectUI.js.map +1 -1
  60. package/dist/cjs/react/web/wallets/in-app/WalletAuth.js +70 -0
  61. package/dist/cjs/react/web/wallets/in-app/WalletAuth.js.map +1 -0
  62. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js +9 -1
  63. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  64. package/dist/cjs/react/web/wallets/shared/ErrorState.js +14 -0
  65. package/dist/cjs/react/web/wallets/shared/ErrorState.js.map +1 -0
  66. package/dist/cjs/react/web/wallets/shared/LoadingState.js +19 -0
  67. package/dist/cjs/react/web/wallets/shared/LoadingState.js.map +1 -0
  68. package/dist/cjs/react/web/wallets/shared/PassKeyLogin.js +6 -20
  69. package/dist/cjs/react/web/wallets/shared/PassKeyLogin.js.map +1 -1
  70. package/dist/cjs/react/web/wallets/shared/locale/de.js +1 -0
  71. package/dist/cjs/react/web/wallets/shared/locale/de.js.map +1 -1
  72. package/dist/cjs/react/web/wallets/shared/locale/en.js +2 -1
  73. package/dist/cjs/react/web/wallets/shared/locale/en.js.map +1 -1
  74. package/dist/cjs/react/web/wallets/shared/locale/es.js +1 -0
  75. package/dist/cjs/react/web/wallets/shared/locale/es.js.map +1 -1
  76. package/dist/cjs/react/web/wallets/shared/locale/fr.js +1 -0
  77. package/dist/cjs/react/web/wallets/shared/locale/fr.js.map +1 -1
  78. package/dist/cjs/react/web/wallets/shared/locale/ja.js +1 -0
  79. package/dist/cjs/react/web/wallets/shared/locale/ja.js.map +1 -1
  80. package/dist/cjs/react/web/wallets/shared/locale/kr.js +1 -0
  81. package/dist/cjs/react/web/wallets/shared/locale/kr.js.map +1 -1
  82. package/dist/cjs/react/web/wallets/shared/locale/tl.js +1 -0
  83. package/dist/cjs/react/web/wallets/shared/locale/tl.js.map +1 -1
  84. package/dist/cjs/react/web/wallets/shared/locale/vi.js +1 -0
  85. package/dist/cjs/react/web/wallets/shared/locale/vi.js.map +1 -1
  86. package/dist/cjs/transaction/actions/gasless/providers/biconomy.js.map +1 -1
  87. package/dist/cjs/transaction/actions/gasless/providers/engine.js.map +1 -1
  88. package/dist/cjs/transaction/actions/gasless/providers/openzeppelin.js.map +1 -1
  89. package/dist/cjs/transaction/prepare-contract-call.js +1 -1
  90. package/dist/cjs/transaction/read-contract.js +21 -2
  91. package/dist/cjs/transaction/read-contract.js.map +1 -1
  92. package/dist/cjs/utils/bigint.js +2 -0
  93. package/dist/cjs/utils/bigint.js.map +1 -1
  94. package/dist/cjs/version.js +1 -1
  95. package/dist/cjs/wallets/custom/smart/image.js +1 -1
  96. package/dist/cjs/wallets/custom/smart/image.js.map +1 -1
  97. package/dist/cjs/wallets/in-app/core/authentication/getLoginPath.js +1 -1
  98. package/dist/cjs/wallets/in-app/core/authentication/getLoginPath.js.map +1 -1
  99. package/dist/cjs/wallets/manager/index.js +0 -1
  100. package/dist/cjs/wallets/manager/index.js.map +1 -1
  101. package/dist/cjs/wallets/types.js +0 -1
  102. package/dist/cjs/wallets/types.js.map +1 -1
  103. package/dist/esm/adapters/ethers5.js +87 -1
  104. package/dist/esm/adapters/ethers5.js.map +1 -1
  105. package/dist/esm/adapters/ethers6.js +85 -15
  106. package/dist/esm/adapters/ethers6.js.map +1 -1
  107. package/dist/esm/adapters/viem.js +117 -43
  108. package/dist/esm/adapters/viem.js.map +1 -1
  109. package/dist/esm/contract/actions/compiler-metadata.js.map +1 -1
  110. package/dist/esm/exports/utils.js +4 -0
  111. package/dist/esm/exports/utils.js.map +1 -1
  112. package/dist/esm/extensions/erc721/read/getOwnedNFTs.js +1 -0
  113. package/dist/esm/extensions/erc721/read/getOwnedNFTs.js.map +1 -1
  114. package/dist/esm/react/core/design-system/index.js +1 -0
  115. package/dist/esm/react/core/design-system/index.js.map +1 -1
  116. package/dist/esm/react/core/hooks/transaction/transaction-button-utils.js.map +1 -1
  117. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js +57 -1
  118. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  119. package/dist/esm/react/core/hooks/wallets/useAddConnectedWallet.js +20 -0
  120. package/dist/esm/react/core/hooks/wallets/useAddConnectedWallet.js.map +1 -0
  121. package/dist/esm/react/native/ui/connect/ConnectModal.js +1 -1
  122. package/dist/esm/react/native/ui/connect/ConnectModal.js.map +1 -1
  123. package/dist/esm/react/native/ui/transaction/TransactionButton.js +1 -1
  124. package/dist/esm/react/web/ui/ConnectWallet/Details.js +64 -55
  125. package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
  126. package/dist/esm/react/web/ui/ConnectWallet/MenuButton.js +0 -1
  127. package/dist/esm/react/web/ui/ConnectWallet/MenuButton.js.map +1 -1
  128. package/dist/esm/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js +3 -1
  129. package/dist/esm/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js.map +1 -1
  130. package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +1 -1
  131. package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
  132. package/dist/esm/react/web/ui/ConnectWallet/WalletSelector.js +8 -6
  133. package/dist/esm/react/web/ui/ConnectWallet/WalletSelector.js.map +1 -1
  134. package/dist/esm/react/web/ui/ConnectWallet/locale/en.js +1 -1
  135. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +1 -2
  136. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +1 -1
  137. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js +9 -9
  138. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js.map +1 -1
  139. package/dist/esm/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.js +4 -4
  140. package/dist/esm/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.js.map +1 -1
  141. package/dist/esm/react/web/ui/ConnectWallet/screens/LinkProfileScreen.js +1 -1
  142. package/dist/esm/react/web/ui/ConnectWallet/screens/LinkProfileScreen.js.map +1 -1
  143. package/dist/esm/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js +7 -1
  144. package/dist/esm/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js.map +1 -1
  145. package/dist/esm/react/web/ui/TransactionButton/index.js +1 -1
  146. package/dist/esm/react/web/ui/components/ChainIcon.js +3 -2
  147. package/dist/esm/react/web/ui/components/ChainIcon.js.map +1 -1
  148. package/dist/esm/react/web/ui/components/CopyAddress.js +18 -0
  149. package/dist/esm/react/web/ui/components/CopyAddress.js.map +1 -0
  150. package/dist/esm/react/web/ui/components/IconContainer.js +21 -0
  151. package/dist/esm/react/web/ui/components/IconContainer.js.map +1 -0
  152. package/dist/esm/react/web/ui/components/Modal.js +1 -1
  153. package/dist/esm/react/web/ui/components/Modal.js.map +1 -1
  154. package/dist/esm/react/web/ui/components/WalletImage.js +1 -8
  155. package/dist/esm/react/web/ui/components/WalletImage.js.map +1 -1
  156. package/dist/esm/react/web/ui/components/formElements.js +3 -3
  157. package/dist/esm/react/web/ui/components/formElements.js.map +1 -1
  158. package/dist/esm/react/web/wallets/in-app/CountrySelector.js +2 -4
  159. package/dist/esm/react/web/wallets/in-app/CountrySelector.js.map +1 -1
  160. package/dist/esm/react/web/wallets/in-app/InAppWalletConnectUI.js +4 -0
  161. package/dist/esm/react/web/wallets/in-app/InAppWalletConnectUI.js.map +1 -1
  162. package/dist/esm/react/web/wallets/in-app/WalletAuth.js +67 -0
  163. package/dist/esm/react/web/wallets/in-app/WalletAuth.js.map +1 -0
  164. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js +10 -2
  165. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  166. package/dist/esm/react/web/wallets/shared/ErrorState.js +11 -0
  167. package/dist/esm/react/web/wallets/shared/ErrorState.js.map +1 -0
  168. package/dist/esm/react/web/wallets/shared/LoadingState.js +16 -0
  169. package/dist/esm/react/web/wallets/shared/LoadingState.js.map +1 -0
  170. package/dist/esm/react/web/wallets/shared/PassKeyLogin.js +4 -18
  171. package/dist/esm/react/web/wallets/shared/PassKeyLogin.js.map +1 -1
  172. package/dist/esm/react/web/wallets/shared/locale/de.js +1 -0
  173. package/dist/esm/react/web/wallets/shared/locale/de.js.map +1 -1
  174. package/dist/esm/react/web/wallets/shared/locale/en.js +2 -1
  175. package/dist/esm/react/web/wallets/shared/locale/en.js.map +1 -1
  176. package/dist/esm/react/web/wallets/shared/locale/es.js +1 -0
  177. package/dist/esm/react/web/wallets/shared/locale/es.js.map +1 -1
  178. package/dist/esm/react/web/wallets/shared/locale/fr.js +1 -0
  179. package/dist/esm/react/web/wallets/shared/locale/fr.js.map +1 -1
  180. package/dist/esm/react/web/wallets/shared/locale/ja.js +1 -0
  181. package/dist/esm/react/web/wallets/shared/locale/ja.js.map +1 -1
  182. package/dist/esm/react/web/wallets/shared/locale/kr.js +1 -0
  183. package/dist/esm/react/web/wallets/shared/locale/kr.js.map +1 -1
  184. package/dist/esm/react/web/wallets/shared/locale/tl.js +1 -0
  185. package/dist/esm/react/web/wallets/shared/locale/tl.js.map +1 -1
  186. package/dist/esm/react/web/wallets/shared/locale/vi.js +1 -0
  187. package/dist/esm/react/web/wallets/shared/locale/vi.js.map +1 -1
  188. package/dist/esm/transaction/actions/gasless/providers/biconomy.js.map +1 -1
  189. package/dist/esm/transaction/actions/gasless/providers/engine.js.map +1 -1
  190. package/dist/esm/transaction/actions/gasless/providers/openzeppelin.js.map +1 -1
  191. package/dist/esm/transaction/prepare-contract-call.js +1 -1
  192. package/dist/esm/transaction/read-contract.js +21 -2
  193. package/dist/esm/transaction/read-contract.js.map +1 -1
  194. package/dist/esm/utils/bigint.js +2 -0
  195. package/dist/esm/utils/bigint.js.map +1 -1
  196. package/dist/esm/version.js +1 -1
  197. package/dist/esm/wallets/custom/smart/image.js +1 -1
  198. package/dist/esm/wallets/custom/smart/image.js.map +1 -1
  199. package/dist/esm/wallets/in-app/core/authentication/getLoginPath.js +1 -1
  200. package/dist/esm/wallets/in-app/core/authentication/getLoginPath.js.map +1 -1
  201. package/dist/esm/wallets/manager/index.js +0 -1
  202. package/dist/esm/wallets/manager/index.js.map +1 -1
  203. package/dist/esm/wallets/types.js +0 -1
  204. package/dist/esm/wallets/types.js.map +1 -1
  205. package/dist/types/adapters/ethers5.d.ts +87 -1
  206. package/dist/types/adapters/ethers5.d.ts.map +1 -1
  207. package/dist/types/adapters/ethers6.d.ts +85 -15
  208. package/dist/types/adapters/ethers6.d.ts.map +1 -1
  209. package/dist/types/adapters/viem.d.ts +117 -43
  210. package/dist/types/adapters/viem.d.ts.map +1 -1
  211. package/dist/types/contract/actions/compiler-metadata.d.ts +7 -1
  212. package/dist/types/contract/actions/compiler-metadata.d.ts.map +1 -1
  213. package/dist/types/exports/transaction.d.ts +7 -0
  214. package/dist/types/exports/transaction.d.ts.map +1 -1
  215. package/dist/types/exports/utils.d.ts +1 -0
  216. package/dist/types/exports/utils.d.ts.map +1 -1
  217. package/dist/types/extensions/erc721/read/getOwnedNFTs.d.ts +1 -0
  218. package/dist/types/extensions/erc721/read/getOwnedNFTs.d.ts.map +1 -1
  219. package/dist/types/react/core/design-system/index.d.ts +1 -0
  220. package/dist/types/react/core/design-system/index.d.ts.map +1 -1
  221. package/dist/types/react/core/hooks/transaction/transaction-button-utils.d.ts +1 -0
  222. package/dist/types/react/core/hooks/transaction/transaction-button-utils.d.ts.map +1 -1
  223. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts +1 -0
  224. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts.map +1 -1
  225. package/dist/types/react/core/hooks/wallets/useAddConnectedWallet.d.ts +16 -0
  226. package/dist/types/react/core/hooks/wallets/useAddConnectedWallet.d.ts.map +1 -0
  227. package/dist/types/react/native/ui/connect/ConnectModal.d.ts +3 -0
  228. package/dist/types/react/native/ui/connect/ConnectModal.d.ts.map +1 -1
  229. package/dist/types/react/native/ui/transaction/TransactionButton.d.ts +1 -1
  230. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  231. package/dist/types/react/web/ui/ConnectWallet/MenuButton.d.ts.map +1 -1
  232. package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts +1 -0
  233. package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts.map +1 -1
  234. package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts.map +1 -1
  235. package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts +1 -0
  236. package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts.map +1 -1
  237. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.d.ts.map +1 -1
  238. package/dist/types/react/web/ui/ConnectWallet/screens/LinkProfileScreen.d.ts +3 -0
  239. package/dist/types/react/web/ui/ConnectWallet/screens/LinkProfileScreen.d.ts.map +1 -1
  240. package/dist/types/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.d.ts.map +1 -1
  241. package/dist/types/react/web/ui/TransactionButton/index.d.ts +1 -1
  242. package/dist/types/react/web/ui/components/ChainIcon.d.ts.map +1 -1
  243. package/dist/types/react/web/ui/components/CopyAddress.d.ts +7 -0
  244. package/dist/types/react/web/ui/components/CopyAddress.d.ts.map +1 -0
  245. package/dist/types/react/web/ui/components/IconContainer.d.ts +10 -0
  246. package/dist/types/react/web/ui/components/IconContainer.d.ts.map +1 -0
  247. package/dist/types/react/web/ui/components/WalletImage.d.ts.map +1 -1
  248. package/dist/types/react/web/wallets/in-app/CountrySelector.d.ts.map +1 -1
  249. package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts +3 -0
  250. package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts.map +1 -1
  251. package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts +24 -0
  252. package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts.map +1 -0
  253. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts +1 -0
  254. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
  255. package/dist/types/react/web/wallets/shared/ErrorState.d.ts +5 -0
  256. package/dist/types/react/web/wallets/shared/ErrorState.d.ts.map +1 -0
  257. package/dist/types/react/web/wallets/shared/LoadingState.d.ts +7 -0
  258. package/dist/types/react/web/wallets/shared/LoadingState.d.ts.map +1 -0
  259. package/dist/types/react/web/wallets/shared/PassKeyLogin.d.ts.map +1 -1
  260. package/dist/types/react/web/wallets/shared/locale/de.d.ts +1 -0
  261. package/dist/types/react/web/wallets/shared/locale/de.d.ts.map +1 -1
  262. package/dist/types/react/web/wallets/shared/locale/en.d.ts +1 -0
  263. package/dist/types/react/web/wallets/shared/locale/en.d.ts.map +1 -1
  264. package/dist/types/react/web/wallets/shared/locale/es.d.ts +1 -0
  265. package/dist/types/react/web/wallets/shared/locale/es.d.ts.map +1 -1
  266. package/dist/types/react/web/wallets/shared/locale/fr.d.ts +1 -0
  267. package/dist/types/react/web/wallets/shared/locale/fr.d.ts.map +1 -1
  268. package/dist/types/react/web/wallets/shared/locale/ja.d.ts +1 -0
  269. package/dist/types/react/web/wallets/shared/locale/ja.d.ts.map +1 -1
  270. package/dist/types/react/web/wallets/shared/locale/kr.d.ts +1 -0
  271. package/dist/types/react/web/wallets/shared/locale/kr.d.ts.map +1 -1
  272. package/dist/types/react/web/wallets/shared/locale/tl.d.ts +1 -0
  273. package/dist/types/react/web/wallets/shared/locale/tl.d.ts.map +1 -1
  274. package/dist/types/react/web/wallets/shared/locale/types.d.ts +1 -0
  275. package/dist/types/react/web/wallets/shared/locale/types.d.ts.map +1 -1
  276. package/dist/types/react/web/wallets/shared/locale/vi.d.ts +1 -0
  277. package/dist/types/react/web/wallets/shared/locale/vi.d.ts.map +1 -1
  278. package/dist/types/transaction/actions/gasless/providers/biconomy.d.ts +3 -0
  279. package/dist/types/transaction/actions/gasless/providers/biconomy.d.ts.map +1 -1
  280. package/dist/types/transaction/actions/gasless/providers/engine.d.ts +3 -0
  281. package/dist/types/transaction/actions/gasless/providers/engine.d.ts.map +1 -1
  282. package/dist/types/transaction/actions/gasless/providers/openzeppelin.d.ts +3 -0
  283. package/dist/types/transaction/actions/gasless/providers/openzeppelin.d.ts.map +1 -1
  284. package/dist/types/transaction/actions/gasless/types.d.ts +12 -0
  285. package/dist/types/transaction/actions/gasless/types.d.ts.map +1 -1
  286. package/dist/types/transaction/prepare-contract-call.d.ts +1 -1
  287. package/dist/types/transaction/read-contract.d.ts +21 -2
  288. package/dist/types/transaction/read-contract.d.ts.map +1 -1
  289. package/dist/types/utils/bigint.d.ts +2 -0
  290. package/dist/types/utils/bigint.d.ts.map +1 -1
  291. package/dist/types/version.d.ts +1 -1
  292. package/dist/types/wallets/custom/smart/image.d.ts +1 -1
  293. package/dist/types/wallets/custom/smart/image.d.ts.map +1 -1
  294. package/dist/types/wallets/in-app/core/authentication/getLoginPath.d.ts +2 -2
  295. package/dist/types/wallets/in-app/core/authentication/getLoginPath.d.ts.map +1 -1
  296. package/dist/types/wallets/in-app/core/authentication/types.d.ts +1 -1
  297. package/dist/types/wallets/in-app/core/authentication/types.d.ts.map +1 -1
  298. package/dist/types/wallets/manager/index.d.ts.map +1 -1
  299. package/dist/types/wallets/types.d.ts +1 -1
  300. package/dist/types/wallets/types.d.ts.map +1 -1
  301. package/package.json +1 -1
  302. package/src/adapters/ethers5.ts +87 -1
  303. package/src/adapters/ethers6.ts +85 -15
  304. package/src/adapters/viem.ts +117 -44
  305. package/src/contract/actions/compiler-metadata.ts +4 -2
  306. package/src/exports/transaction.ts +8 -0
  307. package/src/exports/utils.ts +5 -0
  308. package/src/extensions/erc721/read/getOwnedNFTs.ts +1 -0
  309. package/src/extensions/lens/read/resolveAddress.test.ts +1 -1
  310. package/src/react/core/design-system/index.ts +1 -0
  311. package/src/react/core/hooks/transaction/transaction-button-utils.ts +1 -0
  312. package/src/react/core/hooks/transaction/useSendTransaction.ts +70 -1
  313. package/src/react/core/hooks/wallets/useAddConnectedWallet.ts +20 -0
  314. package/src/react/native/ui/connect/ConnectModal.tsx +1 -1
  315. package/src/react/native/ui/transaction/TransactionButton.tsx +1 -1
  316. package/src/react/web/ui/ConnectWallet/Details.tsx +158 -157
  317. package/src/react/web/ui/ConnectWallet/MenuButton.tsx +0 -1
  318. package/src/react/web/ui/ConnectWallet/Modal/AllWalletsUI.tsx +4 -1
  319. package/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx +1 -0
  320. package/src/react/web/ui/ConnectWallet/WalletSelector.tsx +10 -1
  321. package/src/react/web/ui/ConnectWallet/locale/en.ts +1 -1
  322. package/src/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.tsx +0 -6
  323. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.tsx +10 -10
  324. package/src/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.tsx +8 -9
  325. package/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx +2 -0
  326. package/src/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.tsx +21 -7
  327. package/src/react/web/ui/TransactionButton/index.tsx +1 -1
  328. package/src/react/web/ui/components/ChainIcon.tsx +4 -3
  329. package/src/react/web/ui/components/CopyAddress.tsx +34 -0
  330. package/src/react/web/ui/components/IconContainer.tsx +31 -0
  331. package/src/react/web/ui/components/Modal.tsx +1 -1
  332. package/src/react/web/ui/components/WalletImage.tsx +1 -8
  333. package/src/react/web/ui/components/formElements.tsx +3 -3
  334. package/src/react/web/wallets/in-app/CountrySelector.tsx +2 -8
  335. package/src/react/web/wallets/in-app/InAppWalletConnectUI.tsx +18 -0
  336. package/src/react/web/wallets/in-app/WalletAuth.tsx +166 -0
  337. package/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +22 -0
  338. package/src/react/web/wallets/shared/ErrorState.tsx +29 -0
  339. package/src/react/web/wallets/shared/LoadingState.tsx +47 -0
  340. package/src/react/web/wallets/shared/PassKeyLogin.tsx +4 -67
  341. package/src/react/web/wallets/shared/locale/de.ts +1 -0
  342. package/src/react/web/wallets/shared/locale/en.ts +2 -1
  343. package/src/react/web/wallets/shared/locale/es.ts +1 -0
  344. package/src/react/web/wallets/shared/locale/fr.ts +1 -0
  345. package/src/react/web/wallets/shared/locale/ja.ts +1 -0
  346. package/src/react/web/wallets/shared/locale/kr.ts +1 -0
  347. package/src/react/web/wallets/shared/locale/tl.ts +1 -0
  348. package/src/react/web/wallets/shared/locale/types.ts +1 -0
  349. package/src/react/web/wallets/shared/locale/vi.ts +1 -0
  350. package/src/transaction/actions/gasless/providers/biconomy.ts +3 -0
  351. package/src/transaction/actions/gasless/providers/engine.ts +3 -0
  352. package/src/transaction/actions/gasless/providers/openzeppelin.ts +3 -0
  353. package/src/transaction/actions/gasless/types.ts +12 -0
  354. package/src/transaction/prepare-contract-call.ts +1 -1
  355. package/src/transaction/read-contract.ts +21 -2
  356. package/src/utils/bigint.ts +2 -0
  357. package/src/version.ts +1 -1
  358. package/src/wallets/custom/smart/image.ts +1 -1
  359. package/src/wallets/in-app/core/authentication/getLoginPath.ts +4 -4
  360. package/src/wallets/in-app/core/authentication/types.ts +1 -1
  361. package/src/wallets/manager/index.ts +0 -2
  362. package/src/wallets/types.ts +0 -1
@@ -69,3 +69,11 @@ export {
69
69
  export type { WaitForReceiptOptions } from "../transaction/actions/wait-for-tx-receipt.js";
70
70
 
71
71
  export type { TransactionReceipt } from "viem";
72
+
73
+ /**
74
+ * Gasless types
75
+ */
76
+ export type { GaslessOptions } from "../transaction/actions/gasless/types.js";
77
+ export type { EngineOptions } from "../transaction/actions/gasless/providers/engine.js";
78
+ export type { OpenZeppelinOptions } from "../transaction/actions/gasless/providers/openzeppelin.js";
79
+ export type { BiconomyOptions } from "../transaction/actions/gasless/providers/biconomy.js";
@@ -176,3 +176,8 @@ export {
176
176
  export type { NFTMetadata, NFTInput } from "../utils/nft/parseNft.js";
177
177
 
178
178
  export { parseAbiParams } from "../utils/contract/parse-abi-params.js";
179
+
180
+ // ------------------------------------------------
181
+ // bigint
182
+ // ------------------------------------------------
183
+ export { max, min } from "../utils/bigint.js";
@@ -13,6 +13,7 @@ export type GetOwnedNFTsParams = GetOwnedTokenIdsParams;
13
13
 
14
14
  /**
15
15
  * Retrieves the owned NFTs for a given owner.
16
+ * This extension only works with ERC721 contracts that support the [`tokenOfOwnerByIndex`](https://portal.thirdweb.com/references/typescript/v5/erc721/tokenOfOwnerByIndex) method
16
17
  * @param options - The options for retrieving the owned NFTs.
17
18
  * @returns A promise that resolves to an array of NFTs owned by the specified owner.
18
19
  * @extension ERC721
@@ -3,7 +3,7 @@ import { TEST_CLIENT } from "~test/test-clients.js";
3
3
  import { isAddress } from "../../../utils/address.js";
4
4
  import { resolveAddress } from "./resolveAddress.js";
5
5
 
6
- describe("resolve lens address", () => {
6
+ describe.runIf(process.env.TW_SECRET_KEY)("resolve lens address", () => {
7
7
  it("should resolve to correct address", async () => {
8
8
  const address = await resolveAddress({
9
9
  client: TEST_CLIENT,
@@ -170,6 +170,7 @@ export const fontSize = {
170
170
  };
171
171
 
172
172
  export const spacing = {
173
+ "4xs": "2px",
173
174
  "3xs": "4px",
174
175
  xxs: "6px",
175
176
  xs: "8px",
@@ -15,6 +15,7 @@ import type {
15
15
 
16
16
  /**
17
17
  * Props for the [`TransactionButton`](https://portal.thirdweb.com/references/typescript/v5/TransactionButton) component.
18
+ * @transaction
18
19
  */
19
20
  export type TransactionButtonProps = {
20
21
  /**
@@ -1,16 +1,20 @@
1
1
  import { type UseMutationResult, useMutation } from "@tanstack/react-query";
2
2
  import type { Chain } from "../../../../chains/types.js";
3
+ import { getGasPrice } from "../../../../gas/get-gas-price.js";
3
4
  import type { BuyWithCryptoStatus } from "../../../../pay/buyWithCrypto/getStatus.js";
4
5
  import type { BuyWithFiatStatus } from "../../../../pay/buyWithFiat/getStatus.js";
6
+ import { estimateGasCost } from "../../../../transaction/actions/estimate-gas-cost.js";
5
7
  import type { GaslessOptions } from "../../../../transaction/actions/gasless/types.js";
6
8
  import { sendTransaction } from "../../../../transaction/actions/send-transaction.js";
7
9
  import type { WaitForReceiptOptions } from "../../../../transaction/actions/wait-for-tx-receipt.js";
8
10
  import type { PreparedTransaction } from "../../../../transaction/prepare-transaction.js";
9
11
  import { resolvePromisedValue } from "../../../../utils/promise/resolve-promised-value.js";
10
12
  import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
13
+ import { getWalletBalance } from "../../../../wallets/utils/getWalletBalance.js";
11
14
  import type { LocaleId } from "../../../web/ui/types.js";
12
15
  import type { Theme } from "../../design-system/index.js";
13
16
  import type { SupportedTokens } from "../../utils/defaultTokens.js";
17
+ import { hasSponsoredTransactionsEnabled } from "../../utils/wallet.js";
14
18
 
15
19
  /**
16
20
  * Configuration for the "Pay Modal" that opens when the user doesn't have enough funds to send a transaction.
@@ -157,7 +161,33 @@ export function useSendTransactionCore(args: {
157
161
  const nativeValue = _nativeValue || 0n;
158
162
  const erc20Value = _erc20Value?.amountWei || 0n;
159
163
 
160
- if (nativeValue > 0n || erc20Value > 0n) {
164
+ const [nativeBalance, erc20Balance, gasCost] = await Promise.all([
165
+ getWalletBalance({
166
+ client: tx.client,
167
+ address: account.address,
168
+ chain: tx.chain,
169
+ }),
170
+ _erc20Value?.tokenAddress
171
+ ? getWalletBalance({
172
+ client: tx.client,
173
+ address: account.address,
174
+ chain: tx.chain,
175
+ })
176
+ : undefined,
177
+ getTotalTxCostForBuy(tx, account.address),
178
+ ]);
179
+
180
+ const gasSponsored = hasSponsoredTransactionsEnabled(wallet);
181
+ const txGasCost = gasSponsored ? 0n : gasCost;
182
+ const nativeCost = nativeValue + txGasCost;
183
+
184
+ const shouldShowModal =
185
+ (erc20Value > 0n &&
186
+ erc20Balance &&
187
+ erc20Balance.value < erc20Value) ||
188
+ (nativeCost > 0n && nativeBalance.value < nativeCost);
189
+
190
+ if (shouldShowModal) {
161
191
  showPayModal({
162
192
  tx,
163
193
  sendTx,
@@ -177,3 +207,42 @@ export function useSendTransactionCore(args: {
177
207
  },
178
208
  });
179
209
  }
210
+
211
+ export async function getTotalTxCostForBuy(
212
+ tx: PreparedTransaction,
213
+ from?: string,
214
+ ) {
215
+ try {
216
+ const gasCost = await estimateGasCost({
217
+ transaction: tx,
218
+ from,
219
+ });
220
+
221
+ const bufferCost = gasCost.wei / 10n;
222
+
223
+ // Note: get tx.value AFTER estimateGasCost
224
+ const txValue = await resolvePromisedValue(tx.value);
225
+
226
+ // add 10% extra gas cost to the estimate to ensure user buys enough to cover the tx cost
227
+ return gasCost.wei + bufferCost + (txValue || 0n);
228
+ } catch (e) {
229
+ if (from) {
230
+ // try again without passing from
231
+ return await getTotalTxCostForBuy(tx);
232
+ }
233
+ // fallback if both fail, use the tx value + 2M * gas price
234
+ const value = await resolvePromisedValue(tx.value);
235
+
236
+ const gasPrice = await getGasPrice({
237
+ client: tx.client,
238
+ chain: tx.chain,
239
+ });
240
+
241
+ const buffer = 2_000_000n * gasPrice;
242
+
243
+ if (!value) {
244
+ return 0n + buffer;
245
+ }
246
+ return value + buffer;
247
+ }
248
+ }
@@ -0,0 +1,20 @@
1
+ import { useConnectionManagerCtx } from "../../providers/connection-manager.js";
2
+
3
+ /**
4
+ * A hook to add a connected wallet without setting the active wallet.
5
+ * @returns A function that lets you add a connected wallet.
6
+ * @example
7
+ * ```jsx
8
+ * import { useAddConnectedWallet } from "thirdweb/react";
9
+ *
10
+ * const addConnectedWallet = useAddConnectedWallet();
11
+ *
12
+ * // later in your code
13
+ * await addConnectedWallet(wallet);
14
+ * ```
15
+ * @walletConnection
16
+ */
17
+ export function useAddConnectedWallet() {
18
+ const manager = useConnectionManagerCtx("useAddConnectedWallet");
19
+ return manager.handleConnection;
20
+ }
@@ -582,7 +582,7 @@ function SignInView({
582
582
  );
583
583
  }
584
584
 
585
- function OrDivider({ theme }: { theme: Theme }) {
585
+ export function OrDivider({ theme }: { theme: Theme }) {
586
586
  return (
587
587
  <View
588
588
  style={{
@@ -11,7 +11,7 @@ import { ThemedSpinner } from "../components/spinner.js";
11
11
 
12
12
  /**
13
13
  * TransactionButton component is used to render a button that triggers a transaction.
14
- * - It shows a "Switch Network" button if the connected wallet is on a different chain than the transaction.
14
+ * It shows a "Switch Network" button if the connected wallet is on a different chain than the transaction.
15
15
  * @param props - The props for this component.
16
16
  * Refer to [TransactionButtonProps](https://portal.thirdweb.com/references/typescript/v5/TransactionButtonProps) for details.
17
17
  * @example
@@ -19,6 +19,7 @@ import type { SmartWalletOptions } from "../../../../wallets/smart/types.js";
19
19
  import type { AppMetadata } from "../../../../wallets/types.js";
20
20
  import {
21
21
  CustomThemeProvider,
22
+ parseTheme,
22
23
  useCustomTheme,
23
24
  } from "../../../core/design-system/CustomThemeProvider.js";
24
25
  import {
@@ -51,15 +52,20 @@ import type {
51
52
  SupportedTokens,
52
53
  } from "../../../core/utils/defaultTokens.js";
53
54
  import { hasSmartAccount } from "../../../core/utils/isSmartWallet.js";
54
- import { useConnectedWalletDetails } from "../../../core/utils/wallet.js";
55
+ import {
56
+ useConnectedWalletDetails,
57
+ useWalletInfo,
58
+ } from "../../../core/utils/wallet.js";
55
59
  import { WalletUIStatesProvider } from "../../providers/wallet-ui-states-provider.js";
56
60
  import { ChainIcon } from "../components/ChainIcon.js";
57
61
  import { CopyIcon } from "../components/CopyIcon.js";
58
- import { Img } from "../components/Img.js";
62
+ import { IconContainer } from "../components/IconContainer.js";
59
63
  import { Modal } from "../components/Modal.js";
60
64
  import { Skeleton } from "../components/Skeleton.js";
61
65
  import { Spacer } from "../components/Spacer.js";
62
66
  import { Spinner } from "../components/Spinner.js";
67
+ import { ToolTip } from "../components/Tooltip.js";
68
+ import { WalletImage } from "../components/WalletImage.js";
63
69
  import { Container, Line } from "../components/basic.js";
64
70
  import { Button, IconButton } from "../components/buttons.js";
65
71
  import { Link, Text } from "../components/text.js";
@@ -78,8 +84,6 @@ import { onModalUnmount } from "./constants.js";
78
84
  import { CoinsIcon } from "./icons/CoinsIcon.js";
79
85
  import { FundsIcon } from "./icons/FundsIcon.js";
80
86
  import { OutlineWalletIcon } from "./icons/OutlineWalletIcon.js";
81
- import { ShuffleIconLucide } from "./icons/ShuffleIconLucide.js";
82
- import { SmartWalletBadgeIcon } from "./icons/SmartAccountBadgeIcon.js";
83
87
  import { getConnectLocale } from "./locale/getConnectLocale.js";
84
88
  import type { ConnectLocale } from "./locale/types.js";
85
89
  import { LazyBuyScreen } from "./screens/Buy/LazyBuyScreen.js";
@@ -125,7 +129,6 @@ export const ConnectedWalletDetails: React.FC<{
125
129
  const setRootEl = useContext(SetRootElementContext);
126
130
  const activeAccount = useActiveAccount();
127
131
  const walletChain = useActiveWalletChain();
128
- const theme = useCustomTheme();
129
132
 
130
133
  const { ensAvatarQuery, addressOrENS, balanceQuery } =
131
134
  useConnectedWalletDetails(
@@ -191,36 +194,37 @@ export const ConnectedWalletDetails: React.FC<{
191
194
  data-test="connected-wallet-details"
192
195
  onClick={openModal}
193
196
  >
194
- {ensAvatarQuery.data ? (
195
- <Img
196
- src={ensAvatarQuery.data}
197
- width="50px"
198
- height="50px"
199
- style={{
200
- width: 50,
201
- height: 50,
202
- }}
203
- client={client}
204
- />
205
- ) : (
206
- activeAccount && <Blobbie address={activeAccount.address} size={50} />
207
- )}
197
+ <Container
198
+ style={{
199
+ borderRadius: "100%",
200
+ overflow: "hidden",
201
+ width: "35px",
202
+ height: "35px",
203
+ }}
204
+ >
205
+ {ensAvatarQuery.data ? (
206
+ <img
207
+ alt=""
208
+ src={ensAvatarQuery.data}
209
+ style={{
210
+ width: "100%",
211
+ height: "100%",
212
+ }}
213
+ />
214
+ ) : (
215
+ activeAccount && <Blobbie address={activeAccount.address} size={35} />
216
+ )}
217
+ </Container>
208
218
  <Container
209
219
  flex="column"
210
- gap="3xs"
211
- px="sm"
212
- py="xs"
220
+ gap="4xs"
213
221
  style={{
214
- border: `1px solid ${theme.colors.borderColor}`,
215
222
  textOverflow: "ellipsis",
216
- minWidth: "115px",
217
- height: "50px",
218
223
  whiteSpace: "nowrap",
219
224
  borderRadius: `0 ${radius.md} ${radius.md} 0`,
220
225
  }}
221
226
  >
222
227
  {/* Address */}
223
-
224
228
  {addressOrENS ? (
225
229
  <Text
226
230
  size="xs"
@@ -231,7 +235,7 @@ export const ConnectedWalletDetails: React.FC<{
231
235
  {addressOrENS}
232
236
  </Text>
233
237
  ) : (
234
- <Skeleton height={fontSize.sm} width="80px" />
238
+ <Skeleton height={fontSize.xs} width="80px" />
235
239
  )}
236
240
 
237
241
  {/* Balance */}
@@ -239,9 +243,12 @@ export const ConnectedWalletDetails: React.FC<{
239
243
  <Text
240
244
  className={`${TW_CONNECTED_WALLET}__balance`}
241
245
  size="xs"
242
- weight={500}
246
+ color="secondaryText"
247
+ weight={400}
243
248
  >
244
- {Number(balanceQuery.data.displayValue).toFixed(3)}{" "}
249
+ {Number.parseFloat(
250
+ Number(balanceQuery.data.displayValue).toFixed(3),
251
+ )}{" "}
245
252
  {balanceQuery.data.symbol}
246
253
  </Text>
247
254
  ) : (
@@ -282,6 +289,7 @@ function DetailsModal(props: {
282
289
  activeAccount,
283
290
  props.displayBalanceToken,
284
291
  );
292
+ const theme = parseTheme(props.theme);
285
293
 
286
294
  const activeWallet = useActiveWallet();
287
295
  const chainIconQuery = useChainIconUrl(walletChain);
@@ -340,8 +348,18 @@ function DetailsModal(props: {
340
348
  {chainNameQuery.isLoading ? (
341
349
  <Skeleton height={"16px"} width={"150px"} />
342
350
  ) : (
343
- <Text color="primaryText" multiline>
351
+ <Text color="primaryText" size="md" multiline>
344
352
  {chainNameQuery.name || `Unknown chain #${walletChain?.id}`}
353
+ <Text color="secondaryText" size="xs">
354
+ {balanceQuery.data ? (
355
+ Number.parseFloat(
356
+ Number(balanceQuery.data.displayValue).toFixed(3),
357
+ )
358
+ ) : (
359
+ <Skeleton height="1em" width="100px" />
360
+ )}{" "}
361
+ {balanceQuery.data?.symbol}
362
+ </Text>
345
363
  </Text>
346
364
  )}
347
365
 
@@ -358,114 +376,103 @@ function DetailsModal(props: {
358
376
 
359
377
  let content = (
360
378
  <div>
361
- <Spacer y="xl" />
362
-
363
- <IconButton
364
- style={{
365
- position: "absolute",
366
- top: spacing.lg,
367
- left: spacing.lg,
368
- transform: "translateX(-6px)",
369
- }}
370
- onClick={() => {
371
- setScreen("wallet-manager");
372
- }}
373
- >
374
- <div
375
- style={{
376
- width: `${iconSize.md}px`,
377
- height: `${iconSize.md}px`,
378
- display: "flex",
379
- alignItems: "center",
380
- justifyContent: "center",
381
- }}
382
- >
383
- <ShuffleIconLucide size="20" />
384
- </div>
385
- </IconButton>
386
-
387
- <Container px="lg" flex="column" center="x">
388
- <Container
389
- style={{
390
- position: "relative",
391
- height: `${iconSize.xxl}px`,
392
- width: `${iconSize.xxl}px`,
393
- overflow: "visible",
394
- }}
395
- >
396
- {ensAvatarQuery.data ? (
397
- <Img
398
- src={ensAvatarQuery.data}
399
- width={iconSize.xxl}
400
- height={iconSize.xxl}
379
+ <Spacer y="xs" />
380
+ <Container p="lg" gap="sm" flex="row" center="y">
381
+ <ToolTip tip="Switch wallet">
382
+ <div
383
+ style={{
384
+ cursor: "pointer",
385
+ }}
386
+ onKeyDown={(e) => {
387
+ if (e.key === "w") {
388
+ setScreen("wallet-manager");
389
+ }
390
+ }}
391
+ onClick={() => {
392
+ setScreen("wallet-manager");
393
+ }}
394
+ >
395
+ <Container
401
396
  style={{
402
- borderRadius: radius.md,
397
+ position: "relative",
398
+ height: `${iconSize.xl}px`,
399
+ width: `${iconSize.xl}px`,
403
400
  }}
404
- client={client}
405
- />
406
- ) : (
407
- activeAccount && (
401
+ >
408
402
  <Container
409
- style={{ borderRadius: radius.md, overflow: "hidden" }}
403
+ style={{
404
+ width: "100%",
405
+ height: "100%",
406
+ borderRadius: "100%",
407
+ overflow: "hidden",
408
+ }}
410
409
  >
411
- <Blobbie
412
- address={activeAccount.address}
413
- size={Number(iconSize.xxl)}
414
- />
410
+ {ensAvatarQuery.data ? (
411
+ <img
412
+ src={ensAvatarQuery.data}
413
+ style={{
414
+ width: iconSize.xxl,
415
+ height: iconSize.xxl,
416
+ }}
417
+ alt=""
418
+ />
419
+ ) : (
420
+ activeAccount && (
421
+ <Blobbie
422
+ address={activeAccount.address}
423
+ size={Number(iconSize.xxl)}
424
+ />
425
+ )
426
+ )}
415
427
  </Container>
416
- )
417
- )}
418
- </Container>
419
-
420
- <Spacer y="md" />
421
-
422
- <ConnectedToSmartWallet client={props.client} connectLocale={locale} />
423
-
424
- {(activeWallet?.id === "embedded" || activeWallet?.id === "inApp") && (
425
- <InAppWalletUserInfo client={props.client} />
426
- )}
428
+ <Container
429
+ style={{
430
+ position: "absolute",
431
+ bottom: -2,
432
+ right: -2,
433
+ }}
434
+ >
435
+ <IconContainer
436
+ style={{
437
+ background: theme.colors.modalBg,
438
+ }}
439
+ padding="4px"
440
+ >
441
+ {activeWallet && (
442
+ <WalletImage
443
+ style={{ borderRadius: 0 }}
444
+ id={activeWallet.id}
445
+ client={client}
446
+ size="12"
447
+ />
448
+ )}
449
+ </IconContainer>
450
+ </Container>
451
+ </Container>
452
+ </div>
453
+ </ToolTip>
427
454
 
428
- {/* Address */}
429
- <div
430
- style={{
431
- display: "flex",
432
- gap: spacing.xxs,
433
- alignItems: "center",
434
- transform: "translateX(10px)",
435
- }}
436
- data-test="connected-wallet-address"
437
- data-address={activeAccount?.address}
438
- >
439
- <Text color="primaryText" weight={500} size="md">
440
- {addressOrENS}
441
- </Text>
442
- <IconButton
455
+ <Container flex="column" gap="3xs">
456
+ <div
443
457
  style={{
444
- padding: "3px",
458
+ display: "flex",
459
+ gap: spacing.xxs,
460
+ alignItems: "center",
445
461
  }}
446
- data-test="copy-address"
447
462
  >
448
- <CopyIcon
449
- text={activeAccount?.address || ""}
450
- tip={locale.copyAddress}
451
- side="top"
452
- />
453
- </IconButton>
454
- </div>
455
-
456
- <Spacer y="xxs" />
457
-
458
- {/* Balance */}
459
- <Text weight={500} size="sm">
460
- {balanceQuery.data ? (
461
- Number(balanceQuery.data.displayValue).toFixed(3)
462
- ) : (
463
- <Skeleton height="1em" width="100px" />
464
- )}{" "}
465
- {balanceQuery.data?.symbol}{" "}
466
- </Text>
463
+ <Text color="primaryText" weight={500} size="md">
464
+ {addressOrENS}
465
+ </Text>
466
+ <IconButton>
467
+ <CopyIcon
468
+ text={activeAccount?.address || ""}
469
+ tip={locale.copyAddress}
470
+ />
471
+ </IconButton>
472
+ </div>
473
+ <InAppWalletUserInfo client={client} locale={locale} />
474
+ </Container>
467
475
  </Container>
468
- <Spacer y="lg" />
469
476
  <Container px="lg">
470
477
  {/* Send, Receive, Swap */}
471
478
  <Container
@@ -826,6 +833,7 @@ function DetailsModal(props: {
826
833
  }}
827
834
  client={client}
828
835
  locale={locale}
836
+ walletConnect={props.connectOptions?.walletConnect}
829
837
  />
830
838
  );
831
839
  }
@@ -910,10 +918,13 @@ const WalletInfoButton = /* @__PURE__ */ StyledButton((_) => {
910
918
  borderRadius: radius.md,
911
919
  cursor: "pointer",
912
920
  display: "inline-flex",
921
+ gap: spacing.xs,
922
+ padding: spacing.xs,
913
923
  alignItems: "center",
914
924
  minWidth: "165px",
915
925
  height: "50px",
916
926
  boxSizing: "border-box",
927
+ border: `1px solid ${theme.colors.borderColor}`,
917
928
  WebkitTapHighlightColor: "transparent",
918
929
  lineHeight: "normal",
919
930
  animation: `${fadeInAnimation} 300ms ease`,
@@ -962,20 +973,8 @@ function ConnectedToSmartWallet(props: {
962
973
  }, [activeAccount, chain, client, isSmartWallet]);
963
974
 
964
975
  const content = (
965
- <Container
966
- flex="row"
967
- bg="secondaryButtonBg"
968
- gap="xxs"
969
- style={{
970
- borderRadius: radius.md,
971
- padding: `${spacing.xxs} ${spacing.sm} ${spacing.xxs} ${spacing.xs}`,
972
- }}
973
- center="y"
974
- >
975
- <Container flex="row" color="accentText" center="both">
976
- <SmartWalletBadgeIcon size={iconSize.xs} />
977
- </Container>
978
- <Text size="xs" color="secondaryButtonText">
976
+ <Container flex="row" gap="3xs" center="y">
977
+ <Text size="xs" weight={400} color="secondaryText">
979
978
  {locale.connectedToSmartWallet}
980
979
  </Text>
981
980
  </Container>
@@ -997,8 +996,6 @@ function ConnectedToSmartWallet(props: {
997
996
  ) : (
998
997
  <Text size="sm"> {content}</Text>
999
998
  )}
1000
-
1001
- <Spacer y="xs" />
1002
999
  </>
1003
1000
  );
1004
1001
  }
@@ -1006,9 +1003,15 @@ function ConnectedToSmartWallet(props: {
1006
1003
  return null;
1007
1004
  }
1008
1005
 
1009
- function InAppWalletUserInfo(props: { client: ThirdwebClient }) {
1010
- const { client } = props;
1006
+ function InAppWalletUserInfo(props: {
1007
+ client: ThirdwebClient;
1008
+ locale: ConnectLocale;
1009
+ }) {
1010
+ const { client, locale } = props;
1011
1011
  const account = useActiveAccount();
1012
+ const activeWallet = useActiveWallet();
1013
+ const { data: walletInfo } = useWalletInfo(activeWallet?.id);
1014
+ const isSmartWallet = hasSmartAccount(activeWallet);
1012
1015
 
1013
1016
  const userInfoQuery = useQuery({
1014
1017
  queryKey: ["in-app-wallet-user", client, account?.address],
@@ -1030,21 +1033,19 @@ function InAppWalletUserInfo(props: { client: ThirdwebClient }) {
1030
1033
  },
1031
1034
  });
1032
1035
 
1033
- if (userInfoQuery.data) {
1036
+ if (isSmartWallet) {
1037
+ return <ConnectedToSmartWallet client={client} connectLocale={locale} />;
1038
+ }
1039
+
1040
+ if (userInfoQuery.data || walletInfo) {
1034
1041
  return (
1035
- <Container
1036
- flex="row"
1037
- center="x"
1038
- style={{
1039
- paddingBottom: spacing.xs,
1040
- }}
1041
- >
1042
- <Text size="sm">{userInfoQuery.data}</Text>
1043
- </Container>
1042
+ <Text size="xs" weight={400}>
1043
+ {userInfoQuery.data || walletInfo?.name}
1044
+ </Text>
1044
1045
  );
1045
1046
  }
1046
1047
 
1047
- return null;
1048
+ return <Skeleton width="50px" height="10px" />;
1048
1049
  }
1049
1050
 
1050
1051
  /**
@@ -28,7 +28,6 @@ export const MenuButton = /* @__PURE__ */ StyledButton((_) => {
28
28
  transition: "background-color 200ms ease, transform 200ms ease",
29
29
  "&:hover": {
30
30
  backgroundColor: theme.colors.tertiaryBg,
31
- transform: "scale(1.01)",
32
31
  svg: {
33
32
  color: theme.colors.accentText,
34
33
  },