@0xsequence/marketplace-sdk 0.9.0 → 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 (326) 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 +77 -8
  5. package/dist/{CalendarIcon-DbQ7Vxcw.js → CalendarIcon-CqsuAuCm.js} +4 -51
  6. package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
  7. package/dist/{CollectibleCard-C8Ae64Ab.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +8 -7
  8. package/dist/InfoIcon-v0w_Lu7t.js +53 -0
  9. package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
  10. package/dist/{_internal-BgWcRIak.js → _internal-C75gOSNo.js} +2 -10
  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-DTIan01C.js → api-BiMGqWdz.js} +17 -34
  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/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
  27. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
  28. package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-DKJ-F0jc.d.ts} +402 -41
  29. package/dist/{wagmi-CDzEQbfk.js → create-config-fQ-jbJD1.js} +20 -10
  30. package/dist/create-config-fQ-jbJD1.js.map +1 -0
  31. package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
  32. package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
  33. package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
  34. package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
  35. package/dist/get-provider-CYYHfrlg.js +10 -0
  36. package/dist/get-provider-CYYHfrlg.js.map +1 -0
  37. package/dist/get-query-client-D19vvfJo.js +23 -0
  38. package/dist/get-query-client-D19vvfJo.js.map +1 -0
  39. package/dist/hooks-4pxIbLbM.js +4044 -0
  40. package/dist/hooks-4pxIbLbM.js.map +1 -0
  41. package/dist/{index-BL9RUSEK.d.ts → index-136YrWDH.d.ts} +1 -1
  42. package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
  43. package/dist/index-BKBin-rq.d.ts +979 -0
  44. package/dist/{index-BQsgAvtX.d.ts → index-BUWB_RXp.d.ts} +776 -570
  45. package/dist/{index-21LE7OhL.d.ts → index-BhVFc2rX.d.ts} +6 -3
  46. package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
  47. package/dist/{index-ByznONYE.d.ts → index-CKrYP7ot.d.ts} +20 -48
  48. package/dist/{index-DaE5ZNHb.d.ts → index-CUwMH7Ht.d.ts} +5 -5
  49. package/dist/{index-CLy8y5hm.d.ts → index-Cu70Lw-w.d.ts} +1 -1
  50. package/dist/index.css +414 -1
  51. package/dist/index.d.ts +8 -10
  52. package/dist/index.js +13 -9
  53. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
  54. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
  55. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
  56. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
  57. package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
  58. package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
  59. package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
  60. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
  61. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
  62. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
  63. package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-HpnpL5xU.js} +3 -3
  64. package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
  65. package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-GQTTmihy.js} +3 -3
  66. package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
  67. package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
  68. package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
  69. package/dist/network-CGD0oKtS.js +15 -0
  70. package/dist/network-CGD0oKtS.js.map +1 -0
  71. package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
  72. package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
  73. package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
  74. package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
  75. package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
  76. package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
  77. package/dist/{primary-sale-C55ALnfQ.js → primary-sale-CmWxSfFQ.js} +1 -1
  78. package/dist/{primary-sale-C55ALnfQ.js.map → primary-sale-CmWxSfFQ.js.map} +1 -1
  79. package/dist/provider-DPGUA10G.js +125 -0
  80. package/dist/provider-DPGUA10G.js.map +1 -0
  81. package/dist/{queries-CUU65uYZ.js → queries-Ce_2othB.js} +165 -7
  82. package/dist/queries-Ce_2othB.js.map +1 -0
  83. package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
  84. package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
  85. package/dist/react/_internal/api/index.d.ts +2 -4
  86. package/dist/react/_internal/api/index.js +7 -4
  87. package/dist/react/_internal/databeat/index.d.ts +2 -73
  88. package/dist/react/_internal/databeat/index.js +4 -21
  89. package/dist/react/_internal/index.d.ts +2 -7
  90. package/dist/react/_internal/index.js +11 -6
  91. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  92. package/dist/react/_internal/wagmi/index.js +5 -3
  93. package/dist/react/hooks/index.d.ts +12 -17
  94. package/dist/react/hooks/index.js +23 -19
  95. package/dist/react/hooks/options/index.d.ts +2 -3
  96. package/dist/react/hooks/options/index.js +12 -7
  97. package/dist/react/index.d.ts +12 -17
  98. package/dist/react/index.js +28 -19
  99. package/dist/react/queries/index.d.ts +9 -8
  100. package/dist/react/queries/index.js +20 -15
  101. package/dist/react/ssr/index.d.ts +7 -9
  102. package/dist/react/ssr/index.js +11 -6
  103. package/dist/react/ssr/index.js.map +1 -1
  104. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -8
  105. package/dist/react/ui/components/marketplace-collectible-card/index.js +27 -18
  106. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  107. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +11 -6
  108. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  109. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  110. package/dist/react/ui/icons/index.js +13 -9
  111. package/dist/react/ui/index.d.ts +3 -8
  112. package/dist/react/ui/index.js +27 -18
  113. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +2 -2
  114. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -18
  115. package/dist/{react-DAIicQPT.js → react-DP0M2Wfm.js} +799 -4306
  116. package/dist/react-DP0M2Wfm.js.map +1 -0
  117. package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
  118. package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
  119. package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
  120. package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
  121. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
  122. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
  123. package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
  124. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
  125. package/dist/{token-Da4TdyUk.js → token-CHSBPYVG.js} +1 -1
  126. package/dist/{token-Da4TdyUk.js.map → token-CHSBPYVG.js.map} +1 -1
  127. package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
  128. package/dist/transaction-CnctdNzS.js.map +1 -0
  129. package/dist/types/index.d.ts +2 -3
  130. package/dist/types/index.js +2 -2
  131. package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
  132. package/dist/{types-DwWE6xOF.js.map → types-Yw2ywj6j.js.map} +1 -1
  133. package/dist/utils/abi/index.d.ts +4 -4
  134. package/dist/utils/abi/index.js +4 -4
  135. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  136. package/dist/utils/abi/marketplace/index.js +1 -1
  137. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  138. package/dist/utils/abi/primary-sale/index.js +1 -1
  139. package/dist/utils/abi/token/index.d.ts +1 -1
  140. package/dist/utils/abi/token/index.js +1 -1
  141. package/dist/utils/index.d.ts +7 -8
  142. package/dist/utils/index.js +12 -9
  143. package/dist/{utils-CW2NA5KG.js → utils-9RXDgcBl.js} +4 -11
  144. package/dist/utils-9RXDgcBl.js.map +1 -0
  145. package/dist/{utils-BPYfgDSL.js → utils-DjVJ9tov.js} +5 -6
  146. package/dist/utils-DjVJ9tov.js.map +1 -0
  147. package/dist/wagmi-Do_KW5ke.js +0 -0
  148. package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
  149. package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
  150. package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
  151. package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
  152. package/eslint.config.mjs +4 -0
  153. package/package.json +27 -14
  154. package/postcss.config.mjs +6 -0
  155. package/src/index.css +5 -4
  156. package/src/index.ts +1 -0
  157. package/src/react/__tests__/provider.test.tsx +4 -3
  158. package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
  159. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  160. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
  161. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  162. package/src/react/_internal/api/laos-api.ts +3 -0
  163. package/src/react/_internal/api/marketplace.gen.ts +5 -3
  164. package/src/react/_internal/api/query-keys.ts +12 -4
  165. package/src/react/_internal/api/services.ts +2 -14
  166. package/src/react/_internal/databeat/index.ts +15 -14
  167. package/src/react/_internal/databeat/types.ts +22 -0
  168. package/src/react/_internal/databeat/utils.ts +26 -0
  169. package/src/react/_internal/utils.ts +4 -4
  170. package/src/react/_internal/wagmi/create-config.ts +28 -13
  171. package/src/react/_internal/wallet/wallet.ts +4 -4
  172. package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
  173. package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
  174. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
  175. package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +17 -0
  176. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +11 -3
  177. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +3 -3
  178. package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
  179. package/src/react/hooks/__tests__/useFilters.test.tsx +2 -2
  180. package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
  181. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +83 -57
  182. package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
  183. package/src/react/hooks/index.ts +3 -1
  184. package/src/react/hooks/useCheckoutOptions.tsx +96 -0
  185. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
  186. package/src/react/hooks/useCollectionBalanceDetails.tsx +95 -68
  187. package/src/react/hooks/useCollectionDetailsPolling.tsx +3 -7
  188. package/src/react/hooks/useComparePrices.tsx +90 -82
  189. package/src/react/hooks/useConvertPriceToUSD.tsx +85 -71
  190. package/src/react/hooks/useCurrencyBalance.tsx +132 -46
  191. package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
  192. package/src/react/hooks/useFilters.tsx +154 -111
  193. package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
  194. package/src/react/hooks/useGetTokenRanges.tsx +83 -22
  195. package/src/react/hooks/useList1155ShopCardData.tsx +2 -0
  196. package/src/react/hooks/useList721ShopCardData.tsx +12 -7
  197. package/src/react/hooks/useListCollections.tsx +25 -25
  198. package/src/react/hooks/useListMarketCardData.tsx +2 -1
  199. package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
  200. package/src/react/hooks/useListTokenMetadata.ts +71 -0
  201. package/src/react/hooks/useOpenConnectModal.tsx +9 -0
  202. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
  203. package/src/react/hooks/useTokenSupplies.ts +81 -0
  204. package/src/react/hooks/useTransferTokens.tsx +2 -2
  205. package/src/react/provider.tsx +73 -9
  206. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  207. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  208. package/src/react/queries/balanceOfCollectible.ts +7 -4
  209. package/src/react/queries/checkoutOptions.ts +85 -0
  210. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  211. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  212. package/src/react/queries/comparePrices.ts +108 -0
  213. package/src/react/queries/convertPriceToUSD.ts +92 -0
  214. package/src/react/queries/filters.ts +138 -0
  215. package/src/react/queries/getTokenRanges.ts +62 -0
  216. package/src/react/queries/index.ts +3 -0
  217. package/src/react/queries/inventory.ts +6 -0
  218. package/src/react/queries/listBalances.ts +4 -3
  219. package/src/react/queries/listCollections.ts +7 -3
  220. package/src/react/queries/listTokenMetadata.ts +2 -2
  221. package/src/react/queries/marketplaceConfig.ts +1 -1
  222. package/src/react/queries/primarySaleItems.ts +85 -0
  223. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  224. package/src/react/queries/tokenSupplies.ts +93 -0
  225. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  226. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
  227. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
  228. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
  229. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  230. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +13 -8
  231. package/src/react/ui/components/_internals/action-button/store.ts +44 -34
  232. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  233. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  234. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
  235. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  236. package/src/react/ui/components/marketplace-collectible-card/types.ts +4 -3
  237. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  238. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +5 -1
  239. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  240. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  241. package/src/react/ui/components/media/Media.tsx +24 -19
  242. package/src/react/ui/components/media/types.ts +6 -0
  243. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
  244. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +6 -0
  245. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
  246. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
  247. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +15 -8
  248. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
  249. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
  250. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +2 -2
  251. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
  252. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
  253. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +7 -0
  254. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  255. package/src/react/ui/modals/BuyModal/store.ts +26 -0
  256. package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
  257. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  258. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +30 -13
  259. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  260. package/src/react/ui/modals/SellModal/Modal.tsx +11 -8
  261. package/src/react/ui/modals/SellModal/store.ts +3 -3
  262. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  263. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  264. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
  265. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
  266. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
  267. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  268. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
  269. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
  270. package/src/react/ui/modals/TransferModal/index.tsx +28 -31
  271. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  272. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  273. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  274. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  275. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +5 -2
  276. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -17
  277. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  278. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
  279. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  280. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
  281. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
  282. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +155 -20
  283. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +339 -40
  284. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  285. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  286. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -13
  287. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  288. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  289. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  290. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
  291. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
  292. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
  293. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +43 -44
  294. package/src/react/ui/modals/_internal/types.ts +2 -2
  295. package/src/types/sdk-config.ts +6 -1
  296. package/src/utils/network.ts +15 -0
  297. package/test/test-utils.tsx +2 -0
  298. package/vitest.shims.d.ts +2 -0
  299. package/vitest.storybook.config.js +33 -0
  300. package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
  301. package/dist/_internal-BgWcRIak.js.map +0 -1
  302. package/dist/api-DTIan01C.js.map +0 -1
  303. package/dist/builder-api-C_zj5mr3.d.ts +0 -12
  304. package/dist/index-BUVWziLP.d.ts +0 -60
  305. package/dist/index-COt10OgI.d.ts +0 -24
  306. package/dist/index-DPNWNa7t.d.ts +0 -414
  307. package/dist/index-DsfCs3-x.d.ts +0 -122
  308. package/dist/index-dUb6wb4Y.d.ts +0 -22
  309. package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
  310. package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
  311. package/dist/queries-CUU65uYZ.js.map +0 -1
  312. package/dist/react-DAIicQPT.js.map +0 -1
  313. package/dist/transaction-CcVViHEL.js.map +0 -1
  314. package/dist/utils-BPYfgDSL.js.map +0 -1
  315. package/dist/utils-CW2NA5KG.js.map +0 -1
  316. package/dist/wagmi-CDzEQbfk.js.map +0 -1
  317. package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
  318. package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
  319. package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
  320. package/src/react/queries/getTokenSuppliesMap.ts +0 -77
  321. package/src/react/ui/modals/TransferModal/_store.ts +0 -66
  322. package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
  323. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  324. /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
  325. /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
  326. /package/dist/{options-B4QN7Xou.js → options-BBBR8u_4.js} +0 -0
