thirdweb 5.69.1-nightly-f368793375d099eec53569330af7a083e558e483-20241120000334 → 5.70.0-nightly-ecaa304a812188da3c81888bb52ca6064093c139-20241121000332

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 (398) hide show
  1. package/dist/cjs/client/client.js +1 -0
  2. package/dist/cjs/client/client.js.map +1 -1
  3. package/dist/cjs/exports/react.js +32 -3
  4. package/dist/cjs/exports/react.js.map +1 -1
  5. package/dist/cjs/extensions/erc721/lazyMinting/read/getBatchesToReveal.js +1 -1
  6. package/dist/cjs/extensions/modules/common/checkModulesCompatibility.js +5 -0
  7. package/dist/cjs/extensions/modules/common/checkModulesCompatibility.js.map +1 -1
  8. package/dist/cjs/extensions/prebuilts/deploy-pack.js +1 -0
  9. package/dist/cjs/extensions/prebuilts/deploy-pack.js.map +1 -1
  10. package/dist/cjs/extensions/thirdweb/write/publish.js +4 -0
  11. package/dist/cjs/extensions/thirdweb/write/publish.js.map +1 -1
  12. package/dist/cjs/react/core/hooks/others/useChainQuery.js +3 -3
  13. package/dist/cjs/react/core/hooks/rpc/useBlockNumber.js +1 -1
  14. package/dist/cjs/react/core/hooks/wallets/useCapabilities.js +1 -1
  15. package/dist/cjs/react/core/hooks/wallets/useSendCalls.js +3 -3
  16. package/dist/cjs/react/core/providers/connection-manager.js +3 -0
  17. package/dist/cjs/react/core/providers/connection-manager.js.map +1 -1
  18. package/dist/cjs/react/core/utils/wallet.js +2 -1
  19. package/dist/cjs/react/core/utils/wallet.js.map +1 -1
  20. package/dist/cjs/react/core/utils/walletIcon.js +2 -0
  21. package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
  22. package/dist/cjs/react/native/hooks/wallets/useProfiles.js +1 -1
  23. package/dist/cjs/react/native/providers/thirdweb-provider.js +1 -0
  24. package/dist/cjs/react/native/providers/thirdweb-provider.js.map +1 -1
  25. package/dist/cjs/react/native/ui/AutoConnect/AutoConnect.js +1 -0
  26. package/dist/cjs/react/native/ui/AutoConnect/AutoConnect.js.map +1 -1
  27. package/dist/cjs/react/native/ui/connect/ConnectModal.js +1 -0
  28. package/dist/cjs/react/native/ui/connect/ConnectModal.js.map +1 -1
  29. package/dist/cjs/react/native/ui/transaction/TransactionButton.js +1 -0
  30. package/dist/cjs/react/native/ui/transaction/TransactionButton.js.map +1 -1
  31. package/dist/cjs/react/web/hooks/wallets/useProfiles.js +1 -1
  32. package/dist/cjs/react/web/providers/thirdweb-provider.js +1 -0
  33. package/dist/cjs/react/web/providers/thirdweb-provider.js.map +1 -1
  34. package/dist/cjs/react/web/ui/AutoConnect/AutoConnect.js +1 -0
  35. package/dist/cjs/react/web/ui/AutoConnect/AutoConnect.js.map +1 -1
  36. package/dist/cjs/react/web/ui/ConnectWallet/Blobbie.js +19 -4
  37. package/dist/cjs/react/web/ui/ConnectWallet/Blobbie.js.map +1 -1
  38. package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js +21 -19
  39. package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
  40. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +18 -13
  41. package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
  42. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +1 -0
  43. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
  44. package/dist/cjs/react/web/ui/PayEmbed.js +1 -0
  45. package/dist/cjs/react/web/ui/PayEmbed.js.map +1 -1
  46. package/dist/cjs/react/web/ui/SiteEmbed.js +3 -2
  47. package/dist/cjs/react/web/ui/SiteEmbed.js.map +1 -1
  48. package/dist/cjs/react/web/ui/SiteLink.js +2 -1
  49. package/dist/cjs/react/web/ui/SiteLink.js.map +1 -1
  50. package/dist/cjs/react/web/ui/TransactionButton/index.js +1 -0
  51. package/dist/cjs/react/web/ui/TransactionButton/index.js.map +1 -1
  52. package/dist/cjs/react/web/ui/prebuilt/Account/address.js +49 -0
  53. package/dist/cjs/react/web/ui/prebuilt/Account/address.js.map +1 -0
  54. package/dist/cjs/react/web/ui/prebuilt/Account/avatar.js +144 -0
  55. package/dist/cjs/react/web/ui/prebuilt/Account/avatar.js.map +1 -0
  56. package/dist/cjs/react/web/ui/prebuilt/Account/balance.js +122 -0
  57. package/dist/cjs/react/web/ui/prebuilt/Account/balance.js.map +1 -0
  58. package/dist/cjs/react/web/ui/prebuilt/Account/blobbie.js +16 -0
  59. package/dist/cjs/react/web/ui/prebuilt/Account/blobbie.js.map +1 -0
  60. package/dist/cjs/react/web/ui/prebuilt/Account/name.js +106 -0
  61. package/dist/cjs/react/web/ui/prebuilt/Account/name.js.map +1 -0
  62. package/dist/cjs/react/web/ui/prebuilt/Account/provider.js +43 -0
  63. package/dist/cjs/react/web/ui/prebuilt/Account/provider.js.map +1 -0
  64. package/dist/cjs/react/web/ui/prebuilt/NFT/description.js +69 -0
  65. package/dist/cjs/react/web/ui/prebuilt/NFT/description.js.map +1 -0
  66. package/dist/cjs/react/web/ui/prebuilt/NFT/hooks.js +45 -0
  67. package/dist/cjs/react/web/ui/prebuilt/NFT/hooks.js.map +1 -0
  68. package/dist/cjs/react/web/ui/prebuilt/NFT/media.js +82 -0
  69. package/dist/cjs/react/web/ui/prebuilt/NFT/media.js.map +1 -0
  70. package/dist/cjs/react/web/ui/prebuilt/NFT/name.js +68 -0
  71. package/dist/cjs/react/web/ui/prebuilt/NFT/name.js.map +1 -0
  72. package/dist/cjs/react/web/ui/prebuilt/NFT/provider.js +55 -0
  73. package/dist/cjs/react/web/ui/prebuilt/NFT/provider.js.map +1 -0
  74. package/dist/cjs/react/web/ui/prebuilt/Token/icon.js +113 -0
  75. package/dist/cjs/react/web/ui/prebuilt/Token/icon.js.map +1 -0
  76. package/dist/cjs/react/web/ui/prebuilt/Token/name.js +137 -0
  77. package/dist/cjs/react/web/ui/prebuilt/Token/name.js.map +1 -0
  78. package/dist/cjs/react/web/ui/prebuilt/Token/provider.js +54 -0
  79. package/dist/cjs/react/web/ui/prebuilt/Token/provider.js.map +1 -0
  80. package/dist/cjs/react/web/ui/prebuilt/Token/symbol.js +134 -0
  81. package/dist/cjs/react/web/ui/prebuilt/Token/symbol.js.map +1 -0
  82. package/dist/cjs/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js +1 -0
  83. package/dist/cjs/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js.map +1 -1
  84. package/dist/cjs/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js +1 -0
  85. package/dist/cjs/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js.map +1 -1
  86. package/dist/cjs/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js +1 -0
  87. package/dist/cjs/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js.map +1 -1
  88. package/dist/cjs/storage/unpin.js +1 -1
  89. package/dist/cjs/storage/upload.js +1 -0
  90. package/dist/cjs/storage/upload.js.map +1 -1
  91. package/dist/cjs/transaction/actions/to-serializable-transaction.js +1 -1
  92. package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js +5 -0
  93. package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
  94. package/dist/cjs/utils/any-evm/zksync/isZkSyncChain.js +5 -0
  95. package/dist/cjs/utils/any-evm/zksync/isZkSyncChain.js.map +1 -1
  96. package/dist/cjs/utils/config.js +9 -0
  97. package/dist/cjs/utils/config.js.map +1 -1
  98. package/dist/cjs/utils/json.js +7 -4
  99. package/dist/cjs/utils/json.js.map +1 -1
  100. package/dist/cjs/version.js +1 -1
  101. package/dist/cjs/wallets/eip5792/get-calls-status.js +1 -1
  102. package/dist/cjs/wallets/eip5792/get-capabilities.js +1 -1
  103. package/dist/cjs/wallets/eip5792/send-calls.js +2 -2
  104. package/dist/cjs/wallets/eip5792/wait-for-bundle.js +1 -1
  105. package/dist/cjs/wallets/in-app/core/users/getUser.js +1 -1
  106. package/dist/cjs/wallets/smart/smart-wallet.js +1 -0
  107. package/dist/cjs/wallets/smart/smart-wallet.js.map +1 -1
  108. package/dist/esm/client/client.js +1 -0
  109. package/dist/esm/client/client.js.map +1 -1
  110. package/dist/esm/exports/react.js +17 -1
  111. package/dist/esm/exports/react.js.map +1 -1
  112. package/dist/esm/extensions/erc721/lazyMinting/read/getBatchesToReveal.js +1 -1
  113. package/dist/esm/extensions/modules/common/checkModulesCompatibility.js +5 -0
  114. package/dist/esm/extensions/modules/common/checkModulesCompatibility.js.map +1 -1
  115. package/dist/esm/extensions/prebuilts/deploy-pack.js +1 -0
  116. package/dist/esm/extensions/prebuilts/deploy-pack.js.map +1 -1
  117. package/dist/esm/extensions/thirdweb/write/publish.js +4 -0
  118. package/dist/esm/extensions/thirdweb/write/publish.js.map +1 -1
  119. package/dist/esm/react/core/hooks/others/useChainQuery.js +3 -3
  120. package/dist/esm/react/core/hooks/rpc/useBlockNumber.js +1 -1
  121. package/dist/esm/react/core/hooks/wallets/useCapabilities.js +1 -1
  122. package/dist/esm/react/core/hooks/wallets/useSendCalls.js +3 -3
  123. package/dist/esm/react/core/providers/connection-manager.js +3 -0
  124. package/dist/esm/react/core/providers/connection-manager.js.map +1 -1
  125. package/dist/esm/react/core/utils/wallet.js +2 -1
  126. package/dist/esm/react/core/utils/wallet.js.map +1 -1
  127. package/dist/esm/react/core/utils/walletIcon.js +2 -0
  128. package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
  129. package/dist/esm/react/native/hooks/wallets/useProfiles.js +1 -1
  130. package/dist/esm/react/native/providers/thirdweb-provider.js +1 -0
  131. package/dist/esm/react/native/providers/thirdweb-provider.js.map +1 -1
  132. package/dist/esm/react/native/ui/AutoConnect/AutoConnect.js +1 -0
  133. package/dist/esm/react/native/ui/AutoConnect/AutoConnect.js.map +1 -1
  134. package/dist/esm/react/native/ui/connect/ConnectModal.js +1 -0
  135. package/dist/esm/react/native/ui/connect/ConnectModal.js.map +1 -1
  136. package/dist/esm/react/native/ui/transaction/TransactionButton.js +1 -0
  137. package/dist/esm/react/native/ui/transaction/TransactionButton.js.map +1 -1
  138. package/dist/esm/react/web/hooks/wallets/useProfiles.js +1 -1
  139. package/dist/esm/react/web/providers/thirdweb-provider.js +1 -0
  140. package/dist/esm/react/web/providers/thirdweb-provider.js.map +1 -1
  141. package/dist/esm/react/web/ui/AutoConnect/AutoConnect.js +1 -0
  142. package/dist/esm/react/web/ui/AutoConnect/AutoConnect.js.map +1 -1
  143. package/dist/esm/react/web/ui/ConnectWallet/Blobbie.js +19 -4
  144. package/dist/esm/react/web/ui/ConnectWallet/Blobbie.js.map +1 -1
  145. package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js +21 -19
  146. package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
  147. package/dist/esm/react/web/ui/ConnectWallet/Details.js +19 -14
  148. package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
  149. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +1 -0
  150. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
  151. package/dist/esm/react/web/ui/PayEmbed.js +1 -0
  152. package/dist/esm/react/web/ui/PayEmbed.js.map +1 -1
  153. package/dist/esm/react/web/ui/SiteEmbed.js +3 -2
  154. package/dist/esm/react/web/ui/SiteEmbed.js.map +1 -1
  155. package/dist/esm/react/web/ui/SiteLink.js +2 -1
  156. package/dist/esm/react/web/ui/SiteLink.js.map +1 -1
  157. package/dist/esm/react/web/ui/TransactionButton/index.js +1 -0
  158. package/dist/esm/react/web/ui/TransactionButton/index.js.map +1 -1
  159. package/dist/esm/react/web/ui/prebuilt/Account/address.js +46 -0
  160. package/dist/esm/react/web/ui/prebuilt/Account/address.js.map +1 -0
  161. package/dist/esm/react/web/ui/prebuilt/Account/avatar.js +141 -0
  162. package/dist/esm/react/web/ui/prebuilt/Account/avatar.js.map +1 -0
  163. package/dist/esm/react/web/ui/prebuilt/Account/balance.js +119 -0
  164. package/dist/esm/react/web/ui/prebuilt/Account/balance.js.map +1 -0
  165. package/dist/esm/react/web/ui/prebuilt/Account/blobbie.js +13 -0
  166. package/dist/esm/react/web/ui/prebuilt/Account/blobbie.js.map +1 -0
  167. package/dist/esm/react/web/ui/prebuilt/Account/name.js +103 -0
  168. package/dist/esm/react/web/ui/prebuilt/Account/name.js.map +1 -0
  169. package/dist/esm/react/web/ui/prebuilt/Account/provider.js +39 -0
  170. package/dist/esm/react/web/ui/prebuilt/Account/provider.js.map +1 -0
  171. package/dist/esm/react/web/ui/prebuilt/NFT/description.js +66 -0
  172. package/dist/esm/react/web/ui/prebuilt/NFT/description.js.map +1 -0
  173. package/dist/esm/react/web/ui/prebuilt/NFT/hooks.js +41 -0
  174. package/dist/esm/react/web/ui/prebuilt/NFT/hooks.js.map +1 -0
  175. package/dist/esm/react/web/ui/prebuilt/NFT/media.js +79 -0
  176. package/dist/esm/react/web/ui/prebuilt/NFT/media.js.map +1 -0
  177. package/dist/esm/react/web/ui/prebuilt/NFT/name.js +65 -0
  178. package/dist/esm/react/web/ui/prebuilt/NFT/name.js.map +1 -0
  179. package/dist/esm/react/web/ui/prebuilt/NFT/provider.js +50 -0
  180. package/dist/esm/react/web/ui/prebuilt/NFT/provider.js.map +1 -0
  181. package/dist/esm/react/web/ui/prebuilt/Token/icon.js +110 -0
  182. package/dist/esm/react/web/ui/prebuilt/Token/icon.js.map +1 -0
  183. package/dist/esm/react/web/ui/prebuilt/Token/name.js +134 -0
  184. package/dist/esm/react/web/ui/prebuilt/Token/name.js.map +1 -0
  185. package/dist/esm/react/web/ui/prebuilt/Token/provider.js +50 -0
  186. package/dist/esm/react/web/ui/prebuilt/Token/provider.js.map +1 -0
  187. package/dist/esm/react/web/ui/prebuilt/Token/symbol.js +131 -0
  188. package/dist/esm/react/web/ui/prebuilt/Token/symbol.js.map +1 -0
  189. package/dist/esm/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js +1 -0
  190. package/dist/esm/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js.map +1 -1
  191. package/dist/esm/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js +1 -0
  192. package/dist/esm/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js.map +1 -1
  193. package/dist/esm/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js +1 -0
  194. package/dist/esm/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js.map +1 -1
  195. package/dist/esm/storage/unpin.js +1 -1
  196. package/dist/esm/storage/upload.js +1 -0
  197. package/dist/esm/storage/upload.js.map +1 -1
  198. package/dist/esm/transaction/actions/to-serializable-transaction.js +1 -1
  199. package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js +5 -0
  200. package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
  201. package/dist/esm/utils/any-evm/zksync/isZkSyncChain.js +5 -0
  202. package/dist/esm/utils/any-evm/zksync/isZkSyncChain.js.map +1 -1
  203. package/dist/esm/utils/config.js +9 -0
  204. package/dist/esm/utils/config.js.map +1 -1
  205. package/dist/esm/utils/json.js +6 -2
  206. package/dist/esm/utils/json.js.map +1 -1
  207. package/dist/esm/version.js +1 -1
  208. package/dist/esm/wallets/eip5792/get-calls-status.js +1 -1
  209. package/dist/esm/wallets/eip5792/get-capabilities.js +1 -1
  210. package/dist/esm/wallets/eip5792/send-calls.js +2 -2
  211. package/dist/esm/wallets/eip5792/wait-for-bundle.js +1 -1
  212. package/dist/esm/wallets/in-app/core/users/getUser.js +1 -1
  213. package/dist/esm/wallets/smart/smart-wallet.js +1 -0
  214. package/dist/esm/wallets/smart/smart-wallet.js.map +1 -1
  215. package/dist/types/client/client.d.ts +1 -0
  216. package/dist/types/client/client.d.ts.map +1 -1
  217. package/dist/types/exports/react.d.ts +14 -1
  218. package/dist/types/exports/react.d.ts.map +1 -1
  219. package/dist/types/extensions/erc721/lazyMinting/read/getBatchesToReveal.d.ts +1 -1
  220. package/dist/types/extensions/modules/common/checkModulesCompatibility.d.ts +5 -0
  221. package/dist/types/extensions/modules/common/checkModulesCompatibility.d.ts.map +1 -1
  222. package/dist/types/extensions/prebuilts/deploy-pack.d.ts +1 -0
  223. package/dist/types/extensions/prebuilts/deploy-pack.d.ts.map +1 -1
  224. package/dist/types/extensions/thirdweb/write/publish.d.ts +4 -0
  225. package/dist/types/extensions/thirdweb/write/publish.d.ts.map +1 -1
  226. package/dist/types/react/core/hooks/others/useChainQuery.d.ts +3 -3
  227. package/dist/types/react/core/hooks/rpc/useBlockNumber.d.ts +1 -1
  228. package/dist/types/react/core/hooks/wallets/useCapabilities.d.ts +1 -1
  229. package/dist/types/react/core/hooks/wallets/useSendCalls.d.ts +3 -3
  230. package/dist/types/react/core/providers/connection-manager.d.ts +3 -0
  231. package/dist/types/react/core/providers/connection-manager.d.ts.map +1 -1
  232. package/dist/types/react/core/utils/wallet.d.ts +2 -1
  233. package/dist/types/react/core/utils/wallet.d.ts.map +1 -1
  234. package/dist/types/react/core/utils/walletIcon.d.ts +2 -0
  235. package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
  236. package/dist/types/react/native/hooks/wallets/useProfiles.d.ts +1 -1
  237. package/dist/types/react/native/providers/thirdweb-provider.d.ts +1 -0
  238. package/dist/types/react/native/providers/thirdweb-provider.d.ts.map +1 -1
  239. package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts +1 -0
  240. package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
  241. package/dist/types/react/native/ui/connect/ConnectModal.d.ts +1 -0
  242. package/dist/types/react/native/ui/connect/ConnectModal.d.ts.map +1 -1
  243. package/dist/types/react/native/ui/transaction/TransactionButton.d.ts +1 -0
  244. package/dist/types/react/native/ui/transaction/TransactionButton.d.ts.map +1 -1
  245. package/dist/types/react/web/hooks/wallets/useProfiles.d.ts +1 -1
  246. package/dist/types/react/web/providers/thirdweb-provider.d.ts +1 -0
  247. package/dist/types/react/web/providers/thirdweb-provider.d.ts.map +1 -1
  248. package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts +1 -0
  249. package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
  250. package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts +22 -5
  251. package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts.map +1 -1
  252. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts +2 -1
  253. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
  254. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  255. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts +1 -0
  256. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
  257. package/dist/types/react/web/ui/PayEmbed.d.ts +2 -2
  258. package/dist/types/react/web/ui/PayEmbed.d.ts.map +1 -1
  259. package/dist/types/react/web/ui/SiteEmbed.d.ts +3 -2
  260. package/dist/types/react/web/ui/SiteEmbed.d.ts.map +1 -1
  261. package/dist/types/react/web/ui/SiteLink.d.ts +2 -1
  262. package/dist/types/react/web/ui/SiteLink.d.ts.map +1 -1
  263. package/dist/types/react/web/ui/TransactionButton/index.d.ts +1 -0
  264. package/dist/types/react/web/ui/TransactionButton/index.d.ts.map +1 -1
  265. package/dist/types/react/web/ui/prebuilt/Account/address.d.ts +52 -0
  266. package/dist/types/react/web/ui/prebuilt/Account/address.d.ts.map +1 -0
  267. package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts +142 -0
  268. package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts.map +1 -0
  269. package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts +137 -0
  270. package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts.map +1 -0
  271. package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts +8 -0
  272. package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts.map +1 -0
  273. package/dist/types/react/web/ui/prebuilt/Account/name.d.ts +119 -0
  274. package/dist/types/react/web/ui/prebuilt/Account/name.d.ts.map +1 -0
  275. package/dist/types/react/web/ui/prebuilt/Account/provider.d.ts +45 -0
  276. package/dist/types/react/web/ui/prebuilt/Account/provider.d.ts.map +1 -0
  277. package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts +59 -0
  278. package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts.map +1 -0
  279. package/dist/types/react/web/ui/prebuilt/NFT/hooks.d.ts +14 -0
  280. package/dist/types/react/web/ui/prebuilt/NFT/hooks.d.ts.map +1 -0
  281. package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts +75 -0
  282. package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts.map +1 -0
  283. package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts +59 -0
  284. package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts.map +1 -0
  285. package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts +55 -0
  286. package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts.map +1 -0
  287. package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts +95 -0
  288. package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts.map +1 -0
  289. package/dist/types/react/web/ui/prebuilt/Token/name.d.ts +140 -0
  290. package/dist/types/react/web/ui/prebuilt/Token/name.d.ts.map +1 -0
  291. package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts +61 -0
  292. package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts.map +1 -0
  293. package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts +137 -0
  294. package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts.map +1 -0
  295. package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts +1 -0
  296. package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts.map +1 -1
  297. package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts +1 -0
  298. package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts.map +1 -1
  299. package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts +1 -0
  300. package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts.map +1 -1
  301. package/dist/types/storage/unpin.d.ts +1 -1
  302. package/dist/types/storage/upload.d.ts +1 -0
  303. package/dist/types/storage/upload.d.ts.map +1 -1
  304. package/dist/types/transaction/actions/to-serializable-transaction.d.ts +1 -1
  305. package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts +5 -0
  306. package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts.map +1 -1
  307. package/dist/types/utils/any-evm/zksync/isZkSyncChain.d.ts +5 -0
  308. package/dist/types/utils/any-evm/zksync/isZkSyncChain.d.ts.map +1 -1
  309. package/dist/types/utils/config.d.ts +9 -0
  310. package/dist/types/utils/config.d.ts.map +1 -1
  311. package/dist/types/utils/json.d.ts +1 -1
  312. package/dist/types/utils/json.d.ts.map +1 -1
  313. package/dist/types/version.d.ts +1 -1
  314. package/dist/types/wallets/eip5792/get-calls-status.d.ts +1 -1
  315. package/dist/types/wallets/eip5792/get-capabilities.d.ts +1 -1
  316. package/dist/types/wallets/eip5792/send-calls.d.ts +2 -2
  317. package/dist/types/wallets/eip5792/wait-for-bundle.d.ts +1 -1
  318. package/dist/types/wallets/in-app/core/users/getUser.d.ts +1 -1
  319. package/dist/types/wallets/smart/smart-wallet.d.ts +1 -0
  320. package/dist/types/wallets/smart/smart-wallet.d.ts.map +1 -1
  321. package/package.json +1 -1
  322. package/src/client/client.ts +1 -0
  323. package/src/exports/react.ts +56 -2
  324. package/src/extensions/erc721/lazyMinting/read/getBatchesToReveal.ts +1 -1
  325. package/src/extensions/modules/common/checkModulesCompatibility.ts +5 -0
  326. package/src/extensions/prebuilts/deploy-pack.ts +1 -0
  327. package/src/extensions/thirdweb/write/publish.ts +4 -0
  328. package/src/react/core/hooks/others/useChainQuery.ts +3 -3
  329. package/src/react/core/hooks/rpc/useBlockNumber.ts +1 -1
  330. package/src/react/core/hooks/wallets/useCapabilities.ts +1 -1
  331. package/src/react/core/hooks/wallets/useSendCalls.ts +3 -3
  332. package/src/react/core/providers/connection-manager.tsx +3 -0
  333. package/src/react/core/utils/wallet.ts +2 -1
  334. package/src/react/core/utils/walletIcon.ts +2 -0
  335. package/src/react/native/hooks/wallets/useProfiles.ts +1 -1
  336. package/src/react/native/providers/thirdweb-provider.tsx +1 -0
  337. package/src/react/native/ui/AutoConnect/AutoConnect.tsx +1 -0
  338. package/src/react/native/ui/connect/ConnectModal.tsx +1 -0
  339. package/src/react/native/ui/transaction/TransactionButton.tsx +1 -0
  340. package/src/react/web/hooks/wallets/useProfiles.ts +1 -1
  341. package/src/react/web/providers/thirdweb-provider.tsx +1 -0
  342. package/src/react/web/ui/AutoConnect/AutoConnect.tsx +1 -0
  343. package/src/react/web/ui/ConnectWallet/Blobbie.tsx +31 -4
  344. package/src/react/web/ui/ConnectWallet/ConnectButton.tsx +36 -32
  345. package/src/react/web/ui/ConnectWallet/Details.tsx +91 -58
  346. package/src/react/web/ui/ConnectWallet/Modal/ConnectEmbed.tsx +1 -0
  347. package/src/react/web/ui/PayEmbed.tsx +2 -2
  348. package/src/react/web/ui/SiteEmbed.tsx +3 -2
  349. package/src/react/web/ui/SiteLink.tsx +2 -1
  350. package/src/react/web/ui/TransactionButton/index.tsx +1 -0
  351. package/src/react/web/ui/prebuilt/Account/address.test.tsx +28 -0
  352. package/src/react/web/ui/prebuilt/Account/address.tsx +64 -0
  353. package/src/react/web/ui/prebuilt/Account/avatar.test.tsx +48 -0
  354. package/src/react/web/ui/prebuilt/Account/avatar.tsx +221 -0
  355. package/src/react/web/ui/prebuilt/Account/balance.test.tsx +54 -0
  356. package/src/react/web/ui/prebuilt/Account/balance.tsx +202 -0
  357. package/src/react/web/ui/prebuilt/Account/blobbie.tsx +12 -0
  358. package/src/react/web/ui/prebuilt/Account/name.test.tsx +62 -0
  359. package/src/react/web/ui/prebuilt/Account/name.tsx +175 -0
  360. package/src/react/web/ui/prebuilt/Account/provider.test.tsx +38 -0
  361. package/src/react/web/ui/prebuilt/Account/provider.tsx +69 -0
  362. package/src/react/web/ui/prebuilt/NFT/NFT.test.tsx +17 -14
  363. package/src/react/web/ui/prebuilt/NFT/description.tsx +87 -0
  364. package/src/react/web/ui/prebuilt/NFT/hooks.tsx +53 -0
  365. package/src/react/web/ui/prebuilt/NFT/media.tsx +119 -0
  366. package/src/react/web/ui/prebuilt/NFT/name.tsx +85 -0
  367. package/src/react/web/ui/prebuilt/NFT/provider.tsx +75 -0
  368. package/src/react/web/ui/prebuilt/Token/icon.tsx +164 -0
  369. package/src/react/web/ui/prebuilt/Token/name.tsx +201 -0
  370. package/src/react/web/ui/prebuilt/Token/provider.tsx +86 -0
  371. package/src/react/web/ui/prebuilt/Token/symbol.tsx +201 -0
  372. package/src/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.tsx +1 -0
  373. package/src/react/web/ui/prebuilt/thirdweb/ClaimButton/index.tsx +1 -0
  374. package/src/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.tsx +1 -0
  375. package/src/storage/unpin.ts +1 -1
  376. package/src/storage/upload.ts +1 -0
  377. package/src/transaction/actions/to-serializable-transaction.ts +1 -1
  378. package/src/transaction/actions/zksync/send-eip712-transaction.ts +5 -0
  379. package/src/utils/any-evm/zksync/isZkSyncChain.ts +5 -0
  380. package/src/utils/config.ts +9 -0
  381. package/src/utils/json.ts +8 -2
  382. package/src/version.ts +1 -1
  383. package/src/wallets/eip5792/get-calls-status.ts +1 -1
  384. package/src/wallets/eip5792/get-capabilities.ts +1 -1
  385. package/src/wallets/eip5792/send-calls.ts +2 -2
  386. package/src/wallets/eip5792/wait-for-bundle.ts +1 -1
  387. package/src/wallets/in-app/core/users/getUser.ts +1 -1
  388. package/src/wallets/smart/smart-wallet.ts +1 -0
  389. package/dist/cjs/react/web/ui/prebuilt/NFT/NFT.js +0 -217
  390. package/dist/cjs/react/web/ui/prebuilt/NFT/NFT.js.map +0 -1
  391. package/dist/esm/react/web/ui/prebuilt/NFT/NFT.js +0 -212
  392. package/dist/esm/react/web/ui/prebuilt/NFT/NFT.js.map +0 -1
  393. package/dist/types/react/web/ui/prebuilt/NFT/NFT.d.ts +0 -76
  394. package/dist/types/react/web/ui/prebuilt/NFT/NFT.d.ts.map +0 -1
  395. package/src/extensions/prebuilts/deploy-published.test.ts +0 -132
  396. package/src/react/web/ui/prebuilt/NFT/NFT.tsx +0 -272
  397. package/src/wallets/smart/smart-wallet-integration-v07.test.ts +0 -270
  398. package/src/wallets/smart/smart-wallet-integration.test.ts +0 -375
