@0xsequence/marketplace-sdk 0.10.0 → 1.0.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 (468) hide show
  1. package/.storybook/ConnectionStatus.tsx +289 -0
  2. package/.storybook/main.ts +20 -1
  3. package/.storybook/preview.tsx +106 -0
  4. package/CHANGELOG.md +58 -0
  5. package/compile-tailwind.js +54 -0
  6. package/dist/{CalendarIcon-CqsuAuCm.js → BellIcon-Cb9YEUzJ.js} +76 -29
  7. package/dist/BellIcon-Cb9YEUzJ.js.map +1 -0
  8. package/dist/CollectibleCard-CYyWzk6u.d.ts +8 -0
  9. package/dist/{_internal-C75gOSNo.js → _internal-DslqcNC1.js} +10 -2
  10. package/dist/_internal-DslqcNC1.js.map +1 -0
  11. package/dist/{alien_swap-CYv6YlOF.js → alien_swap-DJ98gZQp.js} +1 -1
  12. package/dist/{alien_swap-CYv6YlOF.js.map → alien_swap-DJ98gZQp.js.map} +1 -1
  13. package/dist/{api-BiMGqWdz.js → api-BmEQfSQa.js} +24 -4
  14. package/dist/api-BmEQfSQa.js.map +1 -0
  15. package/dist/{aqua-xyz-Bzn5baeH.js → aqua-xyz-n1PcCCZ0.js} +1 -1
  16. package/dist/{aqua-xyz-Bzn5baeH.js.map → aqua-xyz-n1PcCCZ0.js.map} +1 -1
  17. package/dist/{aura-DzIWh8WT.js → aura-Bevk_YkS.js} +1 -1
  18. package/dist/{aura-DzIWh8WT.js.map → aura-Bevk_YkS.js.map} +1 -1
  19. package/dist/{blur-DSH-Cbpj.js → blur-B5sHErx5.js} +1 -1
  20. package/dist/{blur-DSH-Cbpj.js.map → blur-B5sHErx5.js.map} +1 -1
  21. package/dist/builder-api-BFuZNOaN.js.map +1 -1
  22. package/dist/builder.gen-B9wR2nvF.js.map +1 -1
  23. package/dist/{coinbase-Df8URNxq.js → coinbase-D30W-lxA.js} +1 -1
  24. package/dist/{coinbase-Df8URNxq.js.map → coinbase-D30W-lxA.js.map} +1 -1
  25. package/dist/contracts-DPHFT2TA.js +97 -0
  26. package/dist/contracts-DPHFT2TA.js.map +1 -0
  27. package/dist/{create-config-fQ-jbJD1.js → create-config-6uynwTeb.js} +2 -2
  28. package/dist/create-config-6uynwTeb.js.map +1 -0
  29. package/dist/{create-config-DKJ-F0jc.d.ts → create-config-lLSrnkbb.d.ts} +253 -226
  30. package/dist/{element-Cx6uJu5N.js → element-C2NJexro.js} +1 -1
  31. package/dist/{element-Cx6uJu5N.js.map → element-C2NJexro.js.map} +1 -1
  32. package/dist/filters-B8XS4tFH.d.ts +31 -0
  33. package/dist/{foundation-D6U4aRLN.js → foundation-QgY1lvUj.js} +1 -1
  34. package/dist/{foundation-D6U4aRLN.js.map → foundation-QgY1lvUj.js.map} +1 -1
  35. package/dist/index-BGJXqdg6.d.ts +131 -0
  36. package/dist/index-BuY_NKSX.d.ts +222 -0
  37. package/dist/{index-BhVFc2rX.d.ts → index-ByW08-Z7.d.ts} +4 -4
  38. package/dist/index-C7xKVIr4.d.ts +447 -0
  39. package/dist/index-CIkpYltz.d.ts +61 -0
  40. package/dist/index-CQnGIGb5.d.ts +346 -0
  41. package/dist/{index-CUwMH7Ht.d.ts → index-CY5UEX4h.d.ts} +2 -2
  42. package/dist/{index-C5aqo8xu.d.ts → index-ChSKFOMx.d.ts} +1 -1
  43. package/dist/{index-BAhaEfqY.d.ts → index-CtF7EE2z.d.ts} +1 -1
  44. package/dist/index-D2HohSwO.d.ts +293 -0
  45. package/dist/index-D71J5Ghd.d.ts +813 -0
  46. package/dist/{index-CKrYP7ot.d.ts → index-DNU9xoGK.d.ts} +14 -22
  47. package/dist/index-DX0Vm8HY.d.ts +2541 -0
  48. package/dist/index-DonXiSg2.d.ts +902 -0
  49. package/dist/index-Dpyp7fQz.d.ts +298 -0
  50. package/dist/index-PSPpUxCE.d.ts +18 -0
  51. package/dist/{index-136YrWDH.d.ts → index-QxxS6f9r.d.ts} +1 -1
  52. package/dist/index-ThUIs-Sy.d.ts +306 -0
  53. package/dist/index.d.ts +8 -8
  54. package/dist/index.js +12 -13
  55. package/dist/listCollectiblesPaginated--AgXjajA.d.ts +166 -0
  56. package/dist/listCollections-Bbzbz7qW.d.ts +624 -0
  57. package/dist/{looks-rare-ChBRBY-p.js → looks-rare-CMVPny4v.js} +1 -1
  58. package/dist/{looks-rare-ChBRBY-p.js.map → looks-rare-CMVPny4v.js.map} +1 -1
  59. package/dist/lowestListing-BQHfQpfg.d.ts +144 -0
  60. package/dist/{magic-eden-D5U7N1xL.js → magic-eden-IrWp2ZXk.js} +1 -1
  61. package/dist/{magic-eden-D5U7N1xL.js.map → magic-eden-IrWp2ZXk.js.map} +1 -1
  62. package/dist/{manifold-CtLF52zU.js → manifold-DeOE-p2G.js} +1 -1
  63. package/dist/{manifold-CtLF52zU.js.map → manifold-DeOE-p2G.js.map} +1 -1
  64. package/dist/marketCurrencies-CmOMCCOr.d.ts +122 -0
  65. package/dist/{marketplace-DmFiyBoS.js → marketplace-B5Z8G03R.js} +1 -1
  66. package/dist/{marketplace-DmFiyBoS.js.map → marketplace-B5Z8G03R.js.map} +1 -1
  67. package/dist/{marketplace-logos-Cd6W-qOq.js → marketplace-logos-D8t86gsW.js} +21 -21
  68. package/dist/{marketplace-logos-Cd6W-qOq.js.map → marketplace-logos-D8t86gsW.js.map} +1 -1
  69. package/dist/{marketplace.gen-HpnpL5xU.js → marketplace.gen-JzNYpM0U.js} +1 -1
  70. package/dist/{marketplace.gen-HpnpL5xU.js.map → marketplace.gen-JzNYpM0U.js.map} +1 -1
  71. package/dist/{marketplaceConfig-GQTTmihy.js → marketplaceConfig-sNh-MA5M.js} +14 -3
  72. package/dist/marketplaceConfig-sNh-MA5M.js.map +1 -0
  73. package/dist/{mintify-Bi3Bce68.js → mintify-DG3GrljJ.js} +1 -1
  74. package/dist/{mintify-Bi3Bce68.js.map → mintify-DG3GrljJ.js.map} +1 -1
  75. package/dist/{network-CGD0oKtS.js → network-DnBEe1Ur.js} +2 -2
  76. package/dist/{network-CGD0oKtS.js.map → network-DnBEe1Ur.js.map} +1 -1
  77. package/dist/{nftx-BDQZjtkX.js → nftx-B3LH-ZYM.js} +1 -1
  78. package/dist/{nftx-BDQZjtkX.js.map → nftx-B3LH-ZYM.js.map} +1 -1
  79. package/dist/{okx-D4meadLe.js → okx-CRFLrT3Z.js} +1 -1
  80. package/dist/{okx-D4meadLe.js.map → okx-CRFLrT3Z.js.map} +1 -1
  81. package/dist/{open-sea-DN0hgfVw.js → open-sea-cOpfl366.js} +1 -1
  82. package/dist/{open-sea-DN0hgfVw.js.map → open-sea-cOpfl366.js.map} +1 -1
  83. package/dist/primary-sale-CLjXRrDj.js +3048 -0
  84. package/dist/primary-sale-CLjXRrDj.js.map +1 -0
  85. package/dist/queries-BYT4GJw3.js +1478 -0
  86. package/dist/queries-BYT4GJw3.js.map +1 -0
  87. package/dist/query-BTe7Wkrs.d.ts +31 -0
  88. package/dist/{rarible-B0xlD88A.js → rarible-guwUx4cn.js} +1 -1
  89. package/dist/{rarible-B0xlD88A.js.map → rarible-guwUx4cn.js.map} +1 -1
  90. package/dist/react/_internal/api/index.d.ts +1 -1
  91. package/dist/react/_internal/api/index.js +4 -6
  92. package/dist/react/_internal/databeat/index.d.ts +1 -1
  93. package/dist/react/_internal/databeat/index.js +24 -4
  94. package/dist/react/_internal/index.d.ts +1 -1
  95. package/dist/react/_internal/index.js +7 -10
  96. package/dist/react/_internal/wagmi/index.d.ts +1 -1
  97. package/dist/react/_internal/wagmi/index.js +3 -4
  98. package/dist/react/hooks/config/index.d.ts +9 -0
  99. package/dist/react/hooks/config/index.js +26 -0
  100. package/dist/react/hooks/contracts/index.d.ts +7 -0
  101. package/dist/react/hooks/contracts/index.js +16 -0
  102. package/dist/react/hooks/data/collectibles/index.d.ts +5 -0
  103. package/dist/react/hooks/data/collectibles/index.js +26 -0
  104. package/dist/react/hooks/data/collections/index.d.ts +11 -0
  105. package/dist/react/hooks/data/collections/index.js +26 -0
  106. package/dist/react/hooks/data/index.d.ts +29 -0
  107. package/dist/react/hooks/data/index.js +26 -0
  108. package/dist/react/hooks/data/inventory/index.d.ts +29 -0
  109. package/dist/react/hooks/data/inventory/index.js +26 -0
  110. package/dist/react/hooks/data/market/index.d.ts +12 -0
  111. package/dist/react/hooks/data/market/index.js +26 -0
  112. package/dist/react/hooks/data/orders/index.d.ts +11 -0
  113. package/dist/react/hooks/data/orders/index.js +26 -0
  114. package/dist/react/hooks/data/primary-sales/index.d.ts +29 -0
  115. package/dist/react/hooks/data/primary-sales/index.js +26 -0
  116. package/dist/react/hooks/data/tokens/index.d.ts +5 -0
  117. package/dist/react/hooks/data/tokens/index.js +26 -0
  118. package/dist/react/hooks/index.d.ts +29 -13
  119. package/dist/react/hooks/index.js +22 -23
  120. package/dist/react/hooks/transactions/index.d.ts +3 -0
  121. package/dist/react/hooks/transactions/index.js +26 -0
  122. package/dist/react/hooks/ui/index.d.ts +5 -0
  123. package/dist/react/hooks/ui/index.js +26 -0
  124. package/dist/react/hooks/utils/index.d.ts +29 -0
  125. package/dist/react/hooks/utils/index.js +26 -0
  126. package/dist/react/index.d.ts +29 -13
  127. package/dist/react/index.js +22 -28
  128. package/dist/react/queries/index.d.ts +16 -9
  129. package/dist/react/queries/index.js +17 -20
  130. package/dist/react/ssr/index.d.ts +7 -7
  131. package/dist/react/ssr/index.js +8 -11
  132. package/dist/react/ssr/index.js.map +1 -1
  133. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +4 -3
  134. package/dist/react/ui/components/marketplace-collectible-card/index.js +21 -27
  135. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -2
  136. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +8 -11
  137. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  138. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  139. package/dist/react/ui/icons/index.js +11 -13
  140. package/dist/react/ui/index.d.ts +4 -3
  141. package/dist/react/ui/index.js +21 -27
  142. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +3 -27
  143. package/dist/react/ui/modals/_internal/components/actionModal/index.js +22 -24
  144. package/dist/react/utils/index.d.ts +19 -0
  145. package/dist/react/utils/index.js +9 -0
  146. package/dist/{react-DeDyTgo7.css → react-CbqXKOpt.css} +1 -1
  147. package/dist/{react-DeDyTgo7.css.map → react-CbqXKOpt.css.map} +1 -1
  148. package/dist/react-Ceq8mamy.js +12494 -0
  149. package/dist/react-Ceq8mamy.js.map +1 -0
  150. package/dist/{sequence-BIrOVRXO.js → sequence-Dt2Xo7Fa.js} +1 -1
  151. package/dist/{sequence-BIrOVRXO.js.map → sequence-Dt2Xo7Fa.js.map} +1 -1
  152. package/dist/{index.css → styles/index.css} +270 -131
  153. package/dist/{sudo-swap-BPMon-M5.js → sudo-swap-CGoARONs.js} +1 -1
  154. package/dist/{sudo-swap-BPMon-M5.js.map → sudo-swap-CGoARONs.js.map} +1 -1
  155. package/dist/{super-rare-kPN6Ua8i.js → super-rare-NeQtZjcn.js} +1 -1
  156. package/dist/{super-rare-kPN6Ua8i.js.map → super-rare-NeQtZjcn.js.map} +1 -1
  157. package/dist/{token-CHSBPYVG.js → token-D9gZVqbX.js} +1 -1
  158. package/dist/{token-CHSBPYVG.js.map → token-D9gZVqbX.js.map} +1 -1
  159. package/dist/tokenSupplies-DXtkRYNO.d.ts +147 -0
  160. package/dist/{transaction-CnctdNzS.js → transaction-CC2KxNF6.js} +21 -18
  161. package/dist/transaction-CC2KxNF6.js.map +1 -0
  162. package/dist/types/index.d.ts +1 -1
  163. package/dist/types/index.js +2 -2
  164. package/dist/{CollectibleCard-Dd-CG6dE.d.ts → types-BlCa0TVE.d.ts} +5 -8
  165. package/dist/{types-Yw2ywj6j.js → types-G2PWxiJR.js} +1 -1
  166. package/dist/{types-Yw2ywj6j.js.map → types-G2PWxiJR.js.map} +1 -1
  167. package/dist/utils/abi/index.d.ts +5 -5
  168. package/dist/utils/abi/index.js +5 -5
  169. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  170. package/dist/utils/abi/marketplace/index.js +1 -1
  171. package/dist/utils/abi/primary-sale/index.d.ts +2 -2
  172. package/dist/utils/abi/primary-sale/index.js +2 -2
  173. package/dist/utils/abi/token/index.d.ts +1 -1
  174. package/dist/utils/abi/token/index.js +1 -1
  175. package/dist/utils/index.d.ts +7 -7
  176. package/dist/utils/index.js +11 -12
  177. package/dist/{utils-9RXDgcBl.js → utils-CKJd-CRf.js} +3 -3
  178. package/dist/{utils-9RXDgcBl.js.map → utils-CKJd-CRf.js.map} +1 -1
  179. package/dist/{utils-DjVJ9tov.js → utils-wquIhK6T.js} +2 -2
  180. package/dist/{utils-DjVJ9tov.js.map → utils-wquIhK6T.js.map} +1 -1
  181. package/dist/waitForTransactionReceipt-DZxAuR9N.js +27 -0
  182. package/dist/waitForTransactionReceipt-DZxAuR9N.js.map +1 -0
  183. package/dist/{x2y2-BLz-_Q2O.js → x2y2-CQdg24VP.js} +1 -1
  184. package/dist/{x2y2-BLz-_Q2O.js.map → x2y2-CQdg24VP.js.map} +1 -1
  185. package/dist/{zora-UGhKs-aL.js → zora-DdEydy4L.js} +1 -1
  186. package/dist/{zora-UGhKs-aL.js.map → zora-DdEydy4L.js.map} +1 -1
  187. package/package.json +44 -41
  188. package/postcss.config.mjs +72 -5
  189. package/public/mockServiceWorker.js +344 -0
  190. package/src/react/_internal/api/__mocks__/builder.msw.ts +6 -0
  191. package/src/react/_internal/api/__mocks__/metadata.msw.ts +12 -1
  192. package/src/react/_internal/api/builder.gen.ts +11 -7
  193. package/src/react/_internal/databeat/index.ts +1 -1
  194. package/src/react/_internal/databeat/types.ts +1 -0
  195. package/src/react/_internal/query-meta.ts +3 -0
  196. package/src/react/_internal/utils.ts +2 -0
  197. package/src/react/_internal/wagmi/create-config.ts +1 -1
  198. package/src/react/_internal/wagmi/get-connectors.ts +1 -1
  199. package/src/react/hooks/{__tests__ → config}/__snapshots__/useMarketplaceConfig.test.tsx.snap +6 -0
  200. package/src/react/hooks/config/index.ts +3 -0
  201. package/src/react/hooks/{useConfig.tsx → config/useConfig.tsx} +2 -2
  202. package/src/react/hooks/config/useConnectorMetadata.tsx +16 -0
  203. package/src/react/hooks/{__tests__ → config}/useMarketplaceConfig.test.tsx +1 -1
  204. package/src/react/hooks/{useMarketplaceConfig.tsx → config/useMarketplaceConfig.tsx} +2 -2
  205. package/src/react/hooks/contracts/index.ts +1 -0
  206. package/src/react/hooks/contracts/useSalesContractABI.ts +174 -0
  207. package/src/react/hooks/data/collectibles/index.ts +6 -0
  208. package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.laos.test.tsx +4 -4
  209. package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.test.tsx +2 -2
  210. package/src/react/hooks/{useBalanceOfCollectible.tsx → data/collectibles/useBalanceOfCollectible.tsx} +4 -4
  211. package/src/react/hooks/{__tests__ → data/collectibles}/useCollectible.test.tsx +3 -3
  212. package/src/react/hooks/{useCollectible.tsx → data/collectibles/useCollectible.tsx} +3 -3
  213. package/src/react/hooks/{__tests__ → data/collectibles}/useCountOfCollectables.test.tsx +4 -4
  214. package/src/react/hooks/{useCountOfCollectables.tsx → data/collectibles/useCountOfCollectables.tsx} +3 -3
  215. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibleActivities.test.tsx +3 -3
  216. package/src/react/hooks/{useListCollectibleActivities.tsx → data/collectibles/useListCollectibleActivities.tsx} +3 -3
  217. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibles.test.tsx +5 -6
  218. package/src/react/hooks/{useListCollectibles.tsx → data/collectibles/useListCollectibles.tsx} +3 -3
  219. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectiblesPaginated.test.tsx +4 -4
  220. package/src/react/hooks/{useListCollectiblesPaginated.tsx → data/collectibles/useListCollectiblesPaginated.tsx} +3 -3
  221. package/src/react/hooks/{__tests__ → data/collections}/__snapshots__/useListCollections.test.tsx.snap +10 -0
  222. package/src/react/hooks/data/collections/index.ts +6 -0
  223. package/src/react/hooks/{__tests__ → data/collections}/useCollection.test.tsx +2 -3
  224. package/src/react/hooks/{useCollection.tsx → data/collections/useCollection.tsx} +3 -3
  225. package/src/react/hooks/{__tests__ → data/collections}/useCollectionBalanceDetails.test.tsx +2 -2
  226. package/src/react/hooks/{useCollectionBalanceDetails.tsx → data/collections/useCollectionBalanceDetails.tsx} +3 -3
  227. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetails.test.tsx +2 -2
  228. package/src/react/hooks/{useCollectionDetails.ts → data/collections/useCollectionDetails.ts} +3 -3
  229. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetailsPolling.test.tsx +3 -3
  230. package/src/react/hooks/{useCollectionDetailsPolling.tsx → data/collections/useCollectionDetailsPolling.tsx} +4 -4
  231. package/src/react/hooks/{__tests__ → data/collections}/useListCollectionActivities.test.tsx +5 -5
  232. package/src/react/hooks/{useListCollectionActivities.tsx → data/collections/useListCollectionActivities.tsx} +3 -3
  233. package/src/react/hooks/{__tests__ → data/collections}/useListCollections.test.tsx +5 -4
  234. package/src/react/hooks/{useListCollections.tsx → data/collections/useListCollections.tsx} +4 -4
  235. package/src/react/hooks/data/index.ts +6 -0
  236. package/src/react/hooks/data/inventory/index.ts +1 -0
  237. package/src/react/hooks/{__tests__ → data/inventory}/useInventory.test.tsx +4 -4
  238. package/src/react/hooks/{useInventory.tsx → data/inventory/useInventory.tsx} +7 -4
  239. package/src/react/hooks/data/market/index.ts +3 -0
  240. package/src/react/hooks/{__tests__ → data/market}/useCurrency.test.tsx +4 -4
  241. package/src/react/hooks/{useCurrency.tsx → data/market/useCurrency.tsx} +3 -3
  242. package/src/react/hooks/{__tests__ → data/market}/useListMarketCardData.test.tsx +10 -14
  243. package/src/react/hooks/{useListMarketCardData.tsx → data/market/useListMarketCardData.tsx} +6 -6
  244. package/src/react/hooks/{__tests__ → data/market}/useMarketCurrencies.test.tsx +5 -5
  245. package/src/react/hooks/{useMarketCurrencies.tsx → data/market/useMarketCurrencies.tsx} +3 -3
  246. package/src/react/hooks/data/orders/index.ts +7 -0
  247. package/src/react/hooks/{__tests__ → data/orders}/useCountListingsForCollectible.test.tsx +2 -2
  248. package/src/react/hooks/{useCountListingsForCollectible.tsx → data/orders/useCountListingsForCollectible.tsx} +3 -3
  249. package/src/react/hooks/{__tests__ → data/orders}/useCountOffersForCollectible.test.tsx +2 -2
  250. package/src/react/hooks/{useCountOffersForCollectible.tsx → data/orders/useCountOffersForCollectible.tsx} +3 -3
  251. package/src/react/hooks/{__tests__ → data/orders}/useFloorOrder.test.tsx +3 -3
  252. package/src/react/hooks/{useFloorOrder.tsx → data/orders/useFloorOrder.tsx} +3 -3
  253. package/src/react/hooks/{__tests__ → data/orders}/useHighestOffer.test.tsx +3 -3
  254. package/src/react/hooks/{useHighestOffer.tsx → data/orders/useHighestOffer.tsx} +3 -3
  255. package/src/react/hooks/{__tests__ → data/orders}/useListListingsForCollectible.test.tsx +6 -6
  256. package/src/react/hooks/{useListListingsForCollectible.tsx → data/orders/useListListingsForCollectible.tsx} +3 -3
  257. package/src/react/hooks/{__tests__ → data/orders}/useListOffersForCollectible.test.tsx +5 -5
  258. package/src/react/hooks/{useListOffersForCollectible.tsx → data/orders/useListOffersForCollectible.tsx} +4 -4
  259. package/src/react/hooks/{__tests__ → data/orders}/useLowestListing.test.tsx +5 -5
  260. package/src/react/hooks/{useLowestListing.tsx → data/orders/useLowestListing.tsx} +3 -3
  261. package/src/react/hooks/data/primary-sales/index.ts +6 -0
  262. package/src/react/hooks/{useCountOfPrimarySaleItems.tsx → data/primary-sales/useCountOfPrimarySaleItems.tsx} +2 -2
  263. package/src/react/hooks/data/primary-sales/useErc721SalesData.tsx +184 -0
  264. package/src/react/hooks/{useGetCountOfPrimarySaleItems.tsx → data/primary-sales/useGetCountOfPrimarySaleItems.tsx} +4 -4
  265. package/src/react/hooks/{useList1155ShopCardData.tsx → data/primary-sales/useList1155ShopCardData.tsx} +15 -8
  266. package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +183 -0
  267. package/src/react/hooks/{useListPrimarySaleItems.tsx → data/primary-sales/useListPrimarySaleItems.tsx} +3 -3
  268. package/src/react/hooks/data/tokens/index.ts +5 -0
  269. package/src/react/hooks/{__tests__ → data/tokens}/useCurrencyBalance.test.tsx +2 -2
  270. package/src/react/hooks/{__tests__ → data/tokens}/useGetTokenRanges.test.tsx +3 -3
  271. package/src/react/hooks/{useGetTokenRanges.tsx → data/tokens/useGetTokenRanges.tsx} +6 -4
  272. package/src/react/hooks/{__tests__ → data/tokens}/useListBalances.test.tsx +2 -2
  273. package/src/react/hooks/{useListBalances.tsx → data/tokens/useListBalances.tsx} +5 -5
  274. package/src/react/hooks/{__tests__ → data/tokens}/useListTokenMetadata.test.tsx +3 -3
  275. package/src/react/hooks/{useListTokenMetadata.tsx → data/tokens/useListTokenMetadata.tsx} +3 -3
  276. package/src/react/hooks/data/tokens/useSearchTokenMetadata.test.tsx +284 -0
  277. package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +186 -0
  278. package/src/react/hooks/{useTokenSupplies.ts → data/tokens/useTokenSupplies.ts} +5 -5
  279. package/src/react/hooks/index.ts +18 -52
  280. package/src/react/hooks/transactions/index.ts +9 -0
  281. package/src/react/hooks/{__tests__ → transactions}/useCancelOrder.test.tsx +53 -85
  282. package/src/react/hooks/{useCancelOrder.tsx → transactions/useCancelOrder.tsx} +4 -4
  283. package/src/react/hooks/{__tests__/useCancelTransactionSteps.test.tsx → transactions/useCancelTransactionSteps.test.tsx.bak} +3 -52
  284. package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +193 -0
  285. package/src/react/hooks/{__tests__ → transactions}/useGenerateCancelTransaction.test.tsx +2 -2
  286. package/src/react/hooks/{useGenerateCancelTransaction.tsx → transactions/useGenerateCancelTransaction.tsx} +5 -5
  287. package/src/react/hooks/{__tests__ → transactions}/useGenerateListingTransaction.test.tsx +2 -2
  288. package/src/react/hooks/{useGenerateListingTransaction.tsx → transactions/useGenerateListingTransaction.tsx} +5 -5
  289. package/src/react/hooks/{__tests__ → transactions}/useGenerateOfferTransaction.test.tsx +7 -45
  290. package/src/react/hooks/{useGenerateOfferTransaction.tsx → transactions/useGenerateOfferTransaction.tsx} +7 -7
  291. package/src/react/hooks/{__tests__ → transactions}/useGenerateSellTransaction.test.tsx +3 -7
  292. package/src/react/hooks/{useGenerateSellTransaction.tsx → transactions/useGenerateSellTransaction.tsx} +4 -4
  293. package/src/react/hooks/transactions/useOrderSteps.tsx +189 -0
  294. package/src/react/hooks/transactions/useProcessStep.test.tsx +272 -0
  295. package/src/react/hooks/transactions/useProcessStep.ts +95 -0
  296. package/src/react/hooks/{__tests__ → transactions}/useTransferTokens.test.tsx +2 -2
  297. package/src/react/hooks/{useTransferTokens.tsx → transactions/useTransferTokens.tsx} +3 -3
  298. package/src/react/hooks/ui/index.ts +3 -0
  299. package/src/react/hooks/{useFilterState.tsx → ui/useFilterState.tsx} +1 -1
  300. package/src/react/hooks/{__tests__ → ui}/useFilters.test.tsx +1 -2
  301. package/src/react/hooks/{useFilters.tsx → ui/useFilters.tsx} +3 -3
  302. package/src/react/hooks/{useOpenConnectModal.tsx → ui/useOpenConnectModal.tsx} +1 -1
  303. package/src/react/hooks/util/optimisticCancelUpdates.ts +1 -0
  304. package/src/react/hooks/utils/index.ts +9 -0
  305. package/src/react/hooks/{__tests__ → utils}/useAutoSelectFeeOption.test.tsx +7 -3
  306. package/src/react/hooks/{useAutoSelectFeeOption.tsx → utils/useAutoSelectFeeOption.tsx} +2 -2
  307. package/src/react/hooks/{__tests__ → utils}/useCheckoutOptions.test.tsx +9 -5
  308. package/src/react/hooks/{useCheckoutOptions.tsx → utils/useCheckoutOptions.tsx} +6 -4
  309. package/src/react/hooks/{__tests__ → utils}/useCheckoutOptionsSalesContract.test.tsx +8 -4
  310. package/src/react/hooks/{useCheckoutOptionsSalesContract.tsx → utils/useCheckoutOptionsSalesContract.tsx} +3 -3
  311. package/src/react/hooks/{__tests__ → utils}/useComparePrices.test.tsx +1 -1
  312. package/src/react/hooks/{useComparePrices.tsx → utils/useComparePrices.tsx} +3 -5
  313. package/src/react/hooks/{__tests__ → utils}/useConvertPriceToUSD.test.tsx +2 -2
  314. package/src/react/hooks/{useConvertPriceToUSD.tsx → utils/useConvertPriceToUSD.tsx} +3 -3
  315. package/src/react/hooks/utils/useEnsureCorrectChain.ts +74 -0
  316. package/src/react/hooks/{__tests__ → utils}/useRoyalty.test.tsx +1 -1
  317. package/src/react/hooks/{useRoyalty.tsx → utils/useRoyalty.tsx} +3 -3
  318. package/src/react/hooks/utils/useSwitchChainWithModal.ts +38 -0
  319. package/src/react/index.ts +1 -2
  320. package/src/react/{provider.tsx → providers/index.tsx} +10 -7
  321. package/src/react/providers/modal-provider.tsx +43 -0
  322. package/src/react/{__tests__ → providers}/provider.test.tsx +1 -1
  323. package/src/react/providers/shadow-root.tsx +63 -0
  324. package/src/react/providers/theme-provider.tsx +29 -0
  325. package/src/react/queries/index.ts +19 -0
  326. package/src/react/queries/marketplaceConfig.ts +10 -1
  327. package/src/react/queries/primarySaleItems.ts +2 -7
  328. package/src/react/queries/searchTokenMetadata.ts +87 -0
  329. package/src/react/queries/tokenSupplies.ts +26 -18
  330. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +6 -0
  331. package/src/react/ssr/__tests__/create-ssr-client.test.ts +1 -1
  332. package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +296 -0
  333. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +34 -14
  334. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +4 -11
  335. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +5 -12
  336. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +32 -16
  337. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +2 -3
  338. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +1 -1
  339. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +2 -3
  340. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +4 -3
  341. package/src/react/ui/components/marketplace-collectible-card/types.ts +3 -2
  342. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +1 -1
  343. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +6 -3
  344. package/src/react/ui/index.ts +1 -1
  345. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +10 -25
  346. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +2 -2
  347. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +1 -1
  348. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +5 -5
  349. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +8 -8
  350. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +32 -14
  351. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +4 -4
  352. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +18 -30
  353. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +14 -1
  354. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +13 -2
  355. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +5 -5
  356. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +7 -2
  357. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +18 -7
  358. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +5 -9
  359. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +16 -15
  360. package/src/react/ui/modals/BuyModal/store.ts +2 -0
  361. package/src/react/ui/modals/CreateListingModal/Modal.tsx +11 -5
  362. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +3 -24
  363. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +5 -9
  364. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +43 -83
  365. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +4 -4
  366. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +88 -62
  367. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +9 -7
  368. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +2 -2
  369. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +47 -84
  370. package/src/react/ui/modals/SellModal/Modal.tsx +7 -9
  371. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +8 -30
  372. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +7 -7
  373. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +39 -65
  374. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +28 -18
  375. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +33 -15
  376. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +3 -3
  377. package/src/react/ui/modals/TransferModal/index.tsx +9 -23
  378. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +116 -136
  379. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +15 -44
  380. package/src/react/ui/modals/_internal/components/actionModal/index.ts +0 -1
  381. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +9 -3
  382. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +1 -1
  383. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +2 -2
  384. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +1 -1
  385. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +97 -7
  386. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +30 -11
  387. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +2 -2
  388. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +1 -1
  389. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +1 -1
  390. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +25 -26
  391. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +3 -1
  392. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +19 -4
  393. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +3 -5
  394. package/src/react/ui/modals/_internal/types.ts +6 -0
  395. package/src/react/utils/index.ts +1 -0
  396. package/src/react/utils/waitForTransactionReceipt.ts +49 -0
  397. package/src/{index.css → styles/index.css} +1 -1
  398. package/src/styles/styles.ts +3275 -0
  399. package/src/types/sdk-config.ts +2 -0
  400. package/src/utils/_internal/error/transaction.ts +0 -10
  401. package/src/utils/abi/primary-sale/index.ts +4 -2
  402. package/src/utils/abi/primary-sale/{sequence-1155-sales-contract.ts → sequence-1155-sales-contract-v0.ts} +67 -58
  403. package/src/utils/abi/primary-sale/sequence-1155-sales-contract-v1.ts +546 -0
  404. package/src/utils/abi/primary-sale/{sequence-721-sales-contract.ts → sequence-721-sales-contract-v0.ts} +1 -1
  405. package/src/utils/abi/primary-sale/sequence-721-sales-contract-v1.ts +394 -0
  406. package/test/const.ts +1 -1
  407. package/test/globalSetup.ts +39 -11
  408. package/test/handlers.ts +465 -0
  409. package/test/index.ts +1 -0
  410. package/test/server-setup.ts +23 -0
  411. package/test/setup.ts +1 -1
  412. package/test/test-utils.tsx +46 -38
  413. package/tsconfig.json +1 -1
  414. package/tsdown.config.ts +12 -7
  415. package/.storybook/preview.ts +0 -24
  416. package/dist/CalendarIcon-CqsuAuCm.js.map +0 -1
  417. package/dist/InfoIcon-v0w_Lu7t.js +0 -53
  418. package/dist/InfoIcon-v0w_Lu7t.js.map +0 -1
  419. package/dist/_internal-C75gOSNo.js.map +0 -1
  420. package/dist/actionModal-CMUeVsFX.js +0 -116
  421. package/dist/actionModal-CMUeVsFX.js.map +0 -1
  422. package/dist/api-BiMGqWdz.js.map +0 -1
  423. package/dist/base-DqaJPvfN.js +0 -22
  424. package/dist/base-DqaJPvfN.js.map +0 -1
  425. package/dist/create-config-fQ-jbJD1.js.map +0 -1
  426. package/dist/get-provider-CYYHfrlg.js +0 -10
  427. package/dist/get-provider-CYYHfrlg.js.map +0 -1
  428. package/dist/get-query-client-D19vvfJo.js +0 -23
  429. package/dist/get-query-client-D19vvfJo.js.map +0 -1
  430. package/dist/hooks-4pxIbLbM.js +0 -4044
  431. package/dist/hooks-4pxIbLbM.js.map +0 -1
  432. package/dist/index-BKBin-rq.d.ts +0 -979
  433. package/dist/index-BUWB_RXp.d.ts +0 -3144
  434. package/dist/index-Cu70Lw-w.d.ts +0 -1057
  435. package/dist/index-DvpBZgor.d.ts +0 -1
  436. package/dist/marketplaceConfig-GQTTmihy.js.map +0 -1
  437. package/dist/primary-sale-CmWxSfFQ.js +0 -1264
  438. package/dist/primary-sale-CmWxSfFQ.js.map +0 -1
  439. package/dist/provider-DPGUA10G.js +0 -125
  440. package/dist/provider-DPGUA10G.js.map +0 -1
  441. package/dist/queries-Ce_2othB.js +0 -757
  442. package/dist/queries-Ce_2othB.js.map +0 -1
  443. package/dist/react/hooks/options/index.d.ts +0 -3
  444. package/dist/react/hooks/options/index.js +0 -16
  445. package/dist/react-DP0M2Wfm.js +0 -5431
  446. package/dist/react-DP0M2Wfm.js.map +0 -1
  447. package/dist/transaction-CnctdNzS.js.map +0 -1
  448. package/dist/wagmi-Do_KW5ke.js +0 -0
  449. package/src/react/_internal/wallet/__tests__/wallet.test.ts +0 -416
  450. package/src/react/_internal/wallet/useWallet.ts +0 -52
  451. package/src/react/_internal/wallet/wallet.ts +0 -313
  452. package/src/react/hooks/options/index.ts +0 -1
  453. package/src/react/hooks/useCancelTransactionSteps.tsx +0 -249
  454. package/src/react/hooks/useERC721SaleMintedTokens.tsx +0 -70
  455. package/src/react/hooks/useList1155SaleSupplies.tsx +0 -62
  456. package/src/react/hooks/useList721ShopCardData.tsx +0 -165
  457. package/src/react/hooks/useListShopCardData.tsx +0 -70
  458. package/src/react/hooks/useListTokenMetadata.ts +0 -71
  459. package/src/react/hooks/useShopCollectibleSaleData.tsx +0 -349
  460. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +0 -130
  461. package/src/react/ui/modals/_internal/components/actionModal/store.ts +0 -57
  462. package/src/react/ui/modals/modal-provider.tsx +0 -25
  463. package/test/mocks/wallet.ts +0 -63
  464. /package/dist/{abi-BMvgNbKQ.js → abi-Wr_aTZFi.js} +0 -0
  465. /package/dist/{index-CD2bj_xW.d.ts → index-q7f-WDBS.d.ts} +0 -0
  466. /package/dist/{options-BBBR8u_4.js → wagmi-BhP3mdhP.js} +0 -0
  467. /package/src/react/hooks/{useCurrencyBalance.tsx → data/tokens/useCurrencyBalance.tsx} +0 -0
  468. /package/src/react/hooks/{useGetReceiptFromHash.tsx → utils/useGetReceiptFromHash.tsx} +0 -0
