@0xsequence/marketplace-sdk 0.8.10 → 0.8.12

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 (436) hide show
  1. package/.changeset/fluffy-jokes-lay.md +5 -0
  2. package/.changeset/wise-bugs-boil.md +8 -0
  3. package/CHANGELOG.md +182 -3
  4. package/dist/CartIcon-Bll1rbxv.js +141 -0
  5. package/dist/CartIcon-Bll1rbxv.js.map +1 -0
  6. package/dist/CollectibleCard-CLQTl0_6.d.ts +8 -0
  7. package/dist/_internal-69NEWNUE.js +34 -0
  8. package/dist/_internal-69NEWNUE.js.map +1 -0
  9. package/dist/abi-BKyRjVcZ.js +0 -0
  10. package/dist/{alien_swap-2B65TDGT.js → alien_swap-B_76IMma.js} +5 -5
  11. package/dist/alien_swap-B_76IMma.js.map +1 -0
  12. package/dist/api-1KFxYh7o.js +232 -0
  13. package/dist/api-1KFxYh7o.js.map +1 -0
  14. package/dist/{aqua-xyz-WMYQLAIS.js → aqua-xyz-CMN_TFY5.js} +5 -5
  15. package/dist/aqua-xyz-CMN_TFY5.js.map +1 -0
  16. package/dist/{aura-V22RV5OG.js → aura-Cye_TuHj.js} +5 -5
  17. package/dist/aura-Cye_TuHj.js.map +1 -0
  18. package/dist/{blur-GE5QOMCM.js → blur-DWDMyMpK.js} +5 -5
  19. package/dist/blur-DWDMyMpK.js.map +1 -0
  20. package/dist/builder-api-BQvzykoU.js +28 -0
  21. package/dist/builder-api-BQvzykoU.js.map +1 -0
  22. package/dist/builder-api-DoK3907S.d.ts +12 -0
  23. package/dist/builder.gen-CxP9NT1p.js +303 -0
  24. package/dist/builder.gen-CxP9NT1p.js.map +1 -0
  25. package/dist/{coinbase-NLHJMGAP.js → coinbase-ByA_XRB0.js} +5 -5
  26. package/dist/coinbase-ByA_XRB0.js.map +1 -0
  27. package/dist/{element-2LGTYYSP.js → element-b77CyXIZ.js} +5 -5
  28. package/dist/element-b77CyXIZ.js.map +1 -0
  29. package/dist/{foundation-BPN66ZTN.js → foundation-DbOrKP9Y.js} +5 -5
  30. package/dist/foundation-DbOrKP9Y.js.map +1 -0
  31. package/dist/index-1bezgsFq.d.ts +1129 -0
  32. package/dist/index-4-kfOFdx.d.ts +22 -0
  33. package/dist/index-BEYefG1G.d.ts +24 -0
  34. package/dist/index-BHiSG-Yi.d.ts +312 -0
  35. package/dist/index-BIMIpDiI.d.ts +188 -0
  36. package/dist/index-BQW0PUkQ.d.ts +3973 -0
  37. package/dist/index-BfH21xmk.d.ts +117 -0
  38. package/dist/index-BjIwVzc4.d.ts +1057 -0
  39. package/dist/index-C39K_8SG.d.ts +1 -0
  40. package/dist/index-CN8puQQJ.d.ts +24 -0
  41. package/dist/index-Cl7PQOGu.d.ts +102 -0
  42. package/dist/index-D5v5iluA.d.ts +809 -0
  43. package/dist/index-DXMfTZ1F.d.ts +7 -0
  44. package/dist/index-DafWjEb4.d.ts +65 -0
  45. package/dist/index-ij9f8GAA.d.ts +1 -0
  46. package/dist/index.css +384 -371
  47. package/dist/index.d.ts +10 -28
  48. package/dist/index.js +13 -105
  49. package/dist/{looks-rare-MZRSOPT4.js → looks-rare-C1VqNcSM.js} +5 -5
  50. package/dist/looks-rare-C1VqNcSM.js.map +1 -0
  51. package/dist/{magic-eden-PUBL6KWW.js → magic-eden-ea_AGCZr.js} +5 -5
  52. package/dist/magic-eden-ea_AGCZr.js.map +1 -0
  53. package/dist/{manifold-GA445YJ6.js → manifold-8y8J2sjT.js} +5 -5
  54. package/dist/manifold-8y8J2sjT.js.map +1 -0
  55. package/dist/marketplace-logos-CSeGcPW4.js +50 -0
  56. package/dist/marketplace-logos-CSeGcPW4.js.map +1 -0
  57. package/dist/marketplace-nwnZv9Cb.js +1913 -0
  58. package/dist/marketplace-nwnZv9Cb.js.map +1 -0
  59. package/dist/marketplace.gen-Dqk8vRmD.js +1068 -0
  60. package/dist/marketplace.gen-Dqk8vRmD.js.map +1 -0
  61. package/dist/marketplaceConfig-D2MYFqll.js +71 -0
  62. package/dist/marketplaceConfig-D2MYFqll.js.map +1 -0
  63. package/dist/{mintify-UMC5PTKC.js → mintify-LA68TzWg.js} +5 -5
  64. package/dist/mintify-LA68TzWg.js.map +1 -0
  65. package/dist/{nftx-AX3CY3IE.js → nftx-D3Tc8nzd.js} +5 -5
  66. package/dist/nftx-D3Tc8nzd.js.map +1 -0
  67. package/dist/{okx-GNVLAE2R.js → okx-hbqg6oIJ.js} +5 -5
  68. package/dist/okx-hbqg6oIJ.js.map +1 -0
  69. package/dist/{open-sea-KI43GVEB.js → open-sea-BccuK8-t.js} +5 -5
  70. package/dist/open-sea-BccuK8-t.js.map +1 -0
  71. package/dist/options-DCi6_23w.js +34 -0
  72. package/dist/options-DCi6_23w.js.map +1 -0
  73. package/dist/primary-sale-Cw95phYC.js +1264 -0
  74. package/dist/primary-sale-Cw95phYC.js.map +1 -0
  75. package/dist/queries-DPvwtnO7.js +486 -0
  76. package/dist/queries-DPvwtnO7.js.map +1 -0
  77. package/dist/{rarible-2J3MMZJ7.js → rarible-BgTwwj9g.js} +5 -5
  78. package/dist/rarible-BgTwwj9g.js.map +1 -0
  79. package/dist/react/_internal/api/index.d.ts +4 -86
  80. package/dist/react/_internal/api/index.js +7 -150
  81. package/dist/react/_internal/databeat/index.d.ts +45 -41
  82. package/dist/react/_internal/databeat/index.js +23 -27
  83. package/dist/react/_internal/index.d.ts +7 -24
  84. package/dist/react/_internal/index.js +9 -176
  85. package/dist/react/_internal/wagmi/index.d.ts +4 -18
  86. package/dist/react/_internal/wagmi/index.js +5 -14
  87. package/dist/react/hooks/index.d.ts +17 -3803
  88. package/dist/react/hooks/index.js +23 -157
  89. package/dist/react/hooks/options/index.d.ts +5 -7
  90. package/dist/react/hooks/options/index.js +11 -19
  91. package/dist/react/index.d.ts +37 -33
  92. package/dist/react/index.js +23 -199
  93. package/dist/react/queries/index.d.ts +8 -26
  94. package/dist/react/queries/index.js +18 -40
  95. package/dist/react/ssr/index.d.ts +19 -13
  96. package/dist/react/ssr/index.js +29 -27
  97. package/dist/react/ssr/index.js.map +1 -1
  98. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +10 -0
  99. package/dist/react/ui/components/marketplace-collectible-card/index.js +23 -0
  100. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +8 -0
  101. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +10 -0
  102. package/dist/react/ui/components/marketplace-logos/index.d.ts +26 -24
  103. package/dist/react/ui/components/marketplace-logos/index.js +3 -45
  104. package/dist/react/ui/icons/index.d.ts +1 -2
  105. package/dist/react/ui/icons/index.js +10 -14
  106. package/dist/react/ui/index.d.ts +10 -116
  107. package/dist/react/ui/index.js +23 -46
  108. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +59 -33
  109. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -31
  110. package/dist/react-BG7o4PId.js +8351 -0
  111. package/dist/react-BG7o4PId.js.map +1 -0
  112. package/dist/react-BbHBl6gg.css +80 -0
  113. package/dist/react-BbHBl6gg.css.map +1 -0
  114. package/dist/sdk-config-DJzxVPld.d.ts +1535 -0
  115. package/dist/{sequence-TGLUFEPQ.js → sequence-Do3kzb4J.js} +5 -5
  116. package/dist/sequence-Do3kzb4J.js.map +1 -0
  117. package/dist/src-Dz2CfBL0.js +8 -0
  118. package/dist/src-Dz2CfBL0.js.map +1 -0
  119. package/dist/{sudo-swap-M2O6E3TE.js → sudo-swap-B6vPKxBz.js} +5 -5
  120. package/dist/sudo-swap-B6vPKxBz.js.map +1 -0
  121. package/dist/{super-rare-UU2U4LIN.js → super-rare-eCm1SE6O.js} +5 -5
  122. package/dist/super-rare-eCm1SE6O.js.map +1 -0
  123. package/dist/token-CO5llIla.js +1312 -0
  124. package/dist/token-CO5llIla.js.map +1 -0
  125. package/dist/transaction-CcVViHEL.js +97 -0
  126. package/dist/transaction-CcVViHEL.js.map +1 -0
  127. package/dist/types/index.d.ts +3 -12
  128. package/dist/types/index.js +5 -44
  129. package/dist/types-BIJOaL4j.d.ts +68 -0
  130. package/dist/types-DwWE6xOF.js +13 -0
  131. package/dist/types-DwWE6xOF.js.map +1 -0
  132. package/dist/useCollection-C-mclKU0.d.ts +66 -0
  133. package/dist/utils/abi/index.d.ts +5 -3
  134. package/dist/utils/abi/index.js +6 -26
  135. package/dist/utils/abi/marketplace/index.d.ts +2 -805
  136. package/dist/utils/abi/marketplace/index.js +3 -11
  137. package/dist/utils/abi/primary-sale/index.d.ts +2 -1054
  138. package/dist/utils/abi/primary-sale/index.js +3 -9
  139. package/dist/utils/abi/token/index.d.ts +2 -1125
  140. package/dist/utils/abi/token/index.js +3 -11
  141. package/dist/utils/index.d.ts +8 -91
  142. package/dist/utils/index.js +11 -56
  143. package/dist/utils-BFdxaToy.js +216 -0
  144. package/dist/utils-BFdxaToy.js.map +1 -0
  145. package/dist/utils-Cat9_pef.js +44 -0
  146. package/dist/utils-Cat9_pef.js.map +1 -0
  147. package/dist/wagmi-DRctYEk6.js +159 -0
  148. package/dist/wagmi-DRctYEk6.js.map +1 -0
  149. package/dist/{x2y2-3W5BBMZC.js → x2y2-DD17tT91.js} +5 -5
  150. package/dist/x2y2-DD17tT91.js.map +1 -0
  151. package/dist/{zora-6EY6FUH6.js → zora-BpSG9UzS.js} +5 -5
  152. package/dist/zora-BpSG9UzS.js.map +1 -0
  153. package/package.json +21 -19
  154. package/src/index.ts +0 -1
  155. package/src/react/_internal/api/__mocks__/builder.msw.ts +157 -80
  156. package/src/react/_internal/api/__mocks__/indexer.msw.ts +1 -0
  157. package/src/react/_internal/api/builder-api.ts +2 -2
  158. package/src/react/_internal/api/builder.gen.ts +666 -112
  159. package/src/react/_internal/api/marketplace.gen.ts +2421 -1315
  160. package/src/react/_internal/api/services.ts +42 -49
  161. package/src/react/_internal/types.ts +1 -13
  162. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +102 -87
  163. package/src/react/_internal/wagmi/create-config.ts +15 -6
  164. package/src/react/_internal/wagmi/get-connectors.ts +29 -21
  165. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +273 -0
  166. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +122 -82
  167. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +7 -4
  168. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +225 -0
  169. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +3 -3
  170. package/src/react/hooks/__tests__/useFilters.test.tsx +0 -16
  171. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +2 -3
  172. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +0 -16
  173. package/src/react/hooks/__tests__/useInventory.test.tsx +6 -42
  174. package/src/react/hooks/__tests__/useListCollections.test.tsx +24 -57
  175. package/src/react/hooks/__tests__/{useCurrencies.test.tsx → useMarketCurrencies.test.tsx} +21 -15
  176. package/src/react/hooks/__tests__/useMarketplaceConfig.test.tsx +2 -59
  177. package/src/react/hooks/index.ts +9 -1
  178. package/src/react/hooks/useBalanceOfCollectible.tsx +14 -8
  179. package/src/react/hooks/useCancelTransactionSteps.tsx +5 -1
  180. package/src/react/hooks/useCheckoutOptions.tsx +2 -1
  181. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +67 -0
  182. package/src/react/hooks/useCollectionDetails.tsx +22 -7
  183. package/src/react/hooks/useConvertPriceToUSD.tsx +1 -1
  184. package/src/react/hooks/useCountListingsForCollectible.tsx +5 -4
  185. package/src/react/hooks/useCountOfCollectables.tsx +10 -7
  186. package/src/react/hooks/useCountOffersForCollectible.tsx +5 -4
  187. package/src/react/hooks/useCurrency.tsx +2 -2
  188. package/src/react/hooks/useERC721SaleMintedTokens.tsx +67 -0
  189. package/src/react/hooks/useFilters.tsx +14 -22
  190. package/src/react/hooks/useFloorOrder.tsx +5 -2
  191. package/src/react/hooks/useGenerateCancelTransaction.tsx +13 -6
  192. package/src/react/hooks/useGenerateListingTransaction.tsx +15 -5
  193. package/src/react/hooks/useGenerateOfferTransaction.tsx +15 -6
  194. package/src/react/hooks/useGenerateSellTransaction.tsx +15 -6
  195. package/src/react/hooks/useGetTokenSuppliesMap.ts +33 -0
  196. package/src/react/hooks/useInventory.tsx +7 -4
  197. package/src/react/hooks/useList1155ShopCardData.tsx +130 -0
  198. package/src/react/hooks/useList721ShopCardData.tsx +130 -0
  199. package/src/react/hooks/useListBalances.tsx +7 -8
  200. package/src/react/hooks/useListCollectibleActivities.tsx +2 -1
  201. package/src/react/hooks/useListCollectibles.tsx +1 -12
  202. package/src/react/hooks/useListCollectiblesPaginated.tsx +8 -5
  203. package/src/react/hooks/useListCollectionActivities.tsx +2 -1
  204. package/src/react/hooks/useListCollections.tsx +14 -76
  205. package/src/react/hooks/useListListingsForCollectible.tsx +2 -1
  206. package/src/react/hooks/useListMarketCardData.tsx +157 -0
  207. package/src/react/hooks/useListOffersForCollectible.tsx +2 -1
  208. package/src/react/hooks/useListPrimarySaleItems.ts +42 -0
  209. package/src/react/hooks/useMarketCurrencies.tsx +8 -0
  210. package/src/react/hooks/useMarketplaceConfig.tsx +0 -2
  211. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +134 -0
  212. package/src/react/queries/highestOffer.ts +6 -4
  213. package/src/react/queries/index.ts +1 -0
  214. package/src/react/queries/inventory.ts +36 -2
  215. package/src/react/queries/listBalances.ts +14 -30
  216. package/src/react/queries/listCollectibles.ts +60 -7
  217. package/src/react/queries/listCollections.ts +124 -0
  218. package/src/react/queries/listTokenMetadata.ts +6 -1
  219. package/src/react/queries/lowestListing.ts +6 -4
  220. package/src/react/queries/marketCurrencies.ts +81 -0
  221. package/src/react/queries/marketplaceConfig.ts +82 -79
  222. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +122 -82
  223. package/src/react/ssr/__tests__/create-ssr-client.test.ts +0 -3
  224. package/src/react/ssr/create-ssr-client.ts +5 -10
  225. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +47 -13
  226. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +1 -1
  227. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +28 -15
  228. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +1 -1
  229. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +1 -1
  230. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +1 -1
  231. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +78 -15
  232. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +1 -1
  233. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +1 -1
  234. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +17 -0
  235. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +24 -0
  236. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +231 -0
  237. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +76 -0
  238. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +55 -0
  239. package/src/react/ui/components/marketplace-collectible-card/index.ts +3 -0
  240. package/src/react/ui/components/marketplace-collectible-card/types.ts +95 -0
  241. package/src/react/ui/components/marketplace-collectible-card/utils/formatPrice.ts +45 -0
  242. package/src/react/ui/components/marketplace-collectible-card/utils/index.ts +2 -0
  243. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +39 -0
  244. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +124 -0
  245. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +105 -0
  246. package/src/react/ui/components/{collectible-card/media → media}/Media.tsx +52 -30
  247. package/src/react/ui/components/{collectible-card/media → media}/MediaSkeleton.tsx +1 -1
  248. package/src/react/ui/components/{collectible-card/media → media}/types.ts +4 -1
  249. package/src/react/ui/index.ts +5 -2
  250. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +554 -0
  251. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +385 -0
  252. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +272 -0
  253. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +112 -0
  254. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +117 -13
  255. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -7
  256. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +157 -0
  257. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +136 -0
  258. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +184 -0
  259. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +121 -0
  260. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +85 -0
  261. package/src/react/ui/modals/BuyModal/components/ERC721ShopModal.tsx +86 -0
  262. package/src/react/ui/modals/BuyModal/components/Modal.tsx +14 -0
  263. package/src/react/ui/modals/BuyModal/components/types.ts +8 -0
  264. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +4 -4
  265. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +379 -0
  266. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +253 -0
  267. package/src/react/ui/modals/BuyModal/hooks/__tests__/{useFees.test.tsx → useMarketPlatformFee.test.tsx} +37 -28
  268. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +62 -44
  269. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +73 -0
  270. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +196 -0
  271. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +74 -18
  272. package/src/react/ui/modals/BuyModal/hooks/useMarketPlatformFee.ts +53 -0
  273. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +27 -12
  274. package/src/react/ui/modals/BuyModal/store.ts +147 -13
  275. package/src/react/ui/modals/CreateListingModal/Modal.tsx +3 -5
  276. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +5 -3
  277. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -1
  278. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -5
  279. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +2 -3
  280. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +2 -1
  281. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +4 -3
  282. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +5 -3
  283. package/src/react/ui/modals/SellModal/Modal.tsx +0 -1
  284. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +4 -3
  285. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +8 -5
  286. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +11 -7
  287. package/src/react/ui/modals/SuccessfulPurchaseModal/index.tsx +34 -28
  288. package/src/react/ui/modals/SuccessfulPurchaseModal/store.ts +71 -0
  289. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +0 -1
  290. package/src/react/ui/modals/TransferModal/index.tsx +0 -1
  291. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +0 -1
  292. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +105 -108
  293. package/src/react/ui/modals/_internal/components/actionModal/store.ts +45 -12
  294. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +2 -2
  295. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +7 -6
  296. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +13 -7
  297. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +3 -5
  298. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +5 -3
  299. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +12 -8
  300. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +35 -33
  301. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +61 -32
  302. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  303. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +2 -12
  304. package/src/react/ui/modals/modal-provider.tsx +1 -1
  305. package/src/types/buyModalErrors.ts +438 -0
  306. package/src/types/index.ts +1 -3
  307. package/src/types/new-marketplace-types.ts +104 -0
  308. package/src/types/sdk-config.ts +22 -12
  309. package/src/types/types.ts +17 -0
  310. package/src/utils/_internal/error/transaction.ts +36 -1
  311. package/tsconfig.json +1 -1
  312. package/tsconfig.tsbuildinfo +1 -1
  313. package/tsdown.config.ts +25 -0
  314. package/.ctirc +0 -32
  315. package/dist/alien_swap-2B65TDGT.js.map +0 -1
  316. package/dist/aqua-xyz-WMYQLAIS.js.map +0 -1
  317. package/dist/aura-V22RV5OG.js.map +0 -1
  318. package/dist/blur-GE5QOMCM.js.map +0 -1
  319. package/dist/chunk-2PSNAIAT.js +0 -1
  320. package/dist/chunk-2PSNAIAT.js.map +0 -1
  321. package/dist/chunk-5C6ZZ6WX.js +0 -130
  322. package/dist/chunk-5C6ZZ6WX.js.map +0 -1
  323. package/dist/chunk-5O44EPXZ.js +0 -207
  324. package/dist/chunk-5O44EPXZ.js.map +0 -1
  325. package/dist/chunk-6CTFVBKU.js +0 -1
  326. package/dist/chunk-6CTFVBKU.js.map +0 -1
  327. package/dist/chunk-7F27CJZW.js +0 -1544
  328. package/dist/chunk-7F27CJZW.js.map +0 -1
  329. package/dist/chunk-A7BVFBWB.js +0 -81
  330. package/dist/chunk-A7BVFBWB.js.map +0 -1
  331. package/dist/chunk-D7RVSZAQ.js +0 -332
  332. package/dist/chunk-D7RVSZAQ.js.map +0 -1
  333. package/dist/chunk-DWTLVJAW.js +0 -42
  334. package/dist/chunk-DWTLVJAW.js.map +0 -1
  335. package/dist/chunk-FGM57QUU.js +0 -128
  336. package/dist/chunk-FGM57QUU.js.map +0 -1
  337. package/dist/chunk-FUM4OGOQ.js +0 -1027
  338. package/dist/chunk-FUM4OGOQ.js.map +0 -1
  339. package/dist/chunk-JKCF7HEA.js +0 -1
  340. package/dist/chunk-JKCF7HEA.js.map +0 -1
  341. package/dist/chunk-KTST7ORH.js +0 -53
  342. package/dist/chunk-KTST7ORH.js.map +0 -1
  343. package/dist/chunk-M6NJ73Y5.js +0 -154
  344. package/dist/chunk-M6NJ73Y5.js.map +0 -1
  345. package/dist/chunk-N7BPFK46.js +0 -1
  346. package/dist/chunk-N7BPFK46.js.map +0 -1
  347. package/dist/chunk-NX52D7NX.js +0 -135
  348. package/dist/chunk-NX52D7NX.js.map +0 -1
  349. package/dist/chunk-O34GCB47.js +0 -32
  350. package/dist/chunk-O34GCB47.js.map +0 -1
  351. package/dist/chunk-Q3ECVC4F.js +0 -811
  352. package/dist/chunk-Q3ECVC4F.js.map +0 -1
  353. package/dist/chunk-RVIUUJTP.js +0 -76
  354. package/dist/chunk-RVIUUJTP.js.map +0 -1
  355. package/dist/chunk-SXVUTSMT.js +0 -2895
  356. package/dist/chunk-SXVUTSMT.js.map +0 -1
  357. package/dist/chunk-UJSF7PSC.js +0 -5728
  358. package/dist/chunk-UJSF7PSC.js.map +0 -1
  359. package/dist/chunk-WH5BZC7W.js +0 -38
  360. package/dist/chunk-WH5BZC7W.js.map +0 -1
  361. package/dist/chunk-XX4EVWBF.js +0 -1292
  362. package/dist/chunk-XX4EVWBF.js.map +0 -1
  363. package/dist/chunk-Y2HJO2VY.js +0 -432
  364. package/dist/chunk-Y2HJO2VY.js.map +0 -1
  365. package/dist/chunk-Y63BOO6M.js +0 -11
  366. package/dist/chunk-Y63BOO6M.js.map +0 -1
  367. package/dist/coinbase-NLHJMGAP.js.map +0 -1
  368. package/dist/create-config-CAQcvjl6.d.ts +0 -8
  369. package/dist/element-2LGTYYSP.js.map +0 -1
  370. package/dist/foundation-BPN66ZTN.js.map +0 -1
  371. package/dist/get-query-client-D46hbjk6.d.ts +0 -5
  372. package/dist/index-MlUK9AQE.d.ts +0 -62
  373. package/dist/index.css.map +0 -1
  374. package/dist/index.js.map +0 -1
  375. package/dist/listTokenMetadata-DO4ChDjn.d.ts +0 -203
  376. package/dist/looks-rare-MZRSOPT4.js.map +0 -1
  377. package/dist/magic-eden-PUBL6KWW.js.map +0 -1
  378. package/dist/manifold-GA445YJ6.js.map +0 -1
  379. package/dist/marketplace.gen-DQzWciwC.d.ts +0 -1072
  380. package/dist/marketplaceConfig-D0MXemEl.d.ts +0 -17
  381. package/dist/mintify-UMC5PTKC.js.map +0 -1
  382. package/dist/nftx-AX3CY3IE.js.map +0 -1
  383. package/dist/okx-GNVLAE2R.js.map +0 -1
  384. package/dist/open-sea-KI43GVEB.js.map +0 -1
  385. package/dist/rarible-2J3MMZJ7.js.map +0 -1
  386. package/dist/react/_internal/api/index.js.map +0 -1
  387. package/dist/react/_internal/databeat/index.js.map +0 -1
  388. package/dist/react/_internal/index.js.map +0 -1
  389. package/dist/react/_internal/wagmi/index.js.map +0 -1
  390. package/dist/react/hooks/index.js.map +0 -1
  391. package/dist/react/hooks/options/index.js.map +0 -1
  392. package/dist/react/index.css +0 -2764
  393. package/dist/react/index.css.map +0 -1
  394. package/dist/react/index.js.map +0 -1
  395. package/dist/react/queries/index.js.map +0 -1
  396. package/dist/react/ui/components/collectible-card/index.css +0 -2764
  397. package/dist/react/ui/components/collectible-card/index.css.map +0 -1
  398. package/dist/react/ui/components/collectible-card/index.d.ts +0 -70
  399. package/dist/react/ui/components/collectible-card/index.js +0 -32
  400. package/dist/react/ui/components/collectible-card/index.js.map +0 -1
  401. package/dist/react/ui/components/marketplace-logos/index.js.map +0 -1
  402. package/dist/react/ui/icons/index.js.map +0 -1
  403. package/dist/react/ui/index.css +0 -2764
  404. package/dist/react/ui/index.css.map +0 -1
  405. package/dist/react/ui/index.js.map +0 -1
  406. package/dist/react/ui/modals/_internal/components/actionModal/index.js.map +0 -1
  407. package/dist/sdk-config-onSPBxJj.d.ts +0 -134
  408. package/dist/sequence-TGLUFEPQ.js.map +0 -1
  409. package/dist/services-CMSb9ipU.d.ts +0 -23
  410. package/dist/sudo-swap-M2O6E3TE.js.map +0 -1
  411. package/dist/super-rare-UU2U4LIN.js.map +0 -1
  412. package/dist/types/index.js.map +0 -1
  413. package/dist/types-B8xzPEKX.d.ts +0 -68
  414. package/dist/utils/abi/index.js.map +0 -1
  415. package/dist/utils/abi/marketplace/index.js.map +0 -1
  416. package/dist/utils/abi/primary-sale/index.js.map +0 -1
  417. package/dist/utils/abi/token/index.js.map +0 -1
  418. package/dist/utils/index.js.map +0 -1
  419. package/dist/x2y2-3W5BBMZC.js.map +0 -1
  420. package/dist/zora-6EY6FUH6.js.map +0 -1
  421. package/postcss.config.mjs +0 -5
  422. package/src/react/hooks/__tests__/__snapshots__/useRoyaltyPercentage.test.tsx.snap +0 -8
  423. package/src/react/hooks/useCurrencies.tsx +0 -77
  424. package/src/react/ui/components/collectible-card/CollectibleCard.tsx +0 -170
  425. package/src/react/ui/components/collectible-card/Footer.tsx +0 -157
  426. package/src/react/ui/components/collectible-card/__tests__/CollectibleCard.test.tsx +0 -94
  427. package/src/react/ui/components/collectible-card/__tests__/Footer.test.tsx +0 -136
  428. package/src/react/ui/components/collectible-card/__tests__/Media.test.tsx +0 -224
  429. package/src/react/ui/components/collectible-card/index.ts +0 -2
  430. package/src/react/ui/modals/BuyModal/ERC1155QuantityModal.tsx +0 -124
  431. package/src/react/ui/modals/BuyModal/Modal.tsx +0 -124
  432. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +0 -104
  433. package/src/react/ui/modals/BuyModal/hooks/useFees.ts +0 -38
  434. package/src/react/ui/modals/SuccessfulPurchaseModal/_store.ts +0 -72
  435. package/tsup.config.ts +0 -23
  436. /package/src/react/ui/components/{collectible-card/media → media}/utils.ts +0 -0
