@0xsequence/marketplace-sdk 0.8.12 → 0.10.0

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 (487) hide show
  1. package/.storybook/main.ts +63 -0
  2. package/.storybook/preview.ts +24 -0
  3. package/.storybook/vitest.setup.ts +6 -0
  4. package/CHANGELOG.md +158 -21
  5. package/dist/{CartIcon-Bll1rbxv.js → CalendarIcon-CqsuAuCm.js} +30 -77
  6. package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
  7. package/dist/{types-BIJOaL4j.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +11 -7
  8. package/dist/InfoIcon-v0w_Lu7t.js +53 -0
  9. package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
  10. package/dist/_internal-C75gOSNo.js +14 -0
  11. package/dist/_internal-C75gOSNo.js.map +1 -0
  12. package/dist/actionModal-CMUeVsFX.js +116 -0
  13. package/dist/actionModal-CMUeVsFX.js.map +1 -0
  14. package/dist/{alien_swap-B_76IMma.js → alien_swap-CYv6YlOF.js} +1 -1
  15. package/dist/{alien_swap-B_76IMma.js.map → alien_swap-CYv6YlOF.js.map} +1 -1
  16. package/dist/{api-1KFxYh7o.js → api-BiMGqWdz.js} +79 -87
  17. package/dist/api-BiMGqWdz.js.map +1 -0
  18. package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-Bzn5baeH.js} +1 -1
  19. package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-Bzn5baeH.js.map} +1 -1
  20. package/dist/{aura-Cye_TuHj.js → aura-DzIWh8WT.js} +1 -1
  21. package/dist/{aura-Cye_TuHj.js.map → aura-DzIWh8WT.js.map} +1 -1
  22. package/dist/base-DqaJPvfN.js +22 -0
  23. package/dist/base-DqaJPvfN.js.map +1 -0
  24. package/dist/{blur-DWDMyMpK.js → blur-DSH-Cbpj.js} +1 -1
  25. package/dist/{blur-DWDMyMpK.js.map → blur-DSH-Cbpj.js.map} +1 -1
  26. package/dist/{builder-api-BQvzykoU.js → builder-api-BFuZNOaN.js} +2 -2
  27. package/dist/{builder-api-BQvzykoU.js.map → builder-api-BFuZNOaN.js.map} +1 -1
  28. package/dist/{builder.gen-CxP9NT1p.js → builder.gen-B9wR2nvF.js} +1 -1
  29. package/dist/builder.gen-B9wR2nvF.js.map +1 -0
  30. package/dist/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
  31. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
  32. package/dist/{sdk-config-DJzxVPld.d.ts → create-config-DKJ-F0jc.d.ts} +458 -86
  33. package/dist/{wagmi-DRctYEk6.js → create-config-fQ-jbJD1.js} +33 -16
  34. package/dist/create-config-fQ-jbJD1.js.map +1 -0
  35. package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
  36. package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
  37. package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
  38. package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
  39. package/dist/get-provider-CYYHfrlg.js +10 -0
  40. package/dist/get-provider-CYYHfrlg.js.map +1 -0
  41. package/dist/get-query-client-D19vvfJo.js +23 -0
  42. package/dist/get-query-client-D19vvfJo.js.map +1 -0
  43. package/dist/hooks-4pxIbLbM.js +4044 -0
  44. package/dist/hooks-4pxIbLbM.js.map +1 -0
  45. package/dist/{index-1bezgsFq.d.ts → index-136YrWDH.d.ts} +929 -255
  46. package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
  47. package/dist/index-BKBin-rq.d.ts +979 -0
  48. package/dist/index-BUWB_RXp.d.ts +3144 -0
  49. package/dist/{index-Cl7PQOGu.d.ts → index-BhVFc2rX.d.ts} +28 -25
  50. package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
  51. package/dist/{index-BIMIpDiI.d.ts → index-CKrYP7ot.d.ts} +74 -103
  52. package/dist/{index-BEYefG1G.d.ts → index-CUwMH7Ht.d.ts} +5 -5
  53. package/dist/{index-BjIwVzc4.d.ts → index-Cu70Lw-w.d.ts} +238 -238
  54. package/dist/index.css +427 -1
  55. package/dist/index.d.ts +8 -10
  56. package/dist/index.js +15 -11
  57. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
  58. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
  59. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
  60. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
  61. package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
  62. package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
  63. package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
  64. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
  65. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
  66. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
  67. package/dist/{marketplace.gen-Dqk8vRmD.js → marketplace.gen-HpnpL5xU.js} +12 -3
  68. package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
  69. package/dist/{marketplaceConfig-D2MYFqll.js → marketplaceConfig-GQTTmihy.js} +3 -3
  70. package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
  71. package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
  72. package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
  73. package/dist/network-CGD0oKtS.js +15 -0
  74. package/dist/network-CGD0oKtS.js.map +1 -0
  75. package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
  76. package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
  77. package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
  78. package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
  79. package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
  80. package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
  81. package/dist/options-BBBR8u_4.js +0 -0
  82. package/dist/{primary-sale-Cw95phYC.js → primary-sale-CmWxSfFQ.js} +279 -279
  83. package/dist/primary-sale-CmWxSfFQ.js.map +1 -0
  84. package/dist/provider-DPGUA10G.js +125 -0
  85. package/dist/provider-DPGUA10G.js.map +1 -0
  86. package/dist/queries-Ce_2othB.js +757 -0
  87. package/dist/queries-Ce_2othB.js.map +1 -0
  88. package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
  89. package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
  90. package/dist/react/_internal/api/index.d.ts +2 -4
  91. package/dist/react/_internal/api/index.js +9 -6
  92. package/dist/react/_internal/databeat/index.d.ts +2 -73
  93. package/dist/react/_internal/databeat/index.js +4 -21
  94. package/dist/react/_internal/index.d.ts +2 -7
  95. package/dist/react/_internal/index.js +13 -8
  96. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  97. package/dist/react/_internal/wagmi/index.js +6 -4
  98. package/dist/react/hooks/index.d.ts +13 -17
  99. package/dist/react/hooks/index.js +25 -21
  100. package/dist/react/hooks/options/index.d.ts +3 -5
  101. package/dist/react/hooks/options/index.js +15 -10
  102. package/dist/react/index.d.ts +13 -40
  103. package/dist/react/index.js +30 -21
  104. package/dist/react/queries/index.d.ts +9 -8
  105. package/dist/react/queries/index.js +22 -17
  106. package/dist/react/ssr/index.d.ts +7 -9
  107. package/dist/react/ssr/index.js +13 -8
  108. package/dist/react/ssr/index.js.map +1 -1
  109. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -9
  110. package/dist/react/ui/components/marketplace-collectible-card/index.js +29 -20
  111. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  112. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +13 -8
  113. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  114. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  115. package/dist/react/ui/icons/index.js +14 -10
  116. package/dist/react/ui/index.d.ts +3 -9
  117. package/dist/react/ui/index.js +29 -20
  118. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +5 -5
  119. package/dist/react/ui/modals/_internal/components/actionModal/index.js +25 -20
  120. package/dist/{react-BG7o4PId.js → react-DP0M2Wfm.js} +4919 -7839
  121. package/dist/react-DP0M2Wfm.js.map +1 -0
  122. package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
  123. package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
  124. package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
  125. package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
  126. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
  127. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
  128. package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
  129. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
  130. package/dist/{token-CO5llIla.js → token-CHSBPYVG.js} +1540 -761
  131. package/dist/token-CHSBPYVG.js.map +1 -0
  132. package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
  133. package/dist/transaction-CnctdNzS.js.map +1 -0
  134. package/dist/types/index.d.ts +2 -3
  135. package/dist/types/index.js +3 -3
  136. package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
  137. package/dist/types-Yw2ywj6j.js.map +1 -0
  138. package/dist/utils/abi/index.d.ts +5 -5
  139. package/dist/utils/abi/index.js +5 -5
  140. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  141. package/dist/utils/abi/marketplace/index.js +1 -1
  142. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  143. package/dist/utils/abi/primary-sale/index.js +1 -1
  144. package/dist/utils/abi/token/index.d.ts +2 -2
  145. package/dist/utils/abi/token/index.js +2 -2
  146. package/dist/utils/index.d.ts +7 -8
  147. package/dist/utils/index.js +13 -10
  148. package/dist/{utils-BFdxaToy.js → utils-9RXDgcBl.js} +86 -93
  149. package/dist/utils-9RXDgcBl.js.map +1 -0
  150. package/dist/{utils-Cat9_pef.js → utils-DjVJ9tov.js} +5 -6
  151. package/dist/utils-DjVJ9tov.js.map +1 -0
  152. package/dist/wagmi-Do_KW5ke.js +0 -0
  153. package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
  154. package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
  155. package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
  156. package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
  157. package/eslint/use-client.js +0 -6
  158. package/eslint.config.mjs +4 -0
  159. package/package.json +47 -35
  160. package/postcss.config.mjs +6 -0
  161. package/src/index.css +5 -4
  162. package/src/index.ts +2 -1
  163. package/src/react/__tests__/provider.test.tsx +4 -3
  164. package/src/react/_internal/api/__mocks__/builder.msw.ts +5 -3
  165. package/src/react/_internal/api/__mocks__/indexer.msw.ts +24 -8
  166. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  167. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +6 -6
  168. package/src/react/_internal/api/__mocks__/metadata.msw.ts +1 -1
  169. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  170. package/src/react/_internal/api/builder.gen.ts +6 -6
  171. package/src/react/_internal/api/get-query-client.ts +2 -2
  172. package/src/react/_internal/api/index.ts +2 -2
  173. package/src/react/_internal/api/laos-api.ts +3 -0
  174. package/src/react/_internal/api/marketplace.gen.ts +43 -3
  175. package/src/react/_internal/api/query-keys.ts +21 -6
  176. package/src/react/_internal/api/services.ts +30 -45
  177. package/src/react/_internal/databeat/index.ts +15 -14
  178. package/src/react/_internal/databeat/types.ts +22 -0
  179. package/src/react/_internal/databeat/utils.ts +26 -0
  180. package/src/react/_internal/index.ts +1 -1
  181. package/src/react/_internal/types.ts +10 -23
  182. package/src/react/_internal/utils.ts +4 -5
  183. package/src/react/_internal/wagmi/create-config.ts +43 -19
  184. package/src/react/_internal/wagmi/get-connectors.ts +9 -7
  185. package/src/react/_internal/wallet/__tests__/wallet.test.ts +1 -1
  186. package/src/react/_internal/wallet/wallet.ts +22 -22
  187. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +20 -0
  188. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +12 -2
  189. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +1 -1
  190. package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
  191. package/src/react/hooks/__tests__/useBalanceOfCollectible.test.tsx +1 -1
  192. package/src/react/hooks/__tests__/useCancelOrder.test.tsx +4 -4
  193. package/src/react/hooks/__tests__/useCancelTransactionSteps.test.tsx +1 -1
  194. package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
  195. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
  196. package/src/react/hooks/__tests__/useCollectible.test.tsx +14 -16
  197. package/src/react/hooks/__tests__/useCollection.test.tsx +4 -4
  198. package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +16 -25
  199. package/src/react/hooks/__tests__/useCollectionDetails.test.tsx +1 -1
  200. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +12 -4
  201. package/src/react/hooks/__tests__/useComparePrices.test.tsx +7 -6
  202. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +4 -4
  203. package/src/react/hooks/__tests__/useCountListingsForCollectible.test.tsx +2 -2
  204. package/src/react/hooks/__tests__/useCountOfCollectables.test.tsx +5 -5
  205. package/src/react/hooks/__tests__/useCountOffersForCollectible.test.tsx +2 -2
  206. package/src/react/hooks/__tests__/useCurrency.test.tsx +5 -3
  207. package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
  208. package/src/react/hooks/__tests__/useFilters.test.tsx +3 -3
  209. package/src/react/hooks/__tests__/useFloorOrder.test.tsx +4 -4
  210. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +3 -3
  211. package/src/react/hooks/__tests__/useGenerateListingTransaction.test.tsx +1 -1
  212. package/src/react/hooks/__tests__/useGenerateOfferTransaction.test.tsx +1 -1
  213. package/src/react/hooks/__tests__/useGenerateSellTransaction.test.tsx +1 -1
  214. package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
  215. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +4 -4
  216. package/src/react/hooks/__tests__/useInventory.test.tsx +1 -1
  217. package/src/react/hooks/__tests__/useListCollectibleActivities.test.tsx +11 -13
  218. package/src/react/hooks/__tests__/useListCollectibles.test.tsx +5 -5
  219. package/src/react/hooks/__tests__/useListCollectiblesPaginated.test.tsx +10 -15
  220. package/src/react/hooks/__tests__/useListCollectionActivities.test.tsx +13 -15
  221. package/src/react/hooks/__tests__/useListCollections.test.tsx +3 -3
  222. package/src/react/hooks/__tests__/useListListingsForCollectible.test.tsx +3 -2
  223. package/src/react/hooks/__tests__/useListMarketCardData.test.tsx +301 -0
  224. package/src/react/hooks/__tests__/useListOffersForCollectible.test.tsx +1 -1
  225. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +137 -0
  226. package/src/react/hooks/__tests__/useLowestListing.test.tsx +1 -1
  227. package/src/react/hooks/__tests__/useMarketCurrencies.test.tsx +1 -1
  228. package/src/react/hooks/__tests__/useRoyalty.test.tsx +0 -23
  229. package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
  230. package/src/react/hooks/index.ts +29 -24
  231. package/src/react/hooks/options/index.ts +0 -1
  232. package/src/react/hooks/useAutoSelectFeeOption.tsx +1 -1
  233. package/src/react/hooks/useBalanceOfCollectible.tsx +1 -1
  234. package/src/react/hooks/useCancelTransactionSteps.tsx +2 -2
  235. package/src/react/hooks/useCheckoutOptions.tsx +84 -54
  236. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
  237. package/src/react/hooks/useCollectible.tsx +64 -49
  238. package/src/react/hooks/useCollection.tsx +60 -11
  239. package/src/react/hooks/useCollectionBalanceDetails.tsx +93 -73
  240. package/src/react/hooks/useCollectionDetails.ts +69 -0
  241. package/src/react/hooks/useCollectionDetailsPolling.tsx +7 -3
  242. package/src/react/hooks/useComparePrices.tsx +91 -86
  243. package/src/react/hooks/useConvertPriceToUSD.tsx +83 -86
  244. package/src/react/hooks/useCountListingsForCollectible.tsx +64 -53
  245. package/src/react/hooks/useCountOfCollectables.tsx +60 -69
  246. package/src/react/hooks/useCountOfPrimarySaleItems.tsx +13 -0
  247. package/src/react/hooks/useCountOffersForCollectible.tsx +64 -53
  248. package/src/react/hooks/useCurrency.tsx +56 -64
  249. package/src/react/hooks/useCurrencyBalance.tsx +132 -46
  250. package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
  251. package/src/react/hooks/useFilterState.tsx +1 -2
  252. package/src/react/hooks/useFilters.tsx +154 -111
  253. package/src/react/hooks/useFloorOrder.tsx +65 -40
  254. package/src/react/hooks/useGenerateCancelTransaction.tsx +5 -10
  255. package/src/react/hooks/useGenerateListingTransaction.tsx +1 -1
  256. package/src/react/hooks/useGenerateOfferTransaction.tsx +1 -1
  257. package/src/react/hooks/useGenerateSellTransaction.tsx +5 -10
  258. package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
  259. package/src/react/hooks/useGetReceiptFromHash.tsx +32 -3
  260. package/src/react/hooks/useGetTokenRanges.tsx +92 -0
  261. package/src/react/hooks/useHighestOffer.tsx +68 -4
  262. package/src/react/hooks/useInventory.tsx +1 -1
  263. package/src/react/hooks/useList1155ShopCardData.tsx +57 -82
  264. package/src/react/hooks/useList721ShopCardData.tsx +98 -63
  265. package/src/react/hooks/useListBalances.tsx +1 -1
  266. package/src/react/hooks/useListCollectibleActivities.tsx +89 -50
  267. package/src/react/hooks/useListCollectibles.tsx +81 -16
  268. package/src/react/hooks/useListCollectiblesPaginated.tsx +96 -66
  269. package/src/react/hooks/useListCollectionActivities.tsx +84 -50
  270. package/src/react/hooks/useListCollections.tsx +71 -17
  271. package/src/react/hooks/useListListingsForCollectible.tsx +90 -50
  272. package/src/react/hooks/useListMarketCardData.tsx +3 -2
  273. package/src/react/hooks/useListOffersForCollectible.tsx +9 -14
  274. package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
  275. package/src/react/hooks/useListShopCardData.tsx +70 -0
  276. package/src/react/hooks/useListTokenMetadata.ts +64 -12
  277. package/src/react/hooks/useListTokenMetadata.tsx +73 -0
  278. package/src/react/hooks/useLowestListing.tsx +68 -4
  279. package/src/react/hooks/useMarketCurrencies.tsx +62 -5
  280. package/src/react/hooks/useOpenConnectModal.tsx +9 -0
  281. package/src/react/hooks/useRoyalty.tsx +57 -13
  282. package/src/react/hooks/useShopCollectibleSaleData.tsx +349 -0
  283. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
  284. package/src/react/hooks/useTokenSupplies.ts +81 -0
  285. package/src/react/hooks/useTransferTokens.tsx +2 -2
  286. package/src/react/hooks/util/optimisticCancelUpdates.ts +5 -7
  287. package/src/react/index.ts +5 -3
  288. package/src/react/provider.tsx +73 -9
  289. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  290. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  291. package/src/react/queries/balanceOfCollectible.ts +8 -5
  292. package/src/react/queries/checkoutOptions.ts +85 -0
  293. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  294. package/src/react/queries/collectible.ts +66 -0
  295. package/src/react/queries/collection.ts +55 -0
  296. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  297. package/src/react/queries/collectionDetails.ts +64 -0
  298. package/src/react/queries/comparePrices.ts +108 -0
  299. package/src/react/queries/convertPriceToUSD.ts +92 -0
  300. package/src/react/queries/countListingsForCollectible.ts +73 -0
  301. package/src/react/queries/countOfCollectables.ts +83 -0
  302. package/src/react/queries/countOfPrimarySaleItems.ts +48 -0
  303. package/src/react/queries/countOffersForCollectible.ts +73 -0
  304. package/src/react/queries/currency.ts +83 -0
  305. package/src/react/queries/filters.ts +138 -0
  306. package/src/react/queries/floorOrder.ts +63 -0
  307. package/src/react/queries/getTokenRanges.ts +62 -0
  308. package/src/react/queries/highestOffer.ts +46 -40
  309. package/src/react/queries/index.ts +10 -4
  310. package/src/react/queries/inventory.ts +10 -4
  311. package/src/react/queries/listBalances.ts +5 -4
  312. package/src/react/queries/listCollectibleActivities.ts +97 -0
  313. package/src/react/queries/listCollectibles.ts +67 -50
  314. package/src/react/queries/listCollectiblesPaginated.ts +87 -0
  315. package/src/react/queries/listCollectionActivities.ts +95 -0
  316. package/src/react/queries/listCollections.ts +53 -10
  317. package/src/react/queries/listListingsForCollectible.ts +82 -0
  318. package/src/react/queries/listTokenMetadata.ts +47 -23
  319. package/src/react/queries/lowestListing.ts +46 -31
  320. package/src/react/queries/marketCurrencies.ts +42 -29
  321. package/src/react/queries/marketplaceConfig.ts +4 -4
  322. package/src/react/queries/primarySaleItems.ts +85 -0
  323. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  324. package/src/react/queries/tokenSupplies.ts +93 -0
  325. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +12 -2
  326. package/src/react/ssr/create-ssr-client.ts +1 -1
  327. package/src/react/types/query.ts +34 -0
  328. package/src/react/ui/components/ModelViewer.tsx +1 -1
  329. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  330. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
  331. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +14 -8
  332. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
  333. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
  334. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  335. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +20 -18
  336. package/src/react/ui/components/_internals/action-button/store.ts +72 -34
  337. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  338. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  339. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +1 -1
  340. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +12 -5
  341. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  342. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +3 -0
  343. package/src/react/ui/components/marketplace-collectible-card/index.ts +1 -1
  344. package/src/react/ui/components/marketplace-collectible-card/types.ts +11 -7
  345. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  346. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +3 -2
  347. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +7 -6
  348. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  349. package/src/react/ui/components/marketplace-logos/marketplace-logos.tsx +1 -1
  350. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  351. package/src/react/ui/components/media/Media.tsx +29 -20
  352. package/src/react/ui/components/media/types.ts +6 -0
  353. package/src/react/ui/index.ts +8 -10
  354. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
  355. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +100 -87
  356. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +11 -5
  357. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -2
  358. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +17 -11
  359. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +4 -1
  360. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +1 -1
  361. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
  362. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +3 -3
  363. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
  364. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +2 -2
  365. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +10 -3
  366. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  367. package/src/react/ui/modals/BuyModal/store.ts +26 -0
  368. package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
  369. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +2 -2
  370. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +0 -1
  371. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -2
  372. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -6
  373. package/src/react/ui/modals/CreateListingModal/index.tsx +1 -1
  374. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  375. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +31 -14
  376. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +1 -1
  377. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +1 -1
  378. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +0 -1
  379. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +7 -7
  380. package/src/react/ui/modals/MakeOfferModal/index.tsx +1 -1
  381. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  382. package/src/react/ui/modals/SellModal/Modal.tsx +14 -11
  383. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +6 -4
  384. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +1 -1
  385. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +0 -1
  386. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +6 -6
  387. package/src/react/ui/modals/SellModal/store.ts +3 -3
  388. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +1 -1
  389. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  390. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  391. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
  392. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +52 -50
  393. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
  394. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  395. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +33 -37
  396. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
  397. package/src/react/ui/modals/TransferModal/index.tsx +28 -31
  398. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  399. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  400. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +1 -1
  401. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +2 -4
  402. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  403. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  404. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +6 -3
  405. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -18
  406. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  407. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
  408. package/src/react/ui/modals/_internal/components/floorPriceText/index.tsx +4 -4
  409. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  410. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
  411. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
  412. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +23 -17
  413. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +340 -41
  414. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx +1 -2
  415. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  416. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  417. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -14
  418. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  419. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  420. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  421. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +37 -11
  422. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +0 -1
  423. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
  424. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +92 -63
  425. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +44 -45
  426. package/src/react/ui/modals/_internal/types.ts +2 -2
  427. package/src/react/ui/modals/modal-provider.tsx +2 -3
  428. package/src/types/api-types.ts +36 -36
  429. package/src/types/buyModalErrors.ts +1 -1
  430. package/src/types/index.ts +5 -5
  431. package/src/types/new-marketplace-types.ts +1 -1
  432. package/src/types/sdk-config.ts +8 -2
  433. package/src/types/types.ts +1 -0
  434. package/src/types/waas-types.ts +1 -1
  435. package/src/utils/abi/index.ts +1 -1
  436. package/src/utils/abi/primary-sale/index.ts +1 -1
  437. package/src/utils/abi/token/index.ts +2 -1
  438. package/src/utils/decode/erc20.ts +1 -1
  439. package/src/utils/index.ts +3 -3
  440. package/src/utils/network.ts +15 -0
  441. package/test/const.ts +3 -1
  442. package/test/mocks/wallet.ts +1 -1
  443. package/test/test-utils.tsx +5 -4
  444. package/vitest.shims.d.ts +2 -0
  445. package/vitest.storybook.config.js +33 -0
  446. package/.changeset/fluffy-jokes-lay.md +0 -5
  447. package/.changeset/wise-bugs-boil.md +0 -8
  448. package/dist/CartIcon-Bll1rbxv.js.map +0 -1
  449. package/dist/CollectibleCard-CLQTl0_6.d.ts +0 -8
  450. package/dist/_internal-69NEWNUE.js +0 -34
  451. package/dist/_internal-69NEWNUE.js.map +0 -1
  452. package/dist/api-1KFxYh7o.js.map +0 -1
  453. package/dist/builder-api-DoK3907S.d.ts +0 -12
  454. package/dist/builder.gen-CxP9NT1p.js.map +0 -1
  455. package/dist/index-4-kfOFdx.d.ts +0 -22
  456. package/dist/index-BHiSG-Yi.d.ts +0 -312
  457. package/dist/index-BQW0PUkQ.d.ts +0 -3973
  458. package/dist/index-BfH21xmk.d.ts +0 -117
  459. package/dist/index-CN8puQQJ.d.ts +0 -24
  460. package/dist/index-DafWjEb4.d.ts +0 -65
  461. package/dist/marketplace.gen-Dqk8vRmD.js.map +0 -1
  462. package/dist/marketplaceConfig-D2MYFqll.js.map +0 -1
  463. package/dist/options-DCi6_23w.js +0 -34
  464. package/dist/options-DCi6_23w.js.map +0 -1
  465. package/dist/primary-sale-Cw95phYC.js.map +0 -1
  466. package/dist/queries-DPvwtnO7.js +0 -486
  467. package/dist/queries-DPvwtnO7.js.map +0 -1
  468. package/dist/react-BG7o4PId.js.map +0 -1
  469. package/dist/token-CO5llIla.js.map +0 -1
  470. package/dist/transaction-CcVViHEL.js.map +0 -1
  471. package/dist/types-DwWE6xOF.js.map +0 -1
  472. package/dist/useCollection-C-mclKU0.d.ts +0 -66
  473. package/dist/utils-BFdxaToy.js.map +0 -1
  474. package/dist/utils-Cat9_pef.js.map +0 -1
  475. package/dist/wagmi-DRctYEk6.js.map +0 -1
  476. package/src/react/_internal/api/zod-schema.ts +0 -678
  477. package/src/react/hooks/options/collectionOptions.ts +0 -41
  478. package/src/react/hooks/useCollectionDetails.tsx +0 -50
  479. package/src/react/hooks/useGetTokenSuppliesMap.ts +0 -33
  480. package/src/react/hooks/useListPrimarySaleItems.ts +0 -42
  481. package/src/react/queries/getTokenSupplies.ts +0 -38
  482. package/src/react/ui/modals/TransferModal/_store.ts +0 -72
  483. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  484. package/tsconfig.tsbuildinfo +0 -1
  485. /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
  486. /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
  487. /package/dist/{index-ij9f8GAA.d.ts → index-DvpBZgor.d.ts} +0 -0