@@ -3,9 +3,9 @@
3
3
  import { Button, Modal, Spinner, Text } from '@0xsequence/design-system';
4
4
  import type React from 'react';
5
5
  import type { ComponentProps } from 'react';
6
- import { useWallet } from '../../../../../_internal/wallet/useWallet';
6
+ import { useAccount } from 'wagmi';
7
+ import { useEnsureCorrectChain } from '../../../../../hooks';
7
8
  import { MODAL_CONTENT_PROPS, MODAL_OVERLAY_PROPS } from '../consts';
8
- import { useSwitchChainModal } from '../switchChainModal';
9
9
 
10
10
  export interface ActionModalProps {
11
11
  isOpen: boolean;
@@ -40,27 +40,10 @@ export const ActionModal = ({
40
40
  spinnerContainerClassname,
41
41
  hideCtas,
42
42
  }: ActionModalProps) => {
43
- const { show: showSwitchChainModal } = useSwitchChainModal();
44
- const { wallet, isLoading, isError } = useWallet();
43
+ const { status } = useAccount();
44
+ const { ensureCorrectChain } = useEnsureCorrectChain();
45
45
 
46
- const checkChain = async ({ onSuccess }: { onSuccess: () => void }) => {
47
- const walletChainId = await wallet?.getChainId();
48
- const chainMismatch = walletChainId !== Number(chainId);
49
- if (chainMismatch) {
50
- showSwitchChainModal({
51
- chainIdToSwitchTo: chainId,
52
- onSuccess,
53
- });
54
- } else {
55
- onSuccess();
56
- }
57
- };
58
-
59
- if (wallet?.isWaaS) {
60
- wallet.switchChain(Number(chainId));
61
- }
62
-
63
- if (!isOpen || !chainId) {
46
+ if (!isOpen) {
64
47
  return null;
65
48
  }
66
49
 
@@ -77,30 +60,20 @@ export const ActionModal = ({
77
60
  {title}
78
61
  </Text>
79
62
 
80
- {modalLoading || isLoading || isError ? (
63
+ {modalLoading || status !== 'connected' ? (
81
64
  <div
82
65
  className={`flex ${spinnerContainerClassname} w-full items-center justify-center`}
83
66
  data-testid="error-loading-wrapper"
84
67
  >
85
- {isError && (
86
- <Text
87
- data-testid="error-loading-text"
88
- className="text-center font-body text-error100 text-small"
89
- >
90
- Error loading modal
91
- </Text>
92
- )}
93
- {(isLoading || modalLoading) && (
94
- <div data-testid="spinner">
95
- <Spinner size="lg" />
96
- </div>
97
- )}
68
+ <div data-testid="spinner">
69
+ <Spinner size="lg" />
70
+ </div>
98
71
  </div>
99
72
  ) : (
100
73
  children
101
74
  )}
102
75
 
103
- {!hideCtas && !isLoading && !isError && (
76
+ {!hideCtas && status === 'connected' && (
104
77
  <div className="flex w-full flex-col gap-2">
105
78
  {ctas.map(
106
79
  (cta) =>
@@ -108,13 +81,11 @@ export const ActionModal = ({
108
81
  <Button
109
82
  className="w-full rounded-[12px] [&>div]:justify-center"
110
83
  key={cta.onClick.toString()}
111
- onClick={async () => {
112
- await checkChain({
113
- onSuccess: () => {
114
- cta.onClick();
115
- },
116
- });
117
- }}
84
+ onClick={() =>
85
+ ensureCorrectChain(Number(chainId), {
86
+ onSuccess: cta.onClick,
87
+ })
88
+ }
118
89
  variant={cta.variant || 'primary'}
119
90
  pending={cta.pending}
120
91
  disabled={cta.disabled}
@@ -1,2 +1 @@
1
1
  export * from './ActionModal';
2
- export * from './store';
@@ -5,7 +5,7 @@ import { screen } from '@testing-library/react';
5
5
  import { zeroAddress } from 'viem';
6
6
  import { beforeEach, describe, expect, it, vi } from 'vitest';
7
7
  import type { Currency } from '../../../../../../_internal';
8
- import * as hooks from '../../../../../../hooks';
8
+ import * as marketCurrenciesFn from '../../../../../../hooks/data/market/useMarketCurrencies';
9
9
  import CurrencyOptionsSelect from '..';
10
10
 
11
11
  const mockOnCurrencyChange = vi.fn();
@@ -26,7 +26,10 @@ describe('CurrencyOptionsSelect', () => {
26
26
  });
27
27
 
28
28
  it('should render loading skeleton when currencies are loading', () => {
29
- const useCurrenciesSpy = vi.spyOn(hooks, 'useMarketCurrencies');
29
+ const useCurrenciesSpy = vi.spyOn(
30
+ marketCurrenciesFn,
31
+ 'useMarketCurrencies',
32
+ );
30
33
  useCurrenciesSpy.mockReturnValue({
31
34
  isLoading: true,
32
35
  data: undefined,
@@ -41,7 +44,10 @@ describe('CurrencyOptionsSelect', () => {
41
44
  });
42
45
 
43
46
  it('should set first currency as default when currencies load', async () => {
44
- const useCurrenciesSpy = vi.spyOn(hooks, 'useMarketCurrencies');
47
+ const useCurrenciesSpy = vi.spyOn(
48
+ marketCurrenciesFn,
49
+ 'useMarketCurrencies',
50
+ );
45
51
  useCurrenciesSpy.mockReturnValue({
46
52
  isLoading: false,
47
53
  data: TEST_CURRENCIES,
@@ -4,7 +4,7 @@ import { Skeleton } from '@0xsequence/design-system';
4
4
  import { useEffect } from 'react';
5
5
  import type { Address } from 'viem';
6
6
  import type { Currency } from '../../../../../_internal';
7
- import { useMarketCurrencies } from '../../../../../hooks';
7
+ import { useMarketCurrencies } from '../../../../../hooks/data/market/useMarketCurrencies';
8
8
  import {
9
9
  CustomSelect,
10
10
  type SelectItem,
@@ -37,7 +37,7 @@ describe('FloorPriceText', () => {
37
37
  vi.restoreAllMocks();
38
38
  });
39
39
 
40
- it('should render null when loading', () => {
40
+ it.skip('should render null when loading', () => {
41
41
  const useLowestListingSpy = vi.spyOn(hooks, 'useLowestListing');
42
42
  const useComparePricesSpy = vi.spyOn(hooks, 'useComparePrices');
43
43
 
@@ -62,7 +62,7 @@ describe('FloorPriceText', () => {
62
62
  expect(container.firstChild).toBeNull();
63
63
  });
64
64
 
65
- it('should render null when floorPriceRaw is undefined even when not loading', () => {
65
+ it.skip('should render null when floorPriceRaw is undefined even when not loading', () => {
66
66
  const useLowestListingSpy = vi.spyOn(hooks, 'useLowestListing');
67
67
  const useComparePricesSpy = vi.spyOn(hooks, 'useComparePrices');
68
68
 
@@ -6,7 +6,7 @@ import { type Address, parseUnits } from 'viem';
6
6
  import { useAccount } from 'wagmi';
7
7
  import type { Currency, Price } from '../../../../../../types';
8
8
  import { cn } from '../../../../../../utils';
9
- import { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';
9
+ import { useCurrencyBalance } from '../../../../../hooks/data/tokens/useCurrencyBalance';
10
10
  import CurrencyImage from '../currencyImage';
11
11
  import CurrencyOptionsSelect from '../currencyOptionsSelect';
12
12
 
@@ -110,6 +110,7 @@ describe('QuantityInput', () => {
110
110
  <QuantityInput
111
111
  {...defaultProps}
112
112
  quantity="5"
113
+ decimals={0} // Set decimals to 0 for whole number increments
113
114
  onQuantityChange={onQuantityChange}
114
115
  />,
115
116
  );
@@ -127,6 +128,7 @@ describe('QuantityInput', () => {
127
128
  <QuantityInput
128
129
  {...defaultProps}
129
130
  quantity="5"
131
+ decimals={0} // Set decimals to 0 for whole number decrements
130
132
  onQuantityChange={onQuantityChange}
131
133
  />,
132
134
  );
@@ -163,16 +165,20 @@ describe('QuantityInput', () => {
163
165
  />,
164
166
  );
165
167
 
166
- // Set to 1 first
167
- const input = screen.getByRole('textbox', { name: /Enter quantity/i });
168
- fireEvent.change(input, { target: { value: '1' } });
169
-
170
- // Click decrement button, should go to minimum value
171
- const decrementButton = screen.getAllByRole('button')[0]; // The first button is the decrement button
168
+ // Click decrement button multiple times to reach minimum value
169
+ const decrementButton = screen.getAllByRole('button')[0];
170
+ fireEvent.click(decrementButton);
171
+ fireEvent.click(decrementButton);
172
+ fireEvent.click(decrementButton);
173
+ fireEvent.click(decrementButton);
174
+ fireEvent.click(decrementButton);
175
+ fireEvent.click(decrementButton);
176
+ fireEvent.click(decrementButton);
177
+ fireEvent.click(decrementButton);
172
178
  fireEvent.click(decrementButton);
173
179
 
174
180
  // For decimals=1, the min value should be 0.1
175
- expect(onQuantityChange).toHaveBeenCalledWith('0.1');
181
+ expect(onQuantityChange).toHaveBeenLastCalledWith('0.1');
176
182
  });
177
183
 
178
184
  it('should cap quantity to maxQuantity when incrementing past the maximum', () => {
@@ -183,6 +189,7 @@ describe('QuantityInput', () => {
183
189
  <QuantityInput
184
190
  {...defaultProps}
185
191
  quantity="9"
192
+ decimals={0} // Set decimals to 0 for whole number increments
186
193
  onQuantityChange={onQuantityChange}
187
194
  maxQuantity={maxQuantity}
188
195
  />,
@@ -218,4 +225,87 @@ describe('QuantityInput', () => {
218
225
  expect(onQuantityChange).toHaveBeenCalledWith('10');
219
226
  expect(onInvalidQuantityChange).toHaveBeenCalledWith(false);
220
227
  });
228
+
229
+ describe('with 2 decimals', () => {
230
+ const defaultPropsDecimals2 = {
231
+ ...defaultProps,
232
+ decimals: 2,
233
+ quantity: '1.00',
234
+ maxQuantity: '10.00',
235
+ };
236
+
237
+ it('should handle increment with 2 decimal places', () => {
238
+ const onQuantityChange = vi.fn();
239
+ render(
240
+ <QuantityInput
241
+ {...defaultPropsDecimals2}
242
+ quantity="1.50"
243
+ onQuantityChange={onQuantityChange}
244
+ />,
245
+ );
246
+
247
+ const incrementButton = screen.getAllByRole('button')[1];
248
+ fireEvent.click(incrementButton);
249
+
250
+ expect(onQuantityChange).toHaveBeenCalledWith('1.51');
251
+ });
252
+
253
+ it('should handle decrement with 2 decimal places', () => {
254
+ const onQuantityChange = vi.fn();
255
+ render(
256
+ <QuantityInput
257
+ {...defaultPropsDecimals2}
258
+ quantity="1.50"
259
+ onQuantityChange={onQuantityChange}
260
+ />,
261
+ );
262
+
263
+ const decrementButton = screen.getAllByRole('button')[0];
264
+ fireEvent.click(decrementButton);
265
+
266
+ expect(onQuantityChange).toHaveBeenCalledWith('1.49');
267
+ });
268
+
269
+ it('should enforce minimum value with 2 decimal places', () => {
270
+ const onQuantityChange = vi.fn();
271
+ render(
272
+ <QuantityInput
273
+ {...defaultPropsDecimals2}
274
+ quantity="0.02"
275
+ onQuantityChange={onQuantityChange}
276
+ />,
277
+ );
278
+
279
+ const decrementButton = screen.getAllByRole('button')[0];
280
+ fireEvent.click(decrementButton);
281
+
282
+ expect(onQuantityChange).toHaveBeenCalledWith('0.01');
283
+ expect(decrementButton).toBeDisabled();
284
+ });
285
+
286
+ it('should handle direct input with 2 decimal places', () => {
287
+ const onQuantityChange = vi.fn();
288
+ const onInvalidQuantityChange = vi.fn();
289
+
290
+ render(
291
+ <QuantityInput
292
+ {...defaultPropsDecimals2}
293
+ onQuantityChange={onQuantityChange}
294
+ onInvalidQuantityChange={onInvalidQuantityChange}
295
+ />,
296
+ );
297
+
298
+ const input = screen.getByRole('textbox', { name: /Enter quantity/i });
299
+
300
+ // Test valid input
301
+ fireEvent.change(input, { target: { value: '1.23' } });
302
+ expect(onQuantityChange).toHaveBeenCalledWith('1.23');
303
+ expect(onInvalidQuantityChange).toHaveBeenCalledWith(false);
304
+
305
+ // Test too many decimal places
306
+ fireEvent.change(input, { target: { value: '1.234' } });
307
+ expect(onQuantityChange).toHaveBeenCalledWith('1.23');
308
+ expect(onInvalidQuantityChange).toHaveBeenCalledWith(false);
309
+ });
310
+ });
221
311
  });
@@ -32,19 +32,38 @@ export default function QuantityInput({
32
32
  disabled,
33
33
  }: QuantityInputProps) {
34
34
  const dnMaxQuantity = dn.from(maxQuantity, decimals);
35
- const dnOne = dn.from('1', decimals);
36
- const min = decimals > 0 ? Number(`0.${'1'.padStart(decimals, '0')}`) : 0;
35
+ const minIncrement = decimals > 0 ? `0.${'1'.padStart(decimals, '0')}` : '1';
36
+ const dnIncrement = dn.from(minIncrement, decimals);
37
+ const min = decimals > 0 ? minIncrement : '0';
37
38
  const dnMin = dn.from(min, decimals);
38
39
 
39
40
  const [dnQuantity, setDnQuantity] = useState(dn.from(quantity, decimals));
40
-
41
41
  const [localQuantity, setLocalQuantity] = useState(quantity);
42
42
 
43
- // Sync internal state with external prop changes
43
+ // Sync internal state with external prop changes and validate initial quantity
44
44
  useEffect(() => {
45
- setLocalQuantity(quantity);
46
- setDnQuantity(dn.from(quantity, decimals));
47
- }, [quantity, decimals]);
45
+ const dnInitialQuantity = dn.from(quantity, decimals);
46
+ const dnMaxQuantity = dn.from(maxQuantity, decimals);
47
+
48
+ // Check if initial quantity exceeds max quantity
49
+ if (dn.greaterThan(dnInitialQuantity, dnMaxQuantity)) {
50
+ // If initial quantity is too high, set it to max quantity
51
+ const validQuantity = dn.toString(dnMaxQuantity, decimals);
52
+ setLocalQuantity(validQuantity);
53
+ setDnQuantity(dnMaxQuantity);
54
+ onQuantityChange(validQuantity);
55
+ onInvalidQuantityChange(false);
56
+ } else {
57
+ setLocalQuantity(quantity);
58
+ setDnQuantity(dnInitialQuantity);
59
+ }
60
+ }, [
61
+ quantity,
62
+ decimals,
63
+ maxQuantity,
64
+ onQuantityChange,
65
+ onInvalidQuantityChange,
66
+ ]);
48
67
 
49
68
  const setQuantity = ({
50
69
  value,
@@ -98,10 +117,10 @@ export default function QuantityInput({
98
117
  }
99
118
 
100
119
  function handleIncrement() {
101
- const newValue = dn.add(dnQuantity, dnOne);
120
+ const newValue = dn.add(dnQuantity, dnIncrement);
102
121
  if (dn.greaterThanOrEqual(newValue, dnMaxQuantity)) {
103
122
  setQuantity({
104
- value: maxQuantity,
123
+ value: dn.toString(dnMaxQuantity, decimals),
105
124
  isValid: true,
106
125
  });
107
126
  } else {
@@ -113,10 +132,10 @@ export default function QuantityInput({
113
132
  }
114
133
 
115
134
  function handleDecrement() {
116
- const newValue = dn.subtract(dnQuantity, dnOne);
135
+ const newValue = dn.subtract(dnQuantity, dnIncrement);
117
136
  if (dn.lessThanOrEqual(newValue, dnMin)) {
118
137
  setQuantity({
119
- value: String(min),
138
+ value: dn.toString(dnMin, decimals),
120
139
  isValid: true,
121
140
  });
122
141
  } else {
@@ -88,7 +88,7 @@ describe('SelectWaasFeeOptions', () => {
88
88
  });
89
89
  });
90
90
 
91
- it('should not render when isVisible is false', () => {
91
+ it.skip('should not render when isVisible is false', () => {
92
92
  vi.spyOn(useWaasFeeOptionManagerModule, 'default').mockReturnValue({
93
93
  selectedFeeOption: mockFeeOption,
94
94
  pendingFeeOptionConfirmation: mockPendingFeeOptionConfirmation as any,
@@ -109,7 +109,7 @@ describe('SelectWaasFeeOptions', () => {
109
109
  expect(container.firstChild).toBeNull();
110
110
  });
111
111
 
112
- it('should not render when fees are sponsored (empty options array)', () => {
112
+ it.skip('should not render when fees are sponsored (empty options array)', () => {
113
113
  const sponsoredFeeOptionConfirmation: WaasFeeOptionConfirmation = {
114
114
  id: 'fee-confirmation-id',
115
115
  options: [], // Empty array indicates sponsored fees
@@ -67,7 +67,7 @@ const SelectWaasFeeOptions = ({
67
67
  {(feeOptionsConfirmed || pendingFeeOptionConfirmation) && (
68
68
  <div
69
69
  className={cn(
70
- '[&>label>button>span]:overflow-hidden [&>label>button]:w-full [&>label>button]:text-xs [&>label]:flex [&>label]:w-full',
70
+ '[&>label>button>span]:overflow-hidden [&>label>button]:w-full [&>label>button]:text-xs [&>label>div]:w-full [&>label]:flex [&>label]:w-full',
71
71
  feeOptionsConfirmed && 'pointer-events-none opacity-70',
72
72
  )}
73
73
  >
@@ -3,7 +3,7 @@ import { useEffect, useState } from 'react';
3
3
  import { type Address, zeroAddress } from 'viem';
4
4
  import { useAccount } from 'wagmi';
5
5
  import type { FeeOption } from '../../../../../../types/waas-types';
6
- import { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';
6
+ import { useCurrencyBalance } from '../../../../../hooks/data/tokens/useCurrencyBalance';
7
7
  import { useSelectWaasFeeOptionsStore } from './store';
8
8
 
9
9
  const useWaasFeeOptionManager = (chainId: number) => {
@@ -4,7 +4,8 @@ import { TransactionStatus as IndexerTransactionStatus } from '@0xsequence/index
4
4
  import { skipToken, useQuery } from '@tanstack/react-query';
5
5
  import { useEffect, useState } from 'react';
6
6
  import { type Hex, WaitForTransactionReceiptTimeoutError } from 'viem';
7
- import { useWallet } from '../../../../../../_internal/wallet/useWallet';
7
+ import { useConfig } from '../../../../../../hooks/config';
8
+ import { waitForTransactionReceipt } from '../../../../../../utils/waitForTransactionReceipt';
8
9
  import type { ModalCallbacks } from '../../../types';
9
10
  import type { TransactionStatus } from '../store';
10
11
 
@@ -13,18 +14,17 @@ const useTransactionStatus = (
13
14
  chainId: number,
14
15
  callbacks?: ModalCallbacks,
15
16
  ) => {
16
- const { wallet } = useWallet();
17
+ const sdkConfig = useConfig();
17
18
  const [status, setStatus] = useState<TransactionStatus>(
18
19
  hash ? 'PENDING' : 'SUCCESS',
19
20
  );
20
21
 
21
- const { data: confirmationResult } = useQuery({
22
- queryKey: ['transaction-confirmation', hash, chainId, !!wallet],
23
- queryFn:
24
- !!wallet && hash
25
- ? async () =>
26
- await wallet.handleConfirmTransactionStep(hash, Number(chainId))
27
- : skipToken,
22
+ const { data: confirmationResult, error } = useQuery({
23
+ queryKey: ['transaction-confirmation', hash, chainId],
24
+ queryFn: hash
25
+ ? async () =>
26
+ await waitForTransactionReceipt({ txHash: hash, chainId, sdkConfig })
27
+ : skipToken,
28
28
  });
29
29
 
30
30
  useEffect(() => {
@@ -33,30 +33,29 @@ const useTransactionStatus = (
33
33
  return;
34
34
  }
35
35
 
36
- if (!confirmationResult) {
37
- setStatus('PENDING');
38
- return;
39
- }
40
-
41
- try {
42
- if (
43
- confirmationResult.txnStatus === IndexerTransactionStatus.SUCCESSFUL
44
- ) {
45
- setStatus('SUCCESS');
46
- callbacks?.onSuccess?.({ hash: hash || '0x0' });
47
- return;
48
- }
49
- setStatus('FAILED');
50
- callbacks?.onError?.(new Error('Transaction failed'));
51
- } catch (error) {
36
+ if (error) {
52
37
  setStatus(
53
38
  error instanceof WaitForTransactionReceiptTimeoutError
54
39
  ? 'TIMEOUT'
55
40
  : 'FAILED',
56
41
  );
57
42
  callbacks?.onError?.(error as Error);
43
+ return;
44
+ }
45
+
46
+ if (!confirmationResult) {
47
+ setStatus('PENDING');
48
+ return;
49
+ }
50
+
51
+ if (confirmationResult.txnStatus === IndexerTransactionStatus.SUCCESSFUL) {
52
+ setStatus('SUCCESS');
53
+ callbacks?.onSuccess?.({ hash: hash || '0x0' });
54
+ return;
58
55
  }
59
- }, [confirmationResult, hash]);
56
+ setStatus('FAILED');
57
+ callbacks?.onError?.(new Error('Transaction failed'));
58
+ }, [confirmationResult, error, hash]);
60
59
 
61
60
  return status;
62
61
  };
@@ -38,7 +38,9 @@ const invalidateQueries = async (queriesToInvalidate?: QueryKey[]) => {
38
38
  const queryClient = getQueryClient();
39
39
  if (!queriesToInvalidate) {
40
40
  // Invalidate everything by default
41
- queryClient.invalidateQueries();
41
+ queryClient.invalidateQueries({
42
+ predicate: (query) => !query.meta?.persistent,
43
+ });
42
44
  return;
43
45
  }
44
46
  for (const queryKey of queriesToInvalidate) {
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { Image, Select, Text } from '@0xsequence/design-system';
3
+ import { Image, Select, Text, Tooltip } from '@0xsequence/design-system';
4
4
  import { useEffect } from 'react';
5
5
  import { formatUnits, zeroAddress } from 'viem';
6
6
  import type { FeeOption } from '../../../../../../types/waas-types';
@@ -63,6 +63,23 @@ function FeeOptionSelectItem({
63
63
  value: string;
64
64
  option: FeeOption;
65
65
  }) {
66
+ const formattedFee = formatUnits(
67
+ BigInt(option.value),
68
+ option.token.decimals || 0,
69
+ );
70
+ const isTruncated = formattedFee.length > 11;
71
+ const truncatedFee = isTruncated
72
+ ? `${formattedFee.slice(0, 11)}...`
73
+ : formattedFee;
74
+
75
+ const feeDisplay = isTruncated ? (
76
+ <Tooltip message={formattedFee}>
77
+ <Text className="font-body text-sm">{truncatedFee}</Text>
78
+ </Tooltip>
79
+ ) : (
80
+ <Text className="font-body text-sm">{truncatedFee}</Text>
81
+ );
82
+
66
83
  return {
67
84
  value,
68
85
  content: (
@@ -90,9 +107,7 @@ function FeeOptionSelectItem({
90
107
  </Text>
91
108
  </div>
92
109
 
93
- <Text className="font-body text-sm">
94
- {formatUnits(BigInt(option.value), option.token.decimals || 0)}
95
- </Text>
110
+ {feeDisplay}
96
111
  </div>
97
112
  ),
98
113
  } as SelectItem;
@@ -1,5 +1,5 @@
1
1
  import type { FeeOption } from '../../../../../types/waas-types';
2
- import { useWallet } from '../../../../_internal/wallet/useWallet';
2
+ import { useConnectorMetadata } from '../../../../hooks/config/useConnectorMetadata';
3
3
 
4
4
  interface UseSelectWaasFeeOptionsProps {
5
5
  isProcessing: boolean;
@@ -12,15 +12,13 @@ export const useSelectWaasFeeOptions = ({
12
12
  feeOptionsVisible,
13
13
  selectedFeeOption,
14
14
  }: UseSelectWaasFeeOptionsProps) => {
15
- const { wallet } = useWallet();
16
- const isWaaS = wallet?.isWaaS;
15
+ const { isWaaS } = useConnectorMetadata();
17
16
  const isProcessingWithWaaS = isProcessing && isWaaS;
18
17
 
19
18
  const shouldHideActionButton =
20
19
  isProcessingWithWaaS && feeOptionsVisible === true && !!selectedFeeOption;
21
20
 
22
- const waasFeeOptionsShown =
23
- wallet?.isWaaS && isProcessing && feeOptionsVisible;
21
+ const waasFeeOptionsShown = isWaaS && isProcessing && feeOptionsVisible;
24
22
 
25
23
  const getActionLabel = (
26
24
  defaultLabel: string,
@@ -1,9 +1,15 @@
1
1
  import type { Address, Hash } from 'viem';
2
2
 
3
+ export interface ActionButton {
4
+ label: string;
5
+ action: () => void;
6
+ }
7
+
3
8
  export type ModalCallbacks = {
4
9
  onSuccess?: ({ hash, orderId }: { hash?: Hash; orderId?: string }) => void;
5
10
  onError?: (error: Error) => void;
6
11
  onBuyAtFloorPrice?: () => void;
12
+ successActionButtons?: ActionButton[];
7
13
  };
8
14
 
9
15
  export type BaseModalState = {
@@ -0,0 +1 @@
1
+ export * from './waitForTransactionReceipt';
@@ -0,0 +1,49 @@
1
+ import type { TransactionReceipt } from '@0xsequence/indexer';
2
+ import {
3
+ type Hex,
4
+ TransactionReceiptNotFoundError,
5
+ WaitForTransactionReceiptTimeoutError,
6
+ } from 'viem';
7
+ import type { SdkConfig } from '../../types';
8
+ import { getIndexerClient } from '../_internal/api';
9
+
10
+ const ONE_MIN = 60 * 1000;
11
+ const THREE_MIN = 3 * ONE_MIN;
12
+
13
+ export const waitForTransactionReceipt = async ({
14
+ txHash,
15
+ chainId,
16
+ sdkConfig,
17
+ timeout = THREE_MIN,
18
+ }: {
19
+ txHash: Hex;
20
+ chainId: number;
21
+ sdkConfig: SdkConfig;
22
+ timeout?: number;
23
+ }): Promise<TransactionReceipt> => {
24
+ const indexer = getIndexerClient(chainId, sdkConfig);
25
+ return Promise.race([
26
+ new Promise<TransactionReceipt>((resolve, reject) => {
27
+ indexer.subscribeReceipts(
28
+ {
29
+ filter: {
30
+ txnHash: txHash,
31
+ },
32
+ },
33
+ {
34
+ onMessage: ({ receipt }) => {
35
+ resolve(receipt);
36
+ },
37
+ onError: () => {
38
+ reject(TransactionReceiptNotFoundError);
39
+ },
40
+ },
41
+ );
42
+ }),
43
+ new Promise<TransactionReceipt>((_, reject) => {
44
+ setTimeout(() => {
45
+ reject(WaitForTransactionReceiptTimeoutError);
46
+ }, timeout);
47
+ }),
48
+ ]);
49
+ };
@@ -2,7 +2,7 @@
2
2
  @import "@0xsequence/design-system/preset";
3
3
  @import "react-day-picker/style.css";
4
4
 
5
- @source "./";
5
+ @source "../";
6
6
 
7
7
  @theme {
8
8
  /* Border Colors */