@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
@@ -1,51 +1,137 @@
1
- import { skipToken, useQuery } from '@tanstack/react-query';
2
- import { type Address, erc20Abi, formatUnits, zeroAddress } from 'viem';
3
- import { usePublicClient } from 'wagmi';
4
- export function useCurrencyBalance({
5
- currencyAddress,
6
- chainId,
7
- userAddress,
8
- }: {
1
+ 'use client';
2
+
3
+ import type { Address } from 'viem';
4
+ import { erc20Abi, formatUnits, zeroAddress } from 'viem';
5
+ import { useBalance, useReadContracts } from 'wagmi';
6
+
7
+ export type UseCurrencyBalanceArgs = {
9
8
  currencyAddress: Address | undefined;
10
9
  chainId: number | undefined;
11
10
  userAddress: Address | undefined;
12
- }) {
13
- const publicClient = usePublicClient({ chainId });
14
-
15
- return useQuery({
16
- queryKey: ['balance', currencyAddress, chainId, userAddress],
17
- queryFn:
18
- !!userAddress && !!chainId && !!currencyAddress && !!publicClient
19
- ? async () => {
20
- if (currencyAddress === zeroAddress) {
21
- const balance = await publicClient.getBalance({
22
- address: userAddress,
23
- });
24
- return {
25
- value: balance,
26
- formatted: formatUnits(balance, 18),
27
- };
28
- }
29
-
30
- const [balance, decimals] = await Promise.all([
31
- publicClient.readContract({
32
- address: currencyAddress,
33
- abi: erc20Abi,
34
- functionName: 'balanceOf',
35
- args: [userAddress],
36
- }),
37
- publicClient.readContract({
38
- address: currencyAddress,
39
- abi: erc20Abi,
40
- functionName: 'decimals',
41
- }),
42
- ]);
43
-
44
- return {
45
- value: balance,
46
- formatted: formatUnits(balance, decimals),
47
- };
48
- }
49
- : skipToken,
11
+ query?: {
12
+ enabled?: boolean;
13
+ };
14
+ };
15
+
16
+ /**
17
+ * Hook to fetch cryptocurrency balance for a user
18
+ *
19
+ * Retrieves the balance of a specific currency (native token or ERC-20)
20
+ * for a given user address using wagmi. Handles both native tokens (ETH, MATIC, etc.)
21
+ * and ERC-20 tokens with automatic decimal formatting through direct blockchain calls.
22
+ *
23
+ * @param args - Configuration parameters
24
+ * @param args.currencyAddress - The currency contract address (use zero address for native tokens)
25
+ * @param args.chainId - The chain ID to query on
26
+ * @param args.userAddress - The user address to check balance for
27
+ * @param args.query - Optional wagmi query configuration
28
+ *
29
+ * @returns Wagmi query result containing raw and formatted balance values
30
+ *
31
+ * @example
32
+ * Native token balance (ETH):
33
+ * ```typescript
34
+ * const { data: ethBalance, isLoading } = useCurrencyBalance({
35
+ * currencyAddress: '0x0000000000000000000000000000000000000000', // Zero address for ETH
36
+ * chainId: 1,
37
+ * userAddress: '0x1234...'
38
+ * })
39
+ *
40
+ * if (data) {
41
+ * console.log(`ETH Balance: ${data.formatted} ETH`); // e.g., "1.5 ETH"
42
+ * console.log(`Raw balance: ${data.value.toString()}`); // e.g., "1500000000000000000"
43
+ * }
44
+ * ```
45
+ *
46
+ * @example
47
+ * ERC-20 token balance (USDC):
48
+ * ```typescript
49
+ * const { data: usdcBalance } = useCurrencyBalance({
50
+ * currencyAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
51
+ * chainId: 1,
52
+ * userAddress: userAddress,
53
+ * query: {
54
+ * enabled: Boolean(userAddress), // Only fetch when user is connected
55
+ * refetchInterval: 30000 // Update every 30 seconds
56
+ * }
57
+ * })
58
+ *
59
+ * if (data) {
60
+ * console.log(`USDC Balance: $${data.formatted}`); // e.g., "$1000.50"
61
+ * }
62
+ * ```
63
+ */
64
+ export function useCurrencyBalance(args: UseCurrencyBalanceArgs) {
65
+ const { currencyAddress, chainId, userAddress, query } = args;
66
+
67
+ // Check if all required parameters are present
68
+ const hasAllParams = Boolean(currencyAddress && chainId && userAddress);
69
+ const isNativeToken = currencyAddress === zeroAddress;
70
+
71
+ // For native token (zero address), use useBalance
72
+ const nativeBalance = useBalance({
73
+ address: userAddress,
74
+ chainId,
75
+ query: {
76
+ ...query,
77
+ enabled: hasAllParams && isNativeToken && (query?.enabled ?? true),
78
+ },
50
79
  });
80
+
81
+ // For ERC-20 tokens, use useReadContracts to get both balance and decimals
82
+ const erc20Balance = useReadContracts({
83
+ contracts:
84
+ hasAllParams && !isNativeToken && currencyAddress && userAddress
85
+ ? [
86
+ {
87
+ address: currencyAddress,
88
+ abi: erc20Abi,
89
+ functionName: 'balanceOf',
90
+ args: [userAddress],
91
+ chainId,
92
+ },
93
+ {
94
+ address: currencyAddress,
95
+ abi: erc20Abi,
96
+ functionName: 'decimals',
97
+ chainId,
98
+ },
99
+ ]
100
+ : [],
101
+ query: {
102
+ ...query,
103
+ enabled: hasAllParams && !isNativeToken && (query?.enabled ?? true),
104
+ },
105
+ });
106
+
107
+ // Return native balance result if zero address
108
+ if (isNativeToken) {
109
+ return {
110
+ ...nativeBalance,
111
+ data: nativeBalance.data
112
+ ? {
113
+ value: nativeBalance.data.value,
114
+ formatted: nativeBalance.data.formatted,
115
+ }
116
+ : undefined,
117
+ };
118
+ }
119
+
120
+ // Return ERC-20 balance result with formatted data
121
+ const [balanceResult, decimalsResult] = erc20Balance.data || [];
122
+ const balance = balanceResult?.result;
123
+ const decimals = decimalsResult?.result;
124
+
125
+ const formattedData =
126
+ balance !== undefined && decimals !== undefined
127
+ ? {
128
+ value: balance,
129
+ formatted: formatUnits(balance, decimals),
130
+ }
131
+ : undefined;
132
+
133
+ return {
134
+ ...erc20Balance,
135
+ data: formattedData,
136
+ };
51
137
  }
@@ -1,7 +1,7 @@
1
1
  import type { Address } from 'viem';
2
2
  import { useReadContract } from 'wagmi';
3
3
  import { ERC721_SALE_ABI } from '../../../../sdk/src';
4
- import { useGetTokenSuppliesMap } from './useGetTokenSuppliesMap';
4
+ import { useTokenSupplies } from './useTokenSupplies';
5
5
 
6
6
  interface UseERC721SaleMintedTokensProps {
7
7
  chainId: number;
@@ -34,9 +34,8 @@ export function useERC721SaleMintedTokens({
34
34
 
35
35
  // Get token supplies for all potential tokens in the sale
36
36
  const { data: tokenSupplies, isLoading: tokenSuppliesLoading } =
37
- useGetTokenSuppliesMap({
37
+ useTokenSupplies({
38
38
  chainId,
39
- tokenIds,
40
39
  collectionAddress: contractAddress as Address,
41
40
  });
42
41
 
@@ -44,8 +43,12 @@ export function useERC721SaleMintedTokens({
44
43
 
45
44
  // Count how many tokens have been minted/owned
46
45
  const ownedCount = tokenIds.reduce((count, tokenId) => {
47
- const supplies = tokenSupplies?.supplies[contractAddress];
48
- const supply = supplies?.find((s) => s.tokenID === tokenId);
46
+ let supply: { tokenID: string; supply: string } | undefined;
47
+
48
+ if (tokenSupplies) {
49
+ supply = tokenSupplies.tokenIDs.find((s) => s.tokenID === tokenId);
50
+ }
51
+
49
52
  // If supply exists and is greater than 0, token exists and is owned
50
53
  const hasOwner = supply ? BigInt(supply.supply) > 0n : false;
51
54
  return count + (hasOwner ? 1 : 0);
@@ -1,5 +1,3 @@
1
- import { useMemo } from 'react';
2
-
3
1
  import {
4
2
  createSerializer,
5
3
  parseAsBoolean,
@@ -7,6 +5,7 @@ import {
7
5
  parseAsString,
8
6
  useQueryState,
9
7
  } from 'nuqs';
8
+ import { useMemo } from 'react';
10
9
  import { type PropertyFilter, PropertyType } from '../_internal';
11
10
 
12
11
  interface StringFilterValues {
@@ -1,126 +1,152 @@
1
+ 'use client';
2
+
1
3
  import type { PropertyFilter } from '@0xsequence/metadata';
2
- import { queryOptions, useQuery } from '@tanstack/react-query';
3
- import { FilterCondition, type SdkConfig } from '../../types';
4
- import { compareAddress } from '../../utils';
4
+ import { useQuery } from '@tanstack/react-query';
5
+ import type { Optional } from '../_internal';
5
6
  import {
6
- collectableKeys,
7
- getMetadataClient,
8
- getQueryClient,
9
- } from '../_internal';
10
- import { marketplaceConfigOptions } from '../queries/marketplaceConfig';
7
+ type FetchFiltersParams,
8
+ type FiltersQueryOptions,
9
+ filtersQueryOptions,
10
+ } from '../queries/filters';
11
11
  import { useConfig } from './useConfig';
12
12
 
13
- export type UseFiltersArgs = {
14
- chainId: number;
15
- collectionAddress: string;
16
- showAllFilters?: boolean;
17
- excludePropertyValues?: boolean;
18
- query?: {
19
- enabled?: boolean;
20
- };
21
- };
22
-
23
- export type UseFilterReturn = Awaited<ReturnType<typeof fetchFilters>>;
24
-
25
- export const fetchFilters = async (args: UseFiltersArgs, config: SdkConfig) => {
26
- const parsedArgs = args;
27
- const metadataClient = getMetadataClient(config);
28
-
29
- const filters = await metadataClient
30
- .getTokenMetadataPropertyFilters({
31
- chainID: parsedArgs.chainId.toString(),
32
- contractAddress: parsedArgs.collectionAddress,
33
- excludeProperties: [],
34
- excludePropertyValues: parsedArgs.excludePropertyValues,
35
- })
36
- .then((resp) => resp.filters);
37
-
38
- if (args.showAllFilters) return filters;
39
-
40
- const queryClient = getQueryClient();
41
- const marketplaceConfig = await queryClient.fetchQuery(
42
- marketplaceConfigOptions(config),
43
- );
44
- const collectionFilters = marketplaceConfig.market.collections.find((c) =>
45
- compareAddress(c.itemsAddress, parsedArgs.collectionAddress),
46
- )?.filterSettings;
47
-
48
- if (
49
- !collectionFilters?.exclusions ||
50
- collectionFilters.exclusions.length === 0 ||
51
- !collectionFilters.filterOrder ||
52
- collectionFilters.filterOrder.length === 0
53
- )
54
- return filters;
55
-
56
- const { filterOrder, exclusions } = collectionFilters;
57
-
58
- const sortedFilters = filters.toSorted((a, b) => {
59
- const aIndex =
60
- filterOrder.indexOf(a.name) > -1
61
- ? filterOrder.indexOf(a.name)
62
- : filterOrder.length;
63
- const bIndex =
64
- filterOrder.indexOf(b.name) > -1
65
- ? filterOrder.indexOf(b.name)
66
- : filterOrder.length;
67
- return aIndex - bIndex;
13
+ export type UseFiltersParams = Optional<FiltersQueryOptions, 'config'>;
14
+
15
+ /**
16
+ * Hook to fetch metadata filters for a collection
17
+ *
18
+ * Retrieves property filters for a collection from the metadata service,
19
+ * with support for marketplace-specific filter configuration including
20
+ * exclusion rules and custom ordering.
21
+ *
22
+ * @param params - Configuration parameters
23
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
24
+ * @param params.collectionAddress - The collection contract address to fetch filters for
25
+ * @param params.showAllFilters - Whether to show all filters or apply marketplace filtering
26
+ * @param params.excludePropertyValues - Whether to exclude property values from the response
27
+ * @param params.query - Optional React Query configuration
28
+ *
29
+ * @returns Query result containing property filters for the collection
30
+ *
31
+ * @example
32
+ * Basic usage:
33
+ * ```typescript
34
+ * const { data: filters, isLoading } = useFilters({
35
+ * chainId: 137,
36
+ * collectionAddress: '0x1234...'
37
+ * })
38
+ *
39
+ * if (data) {
40
+ * console.log(`Found ${data.length} filters`);
41
+ * data.forEach(filter => {
42
+ * console.log(`${filter.name}: ${filter.values?.join(', ')}`);
43
+ * });
44
+ * }
45
+ * ```
46
+ *
47
+ * @example
48
+ * With marketplace filtering disabled:
49
+ * ```typescript
50
+ * const { data: allFilters } = useFilters({
51
+ * chainId: 1,
52
+ * collectionAddress: '0x5678...',
53
+ * showAllFilters: true, // Bypass marketplace filter rules
54
+ * query: {
55
+ * enabled: Boolean(selectedCollection),
56
+ * staleTime: 300000 // Cache for 5 minutes
57
+ * }
58
+ * })
59
+ * ```
60
+ *
61
+ * @example
62
+ * Exclude property values for faster loading:
63
+ * ```typescript
64
+ * const { data: filterNames } = useFilters({
65
+ * chainId: 137,
66
+ * collectionAddress: collectionAddress,
67
+ * excludePropertyValues: true, // Only get filter names, not values
68
+ * query: {
69
+ * enabled: Boolean(collectionAddress)
70
+ * }
71
+ * })
72
+ * ```
73
+ */
74
+ export function useFilters(params: UseFiltersParams) {
75
+ const defaultConfig = useConfig();
76
+
77
+ const { config = defaultConfig, ...rest } = params;
78
+
79
+ const queryOptions = filtersQueryOptions({
80
+ config,
81
+ ...rest,
68
82
  });
69
83
 
70
- const filteredResults = sortedFilters.reduce<PropertyFilter[]>(
71
- (acc, filter) => {
72
- const exclusionRule = exclusions.find((rule) => rule.key === filter.name);
73
-
74
- if (!exclusionRule) {
75
- acc.push(filter);
76
- return acc;
77
- }
78
-
79
- if (exclusionRule.condition === FilterCondition.ENTIRE_KEY) {
80
- return acc;
81
- }
82
-
83
- if (
84
- exclusionRule.condition === FilterCondition.SPECIFIC_VALUE &&
85
- exclusionRule.value
86
- ) {
87
- const filteredValues =
88
- filter.values?.filter((value) => value !== exclusionRule.value) || [];
89
- if (filteredValues.length > 0) {
90
- acc.push({ ...filter, values: filteredValues });
91
- }
92
- }
93
-
94
- return acc;
95
- },
96
- [],
97
- );
98
-
99
- return filteredResults;
100
- };
101
-
102
- export const filtersOptions = (args: UseFiltersArgs, config: SdkConfig) => {
103
- return queryOptions({
104
- ...args.query,
105
- queryKey: [...collectableKeys.filter, args, config],
106
- queryFn: () => fetchFilters(args, config),
84
+ return useQuery({
85
+ ...queryOptions,
107
86
  });
108
- };
109
-
110
- export const useFilters = (args: UseFiltersArgs) => {
111
- const config = useConfig();
112
- return useQuery(filtersOptions(args, config));
113
- };
114
-
115
- export const useFiltersProgressive = (args: UseFiltersArgs) => {
116
- const config = useConfig();
87
+ }
88
+
89
+ /**
90
+ * Hook to progressively load collection filters
91
+ *
92
+ * First loads filter names only for fast initial display, then loads full filter
93
+ * data with values. Uses placeholder data to provide immediate feedback while
94
+ * full data loads in the background.
95
+ *
96
+ * @param params - Configuration parameters (same as useFilters)
97
+ *
98
+ * @returns Query result with additional loading states
99
+ * @returns result.isLoadingNames - Whether filter names are still loading
100
+ * @returns result.isFetchingValues - Whether filter values are being fetched
101
+ *
102
+ * @example
103
+ * Progressive filter loading:
104
+ * ```typescript
105
+ * const {
106
+ * data: filters,
107
+ * isLoadingNames,
108
+ * isFetchingValues,
109
+ * isLoading
110
+ * } = useFiltersProgressive({
111
+ * chainId: 137,
112
+ * collectionAddress: '0x1234...'
113
+ * })
114
+ *
115
+ * if (isLoadingNames) {
116
+ * return <div>Loading filters...</div>;
117
+ * }
118
+ *
119
+ * return (
120
+ * <div>
121
+ * {filters?.map(filter => (
122
+ * <FilterComponent
123
+ * key={filter.name}
124
+ * filter={filter}
125
+ * isLoadingValues={isFetchingValues}
126
+ * />
127
+ * ))}
128
+ * </div>
129
+ * );
130
+ * ```
131
+ */
132
+ export function useFiltersProgressive(params: UseFiltersParams) {
133
+ const defaultConfig = useConfig();
134
+
135
+ const { config = defaultConfig, ...rest } = params;
117
136
 
118
137
  const namesQuery = useQuery(
119
- filtersOptions({ ...args, excludePropertyValues: true }, config),
138
+ filtersQueryOptions({
139
+ config,
140
+ ...rest,
141
+ excludePropertyValues: true,
142
+ }),
120
143
  );
121
144
 
122
145
  const fullQuery = useQuery({
123
- ...filtersOptions(args, config),
146
+ ...filtersQueryOptions({
147
+ config,
148
+ ...rest,
149
+ }),
124
150
  placeholderData: namesQuery.data,
125
151
  });
126
152
 
@@ -132,4 +158,21 @@ export const useFiltersProgressive = (args: UseFiltersArgs) => {
132
158
  isFetchingValues,
133
159
  isLoadingNames,
134
160
  };
161
+ }
162
+
163
+ export { filtersQueryOptions };
164
+
165
+ export type { FetchFiltersParams, FiltersQueryOptions };
166
+
167
+ // Legacy exports for backward compatibility
168
+ export type UseFiltersArgs = {
169
+ chainId: number;
170
+ collectionAddress: string;
171
+ showAllFilters?: boolean;
172
+ excludePropertyValues?: boolean;
173
+ query?: {
174
+ enabled?: boolean;
175
+ };
135
176
  };
177
+
178
+ export type UseFilterReturn = PropertyFilter[];
@@ -1,45 +1,70 @@
1
- import { queryOptions, useQuery } from '@tanstack/react-query';
2
- import { z } from 'zod';
3
- import type { SdkConfig } from '../../types';
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
4
5
  import {
5
- AddressSchema,
6
- QueryArgSchema,
7
- collectableKeys,
8
- getMarketplaceClient,
9
- } from '../_internal';
6
+ type FetchFloorOrderParams,
7
+ type FloorOrderQueryOptions,
8
+ floorOrderQueryOptions,
9
+ } from '../queries/floorOrder';
10
10
  import { useConfig } from './useConfig';
11
11
 
12
- const UseFloorOrderSchema = z.object({
13
- chainId: z.number(),
14
- collectionAddress: AddressSchema,
15
- query: QueryArgSchema,
16
- });
17
-
18
- export type UseFloorOrderArgs = z.infer<typeof UseFloorOrderSchema>;
19
-
20
- export type UseFloorOrderReturn = Awaited<ReturnType<typeof fetchFloorOrder>>;
21
-
22
- const fetchFloorOrder = async (args: UseFloorOrderArgs, config: SdkConfig) => {
23
- const marketplaceClient = getMarketplaceClient(config);
24
- return marketplaceClient
25
- .getFloorOrder({
26
- chainId: String(args.chainId),
27
- contractAddress: args.collectionAddress,
28
- })
29
- .then((data) => data.collectible);
30
- };
31
-
32
- export const floorOrderOptions = (
33
- args: UseFloorOrderArgs,
34
- config: SdkConfig,
35
- ) => {
36
- return queryOptions({
37
- queryKey: [...collectableKeys.floorOrders, args, config],
38
- queryFn: () => fetchFloorOrder(args, config),
12
+ export type UseFloorOrderParams = Optional<FloorOrderQueryOptions, 'config'>;
13
+
14
+ /**
15
+ * Hook to fetch the floor order for a collection
16
+ *
17
+ * Retrieves the lowest priced order (listing) currently available for any token
18
+ * in the specified collection from the marketplace.
19
+ *
20
+ * @param params - Configuration parameters
21
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
22
+ * @param params.collectionAddress - The collection contract address
23
+ * @param params.filter - Optional filter criteria for collectibles
24
+ * @param params.query - Optional React Query configuration
25
+ *
26
+ * @returns Query result containing the floor order data for the collection
27
+ *
28
+ * @example
29
+ * Basic usage:
30
+ * ```typescript
31
+ * const { data, isLoading } = useFloorOrder({
32
+ * chainId: 137,
33
+ * collectionAddress: '0x...'
34
+ * })
35
+ * ```
36
+ *
37
+ * @example
38
+ * With filters and custom query options:
39
+ * ```typescript
40
+ * const { data, isLoading } = useFloorOrder({
41
+ * chainId: 1,
42
+ * collectionAddress: '0x...',
43
+ * filter: {
44
+ * minPrice: '1000000000000000000' // 1 ETH in wei
45
+ * },
46
+ * query: {
47
+ * refetchInterval: 30000,
48
+ * enabled: hasCollectionAddress
49
+ * }
50
+ * })
51
+ * ```
52
+ */
53
+ export function useFloorOrder(params: UseFloorOrderParams) {
54
+ const defaultConfig = useConfig();
55
+
56
+ const { config = defaultConfig, ...rest } = params;
57
+
58
+ const queryOptions = floorOrderQueryOptions({
59
+ config,
60
+ ...rest,
39
61
  });
40
- };
41
62
 
42
- export const useFloorOrder = (args: UseFloorOrderArgs) => {
43
- const config = useConfig();
44
- return useQuery(floorOrderOptions(args, config));
45
- };
63
+ return useQuery({
64
+ ...queryOptions,
65
+ });
66
+ }
67
+
68
+ export { floorOrderQueryOptions };
69
+
70
+ export type { FetchFloorOrderParams, FloorOrderQueryOptions };
@@ -1,11 +1,10 @@
1
1
  import { useMutation } from '@tanstack/react-query';
2
- import { z } from 'zod';
3
2
  import type { SdkConfig } from '../../types';
4
3
  import {
5
4
  type GenerateCancelTransactionArgs,
6
5
  getMarketplaceClient,
7
6
  } from '../_internal';
8
- import { stepSchema } from '../_internal/api/zod-schema';
7
+ import type { Step } from '../_internal/api/marketplace.gen';
9
8
  import { useConfig } from './useConfig';
10
9
 
11
10
  // Create a type that uses number for chainId
@@ -16,14 +15,10 @@ type GenerateCancelTransactionArgsWithNumberChainId = Omit<
16
15
  chainId: number;
17
16
  };
18
17
 
19
- const UserGenerateCancelTransactionArgsSchema = z.object({
20
- chainId: z.number(),
21
- onSuccess: z.function().args(stepSchema.array().optional()).optional(),
22
- });
23
-
24
- type UseGenerateCancelTransactionArgs = z.infer<
25
- typeof UserGenerateCancelTransactionArgsSchema
26
- >;
18
+ interface UseGenerateCancelTransactionArgs {
19
+ chainId: number;
20
+ onSuccess?: (steps?: Step[]) => void;
21
+ }
27
22
 
28
23
  export const generateCancelTransaction = async (
29
24
  args: GenerateCancelTransactionArgsWithNumberChainId,
@@ -11,8 +11,8 @@ import { dateToUnixTime } from '../../utils/date';
11
11
  import {
12
12
  type CreateReq,
13
13
  type GenerateListingTransactionArgs,
14
- type Step,
15
14
  getMarketplaceClient,
15
+ type Step,
16
16
  } from '../_internal';
17
17
 
18
18
  export type CreateReqWithDateExpiry = Omit<CreateReq, 'expiry'> & {