@0xsequence/marketplace-sdk 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/.storybook/main.ts +63 -0
  2. package/.storybook/preview.ts +24 -0
  3. package/.storybook/vitest.setup.ts +6 -0
  4. package/CHANGELOG.md +77 -8
  5. package/dist/{CalendarIcon-DbQ7Vxcw.js → CalendarIcon-CqsuAuCm.js} +4 -51
  6. package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
  7. package/dist/{CollectibleCard-C8Ae64Ab.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +8 -7
  8. package/dist/InfoIcon-v0w_Lu7t.js +53 -0
  9. package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
  10. package/dist/{_internal-BgWcRIak.js → _internal-C75gOSNo.js} +2 -10
  11. package/dist/_internal-C75gOSNo.js.map +1 -0
  12. package/dist/actionModal-CMUeVsFX.js +116 -0
  13. package/dist/actionModal-CMUeVsFX.js.map +1 -0
  14. package/dist/{alien_swap-B_76IMma.js → alien_swap-CYv6YlOF.js} +1 -1
  15. package/dist/{alien_swap-B_76IMma.js.map → alien_swap-CYv6YlOF.js.map} +1 -1
  16. package/dist/{api-DTIan01C.js → api-BiMGqWdz.js} +17 -34
  17. package/dist/api-BiMGqWdz.js.map +1 -0
  18. package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-Bzn5baeH.js} +1 -1
  19. package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-Bzn5baeH.js.map} +1 -1
  20. package/dist/{aura-Cye_TuHj.js → aura-DzIWh8WT.js} +1 -1
  21. package/dist/{aura-Cye_TuHj.js.map → aura-DzIWh8WT.js.map} +1 -1
  22. package/dist/base-DqaJPvfN.js +22 -0
  23. package/dist/base-DqaJPvfN.js.map +1 -0
  24. package/dist/{blur-DWDMyMpK.js → blur-DSH-Cbpj.js} +1 -1
  25. package/dist/{blur-DWDMyMpK.js.map → blur-DSH-Cbpj.js.map} +1 -1
  26. package/dist/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
  27. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
  28. package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-DKJ-F0jc.d.ts} +402 -41
  29. package/dist/{wagmi-CDzEQbfk.js → create-config-fQ-jbJD1.js} +20 -10
  30. package/dist/create-config-fQ-jbJD1.js.map +1 -0
  31. package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
  32. package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
  33. package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
  34. package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
  35. package/dist/get-provider-CYYHfrlg.js +10 -0
  36. package/dist/get-provider-CYYHfrlg.js.map +1 -0
  37. package/dist/get-query-client-D19vvfJo.js +23 -0
  38. package/dist/get-query-client-D19vvfJo.js.map +1 -0
  39. package/dist/hooks-4pxIbLbM.js +4044 -0
  40. package/dist/hooks-4pxIbLbM.js.map +1 -0
  41. package/dist/{index-BL9RUSEK.d.ts → index-136YrWDH.d.ts} +1 -1
  42. package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
  43. package/dist/index-BKBin-rq.d.ts +979 -0
  44. package/dist/{index-BQsgAvtX.d.ts → index-BUWB_RXp.d.ts} +776 -570
  45. package/dist/{index-21LE7OhL.d.ts → index-BhVFc2rX.d.ts} +6 -3
  46. package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
  47. package/dist/{index-ByznONYE.d.ts → index-CKrYP7ot.d.ts} +20 -48
  48. package/dist/{index-DaE5ZNHb.d.ts → index-CUwMH7Ht.d.ts} +5 -5
  49. package/dist/{index-CLy8y5hm.d.ts → index-Cu70Lw-w.d.ts} +1 -1
  50. package/dist/index.css +414 -1
  51. package/dist/index.d.ts +8 -10
  52. package/dist/index.js +13 -9
  53. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
  54. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
  55. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
  56. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
  57. package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
  58. package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
  59. package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
  60. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
  61. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
  62. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
  63. package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-HpnpL5xU.js} +3 -3
  64. package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
  65. package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-GQTTmihy.js} +3 -3
  66. package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
  67. package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
  68. package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
  69. package/dist/network-CGD0oKtS.js +15 -0
  70. package/dist/network-CGD0oKtS.js.map +1 -0
  71. package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
  72. package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
  73. package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
  74. package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
  75. package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
  76. package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
  77. package/dist/{primary-sale-C55ALnfQ.js → primary-sale-CmWxSfFQ.js} +1 -1
  78. package/dist/{primary-sale-C55ALnfQ.js.map → primary-sale-CmWxSfFQ.js.map} +1 -1
  79. package/dist/provider-DPGUA10G.js +125 -0
  80. package/dist/provider-DPGUA10G.js.map +1 -0
  81. package/dist/{queries-CUU65uYZ.js → queries-Ce_2othB.js} +165 -7
  82. package/dist/queries-Ce_2othB.js.map +1 -0
  83. package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
  84. package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
  85. package/dist/react/_internal/api/index.d.ts +2 -4
  86. package/dist/react/_internal/api/index.js +7 -4
  87. package/dist/react/_internal/databeat/index.d.ts +2 -73
  88. package/dist/react/_internal/databeat/index.js +4 -21
  89. package/dist/react/_internal/index.d.ts +2 -7
  90. package/dist/react/_internal/index.js +11 -6
  91. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  92. package/dist/react/_internal/wagmi/index.js +5 -3
  93. package/dist/react/hooks/index.d.ts +12 -17
  94. package/dist/react/hooks/index.js +23 -19
  95. package/dist/react/hooks/options/index.d.ts +2 -3
  96. package/dist/react/hooks/options/index.js +12 -7
  97. package/dist/react/index.d.ts +12 -17
  98. package/dist/react/index.js +28 -19
  99. package/dist/react/queries/index.d.ts +9 -8
  100. package/dist/react/queries/index.js +20 -15
  101. package/dist/react/ssr/index.d.ts +7 -9
  102. package/dist/react/ssr/index.js +11 -6
  103. package/dist/react/ssr/index.js.map +1 -1
  104. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -8
  105. package/dist/react/ui/components/marketplace-collectible-card/index.js +27 -18
  106. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  107. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +11 -6
  108. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  109. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  110. package/dist/react/ui/icons/index.js +13 -9
  111. package/dist/react/ui/index.d.ts +3 -8
  112. package/dist/react/ui/index.js +27 -18
  113. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +2 -2
  114. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -18
  115. package/dist/{react-DAIicQPT.js → react-DP0M2Wfm.js} +799 -4306
  116. package/dist/react-DP0M2Wfm.js.map +1 -0
  117. package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
  118. package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
  119. package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
  120. package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
  121. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
  122. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
  123. package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
  124. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
  125. package/dist/{token-Da4TdyUk.js → token-CHSBPYVG.js} +1 -1
  126. package/dist/{token-Da4TdyUk.js.map → token-CHSBPYVG.js.map} +1 -1
  127. package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
  128. package/dist/transaction-CnctdNzS.js.map +1 -0
  129. package/dist/types/index.d.ts +2 -3
  130. package/dist/types/index.js +2 -2
  131. package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
  132. package/dist/{types-DwWE6xOF.js.map → types-Yw2ywj6j.js.map} +1 -1
  133. package/dist/utils/abi/index.d.ts +4 -4
  134. package/dist/utils/abi/index.js +4 -4
  135. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  136. package/dist/utils/abi/marketplace/index.js +1 -1
  137. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  138. package/dist/utils/abi/primary-sale/index.js +1 -1
  139. package/dist/utils/abi/token/index.d.ts +1 -1
  140. package/dist/utils/abi/token/index.js +1 -1
  141. package/dist/utils/index.d.ts +7 -8
  142. package/dist/utils/index.js +12 -9
  143. package/dist/{utils-CW2NA5KG.js → utils-9RXDgcBl.js} +4 -11
  144. package/dist/utils-9RXDgcBl.js.map +1 -0
  145. package/dist/{utils-BPYfgDSL.js → utils-DjVJ9tov.js} +5 -6
  146. package/dist/utils-DjVJ9tov.js.map +1 -0
  147. package/dist/wagmi-Do_KW5ke.js +0 -0
  148. package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
  149. package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
  150. package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
  151. package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
  152. package/eslint.config.mjs +4 -0
  153. package/package.json +27 -14
  154. package/postcss.config.mjs +6 -0
  155. package/src/index.css +5 -4
  156. package/src/index.ts +1 -0
  157. package/src/react/__tests__/provider.test.tsx +4 -3
  158. package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
  159. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  160. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
  161. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  162. package/src/react/_internal/api/laos-api.ts +3 -0
  163. package/src/react/_internal/api/marketplace.gen.ts +5 -3
  164. package/src/react/_internal/api/query-keys.ts +12 -4
  165. package/src/react/_internal/api/services.ts +2 -14
  166. package/src/react/_internal/databeat/index.ts +15 -14
  167. package/src/react/_internal/databeat/types.ts +22 -0
  168. package/src/react/_internal/databeat/utils.ts +26 -0
  169. package/src/react/_internal/utils.ts +4 -4
  170. package/src/react/_internal/wagmi/create-config.ts +28 -13
  171. package/src/react/_internal/wallet/wallet.ts +4 -4
  172. package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
  173. package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
  174. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
  175. package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +17 -0
  176. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +11 -3
  177. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +3 -3
  178. package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
  179. package/src/react/hooks/__tests__/useFilters.test.tsx +2 -2
  180. package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
  181. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +83 -57
  182. package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
  183. package/src/react/hooks/index.ts +3 -1
  184. package/src/react/hooks/useCheckoutOptions.tsx +96 -0
  185. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
  186. package/src/react/hooks/useCollectionBalanceDetails.tsx +95 -68
  187. package/src/react/hooks/useCollectionDetailsPolling.tsx +3 -7
  188. package/src/react/hooks/useComparePrices.tsx +90 -82
  189. package/src/react/hooks/useConvertPriceToUSD.tsx +85 -71
  190. package/src/react/hooks/useCurrencyBalance.tsx +132 -46
  191. package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
  192. package/src/react/hooks/useFilters.tsx +154 -111
  193. package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
  194. package/src/react/hooks/useGetTokenRanges.tsx +83 -22
  195. package/src/react/hooks/useList1155ShopCardData.tsx +2 -0
  196. package/src/react/hooks/useList721ShopCardData.tsx +12 -7
  197. package/src/react/hooks/useListCollections.tsx +25 -25
  198. package/src/react/hooks/useListMarketCardData.tsx +2 -1
  199. package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
  200. package/src/react/hooks/useListTokenMetadata.ts +71 -0
  201. package/src/react/hooks/useOpenConnectModal.tsx +9 -0
  202. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
  203. package/src/react/hooks/useTokenSupplies.ts +81 -0
  204. package/src/react/hooks/useTransferTokens.tsx +2 -2
  205. package/src/react/provider.tsx +73 -9
  206. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  207. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  208. package/src/react/queries/balanceOfCollectible.ts +7 -4
  209. package/src/react/queries/checkoutOptions.ts +85 -0
  210. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  211. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  212. package/src/react/queries/comparePrices.ts +108 -0
  213. package/src/react/queries/convertPriceToUSD.ts +92 -0
  214. package/src/react/queries/filters.ts +138 -0
  215. package/src/react/queries/getTokenRanges.ts +62 -0
  216. package/src/react/queries/index.ts +3 -0
  217. package/src/react/queries/inventory.ts +6 -0
  218. package/src/react/queries/listBalances.ts +4 -3
  219. package/src/react/queries/listCollections.ts +7 -3
  220. package/src/react/queries/listTokenMetadata.ts +2 -2
  221. package/src/react/queries/marketplaceConfig.ts +1 -1
  222. package/src/react/queries/primarySaleItems.ts +85 -0
  223. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  224. package/src/react/queries/tokenSupplies.ts +93 -0
  225. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  226. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
  227. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
  228. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
  229. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  230. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +13 -8
  231. package/src/react/ui/components/_internals/action-button/store.ts +44 -34
  232. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  233. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  234. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
  235. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  236. package/src/react/ui/components/marketplace-collectible-card/types.ts +4 -3
  237. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  238. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +5 -1
  239. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  240. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  241. package/src/react/ui/components/media/Media.tsx +24 -19
  242. package/src/react/ui/components/media/types.ts +6 -0
  243. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
  244. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +6 -0
  245. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
  246. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
  247. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +15 -8
  248. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
  249. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
  250. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +2 -2
  251. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
  252. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
  253. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +7 -0
  254. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  255. package/src/react/ui/modals/BuyModal/store.ts +26 -0
  256. package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
  257. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  258. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +30 -13
  259. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  260. package/src/react/ui/modals/SellModal/Modal.tsx +11 -8
  261. package/src/react/ui/modals/SellModal/store.ts +3 -3
  262. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  263. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  264. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
  265. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
  266. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
  267. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  268. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
  269. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
  270. package/src/react/ui/modals/TransferModal/index.tsx +28 -31
  271. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  272. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  273. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  274. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  275. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +5 -2
  276. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -17
  277. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  278. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
  279. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  280. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
  281. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
  282. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +155 -20
  283. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +339 -40
  284. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  285. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  286. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -13
  287. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  288. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  289. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  290. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
  291. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
  292. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
  293. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +43 -44
  294. package/src/react/ui/modals/_internal/types.ts +2 -2
  295. package/src/types/sdk-config.ts +6 -1
  296. package/src/utils/network.ts +15 -0
  297. package/test/test-utils.tsx +2 -0
  298. package/vitest.shims.d.ts +2 -0
  299. package/vitest.storybook.config.js +33 -0
  300. package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
  301. package/dist/_internal-BgWcRIak.js.map +0 -1
  302. package/dist/api-DTIan01C.js.map +0 -1
  303. package/dist/builder-api-C_zj5mr3.d.ts +0 -12
  304. package/dist/index-BUVWziLP.d.ts +0 -60
  305. package/dist/index-COt10OgI.d.ts +0 -24
  306. package/dist/index-DPNWNa7t.d.ts +0 -414
  307. package/dist/index-DsfCs3-x.d.ts +0 -122
  308. package/dist/index-dUb6wb4Y.d.ts +0 -22
  309. package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
  310. package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
  311. package/dist/queries-CUU65uYZ.js.map +0 -1
  312. package/dist/react-DAIicQPT.js.map +0 -1
  313. package/dist/transaction-CcVViHEL.js.map +0 -1
  314. package/dist/utils-BPYfgDSL.js.map +0 -1
  315. package/dist/utils-CW2NA5KG.js.map +0 -1
  316. package/dist/wagmi-CDzEQbfk.js.map +0 -1
  317. package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
  318. package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
  319. package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
  320. package/src/react/queries/getTokenSuppliesMap.ts +0 -77
  321. package/src/react/ui/modals/TransferModal/_store.ts +0 -66
  322. package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
  323. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  324. /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
  325. /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
  326. /package/dist/{options-B4QN7Xou.js → options-BBBR8u_4.js} +0 -0
@@ -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
+ };