@0xsequence/marketplace-sdk 0.8.11 → 0.8.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/CHANGELOG.md +166 -0
  2. package/dist/CartIcon-Bll1rbxv.js +141 -0
  3. package/dist/CartIcon-Bll1rbxv.js.map +1 -0
  4. package/dist/CollectibleCard-CLQTl0_6.d.ts +8 -0
  5. package/dist/_internal-69NEWNUE.js +34 -0
  6. package/dist/_internal-69NEWNUE.js.map +1 -0
  7. package/dist/abi-BKyRjVcZ.js +0 -0
  8. package/dist/{alien_swap-2B65TDGT.js → alien_swap-B_76IMma.js} +5 -5
  9. package/dist/alien_swap-B_76IMma.js.map +1 -0
  10. package/dist/api-1KFxYh7o.js +232 -0
  11. package/dist/api-1KFxYh7o.js.map +1 -0
  12. package/dist/{aqua-xyz-WMYQLAIS.js → aqua-xyz-CMN_TFY5.js} +5 -5
  13. package/dist/aqua-xyz-CMN_TFY5.js.map +1 -0
  14. package/dist/{aura-V22RV5OG.js → aura-Cye_TuHj.js} +5 -5
  15. package/dist/aura-Cye_TuHj.js.map +1 -0
  16. package/dist/{blur-GE5QOMCM.js → blur-DWDMyMpK.js} +5 -5
  17. package/dist/blur-DWDMyMpK.js.map +1 -0
  18. package/dist/builder-api-BQvzykoU.js +28 -0
  19. package/dist/builder-api-BQvzykoU.js.map +1 -0
  20. package/dist/builder-api-DoK3907S.d.ts +12 -0
  21. package/dist/builder.gen-CxP9NT1p.js +303 -0
  22. package/dist/builder.gen-CxP9NT1p.js.map +1 -0
  23. package/dist/{coinbase-NLHJMGAP.js → coinbase-ByA_XRB0.js} +5 -5
  24. package/dist/coinbase-ByA_XRB0.js.map +1 -0
  25. package/dist/{element-2LGTYYSP.js → element-b77CyXIZ.js} +5 -5
  26. package/dist/element-b77CyXIZ.js.map +1 -0
  27. package/dist/{foundation-BPN66ZTN.js → foundation-DbOrKP9Y.js} +5 -5
  28. package/dist/foundation-DbOrKP9Y.js.map +1 -0
  29. package/dist/index-1bezgsFq.d.ts +1129 -0
  30. package/dist/index-4-kfOFdx.d.ts +22 -0
  31. package/dist/index-BEYefG1G.d.ts +24 -0
  32. package/dist/index-BHiSG-Yi.d.ts +312 -0
  33. package/dist/index-BIMIpDiI.d.ts +188 -0
  34. package/dist/index-BQW0PUkQ.d.ts +3973 -0
  35. package/dist/index-BfH21xmk.d.ts +117 -0
  36. package/dist/index-BjIwVzc4.d.ts +1057 -0
  37. package/dist/index-C39K_8SG.d.ts +1 -0
  38. package/dist/index-CN8puQQJ.d.ts +24 -0
  39. package/dist/index-Cl7PQOGu.d.ts +102 -0
  40. package/dist/index-D5v5iluA.d.ts +809 -0
  41. package/dist/index-DXMfTZ1F.d.ts +7 -0
  42. package/dist/index-DafWjEb4.d.ts +65 -0
  43. package/dist/index-ij9f8GAA.d.ts +1 -0
  44. package/dist/index.css +384 -371
  45. package/dist/index.d.ts +10 -29
  46. package/dist/index.js +13 -104
  47. package/dist/{looks-rare-MZRSOPT4.js → looks-rare-C1VqNcSM.js} +5 -5
  48. package/dist/looks-rare-C1VqNcSM.js.map +1 -0
  49. package/dist/{magic-eden-PUBL6KWW.js → magic-eden-ea_AGCZr.js} +5 -5
  50. package/dist/magic-eden-ea_AGCZr.js.map +1 -0
  51. package/dist/{manifold-GA445YJ6.js → manifold-8y8J2sjT.js} +5 -5
  52. package/dist/manifold-8y8J2sjT.js.map +1 -0
  53. package/dist/marketplace-logos-CSeGcPW4.js +50 -0
  54. package/dist/marketplace-logos-CSeGcPW4.js.map +1 -0
  55. package/dist/marketplace-nwnZv9Cb.js +1913 -0
  56. package/dist/marketplace-nwnZv9Cb.js.map +1 -0
  57. package/dist/marketplace.gen-Dqk8vRmD.js +1068 -0
  58. package/dist/marketplace.gen-Dqk8vRmD.js.map +1 -0
  59. package/dist/marketplaceConfig-D2MYFqll.js +71 -0
  60. package/dist/marketplaceConfig-D2MYFqll.js.map +1 -0
  61. package/dist/{mintify-UMC5PTKC.js → mintify-LA68TzWg.js} +5 -5
  62. package/dist/mintify-LA68TzWg.js.map +1 -0
  63. package/dist/{nftx-AX3CY3IE.js → nftx-D3Tc8nzd.js} +5 -5
  64. package/dist/nftx-D3Tc8nzd.js.map +1 -0
  65. package/dist/{okx-GNVLAE2R.js → okx-hbqg6oIJ.js} +5 -5
  66. package/dist/okx-hbqg6oIJ.js.map +1 -0
  67. package/dist/{open-sea-KI43GVEB.js → open-sea-BccuK8-t.js} +5 -5
  68. package/dist/open-sea-BccuK8-t.js.map +1 -0
  69. package/dist/options-DCi6_23w.js +34 -0
  70. package/dist/options-DCi6_23w.js.map +1 -0
  71. package/dist/primary-sale-Cw95phYC.js +1264 -0
  72. package/dist/primary-sale-Cw95phYC.js.map +1 -0
  73. package/dist/queries-DPvwtnO7.js +486 -0
  74. package/dist/queries-DPvwtnO7.js.map +1 -0
  75. package/dist/{rarible-2J3MMZJ7.js → rarible-BgTwwj9g.js} +5 -5
  76. package/dist/rarible-BgTwwj9g.js.map +1 -0
  77. package/dist/react/_internal/api/index.d.ts +4 -86
  78. package/dist/react/_internal/api/index.js +7 -150
  79. package/dist/react/_internal/databeat/index.d.ts +45 -41
  80. package/dist/react/_internal/databeat/index.js +23 -27
  81. package/dist/react/_internal/index.d.ts +7 -76
  82. package/dist/react/_internal/index.js +9 -176
  83. package/dist/react/_internal/wagmi/index.d.ts +4 -17
  84. package/dist/react/_internal/wagmi/index.js +5 -14
  85. package/dist/react/hooks/index.d.ts +17 -3652
  86. package/dist/react/hooks/index.js +23 -153
  87. package/dist/react/hooks/options/index.d.ts +5 -8
  88. package/dist/react/hooks/options/index.js +11 -21
  89. package/dist/react/index.d.ts +37 -33
  90. package/dist/react/index.js +23 -193
  91. package/dist/react/queries/index.d.ts +8 -26
  92. package/dist/react/queries/index.js +18 -51
  93. package/dist/react/ssr/index.d.ts +19 -13
  94. package/dist/react/ssr/index.js +29 -28
  95. package/dist/react/ssr/index.js.map +1 -1
  96. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +10 -0
  97. package/dist/react/ui/components/marketplace-collectible-card/index.js +23 -0
  98. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +8 -0
  99. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +10 -0
  100. package/dist/react/ui/components/marketplace-logos/index.d.ts +26 -24
  101. package/dist/react/ui/components/marketplace-logos/index.js +3 -45
  102. package/dist/react/ui/icons/index.d.ts +1 -2
  103. package/dist/react/ui/icons/index.js +10 -14
  104. package/dist/react/ui/index.d.ts +10 -116
  105. package/dist/react/ui/index.js +23 -41
  106. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +59 -33
  107. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -31
  108. package/dist/react-BG7o4PId.js +8351 -0
  109. package/dist/react-BG7o4PId.js.map +1 -0
  110. package/dist/react-BbHBl6gg.css +80 -0
  111. package/dist/react-BbHBl6gg.css.map +1 -0
  112. package/dist/sdk-config-DJzxVPld.d.ts +1535 -0
  113. package/dist/{sequence-TGLUFEPQ.js → sequence-Do3kzb4J.js} +5 -5
  114. package/dist/sequence-Do3kzb4J.js.map +1 -0
  115. package/dist/src-Dz2CfBL0.js +8 -0
  116. package/dist/src-Dz2CfBL0.js.map +1 -0
  117. package/dist/{sudo-swap-M2O6E3TE.js → sudo-swap-B6vPKxBz.js} +5 -5
  118. package/dist/sudo-swap-B6vPKxBz.js.map +1 -0
  119. package/dist/{super-rare-UU2U4LIN.js → super-rare-eCm1SE6O.js} +5 -5
  120. package/dist/super-rare-eCm1SE6O.js.map +1 -0
  121. package/dist/token-CO5llIla.js +1312 -0
  122. package/dist/token-CO5llIla.js.map +1 -0
  123. package/dist/transaction-CcVViHEL.js +97 -0
  124. package/dist/transaction-CcVViHEL.js.map +1 -0
  125. package/dist/types/index.d.ts +3 -13
  126. package/dist/types/index.js +5 -44
  127. package/dist/types-BIJOaL4j.d.ts +68 -0
  128. package/dist/types-DwWE6xOF.js +13 -0
  129. package/dist/types-DwWE6xOF.js.map +1 -0
  130. package/dist/useCollection-C-mclKU0.d.ts +66 -0
  131. package/dist/utils/abi/index.d.ts +5 -3
  132. package/dist/utils/abi/index.js +6 -26
  133. package/dist/utils/abi/marketplace/index.d.ts +2 -805
  134. package/dist/utils/abi/marketplace/index.js +3 -11
  135. package/dist/utils/abi/primary-sale/index.d.ts +2 -1054
  136. package/dist/utils/abi/primary-sale/index.js +3 -9
  137. package/dist/utils/abi/token/index.d.ts +2 -1125
  138. package/dist/utils/abi/token/index.js +3 -11
  139. package/dist/utils/index.d.ts +8 -91
  140. package/dist/utils/index.js +11 -57
  141. package/dist/utils-BFdxaToy.js +216 -0
  142. package/dist/utils-BFdxaToy.js.map +1 -0
  143. package/dist/utils-Cat9_pef.js +44 -0
  144. package/dist/utils-Cat9_pef.js.map +1 -0
  145. package/dist/wagmi-DRctYEk6.js +159 -0
  146. package/dist/wagmi-DRctYEk6.js.map +1 -0
  147. package/dist/{x2y2-3W5BBMZC.js → x2y2-DD17tT91.js} +5 -5
  148. package/dist/x2y2-DD17tT91.js.map +1 -0
  149. package/dist/{zora-6EY6FUH6.js → zora-BpSG9UzS.js} +5 -5
  150. package/dist/zora-BpSG9UzS.js.map +1 -0
  151. package/package.json +10 -8
  152. package/src/index.ts +0 -1
  153. package/src/react/_internal/api/__mocks__/indexer.msw.ts +1 -0
  154. package/src/react/_internal/api/builder.gen.ts +0 -1
  155. package/src/react/_internal/api/marketplace.gen.ts +467 -26
  156. package/src/react/_internal/api/services.ts +42 -49
  157. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +5 -5
  158. package/src/react/_internal/wagmi/create-config.ts +7 -2
  159. package/src/react/_internal/wagmi/get-connectors.ts +5 -2
  160. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +161 -2
  161. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +44 -6
  162. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +7 -4
  163. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +225 -0
  164. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +3 -3
  165. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +2 -3
  166. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +0 -16
  167. package/src/react/hooks/__tests__/useInventory.test.tsx +0 -36
  168. package/src/react/hooks/__tests__/useListCollections.test.tsx +1 -1
  169. package/src/react/hooks/index.ts +7 -0
  170. package/src/react/hooks/useBalanceOfCollectible.tsx +13 -9
  171. package/src/react/hooks/useCancelTransactionSteps.tsx +5 -1
  172. package/src/react/hooks/useCheckoutOptions.tsx +2 -1
  173. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +67 -0
  174. package/src/react/hooks/useCollectionDetails.tsx +22 -7
  175. package/src/react/hooks/useCountListingsForCollectible.tsx +5 -4
  176. package/src/react/hooks/useCountOfCollectables.tsx +10 -7
  177. package/src/react/hooks/useCountOffersForCollectible.tsx +5 -4
  178. package/src/react/hooks/useCurrency.tsx +2 -2
  179. package/src/react/hooks/useERC721SaleMintedTokens.tsx +67 -0
  180. package/src/react/hooks/useFloorOrder.tsx +5 -2
  181. package/src/react/hooks/useGenerateCancelTransaction.tsx +13 -6
  182. package/src/react/hooks/useGenerateListingTransaction.tsx +15 -5
  183. package/src/react/hooks/useGenerateOfferTransaction.tsx +15 -6
  184. package/src/react/hooks/useGenerateSellTransaction.tsx +15 -6
  185. package/src/react/hooks/useGetTokenSuppliesMap.ts +5 -0
  186. package/src/react/hooks/useInventory.tsx +7 -5
  187. package/src/react/hooks/useList1155ShopCardData.tsx +130 -0
  188. package/src/react/hooks/useList721ShopCardData.tsx +130 -0
  189. package/src/react/hooks/useListBalances.tsx +6 -9
  190. package/src/react/hooks/useListCollectibleActivities.tsx +2 -1
  191. package/src/react/hooks/useListCollectibles.tsx +1 -14
  192. package/src/react/hooks/useListCollectiblesPaginated.tsx +8 -5
  193. package/src/react/hooks/useListCollectionActivities.tsx +2 -1
  194. package/src/react/hooks/useListCollections.tsx +1 -1
  195. package/src/react/hooks/useListListingsForCollectible.tsx +2 -1
  196. package/src/react/hooks/useListMarketCardData.tsx +157 -0
  197. package/src/react/hooks/useListOffersForCollectible.tsx +2 -1
  198. package/src/react/hooks/useListPrimarySaleItems.ts +42 -0
  199. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +134 -0
  200. package/src/react/queries/highestOffer.ts +6 -4
  201. package/src/react/queries/inventory.ts +35 -1
  202. package/src/react/queries/listBalances.ts +14 -30
  203. package/src/react/queries/listCollectibles.ts +60 -7
  204. package/src/react/queries/listCollections.ts +8 -2
  205. package/src/react/queries/listTokenMetadata.ts +6 -1
  206. package/src/react/queries/lowestListing.ts +6 -4
  207. package/src/react/queries/marketCurrencies.ts +11 -7
  208. package/src/react/queries/marketplaceConfig.ts +55 -80
  209. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +44 -6
  210. package/src/react/ssr/__tests__/create-ssr-client.test.ts +0 -3
  211. package/src/react/ssr/create-ssr-client.ts +5 -10
  212. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +47 -13
  213. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +1 -1
  214. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +28 -15
  215. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +1 -1
  216. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +1 -1
  217. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +1 -1
  218. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +78 -15
  219. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +1 -1
  220. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +1 -1
  221. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +17 -0
  222. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +24 -0
  223. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +231 -0
  224. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +76 -0
  225. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +55 -0
  226. package/src/react/ui/components/marketplace-collectible-card/index.ts +3 -0
  227. package/src/react/ui/components/marketplace-collectible-card/types.ts +95 -0
  228. package/src/react/ui/components/marketplace-collectible-card/utils/formatPrice.ts +45 -0
  229. package/src/react/ui/components/marketplace-collectible-card/utils/index.ts +2 -0
  230. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +39 -0
  231. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +124 -0
  232. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +105 -0
  233. package/src/react/ui/components/{collectible-card/media → media}/Media.tsx +42 -25
  234. package/src/react/ui/components/{collectible-card/media → media}/types.ts +3 -1
  235. package/src/react/ui/index.ts +5 -2
  236. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +554 -0
  237. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +385 -0
  238. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +272 -0
  239. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +112 -0
  240. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +117 -13
  241. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -7
  242. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +157 -0
  243. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +136 -0
  244. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +184 -0
  245. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +121 -0
  246. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +85 -0
  247. package/src/react/ui/modals/BuyModal/components/ERC721ShopModal.tsx +86 -0
  248. package/src/react/ui/modals/BuyModal/components/Modal.tsx +14 -0
  249. package/src/react/ui/modals/BuyModal/components/types.ts +8 -0
  250. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +4 -4
  251. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +379 -0
  252. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +253 -0
  253. package/src/react/ui/modals/BuyModal/hooks/__tests__/{useFees.test.tsx → useMarketPlatformFee.test.tsx} +10 -11
  254. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +62 -44
  255. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +73 -0
  256. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +196 -0
  257. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +74 -18
  258. package/src/react/ui/modals/BuyModal/hooks/useMarketPlatformFee.ts +53 -0
  259. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +27 -12
  260. package/src/react/ui/modals/BuyModal/store.ts +147 -13
  261. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -1
  262. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +5 -3
  263. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +2 -1
  264. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +5 -3
  265. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +4 -3
  266. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +6 -3
  267. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +11 -7
  268. package/src/react/ui/modals/SuccessfulPurchaseModal/index.tsx +34 -28
  269. package/src/react/ui/modals/SuccessfulPurchaseModal/store.ts +71 -0
  270. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +0 -1
  271. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +105 -108
  272. package/src/react/ui/modals/_internal/components/actionModal/store.ts +45 -12
  273. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +12 -8
  274. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +35 -33
  275. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +61 -32
  276. package/src/react/ui/modals/modal-provider.tsx +1 -1
  277. package/src/types/buyModalErrors.ts +438 -0
  278. package/src/types/index.ts +4 -1
  279. package/src/types/new-marketplace-types.ts +6 -21
  280. package/src/types/sdk-config.ts +18 -24
  281. package/src/types/types.ts +16 -0
  282. package/src/utils/_internal/error/transaction.ts +36 -1
  283. package/tsconfig.json +1 -1
  284. package/tsconfig.tsbuildinfo +1 -1
  285. package/tsdown.config.ts +25 -0
  286. package/.ctirc +0 -32
  287. package/dist/alien_swap-2B65TDGT.js.map +0 -1
  288. package/dist/aqua-xyz-WMYQLAIS.js.map +0 -1
  289. package/dist/aura-V22RV5OG.js.map +0 -1
  290. package/dist/blur-GE5QOMCM.js.map +0 -1
  291. package/dist/chunk-2PSNAIAT.js +0 -1
  292. package/dist/chunk-2PSNAIAT.js.map +0 -1
  293. package/dist/chunk-5C6ZZ6WX.js +0 -130
  294. package/dist/chunk-5C6ZZ6WX.js.map +0 -1
  295. package/dist/chunk-5O44EPXZ.js +0 -207
  296. package/dist/chunk-5O44EPXZ.js.map +0 -1
  297. package/dist/chunk-6CTFVBKU.js +0 -1
  298. package/dist/chunk-6CTFVBKU.js.map +0 -1
  299. package/dist/chunk-6OPMUCGX.js +0 -42
  300. package/dist/chunk-6OPMUCGX.js.map +0 -1
  301. package/dist/chunk-FUM4OGOQ.js +0 -1027
  302. package/dist/chunk-FUM4OGOQ.js.map +0 -1
  303. package/dist/chunk-L6KWLCER.js +0 -32
  304. package/dist/chunk-L6KWLCER.js.map +0 -1
  305. package/dist/chunk-LAP2CKLN.js +0 -485
  306. package/dist/chunk-LAP2CKLN.js.map +0 -1
  307. package/dist/chunk-LECCEZAO.js +0 -11
  308. package/dist/chunk-LECCEZAO.js.map +0 -1
  309. package/dist/chunk-N7SQWS2R.js +0 -38
  310. package/dist/chunk-N7SQWS2R.js.map +0 -1
  311. package/dist/chunk-NX52D7NX.js +0 -135
  312. package/dist/chunk-NX52D7NX.js.map +0 -1
  313. package/dist/chunk-OAOONM4S.js +0 -1787
  314. package/dist/chunk-OAOONM4S.js.map +0 -1
  315. package/dist/chunk-Q3ECVC4F.js +0 -811
  316. package/dist/chunk-Q3ECVC4F.js.map +0 -1
  317. package/dist/chunk-QY52UADF.js +0 -107
  318. package/dist/chunk-QY52UADF.js.map +0 -1
  319. package/dist/chunk-TNAR3XEF.js +0 -8729
  320. package/dist/chunk-TNAR3XEF.js.map +0 -1
  321. package/dist/chunk-XABYNWXO.js +0 -549
  322. package/dist/chunk-XABYNWXO.js.map +0 -1
  323. package/dist/chunk-XX4EVWBF.js +0 -1292
  324. package/dist/chunk-XX4EVWBF.js.map +0 -1
  325. package/dist/chunk-YB5UUF2G.js +0 -11
  326. package/dist/chunk-YB5UUF2G.js.map +0 -1
  327. package/dist/chunk-YWGFI4PN.js +0 -217
  328. package/dist/chunk-YWGFI4PN.js.map +0 -1
  329. package/dist/coinbase-NLHJMGAP.js.map +0 -1
  330. package/dist/create-config-DLMvMTkZ.d.ts +0 -8
  331. package/dist/element-2LGTYYSP.js.map +0 -1
  332. package/dist/foundation-BPN66ZTN.js.map +0 -1
  333. package/dist/get-query-client-D46hbjk6.d.ts +0 -5
  334. package/dist/index.css.map +0 -1
  335. package/dist/index.js.map +0 -1
  336. package/dist/looks-rare-MZRSOPT4.js.map +0 -1
  337. package/dist/magic-eden-PUBL6KWW.js.map +0 -1
  338. package/dist/manifold-GA445YJ6.js.map +0 -1
  339. package/dist/marketCurrencies-enNVYwBk.d.ts +0 -277
  340. package/dist/marketplace.gen-D24veUQs.d.ts +0 -1073
  341. package/dist/marketplaceConfig-BwNAbLPw.d.ts +0 -21
  342. package/dist/mintify-UMC5PTKC.js.map +0 -1
  343. package/dist/new-marketplace-types-BCw19X9S.d.ts +0 -102
  344. package/dist/nftx-AX3CY3IE.js.map +0 -1
  345. package/dist/okx-GNVLAE2R.js.map +0 -1
  346. package/dist/open-sea-KI43GVEB.js.map +0 -1
  347. package/dist/rarible-2J3MMZJ7.js.map +0 -1
  348. package/dist/react/_internal/api/index.js.map +0 -1
  349. package/dist/react/_internal/databeat/index.css +0 -2764
  350. package/dist/react/_internal/databeat/index.css.map +0 -1
  351. package/dist/react/_internal/databeat/index.js.map +0 -1
  352. package/dist/react/_internal/index.js.map +0 -1
  353. package/dist/react/_internal/wagmi/index.js.map +0 -1
  354. package/dist/react/hooks/index.css +0 -2764
  355. package/dist/react/hooks/index.css.map +0 -1
  356. package/dist/react/hooks/index.js.map +0 -1
  357. package/dist/react/hooks/options/index.js.map +0 -1
  358. package/dist/react/index.css +0 -2764
  359. package/dist/react/index.css.map +0 -1
  360. package/dist/react/index.js.map +0 -1
  361. package/dist/react/queries/index.js.map +0 -1
  362. package/dist/react/ui/components/collectible-card/index.css +0 -2764
  363. package/dist/react/ui/components/collectible-card/index.css.map +0 -1
  364. package/dist/react/ui/components/collectible-card/index.d.ts +0 -71
  365. package/dist/react/ui/components/collectible-card/index.js +0 -27
  366. package/dist/react/ui/components/collectible-card/index.js.map +0 -1
  367. package/dist/react/ui/components/marketplace-logos/index.js.map +0 -1
  368. package/dist/react/ui/icons/index.js.map +0 -1
  369. package/dist/react/ui/index.css +0 -2764
  370. package/dist/react/ui/index.css.map +0 -1
  371. package/dist/react/ui/index.js.map +0 -1
  372. package/dist/react/ui/modals/_internal/components/actionModal/index.css +0 -2764
  373. package/dist/react/ui/modals/_internal/components/actionModal/index.css.map +0 -1
  374. package/dist/react/ui/modals/_internal/components/actionModal/index.js.map +0 -1
  375. package/dist/sdk-config-qorA0TgF.d.ts +0 -165
  376. package/dist/sequence-TGLUFEPQ.js.map +0 -1
  377. package/dist/services-WrshxCqc.d.ts +0 -23
  378. package/dist/sudo-swap-M2O6E3TE.js.map +0 -1
  379. package/dist/super-rare-UU2U4LIN.js.map +0 -1
  380. package/dist/types/index.js.map +0 -1
  381. package/dist/useCollection-YAdXfVO7.d.ts +0 -61
  382. package/dist/utils/abi/index.js.map +0 -1
  383. package/dist/utils/abi/marketplace/index.js.map +0 -1
  384. package/dist/utils/abi/primary-sale/index.js.map +0 -1
  385. package/dist/utils/abi/token/index.js.map +0 -1
  386. package/dist/utils/index.js.map +0 -1
  387. package/dist/x2y2-3W5BBMZC.js.map +0 -1
  388. package/dist/zora-6EY6FUH6.js.map +0 -1
  389. package/postcss.config.mjs +0 -5
  390. package/src/react/hooks/__tests__/__snapshots__/useRoyaltyPercentage.test.tsx.snap +0 -8
  391. package/src/react/ui/components/collectible-card/CollectibleCard.tsx +0 -170
  392. package/src/react/ui/components/collectible-card/Footer.tsx +0 -157
  393. package/src/react/ui/components/collectible-card/__tests__/CollectibleCard.test.tsx +0 -94
  394. package/src/react/ui/components/collectible-card/__tests__/Footer.test.tsx +0 -136
  395. package/src/react/ui/components/collectible-card/__tests__/Media.test.tsx +0 -264
  396. package/src/react/ui/components/collectible-card/index.ts +0 -2
  397. package/src/react/ui/modals/BuyModal/ERC1155QuantityModal.tsx +0 -130
  398. package/src/react/ui/modals/BuyModal/Modal.tsx +0 -124
  399. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +0 -104
  400. package/src/react/ui/modals/BuyModal/hooks/useFees.ts +0 -39
  401. package/src/react/ui/modals/SuccessfulPurchaseModal/_store.ts +0 -72
  402. package/tsup.config.ts +0 -23
  403. /package/src/react/ui/components/{collectible-card/media → media}/MediaSkeleton.tsx +0 -0
  404. /package/src/react/ui/components/{collectible-card/media → media}/utils.ts +0 -0
