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,175 @@
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 {
7
+ type ResolveNameOptions,
8
+ resolveName,
9
+ } from "../../../../../extensions/ens/resolve-name.js";
10
+ import { getSocialProfiles } from "../../../../../social/profiles.js";
11
+ import type { SocialProfile } from "../../../../../social/types.js";
12
+ import { useAccountContext } from "./provider.js";
13
+
14
+ /**
15
+ * Props for the AccountName component
16
+ * @component
17
+ * @account
18
+ */
19
+ export interface AccountNameProps
20
+ extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children">,
21
+ Omit<ResolveNameOptions, "client" | "address"> {
22
+ /**
23
+ * A function used to transform (format) the name of the account.
24
+ * it should take in a string and output a string.
25
+ *
26
+ * This function is particularly useful
27
+ */
28
+ formatFn?: (str: string) => string;
29
+ /**
30
+ * Use this prop to prioritize the social profile that you want to display
31
+ * This is useful for a wallet containing multiple social profiles
32
+ */
33
+ socialType?: SocialProfile["type"];
34
+ /**
35
+ * This component will be shown while the name of the account is being fetched
36
+ * If not passed, the component will return `null`.
37
+ *
38
+ * You can pass a loading sign or spinner to this prop.
39
+ * @example
40
+ * ```tsx
41
+ * <AccountName loadingComponent={<Spinner />} />
42
+ * ```
43
+ */
44
+ loadingComponent?: JSX.Element;
45
+ /**
46
+ * This component will be shown if the request for fetching the name is done but could not retreive any result.
47
+ * You can pass the wallet address as the fallback option if that's the case.
48
+ *
49
+ * If not passed, the component will return `null`
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * <AccountName fallbackComponent={"0x1234....3f3f"} />
54
+ * ```
55
+ */
56
+ fallbackComponent?: JSX.Element;
57
+ /**
58
+ * Optional `useQuery` params
59
+ */
60
+ queryOptions?: Omit<UseQueryOptions<string>, "queryKey" | "queryFn">;
61
+ }
62
+
63
+ /**
64
+ * This component is used to display the name of the account.
65
+ * A "name" in this context is the username, or account of the social profiles that the wallet may have.
66
+ * In case a name is not found or failed to resolve, you can always fallback to displaying the wallet address instead by using the `fallbackComponent` prop.
67
+ *
68
+ * This component inherits all attribute of a native HTML <span> element, so you can style it just like how you would style a <span>.
69
+ *
70
+ * @param props
71
+ * @returns A `<span>` containing the name of the account
72
+ * ```html
73
+ * <span>{name}</span>
74
+ * ```
75
+ *
76
+ * @example
77
+ * ### Basic usage
78
+ * ```tsx
79
+ * import { AccountProvider, AccountName } from "thirdweb/react";
80
+ *
81
+ * <AccountProvider address="0x1234...3f3f" client={client}>
82
+ * <AccountName />
83
+ * </AccountProvider>
84
+ * ```
85
+ *
86
+ * ### Show wallet address while social name is being loaded
87
+ * ```tsx
88
+ * <AccountName
89
+ * loadingComponent={<AccountAddress />}
90
+ * />
91
+ * ```
92
+ *
93
+ *
94
+ * ### Fallback to showing wallet address if fail to resolve social name
95
+ * ```tsx
96
+ * <AccountName
97
+ * fallbackComponent={<AccountAddress />}
98
+ * />
99
+ * ```
100
+ *
101
+ * ### Transform the account name using `formatFn` prop
102
+ * ```tsx
103
+ * import { isAddress, shortenAddress } from "thirdweb/utils";
104
+ * import { AccountProvider, AccountName } from "thirdweb/react";
105
+ *
106
+ * // Let's say we want the name to be capitalized without using CSS
107
+ * const formatName = (name: string) => name.toUpperCase();
108
+ *
109
+ * return <AccountName formatFn={formatName} />
110
+ * ```
111
+ *
112
+ *
113
+ * ### Custom query options for useQuery
114
+ * This component uses `@tanstack-query`'s useQuery internally.
115
+ * You can use the `queryOptions` prop for more fine-grained control
116
+ * ```tsx
117
+ * <AccountName
118
+ * queryOptions={{
119
+ * enabled: isEnabled,
120
+ * retry: 3
121
+ * }}
122
+ * />
123
+ * ```
124
+ *
125
+ * @component
126
+ * @account
127
+ * @beta
128
+ */
129
+ export function AccountName({
130
+ resolverAddress,
131
+ resolverChain,
132
+ socialType,
133
+ formatFn,
134
+ queryOptions,
135
+ loadingComponent,
136
+ fallbackComponent,
137
+ ...restProps
138
+ }: AccountNameProps) {
139
+ const { address, client } = useAccountContext();
140
+ const nameQuery = useQuery({
141
+ queryKey: ["account-name", address],
142
+ queryFn: async () => {
143
+ const [socialData, ensName] = await Promise.all([
144
+ getSocialProfiles({ address, client }),
145
+ resolveName({
146
+ client,
147
+ address,
148
+ resolverAddress,
149
+ resolverChain,
150
+ }),
151
+ ]);
152
+
153
+ const name =
154
+ socialData?.filter(
155
+ (p) => p.name && (socialType ? p.type === socialType : true),
156
+ )[0]?.name || ensName;
157
+
158
+ if (!name) {
159
+ throw new Error("Failed to resolve account name");
160
+ }
161
+ return formatFn ? formatFn(name) : name;
162
+ },
163
+ ...queryOptions,
164
+ });
165
+
166
+ if (nameQuery.isLoading) {
167
+ return loadingComponent || null;
168
+ }
169
+
170
+ if (!nameQuery.data) {
171
+ return fallbackComponent || null;
172
+ }
173
+
174
+ return <span {...restProps}>{nameQuery.data}</span>;
175
+ }
@@ -0,0 +1,38 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { render, screen } from "~test/react-render.js";
3
+ import { TEST_CLIENT } from "~test/test-clients.js";
4
+ import { AccountAddress } from "./address.js";
5
+ import { AccountProvider } from "./provider.js";
6
+
7
+ describe.runIf(process.env.TW_SECRET_KEY)("AccountProvider component", () => {
8
+ it("should render children correctly", () => {
9
+ render(
10
+ <AccountProvider
11
+ address="0x12345674b599ce99958242b3D3741e7b01841DF3"
12
+ client={TEST_CLIENT}
13
+ >
14
+ <div>Child Component</div>
15
+ </AccountProvider>,
16
+ );
17
+
18
+ expect(screen.getByText("Child Component")).toBeInTheDocument();
19
+ });
20
+
21
+ it("should pass the address correctly to the children props", () => {
22
+ render(
23
+ <AccountProvider
24
+ address="0x12345674b599ce99958242b3D3741e7b01841DF3"
25
+ client={TEST_CLIENT}
26
+ >
27
+ <AccountAddress />
28
+ </AccountProvider>,
29
+ );
30
+
31
+ expect(
32
+ screen.getByText("0x12345674b599ce99958242b3D3741e7b01841DF3", {
33
+ exact: true,
34
+ selector: "span",
35
+ }),
36
+ ).toBeInTheDocument();
37
+ });
38
+ });
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import type { Address } from "abitype";
3
+ import type React from "react";
4
+ import { createContext, useContext } from "react";
5
+ import type { ThirdwebClient } from "../../../../../client/client.js";
6
+
7
+ /**
8
+ * Props for the <AccountProvider /> component
9
+ * @component
10
+ * @account
11
+ */
12
+ export type AccountProviderProps = {
13
+ /**
14
+ * The user's wallet address
15
+ */
16
+ address: Address;
17
+ /**
18
+ * thirdweb Client
19
+ */
20
+ client: ThirdwebClient;
21
+ };
22
+
23
+ const AccountProviderContext = /* @__PURE__ */ createContext<
24
+ AccountProviderProps | undefined
25
+ >(undefined);
26
+
27
+ /**
28
+ * A React context provider component that supplies Account-related data to its child components.
29
+ *
30
+ * This component serves as a wrapper around the `AccountProviderContext.Provider` and passes
31
+ * the provided account data down to all of its child components through the context API.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * import { AccountProvider, AccountAvatar, AccountName, AccountAddress } from "thirdweb/react";
36
+ *
37
+ * <AccountProvider>
38
+ * <AccountAvatar />
39
+ * <AccountName />
40
+ * <AccountAddress />
41
+ * </AccountProvider>
42
+ * ```
43
+ *
44
+ * @component
45
+ * @account
46
+ * @beta
47
+ */
48
+ export function AccountProvider(
49
+ props: React.PropsWithChildren<AccountProviderProps>,
50
+ ) {
51
+ return (
52
+ <AccountProviderContext.Provider value={props}>
53
+ {props.children}
54
+ </AccountProviderContext.Provider>
55
+ );
56
+ }
57
+
58
+ /**
59
+ * @internal
60
+ */
61
+ export function useAccountContext() {
62
+ const ctx = useContext(AccountProviderContext);
63
+ if (!ctx) {
64
+ throw new Error(
65
+ "AccountProviderContext not found. Make sure you are using AccountName, AccountAvatar, etc. inside an <AccountProvider /> component",
66
+ );
67
+ }
68
+ return ctx;
69
+ }
@@ -2,7 +2,10 @@ import { useContext } from "react";
2
2
  import { describe, expect, it } from "vitest";
