@0xsequence/marketplace-sdk 0.8.11 → 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 (404) hide show
  1. package/CHANGELOG.md +166 -0
  2. package/dist/CartIcon-Bll1rbxv.js +141 -0
  3. package/dist/CartIcon-Bll1rbxv.js.map +1 -0
  4. package/dist/CollectibleCard-CLQTl0_6.d.ts +8 -0
  5. package/dist/_internal-69NEWNUE.js +34 -0
  6. package/dist/_internal-69NEWNUE.js.map +1 -0
  7. package/dist/abi-BKyRjVcZ.js +0 -0
  8. package/dist/{alien_swap-2B65TDGT.js → alien_swap-B_76IMma.js} +5 -5
  9. package/dist/alien_swap-B_76IMma.js.map +1 -0
  10. package/dist/api-1KFxYh7o.js +232 -0
  11. package/dist/api-1KFxYh7o.js.map +1 -0
  12. package/dist/{aqua-xyz-WMYQLAIS.js → aqua-xyz-CMN_TFY5.js} +5 -5
  13. package/dist/aqua-xyz-CMN_TFY5.js.map +1 -0
  14. package/dist/{aura-V22RV5OG.js → aura-Cye_TuHj.js} +5 -5
  15. package/dist/aura-Cye_TuHj.js.map +1 -0
  16. package/dist/{blur-GE5QOMCM.js → blur-DWDMyMpK.js} +5 -5
  17. package/dist/blur-DWDMyMpK.js.map +1 -0
  18. package/dist/builder-api-BQvzykoU.js +28 -0
  19. package/dist/builder-api-BQvzykoU.js.map +1 -0
  20. package/dist/builder-api-DoK3907S.d.ts +12 -0
  21. package/dist/builder.gen-CxP9NT1p.js +303 -0
  22. package/dist/builder.gen-CxP9NT1p.js.map +1 -0
  23. package/dist/{coinbase-NLHJMGAP.js → coinbase-ByA_XRB0.js} +5 -5
  24. package/dist/coinbase-ByA_XRB0.js.map +1 -0
  25. package/dist/{element-2LGTYYSP.js → element-b77CyXIZ.js} +5 -5
  26. package/dist/element-b77CyXIZ.js.map +1 -0
  27. package/dist/{foundation-BPN66ZTN.js → foundation-DbOrKP9Y.js} +5 -5
  28. package/dist/foundation-DbOrKP9Y.js.map +1 -0
  29. package/dist/index-1bezgsFq.d.ts +1129 -0
  30. package/dist/index-4-kfOFdx.d.ts +22 -0
  31. package/dist/index-BEYefG1G.d.ts +24 -0
  32. package/dist/index-BHiSG-Yi.d.ts +312 -0
  33. package/dist/index-BIMIpDiI.d.ts +188 -0
  34. package/dist/index-BQW0PUkQ.d.ts +3973 -0
  35. package/dist/index-BfH21xmk.d.ts +117 -0
  36. package/dist/index-BjIwVzc4.d.ts +1057 -0
  37. package/dist/index-C39K_8SG.d.ts +1 -0
  38. package/dist/index-CN8puQQJ.d.ts +24 -0
  39. package/dist/index-Cl7PQOGu.d.ts +102 -0
  40. package/dist/index-D5v5iluA.d.ts +809 -0
  41. package/dist/index-DXMfTZ1F.d.ts +7 -0
  42. package/dist/index-DafWjEb4.d.ts +65 -0
  43. package/dist/index-ij9f8GAA.d.ts +1 -0
  44. package/dist/index.css +384 -371
  45. package/dist/index.d.ts +10 -29
  46. package/dist/index.js +13 -104
  47. package/dist/{looks-rare-MZRSOPT4.js → looks-rare-C1VqNcSM.js} +5 -5
  48. package/dist/looks-rare-C1VqNcSM.js.map +1 -0
  49. package/dist/{magic-eden-PUBL6KWW.js → magic-eden-ea_AGCZr.js} +5 -5
  50. package/dist/magic-eden-ea_AGCZr.js.map +1 -0
  51. package/dist/{manifold-GA445YJ6.js → manifold-8y8J2sjT.js} +5 -5
  52. package/dist/manifold-8y8J2sjT.js.map +1 -0
  53. package/dist/marketplace-logos-CSeGcPW4.js +50 -0
  54. package/dist/marketplace-logos-CSeGcPW4.js.map +1 -0
  55. package/dist/marketplace-nwnZv9Cb.js +1913 -0
  56. package/dist/marketplace-nwnZv9Cb.js.map +1 -0
  57. package/dist/marketplace.gen-Dqk8vRmD.js +1068 -0
  58. package/dist/marketplace.gen-Dqk8vRmD.js.map +1 -0
  59. package/dist/marketplaceConfig-D2MYFqll.js +71 -0
  60. package/dist/marketplaceConfig-D2MYFqll.js.map +1 -0
  61. package/dist/{mintify-UMC5PTKC.js → mintify-LA68TzWg.js} +5 -5
  62. package/dist/mintify-LA68TzWg.js.map +1 -0
  63. package/dist/{nftx-AX3CY3IE.js → nftx-D3Tc8nzd.js} +5 -5
  64. package/dist/nftx-D3Tc8nzd.js.map +1 -0
  65. package/dist/{okx-GNVLAE2R.js → okx-hbqg6oIJ.js} +5 -5
  66. package/dist/okx-hbqg6oIJ.js.map +1 -0
  67. package/dist/{open-sea-KI43GVEB.js → open-sea-BccuK8-t.js} +5 -5
  68. package/dist/open-sea-BccuK8-t.js.map +1 -0
  69. package/dist/options-DCi6_23w.js +34 -0
  70. package/dist/options-DCi6_23w.js.map +1 -0
  71. package/dist/primary-sale-Cw95phYC.js +1264 -0
  72. package/dist/primary-sale-Cw95phYC.js.map +1 -0
  73. package/dist/queries-DPvwtnO7.js +486 -0
  74. package/dist/queries-DPvwtnO7.js.map +1 -0
  75. package/dist/{rarible-2J3MMZJ7.js → rarible-BgTwwj9g.js} +5 -5
  76. package/dist/rarible-BgTwwj9g.js.map +1 -0
  77. package/dist/react/_internal/api/index.d.ts +4 -86
  78. package/dist/react/_internal/api/index.js +7 -150
  79. package/dist/react/_internal/databeat/index.d.ts +45 -41
  80. package/dist/react/_internal/databeat/index.js +23 -27
  81. package/dist/react/_internal/index.d.ts +7 -76
  82. package/dist/react/_internal/index.js +9 -176
  83. package/dist/react/_internal/wagmi/index.d.ts +4 -17
  84. package/dist/react/_internal/wagmi/index.js +5 -14
  85. package/dist/react/hooks/index.d.ts +17 -3652
  86. package/dist/react/hooks/index.js +23 -153
  87. package/dist/react/hooks/options/index.d.ts +5 -8
  88. package/dist/react/hooks/options/index.js +11 -21
  89. package/dist/react/index.d.ts +37 -33
  90. package/dist/react/index.js +23 -193
  91. package/dist/react/queries/index.d.ts +8 -26
  92. package/dist/react/queries/index.js +18 -51
  93. package/dist/react/ssr/index.d.ts +19 -13
  94. package/dist/react/ssr/index.js +29 -28
  95. package/dist/react/ssr/index.js.map +1 -1
  96. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +10 -0
  97. package/dist/react/ui/components/marketplace-collectible-card/index.js +23 -0
  98. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +8 -0
  99. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +10 -0
  100. package/dist/react/ui/components/marketplace-logos/index.d.ts +26 -24
  101. package/dist/react/ui/components/marketplace-logos/index.js +3 -45
  102. package/dist/react/ui/icons/index.d.ts +1 -2
  103. package/dist/react/ui/icons/index.js +10 -14
  104. package/dist/react/ui/index.d.ts +10 -116
  105. package/dist/react/ui/index.js +23 -41
  106. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +59 -33
  107. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -31
  108. package/dist/react-BG7o4PId.js +8351 -0
  109. package/dist/react-BG7o4PId.js.map +1 -0
  110. package/dist/react-BbHBl6gg.css +80 -0
  111. package/dist/react-BbHBl6gg.css.map +1 -0
  112. package/dist/sdk-config-DJzxVPld.d.ts +1535 -0
  113. package/dist/{sequence-TGLUFEPQ.js → sequence-Do3kzb4J.js} +5 -5
  114. package/dist/sequence-Do3kzb4J.js.map +1 -0
  115. package/dist/src-Dz2CfBL0.js +8 -0
  116. package/dist/src-Dz2CfBL0.js.map +1 -0
  117. package/dist/{sudo-swap-M2O6E3TE.js → sudo-swap-B6vPKxBz.js} +5 -5
  118. package/dist/sudo-swap-B6vPKxBz.js.map +1 -0
  119. package/dist/{super-rare-UU2U4LIN.js → super-rare-eCm1SE6O.js} +5 -5
  120. package/dist/super-rare-eCm1SE6O.js.map +1 -0
  121. package/dist/token-CO5llIla.js +1312 -0
  122. package/dist/token-CO5llIla.js.map +1 -0
  123. package/dist/transaction-CcVViHEL.js +97 -0
  124. package/dist/transaction-CcVViHEL.js.map +1 -0
  125. package/dist/types/index.d.ts +3 -13
  126. package/dist/types/index.js +5 -44
  127. package/dist/types-BIJOaL4j.d.ts +68 -0
  128. package/dist/types-DwWE6xOF.js +13 -0
  129. package/dist/types-DwWE6xOF.js.map +1 -0
  130. package/dist/useCollection-C-mclKU0.d.ts +66 -0
  131. package/dist/utils/abi/index.d.ts +5 -3
  132. package/dist/utils/abi/index.js +6 -26
  133. package/dist/utils/abi/marketplace/index.d.ts +2 -805
  134. package/dist/utils/abi/marketplace/index.js +3 -11
  135. package/dist/utils/abi/primary-sale/index.d.ts +2 -1054
  136. package/dist/utils/abi/primary-sale/index.js +3 -9
  137. package/dist/utils/abi/token/index.d.ts +2 -1125
  138. package/dist/utils/abi/token/index.js +3 -11
  139. package/dist/utils/index.d.ts +8 -91
  140. package/dist/utils/index.js +11 -57
  141. package/dist/utils-BFdxaToy.js +216 -0
  142. package/dist/utils-BFdxaToy.js.map +1 -0
  143. package/dist/utils-Cat9_pef.js +44 -0
  144. package/dist/utils-Cat9_pef.js.map +1 -0
  145. package/dist/wagmi-DRctYEk6.js +159 -0
  146. package/dist/wagmi-DRctYEk6.js.map +1 -0
  147. package/dist/{x2y2-3W5BBMZC.js → x2y2-DD17tT91.js} +5 -5
  148. package/dist/x2y2-DD17tT91.js.map +1 -0
  149. package/dist/{zora-6EY6FUH6.js → zora-BpSG9UzS.js} +5 -5
  150. package/dist/zora-BpSG9UzS.js.map +1 -0
  151. package/package.json +10 -8
  152. package/src/index.ts +0 -1
  153. package/src/react/_internal/api/__mocks__/indexer.msw.ts +1 -0
  154. package/src/react/_internal/api/builder.gen.ts +0 -1
  155. package/src/react/_internal/api/marketplace.gen.ts +467 -26
  156. package/src/react/_internal/api/services.ts +42 -49
  157. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +5 -5
  158. package/src/react/_internal/wagmi/create-config.ts +7 -2
  159. package/src/react/_internal/wagmi/get-connectors.ts +5 -2
  160. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +161 -2
  161. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +44 -6
  162. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +7 -4
  163. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +225 -0
  164. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +3 -3
  165. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +2 -3
  166. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +0 -16
  167. package/src/react/hooks/__tests__/useInventory.test.tsx +0 -36
  168. package/src/react/hooks/__tests__/useListCollections.test.tsx +1 -1
  169. package/src/react/hooks/index.ts +7 -0
  170. package/src/react/hooks/useBalanceOfCollectible.tsx +13 -9
  171. package/src/react/hooks/useCancelTransactionSteps.tsx +5 -1
  172. package/src/react/hooks/useCheckoutOptions.tsx +2 -1
  173. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +67 -0
  174. package/src/react/hooks/useCollectionDetails.tsx +22 -7
  175. package/src/react/hooks/useCountListingsForCollectible.tsx +5 -4
  176. package/src/react/hooks/useCountOfCollectables.tsx +10 -7
  177. package/src/react/hooks/useCountOffersForCollectible.tsx +5 -4
  178. package/src/react/hooks/useCurrency.tsx +2 -2
  179. package/src/react/hooks/useERC721SaleMintedTokens.tsx +67 -0
  180. package/src/react/hooks/useFloorOrder.tsx +5 -2
  181. package/src/react/hooks/useGenerateCancelTransaction.tsx +13 -6
  182. package/src/react/hooks/useGenerateListingTransaction.tsx +15 -5
  183. package/src/react/hooks/useGenerateOfferTransaction.tsx +15 -6
  184. package/src/react/hooks/useGenerateSellTransaction.tsx +15 -6
  185. package/src/react/hooks/useGetTokenSuppliesMap.ts +5 -0
  186. package/src/react/hooks/useInventory.tsx +7 -5
  187. package/src/react/hooks/useList1155ShopCardData.tsx +130 -0
  188. package/src/react/hooks/useList721ShopCardData.tsx +130 -0
  189. package/src/react/hooks/useListBalances.tsx +6 -9
  190. package/src/react/hooks/useListCollectibleActivities.tsx +2 -1
  191. package/src/react/hooks/useListCollectibles.tsx +1 -14
  192. package/src/react/hooks/useListCollectiblesPaginated.tsx +8 -5
  193. package/src/react/hooks/useListCollectionActivities.tsx +2 -1
  194. package/src/react/hooks/useListCollections.tsx +1 -1
  195. package/src/react/hooks/useListListingsForCollectible.tsx +2 -1
  196. package/src/react/hooks/useListMarketCardData.tsx +157 -0
  197. package/src/react/hooks/useListOffersForCollectible.tsx +2 -1
  198. package/src/react/hooks/useListPrimarySaleItems.ts +42 -0
  199. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +134 -0
  200. package/src/react/queries/highestOffer.ts +6 -4
  201. package/src/react/queries/inventory.ts +35 -1
  202. package/src/react/queries/listBalances.ts +14 -30
  203. package/src/react/queries/listCollectibles.ts +60 -7
  204. package/src/react/queries/listCollections.ts +8 -2
  205. package/src/react/queries/listTokenMetadata.ts +6 -1
  206. package/src/react/queries/lowestListing.ts +6 -4
  207. package/src/react/queries/marketCurrencies.ts +11 -7
  208. package/src/react/queries/marketplaceConfig.ts +55 -80
  209. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +44 -6
  210. package/src/react/ssr/__tests__/create-ssr-client.test.ts +0 -3
  211. package/src/react/ssr/create-ssr-client.ts +5 -10
  212. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +47 -13
  213. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +1 -1
  214. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +28 -15
  215. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +1 -1
  216. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +1 -1
  217. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +1 -1
  218. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +78 -15
  219. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +1 -1
  220. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +1 -1
  221. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +17 -0
  222. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +24 -0
  223. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +231 -0
  224. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +76 -0
  225. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +55 -0
  226. package/src/react/ui/components/marketplace-collectible-card/index.ts +3 -0
  227. package/src/react/ui/components/marketplace-collectible-card/types.ts +95 -0
  228. package/src/react/ui/components/marketplace-collectible-card/utils/formatPrice.ts +45 -0
  229. package/src/react/ui/components/marketplace-collectible-card/utils/index.ts +2 -0
  230. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +39 -0
  231. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +124 -0
  232. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +105 -0
  233. package/src/react/ui/components/{collectible-card/media → media}/Media.tsx +42 -25
  234. package/src/react/ui/components/{collectible-card/media → media}/types.ts +3 -1
  235. package/src/react/ui/index.ts +5 -2
  236. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +554 -0
  237. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +385 -0
  238. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +272 -0
  239. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +112 -0
  240. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +117 -13
  241. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -7
  242. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +157 -0
  243. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +136 -0
  244. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +184 -0
  245. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +121 -0
  246. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +85 -0
  247. package/src/react/ui/modals/BuyModal/components/ERC721ShopModal.tsx +86 -0
  248. package/src/react/ui/modals/BuyModal/components/Modal.tsx +14 -0
  249. package/src/react/ui/modals/BuyModal/components/types.ts +8 -0
  250. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +4 -4
  251. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +379 -0
  252. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +253 -0
  253. package/src/react/ui/modals/BuyModal/hooks/__tests__/{useFees.test.tsx → useMarketPlatformFee.test.tsx} +10 -11
  254. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +62 -44
  255. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +73 -0
  256. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +196 -0
  257. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +74 -18
  258. package/src/react/ui/modals/BuyModal/hooks/useMarketPlatformFee.ts +53 -0
  259. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +27 -12
  260. package/src/react/ui/modals/BuyModal/store.ts +147 -13
  261. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -1
  262. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +5 -3
  263. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +2 -1
  264. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +5 -3
  265. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +4 -3
  266. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +6 -3
  267. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +11 -7
  268. package/src/react/ui/modals/SuccessfulPurchaseModal/index.tsx +34 -28
  269. package/src/react/ui/modals/SuccessfulPurchaseModal/store.ts +71 -0
  270. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +0 -1
  271. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +105 -108
  272. package/src/react/ui/modals/_internal/components/actionModal/store.ts +45 -12
  273. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +12 -8
  274. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +35 -33
  275. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +61 -32
  276. package/src/react/ui/modals/modal-provider.tsx +1 -1
  277. package/src/types/buyModalErrors.ts +438 -0
  278. package/src/types/index.ts +4 -1
  279. package/src/types/new-marketplace-types.ts +6 -21
  280. package/src/types/sdk-config.ts +18 -24
  281. package/src/types/types.ts +16 -0
  282. package/src/utils/_internal/error/transaction.ts +36 -1
  283. package/tsconfig.json +1 -1
  284. package/tsconfig.tsbuildinfo +1 -1
  285. package/tsdown.config.ts +25 -0
  286. package/.ctirc +0 -32
  287. package/dist/alien_swap-2B65TDGT.js.map +0 -1
  288. package/dist/aqua-xyz-WMYQLAIS.js.map +0 -1
  289. package/dist/aura-V22RV5OG.js.map +0 -1
  290. package/dist/blur-GE5QOMCM.js.map +0 -1
  291. package/dist/chunk-2PSNAIAT.js +0 -1
  292. package/dist/chunk-2PSNAIAT.js.map +0 -1
  293. package/dist/chunk-5C6ZZ6WX.js +0 -130
  294. package/dist/chunk-5C6ZZ6WX.js.map +0 -1
  295. package/dist/chunk-5O44EPXZ.js +0 -207
  296. package/dist/chunk-5O44EPXZ.js.map +0 -1
  297. package/dist/chunk-6CTFVBKU.js +0 -1
  298. package/dist/chunk-6CTFVBKU.js.map +0 -1
  299. package/dist/chunk-6OPMUCGX.js +0 -42
  300. package/dist/chunk-6OPMUCGX.js.map +0 -1
  301. package/dist/chunk-FUM4OGOQ.js +0 -1027
  302. package/dist/chunk-FUM4OGOQ.js.map +0 -1
  303. package/dist/chunk-L6KWLCER.js +0 -32
  304. package/dist/chunk-L6KWLCER.js.map +0 -1
  305. package/dist/chunk-LAP2CKLN.js +0 -485
  306. package/dist/chunk-LAP2CKLN.js.map +0 -1
  307. package/dist/chunk-LECCEZAO.js +0 -11
  308. package/dist/chunk-LECCEZAO.js.map +0 -1
  309. package/dist/chunk-N7SQWS2R.js +0 -38
  310. package/dist/chunk-N7SQWS2R.js.map +0 -1
  311. package/dist/chunk-NX52D7NX.js +0 -135
  312. package/dist/chunk-NX52D7NX.js.map +0 -1
  313. package/dist/chunk-OAOONM4S.js +0 -1787
  314. package/dist/chunk-OAOONM4S.js.map +0 -1
  315. package/dist/chunk-Q3ECVC4F.js +0 -811
  316. package/dist/chunk-Q3ECVC4F.js.map +0 -1
  317. package/dist/chunk-QY52UADF.js +0 -107
  318. package/dist/chunk-QY52UADF.js.map +0 -1
  319. package/dist/chunk-TNAR3XEF.js +0 -8729
  320. package/dist/chunk-TNAR3XEF.js.map +0 -1
  321. package/dist/chunk-XABYNWXO.js +0 -549
  322. package/dist/chunk-XABYNWXO.js.map +0 -1
  323. package/dist/chunk-XX4EVWBF.js +0 -1292
  324. package/dist/chunk-XX4EVWBF.js.map +0 -1
  325. package/dist/chunk-YB5UUF2G.js +0 -11
  326. package/dist/chunk-YB5UUF2G.js.map +0 -1
  327. package/dist/chunk-YWGFI4PN.js +0 -217
  328. package/dist/chunk-YWGFI4PN.js.map +0 -1
  329. package/dist/coinbase-NLHJMGAP.js.map +0 -1
  330. package/dist/create-config-DLMvMTkZ.d.ts +0 -8
  331. package/dist/element-2LGTYYSP.js.map +0 -1
  332. package/dist/foundation-BPN66ZTN.js.map +0 -1
  333. package/dist/get-query-client-D46hbjk6.d.ts +0 -5
  334. package/dist/index.css.map +0 -1
  335. package/dist/index.js.map +0 -1
  336. package/dist/looks-rare-MZRSOPT4.js.map +0 -1
  337. package/dist/magic-eden-PUBL6KWW.js.map +0 -1
  338. package/dist/manifold-GA445YJ6.js.map +0 -1
  339. package/dist/marketCurrencies-enNVYwBk.d.ts +0 -277
  340. package/dist/marketplace.gen-D24veUQs.d.ts +0 -1073
  341. package/dist/marketplaceConfig-BwNAbLPw.d.ts +0 -21
  342. package/dist/mintify-UMC5PTKC.js.map +0 -1
  343. package/dist/new-marketplace-types-BCw19X9S.d.ts +0 -102
  344. package/dist/nftx-AX3CY3IE.js.map +0 -1
  345. package/dist/okx-GNVLAE2R.js.map +0 -1
  346. package/dist/open-sea-KI43GVEB.js.map +0 -1
  347. package/dist/rarible-2J3MMZJ7.js.map +0 -1
  348. package/dist/react/_internal/api/index.js.map +0 -1
  349. package/dist/react/_internal/databeat/index.css +0 -2764
  350. package/dist/react/_internal/databeat/index.css.map +0 -1
  351. package/dist/react/_internal/databeat/index.js.map +0 -1
  352. package/dist/react/_internal/index.js.map +0 -1
  353. package/dist/react/_internal/wagmi/index.js.map +0 -1
  354. package/dist/react/hooks/index.css +0 -2764
  355. package/dist/react/hooks/index.css.map +0 -1
  356. package/dist/react/hooks/index.js.map +0 -1
  357. package/dist/react/hooks/options/index.js.map +0 -1
  358. package/dist/react/index.css +0 -2764
  359. package/dist/react/index.css.map +0 -1
  360. package/dist/react/index.js.map +0 -1
  361. package/dist/react/queries/index.js.map +0 -1
  362. package/dist/react/ui/components/collectible-card/index.css +0 -2764
  363. package/dist/react/ui/components/collectible-card/index.css.map +0 -1
  364. package/dist/react/ui/components/collectible-card/index.d.ts +0 -71
  365. package/dist/react/ui/components/collectible-card/index.js +0 -27
  366. package/dist/react/ui/components/collectible-card/index.js.map +0 -1
  367. package/dist/react/ui/components/marketplace-logos/index.js.map +0 -1
  368. package/dist/react/ui/icons/index.js.map +0 -1
  369. package/dist/react/ui/index.css +0 -2764
  370. package/dist/react/ui/index.css.map +0 -1
  371. package/dist/react/ui/index.js.map +0 -1
  372. package/dist/react/ui/modals/_internal/components/actionModal/index.css +0 -2764
  373. package/dist/react/ui/modals/_internal/components/actionModal/index.css.map +0 -1
  374. package/dist/react/ui/modals/_internal/components/actionModal/index.js.map +0 -1
  375. package/dist/sdk-config-qorA0TgF.d.ts +0 -165
  376. package/dist/sequence-TGLUFEPQ.js.map +0 -1
  377. package/dist/services-WrshxCqc.d.ts +0 -23
  378. package/dist/sudo-swap-M2O6E3TE.js.map +0 -1
  379. package/dist/super-rare-UU2U4LIN.js.map +0 -1
  380. package/dist/types/index.js.map +0 -1
  381. package/dist/useCollection-YAdXfVO7.d.ts +0 -61
  382. package/dist/utils/abi/index.js.map +0 -1
  383. package/dist/utils/abi/marketplace/index.js.map +0 -1
  384. package/dist/utils/abi/primary-sale/index.js.map +0 -1
  385. package/dist/utils/abi/token/index.js.map +0 -1
  386. package/dist/utils/index.js.map +0 -1
  387. package/dist/x2y2-3W5BBMZC.js.map +0 -1
  388. package/dist/zora-6EY6FUH6.js.map +0 -1
  389. package/postcss.config.mjs +0 -5
  390. package/src/react/hooks/__tests__/__snapshots__/useRoyaltyPercentage.test.tsx.snap +0 -8
  391. package/src/react/ui/components/collectible-card/CollectibleCard.tsx +0 -170
  392. package/src/react/ui/components/collectible-card/Footer.tsx +0 -157
  393. package/src/react/ui/components/collectible-card/__tests__/CollectibleCard.test.tsx +0 -94
  394. package/src/react/ui/components/collectible-card/__tests__/Footer.test.tsx +0 -136
  395. package/src/react/ui/components/collectible-card/__tests__/Media.test.tsx +0 -264
  396. package/src/react/ui/components/collectible-card/index.ts +0 -2
  397. package/src/react/ui/modals/BuyModal/ERC1155QuantityModal.tsx +0 -130
  398. package/src/react/ui/modals/BuyModal/Modal.tsx +0 -124
  399. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +0 -104
  400. package/src/react/ui/modals/BuyModal/hooks/useFees.ts +0 -39
  401. package/src/react/ui/modals/SuccessfulPurchaseModal/_store.ts +0 -72
  402. package/tsup.config.ts +0 -23
  403. /package/src/react/ui/components/{collectible-card/media → media}/MediaSkeleton.tsx +0 -0
  404. /package/src/react/ui/components/{collectible-card/media → media}/utils.ts +0 -0
