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.
- package/dist/cjs/client/client.js +1 -0
- package/dist/cjs/client/client.js.map +1 -1
- package/dist/cjs/exports/react.js +32 -3
- package/dist/cjs/exports/react.js.map +1 -1
- package/dist/cjs/extensions/erc721/lazyMinting/read/getBatchesToReveal.js +1 -1
- package/dist/cjs/extensions/modules/common/checkModulesCompatibility.js +5 -0
- package/dist/cjs/extensions/modules/common/checkModulesCompatibility.js.map +1 -1
- package/dist/cjs/extensions/prebuilts/deploy-pack.js +1 -0
- package/dist/cjs/extensions/prebuilts/deploy-pack.js.map +1 -1
- package/dist/cjs/extensions/thirdweb/write/publish.js +4 -0
- package/dist/cjs/extensions/thirdweb/write/publish.js.map +1 -1
- package/dist/cjs/react/core/hooks/others/useChainQuery.js +3 -3
- package/dist/cjs/react/core/hooks/rpc/useBlockNumber.js +1 -1
- package/dist/cjs/react/core/hooks/wallets/useCapabilities.js +1 -1
- package/dist/cjs/react/core/hooks/wallets/useSendCalls.js +3 -3
- package/dist/cjs/react/core/providers/connection-manager.js +3 -0
- package/dist/cjs/react/core/providers/connection-manager.js.map +1 -1
- package/dist/cjs/react/core/utils/wallet.js +2 -1
- package/dist/cjs/react/core/utils/wallet.js.map +1 -1
- package/dist/cjs/react/core/utils/walletIcon.js +2 -0
- package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
- package/dist/cjs/react/native/hooks/wallets/useProfiles.js +1 -1
- package/dist/cjs/react/native/providers/thirdweb-provider.js +1 -0
- package/dist/cjs/react/native/providers/thirdweb-provider.js.map +1 -1
- package/dist/cjs/react/native/ui/AutoConnect/AutoConnect.js +1 -0
- package/dist/cjs/react/native/ui/AutoConnect/AutoConnect.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/ConnectModal.js +1 -0
- package/dist/cjs/react/native/ui/connect/ConnectModal.js.map +1 -1
- package/dist/cjs/react/native/ui/transaction/TransactionButton.js +1 -0
- package/dist/cjs/react/native/ui/transaction/TransactionButton.js.map +1 -1
- package/dist/cjs/react/web/hooks/wallets/useProfiles.js +1 -1
- package/dist/cjs/react/web/providers/thirdweb-provider.js +1 -0
- package/dist/cjs/react/web/providers/thirdweb-provider.js.map +1 -1
- package/dist/cjs/react/web/ui/AutoConnect/AutoConnect.js +1 -0
- package/dist/cjs/react/web/ui/AutoConnect/AutoConnect.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Blobbie.js +19 -4
- package/dist/cjs/react/web/ui/ConnectWallet/Blobbie.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js +21 -19
- package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Details.js +18 -13
- package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +1 -0
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
- package/dist/cjs/react/web/ui/PayEmbed.js +1 -0
- package/dist/cjs/react/web/ui/PayEmbed.js.map +1 -1
- package/dist/cjs/react/web/ui/SiteEmbed.js +3 -2
- package/dist/cjs/react/web/ui/SiteEmbed.js.map +1 -1
- package/dist/cjs/react/web/ui/SiteLink.js +2 -1
- package/dist/cjs/react/web/ui/SiteLink.js.map +1 -1
- package/dist/cjs/react/web/ui/TransactionButton/index.js +1 -0
- package/dist/cjs/react/web/ui/TransactionButton/index.js.map +1 -1
- package/dist/cjs/react/web/ui/prebuilt/Account/address.js +49 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/address.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/avatar.js +144 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/avatar.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/balance.js +122 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/balance.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/blobbie.js +16 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/blobbie.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/name.js +106 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/name.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/provider.js +43 -0
- package/dist/cjs/react/web/ui/prebuilt/Account/provider.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/description.js +69 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/description.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/hooks.js +45 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/hooks.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/media.js +82 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/media.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/name.js +68 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/name.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/provider.js +55 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/provider.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/icon.js +113 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/icon.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/name.js +137 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/name.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/provider.js +54 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/provider.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/symbol.js +134 -0
- package/dist/cjs/react/web/ui/prebuilt/Token/symbol.js.map +1 -0
- package/dist/cjs/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js +1 -0
- package/dist/cjs/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js.map +1 -1
- package/dist/cjs/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js +1 -0
- package/dist/cjs/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js.map +1 -1
- package/dist/cjs/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js +1 -0
- package/dist/cjs/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js.map +1 -1
- package/dist/cjs/storage/unpin.js +1 -1
- package/dist/cjs/storage/upload.js +1 -0
- package/dist/cjs/storage/upload.js.map +1 -1
- package/dist/cjs/transaction/actions/to-serializable-transaction.js +1 -1
- package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js +5 -0
- package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
- package/dist/cjs/utils/any-evm/zksync/isZkSyncChain.js +5 -0
- package/dist/cjs/utils/any-evm/zksync/isZkSyncChain.js.map +1 -1
- package/dist/cjs/utils/config.js +9 -0
- package/dist/cjs/utils/config.js.map +1 -1
- package/dist/cjs/utils/json.js +7 -4
- package/dist/cjs/utils/json.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/eip5792/get-calls-status.js +1 -1
- package/dist/cjs/wallets/eip5792/get-capabilities.js +1 -1
- package/dist/cjs/wallets/eip5792/send-calls.js +2 -2
- package/dist/cjs/wallets/eip5792/wait-for-bundle.js +1 -1
- package/dist/cjs/wallets/in-app/core/users/getUser.js +1 -1
- package/dist/cjs/wallets/smart/smart-wallet.js +1 -0
- package/dist/cjs/wallets/smart/smart-wallet.js.map +1 -1
- package/dist/esm/client/client.js +1 -0
- package/dist/esm/client/client.js.map +1 -1
- package/dist/esm/exports/react.js +17 -1
- package/dist/esm/exports/react.js.map +1 -1
- package/dist/esm/extensions/erc721/lazyMinting/read/getBatchesToReveal.js +1 -1
- package/dist/esm/extensions/modules/common/checkModulesCompatibility.js +5 -0
- package/dist/esm/extensions/modules/common/checkModulesCompatibility.js.map +1 -1
- package/dist/esm/extensions/prebuilts/deploy-pack.js +1 -0
- package/dist/esm/extensions/prebuilts/deploy-pack.js.map +1 -1
- package/dist/esm/extensions/thirdweb/write/publish.js +4 -0
- package/dist/esm/extensions/thirdweb/write/publish.js.map +1 -1
- package/dist/esm/react/core/hooks/others/useChainQuery.js +3 -3
- package/dist/esm/react/core/hooks/rpc/useBlockNumber.js +1 -1
- package/dist/esm/react/core/hooks/wallets/useCapabilities.js +1 -1
- package/dist/esm/react/core/hooks/wallets/useSendCalls.js +3 -3
- package/dist/esm/react/core/providers/connection-manager.js +3 -0
- package/dist/esm/react/core/providers/connection-manager.js.map +1 -1
- package/dist/esm/react/core/utils/wallet.js +2 -1
- package/dist/esm/react/core/utils/wallet.js.map +1 -1
- package/dist/esm/react/core/utils/walletIcon.js +2 -0
- package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
- package/dist/esm/react/native/hooks/wallets/useProfiles.js +1 -1
- package/dist/esm/react/native/providers/thirdweb-provider.js +1 -0
- package/dist/esm/react/native/providers/thirdweb-provider.js.map +1 -1
- package/dist/esm/react/native/ui/AutoConnect/AutoConnect.js +1 -0
- package/dist/esm/react/native/ui/AutoConnect/AutoConnect.js.map +1 -1
- package/dist/esm/react/native/ui/connect/ConnectModal.js +1 -0
- package/dist/esm/react/native/ui/connect/ConnectModal.js.map +1 -1
- package/dist/esm/react/native/ui/transaction/TransactionButton.js +1 -0
- package/dist/esm/react/native/ui/transaction/TransactionButton.js.map +1 -1
- package/dist/esm/react/web/hooks/wallets/useProfiles.js +1 -1
- package/dist/esm/react/web/providers/thirdweb-provider.js +1 -0
- package/dist/esm/react/web/providers/thirdweb-provider.js.map +1 -1
- package/dist/esm/react/web/ui/AutoConnect/AutoConnect.js +1 -0
- package/dist/esm/react/web/ui/AutoConnect/AutoConnect.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Blobbie.js +19 -4
- package/dist/esm/react/web/ui/ConnectWallet/Blobbie.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js +21 -19
- package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Details.js +19 -14
- package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +1 -0
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
- package/dist/esm/react/web/ui/PayEmbed.js +1 -0
- package/dist/esm/react/web/ui/PayEmbed.js.map +1 -1
- package/dist/esm/react/web/ui/SiteEmbed.js +3 -2
- package/dist/esm/react/web/ui/SiteEmbed.js.map +1 -1
- package/dist/esm/react/web/ui/SiteLink.js +2 -1
- package/dist/esm/react/web/ui/SiteLink.js.map +1 -1
- package/dist/esm/react/web/ui/TransactionButton/index.js +1 -0
- package/dist/esm/react/web/ui/TransactionButton/index.js.map +1 -1
- package/dist/esm/react/web/ui/prebuilt/Account/address.js +46 -0
- package/dist/esm/react/web/ui/prebuilt/Account/address.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Account/avatar.js +141 -0
- package/dist/esm/react/web/ui/prebuilt/Account/avatar.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Account/balance.js +119 -0
- package/dist/esm/react/web/ui/prebuilt/Account/balance.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Account/blobbie.js +13 -0
- package/dist/esm/react/web/ui/prebuilt/Account/blobbie.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Account/name.js +103 -0
- package/dist/esm/react/web/ui/prebuilt/Account/name.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Account/provider.js +39 -0
- package/dist/esm/react/web/ui/prebuilt/Account/provider.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/description.js +66 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/description.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/hooks.js +41 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/hooks.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/media.js +79 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/media.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/name.js +65 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/name.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/provider.js +50 -0
- package/dist/esm/react/web/ui/prebuilt/NFT/provider.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Token/icon.js +110 -0
- package/dist/esm/react/web/ui/prebuilt/Token/icon.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Token/name.js +134 -0
- package/dist/esm/react/web/ui/prebuilt/Token/name.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Token/provider.js +50 -0
- package/dist/esm/react/web/ui/prebuilt/Token/provider.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/Token/symbol.js +131 -0
- package/dist/esm/react/web/ui/prebuilt/Token/symbol.js.map +1 -0
- package/dist/esm/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js +1 -0
- package/dist/esm/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.js.map +1 -1
- package/dist/esm/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js +1 -0
- package/dist/esm/react/web/ui/prebuilt/thirdweb/ClaimButton/index.js.map +1 -1
- package/dist/esm/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js +1 -0
- package/dist/esm/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.js.map +1 -1
- package/dist/esm/storage/unpin.js +1 -1
- package/dist/esm/storage/upload.js +1 -0
- package/dist/esm/storage/upload.js.map +1 -1
- package/dist/esm/transaction/actions/to-serializable-transaction.js +1 -1
- package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js +5 -0
- package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
- package/dist/esm/utils/any-evm/zksync/isZkSyncChain.js +5 -0
- package/dist/esm/utils/any-evm/zksync/isZkSyncChain.js.map +1 -1
- package/dist/esm/utils/config.js +9 -0
- package/dist/esm/utils/config.js.map +1 -1
- package/dist/esm/utils/json.js +6 -2
- package/dist/esm/utils/json.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/eip5792/get-calls-status.js +1 -1
- package/dist/esm/wallets/eip5792/get-capabilities.js +1 -1
- package/dist/esm/wallets/eip5792/send-calls.js +2 -2
- package/dist/esm/wallets/eip5792/wait-for-bundle.js +1 -1
- package/dist/esm/wallets/in-app/core/users/getUser.js +1 -1
- package/dist/esm/wallets/smart/smart-wallet.js +1 -0
- package/dist/esm/wallets/smart/smart-wallet.js.map +1 -1
- package/dist/types/client/client.d.ts +1 -0
- package/dist/types/client/client.d.ts.map +1 -1
- package/dist/types/exports/react.d.ts +14 -1
- package/dist/types/exports/react.d.ts.map +1 -1
- package/dist/types/extensions/erc721/lazyMinting/read/getBatchesToReveal.d.ts +1 -1
- package/dist/types/extensions/modules/common/checkModulesCompatibility.d.ts +5 -0
- package/dist/types/extensions/modules/common/checkModulesCompatibility.d.ts.map +1 -1
- package/dist/types/extensions/prebuilts/deploy-pack.d.ts +1 -0
- package/dist/types/extensions/prebuilts/deploy-pack.d.ts.map +1 -1
- package/dist/types/extensions/thirdweb/write/publish.d.ts +4 -0
- package/dist/types/extensions/thirdweb/write/publish.d.ts.map +1 -1
- package/dist/types/react/core/hooks/others/useChainQuery.d.ts +3 -3
- package/dist/types/react/core/hooks/rpc/useBlockNumber.d.ts +1 -1
- package/dist/types/react/core/hooks/wallets/useCapabilities.d.ts +1 -1
- package/dist/types/react/core/hooks/wallets/useSendCalls.d.ts +3 -3
- package/dist/types/react/core/providers/connection-manager.d.ts +3 -0
- package/dist/types/react/core/providers/connection-manager.d.ts.map +1 -1
- package/dist/types/react/core/utils/wallet.d.ts +2 -1
- package/dist/types/react/core/utils/wallet.d.ts.map +1 -1
- package/dist/types/react/core/utils/walletIcon.d.ts +2 -0
- package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
- package/dist/types/react/native/hooks/wallets/useProfiles.d.ts +1 -1
- package/dist/types/react/native/providers/thirdweb-provider.d.ts +1 -0
- package/dist/types/react/native/providers/thirdweb-provider.d.ts.map +1 -1
- package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts +1 -0
- package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectModal.d.ts +1 -0
- package/dist/types/react/native/ui/connect/ConnectModal.d.ts.map +1 -1
- package/dist/types/react/native/ui/transaction/TransactionButton.d.ts +1 -0
- package/dist/types/react/native/ui/transaction/TransactionButton.d.ts.map +1 -1
- package/dist/types/react/web/hooks/wallets/useProfiles.d.ts +1 -1
- package/dist/types/react/web/providers/thirdweb-provider.d.ts +1 -0
- package/dist/types/react/web/providers/thirdweb-provider.d.ts.map +1 -1
- package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts +1 -0
- package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts +22 -5
- package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts +2 -1
- package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts +1 -0
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/PayEmbed.d.ts +2 -2
- package/dist/types/react/web/ui/PayEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/SiteEmbed.d.ts +3 -2
- package/dist/types/react/web/ui/SiteEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/SiteLink.d.ts +2 -1
- package/dist/types/react/web/ui/SiteLink.d.ts.map +1 -1
- package/dist/types/react/web/ui/TransactionButton/index.d.ts +1 -0
- package/dist/types/react/web/ui/TransactionButton/index.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/address.d.ts +52 -0
- package/dist/types/react/web/ui/prebuilt/Account/address.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts +142 -0
- package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts +137 -0
- package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts +8 -0
- package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Account/name.d.ts +119 -0
- package/dist/types/react/web/ui/prebuilt/Account/name.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Account/provider.d.ts +45 -0
- package/dist/types/react/web/ui/prebuilt/Account/provider.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts +59 -0
- package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/NFT/hooks.d.ts +14 -0
- package/dist/types/react/web/ui/prebuilt/NFT/hooks.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts +75 -0
- package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts +59 -0
- package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts +55 -0
- package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts +95 -0
- package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Token/name.d.ts +140 -0
- package/dist/types/react/web/ui/prebuilt/Token/name.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts +61 -0
- package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts +137 -0
- package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts.map +1 -0
- package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts +1 -0
- package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts +1 -0
- package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts +1 -0
- package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts.map +1 -1
- package/dist/types/storage/unpin.d.ts +1 -1
- package/dist/types/storage/upload.d.ts +1 -0
- package/dist/types/storage/upload.d.ts.map +1 -1
- package/dist/types/transaction/actions/to-serializable-transaction.d.ts +1 -1
- package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts +5 -0
- package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts.map +1 -1
- package/dist/types/utils/any-evm/zksync/isZkSyncChain.d.ts +5 -0
- package/dist/types/utils/any-evm/zksync/isZkSyncChain.d.ts.map +1 -1
- package/dist/types/utils/config.d.ts +9 -0
- package/dist/types/utils/config.d.ts.map +1 -1
- package/dist/types/utils/json.d.ts +1 -1
- package/dist/types/utils/json.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/wallets/eip5792/get-calls-status.d.ts +1 -1
- package/dist/types/wallets/eip5792/get-capabilities.d.ts +1 -1
- package/dist/types/wallets/eip5792/send-calls.d.ts +2 -2
- package/dist/types/wallets/eip5792/wait-for-bundle.d.ts +1 -1
- package/dist/types/wallets/in-app/core/users/getUser.d.ts +1 -1
- package/dist/types/wallets/smart/smart-wallet.d.ts +1 -0
- package/dist/types/wallets/smart/smart-wallet.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client/client.ts +1 -0
- package/src/exports/react.ts +56 -2
- package/src/extensions/erc721/lazyMinting/read/getBatchesToReveal.ts +1 -1
- package/src/extensions/modules/common/checkModulesCompatibility.ts +5 -0
- package/src/extensions/prebuilts/deploy-pack.ts +1 -0
- package/src/extensions/thirdweb/write/publish.ts +4 -0
- package/src/react/core/hooks/others/useChainQuery.ts +3 -3
- package/src/react/core/hooks/rpc/useBlockNumber.ts +1 -1
- package/src/react/core/hooks/wallets/useCapabilities.ts +1 -1
- package/src/react/core/hooks/wallets/useSendCalls.ts +3 -3
- package/src/react/core/providers/connection-manager.tsx +3 -0
- package/src/react/core/utils/wallet.ts +2 -1
- package/src/react/core/utils/walletIcon.ts +2 -0
- package/src/react/native/hooks/wallets/useProfiles.ts +1 -1
- package/src/react/native/providers/thirdweb-provider.tsx +1 -0
- package/src/react/native/ui/AutoConnect/AutoConnect.tsx +1 -0
- package/src/react/native/ui/connect/ConnectModal.tsx +1 -0
- package/src/react/native/ui/transaction/TransactionButton.tsx +1 -0
- package/src/react/web/hooks/wallets/useProfiles.ts +1 -1
- package/src/react/web/providers/thirdweb-provider.tsx +1 -0
- package/src/react/web/ui/AutoConnect/AutoConnect.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/Blobbie.tsx +31 -4
- package/src/react/web/ui/ConnectWallet/ConnectButton.tsx +36 -32
- package/src/react/web/ui/ConnectWallet/Details.tsx +91 -58
- package/src/react/web/ui/ConnectWallet/Modal/ConnectEmbed.tsx +1 -0
- package/src/react/web/ui/PayEmbed.tsx +2 -2
- package/src/react/web/ui/SiteEmbed.tsx +3 -2
- package/src/react/web/ui/SiteLink.tsx +2 -1
- package/src/react/web/ui/TransactionButton/index.tsx +1 -0
- package/src/react/web/ui/prebuilt/Account/address.test.tsx +28 -0
- package/src/react/web/ui/prebuilt/Account/address.tsx +64 -0
- package/src/react/web/ui/prebuilt/Account/avatar.test.tsx +48 -0
- package/src/react/web/ui/prebuilt/Account/avatar.tsx +221 -0
- package/src/react/web/ui/prebuilt/Account/balance.test.tsx +54 -0
- package/src/react/web/ui/prebuilt/Account/balance.tsx +202 -0
- package/src/react/web/ui/prebuilt/Account/blobbie.tsx +12 -0
- package/src/react/web/ui/prebuilt/Account/name.test.tsx +62 -0
- package/src/react/web/ui/prebuilt/Account/name.tsx +175 -0
- package/src/react/web/ui/prebuilt/Account/provider.test.tsx +38 -0
- package/src/react/web/ui/prebuilt/Account/provider.tsx +69 -0
- package/src/react/web/ui/prebuilt/NFT/NFT.test.tsx +17 -14
- package/src/react/web/ui/prebuilt/NFT/description.tsx +87 -0
- package/src/react/web/ui/prebuilt/NFT/hooks.tsx +53 -0
- package/src/react/web/ui/prebuilt/NFT/media.tsx +119 -0
- package/src/react/web/ui/prebuilt/NFT/name.tsx +85 -0
- package/src/react/web/ui/prebuilt/NFT/provider.tsx +75 -0
- package/src/react/web/ui/prebuilt/Token/icon.tsx +164 -0
- package/src/react/web/ui/prebuilt/Token/name.tsx +201 -0
- package/src/react/web/ui/prebuilt/Token/provider.tsx +86 -0
- package/src/react/web/ui/prebuilt/Token/symbol.tsx +201 -0
- package/src/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.tsx +1 -0
- package/src/react/web/ui/prebuilt/thirdweb/ClaimButton/index.tsx +1 -0
- package/src/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.tsx +1 -0
- package/src/storage/unpin.ts +1 -1
- package/src/storage/upload.ts +1 -0
- package/src/transaction/actions/to-serializable-transaction.ts +1 -1
- package/src/transaction/actions/zksync/send-eip712-transaction.ts +5 -0
- package/src/utils/any-evm/zksync/isZkSyncChain.ts +5 -0
- package/src/utils/config.ts +9 -0
- package/src/utils/json.ts +8 -2
- package/src/version.ts +1 -1
- package/src/wallets/eip5792/get-calls-status.ts +1 -1
- package/src/wallets/eip5792/get-capabilities.ts +1 -1
- package/src/wallets/eip5792/send-calls.ts +2 -2
- package/src/wallets/eip5792/wait-for-bundle.ts +1 -1
- package/src/wallets/in-app/core/users/getUser.ts +1 -1
- package/src/wallets/smart/smart-wallet.ts +1 -0
- package/dist/cjs/react/web/ui/prebuilt/NFT/NFT.js +0 -217
- package/dist/cjs/react/web/ui/prebuilt/NFT/NFT.js.map +0 -1
- package/dist/esm/react/web/ui/prebuilt/NFT/NFT.js +0 -212
- package/dist/esm/react/web/ui/prebuilt/NFT/NFT.js.map +0 -1
- package/dist/types/react/web/ui/prebuilt/NFT/NFT.d.ts +0 -76
- package/dist/types/react/web/ui/prebuilt/NFT/NFT.d.ts.map +0 -1
- package/src/extensions/prebuilts/deploy-published.test.ts +0 -132
- package/src/react/web/ui/prebuilt/NFT/NFT.tsx +0 -272
- package/src/wallets/smart/smart-wallet-integration-v07.test.ts +0 -270
- 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 {
|
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
|
-
<
|
48
|
+
<NFTProvider contract={DOODLES_CONTRACT} tokenId={0n}>
|
46
49
|
<div>Child Component</div>
|
47
|
-
</
|
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
|
-
<
|
70
|
+
<NFTProvider contract={DOODLES_CONTRACT} tokenId={0n}>
|
68
71
|
<NFTConsumer />
|
69
|
-
</
|
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
|
-
<
|
79
|
-
<
|
80
|
-
</
|
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
|
-
<
|
89
|
-
<
|
90
|
-
</
|
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
|
-
<
|
99
|
-
<
|
100
|
-
</
|
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
|
+
}
|