@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.
- package/.storybook/main.ts +63 -0
- package/.storybook/preview.ts +24 -0
- package/.storybook/vitest.setup.ts +6 -0
- package/CHANGELOG.md +77 -8
- package/dist/{CalendarIcon-DbQ7Vxcw.js → CalendarIcon-CqsuAuCm.js} +4 -51
- package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
- package/dist/{CollectibleCard-C8Ae64Ab.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +8 -7
- package/dist/InfoIcon-v0w_Lu7t.js +53 -0
- package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
- package/dist/{_internal-BgWcRIak.js → _internal-C75gOSNo.js} +2 -10
- package/dist/_internal-C75gOSNo.js.map +1 -0
- package/dist/actionModal-CMUeVsFX.js +116 -0
- package/dist/actionModal-CMUeVsFX.js.map +1 -0
- package/dist/{alien_swap-B_76IMma.js → alien_swap-CYv6YlOF.js} +1 -1
- package/dist/{alien_swap-B_76IMma.js.map → alien_swap-CYv6YlOF.js.map} +1 -1
- package/dist/{api-DTIan01C.js → api-BiMGqWdz.js} +17 -34
- package/dist/api-BiMGqWdz.js.map +1 -0
- package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-Bzn5baeH.js} +1 -1
- package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-Bzn5baeH.js.map} +1 -1
- package/dist/{aura-Cye_TuHj.js → aura-DzIWh8WT.js} +1 -1
- package/dist/{aura-Cye_TuHj.js.map → aura-DzIWh8WT.js.map} +1 -1
- package/dist/base-DqaJPvfN.js +22 -0
- package/dist/base-DqaJPvfN.js.map +1 -0
- package/dist/{blur-DWDMyMpK.js → blur-DSH-Cbpj.js} +1 -1
- package/dist/{blur-DWDMyMpK.js.map → blur-DSH-Cbpj.js.map} +1 -1
- package/dist/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
- package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
- package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-DKJ-F0jc.d.ts} +402 -41
- package/dist/{wagmi-CDzEQbfk.js → create-config-fQ-jbJD1.js} +20 -10
- package/dist/create-config-fQ-jbJD1.js.map +1 -0
- package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
- package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
- package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
- package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
- package/dist/get-provider-CYYHfrlg.js +10 -0
- package/dist/get-provider-CYYHfrlg.js.map +1 -0
- package/dist/get-query-client-D19vvfJo.js +23 -0
- package/dist/get-query-client-D19vvfJo.js.map +1 -0
- package/dist/hooks-4pxIbLbM.js +4044 -0
- package/dist/hooks-4pxIbLbM.js.map +1 -0
- package/dist/{index-BL9RUSEK.d.ts → index-136YrWDH.d.ts} +1 -1
- package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
- package/dist/index-BKBin-rq.d.ts +979 -0
- package/dist/{index-BQsgAvtX.d.ts → index-BUWB_RXp.d.ts} +776 -570
- package/dist/{index-21LE7OhL.d.ts → index-BhVFc2rX.d.ts} +6 -3
- package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
- package/dist/{index-ByznONYE.d.ts → index-CKrYP7ot.d.ts} +20 -48
- package/dist/{index-DaE5ZNHb.d.ts → index-CUwMH7Ht.d.ts} +5 -5
- package/dist/{index-CLy8y5hm.d.ts → index-Cu70Lw-w.d.ts} +1 -1
- package/dist/index.css +414 -1
- package/dist/index.d.ts +8 -10
- package/dist/index.js +13 -9
- package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
- package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
- package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
- package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
- package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
- package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
- package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
- package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
- package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
- package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
- package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-HpnpL5xU.js} +3 -3
- package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
- package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-GQTTmihy.js} +3 -3
- package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
- package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
- package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
- package/dist/network-CGD0oKtS.js +15 -0
- package/dist/network-CGD0oKtS.js.map +1 -0
- package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
- package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
- package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
- package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
- package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
- package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
- package/dist/{primary-sale-C55ALnfQ.js → primary-sale-CmWxSfFQ.js} +1 -1
- package/dist/{primary-sale-C55ALnfQ.js.map → primary-sale-CmWxSfFQ.js.map} +1 -1
- package/dist/provider-DPGUA10G.js +125 -0
- package/dist/provider-DPGUA10G.js.map +1 -0
- package/dist/{queries-CUU65uYZ.js → queries-Ce_2othB.js} +165 -7
- package/dist/queries-Ce_2othB.js.map +1 -0
- package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
- package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
- package/dist/react/_internal/api/index.d.ts +2 -4
- package/dist/react/_internal/api/index.js +7 -4
- package/dist/react/_internal/databeat/index.d.ts +2 -73
- package/dist/react/_internal/databeat/index.js +4 -21
- package/dist/react/_internal/index.d.ts +2 -7
- package/dist/react/_internal/index.js +11 -6
- package/dist/react/_internal/wagmi/index.d.ts +2 -4
- package/dist/react/_internal/wagmi/index.js +5 -3
- package/dist/react/hooks/index.d.ts +12 -17
- package/dist/react/hooks/index.js +23 -19
- package/dist/react/hooks/options/index.d.ts +2 -3
- package/dist/react/hooks/options/index.js +12 -7
- package/dist/react/index.d.ts +12 -17
- package/dist/react/index.js +28 -19
- package/dist/react/queries/index.d.ts +9 -8
- package/dist/react/queries/index.js +20 -15
- package/dist/react/ssr/index.d.ts +7 -9
- package/dist/react/ssr/index.js +11 -6
- package/dist/react/ssr/index.js.map +1 -1
- package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -8
- package/dist/react/ui/components/marketplace-collectible-card/index.js +27 -18
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +11 -6
- package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
- package/dist/react/ui/components/marketplace-logos/index.js +1 -1
- package/dist/react/ui/icons/index.js +13 -9
- package/dist/react/ui/index.d.ts +3 -8
- package/dist/react/ui/index.js +27 -18
- package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +2 -2
- package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -18
- package/dist/{react-DAIicQPT.js → react-DP0M2Wfm.js} +799 -4306
- package/dist/react-DP0M2Wfm.js.map +1 -0
- package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
- package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
- package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
- package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
- package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
- package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
- package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
- package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
- package/dist/{token-Da4TdyUk.js → token-CHSBPYVG.js} +1 -1
- package/dist/{token-Da4TdyUk.js.map → token-CHSBPYVG.js.map} +1 -1
- package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
- package/dist/transaction-CnctdNzS.js.map +1 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.js +2 -2
- package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
- package/dist/{types-DwWE6xOF.js.map → types-Yw2ywj6j.js.map} +1 -1
- package/dist/utils/abi/index.d.ts +4 -4
- package/dist/utils/abi/index.js +4 -4
- package/dist/utils/abi/marketplace/index.d.ts +1 -1
- package/dist/utils/abi/marketplace/index.js +1 -1
- package/dist/utils/abi/primary-sale/index.d.ts +1 -1
- package/dist/utils/abi/primary-sale/index.js +1 -1
- package/dist/utils/abi/token/index.d.ts +1 -1
- package/dist/utils/abi/token/index.js +1 -1
- package/dist/utils/index.d.ts +7 -8
- package/dist/utils/index.js +12 -9
- package/dist/{utils-CW2NA5KG.js → utils-9RXDgcBl.js} +4 -11
- package/dist/utils-9RXDgcBl.js.map +1 -0
- package/dist/{utils-BPYfgDSL.js → utils-DjVJ9tov.js} +5 -6
- package/dist/utils-DjVJ9tov.js.map +1 -0
- package/dist/wagmi-Do_KW5ke.js +0 -0
- package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
- package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
- package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
- package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
- package/eslint.config.mjs +4 -0
- package/package.json +27 -14
- package/postcss.config.mjs +6 -0
- package/src/index.css +5 -4
- package/src/index.ts +1 -0
- package/src/react/__tests__/provider.test.tsx +4 -3
- package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
- package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
- package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
- package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
- package/src/react/_internal/api/laos-api.ts +3 -0
- package/src/react/_internal/api/marketplace.gen.ts +5 -3
- package/src/react/_internal/api/query-keys.ts +12 -4
- package/src/react/_internal/api/services.ts +2 -14
- package/src/react/_internal/databeat/index.ts +15 -14
- package/src/react/_internal/databeat/types.ts +22 -0
- package/src/react/_internal/databeat/utils.ts +26 -0
- package/src/react/_internal/utils.ts +4 -4
- package/src/react/_internal/wagmi/create-config.ts +28 -13
- package/src/react/_internal/wallet/wallet.ts +4 -4
- package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
- package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
- package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
- package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +17 -0
- package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +11 -3
- package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +3 -3
- package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
- package/src/react/hooks/__tests__/useFilters.test.tsx +2 -2
- package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
- package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +83 -57
- package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
- package/src/react/hooks/index.ts +3 -1
- package/src/react/hooks/useCheckoutOptions.tsx +96 -0
- package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
- package/src/react/hooks/useCollectionBalanceDetails.tsx +95 -68
- package/src/react/hooks/useCollectionDetailsPolling.tsx +3 -7
- package/src/react/hooks/useComparePrices.tsx +90 -82
- package/src/react/hooks/useConvertPriceToUSD.tsx +85 -71
- package/src/react/hooks/useCurrencyBalance.tsx +132 -46
- package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
- package/src/react/hooks/useFilters.tsx +154 -111
- package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
- package/src/react/hooks/useGetTokenRanges.tsx +83 -22
- package/src/react/hooks/useList1155ShopCardData.tsx +2 -0
- package/src/react/hooks/useList721ShopCardData.tsx +12 -7
- package/src/react/hooks/useListCollections.tsx +25 -25
- package/src/react/hooks/useListMarketCardData.tsx +2 -1
- package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
- package/src/react/hooks/useListTokenMetadata.ts +71 -0
- package/src/react/hooks/useOpenConnectModal.tsx +9 -0
- package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
- package/src/react/hooks/useTokenSupplies.ts +81 -0
- package/src/react/hooks/useTransferTokens.tsx +2 -2
- package/src/react/provider.tsx +73 -9
- package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
- package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
- package/src/react/queries/balanceOfCollectible.ts +7 -4
- package/src/react/queries/checkoutOptions.ts +85 -0
- package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
- package/src/react/queries/collectionBalanceDetails.ts +92 -0
- package/src/react/queries/comparePrices.ts +108 -0
- package/src/react/queries/convertPriceToUSD.ts +92 -0
- package/src/react/queries/filters.ts +138 -0
- package/src/react/queries/getTokenRanges.ts +62 -0
- package/src/react/queries/index.ts +3 -0
- package/src/react/queries/inventory.ts +6 -0
- package/src/react/queries/listBalances.ts +4 -3
- package/src/react/queries/listCollections.ts +7 -3
- package/src/react/queries/listTokenMetadata.ts +2 -2
- package/src/react/queries/marketplaceConfig.ts +1 -1
- package/src/react/queries/primarySaleItems.ts +85 -0
- package/src/react/queries/primarySaleItemsCount.ts +64 -0
- package/src/react/queries/tokenSupplies.ts +93 -0
- package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
- package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
- package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
- package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
- package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
- package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +13 -8
- package/src/react/ui/components/_internals/action-button/store.ts +44 -34
- package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
- package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
- package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
- package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
- package/src/react/ui/components/marketplace-collectible-card/types.ts +4 -3
- package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
- package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +5 -1
- package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
- package/src/react/ui/components/media/Media.stories.tsx +642 -0
- package/src/react/ui/components/media/Media.tsx +24 -19
- package/src/react/ui/components/media/types.ts +6 -0
- package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
- package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +6 -0
- package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
- package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
- package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +15 -8
- package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
- package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +2 -2
- package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
- package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
- package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +7 -0
- package/src/react/ui/modals/BuyModal/index.tsx +9 -1
- package/src/react/ui/modals/BuyModal/store.ts +26 -0
- package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
- package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
- package/src/react/ui/modals/MakeOfferModal/Modal.tsx +30 -13
- package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
- package/src/react/ui/modals/SellModal/Modal.tsx +11 -8
- package/src/react/ui/modals/SellModal/store.ts +3 -3
- package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
- package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
- package/src/react/ui/modals/TransferModal/index.tsx +28 -31
- package/src/react/ui/modals/TransferModal/messages.ts +1 -1
- package/src/react/ui/modals/TransferModal/store.ts +122 -0
- package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
- package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +5 -2
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -17
- package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
- package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
- package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
- package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
- package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
- package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +155 -20
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +339 -40
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -13
- package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
- package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
- package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
- package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
- package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
- package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
- package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +43 -44
- package/src/react/ui/modals/_internal/types.ts +2 -2
- package/src/types/sdk-config.ts +6 -1
- package/src/utils/network.ts +15 -0
- package/test/test-utils.tsx +2 -0
- package/vitest.shims.d.ts +2 -0
- package/vitest.storybook.config.js +33 -0
- package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
- package/dist/_internal-BgWcRIak.js.map +0 -1
- package/dist/api-DTIan01C.js.map +0 -1
- package/dist/builder-api-C_zj5mr3.d.ts +0 -12
- package/dist/index-BUVWziLP.d.ts +0 -60
- package/dist/index-COt10OgI.d.ts +0 -24
- package/dist/index-DPNWNa7t.d.ts +0 -414
- package/dist/index-DsfCs3-x.d.ts +0 -122
- package/dist/index-dUb6wb4Y.d.ts +0 -22
- package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
- package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
- package/dist/queries-CUU65uYZ.js.map +0 -1
- package/dist/react-DAIicQPT.js.map +0 -1
- package/dist/transaction-CcVViHEL.js.map +0 -1
- package/dist/utils-BPYfgDSL.js.map +0 -1
- package/dist/utils-CW2NA5KG.js.map +0 -1
- package/dist/wagmi-CDzEQbfk.js.map +0 -1
- package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
- package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
- package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
- package/src/react/queries/getTokenSuppliesMap.ts +0 -77
- package/src/react/ui/modals/TransferModal/_store.ts +0 -66
- package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
- package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
- /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
- /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
- /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
|
+
};
|