@@ -1,37 +1,98 @@
1
1
  'use client';
2
2
 
3
- import type { Hex } from 'viem';
4
- import { InvalidStepError } from '../../../../../../utils/_internal/error/transaction';
3
+ import type { Address } from 'viem';
4
+ import { CollectibleCardAction } from '../../../../../../types';
5
5
  import type { Order, OrderbookKind } from '../../../../../_internal';
6
6
  import SvgCartIcon from '../../../../icons/CartIcon';
7
7
  import { useBuyModal } from '../../../../modals/BuyModal';
8
8
  import { useMakeOfferModal } from '../../../../modals/MakeOfferModal';
9
- import { CollectibleCardAction } from '../types';
10
9
  import { ActionButtonBody } from './ActionButtonBody';
11
10
 
12
- type NonOwnerActionsProps = {
11
+ type NonOwnerActionsBaseProps = {
13
12
  action: CollectibleCardAction;
14
13
  tokenId: string;
15
- collectionAddress: Hex;
14
+ collectionAddress: Address;
16
15
  chainId: number;
17
- orderbookKind?: OrderbookKind;
16
+ quantityDecimals?: number;
17
+ quantityRemaining?: number;
18
+ };
19
+
20
+ type ShopNonOwnerActionsProps = NonOwnerActionsBaseProps & {
21
+ marketplaceType: 'shop';
22
+ salesContractAddress: Address;
23
+ salePrice: {
24
+ amount: string;
25
+ currencyAddress: Address;
26
+ };
27
+ lowestListing?: never;
28
+ orderbookKind?: never;
29
+ };
30
+
31
+ type MarketNonOwnerActionsProps = NonOwnerActionsBaseProps & {
32
+ marketplaceType: 'market';
18
33
  lowestListing?: Order;
34
+ orderbookKind?: OrderbookKind;
35
+ salesContractAddress?: never;
36
+ salePrice?: never;
19
37
  };
20
38
 
21
- export function NonOwnerActions({
22
- action,
23
- tokenId,
24
- collectionAddress,
25
- chainId,
26
- orderbookKind,
27
- lowestListing,
28
- }: NonOwnerActionsProps) {
39
+ type NonOwnerActionsProps =
40
+ | ShopNonOwnerActionsProps
41
+ | MarketNonOwnerActionsProps;
42
+
43
+ export function NonOwnerActions(props: NonOwnerActionsProps) {
44
+ const {
45
+ action,
46
+ tokenId,
47
+ collectionAddress,
48
+ chainId,
49
+ quantityDecimals,
50
+ quantityRemaining,
51
+ marketplaceType,
52
+ } = props;
53
+
29
54
  const { show: showBuyModal } = useBuyModal();
30
55
  const { show: showMakeOfferModal } = useMakeOfferModal();
31
56
 
57
+ if (marketplaceType === 'shop') {
58
+ const { salesContractAddress, salePrice } = props;
59
+
60
+ return (
61
+ <ActionButtonBody
62
+ action={CollectibleCardAction.BUY}
63
+ tokenId={tokenId}
64
+ label="Buy now"
65
+ onClick={() =>
66
+ showBuyModal({
67
+ chainId,
68
+ collectionAddress,
69
+ salesContractAddress,
70
+ items: [
71
+ {
72
+ tokenId,
73
+ quantity: '1',
74
+ },
75
+ ],
76
+ marketplaceType: 'shop',
77
+ salePrice: {
78
+ amount: salePrice.amount,
79
+ currencyAddress: salePrice.currencyAddress,
80
+ },
81
+ quantityDecimals: quantityDecimals ?? 0,
82
+ quantityRemaining: quantityRemaining ?? 0,
83
+ })
84
+ }
85
+ icon={SvgCartIcon}
86
+ />
87
+ );
88
+ }
89
+
32
90
  if (action === CollectibleCardAction.BUY) {
91
+ const { lowestListing } = props;
33
92
  if (!lowestListing) {
34
- throw new InvalidStepError('BUY', 'lowestListing is required');
93
+ throw new Error(
94
+ 'lowestListing is required for BUY action and MARKET card type',
95
+ );
35
96
  }
36
97
 
37
98
  return (
@@ -46,6 +107,7 @@ export function NonOwnerActions({
46
107
  collectibleId: tokenId,
47
108
  orderId: lowestListing.orderId,
48
109
  marketplace: lowestListing.marketplace,
110
+ marketplaceType: 'market',
49
111
  })
50
112
  }
51
113
  icon={SvgCartIcon}
@@ -54,6 +116,7 @@ export function NonOwnerActions({
54
116
  }
55
117
 
56
118
  if (action === CollectibleCardAction.OFFER) {
119
+ const { orderbookKind } = props;
57
120
  return (
58
121
  <ActionButtonBody
59
122
  action={CollectibleCardAction.OFFER}
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
 
3
3
  import type { Hex } from 'viem';
4
+ import { CollectibleCardAction } from '../../../../../../types';
4
5
  import type { Order, OrderbookKind } from '../../../../../_internal';
5
6
  import { useCreateListingModal } from '../../../../modals/CreateListingModal';
6
7
  import { useSellModal } from '../../../../modals/SellModal';
7
8
  import { useTransferModal } from '../../../../modals/TransferModal';
8
- import { CollectibleCardAction } from '../types';
9
9
  import { ActionButtonBody } from './ActionButtonBody';
10
10
 
11
11
  type OwnerActionsProps = {
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
 
3
3
  import { useEffect } from 'react';
4
+ import { CollectibleCardAction } from '../../../../../../types';
4
5
  import { useWallet } from '../../../../../_internal/wallet/useWallet';
5
6
  import {
6
7
  actionButtonStore,
7
8
  clearPendingAction,
8
9
  executePendingActionIfExists,
9
10
  } from '../store';
10
- import { CollectibleCardAction } from '../types';
11
11
 
12
12
  type UseActionButtonLogicProps = {
13
13
  tokenId: string;
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import type { CollectibleCardProps } from './types';
4
+ import { MarketCard } from './variants/MarketCard';
5
+
6
+ import { ShopCard } from './variants/ShopCard';
7
+
8
+ export function CollectibleCard(props: CollectibleCardProps) {
9
+ switch (props.marketplaceType) {
10
+ case 'shop':
11
+ return <ShopCard {...props} />;
12
+ // biome-ignore lint/complexity/noUselessSwitchCase: <explanation>
13
+ case 'market':
14
+ default:
15
+ return <MarketCard {...props} />;
16
+ }
17
+ }
@@ -0,0 +1,24 @@
1
+ import { Skeleton } from '@0xsequence/design-system';
2
+
3
+ export function MarketplaceCollectibleCardSkeleton() {
4
+ return (
5
+ <div
6
+ data-testid="collectible-card-skeleton"
7
+ 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"
8
+ >
9
+ <div className="relative aspect-square overflow-hidden bg-background-secondary">
10
+ <Skeleton
11
+ size="lg"
12
+ className="absolute inset-0 h-full w-full animate-shimmer"
13
+ style={{
14
+ borderRadius: 0,
15
+ }}
16
+ />
17
+ </div>
18
+ <div className="mt-2 flex flex-col gap-2 px-4 pb-4">
19
+ <Skeleton size="lg" className="animate-shimmer" />
20
+ <Skeleton size="sm" className="animate-shimmer" />
21
+ </div>
22
+ </div>
23
+ );
24
+ }
@@ -0,0 +1,231 @@
1
+ 'use client';
2
+
3
+ import {
4
+ ChevronLeftIcon,
5
+ ChevronRightIcon,
6
+ IconButton,
7
+ Image,
8
+ Text,
9
+ cn,
10
+ } from '@0xsequence/design-system';
11
+ import { formatUnits } from 'viem';
12
+ import type { MarketplaceType } from '../../../../types';
13
+ import { ContractType, type Currency, type Order } from '../../../_internal';
14
+ import SvgBellIcon from '../../icons/BellIcon';
15
+ import { formatPriceNumber, getSupplyStatusText } from './utils';
16
+
17
+ const formatPrice = (amount: string, currency: Currency): React.ReactNode => {
18
+ const { formattedNumber, isUnderflow, isOverflow } = formatPriceNumber(
19
+ amount,
20
+ currency.decimals,
21
+ );
22
+
23
+ if (isUnderflow) {
24
+ return (
25
+ <div className="flex items-center">
26
+ <ChevronLeftIcon className="h-3 w-3 text-text-100" />
27
+ <Text>{`${formattedNumber} ${currency.symbol}`}</Text>
28
+ </div>
29
+ );
30
+ }
31
+
32
+ if (isOverflow) {
33
+ return (
34
+ <div className="flex items-center">
35
+ <ChevronRightIcon className="h-3 w-3 text-text-100" />
36
+ <Text>{`${formattedNumber} ${currency.symbol}`}</Text>
37
+ </div>
38
+ );
39
+ }
40
+
41
+ return (
42
+ <div className="flex items-center gap-1">
43
+ <Text>
44
+ {formattedNumber} {currency.symbol}
45
+ </Text>
46
+ </div>
47
+ );
48
+ };
49
+
50
+ type FooterProps = {
51
+ name: string;
52
+ type?: ContractType;
53
+ decimals?: number;
54
+ onOfferClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
55
+ highestOffer?: Order;
56
+ lowestListingPriceAmount?: string;
57
+ lowestListingCurrency?: Currency;
58
+ balance?: string;
59
+ quantityInitial: string | undefined;
60
+ quantityRemaining: string | undefined;
61
+ marketplaceType: MarketplaceType;
62
+ salePriceAmount?: string;
63
+ salePriceCurrency?: Currency;
64
+ };
65
+
66
+ export const Footer = ({
67
+ name,
68
+ type,
69
+ decimals,
70
+ onOfferClick,
71
+ highestOffer,
72
+ lowestListingPriceAmount,
73
+ lowestListingCurrency,
74
+ balance,
75
+ quantityInitial,
76
+ quantityRemaining,
77
+ marketplaceType,
78
+ salePriceAmount,
79
+ salePriceCurrency,
80
+ }: FooterProps) => {
81
+ const listed = !!lowestListingPriceAmount && !!lowestListingCurrency;
82
+ const isShop = marketplaceType === 'shop';
83
+ const isMarketplace = marketplaceType === 'market';
84
+
85
+ const displayName = (() => {
86
+ if (name.length > 15 && highestOffer && !isShop) {
87
+ return `${name.substring(0, 13)}...`;
88
+ }
89
+ if (name.length > 17 && !highestOffer && !isShop) {
90
+ return `${name.substring(0, 17)}...`;
91
+ }
92
+ return name;
93
+ })();
94
+
95
+ return (
96
+ <div className="relative flex flex-col items-start gap-2 whitespace-nowrap bg-background-primary p-4">
97
+ <div className="relative flex w-full items-center justify-between">
98
+ <Text
99
+ className={cn(
100
+ 'overflow-hidden text-ellipsis text-left font-body font-bold text-sm text-text-100',
101
+ isShop &&
102
+ (quantityInitial === undefined ||
103
+ quantityRemaining === undefined) &&
104
+ 'text-text-50',
105
+ )}
106
+ >
107
+ {displayName || 'Untitled'}
108
+ </Text>
109
+
110
+ {highestOffer && onOfferClick && !isShop && (
111
+ <IconButton
112
+ className="absolute top-0 right-0 h-[22px] w-[22px] hover:animate-bell-ring"
113
+ size="xs"
114
+ variant="primary"
115
+ onClick={(e) => {
116
+ onOfferClick?.(e);
117
+ }}
118
+ icon={(props) => <SvgBellIcon {...props} size="xs" />}
119
+ />
120
+ )}
121
+ </div>
122
+
123
+ <div
124
+ className={cn(
125
+ 'flex items-center gap-1',
126
+ isShop && !salePriceAmount && 'hidden',
127
+ isShop && type === ContractType.ERC721 && 'hidden',
128
+ )}
129
+ >
130
+ {((isMarketplace && listed && lowestListingCurrency?.imageUrl) ||
131
+ (isShop && salePriceCurrency && salePriceCurrency.imageUrl)) && (
132
+ <Image
133
+ alt={lowestListingCurrency?.symbol || salePriceCurrency?.symbol}
134
+ className="h-3 w-3"
135
+ src={lowestListingCurrency?.imageUrl || salePriceCurrency?.imageUrl}
136
+ onError={(e) => {
137
+ e.currentTarget.style.display = 'none';
138
+ }}
139
+ />
140
+ )}
141
+
142
+ <Text
143
+ className={cn(
144
+ 'text-left font-body font-bold text-sm',
145
+ listed && isMarketplace ? 'text-text-100' : 'text-text-50',
146
+ isShop &&
147
+ salePriceAmount &&
148
+ salePriceCurrency &&
149
+ type === ContractType.ERC1155 &&
150
+ 'text-text-100',
151
+ )}
152
+ >
153
+ {listed &&
154
+ isMarketplace &&
155
+ formatPrice(lowestListingPriceAmount, lowestListingCurrency)}
156
+
157
+ {!listed && isMarketplace && 'Not listed yet'}
158
+
159
+ {isShop &&
160
+ salePriceAmount &&
161
+ salePriceCurrency &&
162
+ type === ContractType.ERC1155 &&
163
+ formatPrice(salePriceAmount, salePriceCurrency)}
164
+ </Text>
165
+ </div>
166
+
167
+ {isShop && (
168
+ <SaleDetailsPill
169
+ quantityInitial={quantityInitial}
170
+ quantityRemaining={quantityRemaining}
171
+ collectionType={type as ContractType}
172
+ />
173
+ )}
174
+
175
+ {isShop && !salePriceAmount && <div className="h-5 w-full" />}
176
+
177
+ {isMarketplace && (
178
+ <TokenTypeBalancePill
179
+ balance={balance}
180
+ type={type as ContractType}
181
+ decimals={decimals}
182
+ />
183
+ )}
184
+ </div>
185
+ );
186
+ };
187
+
188
+ const TokenTypeBalancePill = ({
189
+ balance,
190
+ type,
191
+ decimals,
192
+ }: {
193
+ balance?: string;
194
+ type: ContractType;
195
+ decimals?: number;
196
+ }) => {
197
+ const displayText =
198
+ type === ContractType.ERC1155
199
+ ? balance
200
+ ? `Owned: ${formatUnits(BigInt(balance), decimals ?? 0)}`
201
+ : 'ERC-1155'
202
+ : 'ERC-721';
203
+
204
+ return (
205
+ <Text className="rounded-lg bg-background-secondary px-2 py-1 text-left font-medium text-text-80 text-xs">
206
+ {displayText}
207
+ </Text>
208
+ );
209
+ };
210
+
211
+ const SaleDetailsPill = ({
212
+ quantityInitial,
213
+ quantityRemaining,
214
+ collectionType,
215
+ }: {
216
+ quantityInitial: string | undefined;
217
+ quantityRemaining: string | undefined;
218
+ collectionType: ContractType;
219
+ }) => {
220
+ const supplyText = getSupplyStatusText({
221
+ quantityInitial,
222
+ quantityRemaining,
223
+ collectionType,
224
+ });
225
+
226
+ return (
227
+ <Text className="rounded-lg bg-background-secondary px-2 py-1 text-left font-medium text-text-80 text-xs">
228
+ {supplyText}
229
+ </Text>
230
+ );
231
+ };
@@ -0,0 +1,76 @@
1
+ 'use client';
2
+
3
+ import type { Hex } from 'viem';
4
+ import type {
5
+ CollectibleCardAction,
6
+ MarketplaceType,
7
+ } from '../../../../../types';
8
+ import type { Order, OrderbookKind } from '../../../../_internal';
9
+ import { ActionButton } from '../../_internals/action-button/ActionButton';
10
+
11
+ interface ActionButtonWrapperProps {
12
+ show: boolean;
13
+ chainId: number;
14
+ collectionAddress: Hex;
15
+ tokenId: string;
16
+ orderbookKind?: OrderbookKind;
17
+ action: CollectibleCardAction;
18
+ highestOffer?: Order;
19
+ lowestListing?: Order;
20
+ owned: boolean;
21
+ onCannotPerformAction?: (
22
+ action: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,
23
+ ) => void;
24
+ marketplaceType: MarketplaceType;
25
+ salesContractAddress?: Hex;
26
+ prioritizeOwnerActions?: boolean;
27
+ salePrice?: {
28
+ amount: string;
29
+ currencyAddress: Hex;
30
+ };
31
+ quantityDecimals?: number;
32
+ quantityRemaining?: number;
33
+ }
34
+
35
+ export function ActionButtonWrapper({
36
+ show,
37
+ chainId,
38
+ collectionAddress,
39
+ tokenId,
40
+ orderbookKind,
41
+ action,
42
+ highestOffer,
43
+ lowestListing,
44
+ owned,
45
+ onCannotPerformAction,
46
+ marketplaceType,
47
+ salesContractAddress,
48
+ prioritizeOwnerActions,
49
+ salePrice,
50
+ quantityDecimals,
51
+ quantityRemaining,
52
+ }: ActionButtonWrapperProps) {
53
+ if (!show) return null;
54
+
55
+ return (
56
+ <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]">
57
+ <ActionButton
58
+ chainId={chainId}
59
+ collectionAddress={collectionAddress}
60
+ tokenId={tokenId}
61
+ orderbookKind={orderbookKind}
62
+ action={action}
63
+ highestOffer={highestOffer}
64
+ lowestListing={lowestListing}
65
+ owned={owned}
66
+ onCannotPerformAction={onCannotPerformAction}
67
+ marketplaceType={marketplaceType}
68
+ salesContractAddress={salesContractAddress}
69
+ prioritizeOwnerActions={prioritizeOwnerActions}
70
+ salePrice={salePrice}
71
+ quantityDecimals={quantityDecimals}
72
+ quantityRemaining={quantityRemaining}
73
+ />
74
+ </div>
75
+ );
76
+ }
@@ -0,0 +1,55 @@
1
+ 'use client';
2
+
3
+ import { Media } from '../../media/Media';
4
+ import { MarketplaceCollectibleCardSkeleton } from '../CollectibleCardSkeleton';
5
+ import type { MarketplaceCardBaseProps } from '../types';
6
+
7
+ export interface BaseCardProps extends MarketplaceCardBaseProps {
8
+ isLoading: boolean;
9
+ name: string;
10
+ image?: string;
11
+ video?: string;
12
+ animationUrl?: string;
13
+ onClick?: () => void;
14
+ onKeyDown?: (e: React.KeyboardEvent) => void;
15
+ className?: string;
16
+ children: React.ReactNode;
17
+ }
18
+
19
+ export function BaseCard({
20
+ isLoading,
21
+ name,
22
+ image,
23
+ video,
24
+ animationUrl,
25
+ onClick,
26
+ onKeyDown,
27
+ className,
28
+ assetSrcPrefixUrl,
29
+ children,
30
+ }: BaseCardProps) {
31
+ if (isLoading) {
32
+ return <MarketplaceCollectibleCardSkeleton />;
33
+ }
34
+
35
+ return (
36
+ <div
37
+ data-testid="collectible-card"
38
+ className="w-card-width min-w-card-min-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"
39
+ onClick={onClick}
40
+ onKeyDown={onKeyDown}
41
+ >
42
+ <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]">
43
+ <article className="w-full rounded-xl">
44
+ <Media
45
+ name={name || ''}
46
+ assets={[image, video, animationUrl]}
47
+ assetSrcPrefixUrl={assetSrcPrefixUrl}
48
+ className={className}
49
+ />
50
+ {children}
51
+ </article>
52
+ </div>
53
+ </div>
54
+ );
55
+ }
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './utils';
3
+ export * from './CollectibleCard';
@@ -0,0 +1,95 @@
1
+ import type { Address, Hex } from 'viem';
2
+ import type { CollectibleCardAction, MarketplaceType } from '../../../../types';
3
+ import type { ContractType, TokenMetadata } from '../../../_internal';
4
+ import type { CollectibleOrder } from '../../../_internal';
5
+ import type { Order } from '../../../_internal';
6
+ import type { OrderbookKind } from '../../../_internal';
7
+
8
+ // Base properties shared by all collectible card types
9
+ type MarketplaceCardBaseProps = {
10
+ collectibleId: string;
11
+ chainId: number;
12
+ collectionAddress: Hex;
13
+ collectionType?: ContractType;
14
+ assetSrcPrefixUrl?: string;
15
+ cardLoading?: boolean;
16
+ marketplaceType?: MarketplaceType;
17
+ };
18
+
19
+ // Properties specific to Shop card
20
+ type ShopCardSpecificProps = {
21
+ salesContractAddress: Hex;
22
+ tokenMetadata: TokenMetadata;
23
+ salePrice:
24
+ | {
25
+ amount: string;
26
+ currencyAddress: Address;
27
+ }
28
+ | undefined;
29
+ saleStartsAt: string | undefined;
30
+ saleEndsAt: string | undefined;
31
+ quantityDecimals: number | undefined;
32
+ quantityInitial: string | undefined;
33
+ quantityRemaining: string | undefined;
34
+ };
35
+
36
+ // Properties specific to marketplace and inventory cards
37
+ type MarketCardSpecificProps = {
38
+ orderbookKind?: OrderbookKind;
39
+ collectible: CollectibleOrder | undefined;
40
+ onCollectibleClick?: (tokenId: string) => void;
41
+ onOfferClick?: ({
42
+ order,
43
+ e,
44
+ }: {
45
+ order?: Order;
46
+ e: React.MouseEvent<HTMLButtonElement>;
47
+ }) => void;
48
+ balance?: string;
49
+ balanceIsLoading: boolean;
50
+ /**
51
+ * Callback function that is called when the user attempts to perform an action
52
+ * (such as buying or making an offer) that they are not permitted to do.
53
+ *
54
+ * This function is invoked in the following scenario:
55
+ *
56
+ * - When a disconnected user clicks on "Buy Now" and is prompted to connect
57
+ * their wallet. After connecting, if it is determined that the user is
58
+ * already the owner of the collectible, this callback is triggered to inform
59
+ * them that they cannot perform the action (e.g., buying their own collectible).
60
+ *
61
+ * @param action - The action that the user cannot perform, which can be either
62
+ * CollectibleCardAction.BUY or CollectibleCardAction.OFFER.
63
+ */
64
+ onCannotPerformAction?: (
65
+ action: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,
66
+ ) => void;
67
+ prioritizeOwnerActions?: boolean;
68
+ };
69
+
70
+ // Complete CollectibleCardProps with all possible properties and card type
71
+ type MarketplaceCollectibleCardProps = MarketplaceCardBaseProps &
72
+ Partial<MarketCardSpecificProps & ShopCardSpecificProps>;
73
+
74
+ type ShopCollectibleCardProps = MarketplaceCardBaseProps &
75
+ ShopCardSpecificProps & {
76
+ marketplaceType: 'shop';
77
+ };
78
+ type MarketCollectibleCardProps = MarketplaceCardBaseProps &
79
+ MarketCardSpecificProps & {
80
+ marketplaceType?: 'market';
81
+ };
82
+
83
+ type CollectibleCardProps =
84
+ | ShopCollectibleCardProps
85
+ | MarketCollectibleCardProps;
86
+
87
+ export type {
88
+ MarketplaceCardBaseProps,
89
+ ShopCardSpecificProps,
90
+ MarketCardSpecificProps,
91
+ MarketplaceCollectibleCardProps,
92
+ ShopCollectibleCardProps,
93
+ MarketCollectibleCardProps,
94
+ CollectibleCardProps,
95
+ };