3
3
  import { render, screen, waitFor } from "~test/react-render.js";
4
4
  import { DOODLES_CONTRACT } from "~test/test-contracts.js";
5
- import { NFT, NFTProviderContext, getNFTInfo } from "./NFT.js";
5
+ import { getNFTInfo } from "./hooks.js";
6
+ import { NFTMedia } from "./media.js";
7
+ import { NFTName } from "./name.js";
8
+ import { NFTProvider, NFTProviderContext } from "./provider.js";
6
9
 
7
10
  describe.runIf(process.env.TW_SECRET_KEY)("NFT prebuilt component", () => {
8
11
  it("should fetch the NFT metadata", async () => {
@@ -42,9 +45,9 @@ describe.runIf(process.env.TW_SECRET_KEY)("NFT prebuilt component", () => {
42
45
 
43
46
  it("should render children correctly", () => {
44
47
  render(
45
- <NFT contract={DOODLES_CONTRACT} tokenId={0n}>
48
+ <NFTProvider contract={DOODLES_CONTRACT} tokenId={0n}>
46
49
  <div>Child Component</div>
47
- </NFT>,
50
+ </NFTProvider>,
48
51
  );
49
52
 
50
53
  expect(screen.getByText("Child Component")).toBeInTheDocument();
@@ -64,9 +67,9 @@ describe.runIf(process.env.TW_SECRET_KEY)("NFT prebuilt component", () => {
64
67
  );
65
68
  }
66
69
  render(
67
- <NFT contract={DOODLES_CONTRACT} tokenId={0n}>
70
+ <NFTProvider contract={DOODLES_CONTRACT} tokenId={0n}>
68
71
  <NFTConsumer />
69
- </NFT>,
72
+ </NFTProvider>,
70
73
  );
71
74
 
72
75
  expect(screen.getByText(/Contract:/)).toBeInTheDocument();
@@ -75,9 +78,9 @@ describe.runIf(process.env.TW_SECRET_KEY)("NFT prebuilt component", () => {
75
78
 
76
79
  it("should render the NFT image", () => {
77
80
  render(
78
- <NFT contract={DOODLES_CONTRACT} tokenId={0n}>
79
- <NFT.Media />
80
- </NFT>,
81
+ <NFTProvider contract={DOODLES_CONTRACT} tokenId={0n}>
82
+ <NFTMedia />
83
+ </NFTProvider>,
81
84
  );
82
85
 
83
86
  waitFor(() => expect(screen.getByRole("img")).toBeInTheDocument());
@@ -85,9 +88,9 @@ describe.runIf(process.env.TW_SECRET_KEY)("NFT prebuilt component", () => {
85
88
 
86
89
  it("should render the NFT name", () => {
87
90
  render(
88
- <NFT contract={DOODLES_CONTRACT} tokenId={1n}>
89
- <NFT.Name />
90
- </NFT>,
91
+ <NFTProvider contract={DOODLES_CONTRACT} tokenId={1n}>
92
+ <NFTName />
93
+ </NFTProvider>,
91
94
  );
92
95
 
93
96
  waitFor(() => expect(screen.getByText("Doodle #1")).toBeInTheDocument());
@@ -95,9 +98,9 @@ describe.runIf(process.env.TW_SECRET_KEY)("NFT prebuilt component", () => {
95
98
 
96
99
  it("should render the NFT description", () => {
97
100
  render(
98
- <NFT contract={DOODLES_CONTRACT} tokenId={1n}>
99
- <NFT.Name />
100
- </NFT>,
101
+ <NFTProvider contract={DOODLES_CONTRACT} tokenId={1n}>
102
+ <NFTName />
103
+ </NFTProvider>,
101
104
  );
102
105
 
103
106
  waitFor(() =>
@@ -0,0 +1,87 @@
1
+ "use client";
2
+
3
+ import type { UseQueryOptions } from "@tanstack/react-query";
4
+ import type { JSX } from "react";
5
+ import type { NFT } from "../../../../../utils/nft/parseNft.js";
6
+ import { useNftInfo } from "./hooks.js";
7
+ import { useNFTContext } from "./provider.js";
8
+
9
+ export interface NFTDescriptionProps
10
+ extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
11
+ loadingComponent?: JSX.Element;
12
+ fallbackComponent?: JSX.Element;
13
+ /**
14
+ * Optional `useQuery` params
15
+ */
16
+ queryOptions?: Omit<UseQueryOptions<NFT>, "queryFn" | "queryKey">;
17
+ }
18
+
19
+ /**
20
+ * This component fetches and displays an NFT's description. It inherits all the attributes of a <span>
21
+ * so you can style it just like how you would style a <span> element.
22
+ * @returns A <span> element containing the description of the NFT
23
+ *
24
+ * @example
25
+ * ### Basic usage
26
+ * ```tsx
27
+ * import { NFTProvider, NFTDescription } from "thirdweb/react";
28
+ *
29
+ * <NFTProvider>
30
+ * <NFTDescription />
31
+ * </NFTProvider>
32
+ * ```
33
+ *
34
+ * ### Show a loading sign while the description is being fetched
35
+ * ```tsx
36
+ * import { NFTProvider, NFTDescription } from "thirdweb/react";
37
+ *
38
+ * <NFTProvider>
39
+ * <NFTDescription loadingComponent={<YourLoadingSign />} />
40
+ * </NFTProvider>
41
+ * ```
42
+ *
43
+ * ### Show something in case the description failed to resolve
44
+ * ```tsx
45
+ * import { NFTProvider, NFTDescription } from "thirdweb/react";
46
+ *
47
+ * <NFTProvider>
48
+ * <NFTDescription fallbackComponent={<span>Failed to load description</span>} />
49
+ * </NFTProvider>
50
+ * ```
51
+ *
52
+ * ### Custom query options for useQuery (tanstack-query)
53
+ * ```tsx
54
+ * import { NFTProvider, NFTDescription } from "thirdweb/react";
55
+ *
56
+ * <NFTProvider>
57
+ * <NFTDescription queryOptions={{ retry: 3, enabled: false, }} />
58
+ * </NFTProvider>
59
+ * ```
60
+ *
61
+ * @component
62
+ * @nft
63
+ * @beta
64
+ */
65
+ export function NFTDescription({
66
+ loadingComponent,
67
+ fallbackComponent,
68
+ queryOptions,
69
+ ...restProps
70
+ }: NFTDescriptionProps) {
71
+ const { contract, tokenId } = useNFTContext();
72
+ const nftQuery = useNftInfo({
73
+ contract,
74
+ tokenId,
75
+ queryOptions,
76
+ });
77
+
78
+ if (nftQuery.isLoading) {
79
+ return loadingComponent || null;
80
+ }
81
+
82
+ if (!nftQuery.data?.metadata?.description) {
83
+ return fallbackComponent || null;
84
+ }
85
+
86
+ return <span {...restProps}>{nftQuery.data.metadata.description}</span>;
87
+ }
@@ -0,0 +1,53 @@
1
+ import { type UseQueryOptions, useQuery } from "@tanstack/react-query";
2
+ import { getNFT as getNFT721 } from "../../../../../extensions/erc721/read/getNFT.js";
3
+ import { getNFT as getNFT1155 } from "../../../../../extensions/erc1155/read/getNFT.js";
4
+ import type { NFT } from "../../../../../utils/nft/parseNft.js";
5
+ import type { NFTProviderProps } from "./provider.js";
6
+
7
+ /**
8
+ * @internal Only used for the NFT prebuilt components
9
+ */
10
+ export function useNftInfo(
11
+ props: NFTProviderProps & {
12
+ queryOptions?: Omit<UseQueryOptions<NFT>, "queryFn" | "queryKey">;
13
+ },
14
+ ) {
15
+ return useQuery({
16
+ queryKey: [
17
+ "__nft_component_internal__",
18
+ props.contract.chain.id,
19
+ props.contract.address,
20
+ props.tokenId.toString(),
21
+ ],
22
+ queryFn: () =>
23
+ getNFTInfo({ contract: props.contract, tokenId: props.tokenId }),
24
+ ...props.queryOptions,
25
+ });
26
+ }
27
+
28
+ /**
29
+ * @internal
30
+ */
31
+ export async function getNFTInfo(options: NFTProviderProps): Promise<NFT> {
32
+ const nft = await Promise.allSettled([
33
+ getNFT721(options),
34
+ getNFT1155(options),
35
+ ]).then(([possibleNFT721, possibleNFT1155]) => {
36
+ // getNFT extension always return an NFT object
37
+ // so we need to check if the tokenURI exists
38
+ if (
39
+ possibleNFT721.status === "fulfilled" &&
40
+ possibleNFT721.value.tokenURI
41
+ ) {
42
+ return possibleNFT721.value;
43
+ }
44
+ if (
45
+ possibleNFT1155.status === "fulfilled" &&
46
+ possibleNFT1155.value.tokenURI
47
+ ) {
48
+ return possibleNFT1155.value;
49
+ }
50
+ throw new Error("Failed to load NFT metadata");
51
+ });
52
+ return nft;
53
+ }
@@ -0,0 +1,119 @@
1
+ import type { UseQueryOptions } from "@tanstack/react-query";
2
+ import type { JSX } from "react";
3
+ import type { NFT } from "../../../../../utils/nft/parseNft.js";
4
+ import { MediaRenderer } from "../../MediaRenderer/MediaRenderer.js";
5
+ import type { MediaRendererProps } from "../../MediaRenderer/types.js";
6
+ import { useNftInfo } from "./hooks.js";
7
+ import { useNFTContext } from "./provider.js";
8
+
9
+ /**
10
+ * @component
11
+ * The props for the <NFTMedia /> component
12
+ * It is similar to the [`MediaRendererProps`](https://portal.thirdweb.com/references/typescript/v5/MediaRendererProps)
13
+ * (excluding `src`, `poster` and `client`) that you can
14
+ * use to style the NFTMedia
15
+ */
16
+ export type NFTMediaProps = Omit<
17
+ MediaRendererProps,
18
+ "src" | "poster" | "client"
19
+ > & {
20
+ loadingComponent?: JSX.Element;
21
+ fallbackComponent?: JSX.Element;
22
+ /**
23
+ * Optional `useQuery` params
24
+ */
25
+ queryOptions?: Omit<UseQueryOptions<NFT>, "queryFn" | "queryKey">;
26
+ };
27
+
28
+ /**
29
+ * This component fetches and displays an NFT's media. It uses thirdweb [`MediaRenderer`](https://portal.thirdweb.com/refernces/typescript/v5/MediaRenderer) under the hood
30
+ * so you can style it just like how you would style a MediaRenderer.
31
+ * @returns A MediaRenderer component
32
+ *
33
+ * @component
34
+ *
35
+ * @example
36
+ * ### Basic usage
37
+ * ```tsx
38
+ * import { NFTProvider, NFTMedia } from "thirdweb/react";
39
+ *
40
+ * <NFTProvider>
41
+ * <NFTMedia />
42
+ * </NFTProvider>
43
+ * ```
44
+ *
45
+ * ### Show a loading sign while the media is being fetched
46
+ * ```tsx
47
+ * import { NFTProvider, NFTMedia } from "thirdweb/react";
48
+ *
49
+ * <NFTProvider>
50
+ * <NFTMedia loadingComponent={<YourLoadingSign />} />
51
+ * </NFTProvider>
52
+ * ```
53
+ *
54
+ * ### Show something in case the media failed to resolve
55
+ * ```tsx
56
+ * import { NFTProvider, NFTMedia } from "thirdweb/react";
57
+ *
58
+ * <NFTProvider>
59
+ * <NFTMedia fallbackComponent={<span>Failed to load media</span>} />
60
+ * </NFTProvider>
61
+ * ```
62
+ *
63
+ * ### Custom query options for useQuery (tanstack-query)
64
+ * ```tsx
65
+ * import { NFTProvider, NFTMedia } from "thirdweb/react";
66
+ *
67
+ * <NFTProvider>
68
+ * <NFTMedia queryOptions={{ retry: 3, enabled: false, }} />
69
+ * </NFTProvider>
70
+ * ```
71
+ *
72
+ * ### Basic stylings
73
+ *
74
+ * You can style NFTMedia with the `style` and `className` props.
75
+ *
76
+ * ```tsx
77
+ * <NFTMedia style={{ borderRadius: "8px" }} className="mx-auto" />
78
+ * ```
79
+ * @nft
80
+ * @beta
81
+ */
82
+ export function NFTMedia({
83
+ loadingComponent,
84
+ fallbackComponent,
85
+ queryOptions,
86
+ ...mediaRendererProps
87
+ }: NFTMediaProps) {
88
+ const { contract, tokenId } = useNFTContext();
89
+ const nftQuery = useNftInfo({
90
+ contract,
91
+ tokenId,
92
+ queryOptions,
93
+ });
94
+
95
+ if (nftQuery.isLoading) {
96
+ return loadingComponent || null;
97
+ }
98
+
99
+ if (!nftQuery.data) {
100
+ return fallbackComponent || null;
101
+ }
102
+
103
+ const animation_url = nftQuery.data.metadata.animation_url;
104
+ const image =
105
+ nftQuery.data.metadata.image || nftQuery.data.metadata.image_url;
106
+
107
+ if (!animation_url && !image) {
108
+ return fallbackComponent || null;
109
+ }
110
+
111
+ return (
112
+ <MediaRenderer
113
+ client={contract.client}
114
+ src={animation_url || image}
115
+ poster={image}
116
+ {...mediaRendererProps}
117
+ />
118
+ );
119
+ }
@@ -0,0 +1,85 @@
1
+ import type { UseQueryOptions } from "@tanstack/react-query";
2
+ import type { JSX } from "react";
3
+ import type { NFT } from "../../../../../utils/nft/parseNft.js";
4
+ import { useNftInfo } from "./hooks.js";
5
+ import { useNFTContext } from "./provider.js";
6
+
7
+ export interface NFTNameProps
8
+ extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
9
+ loadingComponent?: JSX.Element;
10
+ fallbackComponent?: JSX.Element;
11
+ /**
12
+ * Optional `useQuery` params
13
+ */
14
+ queryOptions?: Omit<UseQueryOptions<NFT>, "queryFn" | "queryKey">;
15
+ }
16
+
17
+ /**
18
+ * This component fetches and displays an NFT's name. It takes in a `className` and `style` props
19
+ * so you can style it just like how you would style a <span> element.
20
+ * @returns A <span> element containing the name of the NFT
21
+ *
22
+ * @component
23
+ * @example
24
+ * ### Basic usage
25
+ * ```tsx
26
+ * import { NFTProvider, NFTName } from "thirdweb/react";
27
+ *
28
+ * <NFTProvider>
29
+ * <NFTName />
30
+ * </NFTProvider>
31
+ * ```
32
+ *
33
+ * ### Show a loading sign while the name is being fetched
34
+ * ```tsx
35
+ * import { NFTProvider, NFTName } from "thirdweb/react";
36
+ *
37
+ * <NFTProvider>
38
+ * <NFTName loadingComponent={<YourLoadingSign />} />
39
+ * </NFTProvider>
40
+ * ```
41
+ *
42
+ * ### Show something in case the name failed to resolve
43
+ * ```tsx
44
+ * import { NFTProvider, NFTName } from "thirdweb/react";
45
+ *
46
+ * <NFTProvider>
47
+ * <NFTName fallbackComponent={<span>Failed to load name</span>} />
48
+ * </NFTProvider>
49
+ * ```
50
+ *
51
+ * ### Custom query options for useQuery (tanstack-query)
52
+ * ```tsx
53
+ * import { NFTProvider, NFTName } from "thirdweb/react";
54
+ *
55
+ * <NFTProvider>
56
+ * <NFTName queryOptions={{ retry: 3, enabled: false, }} />
57
+ * </NFTProvider>
58
+ * ```
59
+ *
60
+ * @nft
61
+ * @beta
62
+ */
63
+ export function NFTName({
64
+ loadingComponent,
65
+ fallbackComponent,
66
+ queryOptions,
67
+ ...restProps
68
+ }: NFTNameProps) {
69
+ const { contract, tokenId } = useNFTContext();
70
+
71
+ const nftQuery = useNftInfo({
72
+ contract,
73
+ tokenId,
74
+ queryOptions,
75
+ });
76
+
77
+ if (nftQuery.isLoading) {
78
+ return loadingComponent || null;
79
+ }
80
+
81
+ if (!nftQuery.data?.metadata?.name) {
82
+ return fallbackComponent || null;
83
+ }
84
+ return <span {...restProps}>{nftQuery.data.metadata.name}</span>;
85
+ }