@0xsequence/marketplace-sdk 0.9.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 (539) hide show
  1. package/.storybook/ConnectionStatus.tsx +289 -0
  2. package/.storybook/main.ts +82 -0
  3. package/.storybook/preview.tsx +106 -0
  4. package/.storybook/vitest.setup.ts +6 -0
  5. package/CHANGELOG.md +135 -8
  6. package/compile-tailwind.js +54 -0
  7. package/dist/{CalendarIcon-DbQ7Vxcw.js → BellIcon-Cb9YEUzJ.js} +27 -27
  8. package/dist/BellIcon-Cb9YEUzJ.js.map +1 -0
  9. package/dist/CollectibleCard-CYyWzk6u.d.ts +8 -0
  10. package/dist/{_internal-BgWcRIak.js → _internal-DslqcNC1.js} +1 -1
  11. package/dist/{_internal-BgWcRIak.js.map → _internal-DslqcNC1.js.map} +1 -1
  12. package/dist/{alien_swap-B_76IMma.js → alien_swap-DJ98gZQp.js} +1 -1
  13. package/dist/{alien_swap-B_76IMma.js.map → alien_swap-DJ98gZQp.js.map} +1 -1
  14. package/dist/{api-DTIan01C.js → api-BmEQfSQa.js} +17 -14
  15. package/dist/api-BmEQfSQa.js.map +1 -0
  16. package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-n1PcCCZ0.js} +1 -1
  17. package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-n1PcCCZ0.js.map} +1 -1
  18. package/dist/{aura-Cye_TuHj.js → aura-Bevk_YkS.js} +1 -1
  19. package/dist/{aura-Cye_TuHj.js.map → aura-Bevk_YkS.js.map} +1 -1
  20. package/dist/{blur-DWDMyMpK.js → blur-B5sHErx5.js} +1 -1
  21. package/dist/{blur-DWDMyMpK.js.map → blur-B5sHErx5.js.map} +1 -1
  22. package/dist/builder-api-BFuZNOaN.js.map +1 -1
  23. package/dist/builder.gen-B9wR2nvF.js.map +1 -1
  24. package/dist/{coinbase-ByA_XRB0.js → coinbase-D30W-lxA.js} +1 -1
  25. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-D30W-lxA.js.map} +1 -1
  26. package/dist/contracts-DPHFT2TA.js +97 -0
  27. package/dist/contracts-DPHFT2TA.js.map +1 -0
  28. package/dist/{wagmi-CDzEQbfk.js → create-config-6uynwTeb.js} +20 -10
  29. package/dist/create-config-6uynwTeb.js.map +1 -0
  30. package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-lLSrnkbb.d.ts} +554 -166
  31. package/dist/{element-b77CyXIZ.js → element-C2NJexro.js} +1 -1
  32. package/dist/{element-b77CyXIZ.js.map → element-C2NJexro.js.map} +1 -1
  33. package/dist/filters-B8XS4tFH.d.ts +31 -0
  34. package/dist/{foundation-DbOrKP9Y.js → foundation-QgY1lvUj.js} +1 -1
  35. package/dist/{foundation-DbOrKP9Y.js.map → foundation-QgY1lvUj.js.map} +1 -1
  36. package/dist/index-BGJXqdg6.d.ts +131 -0
  37. package/dist/index-BuY_NKSX.d.ts +222 -0
  38. package/dist/{index-21LE7OhL.d.ts → index-ByW08-Z7.d.ts} +6 -3
  39. package/dist/index-C7xKVIr4.d.ts +447 -0
  40. package/dist/index-CIkpYltz.d.ts +61 -0
  41. package/dist/index-CQnGIGb5.d.ts +346 -0
  42. package/dist/{index-DaE5ZNHb.d.ts → index-CY5UEX4h.d.ts} +5 -5
  43. package/dist/{index-DXMfTZ1F.d.ts → index-ChSKFOMx.d.ts} +1 -1
  44. package/dist/{index-D5v5iluA.d.ts → index-CtF7EE2z.d.ts} +1 -1
  45. package/dist/index-D2HohSwO.d.ts +293 -0
  46. package/dist/index-D71J5Ghd.d.ts +813 -0
  47. package/dist/{index-ByznONYE.d.ts → index-DNU9xoGK.d.ts} +28 -64
  48. package/dist/index-DX0Vm8HY.d.ts +2541 -0
  49. package/dist/index-DonXiSg2.d.ts +902 -0
  50. package/dist/index-Dpyp7fQz.d.ts +298 -0
  51. package/dist/index-PSPpUxCE.d.ts +18 -0
  52. package/dist/{index-BL9RUSEK.d.ts → index-QxxS6f9r.d.ts} +1 -1
  53. package/dist/index-ThUIs-Sy.d.ts +306 -0
  54. package/dist/index.d.ts +8 -10
  55. package/dist/index.js +12 -9
  56. package/dist/listCollectiblesPaginated--AgXjajA.d.ts +166 -0
  57. package/dist/listCollections-Bbzbz7qW.d.ts +624 -0
  58. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-CMVPny4v.js} +1 -1
  59. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-CMVPny4v.js.map} +1 -1
  60. package/dist/lowestListing-BQHfQpfg.d.ts +144 -0
  61. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-IrWp2ZXk.js} +1 -1
  62. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-IrWp2ZXk.js.map} +1 -1
  63. package/dist/{manifold-8y8J2sjT.js → manifold-DeOE-p2G.js} +1 -1
  64. package/dist/{manifold-8y8J2sjT.js.map → manifold-DeOE-p2G.js.map} +1 -1
  65. package/dist/marketCurrencies-CmOMCCOr.d.ts +122 -0
  66. package/dist/{marketplace-nwnZv9Cb.js → marketplace-B5Z8G03R.js} +1 -1
  67. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-B5Z8G03R.js.map} +1 -1
  68. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-D8t86gsW.js} +21 -21
  69. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-D8t86gsW.js.map} +1 -1
  70. package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-JzNYpM0U.js} +3 -3
  71. package/dist/marketplace.gen-JzNYpM0U.js.map +1 -0
  72. package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-sNh-MA5M.js} +15 -4
  73. package/dist/marketplaceConfig-sNh-MA5M.js.map +1 -0
  74. package/dist/{mintify-LA68TzWg.js → mintify-DG3GrljJ.js} +1 -1
  75. package/dist/{mintify-LA68TzWg.js.map → mintify-DG3GrljJ.js.map} +1 -1
  76. package/dist/network-DnBEe1Ur.js +15 -0
  77. package/dist/network-DnBEe1Ur.js.map +1 -0
  78. package/dist/{nftx-D3Tc8nzd.js → nftx-B3LH-ZYM.js} +1 -1
  79. package/dist/{nftx-D3Tc8nzd.js.map → nftx-B3LH-ZYM.js.map} +1 -1
  80. package/dist/{okx-hbqg6oIJ.js → okx-CRFLrT3Z.js} +1 -1
  81. package/dist/{okx-hbqg6oIJ.js.map → okx-CRFLrT3Z.js.map} +1 -1
  82. package/dist/{open-sea-BccuK8-t.js → open-sea-cOpfl366.js} +1 -1
  83. package/dist/{open-sea-BccuK8-t.js.map → open-sea-cOpfl366.js.map} +1 -1
  84. package/dist/primary-sale-CLjXRrDj.js +3048 -0
  85. package/dist/primary-sale-CLjXRrDj.js.map +1 -0
  86. package/dist/queries-BYT4GJw3.js +1478 -0
  87. package/dist/queries-BYT4GJw3.js.map +1 -0
  88. package/dist/query-BTe7Wkrs.d.ts +31 -0
  89. package/dist/{rarible-BgTwwj9g.js → rarible-guwUx4cn.js} +1 -1
  90. package/dist/{rarible-BgTwwj9g.js.map → rarible-guwUx4cn.js.map} +1 -1
  91. package/dist/react/_internal/api/index.d.ts +2 -4
  92. package/dist/react/_internal/api/index.js +5 -4
  93. package/dist/react/_internal/databeat/index.d.ts +2 -73
  94. package/dist/react/_internal/databeat/index.js +21 -18
  95. package/dist/react/_internal/index.d.ts +2 -7
  96. package/dist/react/_internal/index.js +8 -6
  97. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  98. package/dist/react/_internal/wagmi/index.js +4 -3
  99. package/dist/react/hooks/config/index.d.ts +9 -0
  100. package/dist/react/hooks/config/index.js +26 -0
  101. package/dist/react/hooks/contracts/index.d.ts +7 -0
  102. package/dist/react/hooks/contracts/index.js +16 -0
  103. package/dist/react/hooks/data/collectibles/index.d.ts +5 -0
  104. package/dist/react/hooks/data/collectibles/index.js +26 -0
  105. package/dist/react/hooks/data/collections/index.d.ts +11 -0
  106. package/dist/react/hooks/data/collections/index.js +26 -0
  107. package/dist/react/hooks/data/index.d.ts +29 -0
  108. package/dist/react/hooks/data/index.js +26 -0
  109. package/dist/react/hooks/data/inventory/index.d.ts +29 -0
  110. package/dist/react/hooks/data/inventory/index.js +26 -0
  111. package/dist/react/hooks/data/market/index.d.ts +12 -0
  112. package/dist/react/hooks/data/market/index.js +26 -0
  113. package/dist/react/hooks/data/orders/index.d.ts +11 -0
  114. package/dist/react/hooks/data/orders/index.js +26 -0
  115. package/dist/react/hooks/data/primary-sales/index.d.ts +29 -0
  116. package/dist/react/hooks/data/primary-sales/index.js +26 -0
  117. package/dist/react/hooks/data/tokens/index.d.ts +5 -0
  118. package/dist/react/hooks/data/tokens/index.js +26 -0
  119. package/dist/react/hooks/index.d.ts +29 -18
  120. package/dist/react/hooks/index.js +22 -19
  121. package/dist/react/hooks/transactions/index.d.ts +3 -0
  122. package/dist/react/hooks/transactions/index.js +26 -0
  123. package/dist/react/hooks/ui/index.d.ts +5 -0
  124. package/dist/react/hooks/ui/index.js +26 -0
  125. package/dist/react/hooks/utils/index.d.ts +29 -0
  126. package/dist/react/hooks/utils/index.js +26 -0
  127. package/dist/react/index.d.ts +29 -18
  128. package/dist/react/index.js +22 -19
  129. package/dist/react/queries/index.d.ts +16 -8
  130. package/dist/react/queries/index.js +17 -15
  131. package/dist/react/ssr/index.d.ts +7 -9
  132. package/dist/react/ssr/index.js +8 -6
  133. package/dist/react/ssr/index.js.map +1 -1
  134. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +4 -8
  135. package/dist/react/ui/components/marketplace-collectible-card/index.js +21 -18
  136. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  137. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +8 -6
  138. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  139. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  140. package/dist/react/ui/icons/index.js +11 -9
  141. package/dist/react/ui/index.d.ts +4 -8
  142. package/dist/react/ui/index.js +21 -18
  143. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +1 -25
  144. package/dist/react/ui/modals/_internal/components/actionModal/index.js +22 -19
  145. package/dist/react/utils/index.d.ts +19 -0
  146. package/dist/react/utils/index.js +9 -0
  147. package/dist/{react-BbHBl6gg.css → react-CbqXKOpt.css} +1 -1
  148. package/dist/{react-BbHBl6gg.css.map → react-CbqXKOpt.css.map} +1 -1
  149. package/dist/{react-DAIicQPT.js → react-Ceq8mamy.js} +11203 -7647
  150. package/dist/react-Ceq8mamy.js.map +1 -0
  151. package/dist/{sequence-Do3kzb4J.js → sequence-Dt2Xo7Fa.js} +1 -1
  152. package/dist/{sequence-Do3kzb4J.js.map → sequence-Dt2Xo7Fa.js.map} +1 -1
  153. package/dist/{index.css → styles/index.css} +679 -127
  154. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-CGoARONs.js} +1 -1
  155. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-CGoARONs.js.map} +1 -1
  156. package/dist/{super-rare-eCm1SE6O.js → super-rare-NeQtZjcn.js} +1 -1
  157. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-NeQtZjcn.js.map} +1 -1
  158. package/dist/{token-Da4TdyUk.js → token-D9gZVqbX.js} +1 -1
  159. package/dist/{token-Da4TdyUk.js.map → token-D9gZVqbX.js.map} +1 -1
  160. package/dist/tokenSupplies-DXtkRYNO.d.ts +147 -0
  161. package/dist/{transaction-CcVViHEL.js → transaction-CC2KxNF6.js} +2 -17
  162. package/dist/transaction-CC2KxNF6.js.map +1 -0
  163. package/dist/types/index.d.ts +2 -3
  164. package/dist/types/index.js +2 -2
  165. package/dist/{CollectibleCard-C8Ae64Ab.d.ts → types-BlCa0TVE.d.ts} +9 -11
  166. package/dist/{types-DwWE6xOF.js → types-G2PWxiJR.js} +1 -1
  167. package/dist/{types-DwWE6xOF.js.map → types-G2PWxiJR.js.map} +1 -1
  168. package/dist/utils/abi/index.d.ts +5 -5
  169. package/dist/utils/abi/index.js +5 -5
  170. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  171. package/dist/utils/abi/marketplace/index.js +1 -1
  172. package/dist/utils/abi/primary-sale/index.d.ts +2 -2
  173. package/dist/utils/abi/primary-sale/index.js +2 -2
  174. package/dist/utils/abi/token/index.d.ts +1 -1
  175. package/dist/utils/abi/token/index.js +1 -1
  176. package/dist/utils/index.d.ts +7 -8
  177. package/dist/utils/index.js +11 -9
  178. package/dist/{utils-CW2NA5KG.js → utils-CKJd-CRf.js} +4 -11
  179. package/dist/utils-CKJd-CRf.js.map +1 -0
  180. package/dist/{utils-BPYfgDSL.js → utils-wquIhK6T.js} +5 -6
  181. package/dist/utils-wquIhK6T.js.map +1 -0
  182. package/dist/waitForTransactionReceipt-DZxAuR9N.js +27 -0
  183. package/dist/waitForTransactionReceipt-DZxAuR9N.js.map +1 -0
  184. package/dist/{x2y2-DD17tT91.js → x2y2-CQdg24VP.js} +1 -1
  185. package/dist/{x2y2-DD17tT91.js.map → x2y2-CQdg24VP.js.map} +1 -1
  186. package/dist/{zora-BpSG9UzS.js → zora-DdEydy4L.js} +1 -1
  187. package/dist/{zora-BpSG9UzS.js.map → zora-DdEydy4L.js.map} +1 -1
  188. package/eslint.config.mjs +4 -0
  189. package/package.json +55 -39
  190. package/postcss.config.mjs +73 -0
  191. package/public/mockServiceWorker.js +344 -0
  192. package/src/index.ts +1 -0
  193. package/src/react/_internal/api/__mocks__/builder.msw.ts +6 -0
  194. package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
  195. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  196. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
  197. package/src/react/_internal/api/__mocks__/metadata.msw.ts +12 -1
  198. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  199. package/src/react/_internal/api/builder.gen.ts +11 -7
  200. package/src/react/_internal/api/laos-api.ts +3 -0
  201. package/src/react/_internal/api/marketplace.gen.ts +5 -3
  202. package/src/react/_internal/api/query-keys.ts +12 -4
  203. package/src/react/_internal/api/services.ts +2 -14
  204. package/src/react/_internal/databeat/index.ts +15 -14
  205. package/src/react/_internal/databeat/types.ts +23 -0
  206. package/src/react/_internal/databeat/utils.ts +26 -0
  207. package/src/react/_internal/query-meta.ts +3 -0
  208. package/src/react/_internal/utils.ts +6 -4
  209. package/src/react/_internal/wagmi/create-config.ts +29 -14
  210. package/src/react/_internal/wagmi/get-connectors.ts +1 -1
  211. package/src/react/hooks/{__tests__ → config}/__snapshots__/useMarketplaceConfig.test.tsx.snap +6 -0
  212. package/src/react/hooks/config/index.ts +3 -0
  213. package/src/react/hooks/{useConfig.tsx → config/useConfig.tsx} +2 -2
  214. package/src/react/hooks/config/useConnectorMetadata.tsx +16 -0
  215. package/src/react/hooks/{__tests__ → config}/useMarketplaceConfig.test.tsx +1 -1
  216. package/src/react/hooks/{useMarketplaceConfig.tsx → config/useMarketplaceConfig.tsx} +2 -2
  217. package/src/react/hooks/contracts/index.ts +1 -0
  218. package/src/react/hooks/contracts/useSalesContractABI.ts +174 -0
  219. package/src/react/hooks/data/collectibles/index.ts +6 -0
  220. package/src/react/hooks/data/collectibles/useBalanceOfCollectible.laos.test.tsx +367 -0
  221. package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.test.tsx +2 -2
  222. package/src/react/hooks/{useBalanceOfCollectible.tsx → data/collectibles/useBalanceOfCollectible.tsx} +4 -4
  223. package/src/react/hooks/{__tests__ → data/collectibles}/useCollectible.test.tsx +3 -3
  224. package/src/react/hooks/{useCollectible.tsx → data/collectibles/useCollectible.tsx} +3 -3
  225. package/src/react/hooks/{__tests__ → data/collectibles}/useCountOfCollectables.test.tsx +4 -4
  226. package/src/react/hooks/{useCountOfCollectables.tsx → data/collectibles/useCountOfCollectables.tsx} +3 -3
  227. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibleActivities.test.tsx +3 -3
  228. package/src/react/hooks/{useListCollectibleActivities.tsx → data/collectibles/useListCollectibleActivities.tsx} +3 -3
  229. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibles.test.tsx +5 -6
  230. package/src/react/hooks/{useListCollectibles.tsx → data/collectibles/useListCollectibles.tsx} +3 -3
  231. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectiblesPaginated.test.tsx +4 -4
  232. package/src/react/hooks/{useListCollectiblesPaginated.tsx → data/collectibles/useListCollectiblesPaginated.tsx} +3 -3
  233. package/src/react/hooks/{__tests__ → data/collections}/__snapshots__/useListCollections.test.tsx.snap +10 -0
  234. package/src/react/hooks/data/collections/index.ts +6 -0
  235. package/src/react/hooks/{__tests__ → data/collections}/useCollection.test.tsx +2 -3
  236. package/src/react/hooks/{useCollection.tsx → data/collections/useCollection.tsx} +3 -3
  237. package/src/react/hooks/{__tests__ → data/collections}/useCollectionBalanceDetails.test.tsx +19 -2
  238. package/src/react/hooks/data/collections/useCollectionBalanceDetails.tsx +106 -0
  239. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetails.test.tsx +2 -2
  240. package/src/react/hooks/{useCollectionDetails.ts → data/collections/useCollectionDetails.ts} +3 -3
  241. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetailsPolling.test.tsx +14 -6
  242. package/src/react/hooks/{useCollectionDetailsPolling.tsx → data/collections/useCollectionDetailsPolling.tsx} +5 -9
  243. package/src/react/hooks/{__tests__ → data/collections}/useListCollectionActivities.test.tsx +5 -5
  244. package/src/react/hooks/{useListCollectionActivities.tsx → data/collections/useListCollectionActivities.tsx} +3 -3
  245. package/src/react/hooks/{__tests__ → data/collections}/useListCollections.test.tsx +5 -4
  246. package/src/react/hooks/data/collections/useListCollections.tsx +80 -0
  247. package/src/react/hooks/data/index.ts +6 -0
  248. package/src/react/hooks/data/inventory/index.ts +1 -0
  249. package/src/react/hooks/{__tests__ → data/inventory}/useInventory.test.tsx +4 -4
  250. package/src/react/hooks/{useInventory.tsx → data/inventory/useInventory.tsx} +7 -4
  251. package/src/react/hooks/data/market/index.ts +3 -0
  252. package/src/react/hooks/{__tests__ → data/market}/useCurrency.test.tsx +4 -4
  253. package/src/react/hooks/{useCurrency.tsx → data/market/useCurrency.tsx} +3 -3
  254. package/src/react/hooks/{__tests__ → data/market}/useListMarketCardData.test.tsx +10 -14
  255. package/src/react/hooks/{useListMarketCardData.tsx → data/market/useListMarketCardData.tsx} +8 -7
  256. package/src/react/hooks/{__tests__ → data/market}/useMarketCurrencies.test.tsx +5 -5
  257. package/src/react/hooks/{useMarketCurrencies.tsx → data/market/useMarketCurrencies.tsx} +3 -3
  258. package/src/react/hooks/data/orders/index.ts +7 -0
  259. package/src/react/hooks/{__tests__ → data/orders}/useCountListingsForCollectible.test.tsx +2 -2
  260. package/src/react/hooks/{useCountListingsForCollectible.tsx → data/orders/useCountListingsForCollectible.tsx} +3 -3
  261. package/src/react/hooks/{__tests__ → data/orders}/useCountOffersForCollectible.test.tsx +2 -2
  262. package/src/react/hooks/{useCountOffersForCollectible.tsx → data/orders/useCountOffersForCollectible.tsx} +3 -3
  263. package/src/react/hooks/{__tests__ → data/orders}/useFloorOrder.test.tsx +3 -3
  264. package/src/react/hooks/{useFloorOrder.tsx → data/orders/useFloorOrder.tsx} +3 -3
  265. package/src/react/hooks/{__tests__ → data/orders}/useHighestOffer.test.tsx +3 -3
  266. package/src/react/hooks/{useHighestOffer.tsx → data/orders/useHighestOffer.tsx} +3 -3
  267. package/src/react/hooks/{__tests__ → data/orders}/useListListingsForCollectible.test.tsx +6 -6
  268. package/src/react/hooks/{useListListingsForCollectible.tsx → data/orders/useListListingsForCollectible.tsx} +3 -3
  269. package/src/react/hooks/{__tests__ → data/orders}/useListOffersForCollectible.test.tsx +5 -5
  270. package/src/react/hooks/{useListOffersForCollectible.tsx → data/orders/useListOffersForCollectible.tsx} +4 -4
  271. package/src/react/hooks/{__tests__ → data/orders}/useLowestListing.test.tsx +5 -5
  272. package/src/react/hooks/{useLowestListing.tsx → data/orders/useLowestListing.tsx} +3 -3
  273. package/src/react/hooks/data/primary-sales/index.ts +6 -0
  274. package/src/react/hooks/{useCountOfPrimarySaleItems.tsx → data/primary-sales/useCountOfPrimarySaleItems.tsx} +2 -2
  275. package/src/react/hooks/data/primary-sales/useErc721SalesData.tsx +184 -0
  276. package/src/react/hooks/data/primary-sales/useGetCountOfPrimarySaleItems.tsx +48 -0
  277. package/src/react/hooks/{useList1155ShopCardData.tsx → data/primary-sales/useList1155ShopCardData.tsx} +17 -8
  278. package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +183 -0
  279. package/src/react/hooks/data/primary-sales/useListPrimarySaleItems.tsx +66 -0
  280. package/src/react/hooks/data/tokens/index.ts +5 -0
  281. package/src/react/hooks/{__tests__ → data/tokens}/useCurrencyBalance.test.tsx +9 -5
  282. package/src/react/hooks/data/tokens/useCurrencyBalance.tsx +137 -0
  283. package/src/react/hooks/data/tokens/useGetTokenRanges.test.tsx +111 -0
  284. package/src/react/hooks/data/tokens/useGetTokenRanges.tsx +94 -0
  285. package/src/react/hooks/{__tests__ → data/tokens}/useListBalances.test.tsx +2 -2
  286. package/src/react/hooks/{useListBalances.tsx → data/tokens/useListBalances.tsx} +5 -5
  287. package/src/react/hooks/data/tokens/useListTokenMetadata.test.tsx +137 -0
  288. package/src/react/hooks/{useListTokenMetadata.tsx → data/tokens/useListTokenMetadata.tsx} +3 -3
  289. package/src/react/hooks/data/tokens/useSearchTokenMetadata.test.tsx +284 -0
  290. package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +186 -0
  291. package/src/react/hooks/data/tokens/useTokenSupplies.ts +81 -0
  292. package/src/react/hooks/index.ts +18 -50
  293. package/src/react/hooks/transactions/index.ts +9 -0
  294. package/src/react/hooks/{__tests__ → transactions}/useCancelOrder.test.tsx +53 -85
  295. package/src/react/hooks/{useCancelOrder.tsx → transactions/useCancelOrder.tsx} +4 -4
  296. package/src/react/hooks/{__tests__/useCancelTransactionSteps.test.tsx → transactions/useCancelTransactionSteps.test.tsx.bak} +3 -52
  297. package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +193 -0
  298. package/src/react/hooks/{__tests__ → transactions}/useGenerateCancelTransaction.test.tsx +2 -2
  299. package/src/react/hooks/{useGenerateCancelTransaction.tsx → transactions/useGenerateCancelTransaction.tsx} +5 -5
  300. package/src/react/hooks/{__tests__ → transactions}/useGenerateListingTransaction.test.tsx +2 -2
  301. package/src/react/hooks/{useGenerateListingTransaction.tsx → transactions/useGenerateListingTransaction.tsx} +5 -5
  302. package/src/react/hooks/{__tests__ → transactions}/useGenerateOfferTransaction.test.tsx +7 -45
  303. package/src/react/hooks/{useGenerateOfferTransaction.tsx → transactions/useGenerateOfferTransaction.tsx} +7 -7
  304. package/src/react/hooks/{__tests__ → transactions}/useGenerateSellTransaction.test.tsx +3 -7
  305. package/src/react/hooks/{useGenerateSellTransaction.tsx → transactions/useGenerateSellTransaction.tsx} +4 -4
  306. package/src/react/hooks/transactions/useOrderSteps.tsx +189 -0
  307. package/src/react/hooks/transactions/useProcessStep.test.tsx +272 -0
  308. package/src/react/hooks/transactions/useProcessStep.ts +95 -0
  309. package/src/react/hooks/transactions/useTransferTokens.test.tsx +469 -0
  310. package/src/react/hooks/{useTransferTokens.tsx → transactions/useTransferTokens.tsx} +5 -5
  311. package/src/react/hooks/ui/index.ts +3 -0
  312. package/src/react/hooks/{useFilterState.tsx → ui/useFilterState.tsx} +1 -1
  313. package/src/react/hooks/{__tests__ → ui}/useFilters.test.tsx +2 -3
  314. package/src/react/hooks/ui/useFilters.tsx +178 -0
  315. package/src/react/hooks/ui/useOpenConnectModal.tsx +9 -0
  316. package/src/react/hooks/util/optimisticCancelUpdates.ts +1 -0
  317. package/src/react/hooks/utils/index.ts +9 -0
  318. package/src/react/hooks/{__tests__ → utils}/useAutoSelectFeeOption.test.tsx +7 -3
  319. package/src/react/hooks/{useAutoSelectFeeOption.tsx → utils/useAutoSelectFeeOption.tsx} +2 -2
  320. package/src/react/hooks/utils/useCheckoutOptions.test.tsx +162 -0
  321. package/src/react/hooks/utils/useCheckoutOptions.tsx +98 -0
  322. package/src/react/hooks/{__tests__ → utils}/useCheckoutOptionsSalesContract.test.tsx +42 -61
  323. package/src/react/hooks/utils/useCheckoutOptionsSalesContract.tsx +108 -0
  324. package/src/react/hooks/{__tests__ → utils}/useComparePrices.test.tsx +1 -1
  325. package/src/react/hooks/utils/useComparePrices.tsx +102 -0
  326. package/src/react/hooks/{__tests__ → utils}/useConvertPriceToUSD.test.tsx +4 -4
  327. package/src/react/hooks/utils/useConvertPriceToUSD.tsx +96 -0
  328. package/src/react/hooks/utils/useEnsureCorrectChain.ts +74 -0
  329. package/src/react/hooks/{__tests__ → utils}/useRoyalty.test.tsx +1 -1
  330. package/src/react/hooks/{useRoyalty.tsx → utils/useRoyalty.tsx} +3 -3
  331. package/src/react/hooks/utils/useSwitchChainWithModal.ts +38 -0
  332. package/src/react/index.ts +1 -2
  333. package/src/react/providers/index.tsx +110 -0
  334. package/src/react/providers/modal-provider.tsx +43 -0
  335. package/src/react/{__tests__ → providers}/provider.test.tsx +5 -4
  336. package/src/react/providers/shadow-root.tsx +63 -0
  337. package/src/react/providers/theme-provider.tsx +29 -0
  338. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  339. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  340. package/src/react/queries/balanceOfCollectible.ts +7 -4
  341. package/src/react/queries/checkoutOptions.ts +85 -0
  342. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  343. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  344. package/src/react/queries/comparePrices.ts +108 -0
  345. package/src/react/queries/convertPriceToUSD.ts +92 -0
  346. package/src/react/{hooks/useFilters.tsx → queries/filters.ts} +51 -48
  347. package/src/react/queries/getTokenRanges.ts +62 -0
  348. package/src/react/queries/index.ts +22 -0
  349. package/src/react/queries/inventory.ts +6 -0
  350. package/src/react/queries/listBalances.ts +4 -3
  351. package/src/react/queries/listCollections.ts +7 -3
  352. package/src/react/queries/listTokenMetadata.ts +2 -2
  353. package/src/react/queries/marketplaceConfig.ts +11 -2
  354. package/src/react/queries/primarySaleItems.ts +80 -0
  355. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  356. package/src/react/queries/searchTokenMetadata.ts +87 -0
  357. package/src/react/queries/tokenSupplies.ts +101 -0
  358. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +6 -0
  359. package/src/react/ssr/__tests__/create-ssr-client.test.ts +1 -1
  360. package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +296 -0
  361. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  362. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +56 -18
  363. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +4 -11
  364. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +5 -12
  365. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +32 -16
  366. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +7 -7
  367. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +4 -1
  368. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  369. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +15 -11
  370. package/src/react/ui/components/_internals/action-button/store.ts +44 -34
  371. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  372. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  373. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
  374. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  375. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +4 -3
  376. package/src/react/ui/components/marketplace-collectible-card/types.ts +7 -5
  377. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  378. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +1 -1
  379. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +11 -4
  380. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  381. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  382. package/src/react/ui/components/media/Media.tsx +24 -19
  383. package/src/react/ui/components/media/types.ts +6 -0
  384. package/src/react/ui/index.ts +1 -1
  385. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +25 -25
  386. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +8 -2
  387. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +1 -1
  388. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
  389. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
  390. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +5 -5
  391. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +8 -8
  392. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +44 -19
  393. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
  394. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +4 -4
  395. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +18 -30
  396. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +43 -27
  397. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +13 -2
  398. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +7 -7
  399. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +17 -3
  400. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +19 -8
  401. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +5 -9
  402. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +23 -15
  403. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  404. package/src/react/ui/modals/BuyModal/store.ts +28 -0
  405. package/src/react/ui/modals/CreateListingModal/Modal.tsx +39 -16
  406. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +3 -24
  407. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +5 -9
  408. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +43 -83
  409. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  410. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +34 -17
  411. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +88 -62
  412. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +9 -7
  413. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +2 -2
  414. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +47 -84
  415. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  416. package/src/react/ui/modals/SellModal/Modal.tsx +18 -17
  417. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +8 -30
  418. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +7 -7
  419. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +39 -65
  420. package/src/react/ui/modals/SellModal/store.ts +3 -3
  421. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  422. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  423. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +412 -0
  424. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
  425. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +54 -44
  426. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  427. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
  428. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +22 -13
  429. package/src/react/ui/modals/TransferModal/index.tsx +36 -53
  430. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  431. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  432. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +116 -136
  433. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +15 -44
  434. package/src/react/ui/modals/_internal/components/actionModal/index.ts +0 -1
  435. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  436. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  437. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +14 -5
  438. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +24 -18
  439. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  440. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +8 -8
  441. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  442. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +42 -27
  443. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +164 -65
  444. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +174 -20
  445. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +341 -42
  446. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  447. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  448. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +30 -14
  449. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  450. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  451. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  452. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
  453. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +25 -26
  454. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +35 -21
  455. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
  456. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +62 -48
  457. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +3 -5
  458. package/src/react/ui/modals/_internal/types.ts +8 -2
  459. package/src/react/utils/index.ts +1 -0
  460. package/src/react/utils/waitForTransactionReceipt.ts +49 -0
  461. package/src/{index.css → styles/index.css} +6 -5
  462. package/src/styles/styles.ts +3275 -0
  463. package/src/types/sdk-config.ts +8 -1
  464. package/src/utils/_internal/error/transaction.ts +0 -10
  465. package/src/utils/abi/primary-sale/index.ts +4 -2
  466. package/src/utils/abi/primary-sale/{sequence-1155-sales-contract.ts → sequence-1155-sales-contract-v0.ts} +67 -58
  467. package/src/utils/abi/primary-sale/sequence-1155-sales-contract-v1.ts +546 -0
  468. package/src/utils/abi/primary-sale/{sequence-721-sales-contract.ts → sequence-721-sales-contract-v0.ts} +1 -1
  469. package/src/utils/abi/primary-sale/sequence-721-sales-contract-v1.ts +394 -0
  470. package/src/utils/network.ts +15 -0
  471. package/test/const.ts +1 -1
  472. package/test/globalSetup.ts +39 -11
  473. package/test/handlers.ts +465 -0
  474. package/test/index.ts +1 -0
  475. package/test/server-setup.ts +23 -0
  476. package/test/setup.ts +1 -1
  477. package/test/test-utils.tsx +46 -36
  478. package/tsconfig.json +1 -1
  479. package/tsdown.config.ts +12 -7
  480. package/vitest.shims.d.ts +2 -0
  481. package/vitest.storybook.config.js +33 -0
  482. package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
  483. package/dist/api-DTIan01C.js.map +0 -1
  484. package/dist/builder-api-C_zj5mr3.d.ts +0 -12
  485. package/dist/index-BQsgAvtX.d.ts +0 -2938
  486. package/dist/index-BUVWziLP.d.ts +0 -60
  487. package/dist/index-CLy8y5hm.d.ts +0 -1057
  488. package/dist/index-COt10OgI.d.ts +0 -24
  489. package/dist/index-DPNWNa7t.d.ts +0 -414
  490. package/dist/index-DsfCs3-x.d.ts +0 -122
  491. package/dist/index-DvpBZgor.d.ts +0 -1
  492. package/dist/index-dUb6wb4Y.d.ts +0 -22
  493. package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
  494. package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
  495. package/dist/primary-sale-C55ALnfQ.js +0 -1264
  496. package/dist/primary-sale-C55ALnfQ.js.map +0 -1
  497. package/dist/queries-CUU65uYZ.js +0 -599
  498. package/dist/queries-CUU65uYZ.js.map +0 -1
  499. package/dist/react/hooks/options/index.d.ts +0 -4
  500. package/dist/react/hooks/options/index.js +0 -11
  501. package/dist/react-DAIicQPT.js.map +0 -1
  502. package/dist/transaction-CcVViHEL.js.map +0 -1
  503. package/dist/utils-BPYfgDSL.js.map +0 -1
  504. package/dist/utils-CW2NA5KG.js.map +0 -1
  505. package/dist/wagmi-CDzEQbfk.js.map +0 -1
  506. package/src/react/_internal/wallet/__tests__/wallet.test.ts +0 -416
  507. package/src/react/_internal/wallet/useWallet.ts +0 -52
  508. package/src/react/_internal/wallet/wallet.ts +0 -313
  509. package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
  510. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +0 -111
  511. package/src/react/hooks/options/index.ts +0 -1
  512. package/src/react/hooks/useCancelTransactionSteps.tsx +0 -249
  513. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +0 -67
  514. package/src/react/hooks/useCollectionBalanceDetails.tsx +0 -79
  515. package/src/react/hooks/useComparePrices.tsx +0 -96
  516. package/src/react/hooks/useConvertPriceToUSD.tsx +0 -82
  517. package/src/react/hooks/useCurrencyBalance.tsx +0 -51
  518. package/src/react/hooks/useERC721SaleMintedTokens.tsx +0 -67
  519. package/src/react/hooks/useGetTokenRanges.tsx +0 -31
  520. package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
  521. package/src/react/hooks/useList1155SaleSupplies.tsx +0 -62
  522. package/src/react/hooks/useList721ShopCardData.tsx +0 -160
  523. package/src/react/hooks/useListCollections.tsx +0 -80
  524. package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
  525. package/src/react/hooks/useListShopCardData.tsx +0 -70
  526. package/src/react/hooks/useShopCollectibleSaleData.tsx +0 -349
  527. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +0 -134
  528. package/src/react/provider.tsx +0 -43
  529. package/src/react/queries/getTokenSuppliesMap.ts +0 -77
  530. package/src/react/ui/modals/TransferModal/_store.ts +0 -66
  531. package/src/react/ui/modals/_internal/components/actionModal/store.ts +0 -57
  532. package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
  533. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  534. package/src/react/ui/modals/modal-provider.tsx +0 -25
  535. package/test/mocks/wallet.ts +0 -63
  536. /package/dist/{abi-BKyRjVcZ.js → abi-Wr_aTZFi.js} +0 -0
  537. /package/dist/{index-C39K_8SG.d.ts → index-q7f-WDBS.d.ts} +0 -0
  538. /package/dist/{options-B4QN7Xou.js → wagmi-BhP3mdhP.js} +0 -0
  539. /package/src/react/hooks/{useGetReceiptFromHash.tsx → utils/useGetReceiptFromHash.tsx} +0 -0