@@ -1,19 +1,76 @@
1
1
  import { createStore } from '@xstate/store';
2
2
  import { useSelector } from '@xstate/store/react';
3
3
  import type { Address, Hash } from 'viem';
4
- import type { MarketplaceKind, Step } from '../../../_internal';
4
+ import type { MarketplaceType } from '../../../../types';
5
+ import type {
6
+ CheckoutOptionsItem,
7
+ MarketplaceKind,
8
+ Step,
9
+ } from '../../../_internal';
5
10
 
6
- export type BuyModalProps = {
7
- orderId: string;
11
+ export type CheckoutOptionsSalesContractProps = {
8
12
  chainId: number;
13
+ salesContractAddress: Address;
9
14
  collectionAddress: Address;
15
+ items: Array<CheckoutOptionsItem>;
16
+ customProviderCallback?: (
17
+ onSuccess: (txHash: string) => void,
18
+ onError: (error: Error) => void,
19
+ onClose: () => void,
20
+ ) => void;
21
+ };
22
+
23
+ export type PaymentModalProps = {
10
24
  collectibleId: string;
11
25
  marketplace: MarketplaceKind;
26
+ orderId: string;
12
27
  customCreditCardProviderCallback?: (buyStep: Step) => void;
28
+ };
29
+
30
+ export type BuyModalBaseProps = {
31
+ chainId: number;
32
+ collectionAddress: Address;
13
33
  skipNativeBalanceCheck?: boolean;
14
34
  nativeTokenAddress?: Address;
35
+ marketplaceType?: MarketplaceType;
36
+ customCreditCardProviderCallback?: PaymentModalProps['customCreditCardProviderCallback'];
37
+ };
38
+
39
+ // Shop type modal props
40
+ export type ShopBuyModalProps = BuyModalBaseProps & {
41
+ marketplaceType: 'shop';
42
+ salesContractAddress: Address;
43
+ items: Array<Partial<CheckoutOptionsItem> & { tokenId?: string }>;
44
+ quantityDecimals: number;
45
+ quantityRemaining: number;
46
+ salePrice: {
47
+ amount: string;
48
+ currencyAddress: Address;
49
+ };
15
50
  };
16
51
 
52
+ // Marketplace type modal props
53
+ export type MarketplaceBuyModalProps = BuyModalBaseProps & {
54
+ marketplaceType?: 'market';
55
+ collectibleId: string;
56
+ marketplace: MarketplaceKind;
57
+ orderId: string;
58
+ };
59
+
60
+ export type BuyModalProps = ShopBuyModalProps | MarketplaceBuyModalProps;
61
+
62
+ // Type guard functions
63
+ export function isShopProps(props: BuyModalProps): props is ShopBuyModalProps {
64
+ return props.marketplaceType === 'shop';
65
+ }
66
+
67
+ export function isMarketProps(
68
+ props: BuyModalProps,
69
+ ): props is MarketplaceBuyModalProps {
70
+ // Default to MARKET type for backward compatibility
71
+ return !props.marketplaceType || props.marketplaceType === 'market';
72
+ }
73
+
17
74
  export type onSuccessCallback = ({
18
75
  hash,
19
76
  orderId,
@@ -23,12 +80,18 @@ export type onSuccessCallback = ({
23
80
  }) => void;
24
81
  export type onErrorCallback = (error: Error) => void;
25
82
 
83
+ type ModalState = 'idle' | 'opening' | 'open' | 'processing' | 'closing';
84
+ type SubModalState = 'idle' | 'opening' | 'open' | 'closed';
85
+
26
86
  const initialContext = {
27
87
  isOpen: false,
28
- props: null as unknown as BuyModalProps,
88
+ props: null as BuyModalProps | null,
29
89
  onError: (() => {}) as onErrorCallback,
30
90
  onSuccess: (() => {}) as onSuccessCallback,
31
- quantity: undefined as number | undefined,
91
+ quantity: null as number | null,
92
+ modalState: 'idle' as ModalState,
93
+ paymentModalState: 'idle' as SubModalState,
94
+ checkoutModalState: 'idle' as SubModalState,
32
95
  };
33
96
 
34
97
  export const buyModalStore = createStore({
@@ -41,32 +104,94 @@ export const buyModalStore = createStore({
41
104
  onError?: onErrorCallback;
42
105
  onSuccess?: onSuccessCallback;
43
106
  },
44
- ) => ({
107
+ ) => {
108
+ // Prevent duplicate opens
109
+ if (context.modalState !== 'idle') {
110
+ return context;
111
+ }
112
+ return {
113
+ ...context,
114
+ props: event.props,
115
+ onError: event.onError ?? context.onError,
116
+ onSuccess: event.onSuccess ?? context.onSuccess,
117
+ isOpen: true,
118
+ modalState: 'opening' as const,
119
+ };
120
+ },
121
+
122
+ modalOpened: (context) => ({
45
123
  ...context,
46
- props: event.props,
47
- onError: event.onError ?? context.onError,
48
- onSuccess: event.onSuccess ?? context.onSuccess,
49
- isOpen: true,
124
+ modalState: 'open' as const,
50
125
  }),
51
126
 
52
127
  close: (context) => ({
53
128
  ...context,
54
129
  isOpen: false,
55
- quantity: undefined,
130
+ quantity: null,
131
+ modalState: 'idle' as const,
132
+ paymentModalState: 'idle' as const,
133
+ checkoutModalState: 'idle' as const,
56
134
  }),
57
135
 
58
136
  setQuantity: (context, event: { quantity: number }) => ({
59
137
  ...context,
60
138
  quantity: event.quantity,
61
139
  }),
140
+
141
+ openPaymentModal: (context) => {
142
+ if (context.paymentModalState !== 'idle') {
143
+ return context; // Prevent duplicate opens
144
+ }
145
+ return {
146
+ ...context,
147
+ paymentModalState: 'opening' as const,
148
+ };
149
+ },
150
+
151
+ paymentModalOpened: (context) => ({
152
+ ...context,
153
+ paymentModalState: 'open' as const,
154
+ }),
155
+
156
+ paymentModalClosed: (context) => ({
157
+ ...context,
158
+ paymentModalState: 'closed' as const,
159
+ }),
160
+
161
+ openCheckoutModal: (context) => {
162
+ if (context.checkoutModalState !== 'idle') {
163
+ return context;
164
+ }
165
+ return {
166
+ ...context,
167
+ checkoutModalState: 'opening' as const,
168
+ };
169
+ },
170
+
171
+ checkoutModalOpened: (context) => ({
172
+ ...context,
173
+ checkoutModalState: 'open' as const,
174
+ }),
175
+
176
+ checkoutModalClosed: (context) => ({
177
+ ...context,
178
+ checkoutModalState: 'closed' as const,
179
+ }),
62
180
  },
63
181
  });
64
182
 
65
183
  export const useIsOpen = () =>
66
184
  useSelector(buyModalStore, (state) => state.context.isOpen);
67
185
 
68
- export const useBuyModalProps = () =>
69
- useSelector(buyModalStore, (state) => state.context.props);
186
+ export const useBuyModalProps = () => {
187
+ const props = useSelector(buyModalStore, (state) => state.context.props);
188
+ if (!props) {
189
+ throw new Error(
190
+ 'BuyModal props not initialized. Make sure to call show() first.',
191
+ );
192
+ }
193
+ return props;
194
+ };
70
195
 
71
196
  export const useOnError = () =>
72
197
  useSelector(buyModalStore, (state) => state.context.onError);
@@ -76,3 +201,12 @@ export const useOnSuccess = () =>
76
201
 
77
202
  export const useQuantity = () =>
78
203
  useSelector(buyModalStore, (state) => state.context.quantity);
204
+
205
+ export const useModalState = () =>
206
+ useSelector(buyModalStore, (state) => state.context.modalState);
207
+
208
+ export const usePaymentModalState = () =>
209
+ useSelector(buyModalStore, (state) => state.context.paymentModalState);
210
+
211
+ export const useCheckoutModalState = () =>
212
+ useSelector(buyModalStore, (state) => state.context.checkoutModalState);
@@ -31,7 +31,7 @@ export const useGetTokenApprovalData = (
31
31
  const config = useConfig();
32
32
  const { wallet } = useWallet();
33
33
  const { address } = useAccount();
34
- const marketplaceClient = getMarketplaceClient(params.chainId, config);
34
+ const marketplaceClient = getMarketplaceClient(config);
35
35
 
36
36
  const listing = {
37
37
  tokenId: params.tokenId,
@@ -52,6 +52,7 @@ export const useGetTokenApprovalData = (
52
52
  queryFn: isEnabled
53
53
  ? async () => {
54
54
  const args = {
55
+ chainId: String(params.chainId),
55
56
  collectionAddress: params.collectionAddress,
56
57
  owner: await wallet.address(),
57
58
  walletType: wallet.walletKind,
@@ -3,6 +3,7 @@ import { type Address, type Hex, formatUnits } from 'viem';
3
3
  import { OrderbookKind, type Price } from '../../../../../types';
4
4
  import { getSequenceMarketplaceRequestId } from '../../../../../utils/getSequenceMarketRequestId';
5
5
  import {
6
+ ExecuteType,
6
7
  type Step,
7
8
  StepType,
8
9
  type TransactionSteps,
@@ -45,7 +46,6 @@ export const useTransactionSteps = ({
45
46
  steps$,
46
47
  }: UseTransactionStepsArgs) => {
47
48
  const { wallet } = useWallet();
48
- const expiry = new Date(Number(listingInput.listing.expiry) * 1000);
49
49
  const { show: showTransactionStatusModal } = useTransactionStatusModal();
50
50
  const sdkConfig = useConfig();
51
51
  const { data: currencies } = useMarketCurrencies({
@@ -55,7 +55,7 @@ export const useTransactionSteps = ({
55
55
  (currency) =>
56
56
  currency.contractAddress === listingInput.listing.currencyAddress,
57
57
  );
58
- const marketplaceClient = getMarketplaceClient(chainId, sdkConfig);
58
+ const marketplaceClient = getMarketplaceClient(sdkConfig);
59
59
  const analytics = useAnalytics();
60
60
  const { generateListingTransactionAsync, isPending: generatingSteps } =
61
61
  useGenerateListingTransaction({
@@ -79,7 +79,7 @@ export const useTransactionSteps = ({
79
79
  orderbook: orderbookKind,
80
80
  listing: {
81
81
  ...listingInput.listing,
82
- expiry,
82
+ expiry: new Date(Number(listingInput.listing.expiry) * 1000),
83
83
  },
84
84
  });
85
85
 
@@ -265,10 +265,12 @@ export const useTransactionSteps = ({
265
265
  );
266
266
 
267
267
  const result = await marketplaceClient.execute({
268
+ chainId: String(chainId),
268
269
  signature: signature as string,
269
270
  method: signatureStep.post?.method as string,
270
271
  endpoint: signatureStep.post?.endpoint as string,
271
272
  body: signatureStep.post?.body,
273
+ executeType: ExecuteType.order,
272
274
  });
273
275
 
274
276
  return result.orderId;
@@ -29,7 +29,7 @@ export const useGetTokenApprovalData = (
29
29
  ) => {
30
30
  const config = useConfig();
31
31
  const { wallet } = useWallet();
32
- const marketplaceClient = getMarketplaceClient(params.chainId, config);
32
+ const marketplaceClient = getMarketplaceClient(config);
33
33
 
34
34
  const offer = {
35
35
  tokenId: params.tokenId,
@@ -46,6 +46,7 @@ export const useGetTokenApprovalData = (
46
46
  queryFn: isEnabled
47
47
  ? async () => {
48
48
  const args = {
49
+ chainId: String(params.chainId),
49
50
  collectionAddress: params.collectionAddress,
50
51
  maker: await wallet.address(),
51
52
  walletType: wallet.walletKind,
@@ -3,6 +3,7 @@ import { type Address, type Hex, formatUnits } from 'viem';
3
3
  import { OrderbookKind, type Price } from '../../../../../types';
4
4
  import { getSequenceMarketplaceRequestId } from '../../../../../utils/getSequenceMarketRequestId';
5
5
  import {
6
+ ExecuteType,
6
7
  type Step,
7
8
  StepType,
8
9
  type TransactionSteps,
@@ -44,11 +45,10 @@ export const useTransactionSteps = ({
44
45
  steps$,
45
46
  }: UseTransactionStepsArgs) => {
46
47
  const { wallet } = useWallet();
47
- const expiry = new Date(Number(offerInput.offer.expiry) * 1000);
48
48
  const { show: showTransactionStatusModal } = useTransactionStatusModal();
49
49
  const sdkConfig = useConfig();
50
50
  const analytics = useAnalytics();
51
- const marketplaceClient = getMarketplaceClient(chainId, sdkConfig);
51
+ const marketplaceClient = getMarketplaceClient(sdkConfig);
52
52
  const { generateOfferTransactionAsync, isPending: generatingSteps } =
53
53
  useGenerateOfferTransaction({
54
54
  chainId,
@@ -75,7 +75,7 @@ export const useTransactionSteps = ({
75
75
  orderbook: orderbookKind,
76
76
  offer: {
77
77
  ...offerInput.offer,
78
- expiry,
78
+ expiry: new Date(Number(offerInput.offer.expiry) * 1000),
79
79
  },
80
80
  });
81
81
 
@@ -256,10 +256,12 @@ export const useTransactionSteps = ({
256
256
  );
257
257
 
258
258
  const result = await marketplaceClient.execute({
259
+ chainId: String(chainId),
259
260
  signature: signature as string,
260
261
  method: signatureStep.post?.method as string,
261
262
  endpoint: signatureStep.post?.endpoint as string,
262
263
  body: signatureStep.post?.body,
264
+ executeType: ExecuteType.order,
263
265
  });
264
266
 
265
267
  return result.orderId;
@@ -8,7 +8,7 @@ import {
8
8
  } from '../../../../_internal';
9
9
  import { useWallet } from '../../../../_internal/wallet/useWallet';
10
10
  import { useConfig } from '../../../../hooks/useConfig';
11
- import { useFees } from '../../BuyModal/hooks/useFees';
11
+ import { useMarketPlatformFee } from '../../BuyModal/hooks/useMarketPlatformFee';
12
12
 
13
13
  export interface UseGetTokenApprovalDataArgs {
14
14
  chainId: number;
@@ -22,8 +22,8 @@ export const useGetTokenApprovalData = (
22
22
  ) => {
23
23
  const config = useConfig();
24
24
  const { wallet } = useWallet();
25
- const marketplaceClient = getMarketplaceClient(params.chainId, config);
26
- const { amount, receiver } = useFees({
25
+ const marketplaceClient = getMarketplaceClient(config);
26
+ const { amount, receiver } = useMarketPlatformFee({
27
27
  chainId: Number(params.chainId),
28
28
  collectionAddress: params.collectionAddress,
29
29
  });
@@ -34,6 +34,7 @@ export const useGetTokenApprovalData = (
34
34
  ? async () => {
35
35
  const address = await wallet.address();
36
36
  const args = {
37
+ chainId: String(params.chainId),
37
38
  collectionAddress: params.collectionAddress,
38
39
  walletType: wallet.walletKind,
39
40
  seller: address,
@@ -2,6 +2,7 @@ import type { Observable } from '@legendapp/state';
2
2
  import { formatUnits } from 'viem';
3
3
  import type { Address, Hex } from 'viem';
4
4
  import {
5
+ ExecuteType,
5
6
  type MarketplaceKind,
6
7
  type Step,
7
8
  StepType,
@@ -22,7 +23,7 @@ import {
22
23
  useGenerateSellTransaction,
23
24
  useMarketCurrencies,
24
25
  } from '../../../../hooks';
25
- import { useFees } from '../../BuyModal/hooks/useFees';
26
+ import { useMarketPlatformFee } from '../../BuyModal/hooks/useMarketPlatformFee';
26
27
  import { useTransactionStatusModal } from '../../_internal/components/transactionStatusModal';
27
28
  import type { ModalCallbacks } from '../../_internal/types';
28
29
  import type { SellOrder } from './useSell';
@@ -52,10 +53,10 @@ export const useTransactionSteps = ({
52
53
  const { wallet } = useWallet();
53
54
  const { show: showTransactionStatusModal } = useTransactionStatusModal();
54
55
  const sdkConfig = useConfig();
55
- const marketplaceClient = getMarketplaceClient(chainId, sdkConfig);
56
+ const marketplaceClient = getMarketplaceClient(sdkConfig);
56
57
  const analytics = useAnalytics();
57
58
 
58
- const { amount, receiver } = useFees({
59
+ const { amount, receiver } = useMarketPlatformFee({
59
60
  chainId,
60
61
  collectionAddress: collectionAddress,
61
62
  });
@@ -248,10 +249,12 @@ export const useTransactionSteps = ({
248
249
  );
249
250
 
250
251
  const result = await marketplaceClient.execute({
252
+ chainId: String(chainId),
251
253
  signature: signature as string,
252
254
  method: signatureStep.post?.method as string,
253
255
  endpoint: signatureStep.post?.endpoint as string,
254
256
  body: signatureStep.post?.body,
257
+ executeType: ExecuteType.order,
255
258
  });
256
259
 
257
260
  return result.orderId;
@@ -2,7 +2,7 @@ import { cleanup, render, screen } from '@test';
2
2
  import { beforeEach, describe, expect, it, vi } from 'vitest';
3
3
  import SuccessfulPurchaseModal, { useSuccessfulPurchaseModal } from '..';
4
4
  import type { ModalCallbacks } from '../../_internal/types';
5
- import { successfulPurchaseModal$ } from '../_store';
5
+ import { successfulPurchaseModalStore } from '../store';
6
6
 
7
7
  describe('SuccessfulPurchaseModal', () => {
8
8
  beforeEach(() => {
@@ -30,7 +30,7 @@ describe('SuccessfulPurchaseModal', () => {
30
30
  explorerName: 'Etherscan',
31
31
  };
32
32
 
33
- successfulPurchaseModal$.open(mockPurchaseData);
33
+ successfulPurchaseModalStore.send({ type: 'open', ...mockPurchaseData });
34
34
  render(<SuccessfulPurchaseModal />);
35
35
 
36
36
  expect(screen.getByText('Successful purchase!')).toBeInTheDocument();
@@ -58,7 +58,7 @@ describe('SuccessfulPurchaseModal', () => {
58
58
  },
59
59
  };
60
60
 
61
- successfulPurchaseModal$.open(mockPurchaseData);
61
+ successfulPurchaseModalStore.send({ type: 'open', ...mockPurchaseData });
62
62
  render(<SuccessfulPurchaseModal />);
63
63
 
64
64
  expect(screen.getByText('View Collection')).toBeInTheDocument();
@@ -79,7 +79,7 @@ describe('SuccessfulPurchaseModal', () => {
79
79
  explorerName: 'Etherscan',
80
80
  };
81
81
 
82
- successfulPurchaseModal$.open(mockPurchaseData);
82
+ successfulPurchaseModalStore.send({ type: 'open', ...mockPurchaseData });
83
83
  render(<SuccessfulPurchaseModal />);
84
84
 
85
85
  expect(screen.getByText('5 TOTAL')).toBeInTheDocument();
@@ -100,13 +100,15 @@ describe('SuccessfulPurchaseModal', () => {
100
100
  explorerName: 'Etherscan',
101
101
  };
102
102
 
103
- successfulPurchaseModal$.open(mockPurchaseData);
103
+ successfulPurchaseModalStore.send({ type: 'open', ...mockPurchaseData });
104
104
  render(<SuccessfulPurchaseModal />);
105
105
 
106
106
  const closeButton = screen.getByLabelText('Close modal');
107
107
  closeButton.click();
108
108
 
109
- expect(successfulPurchaseModal$.isOpen.get()).toBe(false);
109
+ expect(successfulPurchaseModalStore.getSnapshot().context.isOpen).toBe(
110
+ false,
111
+ );
110
112
  });
111
113
 
112
114
  describe('useSuccessfulPurchaseModal', () => {
@@ -138,7 +140,9 @@ describe('SuccessfulPurchaseModal', () => {
138
140
  };
139
141
 
140
142
  modal.show(mockPurchaseData);
141
- expect(successfulPurchaseModal$.callbacks.get()).toBe(callbacks);
143
+ expect(successfulPurchaseModalStore.getSnapshot().context.callbacks).toBe(
144
+ callbacks,
145
+ );
142
146
  });
143
147
  });
144
148
  });
@@ -7,27 +7,34 @@ import {
7
7
  Modal,
8
8
  Text,
9
9
  } from '@0xsequence/design-system';
10
- import { observer, use$ } from '@legendapp/state/react';
11
10
  import type { TokenMetadata } from '../../../_internal';
12
11
  import type { ModalCallbacks } from '../_internal/types';
13
12
  import {
14
13
  type SuccessfulPurchaseModalState,
15
- successfulPurchaseModal$,
16
- } from './_store';
14
+ successfulPurchaseModalStore,
15
+ useIsOpen,
16
+ useModalState,
17
+ } from './store';
17
18
 
18
19
  export const useSuccessfulPurchaseModal = (callbacks?: ModalCallbacks) => {
19
20
  return {
20
21
  show: (args: SuccessfulPurchaseModalState['state']) =>
21
- successfulPurchaseModal$.open({ ...args, defaultCallbacks: callbacks }),
22
- close: () => successfulPurchaseModal$.close(),
22
+ successfulPurchaseModalStore.send({
23
+ type: 'open',
24
+ ...args,
25
+ defaultCallbacks: callbacks,
26
+ }),
27
+ close: () => successfulPurchaseModalStore.send({ type: 'close' }),
23
28
  };
24
29
  };
25
30
 
26
- const SuccessfulPurchaseModal = observer(() => {
31
+ const SuccessfulPurchaseModal = () => {
32
+ const isOpen = useIsOpen();
33
+ const modalState = useModalState();
34
+
27
35
  const handleClose = () => {
28
- successfulPurchaseModal$.close();
36
+ successfulPurchaseModalStore.send({ type: 'close' });
29
37
  };
30
- const isOpen = use$(successfulPurchaseModal$.isOpen);
31
38
 
32
39
  if (!isOpen) return null;
33
40
 
@@ -47,9 +54,7 @@ const SuccessfulPurchaseModal = observer(() => {
47
54
  Successful purchase!
48
55
  </Text>
49
56
 
50
- <CollectiblesGrid
51
- collectibles={successfulPurchaseModal$.state.get().collectibles}
52
- />
57
+ <CollectiblesGrid collectibles={modalState.collectibles} />
53
58
 
54
59
  <div className="flex items-center gap-1">
55
60
  <Text className="text-base" fontWeight="medium" color="text80">
@@ -57,7 +62,7 @@ const SuccessfulPurchaseModal = observer(() => {
57
62
  </Text>
58
63
 
59
64
  <Text className="text-base" fontWeight="medium" color="text100">
60
- {successfulPurchaseModal$.state.get().collectibles.length}
65
+ {modalState.collectibles.length}
61
66
  </Text>
62
67
 
63
68
  <Text className="text-base" fontWeight="medium" color="text80">
@@ -65,35 +70,34 @@ const SuccessfulPurchaseModal = observer(() => {
65
70
  </Text>
66
71
 
67
72
  <Text className="text-base" fontWeight="medium" color="text100">
68
- {successfulPurchaseModal$.state.get().totalPrice}
73
+ {modalState.totalPrice}
69
74
  </Text>
70
75
  </div>
71
76
 
72
- <SuccessfulPurchaseActions />
77
+ <SuccessfulPurchaseActions modalState={modalState} />
73
78
  </div>
74
79
  </Modal>
75
80
  );
76
- });
81
+ };
77
82
 
78
- function SuccessfulPurchaseActions() {
83
+ function SuccessfulPurchaseActions({
84
+ modalState,
85
+ }: {
86
+ modalState: SuccessfulPurchaseModalState['state'];
87
+ }) {
79
88
  return (
80
89
  <div className="flex flex-col gap-2">
81
- {successfulPurchaseModal$.state.ctaOptions.get() && (
90
+ {modalState.ctaOptions && (
82
91
  <Button
83
92
  className="w-full"
84
93
  shape="square"
85
- leftIcon={
86
- successfulPurchaseModal$.state.ctaOptions.ctaIcon.get() || undefined
87
- }
88
- label={successfulPurchaseModal$.state.ctaOptions.ctaLabel.get()}
89
- onClick={
90
- successfulPurchaseModal$.state.ctaOptions.ctaOnClick.get() ||
91
- undefined
92
- }
94
+ leftIcon={modalState.ctaOptions.ctaIcon || undefined}
95
+ label={modalState.ctaOptions.ctaLabel}
96
+ onClick={modalState.ctaOptions.ctaOnClick || undefined}
93
97
  />
94
98
  )}
95
99
  <a
96
- href={successfulPurchaseModal$.state.explorerUrl.get()}
100
+ href={modalState.explorerUrl}
97
101
  target="_blank"
98
102
  rel="noopener noreferrer"
99
103
  className="w-full"
@@ -101,7 +105,7 @@ function SuccessfulPurchaseActions() {
101
105
  <Button
102
106
  shape="square"
103
107
  leftIcon={ExternalLinkIcon}
104
- label={`View on ${successfulPurchaseModal$.state.explorerName.get()}`}
108
+ label={`View on ${modalState.explorerName}`}
105
109
  />
106
110
  </a>
107
111
  </div>
@@ -123,7 +127,9 @@ function CollectiblesGrid({ collectibles }: { collectibles: TokenMetadata[] }) {
123
127
  key={collectible.tokenId}
124
128
  >
125
129
  <Image
126
- className={`aspect-square h-full w-full rounded-lg bg-background-secondary object-contain ${showPlus ? 'opacity-[0.4_!important]' : ''}`}
130
+ className={`aspect-square h-full w-full rounded-lg bg-background-secondary object-contain ${
131
+ showPlus ? 'opacity-[0.4_!important]' : ''
132
+ }`}
127
133
  src={collectible.image}
128
134
  alt={collectible.name}
129
135
  />
@@ -0,0 +1,71 @@
1
+ import type { IconProps } from '@0xsequence/design-system';
2
+ import { createStore } from '@xstate/store';
3
+ import { useSelector } from '@xstate/store/react';
4
+ import type { ComponentType } from 'react';
5
+ import type { TokenMetadata } from '../../../_internal';
6
+ import type { ModalCallbacks } from '../_internal/types';
7
+
8
+ export interface SuccessfulPurchaseModalState {
9
+ isOpen: boolean;
10
+ state: {
11
+ collectibles: TokenMetadata[];
12
+ totalPrice: string;
13
+ explorerName: string;
14
+ explorerUrl: string;
15
+ ctaOptions?: {
16
+ ctaLabel: string;
17
+ ctaOnClick: () => void;
18
+ ctaIcon?: ComponentType<IconProps>;
19
+ };
20
+ };
21
+ callbacks?: ModalCallbacks;
22
+ }
23
+
24
+ const initialContext: SuccessfulPurchaseModalState = {
25
+ isOpen: false,
26
+ state: {
27
+ collectibles: [],
28
+ totalPrice: '0',
29
+ explorerName: '',
30
+ explorerUrl: '',
31
+ ctaOptions: undefined,
32
+ },
33
+ callbacks: undefined,
34
+ };
35
+
36
+ export const successfulPurchaseModalStore = createStore({
37
+ context: initialContext,
38
+ on: {
39
+ open: (
40
+ context,
41
+ event: SuccessfulPurchaseModalState['state'] & {
42
+ callbacks?: ModalCallbacks;
43
+ defaultCallbacks?: ModalCallbacks;
44
+ },
45
+ ) => ({
46
+ ...context,
47
+ isOpen: true,
48
+ state: {
49
+ collectibles: event.collectibles,
50
+ totalPrice: event.totalPrice,
51
+ explorerName: event.explorerName,
52
+ explorerUrl: event.explorerUrl,
53
+ ctaOptions: event.ctaOptions,
54
+ },
55
+ callbacks: event.callbacks || event.defaultCallbacks,
56
+ }),
57
+ close: () => ({
58
+ ...initialContext,
59
+ }),
60
+ },
61
+ });
62
+
63
+ // Selector hooks
64
+ export const useIsOpen = () =>
65
+ useSelector(successfulPurchaseModalStore, (state) => state.context.isOpen);
66
+
67
+ export const useModalState = () =>
68
+ useSelector(successfulPurchaseModalStore, (state) => state.context.state);
69
+
70
+ export const useCallbacks = () =>
71
+ useSelector(successfulPurchaseModalStore, (state) => state.context.callbacks);
@@ -11,7 +11,6 @@ vi.mock('../switchChainModal', () => ({
11
11
  useSwitchChainModal: () => ({
12
12
  show: mockShowSwitchChainModal,
13
13
  close: vi.fn(),
14
- isSwitching$: { get: () => false },
15
14
  }),
16
15
  }));
17
16