@@ -27,13 +27,17 @@ export function Media({
27
27
  name,
28
28
  assets,
29
29
  assetSrcPrefixUrl,
30
- className,
30
+ className = '',
31
+ containerClassName = '',
32
+ mediaClassname = '',
31
33
  isLoading,
32
34
  fallbackContent,
35
+ shouldListenForLoad = true,
33
36
  }: MediaProps) {
34
37
  const [assetLoadFailed, setAssetLoadFailed] = useState(false);
35
- const [assetLoading, setAssetLoading] = useState(true);
38
+ const [assetLoading, setAssetLoading] = useState(shouldListenForLoad);
36
39
  const [currentAssetIndex, setCurrentAssetIndex] = useState(0);
40
+ const [isSafari, setIsSafari] = useState(false);
37
41
  const [contentType, setContentType] = useState<ContentTypeState>({
38
42
  type: null,
39
43
  loading: true,
@@ -41,7 +45,10 @@ export function Media({
41
45
  });
42
46
 
43
47
  const videoRef = useRef<HTMLVideoElement>(null);
44
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
48
+
49
+ useEffect(() => {
50
+ setIsSafari(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));
51
+ }, []);
45
52
 
46
53
  const validAssets = assets.filter((asset): asset is string => !!asset);
47
54
  const assetUrl = validAssets[currentAssetIndex];
@@ -51,9 +58,9 @@ export function Media({
51
58
  : assetUrl
52
59
  : '';
53
60
 
54
- const classNames = cn(
61
+ const containerClassNames = cn(
55
62
  'relative aspect-square overflow-hidden bg-background-secondary',
56
- className,
63
+ containerClassName || className,
57
64
  );
58
65
 
59
66
  useEffect(() => {
@@ -101,7 +108,7 @@ export function Media({
101
108
  <div
102
109
  className={cn(
103
110
  'flex h-full w-full items-center justify-center',
104
- classNames,
111
+ containerClassNames,
105
112
  )}
106
113
  >
107
114
  {fallbackContent}
@@ -110,7 +117,7 @@ export function Media({
110
117
  }
111
118
 
112
119
  return (
113
- <div className={cn('h-full w-full', classNames)}>
120
+ <div className={cn('h-full w-full', containerClassNames)}>
114
121
  <img
115
122
  src={ChessTileImage}
116
123
  alt={name || 'Collectible'}
@@ -135,7 +142,7 @@ export function Media({
135
142
  <div
136
143
  className={cn(
137
144
  'flex w-full items-center justify-center rounded-lg',
138
- classNames,
145
+ containerClassNames,
139
146
  )}
140
147
  >
141
148
  {(assetLoading || contentType.loading || isLoading) && (
@@ -144,13 +151,13 @@ export function Media({
144
151
 
145
152
  <iframe
146
153
  title={name || 'Collectible'}
147
- className="aspect-square w-full"
154
+ className={cn('aspect-square w-full', mediaClassname)}
148
155
  src={proxiedAssetUrl}
149
156
  allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
150
157
  sandbox="allow-scripts"
151
158
  style={{ border: '0px' }}
152
- onError={handleAssetError}
153
- onLoad={handleAssetLoad}
159
+ onError={shouldListenForLoad ? handleAssetError : undefined}
160
+ onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
154
161
  />
155
162
  </div>
156
163
  );
@@ -158,12 +165,12 @@ export function Media({
158
165
 
159
166
  if (contentType.type === '3d-model' && !assetLoadFailed) {
160
167
  return (
161
- <div className={cn('h-full w-full', classNames)}>
168
+ <div className={cn('h-full w-full', containerClassNames)}>
162
169
  <ModelViewer
163
170
  src={proxiedAssetUrl}
164
171
  posterSrc={ChessTileImage}
165
- onLoad={handleAssetLoad}
166
- onError={handleAssetError}
172
+ onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
173
+ onError={shouldListenForLoad ? handleAssetError : undefined}
167
174
  />
168
175
  </div>
169
176
  );
@@ -176,10 +183,11 @@ export function Media({
176
183
  // we can't hide the video controls in safari, when user hovers over the video they show up.
177
184
  // `pointer-events-none` is the only way to hide them on hover
178
185
  isSafari && 'pointer-events-none',
186
+ mediaClassname,
179
187
  );
180
188
 
181
189
  return (
182
- <div className={classNames}>
190
+ <div className={containerClassNames}>
183
191
  {(assetLoading || contentType.loading || isLoading) && (
184
192
  <MediaSkeleton />
185
193
  )}
@@ -193,8 +201,8 @@ export function Media({
193
201
  playsInline
194
202
  muted
195
203
  controlsList="nodownload noremoteplayback nofullscreen"
196
- onError={handleAssetError}
197
- onLoadedMetadata={handleAssetLoad}
204
+ onError={shouldListenForLoad ? handleAssetError : undefined}
205
+ onLoadedMetadata={shouldListenForLoad ? handleAssetLoad : undefined}
198
206
  data-testid="collectible-asset-video"
199
207
  >
200
208
  <source src={proxiedAssetUrl} />
@@ -210,18 +218,19 @@ export function Media({
210
218
  const imgClassNames = cn(
211
219
  'absolute inset-0 h-full w-full object-cover transition-transform duration-200 ease-in-out group-hover:scale-hover',
212
220
  assetLoading || contentType.loading || isLoading ? 'invisible' : 'visible',
221
+ mediaClassname,
213
222
  );
214
223
 
215
224
  return (
216
- <div className={classNames}>
225
+ <div className={containerClassNames}>
217
226
  {(assetLoading || contentType.loading || isLoading) && <MediaSkeleton />}
218
227
 
219
228
  <img
220
229
  src={imgSrc}
221
230
  alt={name || 'Collectible'}
222
231
  className={imgClassNames}
223
- onError={handleAssetError}
224
- onLoad={handleAssetLoad}
232
+ onError={shouldListenForLoad ? handleAssetError : undefined}
233
+ onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
225
234
  />
226
235
  </div>
227
236
  );
@@ -12,9 +12,15 @@ type MediaProps = {
12
12
  name?: string;
13
13
  assets: (string | undefined)[];
14
14
  assetSrcPrefixUrl?: string;
15
+ /**
16
+ * @deprecated Use containerClassName instead
17
+ */
15
18
  className?: string;
19
+ containerClassName?: string;
20
+ mediaClassname?: string;
16
21
  isLoading?: boolean;
17
22
  fallbackContent?: ReactNode;
23
+ shouldListenForLoad?: boolean;
18
24
  };
19
25
 
20
26
  export type { ContentType, ContentTypeState, MediaProps };
@@ -1,14 +1,12 @@
1
- export * from './modals/modal-provider';
1
+ export { CollectibleCard } from './components/marketplace-collectible-card/CollectibleCard';
2
+ // types
3
+ export * from './components/marketplace-collectible-card/types';
4
+ // components
5
+ export { Media } from './components/media/Media';
6
+ export { useBuyModal } from './modals/BuyModal';
2
7
  export { useCreateListingModal } from './modals/CreateListingModal';
3
8
  export { useMakeOfferModal } from './modals/MakeOfferModal';
9
+ export * from './modals/modal-provider';
10
+ export { useSellModal } from './modals/SellModal';
4
11
  export { useSuccessfulPurchaseModal } from './modals/SuccessfulPurchaseModal';
5
12
  export { useTransferModal } from './modals/TransferModal';
6
- export { useSellModal } from './modals/SellModal';
7
- export { useBuyModal } from './modals/BuyModal';
8
-
9
- // components
10
- export { Media } from './components/media/Media';
11
- export { CollectibleCard } from './components/marketplace-collectible-card/CollectibleCard';
12
-
13
- // types
14
- export * from './components/marketplace-collectible-card/types';
@@ -7,6 +7,7 @@ import {
7
7
  OrderSide,
8
8
  OrderStatus,
9
9
  } from '../../../../_internal';
10
+ import type { DatabeatAnalytics } from '../../../../_internal/databeat';
10
11
  import { BuyModalRouter } from '../components/BuyModalRouter';
11
12
  import * as useLoadDataModule from '../hooks/useLoadData';
12
13
  import { buyModalStore } from '../store';
@@ -189,6 +190,10 @@ const mockShopData = {
189
190
  checkoutOptions: undefined,
190
191
  };
191
192
 
193
+ const mockAnalyticsFn = {
194
+ trackBuyModalOpened: vi.fn(),
195
+ } as unknown as DatabeatAnalytics;
196
+
192
197
  describe('BuyModalRouter', () => {
193
198
  beforeEach(() => {
194
199
  vi.clearAllMocks();
@@ -211,6 +216,7 @@ describe('BuyModalRouter', () => {
211
216
  orderId: '1',
212
217
  marketplaceType: 'market',
213
218
  },
219
+ analyticsFn: mockAnalyticsFn,
214
220
  });
215
221
 
216
222
  // Mock useLoadData to return complete data for ERC721 market flow
@@ -246,6 +252,7 @@ describe('BuyModalRouter', () => {
246
252
  orderId: '1',
247
253
  marketplaceType: 'market',
248
254
  },
255
+ analyticsFn: mockAnalyticsFn,
249
256
  });
250
257
 
251
258
  // Mock useLoadData to return complete data for ERC1155 market flow
@@ -279,6 +286,7 @@ describe('BuyModalRouter', () => {
279
286
  marketplace: MarketplaceKind.sequence_marketplace_v2,
280
287
  orderId: '1',
281
288
  },
289
+ analyticsFn: mockAnalyticsFn,
282
290
  });
283
291
 
284
292
  // Mock incomplete data
@@ -318,6 +326,7 @@ describe('BuyModalRouter', () => {
318
326
  },
319
327
  marketplaceType: 'shop',
320
328
  },
329
+ analyticsFn: mockAnalyticsFn,
321
330
  });
322
331
 
323
332
  // Mock useLoadData to return complete data for ERC721 shop flow
@@ -358,6 +367,7 @@ describe('BuyModalRouter', () => {
358
367
  },
359
368
  marketplaceType: 'shop',
360
369
  },
370
+ analyticsFn: mockAnalyticsFn,
361
371
  });
362
372
 
363
373
  // Mock useLoadData to return complete data for ERC1155 shop flow
@@ -397,6 +407,7 @@ describe('BuyModalRouter', () => {
397
407
  },
398
408
  marketplaceType: 'shop',
399
409
  },
410
+ analyticsFn: mockAnalyticsFn,
400
411
  });
401
412
 
402
413
  // Mock incomplete shop data
@@ -429,6 +440,7 @@ describe('BuyModalRouter', () => {
429
440
  marketplace: MarketplaceKind.sequence_marketplace_v2,
430
441
  orderId: '1',
431
442
  },
443
+ analyticsFn: mockAnalyticsFn,
432
444
  });
433
445
 
434
446
  // Mock error state
@@ -459,6 +471,7 @@ describe('BuyModalRouter', () => {
459
471
  marketplace: MarketplaceKind.sequence_marketplace_v2,
460
472
  orderId: '1',
461
473
  },
474
+ analyticsFn: mockAnalyticsFn,
462
475
  });
463
476
 
464
477
  // Mock loading state
@@ -495,6 +508,7 @@ describe('BuyModalRouter', () => {
495
508
  },
496
509
  marketplaceType: 'shop',
497
510
  },
511
+ analyticsFn: mockAnalyticsFn,
498
512
  });
499
513
 
500
514
  // Mock unsupported collection type
@@ -531,6 +545,7 @@ describe('BuyModalRouter', () => {
531
545
  orderId: '1',
532
546
  // marketplaceType not specified - should default to MARKET
533
547
  },
548
+ analyticsFn: mockAnalyticsFn,
534
549
  });
535
550
 
536
551
  // Mock useLoadData to return complete data for ERC721 market flow
@@ -1,8 +1,10 @@
1
1
  import { ResourceStatus } from '@0xsequence/metadata';
2
2
  import { render, screen, waitFor } from '@test';
3
3
  import type { Address } from 'viem';
4
+ import type { Mock, MockInstance } from 'vitest';
4
5
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
6
  import { TransactionCrypto } from '../../../../_internal';
7
+ import type { DatabeatAnalytics } from '../../../../_internal/databeat';
6
8
  import { ERC1155ShopModal } from '../components/ERC1155ShopModal';
7
9
  import * as useERC1155CheckoutModule from '../hooks/useERC1155Checkout';
8
10
  import { buyModalStore } from '../store';
@@ -10,6 +12,10 @@ import { buyModalStore } from '../store';
10
12
  // Mock the checkout hook
11
13
  vi.mock('../hooks/useERC1155Checkout');
12
14
 
15
+ const mockAnalyticsFn = {
16
+ trackBuyModalOpened: vi.fn(),
17
+ } as unknown as DatabeatAnalytics;
18
+
13
19
  const mockCollection = {
14
20
  address: '0x123' as Address,
15
21
  chainId: 1,
@@ -45,9 +51,8 @@ const mockShopData = {
45
51
  };
46
52
 
47
53
  describe('ERC1155ShopModal', () => {
48
- let mockOpenCheckoutModal: ReturnType<typeof vi.fn>;
49
- // biome-ignore lint/suspicious/noExplicitAny: Required for mock typing in tests
50
- let mockUseERC1155Checkout: any;
54
+ let mockOpenCheckoutModal: Mock;
55
+ let mockUseERC1155Checkout: MockInstance;
51
56
 
52
57
  beforeEach(() => {
53
58
  vi.clearAllMocks();
@@ -60,15 +65,61 @@ describe('ERC1155ShopModal', () => {
60
65
  useERC1155CheckoutModule,
61
66
  'useERC1155Checkout',
62
67
  );
68
+
69
+ // Initialize BuyModal props
70
+ buyModalStore.send({
71
+ type: 'open',
72
+ props: {
73
+ chainId: 1,
74
+ collectionAddress: mockCollection.address,
75
+ salesContractAddress: mockShopData.salesContractAddress as Address,
76
+ items: mockShopData.items,
77
+ quantityDecimals: 0,
78
+ quantityRemaining: 10,
79
+ salePrice: {
80
+ amount: mockShopData.salePrice.amount,
81
+ currencyAddress: mockShopData.salePrice.currencyAddress as Address,
82
+ },
83
+ marketplaceType: 'shop',
84
+ },
85
+ analyticsFn: mockAnalyticsFn,
86
+ });
63
87
  });
64
88
 
65
89
  afterEach(() => {
66
90
  vi.restoreAllMocks();
67
91
  });
68
92
 
69
- // TODO: Fix skipped tests
70
- it.skip('should open checkout modal when data is loaded and enabled', async () => {
71
- // Mock successful checkout hook
93
+ it('should show quantity modal initially', async () => {
94
+ mockUseERC1155Checkout.mockReturnValue({
95
+ openCheckoutModal: mockOpenCheckoutModal,
96
+ isLoading: false,
97
+ isError: false,
98
+ isEnabled: true,
99
+ checkoutParams: {} as never,
100
+ });
101
+
102
+ render(
103
+ <ERC1155ShopModal
104
+ collection={mockCollection}
105
+ shopData={mockShopData}
106
+ chainId={1}
107
+ />,
108
+ );
109
+
110
+ expect(screen.getByText('Select Quantity')).toBeInTheDocument();
111
+
112
+ // Wait for loading state to finish
113
+ await waitFor(() => {
114
+ expect(
115
+ screen.getByRole('button', { name: 'Buy now' }),
116
+ ).toBeInTheDocument();
117
+ });
118
+
119
+ expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
120
+ });
121
+
122
+ it('should open checkout modal after quantity is selected', async () => {
72
123
  mockUseERC1155Checkout.mockReturnValue({
73
124
  openCheckoutModal: mockOpenCheckoutModal,
74
125
  isLoading: false,
@@ -85,6 +136,9 @@ describe('ERC1155ShopModal', () => {
85
136
  />,
86
137
  );
87
138
 
139
+ // Set quantity in store
140
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
141
+
88
142
  // Wait for checkout modal to be opened
89
143
  await waitFor(() => {
90
144
  expect(mockOpenCheckoutModal).toHaveBeenCalled();
@@ -94,8 +148,7 @@ describe('ERC1155ShopModal', () => {
94
148
  expect(buyModalStore.getSnapshot().context.checkoutModalState).toBe('open');
95
149
  });
96
150
 
97
- it.skip('should show loading modal when checkout is loading', () => {
98
- // Mock loading state
151
+ it('should show loading modal when checkout is loading', async () => {
99
152
  mockUseERC1155Checkout.mockReturnValue({
100
153
  openCheckoutModal: mockOpenCheckoutModal,
101
154
  isLoading: true,
@@ -104,6 +157,9 @@ describe('ERC1155ShopModal', () => {
104
157
  checkoutParams: {} as never,
105
158
  });
106
159
 
160
+ // Set quantity in store before rendering
161
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
162
+
107
163
  render(
108
164
  <ERC1155ShopModal
109
165
  collection={mockCollection}
@@ -116,8 +172,7 @@ describe('ERC1155ShopModal', () => {
116
172
  expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
117
173
  });
118
174
 
119
- it.skip('should render nothing when checkout is in error state', () => {
120
- // Mock error state
175
+ it('should render nothing when checkout is in error state', () => {
121
176
  mockUseERC1155Checkout.mockReturnValue({
122
177
  openCheckoutModal: mockOpenCheckoutModal,
123
178
  isLoading: false,
@@ -126,6 +181,9 @@ describe('ERC1155ShopModal', () => {
126
181
  checkoutParams: {} as never,
127
182
  });
128
183
 
184
+ // Set quantity in store before rendering
185
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
186
+
129
187
  const { container } = render(
130
188
  <ERC1155ShopModal
131
189
  collection={mockCollection}
@@ -138,8 +196,7 @@ describe('ERC1155ShopModal', () => {
138
196
  expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
139
197
  });
140
198
 
141
- it.skip('should not open checkout modal when not enabled', () => {
142
- // Mock disabled state
199
+ it('should not open checkout modal when not enabled', () => {
143
200
  mockUseERC1155Checkout.mockReturnValue({
144
201
  openCheckoutModal: mockOpenCheckoutModal,
145
202
  isLoading: false,
@@ -148,6 +205,9 @@ describe('ERC1155ShopModal', () => {
148
205
  checkoutParams: {} as never,
149
206
  });
150
207
 
208
+ // Set quantity in store before rendering
209
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
210
+
151
211
  const { container } = render(
152
212
  <ERC1155ShopModal
153
213
  collection={mockCollection}
@@ -160,7 +220,7 @@ describe('ERC1155ShopModal', () => {
160
220
  expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
161
221
  });
162
222
 
163
- it.skip('should pass correct props to useERC1155Checkout hook', () => {
223
+ it('should pass correct props to useERC1155Checkout hook', () => {
164
224
  mockUseERC1155Checkout.mockReturnValue({
165
225
  openCheckoutModal: mockOpenCheckoutModal,
166
226
  isLoading: false,
@@ -169,6 +229,9 @@ describe('ERC1155ShopModal', () => {
169
229
  checkoutParams: {} as never,
170
230
  });
171
231
 
232
+ // Set quantity in store before rendering
233
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
234
+
172
235
  render(
173
236
  <ERC1155ShopModal
174
237
  collection={mockCollection}
@@ -181,17 +244,17 @@ describe('ERC1155ShopModal', () => {
181
244
  chainId: 1,
182
245
  salesContractAddress: '0x456',
183
246
  collectionAddress: '0x123',
184
- items: [
185
- { tokenId: '1', quantity: '2' },
186
- { tokenId: '2', quantity: '1' },
187
- ],
247
+ items: mockShopData.items.map((item) => ({
248
+ ...item,
249
+ quantity: '2', // This comes from the store's quantity
250
+ })),
188
251
  checkoutOptions: mockShopData.checkoutOptions,
189
252
  customProviderCallback: undefined,
190
253
  enabled: true,
191
254
  });
192
255
  });
193
256
 
194
- it.skip('should handle missing tokenId and quantity gracefully', () => {
257
+ it('should handle missing tokenId and quantity gracefully', () => {
195
258
  const shopDataWithMissingProps = {
196
259
  ...mockShopData,
197
260
  items: [
@@ -208,6 +271,9 @@ describe('ERC1155ShopModal', () => {
208
271
  checkoutParams: {} as never,
209
272
  });
210
273
 
274
+ // Set quantity in store before rendering
275
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
276
+
211
277
  render(
212
278
  <ERC1155ShopModal
213
279
  collection={mockCollection}
@@ -216,82 +282,21 @@ describe('ERC1155ShopModal', () => {
216
282
  />,
217
283
  );
218
284
 
219
- // Check that defaults were applied
220
285
  expect(mockUseERC1155Checkout).toHaveBeenCalledWith({
221
286
  chainId: 1,
222
287
  salesContractAddress: '0x456',
223
288
  collectionAddress: '0x123',
224
- items: [
225
- { tokenId: '0', quantity: '1' },
226
- { tokenId: '2', quantity: '1' },
227
- ],
289
+ items: shopDataWithMissingProps.items.map((item) => ({
290
+ tokenId: item.tokenId ?? '0',
291
+ quantity: '2', // This comes from the store's quantity
292
+ })),
228
293
  checkoutOptions: mockShopData.checkoutOptions,
229
294
  customProviderCallback: undefined,
230
295
  enabled: true,
231
296
  });
232
297
  });
233
298
 
234
- it.skip('should disable checkout when sales contract address is missing', () => {
235
- const shopDataWithoutContract = {
236
- ...mockShopData,
237
- salesContractAddress: '',
238
- };
239
-
240
- mockUseERC1155Checkout.mockReturnValue({
241
- openCheckoutModal: mockOpenCheckoutModal,
242
- isLoading: false,
243
- isError: false,
244
- isEnabled: false,
245
- checkoutParams: {} as never,
246
- });
247
-
248
- render(
249
- <ERC1155ShopModal
250
- collection={mockCollection}
251
- shopData={shopDataWithoutContract}
252
- chainId={1}
253
- />,
254
- );
255
-
256
- expect(mockUseERC1155Checkout).toHaveBeenCalledWith(
257
- expect.objectContaining({
258
- salesContractAddress: '',
259
- enabled: false,
260
- }),
261
- );
262
- });
263
-
264
- it.skip('should pass empty items array to useERC1155Checkout when items array is empty', () => {
265
- const shopDataWithoutItems = {
266
- ...mockShopData,
267
- items: [],
268
- };
269
-
270
- mockUseERC1155Checkout.mockReturnValue({
271
- openCheckoutModal: mockOpenCheckoutModal,
272
- isLoading: false,
273
- isError: false,
274
- isEnabled: false,
275
- checkoutParams: {} as never,
276
- });
277
-
278
- render(
279
- <ERC1155ShopModal
280
- collection={mockCollection}
281
- shopData={shopDataWithoutItems}
282
- chainId={1}
283
- />,
284
- );
285
-
286
- expect(mockUseERC1155Checkout).toHaveBeenCalledWith(
287
- expect.objectContaining({
288
- items: [],
289
- enabled: true, // Component still passes true, but useERC1155Checkout can decide based on empty items
290
- }),
291
- );
292
- });
293
-
294
- it.skip('should only open checkout modal once when state is idle', async () => {
299
+ it('should only open checkout modal once when state is idle', async () => {
295
300
  mockUseERC1155Checkout.mockReturnValue({
296
301
  openCheckoutModal: mockOpenCheckoutModal,
297
302
  isLoading: false,
@@ -300,6 +305,9 @@ describe('ERC1155ShopModal', () => {
300
305
  checkoutParams: {} as never,
301
306
  });
302
307
 
308
+ // Set quantity in store before rendering
309
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
310
+
303
311
  const { rerender } = render(
304
312
  <ERC1155ShopModal
305
313
  collection={mockCollection}
@@ -328,7 +336,7 @@ describe('ERC1155ShopModal', () => {
328
336
  });
329
337
  });
330
338
 
331
- it.skip('should handle checkout options being undefined', () => {
339
+ it('should handle checkout options being undefined', () => {
332
340
  const shopDataWithoutCheckoutOptions = {
333
341
  ...mockShopData,
334
342
  checkoutOptions: undefined,
@@ -342,6 +350,9 @@ describe('ERC1155ShopModal', () => {
342
350
  checkoutParams: {} as never,
343
351
  });
344
352
 
353
+ // Set quantity in store before rendering
354
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
355
+
345
356
  render(
346
357
  <ERC1155ShopModal
347
358
  collection={mockCollection}
@@ -357,7 +368,7 @@ describe('ERC1155ShopModal', () => {
357
368
  );
358
369
  });
359
370
 
360
- it.skip('should show loading modal with correct chain ID', () => {
371
+ it('should show loading modal with correct chain ID', () => {
361
372
  mockUseERC1155Checkout.mockReturnValue({
362
373
  openCheckoutModal: mockOpenCheckoutModal,
363
374
  isLoading: true,
@@ -366,6 +377,9 @@ describe('ERC1155ShopModal', () => {
366
377
  checkoutParams: {} as never,
367
378
  });
368
379
 
380
+ // Set quantity in store before rendering
381
+ buyModalStore.send({ type: 'setQuantity', quantity: 2 });
382
+
369
383
  render(
370
384
  <ERC1155ShopModal
371
385
  collection={mockCollection}
@@ -374,7 +388,6 @@ describe('ERC1155ShopModal', () => {
374
388
  />,
375
389
  );
376
390
 
377
- // Check that LoadingModal received the correct chainId prop
378
391
  expect(screen.getByText('Loading Sequence Pay')).toBeInTheDocument();
379
392
  expect(mockUseERC1155Checkout).toHaveBeenCalledWith(
380
393
  expect.objectContaining({