@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,264 +0,0 @@
1
- import { render, screen, waitFor } from '@test/test-utils';
2
- import { describe, expect, it, vi } from 'vitest';
3
- import * as fetchContentTypeModule from '../../../../../utils/fetchContentType';
4
- import type { TokenMetadata } from '../../../../_internal';
5
- import { Media } from '../media/Media';
6
- import * as contentTypeUtils from '../media/utils';
7
-
8
- describe('Media', () => {
9
- it('renders image content correctly with proper loading states and fallback', async () => {
10
- const originalImage = window.Image;
11
-
12
- // We need to use a proper constructor function to match the Image interface
13
- const MockImage = function (this: HTMLImageElement) {
14
- this.src = '';
15
- this.alt = '';
16
- this.className = '';
17
- this.onload = null;
18
- this.onerror = null;
19
- return this;
20
- } as unknown as typeof Image;
21
-
22
- window.Image = MockImage;
23
-
24
- const mockMetadata: Partial<TokenMetadata> = {
25
- tokenId: '1',
26
- name: 'Test Collectible',
27
- image: 'https://example.com/test-image.png',
28
- attributes: [],
29
- };
30
-
31
- // Initial render should show the loading skeleton
32
- const { rerender } = render(
33
- <Media name="Test Collectible" assets={[mockMetadata.image]} />,
34
- );
35
-
36
- // check if skeleton is rendered during loading
37
- const skeleton = screen.getByTestId('media');
38
- expect(skeleton).toBeInTheDocument();
39
-
40
- // trigger the image load event to simulate successful loading
41
- const imgElement = document.querySelector('img');
42
- expect(imgElement).not.toBeNull();
43
-
44
- if (imgElement) {
45
- expect(imgElement.getAttribute('src')).toBe(
46
- 'https://example.com/test-image.png',
47
- );
48
- expect(imgElement.getAttribute('alt')).toBe('Test Collectible');
49
-
50
- // initial state should be invisible due to loading
51
- expect(imgElement.className).toContain('invisible');
52
-
53
- // successful image load
54
- imgElement.dispatchEvent(new Event('load'));
55
-
56
- // after loading, the image should be visible
57
- expect(imgElement.className).toContain('visible');
58
- }
59
-
60
- // failing image that should use fallback
61
- const mockMetadataWithBadImage: Partial<TokenMetadata> = {
62
- tokenId: '1',
63
- name: 'Test Collectible',
64
- image: 'https://example.com/bad-image.png',
65
- attributes: [],
66
- };
67
-
68
- rerender(
69
- <Media
70
- name="Test Collectible"
71
- assets={[mockMetadataWithBadImage.image]}
72
- />,
73
- );
74
-
75
- const updatedImgElement = document.querySelector('img');
76
- if (updatedImgElement) {
77
- // simulate image load error
78
- updatedImgElement.dispatchEvent(new Event('error'));
79
-
80
- // after error, the src should be changed to the placeholder
81
- expect(updatedImgElement.className).toContain('visible');
82
- }
83
-
84
- // restore the original Image implementation
85
- window.Image = originalImage;
86
- });
87
-
88
- it('handles video content with appropriate controls and loading states', async () => {
89
- const getContentTypeSpy = vi.spyOn(contentTypeUtils, 'getContentType');
90
- getContentTypeSpy.mockResolvedValue('video');
91
-
92
- const fetchContentTypeSpy = vi.spyOn(
93
- fetchContentTypeModule,
94
- 'fetchContentType',
95
- );
96
- fetchContentTypeSpy.mockResolvedValue('video');
97
-
98
- // Create a mock for the HTMLVideoElement addEventListener
99
- const originalAddEventListener =
100
- HTMLVideoElement.prototype.addEventListener;
101
- HTMLVideoElement.prototype.addEventListener = vi.fn(
102
- (event: string, handler: EventListenerOrEventListenerObject) => {
103
- // Immediately call the loadedmetadata handler to simulate video loaded
104
- if (event === 'loadedmetadata' && typeof handler === 'function') {
105
- handler(new Event('loadedmetadata'));
106
- }
107
- },
108
- );
109
-
110
- // Mock browser detection for Safari
111
- const originalUserAgent = navigator.userAgent;
112
- Object.defineProperty(navigator, 'userAgent', {
113
- value:
114
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15',
115
- configurable: true,
116
- });
117
-
118
- // Mock video metadata
119
- const mockVideoMetadata: Partial<TokenMetadata> = {
120
- tokenId: '1',
121
- name: 'Video Collectible',
122
- video: 'https://example.com/video.mp4',
123
- attributes: [],
124
- };
125
-
126
- render(
127
- <Media name="Video Collectible" assets={[mockVideoMetadata.video]} />,
128
- );
129
-
130
- await waitFor(() => {
131
- expect(screen.getByTestId('collectible-asset-video')).toBeInTheDocument();
132
- });
133
-
134
- const videoElement = screen.getByTestId(
135
- 'collectible-asset-video',
136
- ) as HTMLVideoElement;
137
-
138
- expect(videoElement).not.toBeNull();
139
-
140
- // Video source should be set correctly
141
- const sourceElement = videoElement.querySelector('source');
142
- expect(sourceElement).not.toBeNull();
143
- expect(sourceElement?.getAttribute('src')).toBe(
144
- 'https://example.com/video.mp4',
145
- );
146
-
147
- // Video should have correct attributes for NFT display
148
- expect(videoElement.autoplay).toBe(true);
149
- expect(videoElement.loop).toBe(true);
150
- expect(videoElement.controls).toBe(true);
151
- expect(videoElement.playsInline).toBe(true);
152
- expect(videoElement.muted).toBe(true);
153
-
154
- // In Safari, pointer-events-none should be applied
155
- expect(videoElement.className).toContain('pointer-events-none');
156
-
157
- // After metadata loaded, video should be visible
158
- expect(videoElement.className).toContain('visible');
159
-
160
- // Clean up mocks
161
- getContentTypeSpy.mockRestore();
162
- fetchContentTypeSpy.mockRestore();
163
- HTMLVideoElement.prototype.addEventListener = originalAddEventListener;
164
- Object.defineProperty(navigator, 'userAgent', {
165
- value: originalUserAgent,
166
- configurable: true,
167
- });
168
- });
169
-
170
- it('handles HTML content in iframes with proper sandboxing', async () => {
171
- const getContentTypeSpy = vi.spyOn(contentTypeUtils, 'getContentType');
172
- getContentTypeSpy.mockResolvedValue('html');
173
-
174
- const fetchContentTypeSpy = vi.spyOn(
175
- fetchContentTypeModule,
176
- 'fetchContentType',
177
- );
178
- fetchContentTypeSpy.mockResolvedValue('html');
179
-
180
- // Mock HTML content metadata
181
- const mockHtmlMetadata: Partial<TokenMetadata> = {
182
- tokenId: '1',
183
- name: 'HTML Collectible',
184
- animation_url: 'https://example.com/interactive.html',
185
- attributes: [],
186
- };
187
-
188
- render(
189
- <Media
190
- name="HTML Collectible"
191
- assets={[mockHtmlMetadata.animation_url]}
192
- />,
193
- );
194
-
195
- await waitFor(() => {
196
- expect(document.querySelector('iframe')).toBeInTheDocument();
197
- });
198
-
199
- // Check that iframe element is present with correct attributes
200
- const iframeElement = document.querySelector('iframe') as HTMLIFrameElement;
201
- expect(iframeElement).toBeInTheDocument();
202
-
203
- // iframe source should be set correctly
204
- expect(iframeElement.getAttribute('src')).toBe(
205
- 'https://example.com/interactive.html',
206
- );
207
-
208
- // iframe should have appropriate attributes for security
209
- expect(iframeElement.getAttribute('sandbox')).toBe('allow-scripts');
210
-
211
- // iframe should have title for accessibility
212
- expect(iframeElement.getAttribute('title')).toBe('HTML Collectible');
213
-
214
- // iframe should have proper styling
215
- expect(iframeElement.className).toContain('aspect-square');
216
- expect(iframeElement.className).toContain('w-full');
217
-
218
- // Verify border styling
219
- expect(iframeElement.style.border).toBe('0px');
220
-
221
- getContentTypeSpy.mockRestore();
222
- fetchContentTypeSpy.mockRestore();
223
- });
224
-
225
- it('shows loading state when isLoading prop is true', async () => {
226
- const mockMetadata: Partial<TokenMetadata> = {
227
- tokenId: '1',
228
- name: 'Test Collectible',
229
- image: 'https://example.com/test-image.png',
230
- attributes: [],
231
- };
232
-
233
- // Render with isLoading=true
234
- const { rerender } = render(
235
- <Media
236
- name="Test Collectible"
237
- assets={[mockMetadata.image]}
238
- isLoading={true}
239
- />,
240
- );
241
-
242
- // Check if skeleton is rendered during loading
243
- expect(screen.getByTestId('media')).toBeInTheDocument();
244
-
245
- // Image should be invisible while loading
246
- const imgElement = document.querySelector('img');
247
- expect(imgElement?.className).toContain('invisible');
248
-
249
- // Re-render with isLoading=false
250
- rerender(
251
- <Media
252
- name="Test Collectible"
253
- assets={[mockMetadata.image]}
254
- isLoading={false}
255
- />,
256
- );
257
-
258
- // After loading completes, trigger load event
259
- imgElement?.dispatchEvent(new Event('load'));
260
-
261
- // Image should become visible
262
- expect(imgElement?.className).toContain('visible');
263
- });
264
- });
@@ -1,2 +0,0 @@
1
- export * from './CollectibleCard';
2
- export * from './media/Media';
@@ -1,130 +0,0 @@
1
- 'use client';
2
-
3
- import { use$, useObservable } from '@legendapp/state/react';
4
-
5
- import { Text, TokenImage } from '@0xsequence/design-system';
6
- import { DEFAULT_MARKETPLACE_FEE_PERCENTAGE } from '../../../../consts';
7
- import { compareAddress } from '../../../../utils/address';
8
- import { formatPriceWithFee } from '../../../../utils/price';
9
- import type { Order } from '../../../_internal';
10
- import { useCurrency, useMarketplaceConfig } from '../../../hooks';
11
- import { ActionModal } from '../_internal/components/actionModal';
12
- import QuantityInput from '../_internal/components/quantityInput';
13
- import { buyModalStore, useBuyModalProps, useIsOpen } from './store';
14
-
15
- export const ERC1155QuantityModal = ({ order }: { order: Order }) => {
16
- const { chainId } = useBuyModalProps();
17
- const isOpen = useIsOpen();
18
-
19
- const localQuantity$ = useObservable('1');
20
- const localQuantity = use$(localQuantity$);
21
- const invalidQuantity$ = useObservable(false);
22
- const invalidQuantity = use$(invalidQuantity$);
23
-
24
- return (
25
- <ActionModal
26
- isOpen={isOpen}
27
- chainId={chainId}
28
- onClose={() => buyModalStore.send({ type: 'close' })}
29
- title="Select Quantity"
30
- disableAnimation={true}
31
- ctas={[
32
- {
33
- label: 'Buy now',
34
- onClick: () => {
35
- buyModalStore.send({
36
- type: 'setQuantity',
37
- quantity: Number(localQuantity),
38
- });
39
- },
40
- disabled: invalidQuantity,
41
- },
42
- ]}
43
- >
44
- <div className="flex w-full flex-col gap-4">
45
- <QuantityInput
46
- $quantity={localQuantity$}
47
- $invalidQuantity={invalidQuantity$}
48
- decimals={order.quantityDecimals}
49
- maxQuantity={order.quantityRemaining}
50
- />
51
-
52
- <TotalPrice order={order} quantityStr={localQuantity} />
53
- </div>
54
- </ActionModal>
55
- );
56
- };
57
-
58
- const TotalPrice = ({
59
- order,
60
- quantityStr,
61
- }: {
62
- order: Order;
63
- quantityStr: string;
64
- }) => {
65
- const { data: marketplaceConfig } = useMarketplaceConfig();
66
- const { data: currency, isLoading: isCurrencyLoading } = useCurrency({
67
- chainId: order.chainId,
68
- currencyAddress: order.priceCurrencyAddress,
69
- });
70
-
71
- let error: null | string = null;
72
- let formattedPrice = '0';
73
-
74
- if (currency) {
75
- try {
76
- const marketplaceFeePercentage =
77
- marketplaceConfig?.market.collections.find((collection) =>
78
- compareAddress(
79
- collection.itemsAddress,
80
- order.collectionContractAddress,
81
- ),
82
- )?.feePercentage || DEFAULT_MARKETPLACE_FEE_PERCENTAGE;
83
- const quantity = BigInt(quantityStr);
84
- const totalPriceRaw = BigInt(order.priceAmount) * quantity;
85
-
86
- formattedPrice = formatPriceWithFee(
87
- totalPriceRaw,
88
- currency.decimals,
89
- marketplaceFeePercentage,
90
- );
91
- } catch (e) {
92
- console.error('Error formatting price', e);
93
- error = 'Unable to calculate total price';
94
- }
95
- }
96
-
97
- return error ? (
98
- <Text className="font-body font-medium text-xs" color="text50">
99
- {error}
100
- </Text>
101
- ) : (
102
- <div className="flex justify-between">
103
- <Text className="font-body font-medium text-xs" color="text50">
104
- Total Price
105
- </Text>
106
-
107
- <div className="flex items-center gap-0.5">
108
- {isCurrencyLoading || !currency ? (
109
- <div className="flex items-center gap-2">
110
- <Text className="font-body text-text-50 text-xs">Loading...</Text>
111
- </div>
112
- ) : (
113
- <>
114
- {currency.imageUrl && (
115
- <TokenImage src={currency.imageUrl} size="xs" />
116
- )}
117
-
118
- <Text className="font-body font-bold text-text-100 text-xs">
119
- {formattedPrice}
120
- </Text>
121
-
122
- <Text className="font-body font-bold text-text-80 text-xs">
123
- {currency?.symbol}
124
- </Text>
125
- </>
126
- )}
127
- </div>
128
- </div>
129
- );
130
- };
@@ -1,124 +0,0 @@
1
- 'use client';
2
-
3
- import {
4
- type SelectPaymentSettings,
5
- useSelectPaymentModal,
6
- } from '@0xsequence/checkout';
7
- import { useEffect, useRef } from 'react';
8
- import { ContractType } from '../../../_internal';
9
- import { ErrorModal } from '../_internal/components/actionModal/ErrorModal';
10
- import { LoadingModal } from '../_internal/components/actionModal/LoadingModal';
11
- import { ERC1155QuantityModal } from './ERC1155QuantityModal';
12
- import { useLoadData } from './hooks/useLoadData';
13
- import { usePaymentModalParams } from './hooks/usePaymentModalParams';
14
- import {
15
- buyModalStore,
16
- useBuyModalProps,
17
- useIsOpen,
18
- useOnError,
19
- useQuantity,
20
- } from './store';
21
-
22
- export const BuyModal = () => {
23
- const isOpen = useIsOpen();
24
-
25
- if (!isOpen) {
26
- return null;
27
- }
28
-
29
- return <BuyModalContent />;
30
- };
31
-
32
- const BuyModalContent = () => {
33
- const { chainId } = useBuyModalProps();
34
-
35
- const onError = useOnError();
36
-
37
- const quantity = useQuantity();
38
-
39
- const {
40
- collection,
41
- collectable,
42
- wallet,
43
- isLoading,
44
- isError,
45
- order,
46
- checkoutOptions,
47
- } = useLoadData();
48
-
49
- const {
50
- data: paymentModalParams,
51
- isLoading: isPaymentModalParamsLoading,
52
- isError: isPaymentModalParamsError,
53
- } = usePaymentModalParams({
54
- wallet,
55
- quantity,
56
- marketplace: order?.marketplace,
57
- collectable: collectable,
58
- checkoutOptions: checkoutOptions,
59
- priceCurrencyAddress: order?.priceCurrencyAddress,
60
- });
61
-
62
- // biome-ignore lint/correctness/useExhaustiveDependencies: we want to set this on collection change
63
- useEffect(() => {
64
- if (collection?.type === ContractType.ERC721 && !quantity) {
65
- buyModalStore.send({ type: 'setQuantity', quantity: 1 });
66
- }
67
- }, [collection]);
68
-
69
- if (isError || isPaymentModalParamsError) {
70
- onError(new Error('Error loading data'));
71
- return (
72
- <ErrorModal
73
- isOpen={true}
74
- chainId={chainId}
75
- onClose={() => buyModalStore.send({ type: 'close' })}
76
- title="Error"
77
- />
78
- );
79
- }
80
-
81
- if (
82
- isLoading ||
83
- isPaymentModalParamsLoading ||
84
- !collection ||
85
- !collectable ||
86
- !order
87
- ) {
88
- return (
89
- <LoadingModal
90
- isOpen={true}
91
- chainId={chainId}
92
- onClose={() => buyModalStore.send({ type: 'close' })}
93
- title="Loading Sequence Pay"
94
- />
95
- );
96
- }
97
-
98
- if (collection.type === ContractType.ERC1155 && !quantity) {
99
- return <ERC1155QuantityModal order={order} />;
100
- }
101
-
102
- if (paymentModalParams) {
103
- return <PaymentModalOpener paymentModalParams={paymentModalParams} />;
104
- }
105
- };
106
-
107
- const PaymentModalOpener = ({
108
- paymentModalParams,
109
- }: {
110
- paymentModalParams: SelectPaymentSettings;
111
- }) => {
112
- const { openSelectPaymentModal } = useSelectPaymentModal();
113
- const hasOpenedRef = useRef(false);
114
-
115
- // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
116
- useEffect(() => {
117
- if (!hasOpenedRef.current) {
118
- hasOpenedRef.current = true;
119
- openSelectPaymentModal(paymentModalParams);
120
- }
121
- }, []);
122
-
123
- return null;
124
- };
@@ -1,104 +0,0 @@
1
- import { cleanup, render, screen } from '@test';
2
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
-
4
- import { server } from '@test';
5
- import type { Address } from 'viem';
6
- import { mockOrder } from '../../../../_internal/api/__mocks__/marketplace.msw';
7
- import { BuyModal } from '../Modal';
8
- import { buyModalStore } from '../store';
9
-
10
- describe('BuyModal', () => {
11
- beforeEach(() => {
12
- buyModalStore.send({ type: 'close' });
13
- });
14
-
15
- afterEach(() => {
16
- cleanup();
17
- // Reset server handlers
18
- server.resetHandlers();
19
- });
20
-
21
- // Currently this is the only test we can run without the provider
22
- it('should not render when isOpen is false', () => {
23
- render(<BuyModal />);
24
-
25
- expect(screen.queryByText('Loading Sequence Pay')).not.toBeInTheDocument();
26
- expect(screen.queryByText('Checkout')).not.toBeInTheDocument();
27
- expect(screen.queryByText('Select Quantity')).not.toBeInTheDocument();
28
- });
29
-
30
- it.skip('should render error modal when there is an error', async () => {
31
- // server.use(
32
- // http.post(mockMetadataEndpoint("GetContractInfo"), () => {
33
- // return new HttpResponse(null, {
34
- // status: 404,
35
- // })
36
- // }),
37
- // );
38
- // buyModalStore.send({
39
- // type: 'open',
40
- // props: {
41
- // orderId: mockOrder.orderId,
42
- // chainId: mockOrder.chainId,
43
- // collectionAddress: mockOrder.collectionContractAddress as Address,
44
- // collectibleId: "1",
45
- // marketplace: mockOrder.marketplace,
46
- // },
47
- // });
48
- // render(
49
- // <BuyModal />
50
- // );
51
- // // Should show error modal
52
- // await waitFor(() => {
53
- // expect(screen.getByText("Error")).toBeInTheDocument();
54
- // }, { timeout: 1000 });
55
- });
56
-
57
- it.skip('should render ERC1155QuantityModal when contract type is ERC1155', async () => {
58
- // // Create an ERC1155 mock collection
59
- // const erc1155Collection = {
60
- // ...mockCollection,
61
- // contractType: ContractType.ERC1155,
62
- // };
63
- // const erc1155Order = {
64
- // ...testOrder,
65
- // quantityRemaining: "10",
66
- // quantityRemainingFormatted: "10",
67
- // };
68
- // buyModalStore.send({
69
- // type: 'open',
70
- // props: {
71
- // orderId: erc1155Order.orderId,
72
- // chainId: erc1155Order.chainId,
73
- // collectionAddress: erc1155Order.collectionContractAddress,
74
- // collectibleId: erc1155Order.tokenId,
75
- // marketplace: erc1155Order.marketplace,
76
- // },
77
- // });
78
- // render(<BuyModal />);
79
- // // First should show loading
80
- // expect(screen.getByText("Loading Sequence Pay")).toBeInTheDocument();
81
- // // Then should show quantity modal for ERC1155
82
- // await waitFor(() => {
83
- // expect(screen.getByText("Select Quantity")).toBeInTheDocument();
84
- // }, { timeout: 5000 });
85
- });
86
-
87
- it('should show loading modal', async () => {
88
- buyModalStore.send({
89
- type: 'open',
90
- props: {
91
- orderId: mockOrder.orderId,
92
- chainId: mockOrder.chainId,
93
- collectionAddress: mockOrder.collectionContractAddress as Address,
94
- collectibleId: '1',
95
- marketplace: mockOrder.marketplace,
96
- },
97
- });
98
-
99
- render(<BuyModal />);
100
-
101
- // Should show loading modal
102
- expect(screen.getByText('Loading Sequence Pay')).toBeInTheDocument();
103
- });
104
- });
@@ -1,39 +0,0 @@
1
- import { avalanche, optimism } from 'viem/chains';
2
- import type { AdditionalFee } from '../../../../_internal';
3
- import { useMarketplaceConfig } from '../../../../hooks';
4
-
5
- export const useFees = ({
6
- chainId,
7
- collectionAddress,
8
- }: {
9
- chainId: number;
10
- collectionAddress: string;
11
- }) => {
12
- const defaultFee = 2.5;
13
- const defaultPlatformFeeRecipient =
14
- '0x858dB1cbF6D09D447C96A11603189b49B2D1C219';
15
- const avalancheAndOptimismPlatformFeeRecipient =
16
- '0x400cdab4676c17aec07e8ec748a5fc3b674bca41';
17
- const { data: marketplaceConfig } = useMarketplaceConfig();
18
-
19
- const collection = marketplaceConfig?.market.collections.find(
20
- (collection) =>
21
- collection.itemsAddress.toLowerCase() ===
22
- collectionAddress.toLowerCase() &&
23
- chainId === Number(collection.chainId),
24
- );
25
-
26
- const avalancheOrOptimism =
27
- chainId === avalanche.id || chainId === optimism.id;
28
- const receiver = avalancheOrOptimism
29
- ? avalancheAndOptimismPlatformFeeRecipient
30
- : defaultPlatformFeeRecipient;
31
-
32
- const percentageToBPS = (percentage: string | number) =>
33
- (Number(percentage) * 10000) / 100;
34
-
35
- return {
36
- amount: percentageToBPS(collection?.feePercentage || defaultFee).toString(),
37
- receiver,
38
- } satisfies AdditionalFee;
39
- };