@@ -1,170 +0,0 @@
1
- 'use client';
2
-
3
- import { Skeleton } from '@0xsequence/design-system';
4
- import type { Hex } from 'viem';
5
- import type {
6
- CollectibleOrder,
7
- ContractType,
8
- Order,
9
- OrderbookKind,
10
- } from '../../../_internal';
11
- import { useCurrency } from '../../../hooks';
12
- import { ActionButton } from '../_internals/action-button/ActionButton';
13
- import { CollectibleCardAction } from '../_internals/action-button/types';
14
- import { Footer } from './Footer';
15
- import { Media } from './media/Media';
16
-
17
- function CollectibleSkeleton() {
18
- return (
19
- <div
20
- data-testid="collectible-card-skeleton"
21
- className="w-card-width overflow-hidden rounded-xl border border-border-base focus-visible:border-border-focus focus-visible:shadow-none focus-visible:outline-focus active:border-border-focus active:shadow-none"
22
- >
23
- <div className="relative aspect-square overflow-hidden bg-background-secondary">
24
- <Skeleton
25
- size="lg"
26
- className="absolute inset-0 h-full w-full animate-shimmer"
27
- style={{
28
- borderRadius: 0,
29
- }}
30
- />
31
- </div>
32
- <div className="mt-2 flex flex-col gap-2 px-4 pb-4">
33
- <Skeleton size="lg" className="animate-shimmer" />
34
- <Skeleton size="sm" className="animate-shimmer" />
35
- </div>
36
- </div>
37
- );
38
- }
39
-
40
- type CollectibleCardProps = {
41
- collectibleId: string;
42
- chainId: number;
43
- collectionAddress: Hex;
44
- orderbookKind?: OrderbookKind;
45
- collectionType?: ContractType;
46
- collectible: CollectibleOrder | undefined;
47
- onCollectibleClick?: (tokenId: string) => void;
48
- onOfferClick?: ({
49
- order,
50
- e,
51
- }: {
52
- order?: Order;
53
- e: React.MouseEvent<HTMLButtonElement>;
54
- }) => void;
55
- assetSrcPrefixUrl?: string;
56
- balance?: string;
57
- balanceIsLoading: boolean;
58
- cardLoading?: boolean;
59
- /**
60
- * Callback function that is called when the user attempts to perform an action
61
- * (such as buying or making an offer) that they are not permitted to do.
62
- *
63
- * This function is invoked in the following scenario:
64
- *
65
- * - When a disconnected user clicks on "Buy Now" and is prompted to connect
66
- * their wallet. After connecting, if it is determined that the user is
67
- * already the owner of the collectible, this callback is triggered to inform
68
- * them that they cannot perform the action (e.g., buying their own collectible).
69
- *
70
- * @param action - The action that the user cannot perform, which can be either
71
- * CollectibleCardAction.BUY or CollectibleCardAction.OFFER.
72
- */
73
- onCannotPerformAction?: (
74
- action: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,
75
- ) => void;
76
- };
77
-
78
- export function CollectibleCard({
79
- collectibleId,
80
- chainId,
81
- collectionAddress,
82
- orderbookKind,
83
- collectionType,
84
- collectible,
85
- onCollectibleClick,
86
- onOfferClick,
87
- balance,
88
- balanceIsLoading,
89
- cardLoading,
90
- onCannotPerformAction,
91
- assetSrcPrefixUrl,
92
- }: CollectibleCardProps) {
93
- const collectibleMetadata = collectible?.metadata;
94
- const highestOffer = collectible?.offer;
95
-
96
- const { data: lowestListingCurrency } = useCurrency({
97
- chainId,
98
- currencyAddress: collectible?.listing?.priceCurrencyAddress,
99
- query: {
100
- enabled: !!collectible?.listing?.priceCurrencyAddress,
101
- },
102
- });
103
-
104
- if (cardLoading) {
105
- return <CollectibleSkeleton />;
106
- }
107
-
108
- const action = (
109
- balance
110
- ? (highestOffer && CollectibleCardAction.SELL) ||
111
- (!collectible?.listing && CollectibleCardAction.LIST) ||
112
- CollectibleCardAction.TRANSFER
113
- : (collectible?.listing && CollectibleCardAction.BUY) ||
114
- CollectibleCardAction.OFFER
115
- ) as CollectibleCardAction;
116
-
117
- return (
118
- <div
119
- data-testid="collectible-card"
120
- className="w-card-width overflow-hidden rounded-xl border border-border-base bg-background-primary focus-visible:border-border-focus focus-visible:shadow-focus-ring focus-visible:outline-focus active:border-border-focus active:shadow-active-ring"
121
- onClick={() => onCollectibleClick?.(collectibleId)}
122
- onKeyDown={(e) => {
123
- if (e.key === 'Enter' || e.key === ' ') {
124
- onCollectibleClick?.(collectibleId);
125
- }
126
- }}
127
- >
128
- <div className="group relative z-10 flex h-full w-full cursor-pointer flex-col items-start overflow-hidden rounded-xl border-none bg-none p-0 focus:outline-none [&:focus]:rounded-[10px] [&:focus]:outline-[3px] [&:focus]:outline-black [&:focus]:outline-offset-[-3px]">
129
- <article className="w-full rounded-xl">
130
- <Media
131
- name={collectibleMetadata?.name || ''}
132
- assets={[
133
- collectibleMetadata?.image,
134
- collectibleMetadata?.video,
135
- collectibleMetadata?.animation_url,
136
- ]}
137
- assetSrcPrefixUrl={assetSrcPrefixUrl}
138
- />
139
-
140
- <Footer
141
- name={collectibleMetadata?.name || ''}
142
- type={collectionType}
143
- onOfferClick={(e) => onOfferClick?.({ order: highestOffer, e })}
144
- highestOffer={highestOffer}
145
- lowestListingPriceAmount={collectible?.listing?.priceAmount}
146
- lowestListingCurrency={lowestListingCurrency}
147
- balance={balance}
148
- decimals={collectibleMetadata?.decimals}
149
- />
150
-
151
- {(highestOffer || collectible) && !balanceIsLoading && (
152
- <div className="-bottom-16 absolute flex w-full origin-bottom items-center justify-center bg-overlay-light p-2 backdrop-blur transition-transform duration-200 ease-in-out group-hover:translate-y-[-64px]">
153
- <ActionButton
154
- chainId={chainId}
155
- collectionAddress={collectionAddress}
156
- tokenId={collectibleId}
157
- orderbookKind={orderbookKind}
158
- action={action}
159
- highestOffer={highestOffer}
160
- lowestListing={collectible?.listing}
161
- owned={!!balance}
162
- onCannotPerformAction={onCannotPerformAction}
163
- />
164
- </div>
165
- )}
166
- </article>
167
- </div>
168
- </div>
169
- );
170
- }
@@ -1,157 +0,0 @@
1
- 'use client';
2
-
3
- import {
4
- ChevronLeftIcon,
5
- ChevronRightIcon,
6
- IconButton,
7
- Image,
8
- Text,
9
- } from '@0xsequence/design-system';
10
- import { formatUnits } from 'viem';
11
- import { ContractType, type Currency, type Order } from '../../../_internal';
12
- import SvgBellIcon from '../../icons/BellIcon';
13
-
14
- const OVERFLOW_PRICE = 100000000;
15
- const UNDERFLOW_PRICE = 0.0001;
16
-
17
- const formatPrice = (amount: string, currency: Currency): React.ReactNode => {
18
- const formattedPrice = formatUnits(BigInt(amount), currency.decimals);
19
- const numericPrice = Number.parseFloat(formattedPrice);
20
-
21
- if (numericPrice < UNDERFLOW_PRICE) {
22
- return (
23
- <div className="flex items-center">
24
- <ChevronLeftIcon className="h-3 w-3 text-text-100" />
25
- <Text>{`${UNDERFLOW_PRICE} ${currency.symbol}`}</Text>
26
- </div>
27
- );
28
- }
29
-
30
- if (numericPrice > OVERFLOW_PRICE) {
31
- return (
32
- <div className="flex items-center">
33
- <ChevronRightIcon className="h-3 w-3 text-text-100" />
34
- <Text>{`${OVERFLOW_PRICE.toLocaleString('en-US', {
35
- maximumFractionDigits: 2,
36
- })} ${currency.symbol}`}</Text>
37
- </div>
38
- );
39
- }
40
-
41
- const maxDecimals = numericPrice < 0.01 ? 6 : 4;
42
-
43
- const formattedNumber = numericPrice.toLocaleString('en-US', {
44
- minimumFractionDigits: 0,
45
- maximumFractionDigits: maxDecimals,
46
- });
47
-
48
- return (
49
- <div className="flex items-center gap-1">
50
- <Text>
51
- {formattedNumber} {currency.symbol}
52
- </Text>
53
- </div>
54
- );
55
- };
56
-
57
- type FooterProps = {
58
- name: string;
59
- type?: ContractType;
60
- decimals?: number;
61
- onOfferClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
62
- highestOffer?: Order;
63
- lowestListingPriceAmount?: string;
64
- lowestListingCurrency?: Currency;
65
- balance?: string;
66
- };
67
-
68
- export const Footer = ({
69
- name,
70
- type,
71
- decimals,
72
- onOfferClick,
73
- highestOffer,
74
- lowestListingPriceAmount,
75
- lowestListingCurrency,
76
- balance,
77
- }: FooterProps) => {
78
- const listed = !!lowestListingPriceAmount && !!lowestListingCurrency;
79
-
80
- if (name.length > 15 && highestOffer) {
81
- name = `${name.substring(0, 13)}...`;
82
- }
83
- if (name.length > 17 && !highestOffer) {
84
- name = `${name.substring(0, 17)}...`;
85
- }
86
-
87
- return (
88
- <div className="relative flex flex-col items-start gap-2 whitespace-nowrap bg-background-primary p-4">
89
- <div className="relative flex w-full items-center justify-between">
90
- <Text className="text-left font-body font-bold text-sm text-text-100">
91
- {name || 'Untitled'}
92
- </Text>
93
-
94
- {highestOffer && onOfferClick && (
95
- <IconButton
96
- className="absolute top-0 right-0 h-[22px] w-[22px] hover:animate-bell-ring"
97
- size="xs"
98
- variant="primary"
99
- onClick={(e) => {
100
- onOfferClick?.(e);
101
- }}
102
- icon={(props) => <SvgBellIcon {...props} size="xs" />}
103
- />
104
- )}
105
- </div>
106
- <div className="flex items-center gap-1">
107
- {listed && lowestListingCurrency.imageUrl && (
108
- <Image
109
- className="h-3 w-3"
110
- src={lowestListingCurrency.imageUrl}
111
- onError={(e) => {
112
- e.currentTarget.style.display = 'none';
113
- }}
114
- />
115
- )}
116
-
117
- <Text
118
- className={`text-left font-body font-bold text-sm ${
119
- listed ? 'text-text-100' : 'text-text-50'
120
- }`}
121
- >
122
- {listed &&
123
- formatPrice(lowestListingPriceAmount, lowestListingCurrency)}
124
- {!listed && 'Not listed yet'}
125
- </Text>
126
- </div>
127
- <TokenTypeBalancePill
128
- balance={balance}
129
- type={type as ContractType}
130
- decimals={decimals}
131
- />
132
- </div>
133
- );
134
- };
135
-
136
- const TokenTypeBalancePill = ({
137
- balance,
138
- type,
139
- decimals,
140
- }: {
141
- balance?: string;
142
- type: ContractType;
143
- decimals?: number;
144
- }) => {
145
- const displayText =
146
- type === ContractType.ERC1155
147
- ? balance
148
- ? `Owned: ${formatUnits(BigInt(balance), decimals ?? 0)}`
149
- : 'ERC-1155'
150
- : 'ERC-721';
151
-
152
- return (
153
- <Text className="rounded-lg bg-background-secondary px-2 py-1 text-left font-medium text-text-80 text-xs">
154
- {displayText}
155
- </Text>
156
- );
157
- };
@@ -1,94 +0,0 @@
1
- import { TEST_COLLECTIBLE, TEST_CURRENCY } from '@test/const';
2
- import { fireEvent, render, screen } from '@test/test-utils';
3
- import { beforeEach, describe, expect, it, vi } from 'vitest';
4
- import {
5
- type CollectibleOrder,
6
- ContractType,
7
- OrderSide,
8
- OrderbookKind,
9
- } from '../../../../_internal';
10
- import { mockTokenMetadata } from '../../../../_internal/api/__mocks__/indexer.msw';
11
- import { mockOrder } from '../../../../_internal/api/__mocks__/marketplace.msw';
12
- import * as hooks from '../../../../hooks';
13
- import { CollectibleCard } from '../CollectibleCard';
14
-
15
- const defaultProps = {
16
- collectibleId: '1',
17
- chainId: 1,
18
- collectionAddress: TEST_COLLECTIBLE.collectionAddress,
19
- collectible: {
20
- order: mockOrder,
21
- listing: { ...mockOrder, side: OrderSide.listing },
22
- offer: { ...mockOrder, side: OrderSide.offer },
23
- metadata: {
24
- ...mockTokenMetadata,
25
- tokenId: mockTokenMetadata.tokenId as string,
26
- assets: mockTokenMetadata.assets
27
- ? mockTokenMetadata.assets.map((asset) => ({
28
- ...asset,
29
- tokenId: asset.tokenId || '',
30
- }))
31
- : undefined,
32
- },
33
- } as CollectibleOrder,
34
- balance: '100',
35
- balanceIsLoading: false,
36
- cardLoading: false,
37
- onCannotPerformAction: vi.fn(),
38
- assetSrcPrefixUrl: 'https://example.com/',
39
- orderbookKind: OrderbookKind.sequence_marketplace_v2,
40
- collectionType: ContractType.ERC721,
41
- };
42
-
43
- describe('CollectibleCard', () => {
44
- beforeEach(() => {
45
- vi.clearAllMocks();
46
- vi.restoreAllMocks();
47
-
48
- const useCurrencySpy = vi.spyOn(hooks, 'useCurrency');
49
- useCurrencySpy.mockReturnValue({
50
- data: TEST_CURRENCY,
51
- } as ReturnType<typeof hooks.useCurrency>);
52
- });
53
-
54
- it('Renders correctly with valid props and shows proper collectible details', () => {
55
- render(<CollectibleCard {...defaultProps} />);
56
-
57
- expect(screen.getByText('Mock NFT')).toBeInTheDocument();
58
- expect(screen.getByText('1 TEST')).toBeInTheDocument();
59
- // there is an offer
60
- expect(screen.getByTitle('Notification Bell')).toBeInTheDocument();
61
- expect(screen.getByRole('img', { name: 'Mock NFT' })).toHaveAttribute(
62
- 'src',
63
- defaultProps.assetSrcPrefixUrl + defaultProps.collectible.metadata.image,
64
- );
65
- });
66
-
67
- it('Handles loading state by showing skeleton component', () => {
68
- render(<CollectibleCard {...defaultProps} cardLoading={true} />);
69
- expect(screen.getByTestId('collectible-card-skeleton')).toBeInTheDocument();
70
- });
71
-
72
- it('Triggers appropriate callbacks when collectible or action buttons are clicked', () => {
73
- const onCollectibleClick = vi.fn();
74
- const onOfferClick = vi.fn();
75
-
76
- render(
77
- <CollectibleCard
78
- {...defaultProps}
79
- onCollectibleClick={onCollectibleClick}
80
- onOfferClick={onOfferClick}
81
- />,
82
- );
83
-
84
- const notificationBell = screen.getByRole('button', {
85
- name: 'Notification Bell',
86
- });
87
- fireEvent.click(notificationBell);
88
- expect(onOfferClick).toHaveBeenCalled();
89
-
90
- const collectibleCard = screen.getByTestId('collectible-card');
91
- fireEvent.click(collectibleCard);
92
- expect(onCollectibleClick).toHaveBeenCalled();
93
- });
94
- });
@@ -1,136 +0,0 @@
1
- import { TEST_CURRENCY } from '@test/const';
2
- import { render, screen } from '@test/test-utils';
3
- import { describe, expect, it, vi } from 'vitest';
4
- import { ContractType } from '../../../../_internal';
5
- import { mockOrder } from '../../../../_internal/api/__mocks__/marketplace.msw';
6
- import { Footer } from '../Footer';
7
-
8
- const defaultProps = {
9
- name: 'Test',
10
- type: ContractType.ERC721,
11
- decimals: 18,
12
- onOfferClick: vi.fn(),
13
- highestOffer: mockOrder,
14
- lowestOffer: mockOrder,
15
- lowestListingPriceAmount: '100',
16
- lowestListingCurrency: TEST_CURRENCY,
17
- balance: '100',
18
- };
19
-
20
- describe('Footer', () => {
21
- it('Renders with basic props (name, type) correctly', () => {
22
- render(<Footer {...defaultProps} />);
23
-
24
- expect(screen.getByText('Test')).toBeInTheDocument();
25
- expect(screen.getByText('0.0001 TEST')).toBeInTheDocument();
26
-
27
- const notificationBell = screen.getByRole('button', {
28
- name: 'Notification Bell',
29
- });
30
- expect(notificationBell).toBeInTheDocument();
31
- });
32
-
33
- it('Truncates long names appropriately based on presence of offers', () => {
34
- const longName =
35
- 'This is a very long collectible name that needs truncation';
36
-
37
- // Test truncation with offer present (truncates to 13 chars + "...")
38
- render(
39
- <Footer {...defaultProps} name={longName} highestOffer={mockOrder} />,
40
- );
41
- expect(screen.getByText('This is a ver...')).toBeInTheDocument();
42
-
43
- // Test truncation without offer present (truncates to 17 chars + "...")
44
- render(
45
- <Footer {...defaultProps} name={longName} highestOffer={undefined} />,
46
- );
47
- expect(screen.getByText('This is a very lo...')).toBeInTheDocument();
48
-
49
- // Test short name with offer (no truncation needed)
50
- render(
51
- <Footer {...defaultProps} name="Short Name" highestOffer={mockOrder} />,
52
- );
53
- expect(screen.getByText('Short Name')).toBeInTheDocument();
54
- });
55
-
56
- it('Formats prices correctly for different scenarios (normal, overflow, underflow)', () => {
57
- // Test normal price formatting
58
- render(
59
- <Footer
60
- {...defaultProps}
61
- lowestListingPriceAmount="1000000000000000000" // 1 TOKEN in wei
62
- />,
63
- );
64
- expect(screen.getByText('1 TEST')).toBeInTheDocument();
65
-
66
- // Test small number formatting (shows more decimals)
67
- render(
68
- <Footer
69
- {...defaultProps}
70
- lowestListingPriceAmount="5000000000000000" // 0.005 TOKEN in wei
71
- />,
72
- );
73
- expect(screen.getByText('0.005 TEST')).toBeInTheDocument();
74
-
75
- // Test underflow price (< 0.0001)
76
- render(
77
- <Footer
78
- {...defaultProps}
79
- lowestListingPriceAmount="10000000000000" // 0.00001 TOKEN in wei
80
- />,
81
- );
82
- // Should display minimum price with chevron icon
83
- expect(screen.getByText('0.0001 TEST')).toBeInTheDocument();
84
-
85
- // Test overflow price (> 100,000,000)
86
- render(
87
- <Footer
88
- {...defaultProps}
89
- lowestListingPriceAmount="100000000000000000000000000" // 100M+ TOKEN in wei
90
- />,
91
- );
92
- // Should display maximum price with chevron icon
93
- expect(screen.getByText('100,000,000 TEST')).toBeInTheDocument();
94
- });
95
-
96
- it("Displays 'Not listed yet' when no listing price is provided", () => {
97
- // Create props without listing price information
98
- const propsWithoutListing = {
99
- ...defaultProps,
100
- lowestListingPriceAmount: undefined,
101
- lowestListingCurrency: undefined,
102
- };
103
-
104
- render(<Footer {...propsWithoutListing} />);
105
-
106
- // Verify "Not listed yet" text is displayed
107
- expect(screen.getByText('Not listed yet')).toBeInTheDocument();
108
- });
109
-
110
- it('Shows proper token balance information for ERC721 vs ERC1155 tokens', () => {
111
- // Test ERC721 token display
112
- render(<Footer {...defaultProps} type={ContractType.ERC721} />);
113
- expect(screen.getByText('ERC-721')).toBeInTheDocument();
114
-
115
- // Test ERC1155 token display without balance
116
- render(
117
- <Footer
118
- {...defaultProps}
119
- type={ContractType.ERC1155}
120
- balance={undefined}
121
- />,
122
- );
123
- expect(screen.getByText('ERC-1155')).toBeInTheDocument();
124
-
125
- // Test ERC1155 token display with balance
126
- render(
127
- <Footer
128
- {...defaultProps}
129
- type={ContractType.ERC1155}
130
- balance="1000000000000000000"
131
- decimals={18}
132
- />,
133
- );
134
- expect(screen.getByText('Owned: 1')).toBeInTheDocument();
135
- });
136
- });