@@ -0,0 +1,642 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { expect, userEvent, within } from 'storybook/test';
3
+ import { Media } from './Media';
4
+
5
+ const meta: Meta<typeof Media> = {
6
+ title: 'Components/Media',
7
+ component: Media,
8
+ parameters: {
9
+ layout: 'centered',
10
+ docs: {
11
+ description: {
12
+ component: `
13
+ The Media component is a versatile asset display component that automatically detects and renders different media types including images, videos, HTML content, and 3D models. It provides fallback handling, loading states, and error recovery.
14
+
15
+ ## Features
16
+ - **Multi-format support**: Images (JPG, PNG, SVG, WebP), Videos (MP4, WebM), HTML/iframes, 3D models (GLTF, GLB)
17
+ - **Automatic content type detection**: Based on file extensions and content headers
18
+ - **Fallback handling**: Multiple asset sources with automatic fallback on errors
19
+ - **Loading states**: Built-in skeleton loading indicators
20
+ - **Error recovery**: Graceful degradation with placeholder content
21
+ - **Custom fallback content**: Support for custom fallback components
22
+ - **Responsive design**: Aspect-ratio aware with flexible sizing
23
+ `,
24
+ },
25
+ },
26
+ },
27
+ argTypes: {
28
+ name: {
29
+ control: 'text',
30
+ description: 'Alt text and title for the media content',
31
+ },
32
+ assets: {
33
+ control: 'object',
34
+ description: 'Array of asset URLs with automatic fallback support',
35
+ },
36
+ assetSrcPrefixUrl: {
37
+ control: 'text',
38
+ description: 'Optional prefix URL for asset sources (e.g., CDN base URL)',
39
+ },
40
+ containerClassName: {
41
+ control: 'text',
42
+ description: 'Additional CSS classes for styling',
43
+ },
44
+ isLoading: {
45
+ control: 'boolean',
46
+ description: 'Force loading state display',
47
+ },
48
+ shouldListenForLoad: {
49
+ control: 'boolean',
50
+ description: 'Whether to listen for load/error events',
51
+ },
52
+ fallbackContent: {
53
+ control: false,
54
+ description: 'Custom React component to display when all assets fail',
55
+ },
56
+ },
57
+ decorators: [
58
+ (Story) => (
59
+ <div style={{ width: '300px', height: '300px', padding: '1rem' }}>
60
+ <Story />
61
+ </div>
62
+ ),
63
+ ],
64
+ };
65
+
66
+ export default meta;
67
+ type Story = StoryObj<typeof Media>;
68
+
69
+ // Mock asset URLs for different media types
70
+ const MOCK_ASSETS = {
71
+ images: {
72
+ jpg: 'https://picsum.photos/400/400?random=1',
73
+ png: 'https://picsum.photos/400/400?random=2',
74
+ svg: 'https://picsum.photos/400/400?random=3',
75
+ webp: 'https://picsum.photos/400/400?random=4',
76
+ },
77
+ videos: {
78
+ mp4: 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',
79
+ webm: 'https://www.sample-videos.com/video321/webm/720/big_buck_bunny_720p_1mb.webm',
80
+ },
81
+ html: {
82
+ iframe: 'https://www.youtube.com/embed/dQw4w9WgXcQ',
83
+ interactive: 'https://codepen.io/team/codepen/embed/PNaGbb',
84
+ },
85
+ models: {
86
+ gltf: 'https://modelviewer.dev/shared-assets/models/Astronaut.gltf',
87
+ glb: 'https://modelviewer.dev/shared-assets/models/shishkebab.glb',
88
+ },
89
+ invalid: {
90
+ broken: 'https://invalid-url-that-will-fail.com/image.jpg',
91
+ notFound: 'https://httpstat.us/404',
92
+ },
93
+ };
94
+
95
+ // ========================================
96
+ // VISIBLE STORIES - Shown in Storybook UI
97
+ // ========================================
98
+
99
+ // Basic example stories that demonstrate core functionality
100
+ export const Image: Story = {
101
+ args: {
102
+ name: 'Sample Image',
103
+ assets: [MOCK_ASSETS.images.jpg],
104
+ containerClassName: 'rounded-lg border',
105
+ },
106
+ };
107
+
108
+ export const Video: Story = {
109
+ args: {
110
+ name: 'Sample Video',
111
+ assets: [
112
+ 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',
113
+ ],
114
+ containerClassName: 'rounded-lg border',
115
+ },
116
+ };
117
+
118
+ export const LoadingState: Story = {
119
+ args: {
120
+ name: 'Loading State',
121
+ assets: [MOCK_ASSETS.images.jpg],
122
+ isLoading: true,
123
+ containerClassName: 'rounded-lg border',
124
+ },
125
+ };
126
+
127
+ export const ErrorHandling: Story = {
128
+ args: {
129
+ name: 'Error Handling with Fallback',
130
+ assets: [
131
+ MOCK_ASSETS.invalid.broken,
132
+ MOCK_ASSETS.invalid.notFound,
133
+ MOCK_ASSETS.images.jpg, // This should work
134
+ ],
135
+ containerClassName: 'rounded-lg border',
136
+ },
137
+ };
138
+
139
+ export const CustomFallback: Story = {
140
+ args: {
141
+ name: 'Custom Fallback Content',
142
+ assets: [MOCK_ASSETS.invalid.broken],
143
+ containerClassName: 'rounded-lg border',
144
+ fallbackContent: (
145
+ <div className="flex flex-col items-center justify-center p-4 text-center">
146
+ <div className="mb-2 text-4xl">🎨</div>
147
+ <div className="font-medium text-sm">Custom Artwork</div>
148
+ <div className="mt-1 text-gray-500 text-xs">No image available</div>
149
+ </div>
150
+ ),
151
+ },
152
+ };
153
+
154
+ // Showcase story that displays multiple media types - visible but not tested
155
+ export const MediaShowcase: Story = {
156
+ tags: ['!test'],
157
+ render: () => (
158
+ <div className="grid grid-cols-2 gap-4 p-4">
159
+ <div className="space-y-2">
160
+ <h3 className="font-medium text-sm">Image (JPG)</h3>
161
+ <Media
162
+ name="Grid Image"
163
+ assets={[MOCK_ASSETS.images.jpg]}
164
+ containerClassName="aspect-square rounded border"
165
+ />
166
+ </div>
167
+ <div className="space-y-2">
168
+ <h3 className="font-medium text-sm">Video (MP4)</h3>
169
+ <Media
170
+ name="Grid Video"
171
+ assets={[
172
+ 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',
173
+ ]}
174
+ containerClassName="aspect-square rounded border"
175
+ />
176
+ </div>
177
+ <div className="space-y-2">
178
+ <h3 className="font-medium text-sm">Loading State</h3>
179
+ <Media
180
+ name="Grid Loading"
181
+ assets={[MOCK_ASSETS.images.jpg]}
182
+ isLoading={true}
183
+ containerClassName="aspect-square rounded border"
184
+ />
185
+ </div>
186
+ <div className="space-y-2">
187
+ <h3 className="font-medium text-sm">Fallback</h3>
188
+ <Media
189
+ name="Grid Fallback"
190
+ assets={[MOCK_ASSETS.invalid.broken]}
191
+ containerClassName="aspect-square rounded border"
192
+ />
193
+ </div>
194
+ </div>
195
+ ),
196
+ decorators: [
197
+ (Story) => (
198
+ <div style={{ width: '600px', padding: '1rem' }}>
199
+ <Story />
200
+ </div>
201
+ ),
202
+ ],
203
+ };
204
+
205
+ // ========================================
206
+ // TEST STORIES - Hidden from UI but tested
207
+ // ========================================
208
+
209
+ // Image format tests
210
+ export const TestImagePNG: Story = {
211
+ tags: ['!dev', '!autodocs'],
212
+ args: {
213
+ name: 'Test PNG Image',
214
+ assets: [MOCK_ASSETS.images.png],
215
+ containerClassName: 'rounded-lg border',
216
+ },
217
+ };
218
+
219
+ export const TestImageSVG: Story = {
220
+ tags: ['!dev', '!autodocs'],
221
+ args: {
222
+ name: 'Test SVG Image',
223
+ assets: [MOCK_ASSETS.images.svg],
224
+ containerClassName: 'rounded-lg border',
225
+ },
226
+ };
227
+
228
+ export const TestImageWebP: Story = {
229
+ tags: ['!dev', '!autodocs'],
230
+ args: {
231
+ name: 'Test WebP Image',
232
+ assets: [MOCK_ASSETS.images.webp],
233
+ containerClassName: 'rounded-lg border',
234
+ },
235
+ };
236
+
237
+ // Video format tests
238
+ export const TestVideoWebM: Story = {
239
+ tags: ['!dev', '!autodocs'],
240
+ args: {
241
+ name: 'Test WebM Video',
242
+ assets: [
243
+ 'https://www.sample-videos.com/video321/webm/720/big_buck_bunny_720p_1mb.webm',
244
+ ],
245
+ containerClassName: 'rounded-lg border',
246
+ },
247
+ };
248
+
249
+ // HTML/iframe tests
250
+ export const TestHTMLIframe: Story = {
251
+ tags: ['!dev', '!autodocs'],
252
+ args: {
253
+ name: 'Test YouTube Embed',
254
+ assets: ['https://www.youtube.com/embed/dQw4w9WgXcQ.html'],
255
+ containerClassName: 'rounded-lg border',
256
+ },
257
+ };
258
+
259
+ export const TestInteractiveHTML: Story = {
260
+ tags: ['!dev', '!autodocs'],
261
+ args: {
262
+ name: 'Test CodePen Interactive',
263
+ assets: ['https://codepen.io/team/codepen/embed/PNaGbb.html'],
264
+ containerClassName: 'rounded-lg border',
265
+ },
266
+ };
267
+
268
+ // 3D model tests
269
+ export const TestModel3DGLTF: Story = {
270
+ tags: ['!dev', '!autodocs'],
271
+ args: {
272
+ name: 'Test Astronaut 3D Model (GLTF)',
273
+ assets: ['https://modelviewer.dev/shared-assets/models/Astronaut.gltf'],
274
+ containerClassName: 'rounded-lg border',
275
+ },
276
+ };
277
+
278
+ export const TestModel3DGLB: Story = {
279
+ tags: ['!dev', '!autodocs'],
280
+ args: {
281
+ name: 'Test Shishkebab 3D Model (GLB)',
282
+ assets: ['https://modelviewer.dev/shared-assets/models/shishkebab.glb'],
283
+ containerClassName: 'rounded-lg border',
284
+ },
285
+ };
286
+
287
+ // Edge case tests
288
+ export const TestEmptyAssets: Story = {
289
+ tags: ['!dev', '!autodocs'],
290
+ args: {
291
+ name: 'Test Empty Assets Array',
292
+ assets: [],
293
+ containerClassName: 'rounded-lg border',
294
+ },
295
+ };
296
+
297
+ export const TestUndefinedAssets: Story = {
298
+ tags: ['!dev', '!autodocs'],
299
+ args: {
300
+ name: 'Test Undefined Assets',
301
+ assets: [undefined, undefined, undefined],
302
+ containerClassName: 'rounded-lg border',
303
+ },
304
+ };
305
+
306
+ export const TestAllAssetsFail: Story = {
307
+ tags: ['!dev', '!autodocs'],
308
+ args: {
309
+ name: 'Test All Assets Fail',
310
+ assets: [
311
+ MOCK_ASSETS.invalid.broken,
312
+ MOCK_ASSETS.invalid.notFound,
313
+ 'https://another-invalid-url.com/image.jpg',
314
+ ],
315
+ containerClassName: 'rounded-lg border',
316
+ },
317
+ };
318
+
319
+ export const TestLoadingWithoutListening: Story = {
320
+ tags: ['!dev', '!autodocs'],
321
+ args: {
322
+ name: 'Test Loading Without Event Listening',
323
+ assets: [MOCK_ASSETS.images.jpg],
324
+ shouldListenForLoad: false,
325
+ containerClassName: 'rounded-lg border',
326
+ },
327
+ };
328
+
329
+ export const TestWithAssetPrefix: Story = {
330
+ tags: ['!dev', '!autodocs'],
331
+ args: {
332
+ name: 'Test With Asset Prefix URL',
333
+ assets: ['400/400?random=5'],
334
+ assetSrcPrefixUrl: 'https://picsum.photos/',
335
+ containerClassName: 'rounded-lg border',
336
+ },
337
+ };
338
+
339
+ // Size variation tests
340
+ export const TestSmallSize: Story = {
341
+ tags: ['!dev', '!autodocs'],
342
+ args: {
343
+ name: 'Test Small Media',
344
+ assets: [MOCK_ASSETS.images.jpg],
345
+ containerClassName: 'rounded-lg border',
346
+ },
347
+ decorators: [
348
+ (Story) => (
349
+ <div style={{ width: '150px', height: '150px', padding: '1rem' }}>
350
+ <Story />
351
+ </div>
352
+ ),
353
+ ],
354
+ };
355
+
356
+ export const TestLargeSize: Story = {
357
+ tags: ['!dev', '!autodocs'],
358
+ args: {
359
+ name: 'Test Large Media',
360
+ assets: [MOCK_ASSETS.images.jpg],
361
+ containerClassName: 'rounded-lg border',
362
+ },
363
+ decorators: [
364
+ (Story) => (
365
+ <div style={{ width: '600px', height: '600px', padding: '1rem' }}>
366
+ <Story />
367
+ </div>
368
+ ),
369
+ ],
370
+ };
371
+
372
+ export const TestRectangularAspect: Story = {
373
+ tags: ['!dev', '!autodocs'],
374
+ args: {
375
+ name: 'Test Rectangular Aspect Ratio',
376
+ assets: [MOCK_ASSETS.images.jpg],
377
+ containerClassName: 'rounded-lg border aspect-video',
378
+ },
379
+ decorators: [
380
+ (Story) => (
381
+ <div style={{ width: '400px', padding: '1rem' }}>
382
+ <Story />
383
+ </div>
384
+ ),
385
+ ],
386
+ };
387
+
388
+ // Special character tests
389
+ export const TestVeryLongAssetURL: Story = {
390
+ tags: ['!dev', '!autodocs'],
391
+ args: {
392
+ name: 'Test Very Long Asset URL',
393
+ assets: [
394
+ `${MOCK_ASSETS.images.jpg}?very-long-query-parameter-that-might-cause-issues-with-url-handling-and-should-be-tested-for-edge-cases=true&another-param=value&yet-another=test`,
395
+ ],
396
+ containerClassName: 'rounded-lg border',
397
+ },
398
+ };
399
+
400
+ export const TestSpecialCharactersInName: Story = {
401
+ tags: ['!dev', '!autodocs'],
402
+ args: {
403
+ name: 'Test Special Characters: !@#$%^&*()_+-=[]{}|;:,.<>?',
404
+ assets: [MOCK_ASSETS.images.jpg],
405
+ containerClassName: 'rounded-lg border',
406
+ },
407
+ };
408
+
409
+ export const TestUnicodeCharactersInName: Story = {
410
+ tags: ['!dev', '!autodocs'],
411
+ args: {
412
+ name: 'Test 🎨 Unicode Art 🖼 中文 العربية 🌟',
413
+ assets: [MOCK_ASSETS.images.jpg],
414
+ containerClassName: 'rounded-lg border',
415
+ },
416
+ };
417
+
418
+ // ========================================
419
+ // INTERACTION TESTS - Hidden but with play functions
420
+ // ========================================
421
+
422
+ export const InteractionTest: Story = {
423
+ tags: ['!dev', '!autodocs'],
424
+ args: {
425
+ name: 'Media Interaction Test',
426
+ assets: [MOCK_ASSETS.images.jpg],
427
+ containerClassName:
428
+ 'rounded-lg border cursor-pointer hover:shadow-lg transition-shadow',
429
+ },
430
+ play: async ({ canvasElement, step }) => {
431
+ const canvas = within(canvasElement);
432
+
433
+ await step('Verify media renders correctly', async () => {
434
+ const mediaContainer = canvas.getByRole('img', {
435
+ name: /Media Interaction Test/i,
436
+ });
437
+ await expect(mediaContainer).toBeInTheDocument();
438
+ });
439
+
440
+ await step('Test hover interaction', async () => {
441
+ const mediaContainer = canvas.getByRole('img', {
442
+ name: /Media Interaction Test/i,
443
+ });
444
+ await userEvent.hover(mediaContainer);
445
+ // Verify hover effects are applied
446
+ await expect(mediaContainer).toBeInTheDocument();
447
+ });
448
+
449
+ await step('Test click interaction', async () => {
450
+ const mediaContainer = canvas.getByRole('img', {
451
+ name: /Media Interaction Test/i,
452
+ });
453
+ await userEvent.click(mediaContainer);
454
+ // Verify click is handled
455
+ await expect(mediaContainer).toBeInTheDocument();
456
+ });
457
+ },
458
+ };
459
+
460
+ export const LoadingStateTest: Story = {
461
+ tags: ['!dev', '!autodocs'],
462
+ args: {
463
+ name: 'Loading State Test',
464
+ assets: [MOCK_ASSETS.images.jpg],
465
+ isLoading: true,
466
+ containerClassName: 'rounded-lg border',
467
+ },
468
+ play: async ({ canvasElement, step }) => {
469
+ const canvas = within(canvasElement);
470
+
471
+ await step('Verify loading skeleton is displayed', async () => {
472
+ const skeleton = canvas.getByTestId('media');
473
+ await expect(skeleton).toBeInTheDocument();
474
+ await expect(skeleton).toHaveClass('animate-shimmer');
475
+ });
476
+ },
477
+ };
478
+
479
+ export const FallbackTest: Story = {
480
+ tags: ['!dev', '!autodocs'],
481
+ args: {
482
+ name: 'Fallback Test',
483
+ assets: [MOCK_ASSETS.invalid.broken, MOCK_ASSETS.invalid.notFound],
484
+ containerClassName: 'rounded-lg border',
485
+ },
486
+ play: async ({ canvasElement, step }) => {
487
+ const canvas = within(canvasElement);
488
+
489
+ await step('Verify fallback image is displayed', async () => {
490
+ // Wait for fallback to load
491
+ await new Promise((resolve) => setTimeout(resolve, 2000));
492
+
493
+ const fallbackImage = canvas.getByRole('img', { name: /Fallback Test/i });
494
+ await expect(fallbackImage).toBeInTheDocument();
495
+ });
496
+ },
497
+ };
498
+
499
+ export const AccessibilityTest: Story = {
500
+ tags: ['!dev', '!autodocs'],
501
+ args: {
502
+ name: 'Accessibility Test Media',
503
+ assets: [MOCK_ASSETS.images.jpg],
504
+ containerClassName: 'rounded-lg border',
505
+ },
506
+ play: async ({ canvasElement, step }) => {
507
+ const canvas = within(canvasElement);
508
+
509
+ await step('Verify proper alt text', async () => {
510
+ const image = canvas.getByRole('img', {
511
+ name: /Accessibility Test Media/i,
512
+ });
513
+ await expect(image).toBeInTheDocument();
514
+ await expect(image).toHaveAttribute('alt', 'Accessibility Test Media');
515
+ });
516
+
517
+ await step('Verify keyboard navigation', async () => {
518
+ const image = canvas.getByRole('img', {
519
+ name: /Accessibility Test Media/i,
520
+ });
521
+ image.focus();
522
+ await expect(image).toHaveFocus();
523
+ });
524
+ },
525
+ };
526
+
527
+ export const PerformanceTest: Story = {
528
+ tags: ['!dev', '!autodocs'],
529
+ args: {
530
+ name: 'Performance Test',
531
+ assets: [MOCK_ASSETS.images.jpg],
532
+ containerClassName: 'rounded-lg border',
533
+ },
534
+ play: async ({ canvasElement, step }) => {
535
+ const canvas = within(canvasElement);
536
+
537
+ await step('Measure render performance', async () => {
538
+ const startTime = performance.now();
539
+
540
+ const image = canvas.getByRole('img', { name: /Performance Test/i });
541
+ await expect(image).toBeInTheDocument();
542
+
543
+ const endTime = performance.now();
544
+ const renderTime = endTime - startTime;
545
+
546
+ console.log(`Media render time: ${renderTime}ms`);
547
+
548
+ // Verify reasonable render time (less than 100ms)
549
+ expect(renderTime).toBeLessThan(100);
550
+ });
551
+ },
552
+ };
553
+
554
+ // ========================================
555
+ // VIEWPORT TESTS - Hidden from UI
556
+ // ========================================
557
+
558
+ export const TestMobileViewport: Story = {
559
+ tags: ['!dev', '!autodocs'],
560
+ args: {
561
+ name: 'Test Mobile Viewport',
562
+ assets: [MOCK_ASSETS.images.jpg],
563
+ containerClassName: 'rounded-lg border',
564
+ },
565
+ parameters: {
566
+ viewport: {
567
+ defaultViewport: 'mobile1',
568
+ },
569
+ },
570
+ };
571
+
572
+ export const TestTabletViewport: Story = {
573
+ tags: ['!dev', '!autodocs'],
574
+ args: {
575
+ name: 'Test Tablet Viewport',
576
+ assets: [MOCK_ASSETS.images.jpg],
577
+ containerClassName: 'rounded-lg border',
578
+ },
579
+ parameters: {
580
+ viewport: {
581
+ defaultViewport: 'tablet',
582
+ },
583
+ },
584
+ };
585
+
586
+ // ========================================
587
+ // VISUAL REGRESSION TESTS - Hidden from UI
588
+ // ========================================
589
+
590
+ export const VisualRegressionImage: Story = {
591
+ tags: ['!dev', '!autodocs'],
592
+ args: {
593
+ name: 'Visual Regression - Image',
594
+ assets: [MOCK_ASSETS.images.jpg],
595
+ containerClassName: 'rounded-lg border',
596
+ },
597
+ parameters: {
598
+ chromatic: {
599
+ modes: {
600
+ desktop: { viewport: { width: 1200, height: 800 } },
601
+ mobile: { viewport: { width: 375, height: 667 } },
602
+ },
603
+ },
604
+ },
605
+ };
606
+
607
+ export const VisualRegressionVideo: Story = {
608
+ tags: ['!dev', '!autodocs'],
609
+ args: {
610
+ name: 'Visual Regression - Video',
611
+ assets: [
612
+ 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',
613
+ ],
614
+ containerClassName: 'rounded-lg border',
615
+ },
616
+ parameters: {
617
+ chromatic: {
618
+ modes: {
619
+ desktop: { viewport: { width: 1200, height: 800 } },
620
+ mobile: { viewport: { width: 375, height: 667 } },
621
+ },
622
+ },
623
+ },
624
+ };
625
+
626
+ export const VisualRegressionLoading: Story = {
627
+ tags: ['!dev', '!autodocs'],
628
+ args: {
629
+ name: 'Visual Regression - Loading',
630
+ assets: [MOCK_ASSETS.images.jpg],
631
+ isLoading: true,
632
+ containerClassName: 'rounded-lg border',
633
+ },
634
+ parameters: {
635
+ chromatic: {
636
+ modes: {
637
+ desktop: { viewport: { width: 1200, height: 800 } },
638
+ mobile: { viewport: { width: 375, height: 667 } },
639
+ },
640
+ },
641
+ },
642
+ };