@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 @@
|
|
|
1
|
+
{"version":3,"file":"react-DP0M2Wfm.js","names":["args: object","analyticsProps: Record<string, string>","analyticsNums: Record<string, number>","obj: object","val: unknown","props: BuyModalProps","initialContext","event: {\n\t\t\t\tprops: BuyModalProps;\n\t\t\t\tonError?: onErrorCallback;\n\t\t\t\tonSuccess?: onSuccessCallback;\n\t\t\t\tanalyticsFn: ReturnType<typeof useAnalytics>;\n\t\t\t}","event: { quantity: number }","useIsOpen","callbacks?: ModalCallbacks","args: BuyModalProps","approval","transaction","steps","initialState: MakeOfferState","actions: Actions","initialState","actions","callbacks?: ModalCallbacks","args: ShowMakeOfferModalArgs","event: {\n\t\t\t\taction: CollectibleCardAction.BUY | CollectibleCardAction.OFFER;\n\t\t\t\tonPendingActionExecuted: () => void;\n\t\t\t\ttokenId: string;\n\t\t\t}","action: CollectibleCardAction.BUY | CollectibleCardAction.OFFER","onPendingActionExecuted: () => void","tokenId: string","e: React.MouseEvent","props: NonOwnerActionsProps","SvgCartIcon","initialState: CreateListingState","actions: Actions","callbacks?: ModalCallbacks","args: ShowCreateListingModalArgs","event: { feeOption: FeeOption | undefined }","event: { confirmation: WaasFeeOptionConfirmation | undefined }","feeOption: FeeOption | undefined","confirmation: WaasFeeOptionConfirmation | undefined","args: UseCurrencyBalanceArgs","chainId: number","WaasFeeOptionsSelect","BalanceIndicator","ActionButtons","defaultLabel: string","baseMessages: Record<MessageKey, string>","key: MessageKey","initialContext: TransferModalState","initialContext","event: ShowTransferModalArgs","event: {\n\t\t\t\treceiverAddress?: string;\n\t\t\t\tquantity?: string;\n\t\t\t}","event: { hash: Hex }","event: { error: Error }","useIsOpen","useModalState","value: string","e: React.ChangeEvent<HTMLInputElement>","event: React.ChangeEvent<HTMLInputElement>","initialContext: TransactionStatusModalContext","initialContext","event: Omit<ShowTransactionStatusModalArgs, 'type'> & {\n\t\t\t\ttransactionType: TransactionType;\n\t\t\t}","event: { status: TransactionStatus }","useIsOpen","orderId: string | undefined","status: ConfirmationStatus","type?: TransactionType | undefined","ChessTileImage","hash: Hex | undefined","chainId: number","callbacks?: ModalCallbacks","IndexerTransactionStatus","transactionType: TransactionType","queriesToInvalidate?: QueryKey[]","args: ShowTransactionStatusModalArgs","TransactionPreview","WalletAddressInput","TokenQuantityInput","TransferButton","args: ShowTransferModalArgs","EnterWalletAddressView","FollowWalletInstructionsView","SelectWaasFeeOptions","url: string | undefined","value: 'image' | 'video' | 'html' | '3d-model' | null","error: Error","result: 'image' | 'video' | 'html' | '3d-model' | null","props: {\n\tposterSrc: string;\n\tsrc?: string;\n\tonLoad?: () => void;\n\tonError?: () => void;\n}","fileName: string | undefined","isImage","isHtml","isVideo","url: string | undefined","ChessTileImage","ModelViewer","amount: string","currency: Currency","SvgBellIcon","e: React.KeyboardEvent","props: CollectibleCardProps","params: FeesParams | typeof skipToken","percentage: string | number","input: CheckoutOptionsParams | typeof skipToken","calldata: Hex","transakContractId: string | undefined","hash: string","args: usePaymentModalParams","PaymentModalOpener","maxSafeValue: string","attemptedValue: string","operation: string","inputs: string[]","originalError?: string","providedPrice: string","expectedFormat: string","suggestions?: string[]","provided: number","min: number","max: number","available?: number","message: string","retryable: boolean","chainId?: number","endpoint?: string","contractAddress: string","method?: string","blockNumber?: number","provider: string","code?: string","field: string","value?: unknown","constraints?: Record<string, unknown>","currentState: string","attemptedAction: string","hash: string","args: UseERC721SalePaymentParams","PaymentModalOpener","error: null | string","quantity","Modal","hash: string","error: Error","selectedDate: Date","SvgCalendarIcon","Calendar","date: Date","ExpirationDateSelect","range: RangeType","date","item: SelectItem","value: string","selectedCurrency","newCurrency: Currency","event: React.ChangeEvent<HTMLInputElement>","CurrencyImage","CurrencyOptionsSelect","ChessTileImage","fees: number[]","ONE_DAY_IN_SECONDS","useGetTokenApprovalData","params: UseGetTokenApprovalDataArgs","steps","hash: Hex","publicClient: PublicClient","walletAddress: Address","useTransactionSteps","currency","steps","hash: Hex | undefined","orderId: string | undefined","Modal","listingPrice","ExpirationDateSelect","SelectWaasFeeOptions","useGetTokenApprovalData","params: UseGetTokenApprovalDataArgs","steps","useTransactionSteps","steps","hash: Hex | undefined","orderId: string | undefined","Modal","offerPrice","state","ExpirationDateSelect","SelectWaasFeeOptions","params: UseGetTokenApprovalDataArgs","steps","steps","hash: Hex | undefined","orderId: string | undefined","currency","Modal","SelectWaasFeeOptions","initialContext: SuccessfulPurchaseModalState","event: SuccessfulPurchaseModalState['state'] & {\n\t\t\t\tcallbacks?: ModalCallbacks;\n\t\t\t\tdefaultCallbacks?: ModalCallbacks;\n\t\t\t}","callbacks?: ModalCallbacks","args: SuccessfulPurchaseModalState['state']","SuccessfulPurchaseModal","SwitchChainModal","TransactionStatusModal"],"sources":["../src/react/_internal/databeat/utils.ts","../src/react/ui/modals/BuyModal/store.ts","../src/react/ui/modals/BuyModal/index.tsx","../src/react/ui/modals/MakeOfferModal/store.ts","../src/react/ui/modals/MakeOfferModal/index.tsx","../src/react/ui/components/_internals/action-button/store.ts","../src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx","../src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx","../src/react/ui/modals/CreateListingModal/store.ts","../src/react/ui/modals/CreateListingModal/index.tsx","../src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx","../src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/ActionButtons.tsx","../src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx","../src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts","../src/react/hooks/useCurrencyBalance.tsx","../src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx","../src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx","../src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts","../src/react/ui/modals/TransferModal/messages.ts","../src/react/ui/modals/TransferModal/store.ts","../src/react/ui/modals/_internal/components/quantityInput/index.tsx","../src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx","../src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx","../src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx","../src/react/ui/modals/_internal/components/transaction-footer/index.tsx","../src/react/ui/images/chess-tile.png","../src/react/ui/modals/_internal/components/timeAgo/index.tsx","../src/react/ui/modals/_internal/components/transactionStatusModal/store.ts","../src/react/ui/modals/_internal/components/transactionPreview/consts.ts","../src/react/ui/modals/_internal/components/transactionPreview/useTransactionPreviewTitle.tsx","../src/react/ui/modals/_internal/components/transactionPreview/index.tsx","../src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts","../src/react/ui/modals/_internal/components/transactionStatusModal/util/getFormattedType.ts","../src/react/ui/modals/_internal/components/transactionStatusModal/util/getMessage.ts","../src/react/ui/modals/_internal/components/transactionStatusModal/util/getTitle.ts","../src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx","../src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx","../src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx","../src/react/ui/modals/TransferModal/_views/followWalletInstructions/index.tsx","../src/react/ui/modals/TransferModal/index.tsx","../src/react/ui/components/_internals/action-button/components/OwnerActions.tsx","../src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts","../src/react/ui/components/_internals/action-button/ActionButton.tsx","../src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx","../src/utils/fetchContentType.ts","../src/react/ui/components/ModelViewer.tsx","../src/react/ui/components/media/MediaSkeleton.tsx","../src/react/ui/components/media/utils.ts","../src/react/ui/components/media/Media.tsx","../src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx","../src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx","../src/react/ui/components/marketplace-collectible-card/Footer.tsx","../src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx","../src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx","../src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx","../src/react/ui/modals/_internal/components/actionModal/ErrorModal.tsx","../src/react/ui/modals/_internal/components/actionModal/LoadingModal.tsx","../src/react/ui/modals/BuyModal/hooks/useMarketPlatformFee.ts","../src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts","../src/react/ui/modals/BuyModal/hooks/useLoadData.ts","../src/utils/decode/erc20.ts","../src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts","../src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx","../src/types/buyModalErrors.ts","../src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts","../src/react/ui/modals/BuyModal/components/ERC721ShopModal.tsx","../src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx","../src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx","../src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts","../src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx","../src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx","../src/react/ui/modals/BuyModal/components/Modal.tsx","../src/react/ui/modals/_internal/components/calendar/index.tsx","../src/react/ui/modals/_internal/components/calendarDropdown/index.tsx","../src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx","../src/react/ui/modals/_internal/components/floorPriceText/index.tsx","../src/react/ui/modals/_internal/components/currencyImage/index.tsx","../src/react/ui/components/_internals/custom-select/CustomSelect.tsx","../src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx","../src/react/ui/modals/_internal/components/priceInput/index.tsx","../src/react/ui/modals/_internal/components/tokenPreview/index.tsx","../src/react/ui/modals/_internal/components/transactionDetails/index.tsx","../src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts","../src/utils/getSequenceMarketRequestId.ts","../src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx","../src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx","../src/react/ui/modals/CreateListingModal/Modal.tsx","../src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx","../src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx","../src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx","../src/react/ui/modals/MakeOfferModal/Modal.tsx","../src/react/ui/modals/_internal/components/transactionHeader/index.tsx","../src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx","../src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx","../src/react/ui/modals/SellModal/hooks/useSell.tsx","../src/react/ui/modals/SellModal/Modal.tsx","../src/react/ui/modals/SuccessfulPurchaseModal/store.ts","../src/react/ui/modals/SuccessfulPurchaseModal/index.tsx","../src/react/ui/modals/modal-provider.tsx"],"sourcesContent":["// Flattens an object and turns it into a string and number object for use with analytics\n// Ignores arrays and converts booleans to strings\nexport function flattenAnalyticsArgs(args: object) {\n\tconst analyticsProps: Record<string, string> = {};\n\tconst analyticsNums: Record<string, number> = {};\n\n\tfunction recurse(obj: object, prefix = '') {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tconst path = prefix ? `${prefix}.${key}` : key;\n\t\t\tif (typeof value === 'string' || typeof value === 'boolean') {\n\t\t\t\tanalyticsProps[path] = value.toString();\n\t\t\t} else if (typeof value === 'number') {\n\t\t\t\tanalyticsNums[path] = value;\n\t\t\t} else if (isPojo(value)) {\n\t\t\t\trecurse(value, path);\n\t\t\t}\n\t\t}\n\t}\n\n\trecurse(args);\n\treturn { analyticsProps, analyticsNums };\n}\n\nfunction isPojo(val: unknown): val is Record<string, unknown> {\n\treturn typeof val === 'object' && val !== null && !Array.isArray(val);\n}\n","import { createStore } from '@xstate/store';\nimport { useSelector } from '@xstate/store/react';\nimport type { Address, Hash } from 'viem';\nimport type { MarketplaceType } from '../../../../types';\nimport type {\n\tCheckoutOptionsItem,\n\tMarketplaceKind,\n\tStep,\n} from '../../../_internal';\nimport type { useAnalytics } from '../../../_internal/databeat';\nimport { flattenAnalyticsArgs } from '../../../_internal/databeat/utils';\n\nexport type CheckoutOptionsSalesContractProps = {\n\tchainId: number;\n\tsalesContractAddress: Address;\n\tcollectionAddress: Address;\n\titems: Array<CheckoutOptionsItem>;\n\tcustomProviderCallback?: (\n\t\tonSuccess: (txHash: string) => void,\n\t\tonError: (error: Error) => void,\n\t\tonClose: () => void,\n\t) => void;\n};\n\nexport type PaymentModalProps = {\n\tcollectibleId: string;\n\tmarketplace: MarketplaceKind;\n\torderId: string;\n\tcustomCreditCardProviderCallback?: (buyStep: Step) => void;\n};\n\nexport type BuyModalBaseProps = {\n\tchainId: number;\n\tcollectionAddress: Address;\n\tskipNativeBalanceCheck?: boolean;\n\tnativeTokenAddress?: Address;\n\tmarketplaceType?: MarketplaceType;\n\tcustomCreditCardProviderCallback?: PaymentModalProps['customCreditCardProviderCallback'];\n};\n\n// Shop type modal props\nexport type ShopBuyModalProps = BuyModalBaseProps & {\n\tmarketplaceType: 'shop';\n\tsalesContractAddress: Address;\n\titems: Array<Partial<CheckoutOptionsItem> & { tokenId?: string }>;\n\tquantityDecimals: number;\n\tquantityRemaining: number;\n\tsalePrice: {\n\t\tamount: string;\n\t\tcurrencyAddress: Address;\n\t};\n\tunlimitedSupply?: boolean;\n};\n\n// Marketplace type modal props\nexport type MarketplaceBuyModalProps = BuyModalBaseProps & {\n\tmarketplaceType?: 'market';\n\tcollectibleId: string;\n\tmarketplace: MarketplaceKind;\n\torderId: string;\n};\n\nexport type BuyModalProps = ShopBuyModalProps | MarketplaceBuyModalProps;\n\n// Type guard functions\nexport function isShopProps(props: BuyModalProps): props is ShopBuyModalProps {\n\treturn props.marketplaceType === 'shop';\n}\n\nexport function isMarketProps(\n\tprops: BuyModalProps,\n): props is MarketplaceBuyModalProps {\n\t// Default to MARKET type for backward compatibility\n\treturn !props.marketplaceType || props.marketplaceType === 'market';\n}\n\nexport type onSuccessCallback = ({\n\thash,\n\torderId,\n}: {\n\thash?: Hash;\n\torderId?: string;\n}) => void;\nexport type onErrorCallback = (error: Error) => void;\n\ntype ModalState = 'idle' | 'opening' | 'open' | 'processing' | 'closing';\ntype SubModalState = 'idle' | 'opening' | 'open' | 'closed';\n\nconst initialContext = {\n\tisOpen: false,\n\tprops: null as BuyModalProps | null,\n\tbuyAnalyticsId: '',\n\tonError: (() => {}) as onErrorCallback,\n\tonSuccess: (() => {}) as onSuccessCallback,\n\tquantity: null as number | null,\n\tmodalState: 'idle' as ModalState,\n\tpaymentModalState: 'idle' as SubModalState,\n\tcheckoutModalState: 'idle' as SubModalState,\n};\n\nexport const buyModalStore = createStore({\n\tcontext: { ...initialContext },\n\ton: {\n\t\topen: (\n\t\t\tcontext,\n\t\t\tevent: {\n\t\t\t\tprops: BuyModalProps;\n\t\t\t\tonError?: onErrorCallback;\n\t\t\t\tonSuccess?: onSuccessCallback;\n\t\t\t\tanalyticsFn: ReturnType<typeof useAnalytics>;\n\t\t\t},\n\t\t) => {\n\t\t\t// Prevent duplicate opens\n\t\t\tif (context.modalState !== 'idle') {\n\t\t\t\treturn context;\n\t\t\t}\n\t\t\tconst buyAnalyticsId = crypto.randomUUID();\n\n\t\t\tconst { analyticsProps, analyticsNums } = flattenAnalyticsArgs(\n\t\t\t\tevent.props,\n\t\t\t);\n\n\t\t\tevent.analyticsFn.trackBuyModalOpened({\n\t\t\t\tprops: {\n\t\t\t\t\tbuyAnalyticsId,\n\t\t\t\t\tcollectionAddress: event.props.collectionAddress,\n\t\t\t\t\t...analyticsProps,\n\t\t\t\t},\n\t\t\t\tnums: {\n\t\t\t\t\tchainId: event.props.chainId,\n\t\t\t\t\t...analyticsNums,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...context,\n\t\t\t\tprops: event.props,\n\t\t\t\tbuyAnalyticsId,\n\t\t\t\tonError: event.onError ?? context.onError,\n\t\t\t\tonSuccess: event.onSuccess ?? context.onSuccess,\n\t\t\t\tisOpen: true,\n\t\t\t\tmodalState: 'opening' as const,\n\t\t\t};\n\t\t},\n\n\t\tmodalOpened: (context) => ({\n\t\t\t...context,\n\t\t\tmodalState: 'open' as const,\n\t\t}),\n\n\t\tclose: (context) => ({\n\t\t\t...context,\n\t\t\tisOpen: false,\n\t\t\tquantity: null,\n\t\t\tmodalState: 'idle' as const,\n\t\t\tpaymentModalState: 'idle' as const,\n\t\t\tcheckoutModalState: 'idle' as const,\n\t\t}),\n\n\t\tsetQuantity: (context, event: { quantity: number }) => ({\n\t\t\t...context,\n\t\t\tquantity: event.quantity,\n\t\t}),\n\n\t\topenPaymentModal: (context) => {\n\t\t\tif (context.paymentModalState !== 'idle') {\n\t\t\t\treturn context; // Prevent duplicate opens\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...context,\n\t\t\t\tpaymentModalState: 'opening' as const,\n\t\t\t};\n\t\t},\n\n\t\tpaymentModalOpened: (context) => ({\n\t\t\t...context,\n\t\t\tpaymentModalState: 'open' as const,\n\t\t}),\n\n\t\tpaymentModalClosed: (context) => ({\n\t\t\t...context,\n\t\t\tpaymentModalState: 'closed' as const,\n\t\t}),\n\n\t\topenCheckoutModal: (context) => {\n\t\t\tif (context.checkoutModalState !== 'idle') {\n\t\t\t\treturn context;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...context,\n\t\t\t\tcheckoutModalState: 'opening' as const,\n\t\t\t};\n\t\t},\n\n\t\tcheckoutModalOpened: (context) => ({\n\t\t\t...context,\n\t\t\tcheckoutModalState: 'open' as const,\n\t\t}),\n\n\t\tcheckoutModalClosed: (context) => ({\n\t\t\t...context,\n\t\t\tcheckoutModalState: 'closed' as const,\n\t\t}),\n\t},\n});\n\nexport const useIsOpen = () =>\n\tuseSelector(buyModalStore, (state) => state.context.isOpen);\n\nexport const useBuyModalProps = () => {\n\tconst props = useSelector(buyModalStore, (state) => state.context.props);\n\tif (!props) {\n\t\tthrow new Error(\n\t\t\t'BuyModal props not initialized. Make sure to call show() first.',\n\t\t);\n\t}\n\treturn props;\n};\n\nexport const useOnError = () =>\n\tuseSelector(buyModalStore, (state) => state.context.onError);\n\nexport const useOnSuccess = () =>\n\tuseSelector(buyModalStore, (state) => state.context.onSuccess);\n\nexport const useQuantity = () =>\n\tuseSelector(buyModalStore, (state) => state.context.quantity);\n\nexport const useModalState = () =>\n\tuseSelector(buyModalStore, (state) => state.context.modalState);\n\nexport const usePaymentModalState = () =>\n\tuseSelector(buyModalStore, (state) => state.context.paymentModalState);\n\nexport const useCheckoutModalState = () =>\n\tuseSelector(buyModalStore, (state) => state.context.checkoutModalState);\n\nexport const useBuyAnalyticsId = () =>\n\tuseSelector(buyModalStore, (state) => state.context.buyAnalyticsId);\n","import { useAnalytics } from '../../../_internal/databeat';\nimport type { ModalCallbacks } from '../_internal/types';\nimport { type BuyModalProps, buyModalStore } from './store';\n\nexport const useBuyModal = (callbacks?: ModalCallbacks) => {\n\tconst analyticsFn = useAnalytics();\n\n\treturn {\n\t\tshow: (args: BuyModalProps) =>\n\t\t\tbuyModalStore.send({\n\t\t\t\ttype: 'open',\n\t\t\t\tprops: args,\n\t\t\t\t...callbacks,\n\t\t\t\tanalyticsFn,\n\t\t\t}),\n\t\tclose: () => buyModalStore.send({ type: 'close' }),\n\t};\n};\n","import { observable } from '@legendapp/state';\nimport { addDays } from 'date-fns/addDays';\nimport type { Address } from 'viem';\nimport type { Currency, OrderbookKind, Price } from '../../../../types';\nimport type { CollectionType, TransactionSteps } from '../../../_internal';\nimport type { BaseModalState, ModalCallbacks } from '../_internal/types';\n\ntype MakeOfferState = BaseModalState & {\n\torderbookKind?: OrderbookKind;\n\tcollectibleId: string;\n\tofferPrice: Price;\n\tofferPriceChanged: boolean;\n\tquantity: string;\n\texpiry: Date;\n\tinvalidQuantity: boolean;\n\tcollectionType?: CollectionType;\n\tsteps: TransactionSteps;\n\tofferIsBeingProcessed: boolean;\n};\n\nexport type OpenMakeOfferModalArgs = {\n\tcollectionAddress: Address;\n\tchainId: number;\n\tcollectibleId: string;\n\torderbookKind?: OrderbookKind;\n\tcallbacks?: ModalCallbacks;\n};\n\ntype Actions = {\n\topen: (args: OpenMakeOfferModalArgs) => void;\n\tclose: () => void;\n};\n\nconst offerPrice = {\n\tamountRaw: '0',\n\tcurrency: {} as Currency,\n};\n\nconst approval = {\n\texist: false,\n\tisExecuting: false,\n\texecute: () => Promise.resolve(),\n};\n\nconst transaction = {\n\texist: false,\n\tisExecuting: false,\n\texecute: () => Promise.resolve(),\n};\n\nconst steps = {\n\tapproval: { ...approval },\n\ttransaction: { ...transaction },\n};\n\nconst initialState: MakeOfferState = {\n\tisOpen: false,\n\tcollectionAddress: '' as Address,\n\tchainId: 0,\n\tcollectibleId: '',\n\torderbookKind: undefined,\n\tcallbacks: undefined,\n\tofferPrice: { ...offerPrice },\n\tofferPriceChanged: false,\n\tquantity: '1',\n\tinvalidQuantity: false,\n\texpiry: new Date(addDays(new Date(), 7).toJSON()),\n\tcollectionType: undefined,\n\tsteps: { ...steps },\n\tofferIsBeingProcessed: false,\n};\n\nconst actions: Actions = {\n\topen: (args) => {\n\t\tmakeOfferModal$.collectionAddress.set(args.collectionAddress);\n\t\tmakeOfferModal$.chainId.set(args.chainId);\n\t\tmakeOfferModal$.collectibleId.set(args.collectibleId);\n\t\tmakeOfferModal$.orderbookKind.set(args.orderbookKind);\n\t\tmakeOfferModal$.callbacks.set(args.callbacks);\n\t\tmakeOfferModal$.isOpen.set(true);\n\t},\n\tclose: () => {\n\t\tmakeOfferModal$.isOpen.set(false);\n\t\tmakeOfferModal$.set({ ...initialState, ...actions });\n\t\tmakeOfferModal$.steps.set({ ...steps });\n\t\tmakeOfferModal$.offerPrice.set({ ...offerPrice });\n\t\tmakeOfferModal$.offerIsBeingProcessed.set(false);\n\t},\n};\n\nexport const makeOfferModal$ = observable<MakeOfferState & Actions>({\n\t...initialState,\n\t...actions,\n});\n","import type { ModalCallbacks } from '../_internal/types';\nimport { makeOfferModal$, type OpenMakeOfferModalArgs } from './store';\n\nexport type ShowMakeOfferModalArgs = Exclude<\n\tOpenMakeOfferModalArgs,\n\t'callbacks'\n>;\n\nexport const useMakeOfferModal = (callbacks?: ModalCallbacks) => ({\n\tshow: (args: ShowMakeOfferModalArgs) =>\n\t\tmakeOfferModal$.open({ ...args, callbacks }),\n\tclose: () => makeOfferModal$.close(),\n});\n","'use client';\n\nimport { createStore } from '@xstate/store';\nimport { useSelector } from '@xstate/store/react';\nimport type { CollectibleCardAction } from '../../../../../types';\n\ntype PendingAction = {\n\ttype: CollectibleCardAction.BUY | CollectibleCardAction.OFFER;\n\tcollectibleId: string;\n\tcallback: () => void;\n\ttimestamp: number;\n};\n\ninterface ActionButtonContext {\n\tpendingAction: PendingAction | null;\n}\n\nexport const actionButtonStore = createStore({\n\tcontext: {\n\t\tpendingAction: null,\n\t} as ActionButtonContext,\n\ton: {\n\t\tsetPendingAction: (\n\t\t\tcontext,\n\t\t\tevent: {\n\t\t\t\taction: CollectibleCardAction.BUY | CollectibleCardAction.OFFER;\n\t\t\t\tonPendingActionExecuted: () => void;\n\t\t\t\ttokenId: string;\n\t\t\t},\n\t\t) => ({\n\t\t\t...context,\n\t\t\tpendingAction: {\n\t\t\t\ttype: event.action,\n\t\t\t\tcallback: event.onPendingActionExecuted,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tcollectibleId: event.tokenId,\n\t\t\t},\n\t\t}),\n\t\tclearPendingAction: (context) => ({\n\t\t\t...context,\n\t\t\tpendingAction: null,\n\t\t}),\n\t},\n});\n\nexport const useActionButtonStore = () => {\n\tconst pendingAction = useSelector(\n\t\tactionButtonStore,\n\t\t(state) => state.context.pendingAction,\n\t);\n\n\treturn {\n\t\tpendingAction,\n\t\tsetPendingAction: (\n\t\t\taction: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,\n\t\t\tonPendingActionExecuted: () => void,\n\t\t\ttokenId: string,\n\t\t) => {\n\t\t\tactionButtonStore.send({\n\t\t\t\ttype: 'setPendingAction',\n\t\t\t\taction,\n\t\t\t\tonPendingActionExecuted,\n\t\t\t\ttokenId,\n\t\t\t});\n\t\t},\n\t\tclearPendingAction: () => {\n\t\t\tactionButtonStore.send({ type: 'clearPendingAction' });\n\t\t},\n\t\texecutePendingAction: () => {\n\t\t\tif (!pendingAction) return;\n\n\t\t\tconst { timestamp, callback } = pendingAction;\n\n\t\t\tif (timestamp && callback) {\n\t\t\t\t// Only execute if the pending action is less than 5 minutes old\n\t\t\t\tif (\n\t\t\t\t\tDate.now() - timestamp < 5 * 60 * 1000 &&\n\t\t\t\t\ttypeof callback === 'function'\n\t\t\t\t) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n};\n","'use client';\n\nimport { Button, type IconProps } from '@0xsequence/design-system';\nimport type { ComponentType } from 'react';\nimport type { CollectibleCardAction } from '../../../../../../types';\nimport { useWallet } from '../../../../../_internal/wallet/useWallet';\nimport { useOpenConnectModal } from '../../../../../hooks';\nimport { useActionButtonStore } from '../store';\n\ntype ActionButtonBodyProps = {\n\tlabel: 'Buy now' | 'Sell' | 'Make an offer' | 'Create listing' | 'Transfer';\n\ttokenId: string;\n\tonClick: () => void;\n\ticon?: ComponentType<IconProps>;\n\taction?: CollectibleCardAction.BUY | CollectibleCardAction.OFFER;\n};\n\nexport function ActionButtonBody({\n\ttokenId,\n\tlabel,\n\tonClick,\n\ticon,\n\taction,\n}: ActionButtonBodyProps) {\n\tconst { wallet } = useWallet();\n\tconst address = wallet?.address;\n\tconst { openConnectModal } = useOpenConnectModal();\n\tconst { setPendingAction } = useActionButtonStore();\n\n\tconst handleClick = (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tif (!address && action) {\n\t\t\tsetPendingAction(action, onClick, tokenId);\n\t\t\topenConnectModal();\n\t\t} else {\n\t\t\tonClick();\n\t\t}\n\t};\n\n\treturn (\n\t\t<Button\n\t\t\tclassName=\"flex w-full items-center justify-center\"\n\t\t\tvariant=\"primary\"\n\t\t\tlabel={label}\n\t\t\tonClick={handleClick}\n\t\t\tleftIcon={icon}\n\t\t\tsize=\"xs\"\n\t\t\tshape=\"square\"\n\t\t/>\n\t);\n}\n","'use client';\n\nimport type { Address } from 'viem';\nimport { CollectibleCardAction } from '../../../../../../types';\nimport type { Order, OrderbookKind } from '../../../../../_internal';\nimport SvgCartIcon from '../../../../icons/CartIcon';\nimport { useBuyModal } from '../../../../modals/BuyModal';\nimport { useMakeOfferModal } from '../../../../modals/MakeOfferModal';\nimport { ActionButtonBody } from './ActionButtonBody';\n\ntype NonOwnerActionsBaseProps = {\n\taction: CollectibleCardAction;\n\ttokenId: string;\n\tcollectionAddress: Address;\n\tchainId: number;\n\tquantityDecimals?: number;\n\tquantityRemaining?: number;\n\tunlimitedSupply?: boolean;\n};\n\ntype ShopNonOwnerActionsProps = NonOwnerActionsBaseProps & {\n\tmarketplaceType: 'shop';\n\tsalesContractAddress: Address;\n\tsalePrice: {\n\t\tamount: string;\n\t\tcurrencyAddress: Address;\n\t};\n\tlowestListing?: never;\n\torderbookKind?: never;\n};\n\ntype MarketNonOwnerActionsProps = NonOwnerActionsBaseProps & {\n\tmarketplaceType: 'market';\n\tlowestListing?: Order;\n\torderbookKind?: OrderbookKind;\n\tsalesContractAddress?: never;\n\tsalePrice?: never;\n};\n\ntype NonOwnerActionsProps =\n\t| ShopNonOwnerActionsProps\n\t| MarketNonOwnerActionsProps;\n\nexport function NonOwnerActions(props: NonOwnerActionsProps) {\n\tconst {\n\t\taction,\n\t\ttokenId,\n\t\tcollectionAddress,\n\t\tchainId,\n\t\tquantityDecimals,\n\t\tquantityRemaining,\n\t\tunlimitedSupply,\n\t\tmarketplaceType,\n\t} = props;\n\n\tconst { show: showBuyModal } = useBuyModal();\n\tconst { show: showMakeOfferModal } = useMakeOfferModal();\n\n\tif (marketplaceType === 'shop') {\n\t\tconst { salesContractAddress, salePrice } = props;\n\n\t\treturn (\n\t\t\t<ActionButtonBody\n\t\t\t\taction={CollectibleCardAction.BUY}\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tlabel=\"Buy now\"\n\t\t\t\tonClick={() =>\n\t\t\t\t\tshowBuyModal({\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tsalesContractAddress,\n\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttokenId,\n\t\t\t\t\t\t\t\tquantity: '1',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tmarketplaceType: 'shop',\n\t\t\t\t\t\tsalePrice: {\n\t\t\t\t\t\t\tamount: salePrice.amount,\n\t\t\t\t\t\t\tcurrencyAddress: salePrice.currencyAddress,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tquantityDecimals: quantityDecimals ?? 0,\n\t\t\t\t\t\tquantityRemaining: quantityRemaining ?? 0,\n\t\t\t\t\t\tunlimitedSupply,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\ticon={SvgCartIcon}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (action === CollectibleCardAction.BUY) {\n\t\tconst { lowestListing } = props;\n\t\tif (!lowestListing) {\n\t\t\tthrow new Error(\n\t\t\t\t'lowestListing is required for BUY action and MARKET card type',\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<ActionButtonBody\n\t\t\t\taction={CollectibleCardAction.BUY}\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tlabel=\"Buy now\"\n\t\t\t\tonClick={() =>\n\t\t\t\t\tshowBuyModal({\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\tcollectibleId: tokenId,\n\t\t\t\t\t\torderId: lowestListing.orderId,\n\t\t\t\t\t\tmarketplace: lowestListing.marketplace,\n\t\t\t\t\t\tmarketplaceType: 'market',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\ticon={SvgCartIcon}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (action === CollectibleCardAction.OFFER) {\n\t\tconst { orderbookKind } = props;\n\t\treturn (\n\t\t\t<ActionButtonBody\n\t\t\t\taction={CollectibleCardAction.OFFER}\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tlabel=\"Make an offer\"\n\t\t\t\tonClick={() =>\n\t\t\t\t\tshowMakeOfferModal({\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\tcollectibleId: tokenId,\n\t\t\t\t\t\torderbookKind,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import { observable } from '@legendapp/state';\nimport { addDays } from 'date-fns/addDays';\nimport type { Address } from 'viem';\nimport { type Currency, OrderbookKind } from '../../../../types';\nimport type { CollectionType, TransactionSteps } from '../../../_internal';\nimport type { BaseModalState, ModalCallbacks } from '../_internal/types';\n\ntype CreateListingState = BaseModalState & {\n\tcollectibleId: string;\n\tcollectionName: string;\n\torderbookKind?: OrderbookKind;\n\tcollectionType: CollectionType | undefined;\n\tlistingPrice: {\n\t\tamountRaw: string;\n\t\tcurrency: Currency;\n\t};\n\tquantity: string;\n\tinvalidQuantity: boolean;\n\texpiry: Date;\n\tsteps: TransactionSteps;\n\tlistingIsBeingProcessed: boolean;\n};\n\nexport type OpenCreateListingModalArgs = {\n\tcollectionAddress: Address;\n\tchainId: number;\n\tcollectibleId: string;\n\torderbookKind?: OrderbookKind;\n\tcallbacks?: ModalCallbacks;\n};\n\ntype Actions = {\n\topen: (args: OpenCreateListingModalArgs) => void;\n\tclose: () => void;\n};\n\nconst listingPrice = {\n\tamountRaw: '0',\n\tcurrency: {} as Currency,\n};\n\nconst approval = {\n\texist: false,\n\tisExecuting: false,\n\texecute: () => Promise.resolve(),\n};\n\nconst transaction = {\n\texist: false,\n\tisExecuting: false,\n\texecute: () => Promise.resolve(),\n};\n\nconst steps = {\n\tapproval: { ...approval },\n\ttransaction: { ...transaction },\n};\n\nconst initialState: CreateListingState = {\n\tisOpen: false,\n\tcollectionAddress: '' as Address,\n\tchainId: 0,\n\tcollectibleId: '',\n\torderbookKind: OrderbookKind.sequence_marketplace_v2,\n\tcollectionName: '',\n\tcollectionType: undefined,\n\tlistingPrice: { ...listingPrice },\n\tquantity: '1',\n\tinvalidQuantity: false,\n\texpiry: new Date(addDays(new Date(), 7).toJSON()),\n\tcallbacks: undefined as ModalCallbacks | undefined,\n\tsteps: { ...steps },\n\tlistingIsBeingProcessed: false,\n};\n\nconst actions: Actions = {\n\topen: (args) => {\n\t\tcreateListingModal$.collectionAddress.set(args.collectionAddress);\n\t\tcreateListingModal$.chainId.set(args.chainId);\n\t\tcreateListingModal$.collectibleId.set(args.collectibleId);\n\t\tcreateListingModal$.orderbookKind.set(args.orderbookKind);\n\t\tcreateListingModal$.callbacks.set(args.callbacks);\n\t\tcreateListingModal$.isOpen.set(true);\n\t},\n\tclose: () => {\n\t\tcreateListingModal$.isOpen.set(false);\n\t\tcreateListingModal$.set({ ...initialState, ...actions });\n\t\tcreateListingModal$.listingPrice.set({ ...listingPrice });\n\t\tcreateListingModal$.steps.set({ ...steps });\n\t\tcreateListingModal$.listingIsBeingProcessed.set(false);\n\t\tcreateListingModal$.steps.approval.isExecuting.set(false);\n\t\tcreateListingModal$.steps.transaction.isExecuting.set(false);\n\t},\n};\n\nexport const createListingModal$ = observable<CreateListingState & Actions>({\n\t...initialState,\n\t...actions,\n});\n","import type { ModalCallbacks } from '../_internal/types';\nimport { createListingModal$, type OpenCreateListingModalArgs } from './store';\n\ntype ShowCreateListingModalArgs = Exclude<\n\tOpenCreateListingModalArgs,\n\t'callbacks'\n>;\n\nexport const useCreateListingModal = (callbacks?: ModalCallbacks) => {\n\treturn {\n\t\tshow: (args: ShowCreateListingModalArgs) =>\n\t\t\tcreateListingModal$.open({ ...args, callbacks }),\n\t\tclose: () => createListingModal$.close(),\n\t};\n};\n","'use client';\n\nimport { Image, Select, Text } from '@0xsequence/design-system';\nimport { useEffect } from 'react';\nimport { formatUnits, zeroAddress } from 'viem';\nimport type { FeeOption } from '../../../../../../types/waas-types';\nimport type { SelectItem } from '../../../../components/_internals/custom-select/CustomSelect';\n\nconst WaasFeeOptionsSelect = ({\n\toptions,\n\tselectedFeeOption,\n\tonSelectedFeeOptionChange,\n}: {\n\toptions: FeeOption[];\n\tselectedFeeOption: FeeOption | undefined;\n\tonSelectedFeeOptionChange: (option: FeeOption | undefined) => void;\n}) => {\n\toptions = options.map((option) => ({\n\t\t...option,\n\t\ttoken: {\n\t\t\t...option.token,\n\t\t\tcontractAddress: option.token.contractAddress || zeroAddress,\n\t\t},\n\t}));\n\n\tconst feeOptions = options.map((option) => {\n\t\tconst value = option.token.contractAddress ?? '';\n\n\t\treturn FeeOptionSelectItem({ value, option });\n\t});\n\n\tuseEffect(() => {\n\t\tif (options.length > 0 && !selectedFeeOption) {\n\t\t\tonSelectedFeeOptionChange(options[0]);\n\t\t}\n\t}, [options, selectedFeeOption, onSelectedFeeOptionChange]);\n\n\tif (options.length === 0 || !selectedFeeOption?.token) return null;\n\n\treturn (\n\t\t<Select\n\t\t\tname=\"fee-option\"\n\t\t\toptions={feeOptions.map((option) => ({\n\t\t\t\tlabel: option.content,\n\t\t\t\tvalue: option.value,\n\t\t\t}))}\n\t\t\tonValueChange={(value) => {\n\t\t\t\tconst selectedOption = options.find(\n\t\t\t\t\t(option) => option.token.contractAddress === value,\n\t\t\t\t);\n\n\t\t\t\tonSelectedFeeOptionChange(selectedOption);\n\t\t\t}}\n\t\t\tdefaultValue={options[0].token.contractAddress ?? undefined}\n\t\t/>\n\t);\n};\n\nfunction FeeOptionSelectItem({\n\tvalue,\n\toption,\n}: {\n\tvalue: string;\n\toption: FeeOption;\n}) {\n\treturn {\n\t\tvalue,\n\t\tcontent: (\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Image\n\t\t\t\t\tclassName=\"h-3 w-3\"\n\t\t\t\t\tsrc={option.token.logoURL}\n\t\t\t\t\talt={option.token.symbol}\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"flex gap-1\">\n\t\t\t\t\t<Text className=\"font-body text-sm\" color=\"text100\">\n\t\t\t\t\t\tFee\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"font-body text-sm\"\n\t\t\t\t\t\tcolor=\"text50\"\n\t\t\t\t\t\tfontWeight=\"semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t(in {option.token.symbol})\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text className=\"font-body text-sm\" color=\"text100\">\n\t\t\t\t\t\t:\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\n\t\t\t\t<Text className=\"font-body text-sm\">\n\t\t\t\t\t{formatUnits(BigInt(option.value), option.token.decimals || 0)}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t),\n\t} as SelectItem;\n}\n\nexport default WaasFeeOptionsSelect;\n","'use client';\n\nimport { Button, Skeleton, Spinner } from '@0xsequence/design-system';\n\nconst ActionButtons = ({\n\tonCancel,\n\tonConfirm,\n\tdisabled,\n\tloading,\n\tconfirmed,\n\ttokenSymbol,\n}: {\n\tonCancel: () => void;\n\tonConfirm: () => void;\n\tdisabled: boolean;\n\tloading: boolean;\n\tconfirmed: boolean;\n\ttokenSymbol?: string;\n}) => (\n\t<div className=\"mt-4 flex w-full items-center justify-end gap-2\">\n\t\t<Button\n\t\t\tpending={loading}\n\t\t\tonClick={onCancel}\n\t\t\tlabel={<div className=\"flex items-center gap-2\">Cancel</div>}\n\t\t\tvariant={'ghost'}\n\t\t\tshape=\"square\"\n\t\t\tsize=\"md\"\n\t\t/>\n\n\t\t<Button\n\t\t\tdisabled={disabled}\n\t\t\tpending={loading || confirmed}\n\t\t\tonClick={onConfirm}\n\t\t\tlabel={\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{!confirmed ? (\n\t\t\t\t\t\ttokenSymbol ? (\n\t\t\t\t\t\t\t`Continue with ${tokenSymbol}`\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\tContinue with\n\t\t\t\t\t\t\t\t<Skeleton className=\"h-[20px] w-6 animate-shimmer\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<Spinner size=\"sm\" />\n\t\t\t\t\t\t\tConfirming\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\tvariant={'primary'}\n\t\t\tshape=\"square\"\n\t\t\tsize=\"md\"\n\t\t/>\n\t</div>\n);\n\nexport default ActionButtons;\n","import { CheckmarkIcon, Text, WarningIcon } from '@0xsequence/design-system';\n\nconst BalanceIndicator = ({\n\tinsufficientBalance,\n\tcurrencyBalance,\n\tselectedFeeOption,\n}: {\n\tinsufficientBalance: boolean;\n\tcurrencyBalance?: { formatted: string };\n\tselectedFeeOption?: { token: { symbol: string } };\n}) => (\n\t<div className=\"flex items-center gap-2\">\n\t\t{insufficientBalance ? (\n\t\t\t<WarningIcon className=\"text-negative\" size=\"xs\" />\n\t\t) : (\n\t\t\t<CheckmarkIcon className=\"text-positive\" size=\"xs\" />\n\t\t)}\n\n\t\t<Text\n\t\t\tclassName=\"font-body font-medium text-xs\"\n\t\t\tcolor={insufficientBalance ? 'negative' : 'text100'}\n\t\t>\n\t\t\tYou have {currencyBalance?.formatted || '0'}{' '}\n\t\t\t{selectedFeeOption?.token.symbol}\n\t\t</Text>\n\t</div>\n);\n\nexport default BalanceIndicator;\n","'use client';\n\nimport { createStore } from '@xstate/store';\nimport { useSelector } from '@xstate/store/react';\nimport type {\n\tFeeOption,\n\tWaasFeeOptionConfirmation,\n} from '../../../../../../types/waas-types';\n\ninterface SelectWaasFeeOptionsContext {\n\tselectedFeeOption: FeeOption | undefined;\n\tpendingFeeOptionConfirmation: WaasFeeOptionConfirmation | undefined;\n\tisVisible: boolean;\n}\n\nexport const selectWaasFeeOptionsStore = createStore({\n\tcontext: {\n\t\tselectedFeeOption: undefined,\n\t\tpendingFeeOptionConfirmation: undefined,\n\t\tisVisible: false,\n\t} as SelectWaasFeeOptionsContext,\n\ton: {\n\t\tshow: (context) => ({\n\t\t\t...context,\n\t\t\tisVisible: true,\n\t\t}),\n\t\thide: () => ({\n\t\t\tselectedFeeOption: undefined,\n\t\t\tpendingFeeOptionConfirmation: undefined,\n\t\t\tisVisible: false,\n\t\t}),\n\t\tsetSelectedFeeOption: (\n\t\t\tcontext,\n\t\t\tevent: { feeOption: FeeOption | undefined },\n\t\t) => ({\n\t\t\t...context,\n\t\t\tselectedFeeOption: event.feeOption,\n\t\t}),\n\t\tsetPendingFeeOptionConfirmation: (\n\t\t\tcontext,\n\t\t\tevent: { confirmation: WaasFeeOptionConfirmation | undefined },\n\t\t) => ({\n\t\t\t...context,\n\t\t\tpendingFeeOptionConfirmation: event.confirmation,\n\t\t}),\n\t},\n});\n\n// React hooks\nexport const useSelectWaasFeeOptionsStore = () => {\n\tconst isVisible = useSelector(\n\t\tselectWaasFeeOptionsStore,\n\t\t(state) => state.context.isVisible,\n\t);\n\tconst selectedFeeOption = useSelector(\n\t\tselectWaasFeeOptionsStore,\n\t\t(state) => state.context.selectedFeeOption,\n\t);\n\tconst pendingFeeOptionConfirmation = useSelector(\n\t\tselectWaasFeeOptionsStore,\n\t\t(state) => state.context.pendingFeeOptionConfirmation,\n\t);\n\n\treturn {\n\t\tisVisible,\n\t\tselectedFeeOption,\n\t\tpendingFeeOptionConfirmation,\n\t\tshow: () => selectWaasFeeOptionsStore.send({ type: 'show' }),\n\t\thide: () => selectWaasFeeOptionsStore.send({ type: 'hide' }),\n\t\tsetSelectedFeeOption: (feeOption: FeeOption | undefined) =>\n\t\t\tselectWaasFeeOptionsStore.send({\n\t\t\t\ttype: 'setSelectedFeeOption',\n\t\t\t\tfeeOption,\n\t\t\t}),\n\t\tsetPendingFeeOptionConfirmation: (\n\t\t\tconfirmation: WaasFeeOptionConfirmation | undefined,\n\t\t) =>\n\t\t\tselectWaasFeeOptionsStore.send({\n\t\t\t\ttype: 'setPendingFeeOptionConfirmation',\n\t\t\t\tconfirmation,\n\t\t\t}),\n\t};\n};\n","'use client';\n\nimport type { Address } from 'viem';\nimport { erc20Abi, formatUnits, zeroAddress } from 'viem';\nimport { useBalance, useReadContracts } from 'wagmi';\n\nexport type UseCurrencyBalanceArgs = {\n\tcurrencyAddress: Address | undefined;\n\tchainId: number | undefined;\n\tuserAddress: Address | undefined;\n\tquery?: {\n\t\tenabled?: boolean;\n\t};\n};\n\n/**\n * Hook to fetch cryptocurrency balance for a user\n *\n * Retrieves the balance of a specific currency (native token or ERC-20)\n * for a given user address using wagmi. Handles both native tokens (ETH, MATIC, etc.)\n * and ERC-20 tokens with automatic decimal formatting through direct blockchain calls.\n *\n * @param args - Configuration parameters\n * @param args.currencyAddress - The currency contract address (use zero address for native tokens)\n * @param args.chainId - The chain ID to query on\n * @param args.userAddress - The user address to check balance for\n * @param args.query - Optional wagmi query configuration\n *\n * @returns Wagmi query result containing raw and formatted balance values\n *\n * @example\n * Native token balance (ETH):\n * ```typescript\n * const { data: ethBalance, isLoading } = useCurrencyBalance({\n * currencyAddress: '0x0000000000000000000000000000000000000000', // Zero address for ETH\n * chainId: 1,\n * userAddress: '0x1234...'\n * })\n *\n * if (data) {\n * console.log(`ETH Balance: ${data.formatted} ETH`); // e.g., \"1.5 ETH\"\n * console.log(`Raw balance: ${data.value.toString()}`); // e.g., \"1500000000000000000\"\n * }\n * ```\n *\n * @example\n * ERC-20 token balance (USDC):\n * ```typescript\n * const { data: usdcBalance } = useCurrencyBalance({\n * currencyAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC\n * chainId: 1,\n * userAddress: userAddress,\n * query: {\n * enabled: Boolean(userAddress), // Only fetch when user is connected\n * refetchInterval: 30000 // Update every 30 seconds\n * }\n * })\n *\n * if (data) {\n * console.log(`USDC Balance: $${data.formatted}`); // e.g., \"$1000.50\"\n * }\n * ```\n */\nexport function useCurrencyBalance(args: UseCurrencyBalanceArgs) {\n\tconst { currencyAddress, chainId, userAddress, query } = args;\n\n\t// Check if all required parameters are present\n\tconst hasAllParams = Boolean(currencyAddress && chainId && userAddress);\n\tconst isNativeToken = currencyAddress === zeroAddress;\n\n\t// For native token (zero address), use useBalance\n\tconst nativeBalance = useBalance({\n\t\taddress: userAddress,\n\t\tchainId,\n\t\tquery: {\n\t\t\t...query,\n\t\t\tenabled: hasAllParams && isNativeToken && (query?.enabled ?? true),\n\t\t},\n\t});\n\n\t// For ERC-20 tokens, use useReadContracts to get both balance and decimals\n\tconst erc20Balance = useReadContracts({\n\t\tcontracts:\n\t\t\thasAllParams && !isNativeToken && currencyAddress && userAddress\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taddress: currencyAddress,\n\t\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\t\t\t\targs: [userAddress],\n\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taddress: currencyAddress,\n\t\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\t\tfunctionName: 'decimals',\n\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t},\n\t\t\t\t\t]\n\t\t\t\t: [],\n\t\tquery: {\n\t\t\t...query,\n\t\t\tenabled: hasAllParams && !isNativeToken && (query?.enabled ?? true),\n\t\t},\n\t});\n\n\t// Return native balance result if zero address\n\tif (isNativeToken) {\n\t\treturn {\n\t\t\t...nativeBalance,\n\t\t\tdata: nativeBalance.data\n\t\t\t\t? {\n\t\t\t\t\t\tvalue: nativeBalance.data.value,\n\t\t\t\t\t\tformatted: nativeBalance.data.formatted,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t// Return ERC-20 balance result with formatted data\n\tconst [balanceResult, decimalsResult] = erc20Balance.data || [];\n\tconst balance = balanceResult?.result;\n\tconst decimals = decimalsResult?.result;\n\n\tconst formattedData =\n\t\tbalance !== undefined && decimals !== undefined\n\t\t\t? {\n\t\t\t\t\tvalue: balance,\n\t\t\t\t\tformatted: formatUnits(balance, decimals),\n\t\t\t\t}\n\t\t\t: undefined;\n\n\treturn {\n\t\t...erc20Balance,\n\t\tdata: formattedData,\n\t};\n}\n","import { useWaasFeeOptions } from '@0xsequence/connect';\nimport { useEffect, useState } from 'react';\nimport { type Address, zeroAddress } from 'viem';\nimport { useAccount } from 'wagmi';\nimport type { FeeOption } from '../../../../../../types/waas-types';\nimport { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';\nimport { useSelectWaasFeeOptionsStore } from './store';\n\nconst useWaasFeeOptionManager = (chainId: number) => {\n\tconst { address: userAddress } = useAccount();\n\tconst {\n\t\tselectedFeeOption,\n\t\tsetSelectedFeeOption,\n\t\tpendingFeeOptionConfirmation: storedPendingFeeOptionConfirmation,\n\t\tsetPendingFeeOptionConfirmation,\n\t} = useSelectWaasFeeOptionsStore();\n\n\tconst [pendingFeeOptionConfirmationFromHook, confirmPendingFeeOption] =\n\t\tuseWaasFeeOptions();\n\tconst [feeOptionsConfirmed, setFeeOptionsConfirmed] = useState(false);\n\n\t// Update store when hook value changes\n\tuseEffect(() => {\n\t\tsetPendingFeeOptionConfirmation(\n\t\t\tpendingFeeOptionConfirmationFromHook as any,\n\t\t);\n\t}, [pendingFeeOptionConfirmationFromHook, setPendingFeeOptionConfirmation]);\n\n\tconst { data: currencyBalance, isLoading: currencyBalanceLoading } =\n\t\tuseCurrencyBalance({\n\t\t\tchainId,\n\t\t\tcurrencyAddress: (selectedFeeOption?.token.contractAddress ||\n\t\t\t\tzeroAddress) as Address,\n\t\t\tuserAddress: userAddress as Address,\n\t\t});\n\n\tuseEffect(() => {\n\t\tif (!selectedFeeOption && storedPendingFeeOptionConfirmation) {\n\t\t\tif (storedPendingFeeOptionConfirmation.options.length > 0) {\n\t\t\t\tsetSelectedFeeOption(\n\t\t\t\t\tstoredPendingFeeOptionConfirmation.options[0] as FeeOption,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tstoredPendingFeeOptionConfirmation,\n\t\tselectedFeeOption,\n\t\tsetSelectedFeeOption,\n\t]);\n\n\tconst insufficientBalance = (() => {\n\t\tif (!selectedFeeOption?.value || !selectedFeeOption.token.decimals) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!currencyBalance?.value && currencyBalance?.value !== 0n) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\tconst feeValue = BigInt(selectedFeeOption.value);\n\t\t\treturn currencyBalance.value === 0n || currencyBalance.value < feeValue;\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t})();\n\n\tconst handleConfirmFeeOption = () => {\n\t\tif (!selectedFeeOption?.token || !storedPendingFeeOptionConfirmation?.id)\n\t\t\treturn;\n\n\t\tconfirmPendingFeeOption(\n\t\t\tstoredPendingFeeOptionConfirmation?.id,\n\t\t\tselectedFeeOption.token.contractAddress || zeroAddress,\n\t\t);\n\n\t\tsetFeeOptionsConfirmed(true);\n\t};\n\n\treturn {\n\t\tselectedFeeOption,\n\t\tpendingFeeOptionConfirmation: storedPendingFeeOptionConfirmation,\n\t\tcurrencyBalance,\n\t\tcurrencyBalanceLoading,\n\t\tinsufficientBalance,\n\t\tfeeOptionsConfirmed,\n\t\thandleConfirmFeeOption,\n\t};\n};\n\nexport default useWaasFeeOptionManager;\n","'use client';\n\nimport { Divider, Skeleton, Text } from '@0xsequence/design-system';\nimport type { FeeOption } from '../../../../../../types/waas-types';\nimport { cn } from '../../../../../../utils';\nimport WaasFeeOptionsSelect from '../waasFeeOptionsSelect/WaasFeeOptionsSelect';\nimport ActionButtons from './_components/ActionButtons';\nimport BalanceIndicator from './_components/BalanceIndicator';\nimport { useSelectWaasFeeOptionsStore } from './store';\nimport useWaasFeeOptionManager from './useWaasFeeOptionManager';\n\ntype SelectWaasFeeOptionsProps = {\n\tonCancel?: () => void;\n\tchainId: number;\n\ttitleOnConfirm?: string;\n\tclassName?: string;\n};\n\nconst SelectWaasFeeOptions = ({\n\tchainId,\n\tonCancel,\n\ttitleOnConfirm,\n\tclassName,\n}: SelectWaasFeeOptionsProps) => {\n\tconst { isVisible, hide, setSelectedFeeOption } =\n\t\tuseSelectWaasFeeOptionsStore();\n\tconst {\n\t\tselectedFeeOption,\n\t\tpendingFeeOptionConfirmation,\n\t\tcurrencyBalance,\n\t\tcurrencyBalanceLoading,\n\t\tinsufficientBalance,\n\t\tfeeOptionsConfirmed,\n\t\thandleConfirmFeeOption,\n\t} = useWaasFeeOptionManager(chainId);\n\n\tconsole.log('pendingFeeOptionConfirmation', pendingFeeOptionConfirmation);\n\n\tconst handleCancelFeeOption = () => {\n\t\thide();\n\t\tonCancel?.();\n\t};\n\n\tconst isSponsored = pendingFeeOptionConfirmation?.options?.length === 0;\n\n\tif (!isVisible || isSponsored || !selectedFeeOption) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full flex-col gap-2 rounded-2xl bg-button-emphasis p-0 backdrop-blur-md',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Divider className=\"mt-0 mb-4\" />\n\n\t\t\t<Text className=\"mb-2 font-body font-bold text-large text-text-100\">\n\t\t\t\t{feeOptionsConfirmed ? titleOnConfirm : 'Select a fee option'}\n\t\t\t</Text>\n\n\t\t\t{!feeOptionsConfirmed && !pendingFeeOptionConfirmation && (\n\t\t\t\t<Skeleton className=\"h-[52px] w-full animate-shimmer rounded-xl\" />\n\t\t\t)}\n\n\t\t\t{(feeOptionsConfirmed || pendingFeeOptionConfirmation) && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'[&>label>button>span]:overflow-hidden [&>label>button]:w-full [&>label>button]:text-xs [&>label]:flex [&>label]:w-full',\n\t\t\t\t\t\tfeeOptionsConfirmed && 'pointer-events-none opacity-70',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<WaasFeeOptionsSelect\n\t\t\t\t\t\toptions={\n\t\t\t\t\t\t\t(pendingFeeOptionConfirmation?.options as FeeOption[]) || [\n\t\t\t\t\t\t\t\tselectedFeeOption,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedFeeOption={selectedFeeOption}\n\t\t\t\t\t\tonSelectedFeeOptionChange={setSelectedFeeOption}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div className=\"flex w-full items-start justify-between\">\n\t\t\t\t{!feeOptionsConfirmed &&\n\t\t\t\t\t(!pendingFeeOptionConfirmation || currencyBalanceLoading) && (\n\t\t\t\t\t\t<Skeleton className=\"h-[20px] w-2/3 animate-shimmer rounded-xl\" />\n\t\t\t\t\t)}\n\n\t\t\t\t{(feeOptionsConfirmed ||\n\t\t\t\t\t(pendingFeeOptionConfirmation && !currencyBalanceLoading)) && (\n\t\t\t\t\t<BalanceIndicator\n\t\t\t\t\t\tinsufficientBalance={insufficientBalance}\n\t\t\t\t\t\tcurrencyBalance={currencyBalance}\n\t\t\t\t\t\tselectedFeeOption={selectedFeeOption}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<ActionButtons\n\t\t\t\tonCancel={handleCancelFeeOption}\n\t\t\t\tonConfirm={handleConfirmFeeOption}\n\t\t\t\tdisabled={\n\t\t\t\t\t!selectedFeeOption?.token ||\n\t\t\t\t\tinsufficientBalance ||\n\t\t\t\t\tcurrencyBalanceLoading\n\t\t\t\t}\n\t\t\t\tloading={currencyBalanceLoading}\n\t\t\t\tconfirmed={feeOptionsConfirmed}\n\t\t\t\ttokenSymbol={selectedFeeOption?.token.symbol}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nexport default SelectWaasFeeOptions;\n","import type { FeeOption } from '../../../../../types/waas-types';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\n\ninterface UseSelectWaasFeeOptionsProps {\n\tisProcessing: boolean;\n\tfeeOptionsVisible: boolean;\n\tselectedFeeOption: FeeOption;\n}\n\nexport const useSelectWaasFeeOptions = ({\n\tisProcessing,\n\tfeeOptionsVisible,\n\tselectedFeeOption,\n}: UseSelectWaasFeeOptionsProps) => {\n\tconst { wallet } = useWallet();\n\tconst isWaaS = wallet?.isWaaS;\n\tconst isProcessingWithWaaS = isProcessing && isWaaS;\n\n\tconst shouldHideActionButton =\n\t\tisProcessingWithWaaS && feeOptionsVisible === true && !!selectedFeeOption;\n\n\tconst waasFeeOptionsShown =\n\t\twallet?.isWaaS && isProcessing && feeOptionsVisible;\n\n\tconst getActionLabel = (\n\t\tdefaultLabel: string,\n\t\tloadingLabel = 'Loading fee options',\n\t) => {\n\t\tif (isProcessing) {\n\t\t\treturn isWaaS ? loadingLabel : defaultLabel;\n\t\t}\n\t\treturn defaultLabel;\n\t};\n\n\treturn {\n\t\tisWaaS,\n\t\tfeeOptionsVisible,\n\t\tshouldHideActionButton,\n\t\twaasFeeOptionsShown,\n\t\tisProcessingWithWaaS,\n\t\tgetActionLabel,\n\t};\n};\n","import type { TransferModalState } from './store';\n\ntype MessageKey = NonNullable<TransferModalState['view']>;\n\nconst baseMessages: Record<MessageKey, string> = {\n\tenterReceiverAddress:\n\t\t\"Items sent to the wrong wallet address can't be recovered!\",\n\tfollowWalletInstructions:\n\t\t\"Follow your wallet's instructions to submit a transaction to transfer your assets.\",\n};\n\nexport default function getMessage(key: MessageKey): string {\n\treturn baseMessages[key];\n}\n","import { createStore } from '@xstate/store';\nimport { useSelector } from '@xstate/store/react';\nimport type { Hex } from 'viem';\nimport type { ShowTransferModalArgs } from '.';\n\nexport type TransferModalView =\n\t| 'enterReceiverAddress'\n\t| 'followWalletInstructions';\n\nexport interface TransferModalState {\n\tisOpen: boolean;\n\tchainId: number;\n\tcollectionAddress: Hex;\n\tcollectibleId: string;\n\tquantity: string;\n\treceiverAddress: string;\n\ttransferIsProcessing: boolean;\n\tview: TransferModalView;\n\thash: Hex | undefined;\n\tonSuccess: ((data: { hash: Hex }) => void) | undefined;\n\tonError: ((error: Error) => void) | undefined;\n}\n\nconst initialContext: TransferModalState = {\n\tisOpen: false,\n\tchainId: 0,\n\tcollectionAddress: '0x' as Hex,\n\tcollectibleId: '',\n\tquantity: '1',\n\treceiverAddress: '',\n\ttransferIsProcessing: false,\n\tview: 'enterReceiverAddress',\n\thash: undefined,\n\tonSuccess: undefined,\n\tonError: undefined,\n};\n\nexport const transferModalStore = createStore({\n\tcontext: initialContext,\n\ton: {\n\t\topen: (_context, event: ShowTransferModalArgs) => ({\n\t\t\t...initialContext,\n\t\t\tisOpen: true,\n\t\t\tchainId: event.chainId,\n\t\t\tcollectionAddress: event.collectionAddress,\n\t\t\tcollectibleId: event.collectibleId,\n\t\t\tview: 'enterReceiverAddress' as const,\n\t\t\tonSuccess: event.callbacks?.onSuccess,\n\t\t\tonError: event.callbacks?.onError,\n\t\t}),\n\n\t\tupdateTransferDetails: (\n\t\t\tcontext,\n\t\t\tevent: {\n\t\t\t\treceiverAddress?: string;\n\t\t\t\tquantity?: string;\n\t\t\t},\n\t\t) => ({\n\t\t\t...context,\n\t\t\t...(event.receiverAddress !== undefined && {\n\t\t\t\treceiverAddress: event.receiverAddress,\n\t\t\t}),\n\t\t\t...(event.quantity !== undefined && { quantity: event.quantity }),\n\t\t}),\n\n\t\tstartTransfer: (context) => ({\n\t\t\t...context,\n\t\t\ttransferIsProcessing: true,\n\t\t\tview: 'followWalletInstructions' as const,\n\t\t}),\n\n\t\tcompleteTransfer: (context, event: { hash: Hex }) => {\n\t\t\tif (context.onSuccess) {\n\t\t\t\tcontext.onSuccess({ hash: event.hash });\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...context,\n\t\t\t\thash: event.hash,\n\t\t\t\ttransferIsProcessing: false,\n\t\t\t};\n\t\t},\n\n\t\tfailTransfer: (context, event: { error: Error }) => {\n\t\t\tif (context.onError) {\n\t\t\t\tcontext.onError(event.error);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...context,\n\t\t\t\ttransferIsProcessing: false,\n\t\t\t\tview: 'enterReceiverAddress' as const,\n\t\t\t};\n\t\t},\n\n\t\tclose: () => initialContext,\n\t},\n});\n\n// Selector hooks\nexport const useIsOpen = () =>\n\tuseSelector(transferModalStore, (state) => state.context.isOpen);\n\nexport const useModalState = () =>\n\tuseSelector(transferModalStore, (state) => state.context);\n\nexport const useView = () =>\n\tuseSelector(transferModalStore, (state) => state.context.view);\n\nexport const useHash = () =>\n\tuseSelector(transferModalStore, (state) => state.context.hash);\n\nexport const transferDetailsSelector = transferModalStore.select((state) => ({\n\treceiverAddress: state.receiverAddress,\n\tquantity: state.quantity,\n}));\n\nexport const transferConfigSelector = transferModalStore.select((state) => ({\n\tchainId: state.chainId,\n\tcollectionAddress: state.collectionAddress,\n\tcollectibleId: state.collectibleId,\n}));\n","'use client';\n\nimport {\n\tAddIcon,\n\tIconButton,\n\tNumericInput,\n\tSubtractIcon,\n} from '@0xsequence/design-system';\nimport * as dn from 'dnum';\nimport { useEffect, useState } from 'react';\nimport { cn } from '../../../../../../utils';\n\ntype QuantityInputProps = {\n\tquantity: string;\n\tinvalidQuantity: boolean;\n\tonQuantityChange: (quantity: string) => void;\n\tonInvalidQuantityChange: (invalid: boolean) => void;\n\tdecimals: number;\n\tmaxQuantity: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n};\n\nexport default function QuantityInput({\n\tquantity,\n\tinvalidQuantity,\n\tonQuantityChange,\n\tonInvalidQuantityChange,\n\tdecimals,\n\tmaxQuantity,\n\tclassName,\n\tdisabled,\n}: QuantityInputProps) {\n\tconst dnMaxQuantity = dn.from(maxQuantity, decimals);\n\tconst dnOne = dn.from('1', decimals);\n\tconst min = decimals > 0 ? Number(`0.${'1'.padStart(decimals, '0')}`) : 0;\n\tconst dnMin = dn.from(min, decimals);\n\n\tconst [dnQuantity, setDnQuantity] = useState(dn.from(quantity, decimals));\n\n\tconst [localQuantity, setLocalQuantity] = useState(quantity);\n\n\t// Sync internal state with external prop changes\n\tuseEffect(() => {\n\t\tsetLocalQuantity(quantity);\n\t\tsetDnQuantity(dn.from(quantity, decimals));\n\t}, [quantity, decimals]);\n\n\tconst setQuantity = ({\n\t\tvalue,\n\t\tisValid,\n\t}: {\n\t\tvalue: string;\n\t\tisValid: boolean;\n\t}) => {\n\t\tsetLocalQuantity(value);\n\t\tif (isValid) {\n\t\t\tonQuantityChange(value);\n\t\t\tsetDnQuantity(dn.from(value, decimals));\n\t\t\tonInvalidQuantityChange(false);\n\t\t} else {\n\t\t\tonInvalidQuantityChange(true);\n\t\t}\n\t};\n\n\tfunction handleChangeQuantity(value: string) {\n\t\tif (!value || Number.isNaN(Number(value)) || value.endsWith('.')) {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: value,\n\t\t\t\tisValid: false,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst dnValue = dn.from(value, decimals);\n\t\tconst isBiggerThanMax = dn.greaterThan(dnValue, dnMaxQuantity);\n\t\tconst isLessThanMin = dn.lessThan(dnValue, dnMin);\n\n\t\tif (isLessThanMin) {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: value, // Trying to enter fraction starting with 0\n\t\t\t\tisValid: false,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (isBiggerThanMax) {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: maxQuantity,\n\t\t\t\tisValid: true, // Is vaid is true because we override the value\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tsetQuantity({\n\t\t\tvalue: dn.toString(dnValue, decimals),\n\t\t\tisValid: true,\n\t\t});\n\t}\n\n\tfunction handleIncrement() {\n\t\tconst newValue = dn.add(dnQuantity, dnOne);\n\t\tif (dn.greaterThanOrEqual(newValue, dnMaxQuantity)) {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: maxQuantity,\n\t\t\t\tisValid: true,\n\t\t\t});\n\t\t} else {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: dn.toString(newValue, decimals),\n\t\t\t\tisValid: true,\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction handleDecrement() {\n\t\tconst newValue = dn.subtract(dnQuantity, dnOne);\n\t\tif (dn.lessThanOrEqual(newValue, dnMin)) {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: String(min),\n\t\t\t\tisValid: true,\n\t\t\t});\n\t\t} else {\n\t\t\tsetQuantity({\n\t\t\t\tvalue: dn.toString(newValue, decimals),\n\t\t\t\tisValid: true,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full flex-col [&>label>div>div>div:has(:disabled):hover]:opacity-100 [&>label>div>div>div:has(:disabled)]:opacity-100 [&>label>div>div>div>input]:text-xs [&>label>div>div>div]:h-9 [&>label>div>div>div]:rounded [&>label>div>div>div]:pr-0 [&>label>div>div>div]:pl-3 [&>label>div>div>div]:text-xs [&>label]:gap-[2px]',\n\t\t\t\tclassName,\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t)}\n\t\t>\n\t\t\t<NumericInput\n\t\t\t\tclassName=\"w-full pl-1\"\n\t\t\t\tname={'quantity'}\n\t\t\t\tdecimals={decimals || 0}\n\t\t\t\tlabel={'Enter quantity'}\n\t\t\t\tlabelLocation=\"top\"\n\t\t\t\tcontrols={\n\t\t\t\t\t<div className=\"mr-2 flex items-center gap-1\">\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tdisabled={dn.lessThanOrEqual(dnQuantity, dnMin)}\n\t\t\t\t\t\t\tonClick={handleDecrement}\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ticon={SubtractIcon}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tdisabled={dn.greaterThanOrEqual(dnQuantity, dnMaxQuantity)}\n\t\t\t\t\t\t\tonClick={handleIncrement}\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ticon={AddIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\tvalue={localQuantity}\n\t\t\t\tonChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n\t\t\t\t\thandleChangeQuantity(e.target.value)\n\t\t\t\t}\n\t\t\t\twidth={'full'}\n\t\t\t/>\n\t\t\t{invalidQuantity && (\n\t\t\t\t<div className=\"text-negative text-sm\">Invalid quantity</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport { cn, Text } from '@0xsequence/design-system';\nimport { useState } from 'react';\nimport QuantityInput from '../../../../_internal/components/quantityInput';\nimport { transferModalStore, useModalState } from '../../../store';\n\nconst TokenQuantityInput = ({\n\tbalanceAmount,\n\tcollection,\n\tisProcessingWithWaaS,\n}: {\n\tbalanceAmount?: bigint;\n\tcollection?: { decimals?: number };\n\tisProcessingWithWaaS: boolean;\n}) => {\n\tconst modalState = useModalState();\n\tconst [invalidQuantity, setInvalidQuantity] = useState(false);\n\n\tlet insufficientBalance = true;\n\tif (balanceAmount !== undefined && modalState.quantity) {\n\t\ttry {\n\t\t\tconst quantityBigInt = BigInt(modalState.quantity);\n\t\t\tinsufficientBalance = quantityBigInt > balanceAmount;\n\t\t} catch (_e) {\n\t\t\tinsufficientBalance = true;\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col gap-3',\n\t\t\t\tisProcessingWithWaaS && 'pointer-events-none opacity-50',\n\t\t\t)}\n\t\t>\n\t\t\t<QuantityInput\n\t\t\t\tquantity={modalState.quantity}\n\t\t\t\tinvalidQuantity={invalidQuantity}\n\t\t\t\tonQuantityChange={(quantity) =>\n\t\t\t\t\ttransferModalStore.send({ type: 'updateTransferDetails', quantity })\n\t\t\t\t}\n\t\t\t\tonInvalidQuantityChange={setInvalidQuantity}\n\t\t\t\tdecimals={collection?.decimals || 0}\n\t\t\t\tmaxQuantity={balanceAmount ? String(balanceAmount) : '0'}\n\t\t\t\tclassName=\"[&>label>div>div>div>input]:text-sm [&>label>div>div>div]:h-13 [&>label>div>div>div]:rounded-xl [&>label>div>div>span]:text-sm [&>label>div>div>span]:text-text-80 [&>label]:gap-1\"\n\t\t\t/>\n\n\t\t\t<Text\n\t\t\t\tclassName=\"font-body text-xs\"\n\t\t\t\tcolor={insufficientBalance ? 'negative' : 'text50'}\n\t\t\t\tfontWeight=\"medium\"\n\t\t\t>\n\t\t\t\t{`You have ${balanceAmount?.toString() || '0'} of this item`}\n\t\t\t</Text>\n\t\t</div>\n\t);\n};\n\nexport default TokenQuantityInput;\n","'use client';\n\nimport { Button, Spinner } from '@0xsequence/design-system';\nimport { useWallet } from '../../../../../../_internal/wallet/useWallet';\nimport { useModalState } from '../../../store';\n\nconst TransferButton = ({\n\tonClick,\n\tisDisabled,\n}: {\n\tonClick: () => Promise<void>;\n\tisDisabled: boolean | undefined;\n}) => {\n\tconst { wallet } = useWallet();\n\tconst isWaaS = wallet?.isWaaS;\n\tconst { transferIsProcessing } = useModalState();\n\n\tconst label = transferIsProcessing ? (\n\t\tisWaaS ? (\n\t\t\t<div className=\"flex items-center justify-center gap-2\">\n\t\t\t\t<Spinner size=\"sm\" className=\"text-white\" />\n\t\t\t\t<span>Loading fee options</span>\n\t\t\t</div>\n\t\t) : (\n\t\t\t<div className=\"flex items-center justify-center gap-2\">\n\t\t\t\t<Spinner size=\"sm\" className=\"text-white\" />\n\t\t\t\t<span>Transferring</span>\n\t\t\t</div>\n\t\t)\n\t) : (\n\t\t'Transfer'\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\tclassName=\"flex justify-self-end px-10\"\n\t\t\tonClick={onClick}\n\t\t\tdisabled={!!isDisabled}\n\t\t\ttitle=\"Transfer\"\n\t\t\tlabel={label}\n\t\t\tvariant=\"primary\"\n\t\t\tshape=\"square\"\n\t\t\tsize=\"sm\"\n\t\t/>\n\t);\n};\n\nexport default TransferButton;\n","'use client';\n\nimport { TextInput } from '@0xsequence/design-system';\nimport { isAddress } from 'viem';\nimport { useAccount } from 'wagmi';\nimport { transferModalStore, useModalState } from '../../../store';\n\nconst MAX_WALLET_ADDRESS_LENGTH = 42;\n\nconst WalletAddressInput = () => {\n\tconst { address: connectedAddress } = useAccount();\n\tconst { receiverAddress, transferIsProcessing } = useModalState();\n\tconst isWalletAddressValid = isAddress(receiverAddress);\n\n\tconst isSelfTransfer =\n\t\tisWalletAddressValid &&\n\t\tconnectedAddress &&\n\t\treceiverAddress.toLowerCase() === connectedAddress.toLowerCase();\n\n\tconst handleChangeWalletAddress = (\n\t\tevent: React.ChangeEvent<HTMLInputElement>,\n\t) => {\n\t\ttransferModalStore.send({\n\t\t\ttype: 'updateTransferDetails',\n\t\t\treceiverAddress: event.target.value,\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className=\"[&>label>div>span]:text-sm [&>label>div>span]:text-text-80 [&>label]:gap-1\">\n\t\t\t<TextInput\n\t\t\t\tlabel=\"Wallet address\"\n\t\t\t\tlabelLocation=\"top\"\n\t\t\t\tautoFocus\n\t\t\t\tvalue={receiverAddress}\n\t\t\t\tmaxLength={MAX_WALLET_ADDRESS_LENGTH}\n\t\t\t\tonChange={handleChangeWalletAddress}\n\t\t\t\tname=\"walletAddress\"\n\t\t\t\tplaceholder=\"Enter wallet address\"\n\t\t\t\tdisabled={transferIsProcessing}\n\t\t\t/>\n\t\t\t{isSelfTransfer && (\n\t\t\t\t<div className=\"mt-1 text-negative text-sm\">\n\t\t\t\t\tYou cannot transfer to your own address\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default WalletAddressInput;\n","import { CheckmarkIcon, Spinner, Text } from '@0xsequence/design-system';\nimport { type ChainId, networks } from '@0xsequence/network';\nimport type { Hex } from 'viem';\nimport { truncateMiddle } from '../../../../../../utils';\n\ntype TransactionFooterProps = {\n\ttransactionHash: Hex | undefined;\n\torderId?: string;\n\tisConfirming: boolean;\n\tisConfirmed: boolean;\n\tisFailed: boolean;\n\tisTimeout: boolean;\n\tchainId: number;\n};\n\nexport default function TransactionFooter({\n\ttransactionHash,\n\torderId,\n\tisConfirming,\n\tisConfirmed,\n\tisFailed,\n\tisTimeout,\n\tchainId,\n}: TransactionFooterProps) {\n\tconst icon =\n\t\t((isConfirmed || orderId) && <PositiveCircle />) ||\n\t\t(isConfirming && <Spinner size=\"md\" />);\n\n\tconst title =\n\t\t((isConfirmed || orderId) && 'Transaction complete') ||\n\t\t(isConfirming && 'Processing transaction') ||\n\t\t(isFailed && 'Transaction failed') ||\n\t\t(isTimeout && 'Transaction took longer than expected');\n\n\tconst transactionUrl = `${networks[chainId as unknown as ChainId]?.blockExplorer?.rootUrl}tx/${transactionHash}`;\n\treturn (\n\t\t<div className=\"flex items-center\">\n\t\t\t{icon}\n\t\t\t<Text\n\t\t\t\tclassName=\"ml-2 grow font-body text-sm\"\n\t\t\t\tcolor=\"text50\"\n\t\t\t\tfontWeight=\"medium\"\n\t\t\t>\n\t\t\t\t{title}\n\t\t\t</Text>\n\t\t\t<a\n\t\t\t\tclassName=\"ml-2 text-right no-underline\"\n\t\t\t\thref={transactionUrl}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t>\n\t\t\t\t<Text\n\t\t\t\t\tclassName=\"text-right font-body text-sm text-violet-400\"\n\t\t\t\t\tfontWeight=\"medium\"\n\t\t\t\t>\n\t\t\t\t\t{transactionHash && truncateMiddle(transactionHash, 4, 4)}\n\t\t\t\t</Text>\n\t\t\t</a>\n\t\t</div>\n\t);\n}\n\nexport const PositiveCircle = () => (\n\t<div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[#35a554]\">\n\t\t<CheckmarkIcon size=\"xs\" color=\"white\" />\n\t</div>\n);\n","\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK8AAACuCAYAAABAzl3QAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAInSURBVHgB7dyxbUMxEAXBs6FEjagv91/AD+keeNFCMw1csmBEvJ/P53Nm4Xme2Xi/37Ph/nfeP+f8/Q5EiZcs8ZIlXrLES5Z4yRIvWeIlS7xkiZcs8ZIlXrLES5Z4yRIvWS//Ud2v3vfykiVessRLlnjJEi9Z4iVLvGSJlyzxkiVessRLlnjJEi9Z4iVLvGS9/Ed1v3j/nOPlpUu8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPGSJV6yxEuWeMmyz+v+bNjnhQviJUu8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPGSJV6yxEuWfV73Z8M+L1wQL1niJUu8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPGSJV6y7PO6Pxv2eeGCeMkSL1niJUu8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPGSZZ/X/dmwzwsXxEuWeMkSL1niJUu8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPu87s+GfV64IF6yxEuWeMkSL1niJUu8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZNnndX827PPCBfGSJV6yxEuWeMkSL1niJUu8ZImXLPGSJV6yxEuWeMkSL1niJcs+r/uzYZ8XLoiXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPGSJV6yxEuWeMkSL1n2ed2fDfu8cEG8ZImXLPGSJV6yxEuWeMkSL1niJUu8ZImXLPGSJV6y/gF97MkwfJRH7QAAAABJRU5ErkJggg==\"","'use client';\n\nimport { Text } from '@0xsequence/design-system';\nimport { formatDistanceToNow } from 'date-fns';\nimport { useEffect, useState } from 'react';\n\ntype TimeAgoProps = {\n\tdate: Date;\n};\n\nexport default function TimeAgo({ date }: TimeAgoProps) {\n\tconst [timeAgo, setTimeAgo] = useState<string>('');\n\n\tuseEffect(() => {\n\t\tconst interval = setInterval(() => {\n\t\t\tsetTimeAgo(formatDistanceToNow(date));\n\t\t}, 1000);\n\n\t\treturn () => clearInterval(interval);\n\t}, [date]);\n\n\treturn (\n\t\t<div className=\"flex grow items-center justify-end\">\n\t\t\t<Text className=\"text-sm\" color=\"text50\">\n\t\t\t\t{timeAgo}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n","import type { QueryKey } from '@tanstack/react-query';\nimport { createStore } from '@xstate/store';\nimport { useSelector } from '@xstate/store/react';\nimport type { Address, Hex } from 'viem';\nimport type { Price } from '../../../../../../types';\nimport type { TransactionType } from '../../../../../_internal/types';\nimport type { ModalCallbacks } from '../../types';\nimport type { ShowTransactionStatusModalArgs } from '.';\n\nexport type ConfirmationStatus = {\n\tisConfirming: boolean;\n\tisConfirmed: boolean;\n\tisFailed: boolean;\n\tisTimeout: boolean;\n};\n\nexport type TransactionStatus = 'PENDING' | 'SUCCESS' | 'FAILED' | 'TIMEOUT';\n\ninterface TransactionStatusModalContext {\n\tisOpen: boolean;\n\thash: Hex | undefined;\n\torderId: string | undefined;\n\tstatus: TransactionStatus;\n\ttransactionType: TransactionType | undefined;\n\tprice: Price | undefined;\n\tcollectionAddress: Address;\n\tchainId: number;\n\tcollectibleId: string;\n\tcallbacks?: ModalCallbacks;\n\tqueriesToInvalidate?: QueryKey[];\n}\n\nconst initialContext: TransactionStatusModalContext = {\n\tisOpen: false,\n\thash: undefined,\n\torderId: undefined,\n\tstatus: 'PENDING',\n\ttransactionType: undefined,\n\tprice: undefined,\n\tcollectionAddress: '' as Address,\n\tchainId: 0,\n\tcollectibleId: '',\n\tcallbacks: undefined,\n\tqueriesToInvalidate: [],\n};\n\nexport const transactionStatusModalStore = createStore({\n\tcontext: initialContext,\n\ton: {\n\t\topen: (\n\t\t\tcontext,\n\t\t\tevent: Omit<ShowTransactionStatusModalArgs, 'type'> & {\n\t\t\t\ttransactionType: TransactionType;\n\t\t\t},\n\t\t) => ({\n\t\t\t...context,\n\t\t\tisOpen: true,\n\t\t\thash: event.hash,\n\t\t\torderId: event.orderId,\n\t\t\tprice: event.price,\n\t\t\tcollectionAddress: event.collectionAddress,\n\t\t\tchainId: event.chainId,\n\t\t\tcollectibleId: event.collectibleId,\n\t\t\ttransactionType: event.transactionType,\n\t\t\tcallbacks: event.callbacks,\n\t\t\tqueriesToInvalidate: event.queriesToInvalidate,\n\t\t\tstatus: 'PENDING' as TransactionStatus,\n\t\t}),\n\n\t\tclose: () => ({\n\t\t\t...initialContext,\n\t\t}),\n\n\t\tupdateStatus: (context, event: { status: TransactionStatus }) => ({\n\t\t\t...context,\n\t\t\tstatus: event.status,\n\t\t}),\n\t},\n});\n\n// Selector hooks\nexport const useIsOpen = () =>\n\tuseSelector(transactionStatusModalStore, (state) => state.context.isOpen);\n\nexport const useTransactionModalState = () =>\n\tuseSelector(transactionStatusModalStore, (state) => state.context);\n\nexport const useTransactionHash = () =>\n\tuseSelector(transactionStatusModalStore, (state) => state.context.hash);\n\nexport const useTransactionType = () =>\n\tuseSelector(\n\t\ttransactionStatusModalStore,\n\t\t(state) => state.context.transactionType,\n\t);\n\nexport const useTransactionDetails = () =>\n\tuseSelector(transactionStatusModalStore, (state) => ({\n\t\thash: state.context.hash,\n\t\torderId: state.context.orderId,\n\t\ttransactionType: state.context.transactionType,\n\t\tstatus: state.context.status,\n\t\tchainId: state.context.chainId,\n\t}));\n\nexport const useCollectibleInfo = () =>\n\tuseSelector(transactionStatusModalStore, (state) => ({\n\t\tcollectionAddress: state.context.collectionAddress,\n\t\tcollectibleId: state.context.collectibleId,\n\t\tchainId: state.context.chainId,\n\t\tprice: state.context.price,\n\t}));\n","export const TRANSACTION_TITLES = {\n\tSELL: {\n\t\tconfirming: 'Selling',\n\t\tconfirmed: 'Sold',\n\t\tfailed: 'Sale failed',\n\t},\n\tLISTING: {\n\t\tconfirming: 'Creating listing',\n\t\tconfirmed: 'Listed',\n\t\tfailed: 'Listing failed',\n\t},\n\tOFFER: {\n\t\tconfirming: 'Creating offer',\n\t\tconfirmed: 'Offer created',\n\t\tfailed: 'Offer failed',\n\t},\n\tBUY: {\n\t\tconfirming: 'Buying',\n\t\tconfirmed: 'Bought',\n\t\tfailed: 'Purchase failed',\n\t},\n\tTRANSFER: {\n\t\tconfirming: 'Transferring',\n\t\tconfirmed: 'Transferred',\n\t\tfailed: 'Transfer failed',\n\t},\n\tCANCEL: {\n\t\tconfirming: 'Cancelling',\n\t\tconfirmed: 'Cancelled',\n\t\tfailed: 'Cancellation failed',\n\t},\n} as const;\n","import type { TransactionType } from '../../../../../_internal/types';\nimport type { ConfirmationStatus } from '../transactionStatusModal/store';\nimport { TRANSACTION_TITLES } from './consts';\n\nexport function useTransactionPreviewTitle(\n\torderId: string | undefined,\n\tstatus: ConfirmationStatus,\n\ttype?: TransactionType | undefined,\n): string {\n\tif (!type) return '';\n\n\tconst { isConfirming, isConfirmed, isFailed } = status;\n\tconst titles = TRANSACTION_TITLES[type];\n\n\tif (isConfirmed || orderId) return titles.confirmed;\n\tif (isConfirming) return titles.confirming;\n\tif (isFailed) return titles.failed;\n\n\treturn '';\n}\n","'use client';\n\nimport { Image, NetworkImage, Skeleton, Text } from '@0xsequence/design-system';\nimport type { TokenMetadata } from '@0xsequence/metadata';\nimport { type Address, formatUnits } from 'viem';\nimport type { Price } from '../../../../../../types';\nimport { useCollection } from '../../../../../hooks';\nimport ChessTileImage from '../../../../images/chess-tile.png';\nimport TimeAgo from '../timeAgo';\nimport { useTransactionType } from '../transactionStatusModal/store';\nimport { useTransactionPreviewTitle } from './useTransactionPreviewTitle';\n\ntype TransactionPreviewProps = {\n\torderId?: string;\n\tprice?: Price;\n\tcollectionAddress: Address;\n\tchainId: number;\n\tcollectible: TokenMetadata | undefined;\n\tcollectibleLoading: boolean;\n\tcurrencyImageUrl?: string;\n\tisConfirming: boolean;\n\tisConfirmed: boolean;\n\tisFailed: boolean;\n\tisTimeout: boolean;\n};\n\nconst TransactionPreview = ({\n\torderId,\n\tprice,\n\tcollectionAddress,\n\tchainId,\n\tcollectible,\n\tcollectibleLoading,\n\tcurrencyImageUrl,\n\tisConfirming,\n\tisConfirmed,\n\tisFailed,\n\tisTimeout,\n}: TransactionPreviewProps) => {\n\tconst transactionType = useTransactionType();\n\tconst title = useTransactionPreviewTitle(\n\t\torderId,\n\t\t{ isConfirmed, isConfirming, isFailed, isTimeout },\n\t\ttransactionType,\n\t);\n\tconst { data: collection, isLoading: collectionLoading } = useCollection({\n\t\tcollectionAddress,\n\t\tchainId,\n\t});\n\n\tconst collectibleImage = collectible?.image;\n\tconst collectibleName = collectible?.name;\n\tconst collectionName = collection?.name;\n\tconst priceFormatted = price\n\t\t? formatUnits(BigInt(price?.amountRaw), price?.currency.decimals)\n\t\t: undefined;\n\n\tif (collectibleLoading || collectionLoading) {\n\t\treturn (\n\t\t\t<div className=\"w-full rounded-xl\" style={{ height: 83 }}>\n\t\t\t\t<Skeleton style={{ width: '100%', height: '100%' }} />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rounded-xl bg-background-secondary p-3\"\n\t\t\tdata-testid=\"transaction-preview\"\n\t\t>\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t<Text\n\t\t\t\t\tclassName=\"mr-1 font-body text-xs\"\n\t\t\t\t\tcolor=\"text80\"\n\t\t\t\t\tfontWeight=\"medium\"\n\t\t\t\t\tdata-testid=\"transaction-preview-title\"\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</Text>\n\n\t\t\t\t<NetworkImage chainId={Number(chainId)} size=\"xs\" />\n\n\t\t\t\t{isConfirming && <TimeAgo date={new Date()} />}\n\t\t\t</div>\n\t\t\t<div className=\"mt-2 flex items-center\">\n\t\t\t\t<Image\n\t\t\t\t\tclassName=\"mr-3 h-9 w-9 rounded-sm\"\n\t\t\t\t\tsrc={collectibleImage || ChessTileImage}\n\t\t\t\t\talt={collectibleName}\n\t\t\t\t\tstyle={{ objectFit: 'cover' }}\n\t\t\t\t\tdata-testid=\"transaction-preview-image\"\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"flex flex-col items-start gap-0.5\">\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"font-body text-xs\"\n\t\t\t\t\t\tcolor=\"text80\"\n\t\t\t\t\t\tfontWeight=\"medium\"\n\t\t\t\t\t\tdata-testid=\"transaction-preview-collection-name\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{collectionName}\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"font-body text-xs\"\n\t\t\t\t\t\tcolor=\"text100\"\n\t\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\t\tdata-testid=\"transaction-preview-collectible-name\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{collectibleName}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\n\t\t\t\t{price && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex grow items-center justify-end gap-1\"\n\t\t\t\t\t\tdata-testid=\"transaction-preview-price\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Image className=\"h-3 w-3\" src={currencyImageUrl} />\n\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tclassName=\"font-body text-xs\"\n\t\t\t\t\t\t\tcolor=\"text100\"\n\t\t\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{priceFormatted} {price?.currency.symbol}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default TransactionPreview;\n","'use client';\n\nimport { TransactionStatus as IndexerTransactionStatus } from '@0xsequence/indexer';\nimport { skipToken, useQuery } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\nimport { type Hex, WaitForTransactionReceiptTimeoutError } from 'viem';\nimport { useWallet } from '../../../../../../_internal/wallet/useWallet';\nimport type { ModalCallbacks } from '../../../types';\nimport type { TransactionStatus } from '../store';\n\nconst useTransactionStatus = (\n\thash: Hex | undefined,\n\tchainId: number,\n\tcallbacks?: ModalCallbacks,\n) => {\n\tconst { wallet } = useWallet();\n\tconst [status, setStatus] = useState<TransactionStatus>(\n\t\thash ? 'PENDING' : 'SUCCESS',\n\t);\n\n\tconst { data: confirmationResult } = useQuery({\n\t\tqueryKey: ['transaction-confirmation', hash, chainId, !!wallet],\n\t\tqueryFn:\n\t\t\t!!wallet && hash\n\t\t\t\t? async () =>\n\t\t\t\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId))\n\t\t\t\t: skipToken,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!hash) {\n\t\t\tsetStatus('SUCCESS');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!confirmationResult) {\n\t\t\tsetStatus('PENDING');\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\tconfirmationResult.txnStatus === IndexerTransactionStatus.SUCCESSFUL\n\t\t\t) {\n\t\t\t\tsetStatus('SUCCESS');\n\t\t\t\tcallbacks?.onSuccess?.({ hash: hash || '0x0' });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetStatus('FAILED');\n\t\t\tcallbacks?.onError?.(new Error('Transaction failed'));\n\t\t} catch (error) {\n\t\t\tsetStatus(\n\t\t\t\terror instanceof WaitForTransactionReceiptTimeoutError\n\t\t\t\t\t? 'TIMEOUT'\n\t\t\t\t\t: 'FAILED',\n\t\t\t);\n\t\t\tcallbacks?.onError?.(error as Error);\n\t\t}\n\t}, [confirmationResult, hash]);\n\n\treturn status;\n};\n\nexport default useTransactionStatus;\n","import { TransactionType } from '../../../../../../_internal/types';\n\nexport function getFormattedType(\n\ttransactionType: TransactionType,\n\tverb = false,\n): string {\n\tswitch (transactionType) {\n\t\tcase TransactionType.TRANSFER:\n\t\t\treturn verb ? 'transferred' : 'transfer';\n\t\tcase TransactionType.LISTING:\n\t\t\treturn verb ? 'listed' : 'listing';\n\t\tcase TransactionType.BUY:\n\t\t\treturn verb ? 'purchased' : 'purchase';\n\t\tcase TransactionType.SELL:\n\t\t\treturn verb ? 'sold' : 'sale';\n\t\tcase TransactionType.CANCEL:\n\t\t\treturn verb ? 'cancelled' : 'cancellation';\n\t\tcase TransactionType.OFFER:\n\t\t\treturn verb ? 'offered' : 'offer';\n\t\tdefault:\n\t\t\treturn 'transaction';\n\t}\n}\n","import { formatUnits } from 'viem';\nimport type { Price } from '../../../../../../../types';\nimport { TransactionType } from '../../../../../../_internal';\nimport type { TransactionStatus } from '../store';\nimport { getFormattedType } from './getFormattedType';\n\nexport function getTransactionStatusModalMessage({\n\ttransactionStatus,\n\ttransactionType,\n\tcollectibleName,\n\torderId,\n\tprice,\n}: {\n\ttransactionStatus: TransactionStatus;\n\ttransactionType: TransactionType;\n\tcollectibleName: string;\n\torderId?: string;\n\tprice?: Price;\n}): string {\n\t// without this, the text will be \"Your cancellation CollectibleXXX has failed.\" which sounds weird\n\tconst hideCollectibleName = transactionType === 'CANCEL';\n\tconst formattedPrice = price\n\t\t? formatUnits(BigInt(price.amountRaw), price.currency.decimals)\n\t\t: '';\n\n\tif (orderId) {\n\t\treturn `You just ${getFormattedType(transactionType, true)}${!hideCollectibleName ? ` ${collectibleName}` : ''}. It's been confirmed on the blockchain!`;\n\t}\n\n\tif (transactionType === TransactionType.OFFER) {\n\t\treturn `You just offered ${formattedPrice} ${price?.currency.symbol} for ${collectibleName}. It's been confirmed on the blockchain!`;\n\t}\n\n\tswitch (transactionStatus) {\n\t\tcase 'PENDING':\n\t\t\treturn `You just ${getFormattedType(transactionType, true)}${!hideCollectibleName ? ` ${collectibleName}` : ''}. It should be confirmed on the blockchain shortly.`;\n\t\tcase 'SUCCESS':\n\t\t\treturn `You just ${getFormattedType(transactionType, true)}${!hideCollectibleName ? ` ${collectibleName}` : ''}. It's been confirmed on the blockchain!`;\n\t\tcase 'FAILED':\n\t\t\treturn `Your ${getFormattedType(transactionType)} has failed.`;\n\t\tcase 'TIMEOUT':\n\t\t\treturn `Your ${getFormattedType(transactionType)} takes too long. Click the link below to track it on the explorer.`;\n\t\tdefault:\n\t\t\treturn 'Your transaction is processing';\n\t}\n}\n","import type { TransactionType } from '../../../../../../_internal/types';\nimport type { TransactionStatus } from '../store';\nimport { getFormattedType } from './getFormattedType';\n\nexport function getTransactionStatusModalTitle({\n\ttransactionStatus,\n\ttransactionType,\n\torderId,\n}: {\n\ttransactionStatus: TransactionStatus;\n\ttransactionType: TransactionType | undefined;\n\torderId?: string;\n}): string {\n\tif (transactionType === undefined) {\n\t\treturn '';\n\t}\n\tif (orderId) {\n\t\treturn `Your ${getFormattedType(transactionType)} has processed`;\n\t}\n\n\tswitch (transactionStatus) {\n\t\tcase 'PENDING':\n\t\t\treturn `Your ${getFormattedType(transactionType)} is processing`;\n\t\tcase 'SUCCESS':\n\t\t\treturn `Your ${getFormattedType(transactionType)} has processed`;\n\t\tcase 'FAILED':\n\t\t\treturn `Your ${getFormattedType(transactionType)} has failed`;\n\t\tcase 'TIMEOUT':\n\t\t\treturn `Your ${getFormattedType(transactionType)} takes too long`;\n\t\tdefault:\n\t\t\treturn 'Your transaction is processing';\n\t}\n}\n\nexport function getTransactionStatusModalSpinnerTitle({\n\ttransactionStatus,\n}: {\n\ttransactionStatus: TransactionStatus;\n}): string {\n\tswitch (transactionStatus) {\n\t\tcase 'PENDING':\n\t\t\treturn 'Processing transaction';\n\t\tcase 'SUCCESS':\n\t\t\treturn 'Transaction completed';\n\t\tcase 'FAILED':\n\t\t\treturn 'Transaction failed';\n\t\tcase 'TIMEOUT':\n\t\t\treturn 'Taking too long';\n\t\tdefault:\n\t\t\treturn 'Processing transaction';\n\t}\n}\n","'use client';\n\nimport { Modal, Skeleton, Text } from '@0xsequence/design-system';\nimport type { ChainId } from '@0xsequence/network';\nimport type { QueryKey } from '@tanstack/react-query';\nimport type { Address, Hex } from 'viem';\nimport type { Price } from '../../../../../../types';\nimport { getQueryClient } from '../../../../../_internal';\nimport type { TransactionType } from '../../../../../_internal/types';\nimport { useCollectible } from '../../../../../hooks';\nimport type { ModalCallbacks } from '../../types';\nimport { MODAL_OVERLAY_PROPS } from '../consts';\nimport { selectWaasFeeOptionsStore } from '../selectWaasFeeOptions/store';\nimport TransactionFooter from '../transaction-footer';\nimport TransactionPreview from '../transactionPreview';\nimport useTransactionStatus from './hooks/useTransactionStatus';\nimport {\n\ttransactionStatusModalStore,\n\tuseIsOpen,\n\tuseTransactionModalState,\n} from './store';\nimport { getTransactionStatusModalMessage } from './util/getMessage';\nimport { getTransactionStatusModalTitle } from './util/getTitle';\n\nexport type ShowTransactionStatusModalArgs = {\n\thash?: Hex;\n\torderId?: string;\n\tprice?: Price;\n\tcollectionAddress: Address;\n\tchainId: number;\n\tcollectibleId: string;\n\ttype: TransactionType;\n\tcallbacks?: ModalCallbacks;\n\tqueriesToInvalidate?: QueryKey[];\n};\n\nconst invalidateQueries = async (queriesToInvalidate?: QueryKey[]) => {\n\tconst queryClient = getQueryClient();\n\tif (!queriesToInvalidate) {\n\t\t// Invalidate everything by default\n\t\tqueryClient.invalidateQueries();\n\t\treturn;\n\t}\n\tfor (const queryKey of queriesToInvalidate) {\n\t\tawait queryClient.invalidateQueries({ queryKey });\n\t}\n};\n\nexport const useTransactionStatusModal = () => {\n\treturn {\n\t\tshow: (args: ShowTransactionStatusModalArgs) => {\n\t\t\tconst { type: transactionType, ...rest } = args;\n\t\t\ttransactionStatusModalStore.send({\n\t\t\t\ttype: 'open',\n\t\t\t\ttransactionType,\n\t\t\t\t...rest,\n\t\t\t});\n\t\t},\n\t\tclose: () => {\n\t\t\ttransactionStatusModalStore.send({ type: 'close' });\n\t\t},\n\t};\n};\n\nconst TransactionStatusModal = () => {\n\tconst isOpen = useIsOpen();\n\treturn isOpen ? <TransactionStatusModalContent /> : null;\n};\n\nfunction TransactionStatusModalContent() {\n\tconst {\n\t\ttransactionType: type,\n\t\thash,\n\t\torderId,\n\t\tprice,\n\t\tcollectionAddress,\n\t\tchainId,\n\t\tcollectibleId,\n\t\tcallbacks,\n\t\tqueriesToInvalidate,\n\t} = useTransactionModalState();\n\n\tconst { data: collectible, isLoading: collectibleLoading } = useCollectible({\n\t\tcollectionAddress,\n\t\tchainId,\n\t\tcollectibleId,\n\t});\n\n\tconst transactionStatus = useTransactionStatus(hash, chainId, callbacks);\n\n\tconst title = getTransactionStatusModalTitle({\n\t\ttransactionStatus,\n\t\ttransactionType: type,\n\t\torderId,\n\t});\n\n\tconst message = type\n\t\t? getTransactionStatusModalMessage({\n\t\t\t\ttransactionStatus,\n\t\t\t\ttransactionType: type,\n\t\t\t\tcollectibleName: collectible?.name || '',\n\t\t\t\torderId,\n\t\t\t\tprice,\n\t\t\t})\n\t\t: '';\n\n\tconst handleClose = () => {\n\t\tinvalidateQueries(queriesToInvalidate);\n\t\tif (selectWaasFeeOptionsStore.getSnapshot().context.isVisible) {\n\t\t\tselectWaasFeeOptionsStore.send({ type: 'hide' });\n\t\t}\n\n\t\ttransactionStatusModalStore.send({ type: 'close' });\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\tisDismissible={true}\n\t\t\tonClose={handleClose}\n\t\t\tsize=\"sm\"\n\t\t\toverlayProps={MODAL_OVERLAY_PROPS}\n\t\t\tdata-testid=\"transaction-status-modal\"\n\t\t>\n\t\t\t<div className=\"grid flex-col gap-6 p-7\">\n\t\t\t\t{title ? (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"font-body text-xl\"\n\t\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\t\tcolor=\"text100\"\n\t\t\t\t\t\tdata-testid=\"transaction-status-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\t<Skeleton\n\t\t\t\t\t\tclassName=\"h-6 w-16\"\n\t\t\t\t\t\tdata-testid=\"transaction-modal-title-skeleton\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{message ? (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"font-body text-sm\"\n\t\t\t\t\t\tcolor=\"text80\"\n\t\t\t\t\t\tdata-testid=\"transaction-status-message\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\t<Skeleton\n\t\t\t\t\t\tclassName=\"h-4 w-20\"\n\t\t\t\t\t\tdata-testid=\"transaction-modal-content-skeleton\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<TransactionPreview\n\t\t\t\t\torderId={orderId}\n\t\t\t\t\tprice={price}\n\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t\tcollectible={collectible}\n\t\t\t\t\tcollectibleLoading={collectibleLoading}\n\t\t\t\t\tcurrencyImageUrl={price?.currency.imageUrl}\n\t\t\t\t\tisConfirming={transactionStatus === 'PENDING'}\n\t\t\t\t\tisConfirmed={transactionStatus === 'SUCCESS'}\n\t\t\t\t\tisFailed={transactionStatus === 'FAILED'}\n\t\t\t\t\tisTimeout={transactionStatus === 'TIMEOUT'}\n\t\t\t\t/>\n\n\t\t\t\t<TransactionFooter\n\t\t\t\t\ttransactionHash={hash}\n\t\t\t\t\torderId={orderId}\n\t\t\t\t\tisConfirming={transactionStatus === 'PENDING'}\n\t\t\t\t\tisConfirmed={transactionStatus === 'SUCCESS'}\n\t\t\t\t\tisFailed={transactionStatus === 'FAILED'}\n\t\t\t\t\tisTimeout={transactionStatus === 'TIMEOUT'}\n\t\t\t\t\tchainId={chainId as unknown as ChainId}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n\nexport default TransactionStatusModal;\n","import { useWaasFeeOptions } from '@0xsequence/connect';\nimport type { Address, Hex } from 'viem';\nimport { ContractType } from '../../../../../../types';\nimport { InvalidContractTypeError } from '../../../../../../utils/_internal/error/transaction';\nimport { balanceQueries, collectableKeys } from '../../../../../_internal';\nimport { TransactionType } from '../../../../../_internal/types';\nimport { useWallet } from '../../../../../_internal/wallet/useWallet';\nimport { useCollection, useTransferTokens } from '../../../../../hooks';\nimport { useTransactionStatusModal } from '../../../_internal/components/transactionStatusModal';\nimport { transferModalStore, useModalState } from '../../store';\n\nconst useHandleTransfer = () => {\n\tconst {\n\t\treceiverAddress,\n\t\tcollectionAddress,\n\t\tcollectibleId,\n\t\tquantity,\n\t\tchainId,\n\t} = useModalState();\n\n\tconst { transferTokensAsync } = useTransferTokens();\n\tconst { show: showTransactionStatusModal } = useTransactionStatusModal();\n\tconst { wallet } = useWallet();\n\tconst [pendingFeeOptionConfirmation] = useWaasFeeOptions();\n\n\tconst { data: collection } = useCollection({\n\t\tcollectionAddress,\n\t\tchainId,\n\t});\n\n\tconst collectionType = collection?.type;\n\n\tconst getHash = async (): Promise<Hex> => {\n\t\tconst baseParams = {\n\t\t\treceiverAddress: receiverAddress as Address,\n\t\t\tcollectionAddress,\n\t\t\ttokenId: collectibleId,\n\t\t\tchainId,\n\t\t};\n\n\t\tif (collectionType === ContractType.ERC721) {\n\t\t\treturn await transferTokensAsync({\n\t\t\t\t...baseParams,\n\t\t\t\tcontractType: ContractType.ERC721,\n\t\t\t});\n\t\t}\n\n\t\t// For ERC1155\n\t\treturn await transferTokensAsync({\n\t\t\t...baseParams,\n\t\t\tcontractType: ContractType.ERC1155,\n\t\t\tquantity: String(quantity),\n\t\t});\n\t};\n\n\tconst transfer = async (): Promise<void> => {\n\t\tif (\n\t\t\tcollectionType !== ContractType.ERC721 &&\n\t\t\tcollectionType !== ContractType.ERC1155\n\t\t) {\n\t\t\tthrow new InvalidContractTypeError(collectionType);\n\t\t}\n\n\t\tif (wallet?.isWaaS && pendingFeeOptionConfirmation) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst hash = await getHash();\n\n\t\t\ttransferModalStore.send({ type: 'completeTransfer', hash });\n\t\t\ttransferModalStore.send({ type: 'close' });\n\n\t\t\tshowTransactionStatusModal({\n\t\t\t\thash,\n\t\t\t\tcollectionAddress,\n\t\t\t\tchainId,\n\t\t\t\tcollectibleId,\n\t\t\t\ttype: TransactionType.TRANSFER,\n\t\t\t\tqueriesToInvalidate: [\n\t\t\t\t\tbalanceQueries.all,\n\t\t\t\t\tbalanceQueries.collectionBalanceDetails,\n\t\t\t\t\tcollectableKeys.userBalances,\n\t\t\t\t],\n\t\t\t});\n\t\t} catch (error) {\n\t\t\ttransferModalStore.send({\n\t\t\t\ttype: 'failTransfer',\n\t\t\t\terror: error as Error,\n\t\t\t});\n\t\t}\n\t};\n\n\treturn { transfer };\n};\n\nexport default useHandleTransfer;\n","'use client';\n\nimport { Text } from '@0xsequence/design-system';\nimport { isAddress } from 'viem';\nimport { useAccount } from 'wagmi';\nimport type { FeeOption } from '../../../../../../types/waas-types';\nimport { compareAddress } from '../../../../../../utils';\nimport { useCollection, useListBalances } from '../../../../..';\nimport { ContractType } from '../../../../../_internal';\nimport AlertMessage from '../../../_internal/components/alertMessage';\nimport {\n\tselectWaasFeeOptionsStore,\n\tuseSelectWaasFeeOptionsStore,\n} from '../../../_internal/components/selectWaasFeeOptions/store';\nimport { useSelectWaasFeeOptions } from '../../../_internal/hooks/useSelectWaasFeeOptions';\nimport getMessage from '../../messages';\nimport { transferModalStore, useModalState } from '../../store';\nimport TokenQuantityInput from './_components/TokenQuantityInput';\nimport TransferButton from './_components/TransferButton';\nimport WalletAddressInput from './_components/WalletAddressInput';\nimport useHandleTransfer from './useHandleTransfer';\n\nconst EnterWalletAddressView = () => {\n\tconst { address: connectedAddress } = useAccount();\n\tconst {\n\t\tcollectionAddress,\n\t\tcollectibleId,\n\t\tchainId,\n\t\tquantity,\n\t\treceiverAddress,\n\t\ttransferIsProcessing,\n\t} = useModalState();\n\n\tconst isWalletAddressValid = isAddress(receiverAddress);\n\tconst { isVisible: feeOptionsVisible, selectedFeeOption } =\n\t\tuseSelectWaasFeeOptionsStore();\n\tconst {\n\t\tisWaaS,\n\t\tisProcessingWithWaaS,\n\t\tshouldHideActionButton: shouldHideTransferButton,\n\t} = useSelectWaasFeeOptions({\n\t\tisProcessing: transferIsProcessing,\n\t\tfeeOptionsVisible,\n\t\tselectedFeeOption: selectedFeeOption as FeeOption,\n\t});\n\n\tconst isSelfTransfer =\n\t\tisWalletAddressValid &&\n\t\tconnectedAddress &&\n\t\tcompareAddress(receiverAddress, connectedAddress);\n\n\tconst { data: tokenBalance } = useListBalances({\n\t\tchainId,\n\t\tcontractAddress: collectionAddress,\n\t\ttokenId: collectibleId,\n\t\taccountAddress: connectedAddress,\n\t\tquery: { enabled: !!connectedAddress },\n\t});\n\n\tconst balanceAmount = tokenBalance?.pages[0].balances[0].balance;\n\n\tlet insufficientBalance = true;\n\tif (balanceAmount !== undefined && quantity) {\n\t\ttry {\n\t\t\tconst quantityBigInt = BigInt(quantity);\n\t\t\tinsufficientBalance = quantityBigInt > BigInt(balanceAmount);\n\t\t} catch (_e) {\n\t\t\tinsufficientBalance = true;\n\t\t}\n\t}\n\n\tconst { data: collection } = useCollection({\n\t\tcollectionAddress,\n\t\tchainId,\n\t});\n\n\tconst { transfer } = useHandleTransfer();\n\n\tconst onTransferClick = async () => {\n\t\ttransferModalStore.send({ type: 'startTransfer' });\n\n\t\ttry {\n\t\t\tif (isWaaS) {\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'show' });\n\t\t\t}\n\n\t\t\tawait transfer();\n\t\t} catch (error) {\n\t\t\tconsole.error('Transfer failed:', error);\n\t\t}\n\t};\n\n\tconst isErc1155 = collection?.type === ContractType.ERC1155;\n\tconst showQuantityInput = isErc1155 && !!balanceAmount;\n\n\tconst isTransferDisabled =\n\t\ttransferIsProcessing ||\n\t\t!isWalletAddressValid ||\n\t\tinsufficientBalance ||\n\t\t!quantity ||\n\t\tNumber(quantity) === 0 ||\n\t\tisSelfTransfer;\n\n\treturn (\n\t\t<div className=\"grid grow gap-6\">\n\t\t\t<Text className=\"font-body text-xl\" color=\"white\" fontWeight=\"bold\">\n\t\t\t\tTransfer your item\n\t\t\t</Text>\n\n\t\t\t<div className=\"flex flex-col gap-3\">\n\t\t\t\t<AlertMessage\n\t\t\t\t\tmessage={getMessage('enterReceiverAddress')}\n\t\t\t\t\ttype=\"warning\"\n\t\t\t\t/>\n\n\t\t\t\t<WalletAddressInput />\n\n\t\t\t\t{showQuantityInput && (\n\t\t\t\t\t<TokenQuantityInput\n\t\t\t\t\t\tbalanceAmount={balanceAmount ? BigInt(balanceAmount) : undefined}\n\t\t\t\t\t\tcollection={collection}\n\t\t\t\t\t\tisProcessingWithWaaS={isProcessingWithWaaS ?? false}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!shouldHideTransferButton && (\n\t\t\t\t<TransferButton\n\t\t\t\t\tonClick={onTransferClick}\n\t\t\t\t\tisDisabled={isTransferDisabled}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default EnterWalletAddressView;\n","import { Button, Text } from '@0xsequence/design-system';\nimport { observer } from '@legendapp/state/react';\nimport AlertMessage from '../../../_internal/components/alertMessage';\nimport getMessage from '../../messages';\n\nconst FollowWalletInstructionsView = observer(() => {\n\treturn (\n\t\t<div className=\"grid grow gap-6\">\n\t\t\t<Text className=\"font-body text-xl\" color=\"white\" fontWeight=\"bold\">\n\t\t\t\tTransfer your item\n\t\t\t</Text>\n\t\t\t<div className=\"flex flex-col gap-3\">\n\t\t\t\t<AlertMessage\n\t\t\t\t\tmessage={getMessage('followWalletInstructions')}\n\t\t\t\t\ttype=\"info\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\tclassName=\"flex justify-self-end px-10\"\n\t\t\t\tdisabled={true}\n\t\t\t\ttitle=\"Transfer\"\n\t\t\t\tlabel=\"Transfer\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\tshape=\"square\"\n\t\t\t\tsize=\"sm\"\n\t\t\t/>\n\t\t</div>\n\t);\n});\n\nexport default FollowWalletInstructionsView;\n","'use client';\n\nimport { Modal } from '@0xsequence/design-system';\nimport type { Address } from 'viem';\nimport { useAccount, useSwitchChain } from 'wagmi';\nimport type { FeeOption } from '../../../../types/waas-types';\nimport type { CollectionType } from '../../../_internal';\nimport { useWallet } from '../../../_internal/wallet/useWallet';\nimport { MODAL_OVERLAY_PROPS } from '../_internal/components/consts';\nimport SelectWaasFeeOptions from '../_internal/components/selectWaasFeeOptions';\nimport {\n\tselectWaasFeeOptionsStore,\n\tuseSelectWaasFeeOptionsStore,\n} from '../_internal/components/selectWaasFeeOptions/store';\nimport { useSwitchChainModal } from '../_internal/components/switchChainModal';\nimport { useSelectWaasFeeOptions } from '../_internal/hooks/useSelectWaasFeeOptions';\nimport type { ModalCallbacks } from '../_internal/types';\nimport EnterWalletAddressView from './_views/enterWalletAddress';\nimport FollowWalletInstructionsView from './_views/followWalletInstructions';\nimport { transferModalStore, useIsOpen, useModalState, useView } from './store';\n\nexport type ShowTransferModalArgs = {\n\tcollectionAddress: Address;\n\tcollectibleId: string;\n\tchainId: number;\n\tcollectionType?: CollectionType;\n\tcallbacks?: ModalCallbacks;\n};\n\nexport const useTransferModal = () => {\n\tconst { chainId: accountChainId } = useAccount();\n\tconst { show: showSwitchNetworkModal } = useSwitchChainModal();\n\tconst { wallet } = useWallet();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst openModal = (args: ShowTransferModalArgs) => {\n\t\ttransferModalStore.send({ type: 'open', ...args });\n\t};\n\n\tconst handleShowModal = (args: ShowTransferModalArgs) => {\n\t\tconst targetChainId = Number(args.chainId);\n\t\tconst isSameChain = accountChainId === targetChainId;\n\n\t\tif (!isSameChain) {\n\t\t\tif (wallet?.isWaaS) {\n\t\t\t\tswitchChain({ chainId: targetChainId });\n\n\t\t\t\topenModal(args);\n\t\t\t} else {\n\t\t\t\tshowSwitchNetworkModal({\n\t\t\t\t\tchainIdToSwitchTo: targetChainId,\n\t\t\t\t\tonSuccess: () => openModal(args),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\topenModal(args);\n\t};\n\n\treturn {\n\t\tshow: handleShowModal,\n\t\tclose: () => transferModalStore.send({ type: 'close' }),\n\t};\n};\n\nconst TransactionModalView = () => {\n\tconst view = useView();\n\n\tswitch (view) {\n\t\tcase 'enterReceiverAddress':\n\t\t\treturn <EnterWalletAddressView />;\n\t\tcase 'followWalletInstructions':\n\t\t\treturn <FollowWalletInstructionsView />;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nconst TransferModal = () => {\n\tconst isOpen = useIsOpen();\n\tconst modalState = useModalState();\n\tconst { isVisible: feeOptionsVisible, selectedFeeOption } =\n\t\tuseSelectWaasFeeOptionsStore();\n\tconst { waasFeeOptionsShown } = useSelectWaasFeeOptions({\n\t\tisProcessing: modalState.transferIsProcessing,\n\t\tfeeOptionsVisible,\n\t\tselectedFeeOption: selectedFeeOption as FeeOption,\n\t});\n\n\tif (!isOpen) return null;\n\n\treturn (\n\t\t<Modal\n\t\t\tisDismissible={true}\n\t\t\tonClose={() => {\n\t\t\t\ttransferModalStore.send({ type: 'close' });\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'hide' });\n\t\t\t}}\n\t\t\tsize=\"sm\"\n\t\t\toverlayProps={MODAL_OVERLAY_PROPS}\n\t\t\tcontentProps={{\n\t\t\t\tstyle: {\n\t\t\t\t\theight: 'auto',\n\t\t\t\t\toverflow: 'auto',\n\t\t\t\t},\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"flex w-full flex-col p-7\">\n\t\t\t\t<TransactionModalView />\n\t\t\t</div>\n\n\t\t\t{waasFeeOptionsShown && (\n\t\t\t\t<SelectWaasFeeOptions\n\t\t\t\t\tchainId={Number(modalState.chainId)}\n\t\t\t\t\tonCancel={() => {\n\t\t\t\t\t\ttransferModalStore.send({\n\t\t\t\t\t\t\ttype: 'failTransfer',\n\t\t\t\t\t\t\terror: new Error('Transfer cancelled'),\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t\ttitleOnConfirm=\"Processing transfer...\"\n\t\t\t\t\tclassName=\"p-7 pt-0\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Modal>\n\t);\n};\n\nexport { TransferModal };\n","'use client';\n\nimport type { Address } from 'viem';\nimport { CollectibleCardAction } from '../../../../../../types';\nimport type { Order, OrderbookKind } from '../../../../../_internal';\nimport { useCreateListingModal } from '../../../../modals/CreateListingModal';\nimport { useSellModal } from '../../../../modals/SellModal';\nimport { useTransferModal } from '../../../../modals/TransferModal';\nimport { ActionButtonBody } from './ActionButtonBody';\n\ntype OwnerActionsProps = {\n\taction: CollectibleCardAction;\n\ttokenId: string;\n\tcollectionAddress: Address;\n\tchainId: number;\n\torderbookKind?: OrderbookKind;\n\thighestOffer?: Order;\n};\n\nexport function OwnerActions({\n\taction,\n\ttokenId,\n\tcollectionAddress,\n\tchainId,\n\torderbookKind,\n\thighestOffer,\n}: OwnerActionsProps) {\n\tconst { show: showCreateListingModal } = useCreateListingModal();\n\tconst { show: showSellModal } = useSellModal();\n\tconst { show: showTransferModal } = useTransferModal();\n\n\tif (action === CollectibleCardAction.LIST) {\n\t\treturn (\n\t\t\t<ActionButtonBody\n\t\t\t\tlabel=\"Create listing\"\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tonClick={() =>\n\t\t\t\t\tshowCreateListingModal({\n\t\t\t\t\t\tcollectionAddress: collectionAddress as Address,\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\tcollectibleId: tokenId,\n\t\t\t\t\t\torderbookKind,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (action === CollectibleCardAction.SELL && highestOffer) {\n\t\treturn (\n\t\t\t<ActionButtonBody\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tlabel=\"Sell\"\n\t\t\t\tonClick={() =>\n\t\t\t\t\tshowSellModal({\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\ttokenId,\n\t\t\t\t\t\torder: highestOffer,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (action === CollectibleCardAction.TRANSFER) {\n\t\treturn (\n\t\t\t<ActionButtonBody\n\t\t\t\tlabel=\"Transfer\"\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tonClick={() =>\n\t\t\t\t\tshowTransferModal({\n\t\t\t\t\t\tcollectionAddress: collectionAddress as Address,\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\tcollectibleId: tokenId,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n}\n","'use client';\n\nimport { useEffect } from 'react';\nimport { CollectibleCardAction } from '../../../../../../types';\nimport { useWallet } from '../../../../../_internal/wallet/useWallet';\nimport { useActionButtonStore } from '../store';\n\ntype UseActionButtonLogicProps = {\n\ttokenId: string;\n\towned?: boolean;\n\taction: CollectibleCardAction;\n\tonCannotPerformAction?: (\n\t\taction: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,\n\t) => void;\n};\n\nexport const useActionButtonLogic = ({\n\ttokenId,\n\towned,\n\taction,\n\tonCannotPerformAction,\n}: UseActionButtonLogicProps) => {\n\tconst { wallet } = useWallet();\n\tconst address = wallet?.address;\n\tconst actionsThatOwnersCannotPerform = [\n\t\tCollectibleCardAction.BUY,\n\t\tCollectibleCardAction.OFFER,\n\t];\n\tconst { pendingAction, clearPendingAction, executePendingAction } =\n\t\tuseActionButtonStore();\n\tconst pendingActionType = pendingAction?.type;\n\n\t// Handle owner restrictions\n\tuseEffect(() => {\n\t\tif (\n\t\t\towned &&\n\t\t\tpendingAction &&\n\t\t\taddress &&\n\t\t\tactionsThatOwnersCannotPerform.includes(action) &&\n\t\t\tpendingAction?.collectibleId === tokenId\n\t\t) {\n\t\t\tonCannotPerformAction?.(\n\t\t\t\tpendingActionType as\n\t\t\t\t\t| CollectibleCardAction.BUY\n\t\t\t\t\t| CollectibleCardAction.OFFER,\n\t\t\t);\n\t\t\tclearPendingAction();\n\t\t}\n\t}, [\n\t\towned,\n\t\tpendingAction,\n\t\taddress,\n\t\taction,\n\t\ttokenId,\n\t\tonCannotPerformAction,\n\t\tpendingActionType,\n\t\tclearPendingAction,\n\t]);\n\n\t// Execute pending action when user becomes connected\n\tuseEffect(() => {\n\t\tif (\n\t\t\taddress &&\n\t\t\t!owned &&\n\t\t\tpendingAction &&\n\t\t\tpendingAction?.collectibleId === tokenId\n\t\t) {\n\t\t\texecutePendingAction();\n\t\t\tclearPendingAction();\n\t\t}\n\t}, [\n\t\taddress,\n\t\towned,\n\t\ttokenId,\n\t\tpendingAction,\n\t\texecutePendingAction,\n\t\tclearPendingAction,\n\t]);\n\n\tconst shouldShowAction = !address\n\t\t? [CollectibleCardAction.BUY, CollectibleCardAction.OFFER].includes(action)\n\t\t: true;\n\n\tconst isOwnerAction =\n\t\taddress &&\n\t\towned &&\n\t\t[\n\t\t\tCollectibleCardAction.LIST,\n\t\t\tCollectibleCardAction.TRANSFER,\n\t\t\tCollectibleCardAction.SELL,\n\t\t].includes(action);\n\n\treturn {\n\t\taddress,\n\t\tshouldShowAction,\n\t\tisOwnerAction,\n\t};\n};\n","'use client';\n\nimport type { Address } from 'viem';\nimport type {\n\tCollectibleCardAction,\n\tMarketplaceType,\n} from '../../../../../types';\nimport type { Order, OrderbookKind } from '../../../../_internal';\nimport { NonOwnerActions } from './components/NonOwnerActions';\nimport { OwnerActions } from './components/OwnerActions';\nimport { useActionButtonLogic } from './hooks/useActionButtonLogic';\n\ntype ActionButtonProps = {\n\tchainId: number;\n\tcollectionAddress: Address;\n\ttokenId: string;\n\torderbookKind?: OrderbookKind;\n\tisTransfer?: boolean;\n\taction: CollectibleCardAction;\n\towned?: boolean;\n\thighestOffer?: Order;\n\tlowestListing?: Order;\n\tonCannotPerformAction?: (\n\t\taction: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,\n\t) => void;\n\tmarketplaceType: MarketplaceType;\n\tsalesContractAddress?: Address;\n\tprioritizeOwnerActions?: boolean;\n\tsalePrice?: {\n\t\tamount: string;\n\t\tcurrencyAddress: Address;\n\t};\n\tquantityDecimals?: number;\n\tquantityRemaining?: number;\n\tunlimitedSupply?: boolean;\n};\n\nexport function ActionButton({\n\tcollectionAddress,\n\tchainId,\n\ttokenId,\n\torderbookKind,\n\taction,\n\towned,\n\thighestOffer,\n\tlowestListing,\n\tonCannotPerformAction,\n\tmarketplaceType,\n\tsalesContractAddress,\n\tprioritizeOwnerActions,\n\tsalePrice,\n\tquantityDecimals,\n\tquantityRemaining,\n\tunlimitedSupply,\n}: ActionButtonProps) {\n\tconst { shouldShowAction, isOwnerAction } = useActionButtonLogic({\n\t\ttokenId,\n\t\towned,\n\t\taction,\n\t\tonCannotPerformAction,\n\t});\n\n\tif (!shouldShowAction) {\n\t\treturn null;\n\t}\n\n\tif (isOwnerAction || prioritizeOwnerActions) {\n\t\treturn (\n\t\t\t<OwnerActions\n\t\t\t\taction={action}\n\t\t\t\ttokenId={tokenId}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\tchainId={chainId}\n\t\t\t\torderbookKind={orderbookKind}\n\t\t\t\thighestOffer={highestOffer}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst nonOwnerProps =\n\t\tmarketplaceType === 'shop' && salesContractAddress && salePrice\n\t\t\t? {\n\t\t\t\t\tmarketplaceType: 'shop' as const,\n\t\t\t\t\tsalesContractAddress,\n\t\t\t\t\tsalePrice,\n\t\t\t\t\taction,\n\t\t\t\t\ttokenId,\n\t\t\t\t\tcollectionAddress,\n\t\t\t\t\tchainId,\n\t\t\t\t\tquantityDecimals,\n\t\t\t\t\tquantityRemaining,\n\t\t\t\t\tunlimitedSupply,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tmarketplaceType: 'market' as const,\n\t\t\t\t\torderbookKind,\n\t\t\t\t\tlowestListing,\n\t\t\t\t\taction,\n\t\t\t\t\ttokenId,\n\t\t\t\t\tcollectionAddress,\n\t\t\t\t\tchainId,\n\t\t\t\t\tquantityDecimals,\n\t\t\t\t\tquantityRemaining,\n\t\t\t\t};\n\n\treturn <NonOwnerActions {...nonOwnerProps} />;\n}\n","'use client';\n\nimport type { Address } from 'viem';\nimport type {\n\tCollectibleCardAction,\n\tMarketplaceType,\n} from '../../../../../types';\nimport type { Order, OrderbookKind } from '../../../../_internal';\nimport { ActionButton } from '../../_internals/action-button/ActionButton';\n\ninterface ActionButtonWrapperProps {\n\tshow: boolean;\n\tchainId: number;\n\tcollectionAddress: Address;\n\ttokenId: string;\n\torderbookKind?: OrderbookKind;\n\taction: CollectibleCardAction;\n\thighestOffer?: Order;\n\tlowestListing?: Order;\n\towned: boolean;\n\tonCannotPerformAction?: (\n\t\taction: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,\n\t) => void;\n\tmarketplaceType: MarketplaceType;\n\tsalesContractAddress?: Address;\n\tprioritizeOwnerActions?: boolean;\n\tsalePrice?: {\n\t\tamount: string;\n\t\tcurrencyAddress: Address;\n\t};\n\tquantityDecimals?: number;\n\tquantityRemaining?: number;\n\tunlimitedSupply?: boolean;\n}\n\nexport function ActionButtonWrapper({\n\tshow,\n\tchainId,\n\tcollectionAddress,\n\ttokenId,\n\torderbookKind,\n\taction,\n\thighestOffer,\n\tlowestListing,\n\towned,\n\tonCannotPerformAction,\n\tmarketplaceType,\n\tsalesContractAddress,\n\tprioritizeOwnerActions,\n\tsalePrice,\n\tquantityDecimals,\n\tquantityRemaining,\n\tunlimitedSupply,\n}: ActionButtonWrapperProps) {\n\tif (!show) return null;\n\n\treturn (\n\t\t<div className=\"-bottom-16 absolute flex w-full origin-bottom items-center justify-center bg-overlay-light p-2 backdrop-blur transition-transform duration-200 ease-in-out group-hover:translate-y-[-64px]\">\n\t\t\t<ActionButton\n\t\t\t\tchainId={chainId}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\ttokenId={tokenId}\n\t\t\t\torderbookKind={orderbookKind}\n\t\t\t\taction={action}\n\t\t\t\thighestOffer={highestOffer}\n\t\t\t\tlowestListing={lowestListing}\n\t\t\t\towned={owned}\n\t\t\t\tonCannotPerformAction={onCannotPerformAction}\n\t\t\t\tmarketplaceType={marketplaceType}\n\t\t\t\tsalesContractAddress={salesContractAddress}\n\t\t\t\tprioritizeOwnerActions={prioritizeOwnerActions}\n\t\t\t\tsalePrice={salePrice}\n\t\t\t\tquantityDecimals={quantityDecimals}\n\t\t\t\tquantityRemaining={quantityRemaining}\n\t\t\t\tunlimitedSupply={unlimitedSupply}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","/**\n * Fetches the Content-Type header of a given URL and returns the primary type if it's supported.\n * @param url The URL to send the request to.\n * @returns A Promise that resolves with 'image', 'video', 'html', or null.\n */\nexport function fetchContentType(\n\turl: string | undefined,\n): Promise<'image' | 'video' | 'html' | '3d-model' | null> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (typeof XMLHttpRequest === 'undefined') {\n\t\t\treject(new Error('XMLHttpRequest is not supported in this environment.'));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!url) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst client = new XMLHttpRequest();\n\t\tlet settled = false;\n\n\t\tconst settle = (value: 'image' | 'video' | 'html' | '3d-model' | null) => {\n\t\t\tif (!settled) {\n\t\t\t\tsettled = true;\n\t\t\t\tresolve(value);\n\t\t\t\tclient.abort();\n\t\t\t}\n\t\t};\n\n\t\tconst fail = (error: Error) => {\n\t\t\tif (!settled) {\n\t\t\t\tsettled = true;\n\t\t\t\treject(error);\n\t\t\t}\n\t\t};\n\n\t\tclient.open('HEAD', url, true);\n\n\t\tclient.onreadystatechange = () => {\n\t\t\tif (settled || client.readyState < XMLHttpRequest.HEADERS_RECEIVED) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (client.readyState === XMLHttpRequest.HEADERS_RECEIVED) {\n\t\t\t\tconst status = client.status;\n\n\t\t\t\tif (status < 200 || status >= 300) {\n\t\t\t\t\tsettle(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst contentType = client.getResponseHeader('Content-Type');\n\n\t\t\t\tif (!contentType) {\n\t\t\t\t\tsettle(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst primaryType = contentType.split('/')[0].toLowerCase();\n\t\t\t\tlet result: 'image' | 'video' | 'html' | '3d-model' | null = null;\n\n\t\t\t\tswitch (primaryType) {\n\t\t\t\t\tcase 'image':\n\t\t\t\t\t\tresult = 'image';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'video':\n\t\t\t\t\t\tresult = 'video';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tif (contentType.toLowerCase().includes('html')) {\n\t\t\t\t\t\t\tresult = 'html';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'model':\n\t\t\t\t\t\tresult = '3d-model';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tsettle(result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\n\t\tclient.onerror = (errorEvent) => {\n\t\t\tfail(\n\t\t\t\tnew Error(`XMLHttpRequest network error for URL: ${url}`, {\n\t\t\t\t\tcause: errorEvent,\n\t\t\t\t}),\n\t\t\t);\n\t\t};\n\n\t\tclient.onabort = () => {\n\t\t\tif (!settled) {\n\t\t\t\tsettle(null);\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\tclient.send();\n\t\t} catch (error) {\n\t\t\tfail(\n\t\t\t\tnew Error(`Error sending XMLHttpRequest for URL: ${url}`, {\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t});\n}\n","import { Skeleton } from '@0xsequence/design-system';\nimport { lazy, Suspense } from 'react';\n\nconst ModelViewerComponent = lazy(() =>\n\timport('@google/model-viewer').then(() => ({\n\t\tdefault: ({\n\t\t\tposterSrc,\n\t\t\tsrc,\n\t\t\tonLoad,\n\t\t\tonError,\n\t\t}: {\n\t\t\tposterSrc: string;\n\t\t\tsrc?: string;\n\t\t\tonLoad?: () => void;\n\t\t\tonError?: () => void;\n\t\t}) => (\n\t\t\t<div className=\"h-full w-full bg-background-raised\">\n\t\t\t\t{/* @ts-expect-error - This is a web component */}\n\t\t\t\t<model-viewer\n\t\t\t\t\talt=\"3d model\"\n\t\t\t\t\tauto-rotate\n\t\t\t\t\tautoplay\n\t\t\t\t\tcamera-controls\n\t\t\t\t\tclass=\"h-full w-full\"\n\t\t\t\t\terror={onError}\n\t\t\t\t\tload={onLoad}\n\t\t\t\t\tloading=\"eager\"\n\t\t\t\t\tposter={posterSrc}\n\t\t\t\t\treveal=\"auto\"\n\t\t\t\t\tshadow-intensity=\"1\"\n\t\t\t\t\tsrc={src}\n\t\t\t\t\ttouch-action=\"pan-y\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t),\n\t})),\n);\n\nconst ModelViewerLoading = () => <Skeleton className=\"h-full w-full\" />;\n\nconst ModelViewer = (props: {\n\tposterSrc: string;\n\tsrc?: string;\n\tonLoad?: () => void;\n\tonError?: () => void;\n}) => {\n\treturn (\n\t\t<Suspense fallback={<ModelViewerLoading />}>\n\t\t\t<ModelViewerComponent {...props} />\n\t\t</Suspense>\n\t);\n};\n\nexport default ModelViewer;\n","import { Skeleton } from '@0xsequence/design-system';\n\nexport default function MediaSkeleton() {\n\treturn (\n\t\t<Skeleton\n\t\t\tdata-testid=\"media\"\n\t\t\tsize=\"lg\"\n\t\t\tclassName=\"absolute inset-0 h-full w-full animate-shimmer\"\n\t\t\tstyle={{\n\t\t\t\tborderRadius: 0,\n\t\t\t}}\n\t\t/>\n\t);\n}\n","export const isImage = (fileName: string | undefined) => {\n\tconst isImage = /.*\\.(png|jpg|jpeg|gif|svg|webp)$/.test(\n\t\tfileName?.toLowerCase() || '',\n\t);\n\treturn isImage;\n};\n\nexport const isHtml = (fileName: string | undefined) => {\n\tconst isHtml = /.*\\.(html\\?.+|html)$/.test(fileName?.toLowerCase() || '');\n\treturn isHtml;\n};\n\nexport const isVideo = (fileName: string | undefined) => {\n\tconst isVideo = /.*\\.(mp4|ogg|webm)$/.test(fileName?.toLowerCase() || '');\n\treturn isVideo;\n};\n\nexport const is3dModel = (fileName: string | undefined) => {\n\tconst is3dFile = /.*\\.(gltf|glb|obj|fbx|stl|usdz)$/.test(\n\t\tfileName?.toLowerCase() || '',\n\t);\n\treturn is3dFile;\n};\n\nexport const getContentType = (\n\turl: string | undefined,\n): Promise<'image' | 'video' | 'html' | '3d-model' | null> => {\n\treturn new Promise((resolve, reject) => {\n\t\tconst type = isHtml(url)\n\t\t\t? 'html'\n\t\t\t: isVideo(url)\n\t\t\t\t? 'video'\n\t\t\t\t: isImage(url)\n\t\t\t\t\t? 'image'\n\t\t\t\t\t: is3dModel(url)\n\t\t\t\t\t\t? '3d-model'\n\t\t\t\t\t\t: null;\n\n\t\tif (type) {\n\t\t\tresolve(type);\n\t\t} else {\n\t\t\treject(new Error('Unsupported file type'));\n\t\t}\n\t});\n};\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport ChessTileImage from '../../../../react/ui/images/chess-tile.png';\nimport { cn } from '../../../../utils';\nimport { fetchContentType } from '../../../../utils/fetchContentType';\nimport ModelViewer from '../ModelViewer';\nimport MediaSkeleton from './MediaSkeleton';\nimport type { ContentTypeState, MediaProps } from './types';\nimport { getContentType } from './utils';\n\n/**\n * @description This component is used to display a collectible asset.\n * It will display the first valid asset from the assets array.\n * If no valid asset is found, it will display the fallback content or the default placeholder image.\n *\n * @example\n * <Media\n * name=\"Collectible\"\n * assets={[undefined, \"some-image-url\", undefined]} // undefined assets will be ignored, \"some-image-url\" will be rendered\n * assetSrcPrefixUrl=\"https://example.com/\"\n * className=\"w-full h-full\"\n * fallbackContent={<YourCustomFallbackComponent />} // Optional custom fallback content\n * />\n */\nexport function Media({\n\tname,\n\tassets,\n\tassetSrcPrefixUrl,\n\tclassName = '',\n\tcontainerClassName = '',\n\tmediaClassname = '',\n\tisLoading,\n\tfallbackContent,\n\tshouldListenForLoad = true,\n}: MediaProps) {\n\tconst [assetLoadFailed, setAssetLoadFailed] = useState(false);\n\tconst [assetLoading, setAssetLoading] = useState(shouldListenForLoad);\n\tconst [currentAssetIndex, setCurrentAssetIndex] = useState(0);\n\tconst [isSafari, setIsSafari] = useState(false);\n\tconst [contentType, setContentType] = useState<ContentTypeState>({\n\t\ttype: null,\n\t\tloading: true,\n\t\tfailed: false,\n\t});\n\n\tconst videoRef = useRef<HTMLVideoElement>(null);\n\n\tuseEffect(() => {\n\t\tsetIsSafari(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));\n\t}, []);\n\n\tconst validAssets = assets.filter((asset): asset is string => !!asset);\n\tconst assetUrl = validAssets[currentAssetIndex];\n\tconst proxiedAssetUrl = assetUrl\n\t\t? assetSrcPrefixUrl\n\t\t\t? `${assetSrcPrefixUrl}${assetUrl}`\n\t\t\t: assetUrl\n\t\t: '';\n\n\tconst containerClassNames = cn(\n\t\t'relative aspect-square overflow-hidden bg-background-secondary',\n\t\tcontainerClassName || className,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!assetUrl) {\n\t\t\tsetContentType({ type: null, loading: false, failed: true });\n\t\t\treturn;\n\t\t}\n\n\t\tconst determineContentType = async () => {\n\t\t\ttry {\n\t\t\t\tconst type = await getContentType(proxiedAssetUrl);\n\t\t\t\tsetContentType({ type, loading: false, failed: false });\n\t\t\t} catch {\n\t\t\t\ttry {\n\t\t\t\t\tconst type = await fetchContentType(proxiedAssetUrl);\n\t\t\t\t\tsetContentType({ type, loading: false, failed: false });\n\t\t\t\t} catch {\n\t\t\t\t\thandleAssetError();\n\t\t\t\t\tsetContentType({ type: null, loading: false, failed: true });\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tdetermineContentType();\n\t}, [proxiedAssetUrl, assetUrl]);\n\n\tconst handleAssetError = () => {\n\t\tconst nextIndex = currentAssetIndex + 1;\n\t\tif (nextIndex < assets.length) {\n\t\t\tsetCurrentAssetIndex(nextIndex);\n\t\t\tsetAssetLoading(true);\n\t\t\tsetAssetLoadFailed(false);\n\t\t} else {\n\t\t\tsetAssetLoadFailed(true);\n\t\t}\n\t};\n\n\tconst handleAssetLoad = () => {\n\t\tsetAssetLoading(false);\n\t};\n\n\tconst renderFallback = () => {\n\t\tif (fallbackContent) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex h-full w-full items-center justify-center',\n\t\t\t\t\t\tcontainerClassNames,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fallbackContent}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={cn('h-full w-full', containerClassNames)}>\n\t\t\t\t<img\n\t\t\t\t\tsrc={ChessTileImage}\n\t\t\t\t\talt={name || 'Collectible'}\n\t\t\t\t\tclassName=\"h-full w-full object-cover\"\n\t\t\t\t\tonError={(e) => {\n\t\t\t\t\t\tconsole.error('Failed to load placeholder image');\n\t\t\t\t\t\te.currentTarget.style.display = 'none';\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t};\n\n\t// Display fallback if asset fails to load or doesn't exist\n\tif (assetLoadFailed || (!isLoading && contentType.failed) || !assetUrl) {\n\t\treturn renderFallback();\n\t}\n\n\t// Render based on content type\n\tif (contentType.type === 'html' && !assetLoadFailed) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex w-full items-center justify-center rounded-lg',\n\t\t\t\t\tcontainerClassNames,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{(assetLoading || contentType.loading || isLoading) && (\n\t\t\t\t\t<MediaSkeleton />\n\t\t\t\t)}\n\n\t\t\t\t<iframe\n\t\t\t\t\ttitle={name || 'Collectible'}\n\t\t\t\t\tclassName={cn('aspect-square w-full', mediaClassname)}\n\t\t\t\t\tsrc={proxiedAssetUrl}\n\t\t\t\t\tallow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n\t\t\t\t\tsandbox=\"allow-scripts\"\n\t\t\t\t\tstyle={{ border: '0px' }}\n\t\t\t\t\tonError={shouldListenForLoad ? handleAssetError : undefined}\n\t\t\t\t\tonLoad={shouldListenForLoad ? handleAssetLoad : undefined}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (contentType.type === '3d-model' && !assetLoadFailed) {\n\t\treturn (\n\t\t\t<div className={cn('h-full w-full', containerClassNames)}>\n\t\t\t\t<ModelViewer\n\t\t\t\t\tsrc={proxiedAssetUrl}\n\t\t\t\t\tposterSrc={ChessTileImage}\n\t\t\t\t\tonLoad={shouldListenForLoad ? handleAssetLoad : undefined}\n\t\t\t\t\tonError={shouldListenForLoad ? handleAssetError : undefined}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (contentType.type === 'video' && !assetLoadFailed) {\n\t\tconst videoClassNames = cn(\n\t\t\t'absolute inset-0 h-full w-full object-cover transition-transform duration-200 ease-in-out group-hover:scale-hover',\n\t\t\tassetLoading || isLoading ? 'invisible' : 'visible',\n\t\t\t// we can't hide the video controls in safari, when user hovers over the video they show up.\n\t\t\t// `pointer-events-none` is the only way to hide them on hover\n\t\t\tisSafari && 'pointer-events-none',\n\t\t\tmediaClassname,\n\t\t);\n\n\t\treturn (\n\t\t\t<div className={containerClassNames}>\n\t\t\t\t{(assetLoading || contentType.loading || isLoading) && (\n\t\t\t\t\t<MediaSkeleton />\n\t\t\t\t)}\n\n\t\t\t\t<video\n\t\t\t\t\tref={videoRef}\n\t\t\t\t\tclassName={videoClassNames}\n\t\t\t\t\tautoPlay\n\t\t\t\t\tloop\n\t\t\t\t\tcontrols\n\t\t\t\t\tplaysInline\n\t\t\t\t\tmuted\n\t\t\t\t\tcontrolsList=\"nodownload noremoteplayback nofullscreen\"\n\t\t\t\t\tonError={shouldListenForLoad ? handleAssetError : undefined}\n\t\t\t\t\tonLoadedMetadata={shouldListenForLoad ? handleAssetLoad : undefined}\n\t\t\t\t\tdata-testid=\"collectible-asset-video\"\n\t\t\t\t>\n\t\t\t\t\t<source src={proxiedAssetUrl} />\n\t\t\t\t</video>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default to image renderer\n\tconst imgSrc =\n\t\tassetLoadFailed || contentType.failed ? ChessTileImage : proxiedAssetUrl;\n\n\tconst imgClassNames = cn(\n\t\t'absolute inset-0 h-full w-full object-cover transition-transform duration-200 ease-in-out group-hover:scale-hover',\n\t\tassetLoading || contentType.loading || isLoading ? 'invisible' : 'visible',\n\t\tmediaClassname,\n\t);\n\n\treturn (\n\t\t<div className={containerClassNames}>\n\t\t\t{(assetLoading || contentType.loading || isLoading) && <MediaSkeleton />}\n\n\t\t\t<img\n\t\t\t\tsrc={imgSrc}\n\t\t\t\talt={name || 'Collectible'}\n\t\t\t\tclassName={imgClassNames}\n\t\t\t\tonError={shouldListenForLoad ? handleAssetError : undefined}\n\t\t\t\tonLoad={shouldListenForLoad ? handleAssetLoad : undefined}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { Skeleton } from '@0xsequence/design-system';\n\nexport function MarketplaceCollectibleCardSkeleton() {\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"collectible-card-skeleton\"\n\t\t\tclassName=\"w-card-width overflow-hidden rounded-xl border border-border-base focus-visible:border-border-focus focus-visible:shadow-none focus-visible:outline-focus active:border-border-focus active:shadow-none\"\n\t\t>\n\t\t\t<div className=\"relative aspect-square overflow-hidden bg-background-secondary\">\n\t\t\t\t<Skeleton\n\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\tclassName=\"absolute inset-0 h-full w-full animate-shimmer\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"mt-2 flex flex-col gap-2 px-4 pb-4\">\n\t\t\t\t<Skeleton size=\"lg\" className=\"animate-shimmer\" />\n\t\t\t\t<Skeleton size=\"sm\" className=\"animate-shimmer\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport { Media } from '../../media/Media';\nimport { MarketplaceCollectibleCardSkeleton } from '../CollectibleCardSkeleton';\nimport type { MarketplaceCardBaseProps } from '../types';\n\nexport interface BaseCardProps extends MarketplaceCardBaseProps {\n\tisLoading: boolean;\n\tname: string;\n\timage?: string;\n\tvideo?: string;\n\tanimationUrl?: string;\n\tonClick?: () => void;\n\tonKeyDown?: (e: React.KeyboardEvent) => void;\n\tclassName?: string;\n\tchildren: React.ReactNode;\n}\n\nexport function BaseCard({\n\tisLoading,\n\tname,\n\timage,\n\tvideo,\n\tanimationUrl,\n\tonClick,\n\tonKeyDown,\n\tclassName,\n\tassetSrcPrefixUrl,\n\tchildren,\n}: BaseCardProps) {\n\tif (isLoading) {\n\t\treturn <MarketplaceCollectibleCardSkeleton />;\n\t}\n\n\treturn (\n\t\t// biome-ignore lint/a11y/noStaticElementInteractions: div used as interactive card with proper role and keyboard support\n\t\t<div\n\t\t\tdata-testid=\"collectible-card\"\n\t\t\tclassName=\"w-card-width min-w-card-min-width overflow-hidden rounded-xl border border-border-base bg-background-primary focus-visible:border-border-focus focus-visible:shadow-focus-ring focus-visible:outline-focus active:border-border-focus active:shadow-active-ring\"\n\t\t\tonClick={onClick}\n\t\t\tonKeyDown={onKeyDown}\n\t\t\trole={onClick ? 'button' : undefined}\n\t\t\ttabIndex={onClick ? 0 : undefined}\n\t\t>\n\t\t\t<div className=\"group relative z-10 flex h-full w-full cursor-pointer flex-col items-start overflow-hidden rounded-xl border-none bg-none p-0 focus:outline-none [&:focus]:rounded-[10px] [&:focus]:outline-[3px] [&:focus]:outline-black [&:focus]:outline-offset-[-3px]\">\n\t\t\t\t<article className=\"w-full rounded-xl\">\n\t\t\t\t\t<Media\n\t\t\t\t\t\tname={name || ''}\n\t\t\t\t\t\tassets={[image, video, animationUrl]}\n\t\t\t\t\t\tassetSrcPrefixUrl={assetSrcPrefixUrl}\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t/>\n\t\t\t\t\t{children}\n\t\t\t\t</article>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport {\n\tChevronLeftIcon,\n\tChevronRightIcon,\n\tcn,\n\tIconButton,\n\tImage,\n\tText,\n} from '@0xsequence/design-system';\nimport { formatUnits } from 'viem';\nimport type { MarketplaceType } from '../../../../types';\nimport { ContractType, type Currency, type Order } from '../../../_internal';\nimport SvgBellIcon from '../../icons/BellIcon';\nimport { formatPriceNumber, getSupplyStatusText } from './utils';\n\nconst formatPrice = (amount: string, currency: Currency): React.ReactNode => {\n\tconst { formattedNumber, isUnderflow, isOverflow } = formatPriceNumber(\n\t\tamount,\n\t\tcurrency.decimals,\n\t);\n\tconst isFree = amount === '0';\n\n\tif (isFree) {\n\t\treturn <Text>Free</Text>;\n\t}\n\n\tif (isUnderflow) {\n\t\treturn (\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t<ChevronLeftIcon className=\"h-3 w-3 text-text-100\" />\n\t\t\t\t<Text>{`${formattedNumber} ${currency.symbol}`}</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (isOverflow) {\n\t\treturn (\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t<ChevronRightIcon className=\"h-3 w-3 text-text-100\" />\n\t\t\t\t<Text>{`${formattedNumber} ${currency.symbol}`}</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex items-center gap-1\">\n\t\t\t<Text>\n\t\t\t\t{formattedNumber} {currency.symbol}\n\t\t\t</Text>\n\t\t</div>\n\t);\n};\n\ntype FooterProps = {\n\tname: string;\n\ttype?: ContractType;\n\tdecimals?: number;\n\tonOfferClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\thighestOffer?: Order;\n\tlowestListingPriceAmount?: string;\n\tlowestListingCurrency?: Currency;\n\tbalance?: string;\n\tquantityInitial: string | undefined;\n\tquantityRemaining: string | undefined;\n\tunlimitedSupply?: boolean;\n\tmarketplaceType: MarketplaceType;\n\tsalePriceAmount?: string;\n\tsalePriceCurrency?: Currency;\n};\n\nexport const Footer = ({\n\tname,\n\ttype,\n\tdecimals,\n\tonOfferClick,\n\thighestOffer,\n\tlowestListingPriceAmount,\n\tlowestListingCurrency,\n\tbalance,\n\tquantityInitial,\n\tquantityRemaining,\n\tunlimitedSupply,\n\tmarketplaceType,\n\tsalePriceAmount,\n\tsalePriceCurrency,\n}: FooterProps) => {\n\tconst listed = !!lowestListingPriceAmount && !!lowestListingCurrency;\n\tconst isShop = marketplaceType === 'shop';\n\tconst isMarketplace = marketplaceType === 'market';\n\n\tconst displayName = (() => {\n\t\tif (name.length > 15 && highestOffer && !isShop) {\n\t\t\treturn `${name.substring(0, 13)}...`;\n\t\t}\n\t\tif (name.length > 17 && !highestOffer && !isShop) {\n\t\t\treturn `${name.substring(0, 17)}...`;\n\t\t}\n\t\treturn name;\n\t})();\n\n\treturn (\n\t\t<div className=\"relative flex flex-col items-start gap-2 whitespace-nowrap bg-background-primary p-4\">\n\t\t\t<div className=\"relative flex w-full items-center justify-between\">\n\t\t\t\t<Text\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'overflow-hidden text-ellipsis text-left font-body font-bold text-sm text-text-100',\n\t\t\t\t\t\tisShop &&\n\t\t\t\t\t\t\t(quantityInitial === undefined ||\n\t\t\t\t\t\t\t\tquantityRemaining === undefined) &&\n\t\t\t\t\t\t\t'text-text-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{displayName || 'Untitled'}\n\t\t\t\t</Text>\n\n\t\t\t\t{highestOffer && onOfferClick && !isShop && (\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tclassName=\"absolute top-0 right-0 h-[22px] w-[22px] hover:animate-bell-ring\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tonOfferClick?.(e);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ticon={(props) => <SvgBellIcon {...props} size=\"xs\" />}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex items-center gap-1',\n\t\t\t\t\tisShop && !salePriceAmount && 'hidden',\n\t\t\t\t\tisShop && type === ContractType.ERC721 && 'hidden',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{((isMarketplace && listed && lowestListingCurrency?.imageUrl) ||\n\t\t\t\t\t(isShop && salePriceCurrency && salePriceCurrency.imageUrl)) && (\n\t\t\t\t\t<Image\n\t\t\t\t\t\talt={lowestListingCurrency?.symbol || salePriceCurrency?.symbol}\n\t\t\t\t\t\tclassName=\"h-3 w-3\"\n\t\t\t\t\t\tsrc={lowestListingCurrency?.imageUrl || salePriceCurrency?.imageUrl}\n\t\t\t\t\t\tonError={(e) => {\n\t\t\t\t\t\t\te.currentTarget.style.display = 'none';\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<Text\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'text-left font-body font-bold text-sm',\n\t\t\t\t\t\tlisted && isMarketplace ? 'text-text-100' : 'text-text-50',\n\t\t\t\t\t\tisShop &&\n\t\t\t\t\t\t\tsalePriceAmount &&\n\t\t\t\t\t\t\tsalePriceCurrency &&\n\t\t\t\t\t\t\ttype === ContractType.ERC1155 &&\n\t\t\t\t\t\t\t'text-text-100',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{listed &&\n\t\t\t\t\t\tisMarketplace &&\n\t\t\t\t\t\tformatPrice(lowestListingPriceAmount, lowestListingCurrency)}\n\n\t\t\t\t\t{!listed && isMarketplace && 'Not listed yet'}\n\n\t\t\t\t\t{isShop &&\n\t\t\t\t\t\tsalePriceAmount &&\n\t\t\t\t\t\tsalePriceCurrency &&\n\t\t\t\t\t\ttype === ContractType.ERC1155 &&\n\t\t\t\t\t\tformatPrice(salePriceAmount, salePriceCurrency)}\n\t\t\t\t</Text>\n\t\t\t</div>\n\n\t\t\t{isShop && (\n\t\t\t\t<SaleDetailsPill\n\t\t\t\t\tquantityRemaining={quantityRemaining}\n\t\t\t\t\tcollectionType={type as ContractType}\n\t\t\t\t\tunlimitedSupply={unlimitedSupply}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{isShop && !salePriceAmount && <div className=\"h-5 w-full\" />}\n\n\t\t\t{isMarketplace && (\n\t\t\t\t<TokenTypeBalancePill\n\t\t\t\t\tbalance={balance}\n\t\t\t\t\ttype={type as ContractType}\n\t\t\t\t\tdecimals={decimals}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nconst TokenTypeBalancePill = ({\n\tbalance,\n\ttype,\n\tdecimals,\n}: {\n\tbalance?: string;\n\ttype: ContractType;\n\tdecimals?: number;\n}) => {\n\tconst displayText =\n\t\ttype === ContractType.ERC1155\n\t\t\t? balance\n\t\t\t\t? `Owned: ${formatUnits(BigInt(balance), decimals ?? 0)}`\n\t\t\t\t: 'ERC-1155'\n\t\t\t: 'ERC-721';\n\n\treturn (\n\t\t<Text className=\"rounded-lg bg-background-secondary px-2 py-1 text-left font-medium text-text-80 text-xs\">\n\t\t\t{displayText}\n\t\t</Text>\n\t);\n};\n\nconst SaleDetailsPill = ({\n\tquantityRemaining,\n\tcollectionType,\n\tunlimitedSupply,\n}: {\n\tquantityRemaining: string | undefined;\n\tcollectionType: ContractType;\n\tunlimitedSupply?: boolean;\n}) => {\n\tconst supplyText = getSupplyStatusText({\n\t\tquantityRemaining,\n\t\tcollectionType,\n\t\tunlimitedSupply,\n\t});\n\n\treturn (\n\t\t<Text className=\"rounded-lg bg-background-secondary px-2 py-1 text-left font-medium text-text-80 text-xs\">\n\t\t\t{supplyText}\n\t\t</Text>\n\t);\n};\n","'use client';\n\nimport type { Address } from 'viem';\nimport { CollectibleCardAction } from '../../../../../types';\nimport { useCurrency } from '../../../../hooks';\nimport { ActionButtonWrapper } from '../components/ActionButtonWrapper';\nimport { BaseCard } from '../components/BaseCard';\nimport { Footer } from '../Footer';\nimport type { MarketCollectibleCardProps } from '../types';\n\nexport function MarketCard({\n\tcollectibleId,\n\tchainId,\n\tcollectionAddress,\n\tcollectionType,\n\tassetSrcPrefixUrl,\n\tcardLoading,\n\torderbookKind,\n\tcollectible,\n\tonCollectibleClick,\n\tonOfferClick,\n\tbalance,\n\tbalanceIsLoading = false,\n\tonCannotPerformAction,\n\tprioritizeOwnerActions,\n}: MarketCollectibleCardProps) {\n\tconst collectibleMetadata = collectible?.metadata;\n\tconst highestOffer = collectible?.offer;\n\n\tconst {\n\t\tdata: lowestListingCurrency,\n\t\tisLoading: lowestListingCurrencyLoading,\n\t} = useCurrency({\n\t\tchainId,\n\t\tcurrencyAddress: collectible?.listing?.priceCurrencyAddress as Address,\n\t\tquery: {\n\t\t\tenabled: !!collectible?.listing?.priceCurrencyAddress,\n\t\t},\n\t});\n\n\tconst isLoading = cardLoading || lowestListingCurrencyLoading;\n\n\tif (!collectibleMetadata) {\n\t\tconsole.error('Collectible metadata is undefined');\n\t\treturn null;\n\t}\n\n\tconst showActionButton =\n\t\t!balanceIsLoading && (!!highestOffer || !!collectible);\n\n\tconst action = (\n\t\tbalance\n\t\t\t? (highestOffer && CollectibleCardAction.SELL) ||\n\t\t\t\t(!collectible?.listing && CollectibleCardAction.LIST) ||\n\t\t\t\tCollectibleCardAction.TRANSFER\n\t\t\t: (collectible?.listing && CollectibleCardAction.BUY) ||\n\t\t\t\tCollectibleCardAction.OFFER\n\t) as CollectibleCardAction;\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tonCollectibleClick?.(collectibleId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<BaseCard\n\t\t\tcollectibleId={collectibleId}\n\t\t\tchainId={chainId}\n\t\t\tcollectionAddress={collectionAddress}\n\t\t\tcollectionType={collectionType}\n\t\t\tassetSrcPrefixUrl={assetSrcPrefixUrl}\n\t\t\tcardLoading={cardLoading}\n\t\t\tmarketplaceType=\"market\"\n\t\t\tisLoading={isLoading}\n\t\t\tname={collectibleMetadata.name || ''}\n\t\t\timage={collectibleMetadata.image}\n\t\t\tvideo={collectibleMetadata.video}\n\t\t\tanimationUrl={collectibleMetadata.animation_url}\n\t\t\tonClick={() => onCollectibleClick?.(collectibleId)}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t>\n\t\t\t<Footer\n\t\t\t\tname={collectibleMetadata.name || ''}\n\t\t\t\ttype={collectionType}\n\t\t\t\tonOfferClick={(e) => onOfferClick?.({ order: highestOffer, e })}\n\t\t\t\thighestOffer={highestOffer}\n\t\t\t\tlowestListingPriceAmount={collectible?.listing?.priceAmount}\n\t\t\t\tlowestListingCurrency={lowestListingCurrency}\n\t\t\t\tbalance={balance}\n\t\t\t\tdecimals={collectibleMetadata.decimals}\n\t\t\t\tquantityInitial={\n\t\t\t\t\thighestOffer?.quantityInitial !== undefined\n\t\t\t\t\t\t? highestOffer.quantityInitial\n\t\t\t\t\t\t: collectible?.listing?.quantityInitial !== undefined\n\t\t\t\t\t\t\t? collectible.listing.quantityInitial\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tquantityRemaining={\n\t\t\t\t\thighestOffer?.quantityRemaining !== undefined\n\t\t\t\t\t\t? highestOffer.quantityRemaining\n\t\t\t\t\t\t: collectible?.listing?.quantityRemaining !== undefined\n\t\t\t\t\t\t\t? collectible.listing.quantityRemaining\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tmarketplaceType=\"market\"\n\t\t\t/>\n\n\t\t\t<ActionButtonWrapper\n\t\t\t\tshow={showActionButton}\n\t\t\t\tchainId={chainId}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\ttokenId={collectibleId}\n\t\t\t\torderbookKind={orderbookKind}\n\t\t\t\taction={action}\n\t\t\t\thighestOffer={highestOffer}\n\t\t\t\tlowestListing={collectible?.listing}\n\t\t\t\towned={!!balance}\n\t\t\t\tonCannotPerformAction={onCannotPerformAction}\n\t\t\t\tmarketplaceType=\"market\"\n\t\t\t\tprioritizeOwnerActions={prioritizeOwnerActions}\n\t\t\t/>\n\t\t</BaseCard>\n\t);\n}\n","'use client';\n\nimport { CollectibleCardAction } from '../../../../../types';\nimport { ContractType } from '../../../../_internal';\nimport { useCurrency } from '../../../../hooks';\nimport { ActionButtonWrapper } from '../components/ActionButtonWrapper';\nimport { BaseCard } from '../components/BaseCard';\nimport { Footer } from '../Footer';\nimport type { ShopCollectibleCardProps } from '../types';\n\nexport function ShopCard({\n\tcollectibleId,\n\tchainId,\n\tcollectionAddress,\n\tcollectionType,\n\tassetSrcPrefixUrl,\n\tcardLoading,\n\tmarketplaceType,\n\tsalesContractAddress,\n\ttokenMetadata,\n\tsalePrice,\n\tquantityDecimals,\n\tquantityInitial,\n\tquantityRemaining,\n\tunlimitedSupply,\n}: ShopCollectibleCardProps) {\n\tconst { data: saleCurrency, isLoading: saleCurrencyLoading } = useCurrency({\n\t\tchainId,\n\t\tcurrencyAddress: salePrice?.currencyAddress,\n\t\tquery: {\n\t\t\tenabled:\n\t\t\t\t!!salePrice?.currencyAddress &&\n\t\t\t\t!!salesContractAddress &&\n\t\t\t\tcollectionType === ContractType.ERC1155,\n\t\t},\n\t});\n\n\tconst isLoading = cardLoading || saleCurrencyLoading;\n\n\tif (!tokenMetadata || !salePrice) {\n\t\tconsole.error('Token metadata or sale price is undefined', {\n\t\t\ttokenMetadata,\n\t\t\tsalePrice,\n\t\t});\n\t\treturn null;\n\t}\n\n\tconst showActionButton =\n\t\tsalesContractAddress &&\n\t\tcollectionType === ContractType.ERC1155 &&\n\t\t(unlimitedSupply ||\n\t\t\t(quantityRemaining !== undefined && Number(quantityRemaining) > 0));\n\n\tconst action = CollectibleCardAction.BUY;\n\n\tconst mediaClassName = !quantityRemaining ? 'opacity-50' : 'opacity-100';\n\n\treturn (\n\t\t<BaseCard\n\t\t\tcollectibleId={collectibleId}\n\t\t\tchainId={chainId}\n\t\t\tcollectionAddress={collectionAddress}\n\t\t\tcollectionType={collectionType}\n\t\t\tassetSrcPrefixUrl={assetSrcPrefixUrl}\n\t\t\tcardLoading={cardLoading}\n\t\t\tmarketplaceType={marketplaceType}\n\t\t\tisLoading={isLoading}\n\t\t\tname={tokenMetadata.name || ''}\n\t\t\timage={tokenMetadata.image}\n\t\t\tvideo={tokenMetadata.video}\n\t\t\tanimationUrl={tokenMetadata.animation_url}\n\t\t\tclassName={mediaClassName}\n\t\t>\n\t\t\t<Footer\n\t\t\t\tname={tokenMetadata.name || ''}\n\t\t\t\ttype={collectionType}\n\t\t\t\tdecimals={tokenMetadata.decimals}\n\t\t\t\tquantityInitial={quantityInitial}\n\t\t\t\tquantityRemaining={quantityRemaining}\n\t\t\t\tunlimitedSupply={unlimitedSupply}\n\t\t\t\tmarketplaceType={marketplaceType}\n\t\t\t\tsalePriceAmount={salePrice?.amount}\n\t\t\t\tsalePriceCurrency={saleCurrency}\n\t\t\t/>\n\n\t\t\t<ActionButtonWrapper\n\t\t\t\tshow={showActionButton}\n\t\t\t\tchainId={chainId}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\ttokenId={collectibleId}\n\t\t\t\taction={action}\n\t\t\t\towned={false}\n\t\t\t\tmarketplaceType={marketplaceType}\n\t\t\t\tsalesContractAddress={salesContractAddress}\n\t\t\t\tsalePrice={salePrice}\n\t\t\t\tquantityDecimals={quantityDecimals}\n\t\t\t\tquantityRemaining={\n\t\t\t\t\tquantityRemaining !== undefined\n\t\t\t\t\t\t? Number(quantityRemaining)\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tunlimitedSupply={unlimitedSupply}\n\t\t\t/>\n\t\t</BaseCard>\n\t);\n}\n","'use client';\n\nimport type { CollectibleCardProps } from './types';\nimport { MarketCard } from './variants/MarketCard';\n\nimport { ShopCard } from './variants/ShopCard';\n\nexport function CollectibleCard(props: CollectibleCardProps) {\n\tswitch (props.marketplaceType) {\n\t\tcase 'shop':\n\t\t\treturn <ShopCard {...props} />;\n\t\t// biome-ignore lint/complexity/noUselessSwitchCase: explicit case makes code clearer and future-proof\n\t\tcase 'market':\n\t\tdefault:\n\t\t\treturn <MarketCard {...props} />;\n\t}\n}\n","import { Text } from '@0xsequence/design-system';\nimport { ActionModal } from './ActionModal';\n\ninterface ErrorModalProps {\n\tisOpen: boolean;\n\tchainId: number;\n\tonClose: () => void;\n\ttitle: string;\n\tmessage?: string;\n}\n\nexport const ErrorModal = ({\n\tisOpen,\n\tchainId,\n\tonClose,\n\ttitle,\n\tmessage,\n}: ErrorModalProps) => (\n\t<ActionModal\n\t\tisOpen={isOpen}\n\t\tchainId={chainId}\n\t\tonClose={onClose}\n\t\ttitle={title}\n\t\tctas={[]}\n\t>\n\t\t<div\n\t\t\tclassName=\"flex items-center justify-center p-4\"\n\t\t\tdata-testid=\"error-modal\"\n\t\t>\n\t\t\t<Text className=\"font-body\" color=\"text80\">\n\t\t\t\t{message || 'Error loading item details'}\n\t\t\t</Text>\n\t\t</div>\n\t</ActionModal>\n);\n","import { Spinner } from '@0xsequence/design-system';\nimport { ActionModal } from './ActionModal';\n\ninterface LoadingModalProps {\n\tisOpen: boolean;\n\tchainId: number;\n\tonClose: () => void;\n\ttitle: string;\n}\n\nexport const LoadingModal = ({\n\tisOpen,\n\tchainId,\n\tonClose,\n\ttitle,\n}: LoadingModalProps) => (\n\t<ActionModal\n\t\tisOpen={isOpen}\n\t\tchainId={chainId}\n\t\tonClose={onClose}\n\t\ttitle={title}\n\t\tctas={[]}\n\t\tdisableAnimation\n\t>\n\t\t<div\n\t\t\tclassName=\"flex items-center justify-center p-4\"\n\t\t\tdata-testid=\"loading-modal\"\n\t\t>\n\t\t\t<Spinner size=\"lg\" />\n\t\t</div>\n\t</ActionModal>\n);\n","import { skipToken } from '@tanstack/react-query';\nimport { avalanche, optimism } from 'viem/chains';\nimport { compareAddress } from '../../../../../utils';\nimport type { AdditionalFee } from '../../../../_internal';\nimport { useMarketplaceConfig } from '../../../../hooks';\n\nexport type FeesParams = {\n\tchainId: number;\n\tcollectionAddress: string;\n};\n\nexport const useMarketPlatformFee = (params: FeesParams | typeof skipToken) => {\n\tconst defaultFee = 2.5;\n\tconst defaultPlatformFeeRecipient =\n\t\t'0x858dB1cbF6D09D447C96A11603189b49B2D1C219';\n\tconst avalancheAndOptimismPlatformFeeRecipient =\n\t\t'0x400cdab4676c17aec07e8ec748a5fc3b674bca41';\n\tconst { data: marketplaceConfig } = useMarketplaceConfig();\n\n\t// Early return if skipToken is passed\n\tif (params === skipToken) {\n\t\treturn {\n\t\t\tamount: '0',\n\t\t\treceiver: defaultPlatformFeeRecipient,\n\t\t} satisfies AdditionalFee;\n\t}\n\n\tconst { chainId, collectionAddress } = params;\n\n\t// Find collection in market collections only (not shop collections)\n\tconst marketCollection = marketplaceConfig?.market?.collections?.find(\n\t\t(col) =>\n\t\t\tcompareAddress(col.itemsAddress, collectionAddress) &&\n\t\t\tString(col.chainId) === String(chainId),\n\t);\n\n\tconst avalancheOrOptimism =\n\t\tchainId === avalanche.id || chainId === optimism.id;\n\tconst receiver = avalancheOrOptimism\n\t\t? avalancheAndOptimismPlatformFeeRecipient\n\t\t: defaultPlatformFeeRecipient;\n\n\tconst percentageToBPS = (percentage: string | number) =>\n\t\t(Number(percentage) * 10000) / 100;\n\n\t// Use collection fee if found in market collections, otherwise use default\n\tconst feePercentage = marketCollection?.feePercentage ?? defaultFee;\n\n\treturn {\n\t\tamount: percentageToBPS(feePercentage).toString(),\n\t\treceiver,\n\t} satisfies AdditionalFee;\n};\n","import { skipToken, useQuery } from '@tanstack/react-query';\nimport type { Address } from 'viem';\nimport {\n\tgetMarketplaceClient,\n\ttype MarketplaceKind,\n} from '../../../../_internal';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport { useConfig } from '../../../../hooks';\nimport { useMarketPlatformFee } from './useMarketPlatformFee';\n\nexport type CheckoutOptionsParams = {\n\tchainId: number;\n\tcollectionAddress: Address;\n\torderId: string;\n\tmarketplace: MarketplaceKind;\n};\n\nexport const useCheckoutOptions = (\n\tinput: CheckoutOptionsParams | typeof skipToken,\n) => {\n\tconst config = useConfig();\n\tconst { wallet } = useWallet();\n\n\t// If input is skipToken, we don't want to calculate fees\n\tconst fees = useMarketPlatformFee(\n\t\tinput !== skipToken\n\t\t\t? {\n\t\t\t\t\tchainId: input.chainId,\n\t\t\t\t\tcollectionAddress: input.collectionAddress,\n\t\t\t\t}\n\t\t\t: skipToken,\n\t);\n\n\treturn useQuery({\n\t\tqueryKey:\n\t\t\tinput !== skipToken\n\t\t\t\t? [\n\t\t\t\t\t\t'checkoutOptions',\n\t\t\t\t\t\tinput.chainId,\n\t\t\t\t\t\tinput.collectionAddress,\n\t\t\t\t\t\tinput.orderId,\n\t\t\t\t\t\tinput.marketplace,\n\t\t\t\t\t]\n\t\t\t\t: ['checkoutOptions', 'skip'],\n\t\tqueryFn:\n\t\t\twallet && input !== skipToken\n\t\t\t\t? async () => {\n\t\t\t\t\t\tconst marketplaceClient = getMarketplaceClient(config);\n\t\t\t\t\t\tconst response = await marketplaceClient.checkoutOptionsMarketplace(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tchainId: String(input.chainId),\n\t\t\t\t\t\t\t\twallet: await wallet.address(),\n\t\t\t\t\t\t\t\torders: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontractAddress: input.collectionAddress,\n\t\t\t\t\t\t\t\t\t\torderId: input.orderId,\n\t\t\t\t\t\t\t\t\t\tmarketplace: input.marketplace,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tadditionalFee: Number(fees.amount),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Get order data\n\t\t\t\t\t\tconst orderResponse = await marketplaceClient.getOrders({\n\t\t\t\t\t\t\tchainId: String(input.chainId),\n\t\t\t\t\t\t\tinput: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcontractAddress: input.collectionAddress,\n\t\t\t\t\t\t\t\t\torderId: input.orderId,\n\t\t\t\t\t\t\t\t\tmarketplace: input.marketplace,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst order = orderResponse.orders[0];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...response.options,\n\t\t\t\t\t\t\torder,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t: skipToken,\n\t\tenabled: !!wallet && input !== skipToken,\n\t});\n};\n","import { skipToken } from '@tanstack/react-query';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport {\n\tuseCheckoutOptionsSalesContract,\n\tuseCollectible,\n\tuseCollection,\n\tuseCurrency,\n} from '../../../../hooks';\nimport { isMarketProps, isShopProps, useBuyModalProps } from '../store';\nimport { useCheckoutOptions } from './useCheckoutOptions';\n\nexport const useLoadData = () => {\n\tconst props = useBuyModalProps();\n\tconst { chainId, collectionAddress } = props;\n\n\tconst isMarket = isMarketProps(props);\n\tconst isShop = isShopProps(props);\n\tconst collectibleId = isMarket ? props.collectibleId : undefined;\n\n\tconst {\n\t\twallet,\n\t\tisLoading: walletLoading,\n\t\tisError: walletError,\n\t} = useWallet();\n\n\tconst {\n\t\tdata: collection,\n\t\tisLoading: collectionLoading,\n\t\tisError: collectionError,\n\t} = useCollection({\n\t\tchainId,\n\t\tcollectionAddress,\n\t});\n\n\tconst {\n\t\tdata: collectable,\n\t\tisLoading: collectableLoading,\n\t\tisError: collectableError,\n\t} = useCollectible({\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tcollectibleId,\n\t\tquery: {\n\t\t\tenabled: !!collectibleId,\n\t\t},\n\t});\n\n\tconst {\n\t\tdata: currency,\n\t\tisLoading: currencyLoading,\n\t\tisError: currencyError,\n\t} = useCurrency({\n\t\tchainId,\n\t\tcurrencyAddress: isShop ? props.salePrice?.currencyAddress : undefined,\n\t\tquery: {\n\t\t\tenabled: isShop,\n\t\t},\n\t});\n\n\tconst {\n\t\tdata: marketplaceCheckoutOptions,\n\t\tisLoading: marketplaceCheckoutOptionsLoading,\n\t\tisError: marketplaceCheckoutOptionsError,\n\t} = useCheckoutOptions(\n\t\tisMarket\n\t\t\t? {\n\t\t\t\t\tchainId,\n\t\t\t\t\tcollectionAddress,\n\t\t\t\t\torderId: props.orderId,\n\t\t\t\t\tmarketplace: props.marketplace,\n\t\t\t\t}\n\t\t\t: skipToken,\n\t);\n\n\tconst {\n\t\tdata: salesContractCheckoutOptions,\n\t\tisLoading: salesContractCheckoutOptionsLoading,\n\t\tisError: salesContractCheckoutOptionsError,\n\t} = useCheckoutOptionsSalesContract(\n\t\tisShop\n\t\t\t? {\n\t\t\t\t\tchainId,\n\t\t\t\t\tcontractAddress: props.salesContractAddress,\n\t\t\t\t\tcollectionAddress,\n\t\t\t\t\titems: props.items.map((item) => ({\n\t\t\t\t\t\ttokenId: item.tokenId ?? '0',\n\t\t\t\t\t\tquantity: item.quantity ?? '1',\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t: skipToken,\n\t);\n\n\tconst shopData = isShop\n\t\t? {\n\t\t\t\tsalesContractAddress: props.salesContractAddress,\n\t\t\t\titems: props.items,\n\t\t\t\tsalePrice: props.salePrice,\n\t\t\t\tcheckoutOptions: salesContractCheckoutOptions?.options,\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\tcollection,\n\t\tcollectable,\n\t\tcurrency,\n\t\torder: marketplaceCheckoutOptions?.order,\n\t\tcheckoutOptions: marketplaceCheckoutOptions,\n\t\twallet,\n\t\tshopData,\n\t\tisLoading:\n\t\t\tcollectionLoading ||\n\t\t\tcollectableLoading ||\n\t\t\t(isMarket && marketplaceCheckoutOptionsLoading) ||\n\t\t\t(isShop && (currencyLoading || salesContractCheckoutOptionsLoading)) ||\n\t\t\twalletLoading,\n\t\tisError:\n\t\t\twalletError ||\n\t\t\tcollectionError ||\n\t\t\tcollectableError ||\n\t\t\tcurrencyError ||\n\t\t\tmarketplaceCheckoutOptionsError ||\n\t\t\tsalesContractCheckoutOptionsError,\n\t};\n};\n","import { decodeFunctionData, erc20Abi, type Hex } from 'viem';\n\ninterface DecodedApprovalData {\n\tspender: string;\n\tvalue: bigint;\n}\n\nexport function decodeERC20Approval(calldata: Hex): DecodedApprovalData {\n\tconst decoded = decodeFunctionData({\n\t\tabi: erc20Abi,\n\t\tdata: calldata,\n\t});\n\n\tif (decoded.functionName !== 'approve') {\n\t\tthrow new Error('Not an ERC20 approval transaction');\n\t}\n\n\tconst [spender, value] = decoded.args;\n\n\treturn {\n\t\tspender: spender as string,\n\t\tvalue: value as bigint,\n\t};\n}\n","import type { SelectPaymentSettings } from '@0xsequence/checkout';\nimport type { TokenMetadata } from '@0xsequence/metadata';\nimport { skipToken, useQuery } from '@tanstack/react-query';\nimport type { Hash, Hex } from 'viem';\nimport type { SdkConfig, Step } from '../../../../..';\nimport { decodeERC20Approval } from '../../../../../utils/decode/erc20';\nimport {\n\ttype AdditionalFee,\n\ttype CheckoutOptions,\n\tgetMarketplaceClient,\n\tgetQueryClient,\n\tgetSequenceApiClient,\n\ttype MarketplaceKind,\n\tStepType,\n\tWalletKind,\n} from '../../../../_internal';\nimport type { WalletInstance } from '../../../../_internal/wallet/wallet';\nimport { useConfig } from '../../../../hooks';\nimport type { ModalCallbacks } from '../../_internal/types';\nimport {\n\tbuyModalStore,\n\tisMarketProps,\n\tuseBuyAnalyticsId,\n\tuseBuyModalProps,\n\tuseOnError,\n\tuseOnSuccess,\n} from '../store';\nimport { useMarketPlatformFee } from './useMarketPlatformFee';\n\ninterface GetBuyCollectableParams {\n\tchainId: number;\n\tconfig: SdkConfig;\n\twallet: WalletInstance;\n\tcollectionAddress: string;\n\tcollectibleId: string;\n\tmarketplace: MarketplaceKind;\n\torderId: string;\n\tquantity: number;\n\tcollectable: TokenMetadata;\n\tcheckoutOptions: CheckoutOptions;\n\tfee: AdditionalFee;\n\tcallbacks: ModalCallbacks | undefined;\n\tpriceCurrencyAddress: string;\n\tcustomCreditCardProviderCallback: ((buyStep: Step) => void) | undefined;\n\tskipNativeBalanceCheck: boolean | undefined;\n\tnativeTokenAddress: string | undefined;\n\tbuyAnalyticsId: string;\n}\n\nexport const getBuyCollectableParams = async ({\n\tchainId,\n\tcollectionAddress,\n\tcollectibleId,\n\tcallbacks,\n\tpriceCurrencyAddress,\n\tcustomCreditCardProviderCallback,\n\tconfig,\n\twallet,\n\tmarketplace,\n\torderId,\n\tquantity,\n\tcollectable,\n\tcheckoutOptions,\n\tfee,\n\tskipNativeBalanceCheck,\n\tnativeTokenAddress,\n\tbuyAnalyticsId,\n}: GetBuyCollectableParams) => {\n\tconst marketplaceClient = getMarketplaceClient(config);\n\tconst { steps } = await marketplaceClient.generateBuyTransaction({\n\t\tchainId: String(chainId),\n\t\tcollectionAddress,\n\t\tbuyer: await wallet.address(),\n\t\tmarketplace: marketplace,\n\t\tordersData: [\n\t\t\t{\n\t\t\t\torderId: orderId,\n\t\t\t\tquantity: quantity.toString(),\n\t\t\t\ttokenId: collectibleId,\n\t\t\t},\n\t\t],\n\t\tadditionalFees: [fee],\n\t\twalletType: WalletKind.unknown,\n\t});\n\n\tconst buyStep = steps.find((step) => step.id === StepType.buy);\n\tconst approveStep = steps.find((step) => step.id === StepType.tokenApproval);\n\n\tconst approvedSpenderAddress = approveStep\n\t\t? decodeERC20Approval(approveStep.data as Hex).spender\n\t\t: undefined;\n\n\tif (!buyStep) {\n\t\tthrow new Error('Buy step not found');\n\t}\n\n\tconst creditCardProviders = customCreditCardProviderCallback\n\t\t? ['custom']\n\t\t: checkoutOptions.nftCheckout || [];\n\n\tconst isTransakSupported = creditCardProviders.includes('transak');\n\n\tlet transakContractId: string | undefined;\n\n\tif (isTransakSupported) {\n\t\tconst sequenceApiClient = getSequenceApiClient(config);\n\t\tconst transakContractIdResponse =\n\t\t\tawait sequenceApiClient.checkoutOptionsGetTransakContractID({\n\t\t\t\tchainId,\n\t\t\t\tcontractAddress: buyStep.to,\n\t\t\t});\n\n\t\tif (transakContractIdResponse.contractId !== '') {\n\t\t\ttransakContractId = transakContractIdResponse.contractId;\n\t\t}\n\t}\n\n\treturn {\n\t\tchain: chainId,\n\t\tcollectibles: [\n\t\t\t{\n\t\t\t\ttokenId: collectibleId,\n\t\t\t\tquantity: quantity.toString(),\n\t\t\t\tdecimals: collectable.decimals,\n\t\t\t},\n\t\t],\n\t\tcurrencyAddress: priceCurrencyAddress,\n\t\tprice: buyStep.price,\n\t\ttargetContractAddress: buyStep.to,\n\t\tapprovedSpenderAddress,\n\t\ttxData: buyStep.data as Hex,\n\t\tcollectionAddress,\n\t\trecipientAddress: await wallet.address(),\n\t\tenableMainCurrencyPayment: true,\n\t\tenableSwapPayments: !!checkoutOptions.swap,\n\t\tcreditCardProviders,\n\t\tonSuccess: (hash: string) => {\n\t\t\tcallbacks?.onSuccess?.({ hash: hash as Hash });\n\t\t},\n\t\tsupplementaryAnalyticsInfo: {\n\t\t\trequestId: orderId,\n\t\t\tmarketplaceKind: marketplace,\n\t\t\tbuyAnalyticsId,\n\t\t\tmarketplaceType: 'market',\n\t\t},\n\t\tonError: callbacks?.onError,\n\t\tonClose: () => {\n\t\t\tconst queryClient = getQueryClient();\n\t\t\tqueryClient.invalidateQueries();\n\t\t\tbuyModalStore.send({ type: 'close' });\n\t\t},\n\t\tskipNativeBalanceCheck,\n\t\tnativeTokenAddress,\n\t\t...(customCreditCardProviderCallback && {\n\t\t\tcustomProviderCallback: () => {\n\t\t\t\tcustomCreditCardProviderCallback(buyStep);\n\t\t\t\tbuyModalStore.send({ type: 'close' });\n\t\t\t},\n\t\t}),\n\t\t...(transakContractId && {\n\t\t\ttransakConfig: {\n\t\t\t\tcontractId: transakContractId,\n\t\t\t},\n\t\t}),\n\t} satisfies SelectPaymentSettings;\n};\n\ninterface usePaymentModalParams {\n\twallet: WalletInstance | undefined | null;\n\tquantity: number | undefined;\n\tmarketplace: MarketplaceKind | undefined;\n\tcollectable: TokenMetadata | undefined;\n\tcheckoutOptions: CheckoutOptions | undefined;\n\tpriceCurrencyAddress: string | undefined;\n\tenabled: boolean;\n}\n\nexport const usePaymentModalParams = (args: usePaymentModalParams) => {\n\tconst {\n\t\twallet,\n\t\tmarketplace,\n\t\tcollectable,\n\t\tcheckoutOptions,\n\t\tpriceCurrencyAddress,\n\t\tquantity,\n\t\tenabled,\n\t} = args;\n\n\tconst buyModalProps = useBuyModalProps();\n\tconst {\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tskipNativeBalanceCheck,\n\t\tnativeTokenAddress,\n\t} = buyModalProps;\n\n\t// Extract Marketplace-specific properties using type guard\n\tconst collectibleId = isMarketProps(buyModalProps)\n\t\t? buyModalProps.collectibleId\n\t\t: '';\n\tconst orderId = isMarketProps(buyModalProps) ? buyModalProps.orderId : '';\n\tconst customCreditCardProviderCallback = isMarketProps(buyModalProps)\n\t\t? buyModalProps.customCreditCardProviderCallback\n\t\t: undefined;\n\n\tconst config = useConfig();\n\tconst fee = useMarketPlatformFee(\n\t\tisMarketProps(buyModalProps)\n\t\t\t? {\n\t\t\t\t\tchainId,\n\t\t\t\t\tcollectionAddress,\n\t\t\t\t}\n\t\t\t: skipToken,\n\t);\n\tconst onSuccess = useOnSuccess();\n\tconst onError = useOnError();\n\tconst buyAnalyticsId = useBuyAnalyticsId();\n\n\tconst queryEnabled =\n\t\t!!wallet &&\n\t\t!!marketplace &&\n\t\t!!collectable &&\n\t\t!!checkoutOptions &&\n\t\t!!priceCurrencyAddress &&\n\t\t!!quantity &&\n\t\tenabled;\n\n\treturn useQuery({\n\t\tqueryKey: ['buyCollectableParams', buyModalProps, args, fee],\n\t\tqueryFn: queryEnabled\n\t\t\t? () =>\n\t\t\t\t\tgetBuyCollectableParams({\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\twallet,\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tcollectibleId,\n\t\t\t\t\t\tmarketplace,\n\t\t\t\t\t\torderId,\n\t\t\t\t\t\tquantity,\n\t\t\t\t\t\tcollectable,\n\t\t\t\t\t\tcheckoutOptions,\n\t\t\t\t\t\tfee,\n\t\t\t\t\t\tpriceCurrencyAddress,\n\t\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t\tonSuccess: onSuccess,\n\t\t\t\t\t\t\tonError: onError,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcustomCreditCardProviderCallback,\n\t\t\t\t\t\tskipNativeBalanceCheck,\n\t\t\t\t\t\tnativeTokenAddress,\n\t\t\t\t\t\tbuyAnalyticsId,\n\t\t\t\t\t})\n\t\t\t: skipToken,\n\t});\n};\n","'use client';\n\nimport {\n\ttype SelectPaymentSettings,\n\tuseSelectPaymentModal,\n} from '@0xsequence/checkout';\nimport type { ContractInfo, TokenMetadata } from '@0xsequence/metadata';\nimport { useEffect } from 'react';\nimport type { CheckoutOptions, Order } from '../../../../_internal';\nimport type { WalletInstance } from '../../../../_internal/wallet/wallet';\nimport { usePaymentModalParams } from '../hooks/usePaymentModalParams';\nimport { buyModalStore, usePaymentModalState, useQuantity } from '../store';\n\ninterface ERC721BuyModalProps {\n\tcollection: ContractInfo;\n\tcollectable: TokenMetadata;\n\torder: Order;\n\twallet: WalletInstance | null | undefined;\n\tcheckoutOptions: CheckoutOptions | undefined;\n\tchainId: number;\n}\n\nexport const ERC721BuyModal = ({\n\tcollectable,\n\torder,\n\twallet,\n\tcheckoutOptions,\n}: ERC721BuyModalProps) => {\n\tconst quantity = useQuantity();\n\n\t// Ensure quantity is set to 1 for ERC721\n\tuseEffect(() => {\n\t\tif (!quantity) {\n\t\t\tbuyModalStore.send({ type: 'setQuantity', quantity: 1 });\n\t\t}\n\t}, [quantity]);\n\n\tconst {\n\t\tdata: paymentModalParams,\n\t\tisLoading: isPaymentModalParamsLoading,\n\t\tisError: isPaymentModalParamsError,\n\t} = usePaymentModalParams({\n\t\twallet,\n\t\tquantity: quantity ?? undefined,\n\t\tmarketplace: order?.marketplace,\n\t\tcollectable,\n\t\tcheckoutOptions,\n\t\tpriceCurrencyAddress: order?.priceCurrencyAddress,\n\t\tenabled: true,\n\t});\n\n\t// Show loading or error states would be handled by parent router\n\tif (isPaymentModalParamsLoading || !paymentModalParams) {\n\t\treturn null;\n\t}\n\n\tif (isPaymentModalParamsError) {\n\t\tthrow new Error(\n\t\t\t'Failed to load payment parameters for ERC721 marketplace purchase',\n\t\t);\n\t}\n\n\treturn <PaymentModalOpener paymentModalParams={paymentModalParams} />;\n};\n\ninterface PaymentModalOpenerProps {\n\tpaymentModalParams: SelectPaymentSettings;\n}\n\nconst PaymentModalOpener = ({\n\tpaymentModalParams,\n}: PaymentModalOpenerProps) => {\n\tconst { openSelectPaymentModal } = useSelectPaymentModal();\n\tconst paymentModalState = usePaymentModalState();\n\n\tuseEffect(() => {\n\t\tif (paymentModalState === 'idle') {\n\t\t\tbuyModalStore.send({ type: 'openPaymentModal' });\n\t\t\topenSelectPaymentModal(paymentModalParams);\n\t\t\tbuyModalStore.send({ type: 'paymentModalOpened' });\n\t\t}\n\t}, [paymentModalState, paymentModalParams, openSelectPaymentModal]);\n\n\treturn null;\n};\n","// Enhanced error types with price context and better debugging information\nexport type BuyModalError =\n\t| PriceOverflowError\n\t| PriceCalculationError\n\t| InvalidPriceFormatError\n\t| InvalidQuantityError\n\t| NetworkError\n\t| ContractError\n\t| CheckoutError\n\t| ValidationError\n\t| StateError;\n\nexport interface PriceOverflowError {\n\ttype: 'PRICE_OVERFLOW';\n\tmaxSafeValue: string;\n\tattemptedValue: string;\n\toperation: string;\n\ttimestamp: number;\n}\n\nexport interface PriceCalculationError {\n\ttype: 'PRICE_CALCULATION_ERROR';\n\toperation: string;\n\tinputs: string[];\n\toriginalError?: string;\n\ttimestamp: number;\n}\n\n// export interface InsufficientFundsError {\n// type: \"INSUFFICIENT_FUNDS\";\n// required: Price;\n// available: Price;\n// currency: string;\n// shortfall: Price;\n// timestamp: number;\n// }\n\nexport interface InvalidPriceFormatError {\n\ttype: 'INVALID_PRICE_FORMAT';\n\tprovidedPrice: string;\n\texpectedFormat: string;\n\tsuggestions?: string[];\n\ttimestamp: number;\n}\n\nexport interface InvalidQuantityError {\n\ttype: 'INVALID_QUANTITY';\n\tprovided: number;\n\tmin: number;\n\tmax: number;\n\tavailable?: number;\n\ttimestamp: number;\n}\n\nexport interface NetworkError {\n\ttype: 'NETWORK_ERROR';\n\tmessage: string;\n\tretryable: boolean;\n\tchainId?: number;\n\tendpoint?: string;\n\ttimestamp: number;\n}\n\nexport interface ContractError {\n\ttype: 'CONTRACT_ERROR';\n\tcontractAddress: string;\n\tmessage: string;\n\tmethod?: string;\n\tchainId?: number;\n\tblockNumber?: number;\n\ttimestamp: number;\n}\n\nexport interface CheckoutError {\n\ttype: 'CHECKOUT_ERROR';\n\tprovider: string;\n\tmessage: string;\n\tcode?: string;\n\tretryable: boolean;\n\ttimestamp: number;\n}\n\nexport interface ValidationError {\n\ttype: 'VALIDATION_ERROR';\n\tfield: string;\n\tmessage: string;\n\tvalue?: unknown;\n\tconstraints?: Record<string, unknown>;\n\ttimestamp: number;\n}\n\nexport interface StateError {\n\ttype: 'STATE_ERROR';\n\tcurrentState: string;\n\tattemptedAction: string;\n\tmessage: string;\n\ttimestamp: number;\n}\n\n// biome-ignore lint/complexity/noStaticOnlyClass: provides better organization and type safety for error creation methods\nexport class BuyModalErrorFactory {\n\tstatic priceOverflow(\n\t\tmaxSafeValue: string,\n\t\tattemptedValue: string,\n\t\toperation: string,\n\t): PriceOverflowError {\n\t\treturn {\n\t\t\ttype: 'PRICE_OVERFLOW',\n\t\t\tmaxSafeValue,\n\t\t\tattemptedValue,\n\t\t\toperation,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic priceCalculation(\n\t\toperation: string,\n\t\tinputs: string[],\n\t\toriginalError?: string,\n\t): PriceCalculationError {\n\t\treturn {\n\t\t\ttype: 'PRICE_CALCULATION_ERROR',\n\t\t\toperation,\n\t\t\tinputs,\n\t\t\toriginalError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\t// static insufficientFunds(\n\t// required: Price,\n\t// available: Price,\n\t// currency: string,\n\t// shortfall: Price\n\t// ): InsufficientFundsError {\n\t// return {\n\t// type: \"INSUFFICIENT_FUNDS\",\n\t// required,\n\t// available,\n\t// currency,\n\t// shortfall,\n\t// timestamp: Date.now(),\n\t// };\n\t// }\n\n\tstatic invalidPriceFormat(\n\t\tprovidedPrice: string,\n\t\texpectedFormat: string,\n\t\tsuggestions?: string[],\n\t): InvalidPriceFormatError {\n\t\treturn {\n\t\t\ttype: 'INVALID_PRICE_FORMAT',\n\t\t\tprovidedPrice,\n\t\t\texpectedFormat,\n\t\t\tsuggestions,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic invalidQuantity(\n\t\tprovided: number,\n\t\tmin: number,\n\t\tmax: number,\n\t\tavailable?: number,\n\t): InvalidQuantityError {\n\t\treturn {\n\t\t\ttype: 'INVALID_QUANTITY',\n\t\t\tprovided,\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tavailable,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic networkError(\n\t\tmessage: string,\n\t\tretryable: boolean,\n\t\tchainId?: number,\n\t\tendpoint?: string,\n\t): NetworkError {\n\t\treturn {\n\t\t\ttype: 'NETWORK_ERROR',\n\t\t\tmessage,\n\t\t\tretryable,\n\t\t\tchainId,\n\t\t\tendpoint,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic contractError(\n\t\tcontractAddress: string,\n\t\tmessage: string,\n\t\tmethod?: string,\n\t\tchainId?: number,\n\t\tblockNumber?: number,\n\t): ContractError {\n\t\treturn {\n\t\t\ttype: 'CONTRACT_ERROR',\n\t\t\tcontractAddress,\n\t\t\tmessage,\n\t\t\tmethod,\n\t\t\tchainId,\n\t\t\tblockNumber,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic checkoutError(\n\t\tprovider: string,\n\t\tmessage: string,\n\t\tcode?: string,\n\t\tretryable = false,\n\t): CheckoutError {\n\t\treturn {\n\t\t\ttype: 'CHECKOUT_ERROR',\n\t\t\tprovider,\n\t\t\tmessage,\n\t\t\tcode,\n\t\t\tretryable,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic validationError(\n\t\tfield: string,\n\t\tmessage: string,\n\t\tvalue?: unknown,\n\t\tconstraints?: Record<string, unknown>,\n\t): ValidationError {\n\t\treturn {\n\t\t\ttype: 'VALIDATION_ERROR',\n\t\t\tfield,\n\t\t\tmessage,\n\t\t\tvalue,\n\t\t\tconstraints,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\n\tstatic stateError(\n\t\tcurrentState: string,\n\t\tattemptedAction: string,\n\t\tmessage: string,\n\t): StateError {\n\t\treturn {\n\t\t\ttype: 'STATE_ERROR',\n\t\t\tcurrentState,\n\t\t\tattemptedAction,\n\t\t\tmessage,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n}\n\n// Error message formatters for user-friendly display\n// biome-ignore lint/complexity/noStaticOnlyClass: Formatter provides good namespacing for error formatting\nexport class BuyModalErrorFormatter {\n\tstatic format(error: BuyModalError): string {\n\t\tswitch (error.type) {\n\t\t\tcase 'PRICE_OVERFLOW':\n\t\t\t\treturn 'Price calculation exceeded safe limits. Please reduce quantity or contact support.';\n\n\t\t\tcase 'PRICE_CALCULATION_ERROR':\n\t\t\t\treturn 'Price calculation failed. Please refresh and try again.';\n\n\t\t\t// case \"INSUFFICIENT_FUNDS\":\n\t\t\t// return `Insufficient funds. You need ${error.currency} but only have available.`;\n\n\t\t\tcase 'INVALID_PRICE_FORMAT':\n\t\t\t\treturn `Invalid price format. Expected: ${error.expectedFormat}`;\n\n\t\t\tcase 'INVALID_QUANTITY':\n\t\t\t\treturn `Invalid quantity. Must be between ${error.min} and ${error.max}.`;\n\n\t\t\tcase 'NETWORK_ERROR':\n\t\t\t\treturn error.retryable\n\t\t\t\t\t? `Network error. ${error.message} Please try again.`\n\t\t\t\t\t: `Network unavailable. ${error.message}`;\n\n\t\t\tcase 'CONTRACT_ERROR':\n\t\t\t\treturn `Blockchain error at ${error.contractAddress}. Please refresh and try again.`;\n\n\t\t\tcase 'CHECKOUT_ERROR':\n\t\t\t\treturn error.retryable\n\t\t\t\t\t? `Checkout failed with ${error.provider}. Please try again.`\n\t\t\t\t\t: `Checkout unavailable with ${error.provider}.`;\n\n\t\t\tcase 'VALIDATION_ERROR':\n\t\t\t\treturn `${error.field}: ${error.message}`;\n\n\t\t\tcase 'STATE_ERROR':\n\t\t\t\treturn `Invalid operation: ${error.message}`;\n\n\t\t\tdefault:\n\t\t\t\treturn 'An unexpected error occurred. Please try again.';\n\t\t}\n\t}\n\n\tstatic isRetryable(error: BuyModalError): boolean {\n\t\tswitch (error.type) {\n\t\t\tcase 'NETWORK_ERROR':\n\t\t\tcase 'CHECKOUT_ERROR':\n\t\t\t\treturn error.retryable;\n\n\t\t\tcase 'PRICE_CALCULATION_ERROR':\n\t\t\tcase 'CONTRACT_ERROR':\n\t\t\t\treturn true;\n\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tstatic getRecoveryAction(error: BuyModalError): string {\n\t\tswitch (error.type) {\n\t\t\t// case \"INSUFFICIENT_FUNDS\":\n\t\t\t// return \"Add funds to your wallet\";\n\n\t\t\tcase 'INVALID_QUANTITY':\n\t\t\t\treturn 'Adjust quantity';\n\n\t\t\tcase 'INVALID_PRICE_FORMAT':\n\t\t\t\treturn 'Enter valid price';\n\n\t\t\tcase 'NETWORK_ERROR':\n\t\t\tcase 'CONTRACT_ERROR':\n\t\t\t\treturn 'Retry transaction';\n\n\t\t\tcase 'CHECKOUT_ERROR':\n\t\t\t\treturn 'Try different payment method';\n\n\t\t\tdefault:\n\t\t\t\treturn 'Refresh and try again';\n\t\t}\n\t}\n\n\t/**\n\t * Transform class-based errors (BaseError/TransactionError) to user-friendly BuyModalError\n\t * This bridges the internal error system with the modal error system\n\t */\n\tstatic fromTransactionError(error: Error): BuyModalError {\n\t\t// Import transaction errors\n\t\tconst errorName = error.name || error.constructor.name;\n\n\t\tswitch (errorName) {\n\t\t\tcase 'PriceCalculationError':\n\t\t\t\treturn BuyModalErrorFactory.priceCalculation(\n\t\t\t\t\t'price calculation',\n\t\t\t\t\t[],\n\t\t\t\t\terror.message,\n\t\t\t\t);\n\n\t\t\tcase 'SalesContractError': {\n\t\t\t\t// Extract contract address from error message if available\n\t\t\t\tconst addressMatch = error.message.match(/0x[a-fA-F0-9]{40}/);\n\t\t\t\treturn BuyModalErrorFactory.contractError(\n\t\t\t\t\taddressMatch?.[0] || 'unknown',\n\t\t\t\t\terror.message,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase 'QuantityValidationError': {\n\t\t\t\t// Parse quantity from error message\n\t\t\t\tconst quantityMatch = error.message.match(/Invalid quantity: (\\d+)/);\n\t\t\t\tconst availableMatch = error.message.match(\n\t\t\t\t\t/available supply \\((\\d+)\\)/,\n\t\t\t\t);\n\t\t\t\treturn BuyModalErrorFactory.invalidQuantity(\n\t\t\t\t\tNumber(quantityMatch?.[1] || 0),\n\t\t\t\t\t0,\n\t\t\t\t\tNumber(availableMatch?.[1] || 0),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase 'UserRejectedRequestError':\n\t\t\t\treturn BuyModalErrorFactory.checkoutError(\n\t\t\t\t\t'user',\n\t\t\t\t\t'User cancelled the transaction',\n\t\t\t\t\t'USER_REJECTED',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\n\t\t\tcase 'NoWalletConnectedError':\n\t\t\t\treturn BuyModalErrorFactory.stateError(\n\t\t\t\t\t'disconnected',\n\t\t\t\t\t'purchase',\n\t\t\t\t\t'Please connect your wallet to continue',\n\t\t\t\t);\n\n\t\t\tcase 'ChainSwitchError':\n\t\t\tcase 'NetworkError':\n\t\t\t\treturn BuyModalErrorFactory.networkError(\n\t\t\t\t\terror.message,\n\t\t\t\t\ttrue, // retryable\n\t\t\t\t);\n\n\t\t\tcase 'ShopDataValidationError':\n\t\t\t\treturn BuyModalErrorFactory.validationError(\n\t\t\t\t\t'shop-config',\n\t\t\t\t\terror.message,\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\t// Generic error for unknown types\n\t\t\t\treturn BuyModalErrorFactory.stateError(\n\t\t\t\t\t'unknown',\n\t\t\t\t\t'operation',\n\t\t\t\t\terror.message || 'An unexpected error occurred',\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Enhanced error wrapper that catches and transforms errors consistently\n\t */\n\tstatic async withErrorHandling<T>(\n\t\toperation: () => Promise<T>,\n\t\t_context: string, // Prefixed with underscore to indicate intentionally unused\n\t): Promise<T> {\n\t\ttry {\n\t\t\treturn await operation();\n\t\t} catch (error) {\n\t\t\t// Transform the error to user-friendly format\n\t\t\tconst buyModalError = BuyModalErrorFormatter.fromTransactionError(\n\t\t\t\terror as Error,\n\t\t\t);\n\n\t\t\t// Re-throw as the original error for error boundaries to catch\n\t\t\t// but attach the transformed error for UI consumption\n\t\t\tconst enhancedError = error as Error & { buyModalError?: BuyModalError };\n\t\t\tenhancedError.buyModalError = buyModalError;\n\n\t\t\tthrow enhancedError;\n\t\t}\n\t}\n}\n","import type { SelectPaymentSettings } from '@0xsequence/checkout';\nimport { skipToken, useQuery } from '@tanstack/react-query';\nimport {\n\ttype Address,\n\tencodeFunctionData,\n\ttype Hash,\n\ttype Hex,\n\ttoHex,\n} from 'viem';\nimport { useAccount } from 'wagmi';\nimport { BuyModalErrorFactory } from '../../../../../types/buyModalErrors';\nimport { ERC721_SALE_ABI } from '../../../../../utils/abi/primary-sale/sequence-721-sales-contract';\nimport { getQueryClient } from '../../../../_internal';\nimport type { ModalCallbacks } from '../../_internal/types';\nimport { buyModalStore, useOnError, useOnSuccess } from '../store';\n\ninterface ERC721MintArgs {\n\tto: Address;\n\tamount: bigint;\n\tpaymentToken: Address;\n\tprice: bigint;\n\tproof: Hex[];\n}\n\nconst DEFAULT_PROOF = [toHex(0, { size: 32 })] as Hex[];\n\nconst encodeERC721MintData = ({\n\tto,\n\tamount,\n\tpaymentToken,\n\tprice,\n\tproof = DEFAULT_PROOF,\n}: ERC721MintArgs): Hex => {\n\tconst totalPrice = price * amount;\n\n\treturn encodeFunctionData({\n\t\tabi: ERC721_SALE_ABI,\n\t\tfunctionName: 'mint',\n\t\targs: [to, amount, paymentToken, totalPrice, proof],\n\t});\n};\n\ninterface GetERC721SalePaymentParams {\n\tchainId: number;\n\taddress: Address;\n\tsalesContractAddress: string;\n\tcollectionAddress: string;\n\tprice: bigint;\n\tcurrencyAddress: string;\n\tcallbacks: ModalCallbacks | undefined;\n\tcustomCreditCardProviderCallback: ((price: string) => void) | undefined;\n\tskipNativeBalanceCheck: boolean | undefined;\n\tnativeTokenAddress: string | undefined;\n\tcheckoutProvider?: string;\n\tquantity: number;\n}\n\nexport const getERC721SalePaymentParams = async ({\n\tchainId,\n\taddress,\n\tsalesContractAddress,\n\tcollectionAddress,\n\tprice,\n\tcurrencyAddress,\n\tcallbacks,\n\tcustomCreditCardProviderCallback,\n\tskipNativeBalanceCheck,\n\tnativeTokenAddress,\n\tcheckoutProvider,\n\tquantity,\n}: GetERC721SalePaymentParams) => {\n\ttry {\n\t\tconst purchaseTransactionData = encodeERC721MintData({\n\t\t\tto: address,\n\t\t\tamount: BigInt(quantity),\n\t\t\tpaymentToken: currencyAddress as Address,\n\t\t\tprice: price,\n\t\t\tproof: DEFAULT_PROOF,\n\t\t});\n\n\t\tconst creditCardProviders = customCreditCardProviderCallback\n\t\t\t? ['custom']\n\t\t\t: checkoutProvider\n\t\t\t\t? [checkoutProvider]\n\t\t\t\t: [];\n\n\t\treturn {\n\t\t\tchain: chainId,\n\t\t\tcollectibles: [\n\t\t\t\t{\n\t\t\t\t\tquantity: quantity.toString(),\n\t\t\t\t\tdecimals: 0,\n\t\t\t\t},\n\t\t\t],\n\t\t\tcurrencyAddress,\n\t\t\tprice: price.toString(),\n\t\t\ttargetContractAddress: salesContractAddress,\n\t\t\ttxData: purchaseTransactionData,\n\t\t\tcollectionAddress,\n\t\t\trecipientAddress: address,\n\t\t\tenableMainCurrencyPayment: true,\n\t\t\tenableSwapPayments: true,\n\t\t\tcreditCardProviders,\n\t\t\tonSuccess: (hash: string) => {\n\t\t\t\tcallbacks?.onSuccess?.({ hash: hash as Hash });\n\t\t\t},\n\t\t\tonError: callbacks?.onError,\n\t\t\tonClose: () => {\n\t\t\t\tconst queryClient = getQueryClient();\n\t\t\t\tqueryClient.invalidateQueries();\n\t\t\t\tbuyModalStore.send({ type: 'close' });\n\t\t\t},\n\t\t\tskipNativeBalanceCheck,\n\t\t\tsupplementaryAnalyticsInfo: {\n\t\t\t\tmarketplaceType: 'shop',\n\t\t\t},\n\t\t\tnativeTokenAddress,\n\t\t\t...(customCreditCardProviderCallback && {\n\t\t\t\tcustomProviderCallback: () => {\n\t\t\t\t\tcustomCreditCardProviderCallback(price.toString());\n\t\t\t\t\tbuyModalStore.send({ type: 'close' });\n\t\t\t\t},\n\t\t\t}),\n\t\t} satisfies SelectPaymentSettings;\n\t} catch (error) {\n\t\t// Convert to structured error for better debugging\n\t\tthrow BuyModalErrorFactory.priceCalculation(\n\t\t\t'ERC721 payment params calculation',\n\t\t\t[price.toString(), quantity.toString()],\n\t\t\terror instanceof Error ? error.message : 'Unknown error',\n\t\t);\n\t}\n};\n\ninterface UseERC721SalePaymentParams {\n\tsalesContractAddress: string | undefined;\n\tcollectionAddress: string | undefined;\n\tprice: string | undefined;\n\tcurrencyAddress: string | undefined;\n\tenabled: boolean;\n\tcheckoutProvider?: string;\n\tchainId: number;\n\tquantity: number;\n}\n\nexport const useERC721SalePaymentParams = (\n\targs: UseERC721SalePaymentParams,\n) => {\n\tconst {\n\t\tsalesContractAddress,\n\t\tcollectionAddress,\n\t\tprice,\n\t\tcurrencyAddress,\n\t\tenabled,\n\t\tcheckoutProvider,\n\t\tchainId,\n\t\tquantity,\n\t} = args;\n\n\tconst { address } = useAccount();\n\tconst onSuccess = useOnSuccess();\n\tconst onError = useOnError();\n\n\tconst queryEnabled =\n\t\tenabled &&\n\t\t!!address &&\n\t\t!!salesContractAddress &&\n\t\t!!collectionAddress &&\n\t\t!!price &&\n\t\t!!currencyAddress;\n\n\treturn useQuery({\n\t\tqueryKey: ['erc721SalePaymentParams', args],\n\t\tqueryFn: queryEnabled\n\t\t\t? () =>\n\t\t\t\t\tgetERC721SalePaymentParams({\n\t\t\t\t\t\tchainId,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tsalesContractAddress,\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tprice: BigInt(price),\n\t\t\t\t\t\tcurrencyAddress,\n\t\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t\tonSuccess,\n\t\t\t\t\t\t\tonError,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcustomCreditCardProviderCallback: undefined, // Can be added as a prop if needed\n\t\t\t\t\t\tskipNativeBalanceCheck: false, // Can be added as a prop if needed\n\t\t\t\t\t\tnativeTokenAddress: undefined, // Can be added as a prop if needed\n\n\t\t\t\t\t\tcheckoutProvider,\n\t\t\t\t\t\tquantity,\n\t\t\t\t\t})\n\t\t\t: skipToken,\n\t});\n};\n","'use client';\n\nimport {\n\ttype SelectPaymentSettings,\n\tuseSelectPaymentModal,\n} from '@0xsequence/checkout';\nimport type { ContractInfo } from '@0xsequence/metadata';\nimport { useEffect } from 'react';\nimport { BuyModalErrorFactory } from '../../../../../types/buyModalErrors';\nimport { useERC721SalePaymentParams } from '../hooks/useERC721SalePaymentParams';\nimport { buyModalStore, usePaymentModalState } from '../store';\nimport type { ShopData } from './types';\n\ninterface ERC721ShopModalProps {\n\tcollection: ContractInfo;\n\tshopData: ShopData;\n\tchainId: number;\n}\n\nexport const ERC721ShopModal = ({\n\tcollection,\n\tshopData,\n\tchainId,\n}: ERC721ShopModalProps) => {\n\tconst quantity = Number(shopData.items[0]?.quantity ?? 1);\n\n\tconst {\n\t\tdata: erc721SalePaymentParams,\n\t\tisLoading: isErc721PaymentParamsLoading,\n\t\tisError: isErc721PaymentParamsError,\n\t} = useERC721SalePaymentParams({\n\t\tsalesContractAddress: shopData.salesContractAddress,\n\t\tcollectionAddress: collection.address,\n\t\tprice: shopData.salePrice?.amount || '0',\n\t\tcurrencyAddress: shopData.salePrice?.currencyAddress || '',\n\t\tenabled: true,\n\t\tchainId,\n\t\tquantity,\n\t});\n\n\t// Handle loading or error states\n\tif (isErc721PaymentParamsLoading || !erc721SalePaymentParams) {\n\t\treturn null;\n\t}\n\n\tif (isErc721PaymentParamsError) {\n\t\tthrow BuyModalErrorFactory.contractError(\n\t\t\tshopData.salesContractAddress,\n\t\t\t'Failed to load ERC721 sale parameters',\n\t\t);\n\t}\n\n\treturn <PaymentModalOpener paymentModalParams={erc721SalePaymentParams} />;\n};\n\ninterface PaymentModalOpenerProps {\n\tpaymentModalParams: SelectPaymentSettings;\n}\n\nconst PaymentModalOpener = ({\n\tpaymentModalParams,\n}: PaymentModalOpenerProps) => {\n\tconst { openSelectPaymentModal } = useSelectPaymentModal();\n\tconst paymentModalState = usePaymentModalState();\n\tconst totalPrice =\n\t\tBigInt(paymentModalParams.price) *\n\t\tBigInt(paymentModalParams.collectibles[0].quantity);\n\n\tuseEffect(() => {\n\t\tif (paymentModalState === 'idle') {\n\t\t\tbuyModalStore.send({ type: 'openPaymentModal' });\n\t\t\topenSelectPaymentModal({\n\t\t\t\t...paymentModalParams,\n\t\t\t\tprice: String(totalPrice),\n\t\t\t});\n\t\t\tbuyModalStore.send({ type: 'paymentModalOpened' });\n\t\t}\n\t}, [\n\t\tpaymentModalState,\n\t\tpaymentModalParams,\n\t\topenSelectPaymentModal,\n\t\ttotalPrice,\n\t]);\n\n\treturn null;\n};\n","'use client';\n\nimport { Text, TokenImage } from '@0xsequence/design-system';\nimport { useState } from 'react';\nimport type { Address } from 'viem';\nimport { maxUint256 } from 'viem';\nimport { DEFAULT_MARKETPLACE_FEE_PERCENTAGE } from '../../../../../consts';\nimport type { MarketplaceType } from '../../../../../types';\nimport { formatPriceWithFee } from '../../../../../utils/price';\nimport type { Order } from '../../../../_internal';\nimport { useCurrency, useMarketplaceConfig } from '../../../../hooks';\nimport { ActionModal } from '../../_internal/components/actionModal';\nimport QuantityInput from '../../_internal/components/quantityInput';\nimport { buyModalStore, useIsOpen } from '../store';\n\nconst INFINITY_STRING = maxUint256.toString();\n\ntype ERC1155QuantityModalProps = {\n\torder?: Order;\n\tmarketplaceType: MarketplaceType;\n\tquantityDecimals: number;\n\tquantityRemaining: string;\n\tunlimitedSupply?: boolean;\n\tsalePrice?: {\n\t\tamount: string;\n\t\tcurrencyAddress: Address;\n\t};\n\tchainId: number;\n};\n\nexport const ERC1155QuantityModal = ({\n\torder,\n\tquantityDecimals,\n\tquantityRemaining,\n\tunlimitedSupply,\n\tsalePrice,\n\tchainId,\n\tmarketplaceType,\n}: ERC1155QuantityModalProps) => {\n\tconst isOpen = useIsOpen();\n\n\tconst [localQuantity, setLocalQuantity] = useState('1');\n\tconst [invalidQuantity, setInvalidQuantity] = useState(false);\n\n\tconst maxQuantity = unlimitedSupply ? INFINITY_STRING : quantityRemaining;\n\n\treturn (\n\t\t<ActionModal\n\t\t\tisOpen={isOpen}\n\t\t\tchainId={chainId}\n\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\ttitle=\"Select Quantity\"\n\t\t\tdisableAnimation={true}\n\t\t\tctas={[\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Buy now',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tbuyModalStore.send({\n\t\t\t\t\t\t\ttype: 'setQuantity',\n\t\t\t\t\t\t\tquantity: Number(localQuantity),\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tdisabled: invalidQuantity,\n\t\t\t\t},\n\t\t\t]}\n\t\t>\n\t\t\t<div className=\"flex w-full flex-col gap-4\">\n\t\t\t\t<QuantityInput\n\t\t\t\t\tquantity={localQuantity}\n\t\t\t\t\tinvalidQuantity={invalidQuantity}\n\t\t\t\t\tonQuantityChange={setLocalQuantity}\n\t\t\t\t\tonInvalidQuantityChange={setInvalidQuantity}\n\t\t\t\t\tdecimals={quantityDecimals}\n\t\t\t\t\tmaxQuantity={maxQuantity}\n\t\t\t\t/>\n\n\t\t\t\t<TotalPrice\n\t\t\t\t\torder={order}\n\t\t\t\t\tquantityStr={localQuantity}\n\t\t\t\t\tsalePrice={salePrice}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t\tmarketplaceType={marketplaceType}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</ActionModal>\n\t);\n};\n\ntype TotalPriceProps = {\n\torder?: Order;\n\tquantityStr: string;\n\tsalePrice?: {\n\t\tamount: string;\n\t\tcurrencyAddress: Address;\n\t};\n\tchainId: number;\n\tmarketplaceType: MarketplaceType;\n};\n\nconst TotalPrice = ({\n\torder,\n\tquantityStr,\n\tsalePrice,\n\tchainId,\n\tmarketplaceType,\n}: TotalPriceProps) => {\n\tconst isShop = marketplaceType === 'shop';\n\tconst isMarket = marketplaceType === 'market';\n\tconst { data: marketplaceConfig } = useMarketplaceConfig();\n\tconst { data: currency, isLoading: isCurrencyLoading } = useCurrency({\n\t\tchainId,\n\t\tcurrencyAddress: (order\n\t\t\t? order.priceCurrencyAddress\n\t\t\t: salePrice?.currencyAddress) as Address,\n\t});\n\n\tlet error: null | string = null;\n\tlet formattedPrice = '0';\n\n\tconst quantity = BigInt(quantityStr);\n\n\tif (isMarket && currency && order) {\n\t\ttry {\n\t\t\t// Find fee percentage from market collections only\n\t\t\tconst marketCollection = marketplaceConfig?.market?.collections?.find(\n\t\t\t\t(col) =>\n\t\t\t\t\tcol.itemsAddress.toLowerCase() ===\n\t\t\t\t\t\torder.collectionContractAddress.toLowerCase() &&\n\t\t\t\t\tcol.chainId === chainId,\n\t\t\t);\n\t\t\tconst marketplaceFeePercentage =\n\t\t\t\tmarketCollection?.feePercentage ?? DEFAULT_MARKETPLACE_FEE_PERCENTAGE;\n\t\t\tconst quantity = BigInt(quantityStr);\n\t\t\tconst totalPriceRaw = BigInt(order ? order.priceAmount : '0') * quantity;\n\n\t\t\tformattedPrice = formatPriceWithFee(\n\t\t\t\ttotalPriceRaw,\n\t\t\t\tcurrency.decimals,\n\t\t\t\tmarketplaceFeePercentage,\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tconsole.error('Error formatting price', e);\n\t\t\terror = 'Unable to calculate total price';\n\t\t}\n\t}\n\n\tif (isShop && salePrice && currency) {\n\t\tconst totalPriceRaw = BigInt(salePrice.amount) * quantity;\n\t\tformattedPrice = formatPriceWithFee(\n\t\t\ttotalPriceRaw,\n\t\t\tcurrency.decimals,\n\t\t\t// Fee percentage isn't included if it's sale contract\n\t\t\t0,\n\t\t);\n\t}\n\n\treturn error ? (\n\t\t<Text className=\"font-body font-medium text-xs\" color=\"text50\">\n\t\t\t{error}\n\t\t</Text>\n\t) : (\n\t\t<div className=\"flex justify-between\">\n\t\t\t<Text className=\"font-body font-medium text-xs\" color=\"text50\">\n\t\t\t\tTotal Price\n\t\t\t</Text>\n\n\t\t\t<div className=\"flex items-center gap-0.5\">\n\t\t\t\t{!currency || isCurrencyLoading ? (\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<Text className=\"font-body text-text-50 text-xs\">Loading...</Text>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{currency?.imageUrl && (\n\t\t\t\t\t\t\t<TokenImage src={currency.imageUrl} size=\"xs\" />\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<Text className=\"font-body font-bold text-text-100 text-xs\">\n\t\t\t\t\t\t\t{formattedPrice}\n\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t<Text className=\"font-body font-bold text-text-80 text-xs\">\n\t\t\t\t\t\t\t{currency?.symbol}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","'use client';\n\nimport {\n\ttype SelectPaymentSettings,\n\tuseSelectPaymentModal,\n} from '@0xsequence/checkout';\nimport type { ContractInfo, TokenMetadata } from '@0xsequence/metadata';\nimport { useEffect } from 'react';\nimport type { CheckoutOptions, Order } from '../../../../_internal';\nimport type { WalletInstance } from '../../../../_internal/wallet/wallet';\nimport { usePaymentModalParams } from '../hooks/usePaymentModalParams';\nimport {\n\tbuyModalStore,\n\tisShopProps,\n\tuseBuyModalProps,\n\tusePaymentModalState,\n\tuseQuantity,\n} from '../store';\nimport { ERC1155QuantityModal } from './ERC1155QuantityModal';\n\ninterface ERC1155BuyModalProps {\n\tcollection: ContractInfo;\n\tcollectable: TokenMetadata;\n\torder: Order;\n\twallet: WalletInstance | null | undefined;\n\tcheckoutOptions: CheckoutOptions | undefined;\n\tchainId: number;\n}\n\nexport const ERC1155BuyModal = ({\n\tcollectable,\n\torder,\n\twallet,\n\tcheckoutOptions,\n\tchainId,\n}: ERC1155BuyModalProps) => {\n\tconst quantity = useQuantity();\n\tconst modalProps = useBuyModalProps();\n\tconst marketplaceType = modalProps.marketplaceType || 'market';\n\tconst isShop = isShopProps(modalProps);\n\tconst quantityDecimals = isShop\n\t\t? modalProps.quantityDecimals\n\t\t: order?.quantityDecimals;\n\tconst quantityRemaining = isShop\n\t\t? modalProps.quantityRemaining?.toString()\n\t\t: order?.quantityRemaining;\n\n\tif (!quantity) {\n\t\treturn (\n\t\t\t<ERC1155QuantityModal\n\t\t\t\torder={order}\n\t\t\t\tmarketplaceType={marketplaceType}\n\t\t\t\tquantityDecimals={quantityDecimals}\n\t\t\t\tquantityRemaining={quantityRemaining}\n\t\t\t\tchainId={chainId}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!checkoutOptions) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\twallet={wallet}\n\t\t\tquantity={quantity}\n\t\t\torder={order}\n\t\t\tcollectable={collectable}\n\t\t\tcheckoutOptions={checkoutOptions}\n\t\t/>\n\t);\n};\n\ninterface ModalProps {\n\twallet: WalletInstance | null | undefined;\n\tquantity: number;\n\torder: Order;\n\tcollectable: TokenMetadata;\n\tcheckoutOptions: CheckoutOptions;\n}\n\nconst Modal = ({\n\twallet,\n\tquantity,\n\torder,\n\tcollectable,\n\tcheckoutOptions,\n}: ModalProps) => {\n\tconst {\n\t\tdata: paymentModalParams,\n\t\tisLoading: isPaymentModalParamsLoading,\n\t\tisError: isPaymentModalParamsError,\n\t} = usePaymentModalParams({\n\t\twallet,\n\t\tquantity,\n\t\tmarketplace: order?.marketplace,\n\t\tcollectable,\n\t\tcheckoutOptions,\n\t\tpriceCurrencyAddress: order?.priceCurrencyAddress,\n\t\tenabled: true,\n\t});\n\n\tif (isPaymentModalParamsLoading || !paymentModalParams) {\n\t\treturn null;\n\t}\n\n\tif (isPaymentModalParamsError) {\n\t\tthrow new Error(\n\t\t\t'Failed to load payment parameters for ERC1155 marketplace purchase',\n\t\t);\n\t}\n\n\treturn <PaymentModalOpener paymentModalParams={paymentModalParams} />;\n};\n\ninterface PaymentModalOpenerProps {\n\tpaymentModalParams: SelectPaymentSettings;\n}\n\nconst PaymentModalOpener = ({\n\tpaymentModalParams,\n}: PaymentModalOpenerProps) => {\n\tconst { openSelectPaymentModal } = useSelectPaymentModal();\n\tconst paymentModalState = usePaymentModalState();\n\n\tuseEffect(() => {\n\t\tif (paymentModalState === 'idle') {\n\t\t\tbuyModalStore.send({ type: 'openPaymentModal' });\n\t\t\topenSelectPaymentModal(paymentModalParams);\n\t\t\tbuyModalStore.send({ type: 'paymentModalOpened' });\n\t\t}\n\t}, [paymentModalState, paymentModalParams, openSelectPaymentModal]);\n\n\treturn null;\n};\n","import { useERC1155SaleContractCheckout } from '@0xsequence/checkout';\nimport type { Hash } from 'viem';\nimport { useAccount } from 'wagmi';\nimport type {\n\tCheckoutOptions,\n\tCheckoutOptionsItem,\n} from '../../../../_internal';\nimport { getQueryClient } from '../../../../_internal';\nimport {\n\tbuyModalStore,\n\tuseBuyAnalyticsId,\n\tuseOnError,\n\tuseOnSuccess,\n\tuseQuantity,\n} from '../store';\n\ninterface UseERC1155CheckoutParams {\n\tchainId: number;\n\tsalesContractAddress: string;\n\tcollectionAddress: string;\n\titems: Array<CheckoutOptionsItem>;\n\tcheckoutOptions?: CheckoutOptions;\n\tcustomProviderCallback?: (\n\t\tonSuccess: (txHash: string) => void,\n\t\tonError: (error: Error) => void,\n\t\tonClose: () => void,\n\t) => void;\n\tenabled?: boolean;\n}\n\nexport const useERC1155Checkout = ({\n\tchainId,\n\tsalesContractAddress,\n\tcollectionAddress,\n\titems,\n\tcheckoutOptions,\n\tcustomProviderCallback,\n\tenabled = true,\n}: UseERC1155CheckoutParams) => {\n\tconst { address: accountAddress } = useAccount();\n\tconst quantity = useQuantity();\n\tconst onSuccess = useOnSuccess();\n\tconst onError = useOnError();\n\tconst saleAnalyticsId = useBuyAnalyticsId();\n\n\tconst checkout = useERC1155SaleContractCheckout({\n\t\tchain: chainId,\n\t\tchainId: chainId.toString(),\n\t\tcontractAddress: salesContractAddress,\n\t\tcollectionAddress,\n\t\titems: [\n\t\t\t{\n\t\t\t\t...items[0],\n\t\t\t\tquantity: quantity?.toString() || '1',\n\t\t\t},\n\t\t],\n\t\twallet: accountAddress ?? '',\n\t\t// Pass checkout options if available\n\t\t...(checkoutOptions && { checkoutOptions }),\n\t\tonSuccess: (hash: string) => {\n\t\t\tonSuccess({ hash: hash as Hash });\n\t\t},\n\t\tonError: (error: Error) => {\n\t\t\tonError(error);\n\t\t},\n\t\tonClose: () => {\n\t\t\tconst queryClient = getQueryClient();\n\t\t\tqueryClient.invalidateQueries();\n\t\t\tbuyModalStore.send({ type: 'close' });\n\t\t},\n\t\tcustomProviderCallback,\n\t\tsupplementaryAnalyticsInfo: {\n\t\t\tmarketplaceType: 'shop',\n\t\t\tsaleAnalyticsId,\n\t\t},\n\t});\n\n\treturn {\n\t\t...checkout,\n\t\tisEnabled: Boolean(enabled && accountAddress),\n\t};\n};\n","'use client';\n\nimport type { ContractInfo } from '@0xsequence/metadata';\nimport { useEffect } from 'react';\nimport { type Address, zeroAddress } from 'viem';\nimport type { CheckoutOptions } from '../../../../_internal';\nimport { LoadingModal } from '../../_internal/components/actionModal/LoadingModal';\nimport { useERC1155Checkout } from '../hooks/useERC1155Checkout';\nimport {\n\tbuyModalStore,\n\ttype CheckoutOptionsSalesContractProps,\n\tisShopProps,\n\tuseBuyModalProps,\n\tuseCheckoutModalState,\n\tuseQuantity,\n} from '../store';\nimport { ERC1155QuantityModal } from './ERC1155QuantityModal';\nimport type { ShopData } from './types';\n\ninterface ERC1155ShopModalProps {\n\tcollection: ContractInfo;\n\tshopData: ShopData;\n\tchainId: number;\n}\n\nexport const ERC1155ShopModal = ({\n\tcollection,\n\tshopData,\n\tchainId,\n}: ERC1155ShopModalProps) => {\n\tconst quantity = useQuantity();\n\tconst modalProps = useBuyModalProps();\n\tconst isShop = isShopProps(modalProps);\n\tconst quantityDecimals =\n\t\tisShop && modalProps.quantityDecimals ? modalProps.quantityDecimals : 0;\n\tconst quantityRemaining =\n\t\tisShop && modalProps.quantityRemaining\n\t\t\t? modalProps.quantityRemaining.toString()\n\t\t\t: '0';\n\tconst unlimitedSupply =\n\t\tisShop && modalProps.unlimitedSupply ? modalProps.unlimitedSupply : false;\n\n\tif (!quantity) {\n\t\treturn (\n\t\t\t<ERC1155QuantityModal\n\t\t\t\tsalePrice={{\n\t\t\t\t\tamount: shopData.salePrice?.amount ?? '0',\n\t\t\t\t\tcurrencyAddress:\n\t\t\t\t\t\t(shopData.salePrice?.currencyAddress as Address) ?? zeroAddress,\n\t\t\t\t}}\n\t\t\t\tmarketplaceType=\"shop\"\n\t\t\t\tquantityDecimals={quantityDecimals}\n\t\t\t\tquantityRemaining={quantityRemaining}\n\t\t\t\tunlimitedSupply={unlimitedSupply}\n\t\t\t\tchainId={chainId}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ERC1155SaleContractCheckoutModalOpener\n\t\t\tchainId={chainId}\n\t\t\tsalesContractAddress={shopData.salesContractAddress as Address}\n\t\t\tcollectionAddress={collection.address as Address}\n\t\t\titems={shopData.items.map((item) => ({\n\t\t\t\t...item,\n\t\t\t\ttokenId: item.tokenId ?? '0',\n\t\t\t\tquantity: quantity.toString() ?? '1',\n\t\t\t}))}\n\t\t\tcheckoutOptions={shopData.checkoutOptions}\n\t\t\tenabled={!!shopData.salesContractAddress && !!shopData.items}\n\t\t/>\n\t);\n};\n\ninterface ERC1155SaleContractCheckoutModalOpenerProps\n\textends CheckoutOptionsSalesContractProps {\n\tenabled: boolean;\n\tcheckoutOptions?: CheckoutOptions;\n}\n\nconst ERC1155SaleContractCheckoutModalOpener = ({\n\tchainId,\n\tsalesContractAddress,\n\tcollectionAddress,\n\titems,\n\tcheckoutOptions,\n\tenabled,\n\tcustomProviderCallback,\n}: ERC1155SaleContractCheckoutModalOpenerProps) => {\n\tconst checkoutModalState = useCheckoutModalState();\n\n\tconst { openCheckoutModal, isLoading, isError, isEnabled } =\n\t\tuseERC1155Checkout({\n\t\t\tchainId,\n\t\t\tsalesContractAddress,\n\t\t\tcollectionAddress,\n\t\t\titems,\n\t\t\tcheckoutOptions,\n\t\t\tcustomProviderCallback,\n\t\t\tenabled,\n\t\t});\n\n\tuseEffect(() => {\n\t\tif (checkoutModalState === 'idle' && isEnabled && !isLoading && !isError) {\n\t\t\tbuyModalStore.send({ type: 'openCheckoutModal' });\n\t\t\topenCheckoutModal();\n\t\t\tbuyModalStore.send({ type: 'checkoutModalOpened' });\n\t\t}\n\t}, [checkoutModalState, isLoading, isError, isEnabled, openCheckoutModal]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<LoadingModal\n\t\t\t\tisOpen={true}\n\t\t\t\tchainId={chainId}\n\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\ttitle=\"Loading Sequence Pay\"\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n};\n","'use client';\n\nimport { ErrorModal } from '../../_internal/components/actionModal/ErrorModal';\nimport { LoadingModal } from '../../_internal/components/actionModal/LoadingModal';\nimport { useLoadData } from '../hooks/useLoadData';\nimport {\n\tbuyModalStore,\n\tisShopProps,\n\tuseBuyModalProps,\n\tuseOnError,\n} from '../store';\nimport { ERC721BuyModal } from './ERC721BuyModal';\nimport { ERC721ShopModal } from './ERC721ShopModal';\nimport { ERC1155BuyModal } from './ERC1155BuyModal';\nimport { ERC1155ShopModal } from './ERC1155ShopModal';\n\nexport const BuyModalRouter = () => {\n\tconst modalProps = useBuyModalProps();\n\tconst chainId = modalProps.chainId;\n\tconst isShop = isShopProps(modalProps);\n\tconst onError = useOnError();\n\tconst {\n\t\tcollection,\n\t\tcollectable,\n\t\twallet,\n\t\tisLoading,\n\t\torder,\n\t\tcheckoutOptions,\n\t\tcurrency,\n\t\tshopData,\n\t\tisError,\n\t} = useLoadData();\n\n\tif (isError) {\n\t\treturn (\n\t\t\t<ErrorModal\n\t\t\t\tisOpen={true}\n\t\t\t\tchainId={chainId}\n\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\ttitle=\"Loading Error\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isLoading || !collection) {\n\t\treturn (\n\t\t\t<LoadingModal\n\t\t\t\tisOpen={true}\n\t\t\t\tchainId={chainId}\n\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\ttitle=\"Loading Sequence Pay\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isShop) {\n\t\tif (collection.type === 'ERC721') {\n\t\t\tif (!shopData || !currency) {\n\t\t\t\treturn (\n\t\t\t\t\t<LoadingModal\n\t\t\t\t\t\tisOpen={true}\n\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\t\t\ttitle=\"Loading Sequence Pay\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<ERC721ShopModal\n\t\t\t\t\tcollection={collection}\n\t\t\t\t\tshopData={shopData}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tif (collection.type === 'ERC1155') {\n\t\t\tif (!shopData || !currency) {\n\t\t\t\treturn (\n\t\t\t\t\t<LoadingModal\n\t\t\t\t\t\tisOpen={true}\n\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\t\t\ttitle=\"Loading Sequence Pay\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<ERC1155ShopModal\n\t\t\t\t\tcollection={collection}\n\t\t\t\t\tshopData={shopData}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (collection.type === 'ERC721') {\n\t\t\tif (!collectable || !order || !wallet || !checkoutOptions) {\n\t\t\t\treturn (\n\t\t\t\t\t<LoadingModal\n\t\t\t\t\t\tisOpen={true}\n\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\t\t\ttitle=\"Loading Sequence Pay\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<ERC721BuyModal\n\t\t\t\t\tcollection={collection}\n\t\t\t\t\tcollectable={collectable}\n\t\t\t\t\torder={order}\n\t\t\t\t\twallet={wallet}\n\t\t\t\t\tcheckoutOptions={checkoutOptions}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tif (collection.type === 'ERC1155') {\n\t\t\tif (!collectable || !order || !wallet || !checkoutOptions) {\n\t\t\t\treturn (\n\t\t\t\t\t<LoadingModal\n\t\t\t\t\t\tisOpen={true}\n\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\t\t\t\ttitle=\"Loading Sequence Pay\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<ERC1155BuyModal\n\t\t\t\t\tcollection={collection}\n\t\t\t\t\tcollectable={collectable}\n\t\t\t\t\torder={order}\n\t\t\t\t\twallet={wallet}\n\t\t\t\t\tcheckoutOptions={checkoutOptions}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t}\n\n\tonError(\n\t\tnew Error(\n\t\t\t`Unsupported configuration: ${collection.type} in ${\n\t\t\t\tisShop ? 'shop' : 'market'\n\t\t\t} mode`,\n\t\t),\n\t);\n\treturn (\n\t\t<ErrorModal\n\t\t\tisOpen={true}\n\t\t\tchainId={chainId}\n\t\t\tonClose={() => buyModalStore.send({ type: 'close' })}\n\t\t\ttitle=\"Unsupported Configuration\"\n\t\t/>\n\t);\n};\n","'use client';\n\nimport { useIsOpen } from '../store';\nimport { BuyModalRouter } from './BuyModalRouter';\n\nexport const BuyModal = () => {\n\tconst isOpen = useIsOpen();\n\n\tif (!isOpen) {\n\t\treturn null;\n\t}\n\n\treturn <BuyModalRouter />;\n};\n","'use client';\n\nimport { DayPicker, type PropsSingle } from 'react-day-picker';\n\nexport type CalendarProps = React.PropsWithChildren<PropsSingle> & {\n\tselectedDate?: Date;\n\tsetSelectedDate?: (date: Date) => void;\n};\n\nfunction Calendar({ ...props }: CalendarProps) {\n\tconst { selectedDate, setSelectedDate } = props;\n\n\treturn (\n\t\t<DayPicker\n\t\t\tdisabled={{\n\t\t\t\tbefore: new Date(),\n\t\t\t}}\n\t\t\tselected={selectedDate as unknown as Date}\n\t\t\tonDayClick={setSelectedDate}\n\t\t\tdefaultMonth={selectedDate}\n\t\t\tmodifiersStyles={{\n\t\t\t\tselected: {\n\t\t\t\t\tcolor: 'hsl(var(--foreground))',\n\t\t\t\t\tbackground: 'hsl(var(--primary))',\n\t\t\t\t\tborder: 'none',\n\t\t\t\t},\n\t\t\t}}\n\t\t\tstyles={{\n\t\t\t\troot: {\n\t\t\t\t\twidth: 'max-content',\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tcolor: 'hsl(var(--foreground))',\n\t\t\t\t\tbackground: 'hsl(var(--background))',\n\t\t\t\t\tborder: '1px solid hsl(var(--border))',\n\t\t\t\t\tborderRadius: 'var(--radius)',\n\t\t\t\t\tpadding: '0.5rem',\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t},\n\t\t\t\tday: {\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\twidth: '1rem',\n\t\t\t\t\theight: '1rem',\n\t\t\t\t},\n\t\t\t\tday_button: {\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\twidth: '1.8rem',\n\t\t\t\t\theight: '1.5rem',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborder: 'none',\n\t\t\t\t},\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\nCalendar.displayName = 'Calendar';\n\nexport default Calendar;\n","'use client';\n\nimport './overrides.css';\nimport {\n\tButton,\n\tDropdownMenuContent,\n\tDropdownMenuPortal,\n\tDropdownMenuRoot,\n\tDropdownMenuTrigger,\n} from '@0xsequence/design-system';\nimport { differenceInDays, format, isSameDay, startOfDay } from 'date-fns';\nimport SvgCalendarIcon from '../../../../icons/CalendarIcon';\nimport Calendar from '../calendar';\nimport { PRESET_RANGES, type RangeType } from '../expirationDateSelect';\n\ntype CalendarDropdownProps = {\n\tselectedDate: Date;\n\tsetSelectedDate: (date: Date) => void;\n\tonSelectPreset: (range: RangeType) => void;\n\tisOpen: boolean;\n\tsetIsOpen: (isOpen: boolean) => void;\n};\n\n/**\n * Determines if the selected date matches a preset range\n */\nfunction getMatchingPreset(selectedDate: Date): RangeType | null {\n\tconst today = startOfDay(new Date());\n\tconst selectedDay = startOfDay(selectedDate);\n\tconst daysDifference = differenceInDays(selectedDay, today);\n\n\t// Check if the date matches any preset\n\tif (isSameDay(selectedDay, today)) {\n\t\treturn PRESET_RANGES.TODAY.value;\n\t}\n\tif (daysDifference === 1) {\n\t\treturn PRESET_RANGES.TOMORROW.value;\n\t}\n\tif (daysDifference === 3) {\n\t\treturn PRESET_RANGES.IN_3_DAYS.value;\n\t}\n\tif (daysDifference === 7) {\n\t\treturn PRESET_RANGES.ONE_WEEK.value;\n\t}\n\tif (daysDifference === 30) {\n\t\treturn PRESET_RANGES.ONE_MONTH.value;\n\t}\n\n\treturn null;\n}\n\nexport default function CalendarDropdown({\n\tselectedDate,\n\tsetSelectedDate,\n\tonSelectPreset,\n\tisOpen,\n\tsetIsOpen,\n}: CalendarDropdownProps) {\n\tconst matchingPreset = getMatchingPreset(selectedDate);\n\n\treturn (\n\t\t<DropdownMenuRoot open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\tleftIcon={SvgCalendarIcon}\n\t\t\t\t\tclassName=\"h-9 flex-1 rounded-sm p-2 font-medium text-xs\"\n\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\tlabel={format(selectedDate, 'dd/MM/yyyy HH:mm')}\n\t\t\t\t\tshape=\"square\"\n\t\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\t/>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuPortal>\n\t\t\t\t<DropdownMenuContent\n\t\t\t\t\tclassName=\"pointer-events-auto z-20 w-full rounded-xl border border-border-base bg-surface-neutral p-3\"\n\t\t\t\t\tsideOffset={5}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex gap-8\">\n\t\t\t\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t\t\t\t{Object.values(PRESET_RANGES).map((preset) => {\n\t\t\t\t\t\t\t\tconst isActive = matchingPreset === preset.value;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tkey={preset.value}\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\tonSelectPreset(preset.value);\n\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t\tclassName={`w-full justify-start py-1.5 font-bold text-xs transition-colors ${\n\t\t\t\t\t\t\t\t\t\t\tisActive\n\t\t\t\t\t\t\t\t\t\t\t\t? 'text-text-100'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'text-text-50 hover:text-text-80'\n\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{preset.label}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Calendar\n\t\t\t\t\t\t\tselectedDate={selectedDate}\n\t\t\t\t\t\t\tsetSelectedDate={(date) => {\n\t\t\t\t\t\t\t\tsetSelectedDate(date);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tmode=\"single\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenuPortal>\n\t\t</DropdownMenuRoot>\n\t);\n}\n","'use client';\n\nimport { Skeleton, Text } from '@0xsequence/design-system';\nimport { addDays } from 'date-fns';\nimport { useState } from 'react';\nimport { cn } from '../../../../../../utils';\nimport CalendarDropdown from '../calendarDropdown';\n\nconst setToEndOfDay = (date: Date): Date => {\n\tconst endOfDay = new Date(date);\n\tendOfDay.setHours(23, 59, 59, 999);\n\treturn endOfDay;\n};\n\nexport const PRESET_RANGES = {\n\tTODAY: {\n\t\tlabel: 'Today',\n\t\tvalue: 'today',\n\t\toffset: 0,\n\t},\n\tTOMORROW: {\n\t\tlabel: 'Tomorrow',\n\t\tvalue: 'tomorrow',\n\t\toffset: 1,\n\t},\n\tIN_3_DAYS: {\n\t\tlabel: 'In 3 days',\n\t\tvalue: '3_days',\n\t\toffset: 3,\n\t},\n\tONE_WEEK: {\n\t\tlabel: '1 week',\n\t\tvalue: '1_week',\n\t\toffset: 7,\n\t},\n\tONE_MONTH: {\n\t\tlabel: '1 month',\n\t\tvalue: '1_month',\n\t\toffset: 30,\n\t},\n} as const;\n\nexport type RangeType =\n\t(typeof PRESET_RANGES)[keyof typeof PRESET_RANGES]['value'];\n\ntype ExpirationDateSelectProps = {\n\tclassName?: string;\n\tdate: Date;\n\tonDateChange: (date: Date) => void;\n\tdisabled?: boolean;\n};\n\nconst ExpirationDateSelect = function ExpirationDateSelect({\n\tclassName,\n\tdate,\n\tonDateChange,\n\tdisabled,\n}: ExpirationDateSelectProps) {\n\tconst [calendarDropdownOpen, setCalendarDropdownOpen] = useState(false);\n\n\tfunction handleSelectPresetRange(range: RangeType) {\n\t\tconst presetRange = Object.values(PRESET_RANGES).find(\n\t\t\t(preset) => preset.value === range,\n\t\t);\n\n\t\tif (!presetRange) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst baseDate = new Date();\n\t\tconst newDate =\n\t\t\tpresetRange.value === 'today'\n\t\t\t\t? setToEndOfDay(baseDate)\n\t\t\t\t: addDays(baseDate, presetRange.offset);\n\n\t\tonDateChange(newDate);\n\t}\n\n\tfunction handleDateValueChange(date: Date) {\n\t\tonDateChange(date);\n\t}\n\n\tif (!date) {\n\t\treturn <Skeleton className=\"mr-3 h-7 w-20 rounded-2xl\" />;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'relative w-full',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t)}\n\t\t>\n\t\t\t<Text\n\t\t\t\tclassName=\"w-full text-left font-body font-medium text-xs\"\n\t\t\t\tfontWeight={'medium'}\n\t\t\t\tcolor={'text100'}\n\t\t\t>\n\t\t\t\tSet expiry\n\t\t\t</Text>\n\t\t\t<div\n\t\t\t\tclassName={`${className} mt-0.5 flex w-full items-center gap-2 rounded-sm border border-border-base`}\n\t\t\t>\n\t\t\t\t<CalendarDropdown\n\t\t\t\t\tselectedDate={date}\n\t\t\t\t\tsetSelectedDate={handleDateValueChange}\n\t\t\t\t\tonSelectPreset={handleSelectPresetRange}\n\t\t\t\t\tisOpen={calendarDropdownOpen}\n\t\t\t\t\tsetIsOpen={setCalendarDropdownOpen}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ExpirationDateSelect;\n","'use client';\n\nimport { Button, Text } from '@0xsequence/design-system';\nimport type { Address, Hex } from 'viem';\nimport type { Price } from '../../../../../../types';\nimport { useComparePrices, useLowestListing } from '../../../../../hooks';\n\nexport default function FloorPriceText({\n\tchainId,\n\tcollectionAddress,\n\ttokenId,\n\tprice,\n\tonBuyNow,\n}: {\n\tchainId: number;\n\tcollectionAddress: Hex;\n\ttokenId: string;\n\tprice: Price;\n\tonBuyNow?: () => void;\n}) {\n\tconst { data: listing, isLoading: listingLoading } = useLowestListing({\n\t\ttokenId: tokenId,\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tfilter: {\n\t\t\tcurrencies: [price.currency.contractAddress],\n\t\t},\n\t});\n\n\tconst floorPriceRaw = listing?.priceAmount;\n\tconst floorPriceFormatted = listing?.priceAmountFormatted;\n\n\tconst { data: priceComparison, isLoading: comparisonLoading } =\n\t\tuseComparePrices({\n\t\t\tchainId,\n\t\t\tpriceAmountRaw: price.amountRaw || '0',\n\t\t\tpriceCurrencyAddress: price.currency.contractAddress as Address,\n\t\t\tcompareToPriceAmountRaw: floorPriceRaw || '0',\n\t\t\tcompareToPriceCurrencyAddress: (listing?.priceCurrencyAddress ||\n\t\t\t\tprice.currency.contractAddress) as Address,\n\t\t\tquery: {\n\t\t\t\tenabled: !!floorPriceRaw && !listingLoading && price.amountRaw !== '0',\n\t\t\t},\n\t\t});\n\n\tif (\n\t\t!floorPriceRaw ||\n\t\tlistingLoading ||\n\t\tprice.amountRaw === '0' ||\n\t\tcomparisonLoading\n\t) {\n\t\treturn null;\n\t}\n\n\tlet floorPriceDifferenceText = 'Same as floor price';\n\tlet showBuyNowButton = false;\n\n\tif (priceComparison) {\n\t\tif (priceComparison.status === 'same') {\n\t\t\tfloorPriceDifferenceText = 'Same as floor price';\n\t\t\tshowBuyNowButton = true;\n\t\t} else if (priceComparison.status === 'below') {\n\t\t\tfloorPriceDifferenceText = `${priceComparison.percentageDifferenceFormatted}% below floor price`;\n\t\t} else {\n\t\t\tfloorPriceDifferenceText = `${priceComparison.percentageDifferenceFormatted}% above floor price`;\n\t\t\tshowBuyNowButton = true;\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex w-full items-center justify-between gap-2\">\n\t\t\t<Text className=\"text-left font-body font-medium text-muted text-xs\">\n\t\t\t\t{floorPriceDifferenceText}\n\t\t\t</Text>\n\n\t\t\t{showBuyNowButton && onBuyNow && (\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\tclassName=\"text-indigo-400 text-xs\"\n\t\t\t\t\tonClick={onBuyNow}\n\t\t\t\t>\n\t\t\t\t\tBuy for {floorPriceFormatted} {price.currency.symbol}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport { TokenImage } from '@0xsequence/design-system';\nimport { useState } from 'react';\nimport type { Address } from 'viem';\nimport type { Price } from '../../../../../../types';\n\nfunction CurrencyImage({ price }: { price: Price | undefined }) {\n\tconst [imageLoadErrorCurrencyAddresses, setImageLoadErrorCurrencyAddresses] =\n\t\tuseState<Address[] | null>(null);\n\n\tif (!price?.currency) {\n\t\treturn <div className=\"h-3 w-3 rounded-full bg-background-secondary\" />;\n\t}\n\n\tif (\n\t\timageLoadErrorCurrencyAddresses?.includes(\n\t\t\tprice.currency.contractAddress as Address,\n\t\t)\n\t) {\n\t\treturn <div className=\"h-3 w-3 rounded-full bg-background-secondary\" />;\n\t}\n\n\treturn (\n\t\t<TokenImage\n\t\t\tsrc={price.currency.imageUrl}\n\t\t\tonError={() => {\n\t\t\t\tif (price) {\n\t\t\t\t\tsetImageLoadErrorCurrencyAddresses((prev) => {\n\t\t\t\t\t\tif (!prev) return [price.currency.contractAddress as Address];\n\t\t\t\t\t\tif (!prev.includes(price.currency.contractAddress as Address)) {\n\t\t\t\t\t\t\treturn [...prev, price.currency.contractAddress as Address];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn prev;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}}\n\t\t\tsize=\"xs\"\n\t\t/>\n\t);\n}\nexport default CurrencyImage;\n","'use client';\n\nimport {\n\tButton,\n\tChevronDownIcon,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuPortal,\n\tDropdownMenuRoot,\n\tDropdownMenuTrigger,\n\tText,\n} from '@0xsequence/design-system';\nimport { type ReactNode, useState } from 'react';\n\nexport interface SelectItem {\n\tvalue: string;\n\tcontent: ReactNode;\n\tdisabled?: boolean;\n}\n\ninterface CustomSelectProps {\n\titems: SelectItem[];\n\tonValueChange?: (value: string) => void;\n\tdefaultValue?: SelectItem;\n\tplaceholder?: string;\n\tdisabled?: boolean;\n\tbackgroundColor?: string;\n\tclassName?: string;\n\ttestId?: string;\n}\n\nexport const CustomSelect = ({\n\titems,\n\tonValueChange,\n\tdefaultValue,\n\tplaceholder = 'Select an option',\n\tdisabled = false,\n\tclassName,\n\ttestId = 'custom-select',\n}: CustomSelectProps) => {\n\tconst [selectedItem, setSelectedItem] = useState<SelectItem | undefined>(\n\t\tdefaultValue,\n\t);\n\n\tconst handleValueChange = (item: SelectItem) => {\n\t\tsetSelectedItem(item);\n\t\tonValueChange?.(item.value);\n\t};\n\n\treturn (\n\t\t<DropdownMenuRoot>\n\t\t\t<DropdownMenuTrigger asChild disabled={disabled}>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tlabel={\n\t\t\t\t\t\t<div className=\"flex items-center justify-center gap-1 truncate pr-3\">\n\t\t\t\t\t\t\t<Text variant=\"xsmall\" color=\"text100\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t\t{selectedItem ? selectedItem.content : placeholder}\n\t\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t\t<ChevronDownIcon size=\"xs\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\tclassName={`bg-overlay-light py-1.5 pl-3 ${className || ''}`}\n\t\t\t\t\tdata-testid={`${testId}-trigger`}\n\t\t\t\t/>\n\t\t\t</DropdownMenuTrigger>\n\n\t\t\t<DropdownMenuPortal>\n\t\t\t\t<DropdownMenuContent\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tside=\"bottom\"\n\t\t\t\t\tsideOffset={8}\n\t\t\t\t\tclassName=\"z-[1000] overflow-hidden rounded-xl border border-border-base bg-color-overlay-glass shadow-lg backdrop-blur-md\"\n\t\t\t\t\tdata-testid={`${testId}-content`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"max-h-[240px] overflow-auto\">\n\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\tchecked={selectedItem?.value === item.value}\n\t\t\t\t\t\t\t\tonCheckedChange={() => handleValueChange(item)}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\tclassName=\"group relative flex cursor-pointer select-none items-center rounded-lg px-2 py-1.5 outline-none transition-colors hover:bg-background-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>span[data-state='checked']]:hidden\"\n\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-${item.value}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center justify-between\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-2 truncate\">\n\t\t\t\t\t\t\t\t\t\t{typeof item.content === 'string' ? (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedItem?.value === item.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'text100'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'text80'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={`truncate ${\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedItem?.value === item.value ? 'font-bold' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-text-${item.value}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"truncate\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-content-${item.value}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenuPortal>\n\t\t</DropdownMenuRoot>\n\t);\n};\n","'use client';\n\nimport { Skeleton } from '@0xsequence/design-system';\nimport { useEffect } from 'react';\nimport type { Address } from 'viem';\nimport type { Currency } from '../../../../../_internal';\nimport { useMarketCurrencies } from '../../../../../hooks';\nimport {\n\tCustomSelect,\n\ttype SelectItem,\n} from '../../../../components/_internals/custom-select/CustomSelect';\n\ntype CurrencyOptionsSelectProps = {\n\tcollectionAddress: Address;\n\tchainId: number;\n\tselectedCurrency?: Currency | null;\n\tonCurrencyChange: (currency: Currency) => void;\n\tsecondCurrencyAsDefault?: boolean;\n\tincludeNativeCurrency?: boolean;\n};\n\nfunction CurrencyOptionsSelect({\n\tchainId,\n\tcollectionAddress,\n\tsecondCurrencyAsDefault,\n\tselectedCurrency,\n\tonCurrencyChange,\n\tincludeNativeCurrency,\n}: CurrencyOptionsSelectProps) {\n\tconst { data: currencies, isLoading: currenciesLoading } =\n\t\tuseMarketCurrencies({\n\t\t\tchainId,\n\t\t\tcollectionAddress,\n\t\t\tincludeNativeCurrency,\n\t\t});\n\n\t// set default currency\n\tuseEffect(() => {\n\t\tif (\n\t\t\tcurrencies &&\n\t\t\tcurrencies.length > 0 &&\n\t\t\t!selectedCurrency?.contractAddress\n\t\t) {\n\t\t\t// We dont support native currency listings for any marketplace other than Sequence Marketplace v2\n\t\t\t// So we need to set the set another currency as the default\n\t\t\tif (secondCurrencyAsDefault) {\n\t\t\t\tonCurrencyChange(currencies[1]);\n\t\t\t} else {\n\t\t\t\tonCurrencyChange(currencies[0]);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tcurrencies,\n\t\tselectedCurrency?.contractAddress,\n\t\tsecondCurrencyAsDefault,\n\t\tonCurrencyChange,\n\t]);\n\n\tif (!currencies || currenciesLoading || !selectedCurrency?.symbol) {\n\t\treturn <Skeleton className=\"mr-3 h-7 w-20 rounded-2xl\" />;\n\t}\n\n\tconst options = currencies.map(\n\t\t(currency) =>\n\t\t\t({\n\t\t\t\tlabel: currency.symbol,\n\t\t\t\tvalue: currency.contractAddress,\n\t\t\t\tcontent: currency.symbol,\n\t\t\t}) as SelectItem,\n\t);\n\n\tconst onChange = (value: string) => {\n\t\tconst selectedCurrency = currencies.find(\n\t\t\t(currency) => currency.contractAddress === value,\n\t\t);\n\t\tif (selectedCurrency) {\n\t\t\tonCurrencyChange(selectedCurrency);\n\t\t}\n\t};\n\n\treturn (\n\t\t<CustomSelect\n\t\t\titems={options}\n\t\t\tonValueChange={onChange}\n\t\t\tdefaultValue={{\n\t\t\t\tvalue: selectedCurrency.contractAddress,\n\t\t\t\tcontent: selectedCurrency.symbol,\n\t\t\t}}\n\t\t\ttestId=\"currency-select\"\n\t\t/>\n\t);\n}\n\nexport default CurrencyOptionsSelect;\n","'use client';\n\nimport { NumericInput, Text } from '@0xsequence/design-system';\nimport { useEffect, useRef, useState } from 'react';\nimport { type Address, parseUnits } from 'viem';\nimport { useAccount } from 'wagmi';\nimport type { Currency, Price } from '../../../../../../types';\nimport { cn } from '../../../../../../utils';\nimport { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';\nimport CurrencyImage from '../currencyImage';\nimport CurrencyOptionsSelect from '../currencyOptionsSelect';\n\ntype PriceInputProps = {\n\tcollectionAddress: Address;\n\tchainId: number;\n\tsecondCurrencyAsDefault?: boolean;\n\tprice: Price | undefined;\n\tincludeNativeCurrency?: boolean;\n\tonPriceChange?: (price: Price) => void;\n\tonCurrencyChange?: (currency: Currency) => void;\n\tcheckBalance?: {\n\t\tenabled: boolean;\n\t\tcallback: (state: boolean) => void;\n\t};\n\tdisabled?: boolean;\n};\n\nexport default function PriceInput({\n\tchainId,\n\tcollectionAddress,\n\tprice,\n\tonPriceChange,\n\tonCurrencyChange,\n\tcheckBalance,\n\tsecondCurrencyAsDefault,\n\tincludeNativeCurrency,\n\tdisabled,\n}: PriceInputProps) {\n\tconst { address: accountAddress } = useAccount();\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst currency = price?.currency;\n\tconst currencyDecimals = price?.currency?.decimals;\n\tconst currencyAddress = price?.currency?.contractAddress;\n\tconst priceAmountRaw = price?.amountRaw;\n\n\tconst handleCurrencyChange = (newCurrency: Currency) => {\n\t\tif (price && onCurrencyChange) {\n\t\t\tonCurrencyChange(newCurrency);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (inputRef.current) {\n\t\t\tinputRef.current.focus();\n\t\t}\n\t}, []);\n\n\tconst { data: balance, isSuccess: isBalanceSuccess } = useCurrencyBalance({\n\t\tcurrencyAddress: currencyAddress as undefined | Address,\n\t\tchainId,\n\t\tuserAddress: accountAddress,\n\t});\n\n\tconst balanceError =\n\t\t!!checkBalance?.enabled &&\n\t\t!!isBalanceSuccess &&\n\t\t!!priceAmountRaw &&\n\t\t!!currencyDecimals &&\n\t\tBigInt(priceAmountRaw) > BigInt(balance?.value || 0n);\n\n\tif (checkBalance?.enabled) {\n\t\tcheckBalance.callback(balanceError);\n\t}\n\n\tconst [value, setValue] = useState('0');\n\tconst prevCurrencyDecimals = useRef(currencyDecimals);\n\n\t// Handle currency changes and adjust the raw amount accordingly\n\tuseEffect(() => {\n\t\tif (\n\t\t\tprevCurrencyDecimals.current !== currencyDecimals &&\n\t\t\tvalue !== '0' &&\n\t\t\tprice &&\n\t\t\tonPriceChange\n\t\t) {\n\t\t\ttry {\n\t\t\t\t// If the user has entered a value and the currency decimals have changed,\n\t\t\t\t// we need to adjust the raw amount to maintain the same displayed value\n\t\t\t\tconst parsedAmount = parseUnits(value, Number(currencyDecimals));\n\t\t\t\tconst updatedPrice = { ...price, amountRaw: parsedAmount.toString() };\n\n\t\t\t\tonPriceChange(updatedPrice);\n\t\t\t} catch {\n\t\t\t\tconst updatedPrice = { ...price, amountRaw: '0' };\n\t\t\t\tonPriceChange(updatedPrice);\n\t\t\t}\n\t\t}\n\n\t\tprevCurrencyDecimals.current = currencyDecimals;\n\t}, [currencyDecimals, price, value, onPriceChange]);\n\n\tconst handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst newValue = event.target.value;\n\t\tsetValue(newValue);\n\n\t\tif (!price || !onPriceChange) return;\n\n\t\ttry {\n\t\t\tconst parsedAmount = parseUnits(newValue, Number(currencyDecimals));\n\t\t\tconst updatedPrice = { ...price, amountRaw: parsedAmount.toString() };\n\n\t\t\tonPriceChange(updatedPrice);\n\t\t} catch {\n\t\t\tconst updatedPrice = { ...price, amountRaw: '0' };\n\t\t\tonPriceChange(updatedPrice);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'price-input relative flex w-full flex-col',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"absolute top-8 left-2 flex items-center\">\n\t\t\t\t<CurrencyImage price={price} />\n\t\t\t</div>\n\n\t\t\t<div className=\"[&>label>div>div>.rounded-xl]:h-9 [&>label>div>div>.rounded-xl]:rounded-sm [&>label>div>div>.rounded-xl]:px-2 [&>label]:gap-1\">\n\t\t\t\t<NumericInput\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\tclassName=\"ml-5 w-full text-xs\"\n\t\t\t\t\tname=\"price-input\"\n\t\t\t\t\tdecimals={currencyDecimals}\n\t\t\t\t\tlabel=\"Enter price\"\n\t\t\t\t\tlabelLocation=\"top\"\n\t\t\t\t\tcontrols={\n\t\t\t\t\t\t<CurrencyOptionsSelect\n\t\t\t\t\t\t\tselectedCurrency={currency}\n\t\t\t\t\t\t\tonCurrencyChange={handleCurrencyChange}\n\t\t\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\t\tsecondCurrencyAsDefault={secondCurrencyAsDefault}\n\t\t\t\t\t\t\tincludeNativeCurrency={includeNativeCurrency}\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{balanceError && (\n\t\t\t\t<Text\n\t\t\t\t\tclassName=\"-bottom-5 absolute font-body font-medium text-xs\"\n\t\t\t\t\tcolor=\"negative\"\n\t\t\t\t>\n\t\t\t\t\tInsufficient balance\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport { Image, Skeleton, Text } from '@0xsequence/design-system';\nimport type { Address } from 'viem';\nimport { useCollectible } from '../../../../../hooks';\nimport ChessTileImage from '../../../../images/chess-tile.png';\n\ntype TokenPreviewProps = {\n\tcollectionName?: string;\n\tcollectionAddress: Address;\n\tcollectibleId: string;\n\tchainId: number;\n};\n\nexport default function TokenPreview({\n\tcollectionName,\n\tcollectionAddress,\n\tcollectibleId,\n\tchainId,\n}: TokenPreviewProps) {\n\tconst { data: collectable, isLoading: collectibleLoading } = useCollectible({\n\t\tchainId: chainId,\n\t\tcollectionAddress: collectionAddress,\n\t\tcollectibleId,\n\t});\n\n\tif (collectibleLoading) {\n\t\treturn (\n\t\t\t<div className=\"flex w-full items-center gap-3\">\n\t\t\t\t<Skeleton className=\"h-9 w-9 rounded-sm\" />\n\t\t\t\t<div className=\"flex grow flex-col gap-1\">\n\t\t\t\t\t<Skeleton className=\"h-3 w-1/3\" />\n\t\t\t\t\t<Skeleton className=\"h-3 w-1/2\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex w-full items-center\">\n\t\t\t<Image\n\t\t\t\tclassName=\"h-9 w-9 rounded-sm\"\n\t\t\t\tsrc={collectable?.image || ChessTileImage}\n\t\t\t\talt={collectable?.name}\n\t\t\t\tstyle={{ objectFit: 'cover' }}\n\t\t\t/>\n\t\t\t<div className=\"ml-3 flex flex-col\">\n\t\t\t\t<Text className=\"font-body font-medium text-xs\" color={'text80'}>\n\t\t\t\t\t{collectionName}\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tclassName=\"font-body font-bold text-xs\"\n\t\t\t\t\tfontWeight={'bold'}\n\t\t\t\t\tcolor={'text100'}\n\t\t\t\t>\n\t\t\t\t\t{collectable?.name}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport { Image, Skeleton, Text } from '@0xsequence/design-system';\nimport type { Address } from 'viem';\nimport { DEFAULT_MARKETPLACE_FEE_PERCENTAGE } from '../../../../../../consts';\nimport type { Price } from '../../../../../../types';\nimport { calculateEarningsAfterFees } from '../../../../../../utils/price';\nimport { useMarketplaceConfig, useRoyalty } from '../../../../../hooks';\n\ntype TransactionDetailsProps = {\n\tcollectibleId: string;\n\tcollectionAddress: Address;\n\tchainId: number;\n\tprice?: Price;\n\tcurrencyImageUrl?: string;\n\tincludeMarketplaceFee: boolean;\n\t// We use a placeholder price for create listing modal\n\tshowPlaceholderPrice?: boolean;\n};\n\nexport default function TransactionDetails({\n\tcollectibleId,\n\tcollectionAddress,\n\tchainId,\n\tincludeMarketplaceFee,\n\tprice,\n\tshowPlaceholderPrice,\n\tcurrencyImageUrl,\n}: TransactionDetailsProps) {\n\tconst { data, isLoading: marketplaceConfigLoading } = useMarketplaceConfig();\n\n\tconst marketplaceFeePercentage = includeMarketplaceFee\n\t\t? data?.market.collections.find(\n\t\t\t\t(collection) => collection.itemsAddress === collectionAddress,\n\t\t\t)?.feePercentage || DEFAULT_MARKETPLACE_FEE_PERCENTAGE\n\t\t: 0;\n\t// royaltyPercentage is an array of [recipient, percentage]\n\tconst { data: royalty, isLoading: royaltyLoading } = useRoyalty({\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tcollectibleId,\n\t});\n\n\tconst priceLoading = !price || marketplaceConfigLoading || royaltyLoading;\n\n\tlet formattedAmount = '0';\n\n\tif (price) {\n\t\tconst fees: number[] = [];\n\n\t\tif (royalty !== null) {\n\t\t\tfees.push(Number(royalty.percentage));\n\t\t}\n\n\t\tif (marketplaceFeePercentage > 0) {\n\t\t\tfees.push(marketplaceFeePercentage);\n\t\t}\n\n\t\tformattedAmount = calculateEarningsAfterFees(\n\t\t\tBigInt(price.amountRaw),\n\t\t\tprice.currency.decimals,\n\t\t\tfees,\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex w-full items-center justify-between\">\n\t\t\t<Text className=\"font-body font-medium text-xs\" color={'text50'}>\n\t\t\t\tTotal earnings\n\t\t\t</Text>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Image className=\"h-3 w-3\" src={currencyImageUrl} />\n\n\t\t\t\t{priceLoading ? (\n\t\t\t\t\t<Skeleton className=\"h-4 w-24 animate-shimmer\" />\n\t\t\t\t) : (\n\t\t\t\t\t<Text className=\"font-body font-medium text-xs\" color={'text100'}>\n\t\t\t\t\t\t{showPlaceholderPrice ? '0' : formattedAmount}{' '}\n\t\t\t\t\t\t{price.currency.symbol}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { skipToken, useQuery } from '@tanstack/react-query';\nimport { useAccount } from 'wagmi';\nimport { dateToUnixTime } from '../../../../../utils/date';\nimport { useConfig } from '../../../..';\nimport {\n\ttype ContractType,\n\ttype CreateReq,\n\ttype GenerateListingTransactionArgs,\n\tgetMarketplaceClient,\n\ttype OrderbookKind,\n\ttype QueryArg,\n\tStepType,\n} from '../../../../_internal';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\n\nexport interface UseGetTokenApprovalDataArgs {\n\tchainId: number;\n\ttokenId: string;\n\tcollectionAddress: string;\n\tcurrencyAddress: string;\n\tcontractType: ContractType;\n\torderbook: OrderbookKind;\n\tquery?: QueryArg;\n}\n\nconst ONE_DAY_IN_SECONDS = 60 * 60 * 24;\n\nexport const useGetTokenApprovalData = (\n\tparams: UseGetTokenApprovalDataArgs,\n) => {\n\tconst config = useConfig();\n\tconst { wallet } = useWallet();\n\tconst { address } = useAccount();\n\tconst marketplaceClient = getMarketplaceClient(config);\n\n\tconst listing = {\n\t\ttokenId: params.tokenId,\n\t\tquantity: '1',\n\t\tcurrencyAddress: params.currencyAddress,\n\t\tpricePerToken: '100000',\n\t\texpiry: String(Number(dateToUnixTime(new Date())) + ONE_DAY_IN_SECONDS),\n\t} satisfies CreateReq;\n\n\tconst isEnabled =\n\t\twallet &&\n\t\taddress &&\n\t\t(params.query?.enabled ?? true) &&\n\t\t!!params.currencyAddress;\n\n\tconst { data, isLoading, isSuccess } = useQuery({\n\t\tqueryKey: ['token-approval-data', params, address],\n\t\tqueryFn: isEnabled\n\t\t\t? async () => {\n\t\t\t\t\tconst args = {\n\t\t\t\t\t\tchainId: String(params.chainId),\n\t\t\t\t\t\tcollectionAddress: params.collectionAddress,\n\t\t\t\t\t\towner: await wallet.address(),\n\t\t\t\t\t\twalletType: wallet.walletKind,\n\t\t\t\t\t\tcontractType: params.contractType,\n\t\t\t\t\t\torderbook: params.orderbook,\n\t\t\t\t\t\tlisting,\n\t\t\t\t\t} satisfies GenerateListingTransactionArgs;\n\t\t\t\t\tconst steps = await marketplaceClient\n\t\t\t\t\t\t.generateListingTransaction(args)\n\t\t\t\t\t\t.then((resp) => resp.steps);\n\n\t\t\t\t\tconst tokenApprovalStep = steps.find(\n\t\t\t\t\t\t(step) => step.id === StepType.tokenApproval,\n\t\t\t\t\t);\n\t\t\t\t\tif (!tokenApprovalStep) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstep: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstep: tokenApprovalStep,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t: skipToken,\n\t});\n\n\treturn {\n\t\tdata,\n\t\tisLoading,\n\t\tisSuccess,\n\t};\n};\n","import {\n\ttype Address,\n\ttype Hex,\n\ttype PublicClient,\n\tparseEventLogs,\n} from 'viem';\nimport { SequenceMarketplaceV1_ABI } from '..';\n\nexport const getSequenceMarketplaceRequestId = async (\n\thash: Hex,\n\tpublicClient: PublicClient,\n\twalletAddress: Address,\n) => {\n\ttry {\n\t\tconst receipt = await publicClient.getTransactionReceipt({\n\t\t\thash: hash,\n\t\t});\n\n\t\tconst logs = parseEventLogs({\n\t\t\tabi: SequenceMarketplaceV1_ABI,\n\t\t\teventName: 'RequestCreated',\n\t\t\targs: {\n\t\t\t\tcreator: walletAddress,\n\t\t\t},\n\t\t\tlogs: receipt.logs,\n\t\t});\n\n\t\treturn logs[0].args.requestId.toString();\n\t} catch (error) {\n\t\tconsole.error(error);\n\t}\n};\n","import type { Observable } from '@legendapp/state';\nimport { type Address, formatUnits, type Hex } from 'viem';\nimport { OrderbookKind, type Price } from '../../../../../types';\nimport { getSequenceMarketplaceRequestId } from '../../../../../utils/getSequenceMarketRequestId';\nimport {\n\tbalanceQueries,\n\tcollectableKeys,\n\tExecuteType,\n\tgetMarketplaceClient,\n\ttype Step,\n\tStepType,\n\ttype TransactionSteps,\n} from '../../../../_internal';\nimport { useAnalytics } from '../../../../_internal/databeat';\nimport type { ListingInput } from '../../../../_internal/types';\nimport { TransactionType } from '../../../../_internal/types';\nimport type {\n\tSignatureStep,\n\tTransactionStep as WalletTransactionStep,\n} from '../../../../_internal/utils';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport {\n\tuseConfig,\n\tuseGenerateListingTransaction,\n\tuseMarketCurrencies,\n} from '../../../../hooks';\nimport { useTransactionStatusModal } from '../../_internal/components/transactionStatusModal';\nimport type { ModalCallbacks } from '../../_internal/types';\n\ninterface UseTransactionStepsArgs {\n\tlistingInput: ListingInput;\n\tchainId: number;\n\tcollectionAddress: string;\n\torderbookKind: OrderbookKind;\n\tcallbacks?: ModalCallbacks;\n\tcloseMainModal: () => void;\n\tsteps$: Observable<TransactionSteps>;\n}\n\nexport const useTransactionSteps = ({\n\tlistingInput,\n\tchainId,\n\tcollectionAddress,\n\torderbookKind,\n\tcallbacks,\n\tcloseMainModal,\n\tsteps$,\n}: UseTransactionStepsArgs) => {\n\tconst { wallet } = useWallet();\n\tconst { show: showTransactionStatusModal } = useTransactionStatusModal();\n\tconst sdkConfig = useConfig();\n\tconst { data: currencies } = useMarketCurrencies({\n\t\tchainId,\n\t});\n\tconst currency = currencies?.find(\n\t\t(currency) =>\n\t\t\tcurrency.contractAddress === listingInput.listing.currencyAddress,\n\t);\n\tconst marketplaceClient = getMarketplaceClient(sdkConfig);\n\tconst analytics = useAnalytics();\n\tconst { generateListingTransactionAsync, isPending: generatingSteps } =\n\t\tuseGenerateListingTransaction({\n\t\t\tchainId,\n\t\t\tonSuccess: (steps) => {\n\t\t\t\tif (!steps) return;\n\t\t\t},\n\t\t});\n\n\tconst getListingSteps = async () => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tconst address = await wallet.address();\n\n\t\t\tconst steps = await generateListingTransactionAsync({\n\t\t\t\tcollectionAddress,\n\t\t\t\towner: address,\n\t\t\t\twalletType: wallet.walletKind,\n\t\t\t\tcontractType: listingInput.contractType,\n\t\t\t\torderbook: orderbookKind,\n\t\t\t\tlisting: {\n\t\t\t\t\t...listingInput.listing,\n\t\t\t\t\texpiry: new Date(Number(listingInput.listing.expiry) * 1000),\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn steps;\n\t\t} catch (error) {\n\t\t\tif (callbacks?.onError) {\n\t\t\t\tcallbacks.onError(error as Error);\n\t\t\t} else {\n\t\t\t\tconsole.debug('onError callback not provided:', error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst executeApproval = async () => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tsteps$.approval.isExecuting.set(true);\n\t\t\tconst approvalStep = await getListingSteps().then((steps) =>\n\t\t\t\tsteps?.find((step) => step.id === StepType.tokenApproval),\n\t\t\t);\n\n\t\t\tconst hash = await wallet.handleSendTransactionStep(\n\t\t\t\tNumber(chainId),\n\t\t\t\tapprovalStep as WalletTransactionStep,\n\t\t\t);\n\n\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId));\n\t\t\tsteps$.approval.isExecuting.set(false);\n\t\t\tsteps$.approval.exist.set(false);\n\t\t} catch (_error) {\n\t\t\tsteps$.approval.isExecuting.set(false);\n\t\t}\n\t};\n\n\tconst createListing = async ({\n\t\tisTransactionExecuting,\n\t}: {\n\t\tisTransactionExecuting: boolean;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tsteps$.transaction.isExecuting.set(isTransactionExecuting);\n\t\t\tconst steps = await getListingSteps();\n\t\t\tconst transactionStep = steps?.find(\n\t\t\t\t(step) => step.id === StepType.createListing,\n\t\t\t);\n\t\t\tconst signatureStep = steps?.find(\n\t\t\t\t(step) => step.id === StepType.signEIP712,\n\t\t\t);\n\n\t\t\tconsole.debug('transactionStep', transactionStep);\n\t\t\tconsole.debug('signatureStep', signatureStep);\n\n\t\t\tif (!transactionStep && !signatureStep) {\n\t\t\t\tthrow new Error('No transaction or signature step found');\n\t\t\t}\n\n\t\t\tlet hash: Hex | undefined;\n\t\t\tlet orderId: string | undefined;\n\n\t\t\tif (transactionStep) {\n\t\t\t\thash = await executeTransaction({ transactionStep });\n\t\t\t}\n\n\t\t\tif (signatureStep) {\n\t\t\t\torderId = await executeSignature({ signatureStep });\n\t\t\t}\n\n\t\t\tcloseMainModal();\n\n\t\t\tshowTransactionStatusModal({\n\t\t\t\ttype: TransactionType.LISTING,\n\t\t\t\tcollectionAddress: collectionAddress as Address,\n\t\t\t\tchainId,\n\t\t\t\tcollectibleId: listingInput.listing.tokenId,\n\t\t\t\thash,\n\t\t\t\torderId,\n\t\t\t\tcallbacks,\n\t\t\t\tprice: {\n\t\t\t\t\tamountRaw: listingInput.listing.pricePerToken,\n\t\t\t\t\tcurrency,\n\t\t\t\t} as Price,\n\t\t\t\tqueriesToInvalidate: [\n\t\t\t\t\tbalanceQueries.all,\n\t\t\t\t\tcollectableKeys.lowestListings,\n\t\t\t\t\tcollectableKeys.listings,\n\t\t\t\t\tcollectableKeys.listingsCount,\n\t\t\t\t\tcollectableKeys.userBalances,\n\t\t\t\t],\n\t\t\t});\n\n\t\t\tif (hash) {\n\t\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId));\n\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\tsteps$.transaction.exist.set(false);\n\t\t\t}\n\n\t\t\tif (orderId) {\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\tsteps$.transaction.exist.set(false);\n\t\t\t}\n\n\t\t\tif (hash || orderId) {\n\t\t\t\tconst currencyDecimal =\n\t\t\t\t\tcurrencies?.find(\n\t\t\t\t\t\t(currency) =>\n\t\t\t\t\t\t\tcurrency.contractAddress === listingInput.listing.currencyAddress,\n\t\t\t\t\t)?.decimals || 0;\n\n\t\t\t\tconst currencyValueRaw = Number(listingInput.listing.pricePerToken);\n\t\t\t\tconst currencyValueDecimal = Number(\n\t\t\t\t\tformatUnits(BigInt(currencyValueRaw), currencyDecimal),\n\t\t\t\t);\n\n\t\t\t\tlet requestId = orderId;\n\n\t\t\t\tif (\n\t\t\t\t\thash &&\n\t\t\t\t\t(orderbookKind === OrderbookKind.sequence_marketplace_v1 ||\n\t\t\t\t\t\torderbookKind === OrderbookKind.sequence_marketplace_v2)\n\t\t\t\t) {\n\t\t\t\t\trequestId = await getSequenceMarketplaceRequestId(\n\t\t\t\t\t\thash,\n\t\t\t\t\t\twallet.publicClient,\n\t\t\t\t\t\tawait wallet.address(),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tanalytics.trackCreateListing({\n\t\t\t\t\tprops: {\n\t\t\t\t\t\torderbookKind,\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tcurrencyAddress: listingInput.listing.currencyAddress,\n\t\t\t\t\t\tcurrencySymbol: currency?.symbol || '',\n\t\t\t\t\t\ttokenId: listingInput.listing.tokenId,\n\t\t\t\t\t\trequestId: requestId || '',\n\t\t\t\t\t\tchainId: chainId.toString(),\n\t\t\t\t\t\ttxnHash: hash || '',\n\t\t\t\t\t},\n\t\t\t\t\tnums: {\n\t\t\t\t\t\tcurrencyValueDecimal,\n\t\t\t\t\t\tcurrencyValueRaw,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\tsteps$.transaction.exist.set(false);\n\n\t\t\tif (callbacks?.onError && typeof callbacks.onError === 'function') {\n\t\t\t\tcallbacks.onError(error as Error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst executeTransaction = async ({\n\t\ttransactionStep,\n\t}: {\n\t\ttransactionStep: Step;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\tconst hash = await wallet.handleSendTransactionStep(\n\t\t\tNumber(chainId),\n\t\t\ttransactionStep as WalletTransactionStep,\n\t\t);\n\n\t\treturn hash;\n\t};\n\n\tconst executeSignature = async ({\n\t\tsignatureStep,\n\t}: {\n\t\tsignatureStep: Step;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\tconst signature = await wallet.handleSignMessageStep(\n\t\t\tsignatureStep as SignatureStep,\n\t\t);\n\n\t\tconst result = await marketplaceClient.execute({\n\t\t\tchainId: String(chainId),\n\t\t\tsignature: signature as string,\n\t\t\tmethod: signatureStep.post?.method as string,\n\t\t\tendpoint: signatureStep.post?.endpoint as string,\n\t\t\tbody: signatureStep.post?.body,\n\t\t\texecuteType: ExecuteType.order,\n\t\t});\n\n\t\treturn result.orderId;\n\t};\n\n\treturn {\n\t\tgeneratingSteps,\n\t\texecuteApproval,\n\t\tcreateListing,\n\t};\n};\n","'use client';\n\nimport type { Observable } from '@legendapp/state';\nimport { useEffect } from 'react';\nimport type { MarketCollection } from '../../../../../types/new-marketplace-types';\nimport { compareAddress } from '../../../../../utils';\nimport {\n\ttype ContractType,\n\ttype CreateReq,\n\tOrderbookKind,\n\ttype TransactionSteps,\n} from '../../../../_internal';\nimport { useMarketplaceConfig } from '../../../../hooks';\nimport type { ModalCallbacks } from '../../_internal/types';\nimport { useGetTokenApprovalData } from './useGetTokenApproval';\nimport { useTransactionSteps } from './useTransactionSteps';\n\nexport interface ListingInput {\n\tcontractType: ContractType;\n\tlisting: CreateReq;\n}\n\ninterface UseCreateListingArgs {\n\tlistingInput: ListingInput;\n\tchainId: number;\n\tcollectionAddress: string;\n\torderbookKind?: OrderbookKind;\n\tcallbacks?: ModalCallbacks;\n\tcloseMainModal: () => void;\n\tsteps$: Observable<TransactionSteps>;\n}\n\nexport const useCreateListing = ({\n\tlistingInput,\n\tchainId,\n\tcollectionAddress,\n\torderbookKind,\n\tsteps$,\n\tcallbacks,\n\tcloseMainModal,\n}: UseCreateListingArgs) => {\n\tconst { data: marketplaceConfig, isLoading: marketplaceIsLoading } =\n\t\tuseMarketplaceConfig();\n\n\tconst collectionConfig = marketplaceConfig?.market.collections.find((c) =>\n\t\tcompareAddress(c.itemsAddress, collectionAddress),\n\t) as MarketCollection;\n\n\torderbookKind =\n\t\torderbookKind ??\n\t\tcollectionConfig?.destinationMarketplace ??\n\t\tOrderbookKind.sequence_marketplace_v2;\n\n\tconst { data: tokenApproval, isLoading: tokenApprovalIsLoading } =\n\t\tuseGetTokenApprovalData({\n\t\t\tchainId,\n\t\t\ttokenId: listingInput.listing.tokenId,\n\t\t\tcollectionAddress,\n\t\t\tcurrencyAddress: listingInput.listing.currencyAddress,\n\t\t\tcontractType: listingInput.contractType,\n\t\t\torderbook: orderbookKind,\n\t\t\tquery: {\n\t\t\t\tenabled: !marketplaceIsLoading,\n\t\t\t},\n\t\t});\n\n\tuseEffect(() => {\n\t\tif (tokenApproval?.step && !tokenApprovalIsLoading) {\n\t\t\tsteps$.approval.exist.set(true);\n\t\t}\n\t}, [tokenApproval?.step, tokenApprovalIsLoading]);\n\n\tconst { generatingSteps, executeApproval, createListing } =\n\t\tuseTransactionSteps({\n\t\t\tlistingInput,\n\t\t\tchainId,\n\t\t\tcollectionAddress,\n\t\t\torderbookKind,\n\t\t\tcallbacks,\n\t\t\tcloseMainModal,\n\t\t\tsteps$,\n\t\t});\n\n\treturn {\n\t\tisLoading: generatingSteps,\n\t\texecuteApproval,\n\t\tcreateListing,\n\t\ttokenApprovalStepExists: tokenApproval?.step !== null,\n\t\ttokenApprovalIsLoading,\n\t};\n};\n","'use client';\n\nimport { observer, Show, use$ } from '@legendapp/state/react';\nimport { parseUnits } from 'viem';\nimport { useAccount } from 'wagmi';\nimport type { FeeOption } from '../../../../types/waas-types';\nimport { dateToUnixTime } from '../../../../utils/date';\nimport type { ContractType } from '../../../_internal';\nimport { useWallet } from '../../../_internal/wallet/useWallet';\nimport {\n\tuseBalanceOfCollectible,\n\tuseCollectible,\n\tuseCollection,\n\tuseMarketCurrencies,\n} from '../../../hooks';\nimport {\n\tActionModal,\n\ttype ActionModalProps,\n} from '../_internal/components/actionModal/ActionModal';\nimport { ErrorModal } from '../_internal/components/actionModal/ErrorModal';\nimport ExpirationDateSelect from '../_internal/components/expirationDateSelect';\nimport FloorPriceText from '../_internal/components/floorPriceText';\nimport PriceInput from '../_internal/components/priceInput';\nimport QuantityInput from '../_internal/components/quantityInput';\nimport SelectWaasFeeOptions from '../_internal/components/selectWaasFeeOptions';\nimport {\n\tselectWaasFeeOptionsStore,\n\tuseSelectWaasFeeOptionsStore,\n} from '../_internal/components/selectWaasFeeOptions/store';\nimport TokenPreview from '../_internal/components/tokenPreview';\nimport TransactionDetails from '../_internal/components/transactionDetails';\nimport { useSelectWaasFeeOptions } from '../_internal/hooks/useSelectWaasFeeOptions';\nimport { useCreateListing } from './hooks/useCreateListing';\nimport { createListingModal$ } from './store';\n\nexport const CreateListingModal = () => {\n\treturn <Show if={createListingModal$.isOpen}>{() => <Modal />}</Show>;\n};\n\nconst Modal = observer(() => {\n\tconst state = createListingModal$.get();\n\tconst {\n\t\tcollectionAddress,\n\t\tchainId,\n\t\tlistingPrice,\n\t\tcollectibleId,\n\t\torderbookKind,\n\t\tcallbacks,\n\t\tlistingIsBeingProcessed,\n\t} = state;\n\tconst steps$ = createListingModal$.steps;\n\tconst { wallet } = useWallet();\n\tconst { isVisible: feeOptionsVisible, selectedFeeOption } =\n\t\tuseSelectWaasFeeOptionsStore();\n\n\tconst {\n\t\tshouldHideActionButton: shouldHideListButton,\n\t\twaasFeeOptionsShown,\n\t\tgetActionLabel,\n\t} = useSelectWaasFeeOptions({\n\t\tisProcessing: listingIsBeingProcessed,\n\t\tfeeOptionsVisible,\n\t\tselectedFeeOption: selectedFeeOption as FeeOption,\n\t});\n\n\tconst {\n\t\tdata: collectible,\n\t\tisLoading: collectableIsLoading,\n\t\tisError: collectableIsError,\n\t} = useCollectible({\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tcollectibleId,\n\t});\n\tconst {\n\t\tdata: currencies,\n\t\tisLoading: currenciesLoading,\n\t\tisError: currenciesIsError,\n\t} = useMarketCurrencies({\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tincludeNativeCurrency: true,\n\t});\n\tconst {\n\t\tdata: collection,\n\t\tisLoading: collectionIsLoading,\n\t\tisError: collectionIsError,\n\t} = useCollection({\n\t\tchainId,\n\t\tcollectionAddress,\n\t});\n\tconst modalLoading =\n\t\tcollectableIsLoading || collectionIsLoading || currenciesLoading;\n\n\tconst { address } = useAccount();\n\n\tconst { data: balance } = useBalanceOfCollectible({\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tcollectableId: collectibleId,\n\t\tuserAddress: address ?? undefined,\n\t});\n\n\tconst { isLoading, executeApproval, createListing, tokenApprovalIsLoading } =\n\t\tuseCreateListing({\n\t\t\tlistingInput: {\n\t\t\t\tcontractType: collection?.type as ContractType,\n\t\t\t\tlisting: {\n\t\t\t\t\ttokenId: collectibleId,\n\t\t\t\t\tquantity: parseUnits(\n\t\t\t\t\t\tcreateListingModal$.quantity.get(),\n\t\t\t\t\t\tcollectible?.decimals || 0,\n\t\t\t\t\t).toString(),\n\t\t\t\t\texpiry: dateToUnixTime(createListingModal$.expiry.get()),\n\t\t\t\t\tcurrencyAddress: listingPrice.currency.contractAddress,\n\t\t\t\t\tpricePerToken: listingPrice.amountRaw,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchainId,\n\t\t\tcollectionAddress,\n\t\t\torderbookKind,\n\t\t\tcallbacks,\n\t\t\tcloseMainModal: () => createListingModal$.close(),\n\t\t\tsteps$: steps$,\n\t\t});\n\n\tif (collectableIsError || collectionIsError || currenciesIsError) {\n\t\treturn (\n\t\t\t<ErrorModal\n\t\t\t\tisOpen={createListingModal$.isOpen.get()}\n\t\t\t\tchainId={Number(chainId)}\n\t\t\t\tonClose={createListingModal$.close}\n\t\t\t\ttitle=\"List item for sale\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!modalLoading && (!currencies || currencies.length === 0)) {\n\t\treturn (\n\t\t\t<ErrorModal\n\t\t\t\tisOpen={createListingModal$.isOpen.get()}\n\t\t\t\tchainId={Number(chainId)}\n\t\t\t\tonClose={createListingModal$.close}\n\t\t\t\ttitle=\"List item for sale\"\n\t\t\t\tmessage=\"No currencies are configured for the marketplace, contact the marketplace owners\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst handleCreateListing = async () => {\n\t\tcreateListingModal$.listingIsBeingProcessed.set(true);\n\n\t\ttry {\n\t\t\tif (wallet?.isWaaS) {\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'show' });\n\t\t\t}\n\n\t\t\tawait createListing({\n\t\t\t\tisTransactionExecuting: !!wallet?.isWaaS,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error('Create listing failed:', error);\n\t\t} finally {\n\t\t\tcreateListingModal$.listingIsBeingProcessed.set(false);\n\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t}\n\t};\n\n\tconst listCtaLabel = getActionLabel('List item for sale');\n\n\tconst ctas = [\n\t\t{\n\t\t\tlabel: 'Approve TOKEN',\n\t\t\tonClick: async () => await executeApproval(),\n\t\t\thidden: !steps$.approval.exist.get(),\n\t\t\tpending: steps$?.approval.isExecuting.get(),\n\t\t\tvariant: 'glass' as const,\n\t\t\tdisabled:\n\t\t\t\tcreateListingModal$.invalidQuantity.get() ||\n\t\t\t\tlistingPrice.amountRaw === '0' ||\n\t\t\t\tsteps$?.approval.isExecuting.get() ||\n\t\t\t\ttokenApprovalIsLoading ||\n\t\t\t\tisLoading,\n\t\t},\n\t\t{\n\t\t\tlabel: listCtaLabel,\n\t\t\tonClick: handleCreateListing,\n\t\t\tpending:\n\t\t\t\tsteps$?.transaction.isExecuting.get() ||\n\t\t\t\tcreateListingModal$.listingIsBeingProcessed.get(),\n\t\t\ttestid: 'create-listing-submit-button',\n\t\t\tdisabled:\n\t\t\t\tsteps$.approval.exist.get() ||\n\t\t\t\ttokenApprovalIsLoading ||\n\t\t\t\tlistingPrice.amountRaw === '0' ||\n\t\t\t\tcreateListingModal$.invalidQuantity.get() ||\n\t\t\t\tisLoading ||\n\t\t\t\tlistingIsBeingProcessed,\n\t\t},\n\t] satisfies ActionModalProps['ctas'];\n\n\treturn (\n\t\t<ActionModal\n\t\t\tisOpen={createListingModal$.isOpen.get()}\n\t\t\tchainId={Number(chainId)}\n\t\t\tonClose={() => {\n\t\t\t\tcreateListingModal$.close();\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'hide' });\n\t\t\t}}\n\t\t\ttitle=\"List item for sale\"\n\t\t\tctas={ctas}\n\t\t\tmodalLoading={modalLoading}\n\t\t\tspinnerContainerClassname=\"h-[220px]\"\n\t\t\thideCtas={shouldHideListButton}\n\t\t>\n\t\t\t<TokenPreview\n\t\t\t\tcollectionName={collection?.name}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\tcollectibleId={collectibleId}\n\t\t\t\tchainId={chainId}\n\t\t\t/>\n\t\t\t<div className=\"flex w-full flex-col gap-1\">\n\t\t\t\t<PriceInput\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\tprice={listingPrice}\n\t\t\t\t\tonPriceChange={(newPrice) => {\n\t\t\t\t\t\tcreateListingModal$.listingPrice.set(newPrice);\n\t\t\t\t\t}}\n\t\t\t\t\tonCurrencyChange={(newCurrency) => {\n\t\t\t\t\t\tcreateListingModal$.listingPrice.currency.set(newCurrency);\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={shouldHideListButton}\n\t\t\t\t/>\n\n\t\t\t\t{listingPrice.amountRaw !== '0' && (\n\t\t\t\t\t<FloorPriceText\n\t\t\t\t\t\ttokenId={collectibleId}\n\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\t\tprice={listingPrice}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{collection?.type === 'ERC1155' && balance && (\n\t\t\t\t<QuantityInput\n\t\t\t\t\tquantity={use$(createListingModal$.quantity)}\n\t\t\t\t\tinvalidQuantity={use$(createListingModal$.invalidQuantity)}\n\t\t\t\t\tonQuantityChange={(quantity) =>\n\t\t\t\t\t\tcreateListingModal$.quantity.set(quantity)\n\t\t\t\t\t}\n\t\t\t\t\tonInvalidQuantityChange={(invalid) =>\n\t\t\t\t\t\tcreateListingModal$.invalidQuantity.set(invalid)\n\t\t\t\t\t}\n\t\t\t\t\tdecimals={collectible?.decimals || 0}\n\t\t\t\t\tmaxQuantity={balance?.balance}\n\t\t\t\t\tdisabled={shouldHideListButton}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<ExpirationDateSelect\n\t\t\t\tdate={createListingModal$.expiry.get()}\n\t\t\t\tonDateChange={(date) => createListingModal$.expiry.set(date)}\n\t\t\t\tdisabled={shouldHideListButton}\n\t\t\t/>\n\t\t\t<TransactionDetails\n\t\t\t\tcollectibleId={collectibleId}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\tchainId={chainId}\n\t\t\t\tprice={createListingModal$.listingPrice.get()}\n\t\t\t\tcurrencyImageUrl={listingPrice.currency.imageUrl}\n\t\t\t\tincludeMarketplaceFee={false}\n\t\t\t/>\n\n\t\t\t{waasFeeOptionsShown && (\n\t\t\t\t<SelectWaasFeeOptions\n\t\t\t\t\tchainId={Number(chainId)}\n\t\t\t\t\tonCancel={() => {\n\t\t\t\t\t\tcreateListingModal$.listingIsBeingProcessed.set(false);\n\t\t\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\t\t}}\n\t\t\t\t\ttitleOnConfirm=\"Processing listing...\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ActionModal>\n\t);\n});\n","import { skipToken, useQuery } from '@tanstack/react-query';\nimport { dateToUnixTime } from '../../../../../utils/date';\nimport {\n\ttype ContractType,\n\ttype CreateReq,\n\ttype GenerateOfferTransactionArgs,\n\tgetMarketplaceClient,\n\ttype OrderbookKind,\n\ttype QueryArg,\n\tStepType,\n} from '../../../../_internal';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport { useConfig } from '../../../../hooks/useConfig';\n\nexport interface UseGetTokenApprovalDataArgs {\n\tchainId: number;\n\ttokenId: string;\n\tcollectionAddress: string;\n\tcurrencyAddress: string;\n\tcontractType: ContractType;\n\torderbook: OrderbookKind;\n\tquery?: QueryArg;\n}\n\nconst ONE_DAY_IN_SECONDS = 60 * 60 * 24;\n\nexport const useGetTokenApprovalData = (\n\tparams: UseGetTokenApprovalDataArgs,\n) => {\n\tconst config = useConfig();\n\tconst { wallet } = useWallet();\n\tconst marketplaceClient = getMarketplaceClient(config);\n\n\tconst offer = {\n\t\ttokenId: params.tokenId,\n\t\tquantity: '1',\n\t\tcurrencyAddress: params.currencyAddress,\n\t\tpricePerToken: '1',\n\t\texpiry: String(Number(dateToUnixTime(new Date())) + ONE_DAY_IN_SECONDS),\n\t} satisfies CreateReq;\n\n\tconst isEnabled = wallet && params.query?.enabled !== false;\n\n\tconst { data, isLoading, isSuccess } = useQuery({\n\t\tqueryKey: ['token-approval-data', params.currencyAddress],\n\t\tqueryFn: isEnabled\n\t\t\t? async () => {\n\t\t\t\t\tconst args = {\n\t\t\t\t\t\tchainId: String(params.chainId),\n\t\t\t\t\t\tcollectionAddress: params.collectionAddress,\n\t\t\t\t\t\tmaker: await wallet.address(),\n\t\t\t\t\t\twalletType: wallet.walletKind,\n\t\t\t\t\t\tcontractType: params.contractType,\n\t\t\t\t\t\torderbook: params.orderbook,\n\t\t\t\t\t\toffer,\n\t\t\t\t\t} satisfies GenerateOfferTransactionArgs;\n\t\t\t\t\tconst steps = await marketplaceClient\n\t\t\t\t\t\t.generateOfferTransaction(args)\n\t\t\t\t\t\t.then((resp) => resp.steps);\n\n\t\t\t\t\tconst tokenApprovalStep = steps.find(\n\t\t\t\t\t\t(step) => step.id === StepType.tokenApproval,\n\t\t\t\t\t);\n\t\t\t\t\tif (!tokenApprovalStep) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstep: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstep: tokenApprovalStep,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t: skipToken,\n\t\tenabled: !!wallet && !!params.collectionAddress && !!params.currencyAddress,\n\t});\n\n\treturn {\n\t\tdata,\n\t\tisLoading,\n\t\tisSuccess,\n\t};\n};\n","import type { Observable } from '@legendapp/state';\nimport { type Address, formatUnits, type Hex } from 'viem';\nimport { OrderbookKind, type Price } from '../../../../../types';\nimport { getSequenceMarketplaceRequestId } from '../../../../../utils/getSequenceMarketRequestId';\nimport {\n\tbalanceQueries,\n\tcollectableKeys,\n\tExecuteType,\n\tgetMarketplaceClient,\n\ttype Step,\n\tStepType,\n\ttype TransactionSteps,\n} from '../../../../_internal';\nimport { useAnalytics } from '../../../../_internal/databeat';\nimport type { OfferInput } from '../../../../_internal/types';\nimport { TransactionType } from '../../../../_internal/types';\nimport type {\n\tSignatureStep,\n\tTransactionStep,\n} from '../../../../_internal/utils';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport { useConfig, useCurrency } from '../../../../hooks';\nimport { useGenerateOfferTransaction } from '../../../../hooks/useGenerateOfferTransaction';\nimport { useTransactionStatusModal } from '../../_internal/components/transactionStatusModal';\nimport type { ModalCallbacks } from '../../_internal/types';\nexport type ExecutionState = 'approval' | 'offer' | null;\n\ninterface UseTransactionStepsArgs {\n\tofferInput: OfferInput;\n\tchainId: number;\n\tcollectionAddress: string;\n\torderbookKind?: OrderbookKind;\n\tcallbacks?: ModalCallbacks;\n\tcloseMainModal: () => void;\n\tsteps$: Observable<TransactionSteps>;\n}\n\nexport const useTransactionSteps = ({\n\tofferInput,\n\tchainId,\n\tcollectionAddress,\n\torderbookKind = OrderbookKind.sequence_marketplace_v2,\n\tcallbacks,\n\tcloseMainModal,\n\tsteps$,\n}: UseTransactionStepsArgs) => {\n\tconst { wallet } = useWallet();\n\tconst { show: showTransactionStatusModal } = useTransactionStatusModal();\n\tconst sdkConfig = useConfig();\n\tconst analytics = useAnalytics();\n\tconst marketplaceClient = getMarketplaceClient(sdkConfig);\n\tconst { generateOfferTransactionAsync, isPending: generatingSteps } =\n\t\tuseGenerateOfferTransaction({\n\t\t\tchainId,\n\t\t\tonSuccess: (steps) => {\n\t\t\t\tif (!steps) return;\n\t\t\t},\n\t\t});\n\tconst { data: currency } = useCurrency({\n\t\tchainId,\n\t\tcurrencyAddress: offerInput.offer.currencyAddress as Address,\n\t});\n\n\tconst getOfferSteps = async () => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tconst address = await wallet.address();\n\n\t\t\tconst steps = await generateOfferTransactionAsync({\n\t\t\t\tcollectionAddress,\n\t\t\t\tmaker: address,\n\t\t\t\twalletType: wallet.walletKind,\n\t\t\t\tcontractType: offerInput.contractType,\n\t\t\t\torderbook: orderbookKind,\n\t\t\t\toffer: {\n\t\t\t\t\t...offerInput.offer,\n\t\t\t\t\texpiry: new Date(Number(offerInput.offer.expiry) * 1000),\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn steps;\n\t\t} catch (error) {\n\t\t\tif (callbacks?.onError) {\n\t\t\t\tcallbacks.onError(error as Error);\n\t\t\t} else {\n\t\t\t\tconsole.debug('onError callback not provided:', error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst executeApproval = async () => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tsteps$.approval.isExecuting.set(true);\n\t\t\tconst approvalStep = await getOfferSteps().then((steps) =>\n\t\t\t\tsteps?.find((step) => step.id === StepType.tokenApproval),\n\t\t\t);\n\n\t\t\tconst hash = await wallet.handleSendTransactionStep(\n\t\t\t\tNumber(chainId),\n\t\t\t\tapprovalStep as TransactionStep,\n\t\t\t);\n\n\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId));\n\t\t\tsteps$.approval.isExecuting.set(false);\n\t\t\tsteps$.approval.exist.set(false);\n\t\t} catch (_error) {\n\t\t\tsteps$.approval.isExecuting.set(false);\n\t\t}\n\t};\n\n\tconst makeOffer = async ({\n\t\tisTransactionExecuting,\n\t}: {\n\t\tisTransactionExecuting: boolean;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tsteps$.transaction.isExecuting.set(isTransactionExecuting);\n\t\t\tconst steps = await getOfferSteps();\n\t\t\tconst transactionStep = steps?.find(\n\t\t\t\t(step) => step.id === StepType.createOffer,\n\t\t\t);\n\t\t\tconst signatureStep = steps?.find(\n\t\t\t\t(step) => step.id === StepType.signEIP712,\n\t\t\t);\n\n\t\t\tconsole.debug('transactionStep', transactionStep);\n\t\t\tconsole.debug('signatureStep', signatureStep);\n\n\t\t\tif (!transactionStep && !signatureStep) {\n\t\t\t\tthrow new Error('No transaction or signature step found');\n\t\t\t}\n\n\t\t\tlet hash: Hex | undefined;\n\t\t\tlet orderId: string | undefined;\n\n\t\t\tif (transactionStep) {\n\t\t\t\thash = await executeTransaction({ transactionStep });\n\t\t\t}\n\n\t\t\tif (signatureStep) {\n\t\t\t\torderId = await executeSignature({ signatureStep });\n\t\t\t}\n\n\t\t\tcloseMainModal();\n\n\t\t\tshowTransactionStatusModal({\n\t\t\t\ttype: TransactionType.OFFER,\n\t\t\t\tcollectionAddress: collectionAddress as Address,\n\t\t\t\tchainId,\n\t\t\t\tcollectibleId: offerInput.offer.tokenId,\n\t\t\t\thash,\n\t\t\t\torderId,\n\t\t\t\tcallbacks,\n\t\t\t\tqueriesToInvalidate: [\n\t\t\t\t\tbalanceQueries.all,\n\t\t\t\t\tcollectableKeys.highestOffers,\n\t\t\t\t\tcollectableKeys.offers,\n\t\t\t\t\tcollectableKeys.offersCount,\n\t\t\t\t\tcollectableKeys.userBalances,\n\t\t\t\t],\n\t\t\t\tprice: {\n\t\t\t\t\tamountRaw: offerInput.offer.pricePerToken,\n\t\t\t\t\tcurrency,\n\t\t\t\t} as Price,\n\t\t\t});\n\n\t\t\tif (hash) {\n\t\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId));\n\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\tsteps$.transaction.exist.set(false);\n\t\t\t}\n\n\t\t\tif (orderId) {\n\t\t\t\t// no need to wait for receipt, because the order is already created\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\tsteps$.transaction.exist.set(false);\n\t\t\t}\n\n\t\t\tif (hash || orderId) {\n\t\t\t\tconst currencyDecimal = currency?.decimals || 0;\n\t\t\t\tconst currencyValueRaw = Number(offerInput.offer.pricePerToken);\n\t\t\t\tconst currencyValueDecimal = Number(\n\t\t\t\t\tformatUnits(BigInt(currencyValueRaw), currencyDecimal),\n\t\t\t\t);\n\n\t\t\t\tlet requestId = orderId;\n\n\t\t\t\tif (\n\t\t\t\t\thash &&\n\t\t\t\t\t(orderbookKind === OrderbookKind.sequence_marketplace_v1 ||\n\t\t\t\t\t\torderbookKind === OrderbookKind.sequence_marketplace_v2)\n\t\t\t\t) {\n\t\t\t\t\trequestId = await getSequenceMarketplaceRequestId(\n\t\t\t\t\t\thash,\n\t\t\t\t\t\twallet.publicClient,\n\t\t\t\t\t\tawait wallet.address(),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tanalytics.trackCreateOffer({\n\t\t\t\t\tprops: {\n\t\t\t\t\t\torderbookKind,\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tcurrencyAddress: offerInput.offer.currencyAddress,\n\t\t\t\t\t\tcurrencySymbol: currency?.symbol || '',\n\t\t\t\t\t\tchainId: chainId.toString(),\n\t\t\t\t\t\trequestId: requestId || '',\n\t\t\t\t\t\ttxnHash: hash || '',\n\t\t\t\t\t},\n\t\t\t\t\tnums: {\n\t\t\t\t\t\tcurrencyValueDecimal,\n\t\t\t\t\t\tcurrencyValueRaw,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\tsteps$.transaction.exist.set(false);\n\n\t\t\tif (callbacks?.onError && typeof callbacks.onError === 'function') {\n\t\t\t\tcallbacks.onError(error as Error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst executeTransaction = async ({\n\t\ttransactionStep,\n\t}: {\n\t\ttransactionStep: Step;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\tconst hash = await wallet.handleSendTransactionStep(\n\t\t\tNumber(chainId),\n\t\t\ttransactionStep as TransactionStep,\n\t\t);\n\n\t\treturn hash;\n\t};\n\n\tconst executeSignature = async ({\n\t\tsignatureStep,\n\t}: {\n\t\tsignatureStep: Step;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\tconst signature = await wallet.handleSignMessageStep(\n\t\t\tsignatureStep as SignatureStep,\n\t\t);\n\n\t\tconst result = await marketplaceClient.execute({\n\t\t\tchainId: String(chainId),\n\t\t\tsignature: signature as string,\n\t\t\tmethod: signatureStep.post?.method as string,\n\t\t\tendpoint: signatureStep.post?.endpoint as string,\n\t\t\tbody: signatureStep.post?.body,\n\t\t\texecuteType: ExecuteType.order,\n\t\t});\n\n\t\treturn result.orderId;\n\t};\n\n\treturn {\n\t\tgeneratingSteps,\n\t\texecuteApproval,\n\t\tmakeOffer,\n\t};\n};\n","'use client';\n\nimport type { Observable } from '@legendapp/state';\nimport { useEffect } from 'react';\nimport { OrderbookKind } from '../../../../../types';\nimport type { MarketCollection } from '../../../../../types/new-marketplace-types';\nimport type { TransactionSteps } from '../../../../_internal';\nimport type { OfferInput } from '../../../../_internal/types';\nimport { useMarketplaceConfig } from '../../../../hooks';\nimport type { ModalCallbacks } from '../../_internal/types';\nimport { useGetTokenApprovalData } from './useGetTokenApproval';\nimport { useTransactionSteps } from './useTransactionSteps';\n\ninterface UseMakeOfferArgs {\n\tofferInput: OfferInput;\n\tchainId: number;\n\tcollectionAddress: string;\n\torderbookKind?: OrderbookKind;\n\tcallbacks?: ModalCallbacks;\n\tcloseMainModal: () => void;\n\tsteps$: Observable<TransactionSteps>;\n}\n\nexport const useMakeOffer = ({\n\tofferInput,\n\tchainId,\n\tcollectionAddress,\n\torderbookKind,\n\tcallbacks,\n\tcloseMainModal,\n\tsteps$,\n}: UseMakeOfferArgs) => {\n\tconst { data: marketplaceConfig, isLoading: marketplaceIsLoading } =\n\t\tuseMarketplaceConfig();\n\n\tconst collectionConfig = marketplaceConfig?.market.collections.find(\n\t\t(c) => c.itemsAddress === collectionAddress,\n\t) as MarketCollection;\n\n\torderbookKind =\n\t\torderbookKind ??\n\t\tcollectionConfig?.destinationMarketplace ??\n\t\tOrderbookKind.sequence_marketplace_v2;\n\n\tconst { data: tokenApproval, isLoading: tokenApprovalIsLoading } =\n\t\tuseGetTokenApprovalData({\n\t\t\tchainId,\n\t\t\ttokenId: offerInput.offer.tokenId,\n\t\t\tcollectionAddress,\n\t\t\tcurrencyAddress: offerInput.offer.currencyAddress,\n\t\t\tcontractType: offerInput.contractType,\n\t\t\torderbook: orderbookKind,\n\t\t\tquery: {\n\t\t\t\tenabled: !marketplaceIsLoading,\n\t\t\t},\n\t\t});\n\n\tuseEffect(() => {\n\t\tif (tokenApproval?.step && !tokenApprovalIsLoading) {\n\t\t\tsteps$.approval.exist.set(true);\n\t\t}\n\t}, [tokenApproval?.step, tokenApprovalIsLoading]);\n\n\tconst { generatingSteps, executeApproval, makeOffer } = useTransactionSteps({\n\t\tofferInput,\n\t\tchainId,\n\t\tcollectionAddress,\n\t\torderbookKind,\n\t\tcallbacks,\n\t\tcloseMainModal,\n\t\tsteps$,\n\t});\n\n\treturn {\n\t\tisLoading: generatingSteps,\n\t\texecuteApproval,\n\t\tmakeOffer,\n\t\ttokenApprovalStepExists: tokenApproval?.step !== null,\n\t\ttokenApprovalIsLoading,\n\t};\n};\n","'use client';\n\nimport { NetworkType } from '@0xsequence/network';\nimport { observer, Show, use$ } from '@legendapp/state/react';\nimport { useState } from 'react';\nimport { parseUnits } from 'viem';\nimport type { FeeOption } from '../../../../types/waas-types';\nimport { dateToUnixTime } from '../../../../utils/date';\nimport { getNetwork } from '../../../../utils/network';\nimport { ContractType } from '../../../_internal';\nimport { useWallet } from '../../../_internal/wallet/useWallet';\nimport {\n\tuseCollectible,\n\tuseCollection,\n\tuseLowestListing,\n\tuseMarketCurrencies,\n} from '../../../hooks';\nimport { ActionModal } from '../_internal/components/actionModal/ActionModal';\nimport { ErrorModal } from '../_internal/components/actionModal/ErrorModal';\nimport ExpirationDateSelect from '../_internal/components/expirationDateSelect';\nimport FloorPriceText from '../_internal/components/floorPriceText';\nimport PriceInput from '../_internal/components/priceInput';\nimport QuantityInput from '../_internal/components/quantityInput';\nimport SelectWaasFeeOptions from '../_internal/components/selectWaasFeeOptions';\nimport {\n\tselectWaasFeeOptionsStore,\n\tuseSelectWaasFeeOptionsStore,\n} from '../_internal/components/selectWaasFeeOptions/store';\nimport TokenPreview from '../_internal/components/tokenPreview';\nimport { useSelectWaasFeeOptions } from '../_internal/hooks/useSelectWaasFeeOptions';\nimport { useBuyModal } from '../BuyModal';\nimport { useMakeOffer } from './hooks/useMakeOffer';\nimport { makeOfferModal$ } from './store';\n\nexport const MakeOfferModal = () => {\n\treturn <Show if={makeOfferModal$.isOpen}>{() => <Modal />}</Show>;\n};\n\nconst Modal = observer(() => {\n\tconst state = makeOfferModal$.get();\n\tconst {\n\t\tcollectionAddress,\n\t\tchainId,\n\t\tofferPrice,\n\t\tofferPriceChanged,\n\t\tinvalidQuantity,\n\t\tcollectibleId,\n\t\torderbookKind,\n\t\tcallbacks,\n\t} = state;\n\tconst steps$ = makeOfferModal$.steps;\n\tconst [insufficientBalance, setInsufficientBalance] = useState(false);\n\tconst {\n\t\tdata: collectible,\n\t\tisLoading: collectableIsLoading,\n\t\tisError: collectableIsError,\n\t} = useCollectible({\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tcollectibleId,\n\t});\n\tconst { wallet } = useWallet();\n\tconst isProcessing = makeOfferModal$.offerIsBeingProcessed.get();\n\tconst { isVisible: feeOptionsVisible, selectedFeeOption } =\n\t\tuseSelectWaasFeeOptionsStore();\n\n\tconst {\n\t\tshouldHideActionButton: shouldHideOfferButton,\n\t\twaasFeeOptionsShown,\n\t\tgetActionLabel,\n\t} = useSelectWaasFeeOptions({\n\t\tisProcessing,\n\t\tfeeOptionsVisible,\n\t\tselectedFeeOption: selectedFeeOption as FeeOption,\n\t});\n\n\tconst {\n\t\tdata: collection,\n\t\tisLoading: collectionIsLoading,\n\t\tisError: collectionIsError,\n\t} = useCollection({\n\t\tchainId,\n\t\tcollectionAddress,\n\t});\n\tconst {\n\t\tdata: currencies,\n\t\tisLoading: currenciesLoading,\n\t\tisError: currenciesIsError,\n\t} = useMarketCurrencies({\n\t\tchainId,\n\t\tincludeNativeCurrency: false,\n\t});\n\tconst modalLoading =\n\t\tcollectableIsLoading || collectionIsLoading || currenciesLoading;\n\n\tconst { isLoading, executeApproval, makeOffer } = useMakeOffer({\n\t\tofferInput: {\n\t\t\tcontractType: collection?.type as ContractType,\n\t\t\toffer: {\n\t\t\t\ttokenId: collectibleId,\n\t\t\t\tquantity: parseUnits(\n\t\t\t\t\tmakeOfferModal$.quantity.get(),\n\t\t\t\t\tcollectible?.decimals || 0,\n\t\t\t\t).toString(),\n\t\t\t\texpiry: dateToUnixTime(makeOfferModal$.expiry.get()),\n\t\t\t\tcurrencyAddress: offerPrice.currency.contractAddress,\n\t\t\t\tpricePerToken: offerPrice.amountRaw,\n\t\t\t},\n\t\t},\n\t\tchainId,\n\t\tcollectionAddress,\n\t\torderbookKind,\n\t\tcallbacks,\n\t\tcloseMainModal: () => makeOfferModal$.close(),\n\t\tsteps$: steps$,\n\t});\n\n\tconst buyModal = useBuyModal(callbacks);\n\n\tconst { data: lowestListing } = useLowestListing({\n\t\ttokenId: collectibleId,\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tfilter: {\n\t\t\tcurrencies: [offerPrice.currency.contractAddress],\n\t\t},\n\t});\n\n\tif (collectableIsError || collectionIsError || currenciesIsError) {\n\t\treturn (\n\t\t\t<ErrorModal\n\t\t\t\tisOpen={makeOfferModal$.isOpen.get()}\n\t\t\t\tchainId={Number(chainId)}\n\t\t\t\tonClose={makeOfferModal$.close}\n\t\t\t\ttitle=\"Make an offer\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!modalLoading && (!currencies || currencies.length === 0)) {\n\t\treturn (\n\t\t\t<ErrorModal\n\t\t\t\tisOpen={makeOfferModal$.isOpen.get()}\n\t\t\t\tchainId={Number(chainId)}\n\t\t\t\tonClose={makeOfferModal$.close}\n\t\t\t\ttitle=\"Make an offer\"\n\t\t\t\tmessage=\"No ERC-20s are configured for the marketplace, contact the marketplace owners\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst handleMakeOffer = async () => {\n\t\tmakeOfferModal$.offerIsBeingProcessed.set(true);\n\n\t\ttry {\n\t\t\tif (wallet?.isWaaS) {\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'show' });\n\t\t\t}\n\n\t\t\tawait makeOffer({\n\t\t\t\tisTransactionExecuting: wallet?.isWaaS\n\t\t\t\t\t? getNetwork(Number(chainId)).type !== NetworkType.TESTNET\n\t\t\t\t\t: false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error('Make offer failed:', error);\n\t\t} finally {\n\t\t\tmakeOfferModal$.offerIsBeingProcessed.set(false);\n\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t}\n\t};\n\n\tconst offerCtaLabel = getActionLabel('Make offer');\n\n\tconst ctas = [\n\t\t{\n\t\t\tlabel: 'Approve TOKEN',\n\t\t\tonClick: async () => await executeApproval(),\n\t\t\thidden: !steps$.approval.exist.get(),\n\t\t\tpending: steps$.approval.isExecuting.get(),\n\t\t\tvariant: 'glass' as const,\n\t\t\tdisabled:\n\t\t\t\tinvalidQuantity ||\n\t\t\t\tisLoading ||\n\t\t\t\tinsufficientBalance ||\n\t\t\t\tofferPrice.amountRaw === '0' ||\n\t\t\t\t!offerPriceChanged,\n\t\t},\n\t\t{\n\t\t\tlabel: offerCtaLabel,\n\t\t\tonClick: () => handleMakeOffer(),\n\t\t\tpending:\n\t\t\t\tsteps$?.transaction.isExecuting.get() ||\n\t\t\t\tmakeOfferModal$.offerIsBeingProcessed.get(),\n\t\t\tdisabled:\n\t\t\t\tsteps$.approval.isExecuting.get() ||\n\t\t\t\tsteps$.approval.exist.get() ||\n\t\t\t\tofferPrice.amountRaw === '0' ||\n\t\t\t\tinsufficientBalance ||\n\t\t\t\tisLoading ||\n\t\t\t\tinvalidQuantity,\n\t\t},\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<ActionModal\n\t\t\t\tisOpen={makeOfferModal$.isOpen.get()}\n\t\t\t\tchainId={Number(chainId)}\n\t\t\t\tonClose={() => {\n\t\t\t\t\tmakeOfferModal$.close();\n\t\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'hide' });\n\t\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\t}}\n\t\t\t\ttitle=\"Make an offer\"\n\t\t\t\tctas={ctas}\n\t\t\t\tmodalLoading={modalLoading}\n\t\t\t\tspinnerContainerClassname=\"h-[188px]\"\n\t\t\t\thideCtas={shouldHideOfferButton}\n\t\t\t>\n\t\t\t\t<TokenPreview\n\t\t\t\t\tcollectionName={collection?.name}\n\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\tcollectibleId={collectibleId}\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t/>\n\n\t\t\t\t<PriceInput\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\tprice={offerPrice}\n\t\t\t\t\tonPriceChange={(newPrice) => {\n\t\t\t\t\t\tmakeOfferModal$.offerPrice.set(newPrice);\n\t\t\t\t\t\tmakeOfferModal$.offerPriceChanged.set(true);\n\t\t\t\t\t}}\n\t\t\t\t\tonCurrencyChange={(newCurrency) => {\n\t\t\t\t\t\tmakeOfferModal$.offerPrice.currency.set(newCurrency);\n\t\t\t\t\t}}\n\t\t\t\t\tincludeNativeCurrency={false}\n\t\t\t\t\tcheckBalance={{\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tcallback: (state) => setInsufficientBalance(state),\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={shouldHideOfferButton}\n\t\t\t\t/>\n\n\t\t\t\t{collection?.type === ContractType.ERC1155 && (\n\t\t\t\t\t<QuantityInput\n\t\t\t\t\t\tquantity={use$(makeOfferModal$.quantity)}\n\t\t\t\t\t\tinvalidQuantity={use$(makeOfferModal$.invalidQuantity)}\n\t\t\t\t\t\tonQuantityChange={(quantity) =>\n\t\t\t\t\t\t\tmakeOfferModal$.quantity.set(quantity)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonInvalidQuantityChange={(invalid) =>\n\t\t\t\t\t\t\tmakeOfferModal$.invalidQuantity.set(invalid)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdecimals={collectible?.decimals || 0}\n\t\t\t\t\t\tmaxQuantity={String(Number.MAX_SAFE_INTEGER)}\n\t\t\t\t\t\tdisabled={shouldHideOfferButton}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{offerPrice.amountRaw !== '0' &&\n\t\t\t\t\tofferPriceChanged &&\n\t\t\t\t\t!insufficientBalance && (\n\t\t\t\t\t\t<FloorPriceText\n\t\t\t\t\t\t\ttokenId={collectibleId}\n\t\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\t\t\t\tprice={offerPrice}\n\t\t\t\t\t\t\tonBuyNow={() => {\n\t\t\t\t\t\t\t\tmakeOfferModal$.close();\n\n\t\t\t\t\t\t\t\tif (lowestListing) {\n\t\t\t\t\t\t\t\t\tbuyModal.show({\n\t\t\t\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\t\t\t\t\tcollectibleId,\n\t\t\t\t\t\t\t\t\t\torderId: lowestListing.orderId,\n\t\t\t\t\t\t\t\t\t\tmarketplace: lowestListing.marketplace,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t<ExpirationDateSelect\n\t\t\t\t\tdate={makeOfferModal$.expiry.get()}\n\t\t\t\t\tonDateChange={(date) => makeOfferModal$.expiry.set(date)}\n\t\t\t\t\tdisabled={shouldHideOfferButton}\n\t\t\t\t/>\n\n\t\t\t\t{waasFeeOptionsShown && (\n\t\t\t\t\t<SelectWaasFeeOptions\n\t\t\t\t\t\tchainId={Number(chainId)}\n\t\t\t\t\t\tonCancel={() => {\n\t\t\t\t\t\t\tmakeOfferModal$.offerIsBeingProcessed.set(false);\n\t\t\t\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttitleOnConfirm=\"Processing offer...\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</ActionModal>\n\t\t</>\n\t);\n});\n","import { Image, Skeleton, Text } from '@0xsequence/design-system';\nimport { formatDistanceToNow } from 'date-fns';\n\ntype TransactionHeaderProps = {\n\ttitle: string;\n\tcurrencyImageUrl?: string;\n\tdate?: Date;\n};\n\nexport default function TransactionHeader({\n\ttitle,\n\tcurrencyImageUrl,\n\tdate,\n}: TransactionHeaderProps) {\n\treturn (\n\t\t<div className=\"flex w-full items-center\">\n\t\t\t<Text\n\t\t\t\tclassName=\"mr-1 font-body text-sm\"\n\t\t\t\tfontWeight=\"medium\"\n\t\t\t\tcolor=\"text80\"\n\t\t\t>\n\t\t\t\t{title}\n\t\t\t</Text>\n\t\t\t<Image className=\"mr-1 h-3 w-3\" src={currencyImageUrl} />\n\t\t\t{(date && (\n\t\t\t\t<Text\n\t\t\t\t\tclassName=\"grow text-right font-body text-xs\"\n\t\t\t\t\tfontWeight=\"medium\"\n\t\t\t\t\tcolor=\"text50\"\n\t\t\t\t>\n\t\t\t\t\t{formatDistanceToNow(date)} ago\n\t\t\t\t</Text>\n\t\t\t)) || <Skeleton className=\"h-4 w-8\" />}\n\t\t</div>\n\t);\n}\n","import { skipToken, useQuery } from '@tanstack/react-query';\nimport {\n\ttype GenerateSellTransactionArgs,\n\tgetMarketplaceClient,\n\ttype MarketplaceKind,\n\ttype OrderData,\n\tStepType,\n} from '../../../../_internal';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport { useConfig } from '../../../../hooks/useConfig';\nimport { useMarketPlatformFee } from '../../BuyModal/hooks/useMarketPlatformFee';\n\nexport interface UseGetTokenApprovalDataArgs {\n\tchainId: number;\n\tcollectionAddress: string;\n\tmarketplace: MarketplaceKind;\n\tordersData: Array<OrderData>;\n}\n\nexport const useGetTokenApprovalData = (\n\tparams: UseGetTokenApprovalDataArgs,\n) => {\n\tconst config = useConfig();\n\tconst { wallet } = useWallet();\n\tconst marketplaceClient = getMarketplaceClient(config);\n\tconst { amount, receiver } = useMarketPlatformFee({\n\t\tchainId: Number(params.chainId),\n\t\tcollectionAddress: params.collectionAddress,\n\t});\n\n\tconst { data, isLoading, isSuccess } = useQuery({\n\t\tqueryKey: ['token-approval-data', params.ordersData],\n\t\tqueryFn: wallet\n\t\t\t? async () => {\n\t\t\t\t\tconst address = await wallet.address();\n\t\t\t\t\tconst args = {\n\t\t\t\t\t\tchainId: String(params.chainId),\n\t\t\t\t\t\tcollectionAddress: params.collectionAddress,\n\t\t\t\t\t\twalletType: wallet.walletKind,\n\t\t\t\t\t\tseller: address,\n\t\t\t\t\t\tmarketplace: params.marketplace,\n\t\t\t\t\t\tordersData: params.ordersData,\n\t\t\t\t\t\tadditionalFees: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tamount,\n\t\t\t\t\t\t\t\treceiver,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t} satisfies GenerateSellTransactionArgs;\n\t\t\t\t\tconst steps = await marketplaceClient\n\t\t\t\t\t\t.generateSellTransaction(args)\n\t\t\t\t\t\t.then((resp) => resp.steps);\n\n\t\t\t\t\tconst tokenApprovalStep = steps.find(\n\t\t\t\t\t\t(step) => step.id === StepType.tokenApproval,\n\t\t\t\t\t);\n\t\t\t\t\tif (!tokenApprovalStep) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstep: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstep: tokenApprovalStep,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t: skipToken,\n\t\tenabled: !!wallet && !!params.collectionAddress,\n\t});\n\n\treturn {\n\t\tdata,\n\t\tisLoading,\n\t\tisSuccess,\n\t};\n};\n","import type { Observable } from '@legendapp/state';\nimport type { Address, Hex } from 'viem';\nimport { formatUnits } from 'viem';\nimport {\n\tbalanceQueries,\n\tcollectableKeys,\n\tExecuteType,\n\tgetMarketplaceClient,\n\ttype MarketplaceKind,\n\ttype Step,\n\tStepType,\n\ttype TransactionSteps,\n} from '../../../../_internal';\nimport { useAnalytics } from '../../../../_internal/databeat';\nimport { TransactionType } from '../../../../_internal/types';\nimport type {\n\tSignatureStep,\n\tTransactionStep,\n} from '../../../../_internal/utils';\nimport { useWallet } from '../../../../_internal/wallet/useWallet';\nimport {\n\tuseConfig,\n\tuseGenerateSellTransaction,\n\tuseMarketCurrencies,\n} from '../../../../hooks';\nimport { useTransactionStatusModal } from '../../_internal/components/transactionStatusModal';\nimport type { ModalCallbacks } from '../../_internal/types';\nimport { useMarketPlatformFee } from '../../BuyModal/hooks/useMarketPlatformFee';\nimport type { SellOrder } from './useSell';\nexport type ExecutionState = 'approval' | 'sell' | null;\n\ninterface UseTransactionStepsArgs {\n\tcollectibleId: string;\n\tchainId: number;\n\tcollectionAddress: string;\n\tmarketplace: MarketplaceKind;\n\tordersData: Array<SellOrder>;\n\tcallbacks?: ModalCallbacks;\n\tcloseMainModal: () => void;\n\tsteps$: Observable<TransactionSteps>;\n}\n\nexport const useTransactionSteps = ({\n\tcollectibleId,\n\tchainId,\n\tcollectionAddress,\n\tmarketplace,\n\tordersData,\n\tcallbacks,\n\tcloseMainModal,\n\tsteps$,\n}: UseTransactionStepsArgs) => {\n\tconst { wallet } = useWallet();\n\tconst { show: showTransactionStatusModal } = useTransactionStatusModal();\n\tconst sdkConfig = useConfig();\n\tconst marketplaceClient = getMarketplaceClient(sdkConfig);\n\tconst analytics = useAnalytics();\n\n\tconst { amount, receiver } = useMarketPlatformFee({\n\t\tchainId,\n\t\tcollectionAddress: collectionAddress,\n\t});\n\n\tconst { data: currencies } = useMarketCurrencies({\n\t\tchainId,\n\t});\n\tconst { generateSellTransactionAsync, isPending: generatingSteps } =\n\t\tuseGenerateSellTransaction({\n\t\t\tchainId,\n\t\t\tonSuccess: (steps) => {\n\t\t\t\tif (!steps) return;\n\t\t\t},\n\t\t});\n\n\tconst getSellSteps = async () => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tconst address = await wallet.address();\n\n\t\t\tconst steps = await generateSellTransactionAsync({\n\t\t\t\tcollectionAddress,\n\t\t\t\twalletType: wallet.walletKind,\n\t\t\t\tmarketplace,\n\t\t\t\tordersData,\n\t\t\t\tadditionalFees: [\n\t\t\t\t\t{\n\t\t\t\t\t\tamount,\n\t\t\t\t\t\treceiver,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tseller: address,\n\t\t\t});\n\n\t\t\treturn steps;\n\t\t} catch (error) {\n\t\t\tif (callbacks?.onError) {\n\t\t\t\tcallbacks.onError(error as Error);\n\t\t\t} else {\n\t\t\t\tconsole.debug('onError callback not provided:', error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst executeApproval = async () => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tsteps$.approval.isExecuting.set(true);\n\t\t\tconst approvalStep = await getSellSteps().then((steps) =>\n\t\t\t\tsteps?.find((step) => step.id === StepType.tokenApproval),\n\t\t\t);\n\n\t\t\tconst hash = await wallet.handleSendTransactionStep(\n\t\t\t\tNumber(chainId),\n\t\t\t\tapprovalStep as TransactionStep,\n\t\t\t);\n\n\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId));\n\t\t\tsteps$.approval.isExecuting.set(false);\n\t\t\tsteps$.approval.exist.set(false);\n\t\t} catch (_error) {\n\t\t\tsteps$.approval.isExecuting.set(false);\n\t\t}\n\t};\n\n\tconst sell = async ({\n\t\tisTransactionExecuting,\n\t}: {\n\t\tisTransactionExecuting: boolean;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\ttry {\n\t\t\tsteps$.transaction.isExecuting.set(isTransactionExecuting);\n\t\t\tconst steps = await getSellSteps();\n\t\t\tconst transactionStep = steps?.find((step) => step.id === StepType.sell);\n\t\t\tconst signatureStep = steps?.find(\n\t\t\t\t(step) => step.id === StepType.signEIP712,\n\t\t\t);\n\n\t\t\tconsole.debug('transactionStep', transactionStep);\n\t\t\tconsole.debug('signatureStep', signatureStep);\n\n\t\t\tif (!transactionStep && !signatureStep) {\n\t\t\t\tthrow new Error('No transaction or signature step found');\n\t\t\t}\n\n\t\t\tlet hash: Hex | undefined;\n\t\t\tlet orderId: string | undefined;\n\n\t\t\tif (transactionStep) {\n\t\t\t\thash = await executeTransaction({ transactionStep });\n\t\t\t}\n\n\t\t\tif (signatureStep) {\n\t\t\t\torderId = await executeSignature({ signatureStep });\n\t\t\t}\n\n\t\t\tcloseMainModal();\n\n\t\t\tshowTransactionStatusModal({\n\t\t\t\ttype: TransactionType.SELL,\n\t\t\t\tcollectionAddress: collectionAddress as Address,\n\t\t\t\tchainId,\n\t\t\t\tcollectibleId,\n\t\t\t\thash,\n\t\t\t\torderId,\n\t\t\t\tcallbacks,\n\t\t\t\tqueriesToInvalidate: [balanceQueries.all, collectableKeys.userBalances],\n\t\t\t});\n\n\t\t\tif (hash) {\n\t\t\t\tawait wallet.handleConfirmTransactionStep(hash, Number(chainId));\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\tsteps$.transaction.exist.set(false);\n\t\t\t}\n\n\t\t\tif (orderId) {\n\t\t\t\t// no need to wait for receipt, because the order is already created\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\tsteps$.transaction.exist.set(false);\n\t\t\t}\n\n\t\t\tif (hash || orderId) {\n\t\t\t\tconst currency = currencies?.find(\n\t\t\t\t\t(currency) =>\n\t\t\t\t\t\tcurrency.contractAddress === ordersData[0].currencyAddress,\n\t\t\t\t);\n\t\t\t\tconst currencyDecimal = currency?.decimals || 0;\n\t\t\t\tconst currencySymbol = currency?.symbol || '';\n\t\t\t\tconst currencyValueRaw = Number(ordersData[0].pricePerToken);\n\t\t\t\tconst currencyValueDecimal = Number(\n\t\t\t\t\tformatUnits(BigInt(currencyValueRaw), currencyDecimal),\n\t\t\t\t);\n\n\t\t\t\tanalytics.trackSellItems({\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tmarketplaceKind: marketplace,\n\t\t\t\t\t\tuserId: await wallet.address(),\n\t\t\t\t\t\tcollectionAddress,\n\t\t\t\t\t\tcurrencyAddress: ordersData[0].currencyAddress,\n\t\t\t\t\t\tcurrencySymbol,\n\t\t\t\t\t\trequestId: ordersData[0].orderId,\n\t\t\t\t\t\ttokenId: collectibleId,\n\t\t\t\t\t\tchainId: chainId.toString(),\n\t\t\t\t\t\ttxnHash: hash || '',\n\t\t\t\t\t},\n\t\t\t\t\tnums: {\n\t\t\t\t\t\tcurrencyValueDecimal,\n\t\t\t\t\t\tcurrencyValueRaw,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\tsteps$.transaction.exist.set(false);\n\n\t\t\tif (callbacks?.onError && typeof callbacks.onError === 'function') {\n\t\t\t\tcallbacks.onError(error as Error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst executeTransaction = async ({\n\t\ttransactionStep,\n\t}: {\n\t\ttransactionStep: Step;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\tconst hash = await wallet.handleSendTransactionStep(\n\t\t\tNumber(chainId),\n\t\t\ttransactionStep as TransactionStep,\n\t\t);\n\n\t\treturn hash;\n\t};\n\n\tconst executeSignature = async ({\n\t\tsignatureStep,\n\t}: {\n\t\tsignatureStep: Step;\n\t}) => {\n\t\tif (!wallet) return;\n\n\t\tconst signature = await wallet.handleSignMessageStep(\n\t\t\tsignatureStep as SignatureStep,\n\t\t);\n\n\t\tconst result = await marketplaceClient.execute({\n\t\t\tchainId: String(chainId),\n\t\t\tsignature: signature as string,\n\t\t\tmethod: signatureStep.post?.method as string,\n\t\t\tendpoint: signatureStep.post?.endpoint as string,\n\t\t\tbody: signatureStep.post?.body,\n\t\t\texecuteType: ExecuteType.order,\n\t\t});\n\n\t\treturn result.orderId;\n\t};\n\n\treturn {\n\t\tgeneratingSteps,\n\t\texecuteApproval,\n\t\tsell,\n\t};\n};\n","'use client';\n\nimport type { Observable } from '@legendapp/state';\nimport { useEffect } from 'react';\nimport type { MarketplaceKind, TransactionSteps } from '../../../../_internal';\nimport type { ModalCallbacks } from '../../_internal/types';\nimport { useGetTokenApprovalData } from './useGetTokenApproval';\nimport { useTransactionSteps } from './useTransactionSteps';\n\nexport type SellOrder = {\n\torderId: string;\n\tquantity: string;\n\tpricePerToken: string;\n\tcurrencyAddress: string;\n};\n\ninterface UseSellArgs {\n\tcollectibleId: string;\n\tchainId: number;\n\tcollectionAddress: string;\n\tmarketplace: MarketplaceKind;\n\tordersData: Array<SellOrder>;\n\tcallbacks?: ModalCallbacks;\n\tcloseMainModal: () => void;\n\tsteps$: Observable<TransactionSteps>;\n}\n\nexport const useSell = ({\n\tcollectibleId,\n\tchainId,\n\tcollectionAddress,\n\tmarketplace,\n\tordersData,\n\tcallbacks,\n\tcloseMainModal,\n\tsteps$,\n}: UseSellArgs) => {\n\tconst { data: tokenApproval, isLoading: tokenApprovalIsLoading } =\n\t\tuseGetTokenApprovalData({\n\t\t\tchainId,\n\t\t\tcollectionAddress,\n\t\t\tordersData,\n\t\t\tmarketplace,\n\t\t});\n\n\tuseEffect(() => {\n\t\tif (tokenApproval?.step && !tokenApprovalIsLoading) {\n\t\t\tsteps$.approval.exist.set(true);\n\t\t}\n\t}, [tokenApproval?.step, tokenApprovalIsLoading]);\n\n\tconst { generatingSteps, executeApproval, sell } = useTransactionSteps({\n\t\tcollectibleId,\n\t\tchainId,\n\t\tcollectionAddress,\n\t\tmarketplace,\n\t\tordersData,\n\t\tcallbacks,\n\t\tcloseMainModal,\n\t\tsteps$,\n\t});\n\n\treturn {\n\t\tisLoading: generatingSteps,\n\t\texecuteApproval,\n\t\tsell,\n\t\ttokenApprovalStepExists: tokenApproval?.step !== null,\n\t\ttokenApprovalIsLoading,\n\t};\n};\n","'use client';\n\nimport { NetworkType } from '@0xsequence/network';\nimport { observer, Show } from '@legendapp/state/react';\nimport { type Address, parseUnits } from 'viem';\nimport type { Price } from '../../../../types';\nimport type { FeeOption } from '../../../../types/waas-types';\nimport { getNetwork } from '../../../../utils/network';\nimport type { MarketplaceKind } from '../../../_internal/api/marketplace.gen';\nimport { useWallet } from '../../../_internal/wallet/useWallet';\nimport { useCollection, useCurrency } from '../../../hooks';\nimport {\n\tActionModal,\n\ttype ActionModalProps,\n} from '../_internal/components/actionModal/ActionModal';\nimport { ErrorModal } from '../_internal/components/actionModal/ErrorModal';\nimport SelectWaasFeeOptions from '../_internal/components/selectWaasFeeOptions';\nimport {\n\tselectWaasFeeOptionsStore,\n\tuseSelectWaasFeeOptionsStore,\n} from '../_internal/components/selectWaasFeeOptions/store';\nimport TokenPreview from '../_internal/components/tokenPreview';\nimport TransactionDetails from '../_internal/components/transactionDetails';\nimport TransactionHeader from '../_internal/components/transactionHeader';\nimport { useSelectWaasFeeOptions } from '../_internal/hooks/useSelectWaasFeeOptions';\nimport { useSell } from './hooks/useSell';\nimport { sellModal$ } from './store';\n\nexport const SellModal = () => {\n\treturn <Show if={sellModal$.isOpen}>{() => <Modal />}</Show>;\n};\n\nconst Modal = observer(() => {\n\tconst { tokenId, collectionAddress, chainId, order, callbacks } =\n\t\tsellModal$.get();\n\tconst steps$ = sellModal$.steps;\n\tconst { data: collectible } = useCollection({\n\t\tchainId,\n\t\tcollectionAddress,\n\t});\n\n\tconst {\n\t\tdata: collection,\n\t\tisLoading: collectionLoading,\n\t\tisError: collectionError,\n\t} = useCollection({\n\t\tchainId,\n\t\tcollectionAddress,\n\t});\n\tconst {\n\t\tdata: currency,\n\t\tisLoading: currencyLoading,\n\t\tisError: currencyError,\n\t} = useCurrency({\n\t\tchainId,\n\t\tcurrencyAddress: order?.priceCurrencyAddress as Address | undefined,\n\t});\n\tconst { wallet } = useWallet();\n\tconst { isVisible: feeOptionsVisible, selectedFeeOption } =\n\t\tuseSelectWaasFeeOptionsStore();\n\tconst network = getNetwork(Number(chainId));\n\tconst isTestnet = network.type === NetworkType.TESTNET;\n\tconst isProcessing = sellModal$.sellIsBeingProcessed.get();\n\tconst isWaaS = wallet?.isWaaS;\n\tconst { shouldHideActionButton: shouldHideSellButton } =\n\t\tuseSelectWaasFeeOptions({\n\t\t\tisProcessing,\n\t\t\tfeeOptionsVisible,\n\t\t\tselectedFeeOption: selectedFeeOption as FeeOption,\n\t\t});\n\n\tconst { isLoading, executeApproval, sell } = useSell({\n\t\tcollectionAddress,\n\t\tchainId,\n\t\tcollectibleId: tokenId,\n\t\tmarketplace: order?.marketplace as MarketplaceKind,\n\t\tordersData: [\n\t\t\t{\n\t\t\t\torderId: order?.orderId ?? '',\n\t\t\t\tquantity: order?.quantityRemaining\n\t\t\t\t\t? parseUnits(\n\t\t\t\t\t\t\torder.quantityRemaining,\n\t\t\t\t\t\t\tcollectible?.decimals || 0,\n\t\t\t\t\t\t).toString()\n\t\t\t\t\t: '1',\n\t\t\t\tpricePerToken: order?.priceAmount ?? '',\n\t\t\t\tcurrencyAddress: order?.priceCurrencyAddress ?? '',\n\t\t\t},\n\t\t],\n\t\tcallbacks,\n\t\tcloseMainModal: () => sellModal$.close(),\n\t\tsteps$: steps$,\n\t});\n\tconst modalLoading = collectionLoading || currencyLoading;\n\n\tif (\n\t\t(collectionError || order === undefined || currencyError) &&\n\t\t!modalLoading\n\t) {\n\t\treturn (\n\t\t\t<ErrorModal\n\t\t\t\tisOpen={sellModal$.isOpen.get()}\n\t\t\t\tchainId={Number(chainId)}\n\t\t\t\tonClose={sellModal$.close}\n\t\t\t\ttitle=\"You have an offer\"\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst handleSell = async () => {\n\t\tsellModal$.sellIsBeingProcessed.set(true);\n\n\t\ttry {\n\t\t\tif (wallet?.isWaaS) {\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'show' });\n\t\t\t}\n\n\t\t\tawait sell({\n\t\t\t\tisTransactionExecuting: wallet?.isWaaS ? !isTestnet : false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error('Sell failed:', error);\n\t\t} finally {\n\t\t\tsellModal$.sellIsBeingProcessed.set(false);\n\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t}\n\t};\n\n\t// if it's testnet, we don't need to show the fee options\n\tconst sellCtaLabel = isProcessing\n\t\t? isWaaS && !isTestnet\n\t\t\t? 'Loading fee options'\n\t\t\t: 'Accept'\n\t\t: 'Accept';\n\n\tconst ctas = [\n\t\t{\n\t\t\tlabel: 'Approve TOKEN',\n\t\t\tonClick: async () => await executeApproval(),\n\t\t\thidden: !steps$.approval.exist.get(),\n\t\t\tpending: steps$.approval.isExecuting.get(),\n\t\t\tvariant: 'glass' as const,\n\t\t\tdisabled: isLoading || order?.quantityRemaining === '0',\n\t\t},\n\t\t{\n\t\t\tlabel: sellCtaLabel,\n\t\t\tonClick: () => handleSell(),\n\t\t\tpending:\n\t\t\t\tsteps$?.transaction.isExecuting.get() ||\n\t\t\t\tsellModal$.sellIsBeingProcessed.get(),\n\t\t\tdisabled:\n\t\t\t\tisLoading ||\n\t\t\t\tsteps$.approval.isExecuting.get() ||\n\t\t\t\tsteps$.approval.exist.get() ||\n\t\t\t\torder?.quantityRemaining === '0',\n\t\t},\n\t] satisfies ActionModalProps['ctas'];\n\n\tconst showWaasFeeOptions =\n\t\twallet?.isWaaS &&\n\t\tsellModal$.sellIsBeingProcessed.get() &&\n\t\tfeeOptionsVisible;\n\n\treturn (\n\t\t<ActionModal\n\t\t\tisOpen={sellModal$.isOpen.get()}\n\t\t\tchainId={Number(chainId)}\n\t\t\tonClose={() => {\n\t\t\t\tsellModal$.close();\n\t\t\t\tselectWaasFeeOptionsStore.send({ type: 'hide' });\n\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t}}\n\t\t\ttitle=\"You have an offer\"\n\t\t\tctas={ctas}\n\t\t\tmodalLoading={modalLoading}\n\t\t\tspinnerContainerClassname=\"h-[104px]\"\n\t\t\thideCtas={shouldHideSellButton}\n\t\t>\n\t\t\t<TransactionHeader\n\t\t\t\ttitle=\"Offer received\"\n\t\t\t\tcurrencyImageUrl={currency?.imageUrl}\n\t\t\t\tdate={order && new Date(order.createdAt)}\n\t\t\t/>\n\t\t\t<TokenPreview\n\t\t\t\tcollectionName={collection?.name}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\tcollectibleId={tokenId}\n\t\t\t\tchainId={chainId}\n\t\t\t/>\n\t\t\t<TransactionDetails\n\t\t\t\tcollectibleId={tokenId}\n\t\t\t\tcollectionAddress={collectionAddress}\n\t\t\t\tchainId={chainId}\n\t\t\t\tincludeMarketplaceFee={true}\n\t\t\t\tprice={\n\t\t\t\t\tcurrency\n\t\t\t\t\t\t? ({\n\t\t\t\t\t\t\t\tamountRaw: order?.priceAmount,\n\t\t\t\t\t\t\t\tcurrency,\n\t\t\t\t\t\t\t} as Price)\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tcurrencyImageUrl={currency?.imageUrl}\n\t\t\t/>\n\n\t\t\t{showWaasFeeOptions && (\n\t\t\t\t<SelectWaasFeeOptions\n\t\t\t\t\tchainId={Number(chainId)}\n\t\t\t\t\tonCancel={() => {\n\t\t\t\t\t\tsellModal$.sellIsBeingProcessed.set(false);\n\t\t\t\t\t\tsteps$.transaction.isExecuting.set(false);\n\t\t\t\t\t}}\n\t\t\t\t\ttitleOnConfirm=\"Accepting offer...\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ActionModal>\n\t);\n});\n","import type { IconProps } from '@0xsequence/design-system';\nimport { createStore } from '@xstate/store';\nimport { useSelector } from '@xstate/store/react';\nimport type { ComponentType } from 'react';\nimport type { TokenMetadata } from '../../../_internal';\nimport type { ModalCallbacks } from '../_internal/types';\n\nexport interface SuccessfulPurchaseModalState {\n\tisOpen: boolean;\n\tstate: {\n\t\tcollectibles: TokenMetadata[];\n\t\ttotalPrice: string;\n\t\texplorerName: string;\n\t\texplorerUrl: string;\n\t\tctaOptions?: {\n\t\t\tctaLabel: string;\n\t\t\tctaOnClick: () => void;\n\t\t\tctaIcon?: ComponentType<IconProps>;\n\t\t};\n\t};\n\tcallbacks?: ModalCallbacks;\n}\n\nconst initialContext: SuccessfulPurchaseModalState = {\n\tisOpen: false,\n\tstate: {\n\t\tcollectibles: [],\n\t\ttotalPrice: '0',\n\t\texplorerName: '',\n\t\texplorerUrl: '',\n\t\tctaOptions: undefined,\n\t},\n\tcallbacks: undefined,\n};\n\nexport const successfulPurchaseModalStore = createStore({\n\tcontext: initialContext,\n\ton: {\n\t\topen: (\n\t\t\tcontext,\n\t\t\tevent: SuccessfulPurchaseModalState['state'] & {\n\t\t\t\tcallbacks?: ModalCallbacks;\n\t\t\t\tdefaultCallbacks?: ModalCallbacks;\n\t\t\t},\n\t\t) => ({\n\t\t\t...context,\n\t\t\tisOpen: true,\n\t\t\tstate: {\n\t\t\t\tcollectibles: event.collectibles,\n\t\t\t\ttotalPrice: event.totalPrice,\n\t\t\t\texplorerName: event.explorerName,\n\t\t\t\texplorerUrl: event.explorerUrl,\n\t\t\t\tctaOptions: event.ctaOptions,\n\t\t\t},\n\t\t\tcallbacks: event.callbacks || event.defaultCallbacks,\n\t\t}),\n\t\tclose: () => ({\n\t\t\t...initialContext,\n\t\t}),\n\t},\n});\n\n// Selector hooks\nexport const useIsOpen = () =>\n\tuseSelector(successfulPurchaseModalStore, (state) => state.context.isOpen);\n\nexport const useModalState = () =>\n\tuseSelector(successfulPurchaseModalStore, (state) => state.context.state);\n\nexport const useCallbacks = () =>\n\tuseSelector(successfulPurchaseModalStore, (state) => state.context.callbacks);\n","'use client';\n\nimport {\n\tButton,\n\tExternalLinkIcon,\n\tImage,\n\tModal,\n\tText,\n} from '@0xsequence/design-system';\nimport type { TokenMetadata } from '../../../_internal';\nimport type { ModalCallbacks } from '../_internal/types';\nimport {\n\ttype SuccessfulPurchaseModalState,\n\tsuccessfulPurchaseModalStore,\n\tuseIsOpen,\n\tuseModalState,\n} from './store';\n\nexport const useSuccessfulPurchaseModal = (callbacks?: ModalCallbacks) => {\n\treturn {\n\t\tshow: (args: SuccessfulPurchaseModalState['state']) =>\n\t\t\tsuccessfulPurchaseModalStore.send({\n\t\t\t\ttype: 'open',\n\t\t\t\t...args,\n\t\t\t\tdefaultCallbacks: callbacks,\n\t\t\t}),\n\t\tclose: () => successfulPurchaseModalStore.send({ type: 'close' }),\n\t};\n};\n\nconst SuccessfulPurchaseModal = () => {\n\tconst isOpen = useIsOpen();\n\tconst modalState = useModalState();\n\n\tconst handleClose = () => {\n\t\tsuccessfulPurchaseModalStore.send({ type: 'close' });\n\t};\n\n\tif (!isOpen) return null;\n\n\treturn (\n\t\t<Modal\n\t\t\tisDismissible={true}\n\t\t\tonClose={handleClose}\n\t\t\tsize=\"sm\"\n\t\t\tbackdropColor=\"backgroundBackdrop\"\n\t\t>\n\t\t\t<div className=\"flex w-full flex-col gap-4 p-6\">\n\t\t\t\t<Text\n\t\t\t\t\tclassName=\"text-center text-large\"\n\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\tcolor=\"text100\"\n\t\t\t\t>\n\t\t\t\t\tSuccessful purchase!\n\t\t\t\t</Text>\n\n\t\t\t\t<CollectiblesGrid collectibles={modalState.collectibles} />\n\n\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t<Text className=\"text-base\" fontWeight=\"medium\" color=\"text80\">\n\t\t\t\t\t\tYou bought\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text className=\"text-base\" fontWeight=\"medium\" color=\"text100\">\n\t\t\t\t\t\t{modalState.collectibles.length}\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text className=\"text-base\" fontWeight=\"medium\" color=\"text80\">\n\t\t\t\t\t\titems for\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text className=\"text-base\" fontWeight=\"medium\" color=\"text100\">\n\t\t\t\t\t\t{modalState.totalPrice}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\n\t\t\t\t<SuccessfulPurchaseActions modalState={modalState} />\n\t\t\t</div>\n\t\t</Modal>\n\t);\n};\n\nfunction SuccessfulPurchaseActions({\n\tmodalState,\n}: {\n\tmodalState: SuccessfulPurchaseModalState['state'];\n}) {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{modalState.ctaOptions && (\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tshape=\"square\"\n\t\t\t\t\tleftIcon={modalState.ctaOptions.ctaIcon || undefined}\n\t\t\t\t\tlabel={modalState.ctaOptions.ctaLabel}\n\t\t\t\t\tonClick={modalState.ctaOptions.ctaOnClick || undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<a\n\t\t\t\thref={modalState.explorerUrl}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"w-full\"\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tshape=\"square\"\n\t\t\t\t\tleftIcon={ExternalLinkIcon}\n\t\t\t\t\tlabel={`View on ${modalState.explorerName}`}\n\t\t\t\t/>\n\t\t\t</a>\n\t\t</div>\n\t);\n}\n\nfunction CollectiblesGrid({ collectibles }: { collectibles: TokenMetadata[] }) {\n\tconst total = collectibles.length;\n\tconst shownCollectibles = total > 4 ? collectibles.slice(0, 4) : collectibles;\n\n\treturn (\n\t\t<div className=\"grid grid-cols-[repeat(auto-fill,minmax(150px,1fr))] gap-2 [&:has(div:nth-child(4))>div]:col-[unset] [&>div:nth-child(1):only-child]:h-[312px] [&>div:nth-child(1):only-child]:w-[312px] [&>div:nth-child(3)]:col-[1/-1] [&>div:nth-child(3)]:justify-self-center\">\n\t\t\t{shownCollectibles.map((collectible) => {\n\t\t\t\tconst showPlus = total > 4 && collectibles.indexOf(collectible) === 3;\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"relative h-[150px] w-[150px]\"\n\t\t\t\t\t\tkey={collectible.tokenId}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tclassName={`aspect-square h-full w-full rounded-lg bg-background-secondary object-contain ${\n\t\t\t\t\t\t\t\tshowPlus ? 'opacity-[0.4_!important]' : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tsrc={collectible.image}\n\t\t\t\t\t\t\talt={collectible.name}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{showPlus && (\n\t\t\t\t\t\t\t<div className=\"absolute top-0 right-0 bottom-0 left-0 flex items-center justify-center bg-background-overlay backdrop-blur-md\">\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg bg-background-secondary px-2 py-1.5 text-sm backdrop-blur-md\"\n\t\t\t\t\t\t\t\t\tfontWeight=\"medium\"\n\t\t\t\t\t\t\t\t\tcolor=\"text80\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{total} TOTAL\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nexport default SuccessfulPurchaseModal;\n","import { observer } from '@legendapp/state/react';\nimport SwitchChainModal from './_internal/components/switchChainModal';\nimport TransactionStatusModal from './_internal/components/transactionStatusModal';\nimport { BuyModal } from './BuyModal/components/Modal';\nimport { CreateListingModal } from './CreateListingModal/Modal';\nimport { MakeOfferModal } from './MakeOfferModal/Modal';\nimport { SellModal } from './SellModal/Modal';\nimport SuccessfulPurchaseModal from './SuccessfulPurchaseModal';\nimport { TransferModal } from './TransferModal';\n\nexport const ModalProvider = observer(() => {\n\treturn (\n\t\t<>\n\t\t\t<CreateListingModal />\n\t\t\t<MakeOfferModal />\n\t\t\t<TransferModal />\n\t\t\t<SellModal />\n\t\t\t<BuyModal />\n\t\t\t<SuccessfulPurchaseModal />\n\t\t\t{/* Helper modals */}\n\t\t\t<SwitchChainModal />\n\t\t\t<TransactionStatusModal />\n\t\t</>\n\t);\n});\n"],"mappings":"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CpB;CACD,GAAE;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACA,EAAC;AAGF,WAAU,MAAM;AACf,MACC,YACC,SACD,iBACA,eAAe,kBAAkB,SAChC;AACD,yBAAsB;AACtB,uBAAoB;EACpB;CACD,GAAE;EACF;EACA;EACA;EACA;EACA;EACA;CACA,EAAC;CAEF,MAAM,oBAAoB,UACvB,CAAC,sBAAsB,KAAK,sBAAsB,KAAM,EAAC,SAAS,OAAO,GACzE;CAEH,MAAM,gBACL,WACA,SACA;EACC,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;CACtB,EAAC,SAAS,OAAO;AAEnB,QAAO;EACN;EACA;EACA;CACA;AACD;;;;AC5DD,SAAgB,aAAa,EAC5B,mBACA,SACA,SACA,eACA,QACA,OACA,cACA,eACA,uBACA,iBACA,sBACA,wBACA,WACA,kBACA,mBACA,iBACmB,EAAE;CACrB,MAAM,EAAE,kBAAkB,eAAe,GAAG,qBAAqB;EAChE;EACA;EACA;EACA;CACA,EAAC;AAEF,MAAK,iBACJ,QAAO;AAGR,KAAI,iBAAiB,uBACpB,wBACC,IAAC;EACQ;EACC;EACU;EACV;EACM;EACD;GACb;CAIJ,MAAM,gBACL,oBAAoB,UAAU,wBAAwB,YACnD;EACA,iBAAiB;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACA,IACA;EACA,iBAAiB;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACA;AAEJ,wBAAO,IAAC,mBAAgB,GAAI,gBAAiB;AAC7C;;;;ACvED,SAAgB,oBAAoB,EACnC,MACA,SACA,mBACA,SACA,eACA,QACA,cACA,eACA,OACA,uBACA,iBACA,sBACA,wBACA,WACA,kBACA,mBACA,iBAC0B,EAAE;AAC5B,MAAK,KAAM,QAAO;AAElB,wBACC,IAAC;EAAI,WAAU;4BACd,IAAC;GACS;GACU;GACV;GACM;GACP;GACM;GACC;GACR;GACgB;GACN;GACK;GACE;GACb;GACO;GACC;GACF;IAChB;GACG;AAEP;;;;;;;;;ACzED,SAAgB,iBACfC,KA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MAAM;GACN;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,iBACNA,WACAC,QACAC,eACwB;AACxB,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAkBD,OAAO,mBACNC,eACAC,gBACAC,aAC0B;AAC1B,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,gBACNC,UACAC,KACAC,KACAC,WACuB;AACvB,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,aACNC,SACAC,WACAC,SACAC,UACe;AACf,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,cACNC,iBACAJ,SACAK,QACAH,SACAI,aACgB;AAChB,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,cACNC,UACAP,SACAQ,MACA,YAAY,OACI;AAChB,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,gBACNC,OACAT,SACAU,OACAC,aACkB;AAClB,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;CAED,OAAO,WACNC,cACAC,iBACAb,SACa;AACb,SAAO;GACN,MAAM;GACN;GACA;GACA;GACA,WAAW,KAAK,KAAK;EACrB;CACD;AACD;;;;ACtOD,MAAM,gBAAgB,CAAC,MAAM,GAAG,EAAE,MAAM,GAAI,EAAC,AAAC;AAE9C,MAAM,uBAAuB,CAAC,EAC7B,IACA,QACA,cACA,OACA,QAAQ,eACQ,KAAU;CAC1B,MAAM,aAAa,QAAQ;AAE3B,QAAO,mBAAmB;EACzB,KAAK;EACL,cAAc;EACd,MAAM;GAAC;GAAI;GAAQ;GAAc;GAAY;EAAM;CACnD,EAAC;AACF;AAiBD,MAAa,6BAA6B,OAAO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"}
|