@@ -0,0 +1,75 @@
1
+ import { createContext, useContext } from "react";
2
+ import type { ThirdwebContract } from "../../../../../contract/contract.js";
3
+
4
+ /**
5
+ * Props for the <NFT> component
6
+ * @component
7
+ */
8
+ export type NFTProviderProps = {
9
+ /**
10
+ * The NFT contract address. Accepts both ERC721 and ERC1155 contracts
11
+ */
12
+ contract: ThirdwebContract;
13
+ /**
14
+ * The tokenId whose info you want to display
15
+ */
16
+ tokenId: bigint;
17
+ };
18
+
19
+ /**
20
+ * @internal
21
+ */
22
+ export const NFTProviderContext = /* @__PURE__ */ createContext<
23
+ NFTProviderProps | undefined
24
+ >(undefined);
25
+
26
+ /**
27
+ * @internal
28
+ */
29
+ export function useNFTContext() {
30
+ const ctx = useContext(NFTProviderContext);
31
+ if (!ctx) {
32
+ throw new Error(
33
+ "NFTProviderContext not found. Make sure you are using NFTMedia, NFTDescription, etc. inside a <NFTProvider /> component",
34
+ );
35
+ }
36
+ return ctx;
37
+ }
38
+
39
+ /**
40
+ * A React context provider component that supplies NFT-related data to its child components.
41
+ *
42
+ * This component serves as a wrapper around the `NFTProviderContext.Provider` and passes
43
+ * the provided NFT data down to all of its child components through the context API.
44
+ *
45
+ *
46
+ * @param {React.PropsWithChildren<NFTProviderProps>} props - The props for the NFT provider
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * import { getContract } from "thirdweb";
51
+ * import { NFTProvider, NFTMedia, NFTDescription, NFTName } from "thirdweb/react";
52
+ *
53
+ * const contract = getContract({
54
+ * address: "0x...",
55
+ * chain: ethereum,
56
+ * client: yourThirdwebClient,
57
+ * });
58
+ *
59
+ * <NFTProvider contract={contract} tokenId={0n}>
60
+ * <NFTMedia />
61
+ * <NFTDescription />
62
+ * <NFTName />
63
+ * </NFTProvider>
64
+ * ```
65
+ * @component
66
+ * @nft
67
+ * @beta
68
+ */
69
+ export function NFTProvider(props: React.PropsWithChildren<NFTProviderProps>) {
70
+ return (
71
+ <NFTProviderContext.Provider value={props}>
72
+ {props.children}
73
+ </NFTProviderContext.Provider>
74
+ );
75
+ }
@@ -0,0 +1,164 @@
1
+ import { type UseQueryOptions, useQuery } from "@tanstack/react-query";
2
+ import type { JSX } from "react";
3
+ import { getChainMetadata } from "../../../../../chains/utils.js";
4
+ import { NATIVE_TOKEN_ADDRESS } from "../../../../../constants/addresses.js";
5
+ import { getContract } from "../../../../../contract/contract.js";
6
+ import { getContractMetadata } from "../../../../../extensions/common/read/getContractMetadata.js";
7
+ import { resolveScheme } from "../../../../../utils/ipfs.js";
8
+ import { useTokenContext } from "./provider.js";
9
+
10
+ export interface TokenIconProps
11
+ extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, "src"> {
12
+ /**
13
+ * This prop can be a string or a (async) function that resolves to a string, representing the icon url of the token
14
+ * This is particularly useful if you already have a way to fetch the token icon.
15
+ */
16
+ iconResolver?: string | (() => string) | (() => Promise<string>);
17
+ /**
18
+ * This component will be shown while the avatar of the icon is being fetched
19
+ * If not passed, the component will return `null`.
20
+ *
21
+ * You can pass a loading sign or spinner to this prop.
22
+ * @example
23
+ * ```tsx
24
+ * <TokenIcon loadingComponent={<Spinner />} />
25
+ * ```
26
+ */
27
+ loadingComponent?: JSX.Element;
28
+ /**
29
+ * This component will be shown if the request for fetching the avatar is done
30
+ * but could not retreive any result.
31
+ * You can pass a dummy avatar/image to this prop.
32
+ *
33
+ * If not passed, the component will return `null`
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * <TokenIcon fallbackComponent={<DummyImage />} />
38
+ * ```
39
+ */
40
+ fallbackComponent?: JSX.Element;
41
+
42
+ /**
43
+ * Optional query options for `useQuery`
44
+ */
45
+ queryOptions?: Omit<UseQueryOptions<string>, "queryFn" | "queryKey">;
46
+ }
47
+
48
+ /**
49
+ * This component tries to resolve the icon of a given token, then return an image.
50
+ * @returns an <img /> with the src of the token icon
51
+ *
52
+ * @example
53
+ * ### Basic usage
54
+ * ```tsx
55
+ * import { TokenProvider, TokenIcon } from "thirdweb/react";
56
+ *
57
+ * <TokenProvider address="0x-token-address" chain={chain} client={client}>
58
+ * <TokenIcon />
59
+ * </TokenProvider>
60
+ * ```
61
+ *
62
+ * Result: An <img /> component with the src of the icon
63
+ * ```html
64
+ * <img src="token-icon.png" />
65
+ * ```
66
+ *
67
+ * ### Override the icon with the `iconResolver` prop
68
+ * If you already have the icon url, you can skip the network requests and pass it directly to the TokenIcon
69
+ * ```tsx
70
+ * <TokenIcon iconResolver="/usdc.png" />
71
+ * ```
72
+ *
73
+ * You can also pass in your own custom (async) function that retrieves the icon url
74
+ * ```tsx
75
+ * const getIcon = async () => {
76
+ * const icon = getIconFromCoinMarketCap(tokenAddress, etc);
77
+ * return icon;
78
+ * };
79
+ *
80
+ * <TokenIcon iconResolver={getIcon} />
81
+ * ```
82
+ *
83
+ * ### Show a loading sign while the icon is being loaded
84
+ * ```tsx
85
+ * <TokenIcon loadingComponent={<Spinner />} />
86
+ * ```
87
+ *
88
+ * ### Fallback to a dummy image if the token icon fails to resolve
89
+ * ```tsx
90
+ * <TokenIcon fallbackComponent={<img src="blank-image.png" />} />
91
+ * ```
92
+ *
93
+ * ### Usage with queryOptions
94
+ * TokenIcon uses useQuery() from tanstack query internally.
95
+ * It allows you to pass a custom queryOptions of your choice for more control of the internal fetching logic
96
+ * ```tsx
97
+ * <TokenIcon queryOptions={{ enabled: someLogic, retry: 3, }} />
98
+ * ```
99
+ *
100
+ * @component
101
+ * @token
102
+ * @beta
103
+ */
104
+ export function TokenIcon({
105
+ iconResolver,
106
+ loadingComponent,
107
+ fallbackComponent,
108
+ queryOptions,
109
+ ...restProps
110
+ }: TokenIconProps) {
111
+ const { address, client, chain } = useTokenContext();
112
+ const iconQuery = useQuery({
113
+ queryKey: ["_internal_token_icon_", chain.id, address] as const,
114
+ queryFn: async () => {
115
+ if (typeof iconResolver === "string") {
116
+ return iconResolver;
117
+ }
118
+ if (typeof iconResolver === "function") {
119
+ return iconResolver();
120
+ }
121
+ if (address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase()) {
122
+ const possibleUrl = await getChainMetadata(chain).then(
123
+ (data) => data.icon?.url,
124
+ );
125
+ if (!possibleUrl) {
126
+ throw new Error("Failed to resolve icon for native token");
127
+ }
128
+ return resolveScheme({ uri: possibleUrl, client });
129
+ }
130
+
131
+ // Try to get the icon from the contractURI
132
+ const contractMetadata = await getContractMetadata({
133
+ contract: getContract({
134
+ address,
135
+ chain,
136
+ client,
137
+ }),
138
+ });
139
+
140
+ if (
141
+ !contractMetadata.image ||
142
+ typeof contractMetadata.image !== "string"
143
+ ) {
144
+ throw new Error("Failed to resolve token icon from contract metadata");
145
+ }
146
+
147
+ return resolveScheme({
148
+ uri: contractMetadata.image,
149
+ client,
150
+ });
151
+ },
152
+ ...queryOptions,
153
+ });
154
+
155
+ if (iconQuery.isLoading) {
156
+ return loadingComponent || null;
157
+ }
158
+
159
+ if (!iconQuery.data) {
160
+ return fallbackComponent || null;
161
+ }
162
+
163
+ return <img src={iconQuery.data} alt={restProps.alt} />;
164
+ }
@@ -0,0 +1,201 @@
1
+ "use client";
2
+
3
+ import { type UseQueryOptions, useQuery } from "@tanstack/react-query";
4
+ import type React from "react";
5
+ import type { JSX } from "react";
6
+ import { getChainMetadata } from "../../../../../chains/utils.js";
7
+ import { NATIVE_TOKEN_ADDRESS } from "../../../../../constants/addresses.js";
8
+ import { getContract } from "../../../../../contract/contract.js";
9
+ import { getContractMetadata } from "../../../../../extensions/common/read/getContractMetadata.js";
10
+ import { name } from "../../../../../extensions/common/read/name.js";
11
+ import { useTokenContext } from "./provider.js";
12
+
13
+ /**
14
+ * Props for the TokenName component
15
+ * @component
16
+ * @token
17
+ */
18
+ export interface TokenNameProps
19
+ extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
20
+ /**
21
+ * This prop can be a string or a (async) function that resolves to a string, representing the name of the token
22
+ * This is particularly useful if you already have a way to fetch the token name.
23
+ */
24
+ nameResolver?: string | (() => string) | (() => Promise<string>);
25
+ /**
26
+ * A function to format the name's display value
27
+ * Particularly useful to avoid overflowing-UI issues
28
+ *
29
+ * ```tsx
30
+ * <TokenName formatFn={(str: string) => doSomething()} />
31
+ * ```
32
+ */
33
+ formatFn?: (str: string) => string;
34
+ /**
35
+ * This component will be shown while the name of the token is being fetched
36
+ * If not passed, the component will return `null`.
37
+ *
38
+ * You can/should pass a loading sign or spinner to this prop.
39
+ * @example
40
+ * ```tsx
41
+ * <TokenName loadingComponent={<Spinner />} />
42
+ * ```
43
+ */
44
+ loadingComponent?: JSX.Element;
45
+ /**
46
+ * This component will be shown if the name fails to be retreived
47
+ * If not passed, the component will return `null`.
48
+ *
49
+ * You can/should pass a descriptive text/component to this prop, indicating that the
50
+ * name was not fetched succesfully
51
+ * @example
52
+ * ```tsx
53
+ * <TokenName fallbackComponent={"Failed to load"}
54
+ * />
55
+ * ```
56
+ */
57
+ fallbackComponent?: JSX.Element;
58
+ /**
59
+ * Optional `useQuery` params
60
+ */
61
+ queryOptions?: Omit<UseQueryOptions<string>, "queryFn" | "queryKey">;
62
+ }
63
+
64
+ /**
65
+ * This component fetches then shows the name of a token. For ERC20 tokens, it calls the `name` function in the ERC20 contract.
66
+ * It inherits all the attributes of a HTML <span> component, hence you can style it just like how you would style a normal <span>
67
+ *
68
+ *
69
+ * @example
70
+ * ### Basic usage
71
+ * ```tsx
72
+ * import { TokenProvider, TokenName } from "thirdweb/react";
73
+ * import { ethereum } from "thirdweb/chains";
74
+ *
75
+ * <TokenProvider {...props}>
76
+ * <TokenName />
77
+ * </TokenProvider>
78
+ * ```
79
+ * Result:
80
+ * ```html
81
+ * <span>Ether</span>
82
+ * ```
83
+ *
84
+ * ### Custom name resolver
85
+ * By default TokenName will call the `name` method of the token contract.
86
+ * However if you have a different way to fetch the name, you can pass the function to the `nameResolver` prop.
87
+ * Note: nameResolver should either be a string or a function (async) that returns a string.
88
+ * ```tsx
89
+ * async function fetchNameMethod() {
90
+ * // your own fetching logic
91
+ * return "the token name";
92
+ * }
93
+ *
94
+ * <TokenName nameResolver={fetchNameMethod} />
95
+ * ```
96
+ *
97
+ * Alternatively you can also pass in a string directly:
98
+ * ```tsx
99
+ * <TokenName nameResolver="USD Coin Circle" />
100
+ * ```
101
+ *
102
+ *
103
+ * ### Format the name (capitalize, truncate, etc.)
104
+ * The TokenName component accepts a `formatFn` which takes in a string and outputs a string
105
+ * The function is used to modify the name of the token
106
+ *
107
+ * ```tsx
108
+ * const concatStr = (str: string):string => str + "Token"
109
+ *
110
+ * <TokenName formatFn={concatStr} />
111
+ * ```
112
+ *
113
+ * Result:
114
+ * ```html
115
+ * <span>Ether Token</span>
116
+ * ```
117
+ *
118
+ * ### Show a loading sign when the name is being fetched
119
+ * ```tsx
120
+ * import { TokenProvider, TokenName } from "thirdweb/react";
121
+ *
122
+ * <TokenProvider address="0x...">
123
+ * <TokenName loadingComponent={<Spinner />} />
124
+ * </TokenProvider>
125
+ * ```
126
+ *
127
+ * ### Fallback to something when the name fails to resolve
128
+ * ```tsx
129
+ * <TokenProvider address="0x...">
130
+ * <TokenName fallbackComponent={"Failed to load"} />
131
+ * </TokenProvider>
132
+ * ```
133
+ *
134
+ * ### Custom query options for useQuery
135
+ * This component uses `@tanstack-query`'s useQuery internally.
136
+ * You can use the `queryOptions` prop for more fine-grained control
137
+ * ```tsx
138
+ * <TokenName
139
+ * queryOptions={{
140
+ * enabled: isEnabled,
141
+ * retry: 4,
142
+ * }}
143
+ * />
144
+ * ```
145
+ *
146
+ * @component
147
+ * @token
148
+ * @beta
149
+ */
150
+ export function TokenName({
151
+ nameResolver,
152
+ formatFn,
153
+ loadingComponent,
154
+ fallbackComponent,
155
+ queryOptions,
156
+ ...restProps
157
+ }: TokenNameProps) {
158
+ const { address, client, chain } = useTokenContext();
159
+ const nameQuery = useQuery({
160
+ queryKey: ["_internal_token_name_", chain.id, address] as const,
161
+ queryFn: async () => {
162
+ if (typeof nameResolver === "string") {
163
+ return nameResolver;
164
+ }
165
+ if (typeof nameResolver === "function") {
166
+ return nameResolver();
167
+ }
168
+ if (address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase()) {
169
+ // Don't wanna use `getChainNativeCurrencyName` because it has some side effect (it catches error and defaults to "ETH")
170
+ return getChainMetadata(chain).then((data) => data.nativeCurrency.name);
171
+ }
172
+ // Try to fetch the name from both the `name()` function and the contract metadata
173
+ // then prioritize the `name()`
174
+ const contract = getContract({ address, client, chain });
175
+ const [_name, contractMetadata] = await Promise.all([
176
+ name({ contract }),
177
+ getContractMetadata({ contract }),
178
+ ]);
179
+ if (!_name && !contractMetadata.name) {
180
+ throw new Error(
181
+ "Failed to resolve name from both name() and contract metadata",
182
+ );
183
+ }
184
+
185
+ return _name || contractMetadata.name;
186
+ },
187
+ ...queryOptions,
188
+ });
189
+
190
+ if (nameQuery.isLoading) {
191
+ return loadingComponent || null;
192
+ }
193
+
194
+ if (!nameQuery.data) {
195
+ return fallbackComponent || null;
196
+ }
197
+
198
+ const displayValue = formatFn ? formatFn(nameQuery.data) : nameQuery.data;
199
+
200
+ return <span {...restProps}>{displayValue}</span>;
201
+ }
@@ -0,0 +1,86 @@
1
+ "use client";
2
+
3
+ import type { Address } from "abitype";
4
+ import type React from "react";
5
+ import { createContext, useContext } from "react";
6
+ import type { Chain } from "../../../../../chains/types.js";
7
+ import type { ThirdwebClient } from "../../../../../client/client.js";
8
+
9
+ /**
10
+ * Props for the <TokenProvider /> component
11
+ * @component
12
+ * @token
13
+ */
14
+ export type TokenProviderProps = {
15
+ /**
16
+ * The token (ERC20) contract address
17
+ */
18
+ address: Address;
19
+ /**
20
+ * thirdweb Client
21
+ */
22
+ client: ThirdwebClient;
23
+ /**
24
+ * The chain (network) that the token is on
25
+ */
26
+ chain: Chain;
27
+ };
28
+
29
+ const TokenProviderContext = /* @__PURE__ */ createContext<
30
+ TokenProviderProps | undefined
31
+ >(undefined);
32
+
33
+ /**
34
+ * A React context provider component that supplies Token-related data to its child components.
35
+ *
36
+ * This component serves as a wrapper around the `TokenProviderContext.Provider` and passes
37
+ * the provided token data down to all of its child components through the context API.
38
+ *
39
+ * @example
40
+ * ### Basic usage
41
+ * ```tsx
42
+ * import { TokenProvider, TokenIcon, TokenName } from "thirdweb/react";
43
+ * import { ethereum } from "thirdweb/chains";
44
+ *
45
+ * <TokenProvider address="0x..." client={...} chain={ethereum}>
46
+ * <TokenIcon />
47
+ * <TokenName />
48
+ * </TokenProvider>
49
+ * ```
50
+ *
51
+ * ### This component also works with native token!
52
+ * ```tsx
53
+ * import { NATIVE_TOKEN_ADDRESS} from "thirdweb";
54
+ * import { ethereum } from "thirdweb/chains";
55
+ *
56
+ * <TokenProvider address={NATIVE_TOKEN_ADDRESS} chain={ethereum} client={client}>
57
+ * <TokenSymbol /> // "ETH"
58
+ * </TokenProvider>
59
+ * ```
60
+ *
61
+ * @component
62
+ * @token
63
+ * @beta
64
+ */
65
+ export function TokenProvider(
66
+ props: React.PropsWithChildren<TokenProviderProps>,
67
+ ) {
68
+ return (
69
+ <TokenProviderContext.Provider value={props}>
70
+ {props.children}
71
+ </TokenProviderContext.Provider>
72
+ );
73
+ }
74
+
75
+ /**
76
+ * @internal
77
+ */
78
+ export function useTokenContext() {
79
+ const ctx = useContext(TokenProviderContext);
80
+ if (!ctx) {
81
+ throw new Error(
82
+ "TokenProviderContext not found. Make sure you are using TokenName, TokenIcon, TokenSymbol etc. inside a <TokenProvider /> component",
83
+ );
84
+ }
85
+ return ctx;
86
+ }