@@ -27,12 +27,15 @@ 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);
37
40
  const [isSafari, setIsSafari] = useState(false);
38
41
  const [contentType, setContentType] = useState<ContentTypeState>({
@@ -55,9 +58,9 @@ export function Media({
55
58
  : assetUrl
56
59
  : '';
57
60
 
58
- const classNames = cn(
61
+ const containerClassNames = cn(
59
62
  'relative aspect-square overflow-hidden bg-background-secondary',
60
- className,
63
+ containerClassName || className,
61
64
  );
62
65
 
63
66
  useEffect(() => {
@@ -105,7 +108,7 @@ export function Media({
105
108
  <div
106
109
  className={cn(
107
110
  'flex h-full w-full items-center justify-center',
108
- classNames,
111
+ containerClassNames,
109
112
  )}
110
113
  >
111
114
  {fallbackContent}
@@ -114,7 +117,7 @@ export function Media({
114
117
  }
115
118
 
116
119
  return (
117
- <div className={cn('h-full w-full', classNames)}>
120
+ <div className={cn('h-full w-full', containerClassNames)}>
118
121
  <img
119
122
  src={ChessTileImage}
120
123
  alt={name || 'Collectible'}
@@ -139,7 +142,7 @@ export function Media({
139
142
  <div
140
143
  className={cn(
141
144
  'flex w-full items-center justify-center rounded-lg',
142
- classNames,
145
+ containerClassNames,
143
146
  )}
144
147
  >
145
148
  {(assetLoading || contentType.loading || isLoading) && (
@@ -148,13 +151,13 @@ export function Media({
148
151
 
149
152
  <iframe
150
153
  title={name || 'Collectible'}
151
- className="aspect-square w-full"
154
+ className={cn('aspect-square w-full', mediaClassname)}
152
155
  src={proxiedAssetUrl}
153
156
  allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
154
157
  sandbox="allow-scripts"
155
158
  style={{ border: '0px' }}
156
- onError={handleAssetError}
157
- onLoad={handleAssetLoad}
159
+ onError={shouldListenForLoad ? handleAssetError : undefined}
160
+ onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
158
161
  />
159
162
  </div>
160
163
  );
@@ -162,12 +165,12 @@ export function Media({
162
165
 
163
166
  if (contentType.type === '3d-model' && !assetLoadFailed) {
164
167
  return (
165
- <div className={cn('h-full w-full', classNames)}>
168
+ <div className={cn('h-full w-full', containerClassNames)}>
166
169
  <ModelViewer
167
170
  src={proxiedAssetUrl}
168
171
  posterSrc={ChessTileImage}
169
- onLoad={handleAssetLoad}
170
- onError={handleAssetError}
172
+ onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
173
+ onError={shouldListenForLoad ? handleAssetError : undefined}
171
174
  />
172
175
  </div>
173
176
  );
@@ -180,10 +183,11 @@ export function Media({
180
183
  // we can't hide the video controls in safari, when user hovers over the video they show up.
181
184
  // `pointer-events-none` is the only way to hide them on hover
182
185
  isSafari && 'pointer-events-none',
186
+ mediaClassname,
183
187
  );
184
188
 
185
189
  return (
186
- <div className={classNames}>
190
+ <div className={containerClassNames}>
187
191
  {(assetLoading || contentType.loading || isLoading) && (
188
192
  <MediaSkeleton />
189
193
  )}
@@ -197,8 +201,8 @@ export function Media({
197
201
  playsInline
198
202
  muted
199
203
  controlsList="nodownload noremoteplayback nofullscreen"
200
- onError={handleAssetError}
201
- onLoadedMetadata={handleAssetLoad}
204
+ onError={shouldListenForLoad ? handleAssetError : undefined}
205
+ onLoadedMetadata={shouldListenForLoad ? handleAssetLoad : undefined}
202
206
  data-testid="collectible-asset-video"
203
207
  >
204
208
  <source src={proxiedAssetUrl} />
@@ -214,18 +218,19 @@ export function Media({
214
218
  const imgClassNames = cn(
215
219
  'absolute inset-0 h-full w-full object-cover transition-transform duration-200 ease-in-out group-hover:scale-hover',
216
220
  assetLoading || contentType.loading || isLoading ? 'invisible' : 'visible',
221
+ mediaClassname,
217
222
  );
218
223
 
219
224
  return (
220
- <div className={classNames}>
225
+ <div className={containerClassNames}>
221
226
  {(assetLoading || contentType.loading || isLoading) && <MediaSkeleton />}
222
227
 
223
228
  <img
224
229
  src={imgSrc}
225
230
  alt={name || 'Collectible'}
226
231
  className={imgClassNames}
227
- onError={handleAssetError}
228
- onLoad={handleAssetLoad}
232
+ onError={shouldListenForLoad ? handleAssetError : undefined}
233
+ onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
229
234
  />
230
235
  </div>
231
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 };
@@ -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
@@ -4,6 +4,7 @@ import type { Address } from 'viem';
4
4
  import type { Mock, MockInstance } from 'vitest';
5
5
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6
6
  import { TransactionCrypto } from '../../../../_internal';
7
+ import type { DatabeatAnalytics } from '../../../../_internal/databeat';
7
8
  import { ERC1155ShopModal } from '../components/ERC1155ShopModal';
8
9
  import * as useERC1155CheckoutModule from '../hooks/useERC1155Checkout';
9
10
  import { buyModalStore } from '../store';
@@ -11,6 +12,10 @@ import { buyModalStore } from '../store';
11
12
  // Mock the checkout hook
12
13
  vi.mock('../hooks/useERC1155Checkout');
13
14
 
15
+ const mockAnalyticsFn = {
16
+ trackBuyModalOpened: vi.fn(),
17
+ } as unknown as DatabeatAnalytics;
18
+
14
19
  const mockCollection = {
15
20
  address: '0x123' as Address,
16
21
  chainId: 1,
@@ -77,6 +82,7 @@ describe('ERC1155ShopModal', () => {
77
82
  },
78
83
  marketplaceType: 'shop',
79
84
  },
85
+ analyticsFn: mockAnalyticsFn,
80
86
  });
81
87
  });
82
88
 
@@ -5,12 +5,17 @@ import {
5
5
  screen,
6
6
  waitForElementToBeRemoved,
7
7
  } from '@test';
8
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
8
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
9
9
  import type { Order } from '../../../../_internal';
10
10
  import { MarketplaceKind, OrderSide, OrderStatus } from '../../../../_internal';
11
+ import type { DatabeatAnalytics } from '../../../../_internal/databeat';
11
12
  import { ERC1155QuantityModal } from '../components/ERC1155QuantityModal';
12
13
  import { buyModalStore } from '../store';
13
14
 
15
+ const analyticsFn = {
16
+ trackBuyModalOpened: vi.fn(),
17
+ } as unknown as DatabeatAnalytics;
18
+
14
19
  const testOrder: Order = {
15
20
  chainId: 1,
16
21
  orderId: '1',
@@ -57,6 +62,7 @@ describe('ERC1155QuantityModal', () => {
57
62
  marketplace: MarketplaceKind.sequence_marketplace_v2,
58
63
  marketplaceType: 'market',
59
64
  },
65
+ analyticsFn,
60
66
  });
61
67
  });
62
68
 
@@ -1,7 +1,12 @@
1
- import { beforeEach, describe, expect, it } from 'vitest';
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  import { MarketplaceKind } from '../../../../_internal';
3
+ import type { DatabeatAnalytics } from '../../../../_internal/databeat';
3
4
  import { buyModalStore, type MarketplaceBuyModalProps } from '../store';
4
5
 
6
+ const analyticsFn = {
7
+ trackBuyModalOpened: vi.fn(),
8
+ } as unknown as DatabeatAnalytics;
9
+
5
10
  describe('BuyModal Store', () => {
6
11
  beforeEach(() => {
7
12
  buyModalStore.send({ type: 'close' });
@@ -29,6 +34,7 @@ describe('BuyModal Store', () => {
29
34
  props: mockProps,
30
35
  onSuccess: () => {},
31
36
  onError: () => {},
37
+ analyticsFn,
32
38
  });
33
39
 
34
40
  const state = buyModalStore.getSnapshot();
@@ -51,6 +57,7 @@ describe('BuyModal Store', () => {
51
57
  props: mockProps,
52
58
  onSuccess: () => {},
53
59
  onError: () => {},
60
+ analyticsFn,
54
61
  });
55
62
 
56
63
  const openState = buyModalStore.getSnapshot();
@@ -75,6 +82,7 @@ describe('BuyModal Store', () => {
75
82
  buyModalStore.send({
76
83
  type: 'open',
77
84
  props: mockProps,
85
+ analyticsFn,
78
86
  });
79
87
 
80
88
  const state1 = buyModalStore.getSnapshot();
@@ -1,8 +1,9 @@
1
1
  'use client';
2
2
 
3
3
  import { Text, TokenImage } from '@0xsequence/design-system';
4
- import { use$, useObservable } from '@legendapp/state/react';
4
+ import { useState } from 'react';
5
5
  import type { Address } from 'viem';
6
+ import { maxUint256 } from 'viem';
6
7
  import { DEFAULT_MARKETPLACE_FEE_PERCENTAGE } from '../../../../../consts';
7
8
  import type { MarketplaceType } from '../../../../../types';
8
9
  import { formatPriceWithFee } from '../../../../../utils/price';
@@ -12,11 +13,14 @@ import { ActionModal } from '../../_internal/components/actionModal';
12
13
  import QuantityInput from '../../_internal/components/quantityInput';
13
14
  import { buyModalStore, useIsOpen } from '../store';
14
15
 
16
+ const INFINITY_STRING = maxUint256.toString();
17
+
15
18
  type ERC1155QuantityModalProps = {
16
19
  order?: Order;
17
20
  marketplaceType: MarketplaceType;
18
21
  quantityDecimals: number;
19
22
  quantityRemaining: string;
23
+ unlimitedSupply?: boolean;
20
24
  salePrice?: {
21
25
  amount: string;
22
26
  currencyAddress: Address;
@@ -28,16 +32,17 @@ export const ERC1155QuantityModal = ({
28
32
  order,
29
33
  quantityDecimals,
30
34
  quantityRemaining,
35
+ unlimitedSupply,
31
36
  salePrice,
32
37
  chainId,
33
38
  marketplaceType,
34
39
  }: ERC1155QuantityModalProps) => {
35
40
  const isOpen = useIsOpen();
36
41
 
37
- const localQuantity$ = useObservable('1');
38
- const localQuantity = use$(localQuantity$);
39
- const invalidQuantity$ = useObservable(false);
40
- const invalidQuantity = use$(invalidQuantity$);
42
+ const [localQuantity, setLocalQuantity] = useState('1');
43
+ const [invalidQuantity, setInvalidQuantity] = useState(false);
44
+
45
+ const maxQuantity = unlimitedSupply ? INFINITY_STRING : quantityRemaining;
41
46
 
42
47
  return (
43
48
  <ActionModal
@@ -61,10 +66,12 @@ export const ERC1155QuantityModal = ({
61
66
  >
62
67
  <div className="flex w-full flex-col gap-4">
63
68
  <QuantityInput
64
- $quantity={localQuantity$}
65
- $invalidQuantity={invalidQuantity$}
69
+ quantity={localQuantity}
70
+ invalidQuantity={invalidQuantity}
71
+ onQuantityChange={setLocalQuantity}
72
+ onInvalidQuantityChange={setInvalidQuantity}
66
73
  decimals={quantityDecimals}
67
- maxQuantity={quantityRemaining}
74
+ maxQuantity={maxQuantity}
68
75
  />
69
76
 
70
77
  <TotalPrice
@@ -37,6 +37,8 @@ export const ERC1155ShopModal = ({
37
37
  isShop && modalProps.quantityRemaining
38
38
  ? modalProps.quantityRemaining.toString()
39
39
  : '0';
40
+ const unlimitedSupply =
41
+ isShop && modalProps.unlimitedSupply ? modalProps.unlimitedSupply : false;
40
42
 
41
43
  if (!quantity) {
42
44
  return (
@@ -49,6 +51,7 @@ export const ERC1155ShopModal = ({
49
51
  marketplaceType="shop"
50
52
  quantityDecimals={quantityDecimals}
51
53
  quantityRemaining={quantityRemaining}
54
+ unlimitedSupply={unlimitedSupply}
52
55
  chainId={chainId}
53
56
  />
54
57
  );
@@ -32,6 +32,7 @@ vi.mock('../../store', () => ({
32
32
  useQuantity: vi.fn(() => 2),
33
33
  useOnSuccess: vi.fn(() => vi.fn()),
34
34
  useOnError: vi.fn(() => vi.fn()),
35
+ useBuyAnalyticsId: vi.fn(() => '123'),
35
36
  buyModalStore: {
36
37
  send: vi.fn(),
37
38
  },
@@ -87,36 +88,38 @@ describe('useERC1155Checkout', () => {
87
88
  expect(
88
89
  mockUseERC1155SaleContractCheckout.mock.calls,
89
90
  ).toMatchInlineSnapshot(`
90
- [
91
91
  [
92
- {
93
- "chain": 1,
94
- "checkoutOptions": {
95
- "crypto": "all",
96
- "nftCheckout": [],
97
- "onRamp": [],
98
- "swap": [],
99
- },
100
- "collectionAddress": "0x123",
101
- "contractAddress": "0x456",
102
- "customProviderCallback": undefined,
103
- "items": [
104
- {
105
- "quantity": "2",
106
- "tokenId": "1",
92
+ [
93
+ {
94
+ "chain": 1,
95
+ "chainId": "1",
96
+ "checkoutOptions": {
97
+ "crypto": "all",
98
+ "nftCheckout": [],
99
+ "onRamp": [],
100
+ "swap": [],
101
+ },
102
+ "collectionAddress": "0x123",
103
+ "contractAddress": "0x456",
104
+ "customProviderCallback": undefined,
105
+ "items": [
106
+ {
107
+ "quantity": "2",
108
+ "tokenId": "1",
109
+ },
110
+ ],
111
+ "onClose": [Function],
112
+ "onError": [Function],
113
+ "onSuccess": [Function],
114
+ "supplementaryAnalyticsInfo": {
115
+ "marketplaceType": "shop",
116
+ "saleAnalyticsId": "123",
107
117
  },
108
- ],
109
- "onClose": [Function],
110
- "onError": [Function],
111
- "onSuccess": [Function],
112
- "supplementaryAnalyticsInfo": {
113
- "type": "mint_shop",
118
+ "wallet": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
114
119
  },
115
- "wallet": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
116
- },
117
- ],
118
- ]
119
- `);
120
+ ],
121
+ ]
122
+ `);
120
123
 
121
124
  expect(result.current.isEnabled).toBe(true);
122
125
  });
@@ -1,5 +1,5 @@
1
1
  import { skipToken, useQuery } from '@tanstack/react-query';
2
- import type { Hex } from 'viem';
2
+ import type { Address } from 'viem';
3
3
  import {
4
4
  getMarketplaceClient,
5
5
  type MarketplaceKind,
@@ -10,7 +10,7 @@ import { useMarketPlatformFee } from './useMarketPlatformFee';
10
10
 
11
11
  export type CheckoutOptionsParams = {
12
12
  chainId: number;
13
- collectionAddress: Hex;
13
+ collectionAddress: Address;
14
14
  orderId: string;
15
15
  marketplace: MarketplaceKind;
16
16
  };
@@ -6,7 +6,13 @@ import type {
6
6
  CheckoutOptionsItem,
7
7
  } from '../../../../_internal';
8
8
  import { getQueryClient } from '../../../../_internal';
9
- import { buyModalStore, useOnError, useOnSuccess, useQuantity } from '../store';
9
+ import {
10
+ buyModalStore,
11
+ useBuyAnalyticsId,
12
+ useOnError,
13
+ useOnSuccess,
14
+ useQuantity,
15
+ } from '../store';
10
16
 
11
17
  interface UseERC1155CheckoutParams {
12
18
  chainId: number;
@@ -35,9 +41,11 @@ export const useERC1155Checkout = ({
35
41
  const quantity = useQuantity();
36
42
  const onSuccess = useOnSuccess();
37
43
  const onError = useOnError();
44
+ const saleAnalyticsId = useBuyAnalyticsId();
38
45
 
39
46
  const checkout = useERC1155SaleContractCheckout({
40
47
  chain: chainId,
48
+ chainId: chainId.toString(),
41
49
  contractAddress: salesContractAddress,
42
50
  collectionAddress,
43
51
  items: [
@@ -62,7 +70,8 @@ export const useERC1155Checkout = ({
62
70
  },
63
71
  customProviderCallback,
64
72
  supplementaryAnalyticsInfo: {
65
- type: 'mint_shop',
73
+ marketplaceType: 'shop',
74
+ saleAnalyticsId,
66
75
  },
67
76
  });
68
77
 
@@ -112,7 +112,7 @@ export const getERC721SalePaymentParams = async ({
112
112
  },
113
113
  skipNativeBalanceCheck,
114
114
  supplementaryAnalyticsInfo: {
115
- type: 'mint_shop',
115
+ marketplaceType: 'shop',
116
116
  },
117
117
  nativeTokenAddress,
118
118
  ...(customCreditCardProviderCallback && {
@@ -20,6 +20,7 @@ import type { ModalCallbacks } from '../../_internal/types';
20
20
  import {
21
21
  buyModalStore,
22
22
  isMarketProps,
23
+ useBuyAnalyticsId,
23
24
  useBuyModalProps,
24
25
  useOnError,
25
26
  useOnSuccess,
@@ -43,6 +44,7 @@ interface GetBuyCollectableParams {
43
44
  customCreditCardProviderCallback: ((buyStep: Step) => void) | undefined;
44
45
  skipNativeBalanceCheck: boolean | undefined;
45
46
  nativeTokenAddress: string | undefined;
47
+ buyAnalyticsId: string;
46
48
  }
47
49
 
48
50
  export const getBuyCollectableParams = async ({
@@ -62,6 +64,7 @@ export const getBuyCollectableParams = async ({
62
64
  fee,
63
65
  skipNativeBalanceCheck,
64
66
  nativeTokenAddress,
67
+ buyAnalyticsId,
65
68
  }: GetBuyCollectableParams) => {
66
69
  const marketplaceClient = getMarketplaceClient(config);
67
70
  const { steps } = await marketplaceClient.generateBuyTransaction({
@@ -137,6 +140,8 @@ export const getBuyCollectableParams = async ({
137
140
  supplementaryAnalyticsInfo: {
138
141
  requestId: orderId,
139
142
  marketplaceKind: marketplace,
143
+ buyAnalyticsId,
144
+ marketplaceType: 'market',
140
145
  },
141
146
  onError: callbacks?.onError,
142
147
  onClose: () => {
@@ -209,6 +214,7 @@ export const usePaymentModalParams = (args: usePaymentModalParams) => {
209
214
  );
210
215
  const onSuccess = useOnSuccess();
211
216
  const onError = useOnError();
217
+ const buyAnalyticsId = useBuyAnalyticsId();
212
218
 
213
219
  const queryEnabled =
214
220
  !!wallet &&
@@ -243,6 +249,7 @@ export const usePaymentModalParams = (args: usePaymentModalParams) => {
243
249
  customCreditCardProviderCallback,
244
250
  skipNativeBalanceCheck,
245
251
  nativeTokenAddress,
252
+ buyAnalyticsId,
246
253
  })
247
254
  : skipToken,
248
255
  });
@@ -1,10 +1,18 @@
1
+ import { useAnalytics } from '../../../_internal/databeat';
1
2
  import type { ModalCallbacks } from '../_internal/types';
2
3
  import { type BuyModalProps, buyModalStore } from './store';
3
4
 
4
5
  export const useBuyModal = (callbacks?: ModalCallbacks) => {
6
+ const analyticsFn = useAnalytics();
7
+
5
8
  return {
6
9
  show: (args: BuyModalProps) =>
7
- buyModalStore.send({ type: 'open', props: args, ...callbacks }),
10
+ buyModalStore.send({
11
+ type: 'open',
12
+ props: args,
13
+ ...callbacks,
14
+ analyticsFn,
15
+ }),
8
16
  close: () => buyModalStore.send({ type: 'close' }),
9
17
  };
10
18
  };