@0xsequence/checkout 0.0.0-20250314205219
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/LICENSE +219 -0
- package/README.md +256 -0
- package/dist/cjs/api/data.js +165 -0
- package/dist/cjs/api/data.js.map +1 -0
- package/dist/cjs/api/index.js +18 -0
- package/dist/cjs/api/index.js.map +1 -0
- package/dist/cjs/components/CopyButton.js +24 -0
- package/dist/cjs/components/CopyButton.js.map +1 -0
- package/dist/cjs/components/DefaultIcon.js +13 -0
- package/dist/cjs/components/DefaultIcon.js.map +1 -0
- package/dist/cjs/components/NavigationHeader.js +23 -0
- package/dist/cjs/components/NavigationHeader.js.map +1 -0
- package/dist/cjs/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js +215 -0
- package/dist/cjs/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js.map +1 -0
- package/dist/cjs/components/SequenceCheckoutProvider/index.js +18 -0
- package/dist/cjs/components/SequenceCheckoutProvider/index.js.map +1 -0
- package/dist/cjs/constants/abi.js +188 -0
- package/dist/cjs/constants/abi.js.map +1 -0
- package/dist/cjs/constants/index.js +8 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/contexts/AddFundsModal.js +7 -0
- package/dist/cjs/contexts/AddFundsModal.js.map +1 -0
- package/dist/cjs/contexts/CheckoutModal.js +8 -0
- package/dist/cjs/contexts/CheckoutModal.js.map +1 -0
- package/dist/cjs/contexts/Navigation.js +8 -0
- package/dist/cjs/contexts/Navigation.js.map +1 -0
- package/dist/cjs/contexts/SelectPaymentModal.js +7 -0
- package/dist/cjs/contexts/SelectPaymentModal.js.map +1 -0
- package/dist/cjs/contexts/SwapModal.js +8 -0
- package/dist/cjs/contexts/SwapModal.js.map +1 -0
- package/dist/cjs/contexts/TransactionStatusModal.js +7 -0
- package/dist/cjs/contexts/TransactionStatusModal.js.map +1 -0
- package/dist/cjs/contexts/TransferFundsModal.js +7 -0
- package/dist/cjs/contexts/TransferFundsModal.js.map +1 -0
- package/dist/cjs/contexts/genericContext.js +20 -0
- package/dist/cjs/contexts/genericContext.js.map +1 -0
- package/dist/cjs/contexts/index.js +24 -0
- package/dist/cjs/contexts/index.js.map +1 -0
- package/dist/cjs/hooks/index.js +30 -0
- package/dist/cjs/hooks/index.js.map +1 -0
- package/dist/cjs/hooks/useAddFundsModal.js +10 -0
- package/dist/cjs/hooks/useAddFundsModal.js.map +1 -0
- package/dist/cjs/hooks/useCheckoutModal.js +10 -0
- package/dist/cjs/hooks/useCheckoutModal.js.map +1 -0
- package/dist/cjs/hooks/useCheckoutOptionsSalesContract.js +20 -0
- package/dist/cjs/hooks/useCheckoutOptionsSalesContract.js.map +1 -0
- package/dist/cjs/hooks/useCheckoutWhitelistStatus.js +21 -0
- package/dist/cjs/hooks/useCheckoutWhitelistStatus.js.map +1 -0
- package/dist/cjs/hooks/useERC1155SaleContractCheckout.js +157 -0
- package/dist/cjs/hooks/useERC1155SaleContractCheckout.js.map +1 -0
- package/dist/cjs/hooks/useMarketplaceClient.js +40 -0
- package/dist/cjs/hooks/useMarketplaceClient.js.map +1 -0
- package/dist/cjs/hooks/useModalTheme.js +10 -0
- package/dist/cjs/hooks/useModalTheme.js.map +1 -0
- package/dist/cjs/hooks/useNavigation.js +24 -0
- package/dist/cjs/hooks/useNavigation.js.map +1 -0
- package/dist/cjs/hooks/useSardineClientToken.js +20 -0
- package/dist/cjs/hooks/useSardineClientToken.js.map +1 -0
- package/dist/cjs/hooks/useSelectPaymentModal.js +10 -0
- package/dist/cjs/hooks/useSelectPaymentModal.js.map +1 -0
- package/dist/cjs/hooks/useSkipOnCloseCallback.js +22 -0
- package/dist/cjs/hooks/useSkipOnCloseCallback.js.map +1 -0
- package/dist/cjs/hooks/useSwapModal.js +10 -0
- package/dist/cjs/hooks/useSwapModal.js.map +1 -0
- package/dist/cjs/hooks/useTransactionStatusModal.js +10 -0
- package/dist/cjs/hooks/useTransactionStatusModal.js.map +1 -0
- package/dist/cjs/hooks/useTransferFundsModal.js +10 -0
- package/dist/cjs/hooks/useTransferFundsModal.js.map +1 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/utils/index.js +18 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/sardine.js +52 -0
- package/dist/cjs/utils/sardine.js.map +1 -0
- package/dist/cjs/utils/sizing.js +12 -0
- package/dist/cjs/utils/sizing.js.map +1 -0
- package/dist/cjs/utils/transak.js +41 -0
- package/dist/cjs/utils/transak.js.map +1 -0
- package/dist/cjs/views/AddFunds.js +50 -0
- package/dist/cjs/views/AddFunds.js.map +1 -0
- package/dist/cjs/views/CheckoutSelection/component/OrderSummaryItem.js +35 -0
- package/dist/cjs/views/CheckoutSelection/component/OrderSummaryItem.js.map +1 -0
- package/dist/cjs/views/CheckoutSelection/index.js +83 -0
- package/dist/cjs/views/CheckoutSelection/index.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/Footer.js +12 -0
- package/dist/cjs/views/PaymentSelection/Footer.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/OrderSummary/Price.js +42 -0
- package/dist/cjs/views/PaymentSelection/OrderSummary/Price.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/OrderSummary/index.js +63 -0
- package/dist/cjs/views/PaymentSelection/OrderSummary/index.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js +10 -0
- package/dist/cjs/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/PayWithCreditCard/index.js +112 -0
- package/dist/cjs/views/PaymentSelection/PayWithCreditCard/index.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js +9 -0
- package/dist/cjs/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/PayWithCrypto/index.js +134 -0
- package/dist/cjs/views/PaymentSelection/PayWithCrypto/index.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/TransferFunds.js +50 -0
- package/dist/cjs/views/PaymentSelection/TransferFunds.js.map +1 -0
- package/dist/cjs/views/PaymentSelection/index.js +332 -0
- package/dist/cjs/views/PaymentSelection/index.js.map +1 -0
- package/dist/cjs/views/PendingCreditCardTransaction.js +295 -0
- package/dist/cjs/views/PendingCreditCardTransaction.js.map +1 -0
- package/dist/cjs/views/Swap/index.js +173 -0
- package/dist/cjs/views/Swap/index.js.map +1 -0
- package/dist/cjs/views/TransactionError.js +23 -0
- package/dist/cjs/views/TransactionError.js.map +1 -0
- package/dist/cjs/views/TransactionStatus/index.js +178 -0
- package/dist/cjs/views/TransactionStatus/index.js.map +1 -0
- package/dist/cjs/views/TransactionSuccess.js +23 -0
- package/dist/cjs/views/TransactionSuccess.js.map +1 -0
- package/dist/cjs/views/TransferToWallet/CopyButton.js +24 -0
- package/dist/cjs/views/TransferToWallet/CopyButton.js.map +1 -0
- package/dist/cjs/views/TransferToWallet/QRCode.js +13 -0
- package/dist/cjs/views/TransferToWallet/QRCode.js.map +1 -0
- package/dist/cjs/views/TransferToWallet/index.js +17 -0
- package/dist/cjs/views/TransferToWallet/index.js.map +1 -0
- package/dist/cjs/views/index.js +26 -0
- package/dist/cjs/views/index.js.map +1 -0
- package/dist/esm/api/data.js +159 -0
- package/dist/esm/api/data.js.map +1 -0
- package/dist/esm/api/index.js +2 -0
- package/dist/esm/api/index.js.map +1 -0
- package/dist/esm/components/CopyButton.js +20 -0
- package/dist/esm/components/CopyButton.js.map +1 -0
- package/dist/esm/components/DefaultIcon.js +9 -0
- package/dist/esm/components/DefaultIcon.js.map +1 -0
- package/dist/esm/components/NavigationHeader.js +19 -0
- package/dist/esm/components/NavigationHeader.js.map +1 -0
- package/dist/esm/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js +210 -0
- package/dist/esm/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js.map +1 -0
- package/dist/esm/components/SequenceCheckoutProvider/index.js +2 -0
- package/dist/esm/components/SequenceCheckoutProvider/index.js.map +1 -0
- package/dist/esm/constants/abi.js +185 -0
- package/dist/esm/constants/abi.js.map +1 -0
- package/dist/esm/constants/index.js +5 -0
- package/dist/esm/constants/index.js.map +1 -0
- package/dist/esm/contexts/AddFundsModal.js +3 -0
- package/dist/esm/contexts/AddFundsModal.js.map +1 -0
- package/dist/esm/contexts/CheckoutModal.js +4 -0
- package/dist/esm/contexts/CheckoutModal.js.map +1 -0
- package/dist/esm/contexts/Navigation.js +4 -0
- package/dist/esm/contexts/Navigation.js.map +1 -0
- package/dist/esm/contexts/SelectPaymentModal.js +3 -0
- package/dist/esm/contexts/SelectPaymentModal.js.map +1 -0
- package/dist/esm/contexts/SwapModal.js +4 -0
- package/dist/esm/contexts/SwapModal.js.map +1 -0
- package/dist/esm/contexts/TransactionStatusModal.js +3 -0
- package/dist/esm/contexts/TransactionStatusModal.js.map +1 -0
- package/dist/esm/contexts/TransferFundsModal.js +3 -0
- package/dist/esm/contexts/TransferFundsModal.js.map +1 -0
- package/dist/esm/contexts/genericContext.js +16 -0
- package/dist/esm/contexts/genericContext.js.map +1 -0
- package/dist/esm/contexts/index.js +8 -0
- package/dist/esm/contexts/index.js.map +1 -0
- package/dist/esm/hooks/index.js +14 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/hooks/useAddFundsModal.js +6 -0
- package/dist/esm/hooks/useAddFundsModal.js.map +1 -0
- package/dist/esm/hooks/useCheckoutModal.js +6 -0
- package/dist/esm/hooks/useCheckoutModal.js.map +1 -0
- package/dist/esm/hooks/useCheckoutOptionsSalesContract.js +16 -0
- package/dist/esm/hooks/useCheckoutOptionsSalesContract.js.map +1 -0
- package/dist/esm/hooks/useCheckoutWhitelistStatus.js +17 -0
- package/dist/esm/hooks/useCheckoutWhitelistStatus.js.map +1 -0
- package/dist/esm/hooks/useERC1155SaleContractCheckout.js +151 -0
- package/dist/esm/hooks/useERC1155SaleContractCheckout.js.map +1 -0
- package/dist/esm/hooks/useMarketplaceClient.js +36 -0
- package/dist/esm/hooks/useMarketplaceClient.js.map +1 -0
- package/dist/esm/hooks/useModalTheme.js +6 -0
- package/dist/esm/hooks/useModalTheme.js.map +1 -0
- package/dist/esm/hooks/useNavigation.js +20 -0
- package/dist/esm/hooks/useNavigation.js.map +1 -0
- package/dist/esm/hooks/useSardineClientToken.js +16 -0
- package/dist/esm/hooks/useSardineClientToken.js.map +1 -0
- package/dist/esm/hooks/useSelectPaymentModal.js +6 -0
- package/dist/esm/hooks/useSelectPaymentModal.js.map +1 -0
- package/dist/esm/hooks/useSkipOnCloseCallback.js +18 -0
- package/dist/esm/hooks/useSkipOnCloseCallback.js.map +1 -0
- package/dist/esm/hooks/useSwapModal.js +6 -0
- package/dist/esm/hooks/useSwapModal.js.map +1 -0
- package/dist/esm/hooks/useTransactionStatusModal.js +6 -0
- package/dist/esm/hooks/useTransactionStatusModal.js.map +1 -0
- package/dist/esm/hooks/useTransferFundsModal.js +6 -0
- package/dist/esm/hooks/useTransferFundsModal.js.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/utils/index.js +2 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/sardine.js +48 -0
- package/dist/esm/utils/sardine.js.map +1 -0
- package/dist/esm/utils/sizing.js +8 -0
- package/dist/esm/utils/sizing.js.map +1 -0
- package/dist/esm/utils/transak.js +36 -0
- package/dist/esm/utils/transak.js.map +1 -0
- package/dist/esm/views/AddFunds.js +46 -0
- package/dist/esm/views/AddFunds.js.map +1 -0
- package/dist/esm/views/CheckoutSelection/component/OrderSummaryItem.js +30 -0
- package/dist/esm/views/CheckoutSelection/component/OrderSummaryItem.js.map +1 -0
- package/dist/esm/views/CheckoutSelection/index.js +79 -0
- package/dist/esm/views/CheckoutSelection/index.js.map +1 -0
- package/dist/esm/views/PaymentSelection/Footer.js +8 -0
- package/dist/esm/views/PaymentSelection/Footer.js.map +1 -0
- package/dist/esm/views/PaymentSelection/OrderSummary/Price.js +38 -0
- package/dist/esm/views/PaymentSelection/OrderSummary/Price.js.map +1 -0
- package/dist/esm/views/PaymentSelection/OrderSummary/index.js +59 -0
- package/dist/esm/views/PaymentSelection/OrderSummary/index.js.map +1 -0
- package/dist/esm/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js +6 -0
- package/dist/esm/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js.map +1 -0
- package/dist/esm/views/PaymentSelection/PayWithCreditCard/index.js +108 -0
- package/dist/esm/views/PaymentSelection/PayWithCreditCard/index.js.map +1 -0
- package/dist/esm/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js +5 -0
- package/dist/esm/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js.map +1 -0
- package/dist/esm/views/PaymentSelection/PayWithCrypto/index.js +130 -0
- package/dist/esm/views/PaymentSelection/PayWithCrypto/index.js.map +1 -0
- package/dist/esm/views/PaymentSelection/TransferFunds.js +46 -0
- package/dist/esm/views/PaymentSelection/TransferFunds.js.map +1 -0
- package/dist/esm/views/PaymentSelection/index.js +326 -0
- package/dist/esm/views/PaymentSelection/index.js.map +1 -0
- package/dist/esm/views/PendingCreditCardTransaction.js +286 -0
- package/dist/esm/views/PendingCreditCardTransaction.js.map +1 -0
- package/dist/esm/views/Swap/index.js +169 -0
- package/dist/esm/views/Swap/index.js.map +1 -0
- package/dist/esm/views/TransactionError.js +18 -0
- package/dist/esm/views/TransactionError.js.map +1 -0
- package/dist/esm/views/TransactionStatus/index.js +170 -0
- package/dist/esm/views/TransactionStatus/index.js.map +1 -0
- package/dist/esm/views/TransactionSuccess.js +18 -0
- package/dist/esm/views/TransactionSuccess.js.map +1 -0
- package/dist/esm/views/TransferToWallet/CopyButton.js +20 -0
- package/dist/esm/views/TransferToWallet/CopyButton.js.map +1 -0
- package/dist/esm/views/TransferToWallet/QRCode.js +9 -0
- package/dist/esm/views/TransferToWallet/QRCode.js.map +1 -0
- package/dist/esm/views/TransferToWallet/index.js +13 -0
- package/dist/esm/views/TransferToWallet/index.js.map +1 -0
- package/dist/esm/views/index.js +10 -0
- package/dist/esm/views/index.js.map +1 -0
- package/dist/types/api/data.d.ts +21 -0
- package/dist/types/api/data.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +2 -0
- package/dist/types/api/index.d.ts.map +1 -0
- package/dist/types/components/CopyButton.d.ts +9 -0
- package/dist/types/components/CopyButton.d.ts.map +1 -0
- package/dist/types/components/DefaultIcon.d.ts +6 -0
- package/dist/types/components/DefaultIcon.d.ts.map +1 -0
- package/dist/types/components/NavigationHeader.d.ts +8 -0
- package/dist/types/components/NavigationHeader.d.ts.map +1 -0
- package/dist/types/components/SequenceCheckoutProvider/SequenceCheckoutProvider.d.ts +7 -0
- package/dist/types/components/SequenceCheckoutProvider/SequenceCheckoutProvider.d.ts.map +1 -0
- package/dist/types/components/SequenceCheckoutProvider/index.d.ts +2 -0
- package/dist/types/components/SequenceCheckoutProvider/index.d.ts.map +1 -0
- package/dist/types/constants/abi.d.ts +46 -0
- package/dist/types/constants/abi.d.ts.map +1 -0
- package/dist/types/constants/index.d.ts +5 -0
- package/dist/types/constants/index.d.ts.map +1 -0
- package/dist/types/contexts/AddFundsModal.d.ts +22 -0
- package/dist/types/contexts/AddFundsModal.d.ts.map +1 -0
- package/dist/types/contexts/CheckoutModal.d.ts +56 -0
- package/dist/types/contexts/CheckoutModal.d.ts.map +1 -0
- package/dist/types/contexts/Navigation.d.ts +38 -0
- package/dist/types/contexts/Navigation.d.ts.map +1 -0
- package/dist/types/contexts/SelectPaymentModal.d.ts +43 -0
- package/dist/types/contexts/SelectPaymentModal.d.ts.map +1 -0
- package/dist/types/contexts/SwapModal.d.ts +25 -0
- package/dist/types/contexts/SwapModal.d.ts.map +1 -0
- package/dist/types/contexts/TransactionStatusModal.d.ts +25 -0
- package/dist/types/contexts/TransactionStatusModal.d.ts.map +1 -0
- package/dist/types/contexts/TransferFundsModal.d.ts +13 -0
- package/dist/types/contexts/TransferFundsModal.d.ts.map +1 -0
- package/dist/types/contexts/genericContext.d.ts +2 -0
- package/dist/types/contexts/genericContext.d.ts.map +1 -0
- package/dist/types/contexts/index.d.ts +8 -0
- package/dist/types/contexts/index.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +14 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/useAddFundsModal.d.ts +6 -0
- package/dist/types/hooks/useAddFundsModal.d.ts.map +1 -0
- package/dist/types/hooks/useCheckoutModal.d.ts +6 -0
- package/dist/types/hooks/useCheckoutModal.d.ts.map +1 -0
- package/dist/types/hooks/useCheckoutOptionsSalesContract.d.ts +6 -0
- package/dist/types/hooks/useCheckoutOptionsSalesContract.d.ts.map +1 -0
- package/dist/types/hooks/useCheckoutWhitelistStatus.d.ts +3 -0
- package/dist/types/hooks/useCheckoutWhitelistStatus.d.ts.map +1 -0
- package/dist/types/hooks/useERC1155SaleContractCheckout.d.ts +37 -0
- package/dist/types/hooks/useERC1155SaleContractCheckout.d.ts.map +1 -0
- package/dist/types/hooks/useMarketplaceClient.d.ts +9 -0
- package/dist/types/hooks/useMarketplaceClient.d.ts.map +1 -0
- package/dist/types/hooks/useModalTheme.d.ts +2 -0
- package/dist/types/hooks/useModalTheme.d.ts.map +1 -0
- package/dist/types/hooks/useNavigation.d.ts +11 -0
- package/dist/types/hooks/useNavigation.d.ts.map +1 -0
- package/dist/types/hooks/useSardineClientToken.d.ts +3 -0
- package/dist/types/hooks/useSardineClientToken.d.ts.map +1 -0
- package/dist/types/hooks/useSelectPaymentModal.d.ts +6 -0
- package/dist/types/hooks/useSelectPaymentModal.d.ts.map +1 -0
- package/dist/types/hooks/useSkipOnCloseCallback.d.ts +6 -0
- package/dist/types/hooks/useSkipOnCloseCallback.d.ts.map +1 -0
- package/dist/types/hooks/useSwapModal.d.ts +6 -0
- package/dist/types/hooks/useSwapModal.d.ts.map +1 -0
- package/dist/types/hooks/useTransactionStatusModal.d.ts +6 -0
- package/dist/types/hooks/useTransactionStatusModal.d.ts.map +1 -0
- package/dist/types/hooks/useTransferFundsModal.d.ts +6 -0
- package/dist/types/hooks/useTransferFundsModal.d.ts.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/sardine.d.ts +6 -0
- package/dist/types/utils/sardine.d.ts.map +1 -0
- package/dist/types/utils/sizing.d.ts +2 -0
- package/dist/types/utils/sizing.d.ts.map +1 -0
- package/dist/types/utils/transak.d.ts +7 -0
- package/dist/types/utils/transak.d.ts.map +1 -0
- package/dist/types/views/AddFunds.d.ts +2 -0
- package/dist/types/views/AddFunds.d.ts.map +1 -0
- package/dist/types/views/CheckoutSelection/component/OrderSummaryItem.d.ts +10 -0
- package/dist/types/views/CheckoutSelection/component/OrderSummaryItem.d.ts.map +1 -0
- package/dist/types/views/CheckoutSelection/index.d.ts +2 -0
- package/dist/types/views/CheckoutSelection/index.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/Footer.d.ts +2 -0
- package/dist/types/views/PaymentSelection/Footer.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/OrderSummary/Price.d.ts +2 -0
- package/dist/types/views/PaymentSelection/OrderSummary/Price.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/OrderSummary/index.d.ts +2 -0
- package/dist/types/views/PaymentSelection/OrderSummary/index.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.d.ts +11 -0
- package/dist/types/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/PayWithCreditCard/index.d.ts +9 -0
- package/dist/types/views/PaymentSelection/PayWithCreditCard/index.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.d.ts +2 -0
- package/dist/types/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/PayWithCrypto/index.d.ts +12 -0
- package/dist/types/views/PaymentSelection/PayWithCrypto/index.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/TransferFunds.d.ts +2 -0
- package/dist/types/views/PaymentSelection/TransferFunds.d.ts.map +1 -0
- package/dist/types/views/PaymentSelection/index.d.ts +4 -0
- package/dist/types/views/PaymentSelection/index.d.ts.map +1 -0
- package/dist/types/views/PendingCreditCardTransaction.d.ts +8 -0
- package/dist/types/views/PendingCreditCardTransaction.d.ts.map +1 -0
- package/dist/types/views/Swap/index.d.ts +2 -0
- package/dist/types/views/Swap/index.d.ts.map +1 -0
- package/dist/types/views/TransactionError.d.ts +3 -0
- package/dist/types/views/TransactionError.d.ts.map +1 -0
- package/dist/types/views/TransactionStatus/index.d.ts +9 -0
- package/dist/types/views/TransactionStatus/index.d.ts.map +1 -0
- package/dist/types/views/TransactionSuccess.d.ts +3 -0
- package/dist/types/views/TransactionSuccess.d.ts.map +1 -0
- package/dist/types/views/TransferToWallet/CopyButton.d.ts +10 -0
- package/dist/types/views/TransferToWallet/CopyButton.d.ts.map +1 -0
- package/dist/types/views/TransferToWallet/QRCode.d.ts +6 -0
- package/dist/types/views/TransferToWallet/QRCode.d.ts.map +1 -0
- package/dist/types/views/TransferToWallet/index.d.ts +2 -0
- package/dist/types/views/TransferToWallet/index.d.ts.map +1 -0
- package/dist/types/views/index.d.ts +10 -0
- package/dist/types/views/index.d.ts.map +1 -0
- package/package.json +73 -0
- package/src/api/data.ts +194 -0
- package/src/api/index.ts +1 -0
- package/src/components/CopyButton.tsx +32 -0
- package/src/components/DefaultIcon.tsx +22 -0
- package/src/components/NavigationHeader.tsx +57 -0
- package/src/components/SequenceCheckoutProvider/SequenceCheckoutProvider.tsx +363 -0
- package/src/components/SequenceCheckoutProvider/index.ts +1 -0
- package/src/constants/abi.ts +185 -0
- package/src/constants/index.ts +4 -0
- package/src/contexts/AddFundsModal.ts +25 -0
- package/src/contexts/CheckoutModal.ts +65 -0
- package/src/contexts/Navigation.ts +56 -0
- package/src/contexts/SelectPaymentModal.ts +50 -0
- package/src/contexts/SwapModal.ts +31 -0
- package/src/contexts/TransactionStatusModal.ts +29 -0
- package/src/contexts/TransferFundsModal.ts +16 -0
- package/src/contexts/genericContext.ts +19 -0
- package/src/contexts/index.ts +7 -0
- package/src/hooks/index.ts +13 -0
- package/src/hooks/useAddFundsModal.ts +7 -0
- package/src/hooks/useCheckoutModal.ts +7 -0
- package/src/hooks/useCheckoutOptionsSalesContract.ts +28 -0
- package/src/hooks/useCheckoutWhitelistStatus.ts +20 -0
- package/src/hooks/useERC1155SaleContractCheckout.ts +260 -0
- package/src/hooks/useMarketplaceClient.ts +49 -0
- package/src/hooks/useModalTheme.ts +7 -0
- package/src/hooks/useNavigation.ts +33 -0
- package/src/hooks/useSardineClientToken.ts +18 -0
- package/src/hooks/useSelectPaymentModal.ts +7 -0
- package/src/hooks/useSkipOnCloseCallback.ts +25 -0
- package/src/hooks/useSwapModal.ts +7 -0
- package/src/hooks/useTransactionStatusModal.ts +7 -0
- package/src/hooks/useTransferFundsModal.ts +7 -0
- package/src/index.ts +19 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/sardine.ts +62 -0
- package/src/utils/sizing.ts +8 -0
- package/src/utils/transak.ts +72 -0
- package/src/views/AddFunds.tsx +59 -0
- package/src/views/CheckoutSelection/component/OrderSummaryItem.tsx +82 -0
- package/src/views/CheckoutSelection/index.tsx +207 -0
- package/src/views/PaymentSelection/Footer.tsx +39 -0
- package/src/views/PaymentSelection/OrderSummary/Price.tsx +66 -0
- package/src/views/PaymentSelection/OrderSummary/index.tsx +113 -0
- package/src/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.tsx +38 -0
- package/src/views/PaymentSelection/PayWithCreditCard/index.tsx +177 -0
- package/src/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.tsx +11 -0
- package/src/views/PaymentSelection/PayWithCrypto/index.tsx +250 -0
- package/src/views/PaymentSelection/TransferFunds.tsx +98 -0
- package/src/views/PaymentSelection/index.tsx +484 -0
- package/src/views/PendingCreditCardTransaction.tsx +429 -0
- package/src/views/Swap/index.tsx +289 -0
- package/src/views/TransactionError.tsx +39 -0
- package/src/views/TransactionStatus/index.tsx +337 -0
- package/src/views/TransactionSuccess.tsx +51 -0
- package/src/views/TransferToWallet/CopyButton.tsx +37 -0
- package/src/views/TransferToWallet/QRCode.tsx +25 -0
- package/src/views/TransferToWallet/index.tsx +36 -0
- package/src/views/index.ts +9 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { formatDisplay, NetworkBadge, CollectibleTileImage } from '@0xsequence/connect'
|
|
2
|
+
import { Spinner, NetworkImage, Text } from '@0xsequence/design-system'
|
|
3
|
+
import { findSupportedNetwork } from '@0xsequence/network'
|
|
4
|
+
import { useGetTokenMetadata, useGetContractInfo, useGetCoinPrices } from '@0xsequence/react-hooks'
|
|
5
|
+
import { formatUnits } from 'viem'
|
|
6
|
+
|
|
7
|
+
import { useSelectPaymentModal } from '../../../hooks'
|
|
8
|
+
|
|
9
|
+
export const OrderSummary = () => {
|
|
10
|
+
const { selectPaymentSettings } = useSelectPaymentModal()
|
|
11
|
+
const chain = selectPaymentSettings!.chain
|
|
12
|
+
const network = findSupportedNetwork(chain)
|
|
13
|
+
const chainId = network?.chainId || 137
|
|
14
|
+
const collectionAddress = selectPaymentSettings!.collectionAddress
|
|
15
|
+
const tokenIds = selectPaymentSettings?.collectibles.map(c => c.tokenId) || []
|
|
16
|
+
const { data: tokenMetadatas, isLoading: isLoadingTokenMetadatas } = useGetTokenMetadata({
|
|
17
|
+
chainID: String(chainId),
|
|
18
|
+
contractAddress: collectionAddress,
|
|
19
|
+
tokenIDs: tokenIds
|
|
20
|
+
})
|
|
21
|
+
const { data: dataCollectionInfo, isLoading: isLoadingCollectionInfo } = useGetContractInfo({
|
|
22
|
+
chainID: String(chainId),
|
|
23
|
+
contractAddress: selectPaymentSettings!.collectionAddress
|
|
24
|
+
})
|
|
25
|
+
const { data: dataCurrencyInfo, isLoading: isLoadingCurrencyInfo } = useGetContractInfo({
|
|
26
|
+
chainID: String(chainId),
|
|
27
|
+
contractAddress: selectPaymentSettings!.currencyAddress
|
|
28
|
+
})
|
|
29
|
+
const { data: dataCoinPrices, isLoading: isLoadingCoinPrices } = useGetCoinPrices([
|
|
30
|
+
{
|
|
31
|
+
chainId,
|
|
32
|
+
contractAddress: selectPaymentSettings!.currencyAddress
|
|
33
|
+
}
|
|
34
|
+
])
|
|
35
|
+
|
|
36
|
+
const isLoading = isLoadingTokenMetadatas || isLoadingCollectionInfo || isLoadingCurrencyInfo || isLoadingCoinPrices
|
|
37
|
+
|
|
38
|
+
if (isLoading) {
|
|
39
|
+
return (
|
|
40
|
+
<div className="flex mb-2 gap-3" style={{ height: '72px' }}>
|
|
41
|
+
<Spinner />
|
|
42
|
+
</div>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const formattedPrice = formatUnits(BigInt(selectPaymentSettings!.price), dataCurrencyInfo?.decimals || 0)
|
|
47
|
+
const displayPrice = formatDisplay(formattedPrice, {
|
|
48
|
+
disableScientificNotation: true,
|
|
49
|
+
disableCompactNotation: true,
|
|
50
|
+
significantDigits: 6
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const totalQuantity =
|
|
54
|
+
selectPaymentSettings?.collectibles.reduce((accumulator, collectible) => {
|
|
55
|
+
const quantity = formatUnits(BigInt(collectible.quantity), Number(collectible.decimals || 0))
|
|
56
|
+
return accumulator + Number(quantity)
|
|
57
|
+
}, 0) || 0
|
|
58
|
+
|
|
59
|
+
const fiatExchangeRate = dataCoinPrices?.[0].price?.value || 0
|
|
60
|
+
const priceFiat = (fiatExchangeRate * Number(formattedPrice)).toFixed(2)
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div className="flex flex-col gap-5">
|
|
64
|
+
<div>
|
|
65
|
+
<Text
|
|
66
|
+
variant="small"
|
|
67
|
+
fontWeight="bold"
|
|
68
|
+
color="primary"
|
|
69
|
+
>{`${totalQuantity} ${totalQuantity > 1 ? 'items' : 'item'}`}</Text>
|
|
70
|
+
</div>
|
|
71
|
+
<div className="flex flex-row gap-1">
|
|
72
|
+
{selectPaymentSettings!.collectibles.map(collectible => {
|
|
73
|
+
const collectibleQuantity = Number(formatUnits(BigInt(collectible.quantity), Number(collectible.decimals || 0)))
|
|
74
|
+
const tokenMetadata = tokenMetadatas?.find(tokenMetadata => tokenMetadata.tokenId === collectible.tokenId)
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<div className="flex gap-3 items-center" key={collectible.tokenId}>
|
|
78
|
+
<div
|
|
79
|
+
className="rounded-xl"
|
|
80
|
+
style={{
|
|
81
|
+
height: '36px',
|
|
82
|
+
width: '36px'
|
|
83
|
+
}}
|
|
84
|
+
>
|
|
85
|
+
<CollectibleTileImage imageUrl={tokenMetadata?.image} />
|
|
86
|
+
</div>
|
|
87
|
+
<div className="flex flex-col gap-0.5">
|
|
88
|
+
<Text variant="small" color="secondary" fontWeight="medium">
|
|
89
|
+
{dataCollectionInfo?.name || null}
|
|
90
|
+
</Text>
|
|
91
|
+
<Text variant="small" color="primary" fontWeight="bold">
|
|
92
|
+
{`${tokenMetadata?.name || 'Collectible'} ${collectibleQuantity > 1 ? `x${collectibleQuantity}` : ''}`}
|
|
93
|
+
</Text>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
)
|
|
97
|
+
})}
|
|
98
|
+
</div>
|
|
99
|
+
<div className="flex gap-1 flex-col">
|
|
100
|
+
<div className="flex flex-row gap-2 items-center">
|
|
101
|
+
<NetworkImage chainId={chainId} size="sm" />
|
|
102
|
+
<Text color="white" variant="large" fontWeight="bold">{`${displayPrice} ${dataCurrencyInfo?.symbol}`}</Text>
|
|
103
|
+
</div>
|
|
104
|
+
<div>
|
|
105
|
+
<Text color="muted" variant="normal" fontWeight="normal">
|
|
106
|
+
{`$${priceFiat} estimated total`}
|
|
107
|
+
</Text>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
<NetworkBadge chainId={chainId} />
|
|
111
|
+
</div>
|
|
112
|
+
)
|
|
113
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Card, cn, Text } from '@0xsequence/design-system'
|
|
2
|
+
import { JSX } from 'react'
|
|
3
|
+
|
|
4
|
+
interface PaymentProviderOptionProps {
|
|
5
|
+
name: string
|
|
6
|
+
onClick: () => void
|
|
7
|
+
isSelected: boolean
|
|
8
|
+
isRecommended: boolean
|
|
9
|
+
logo: JSX.Element
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const PaymentProviderOption = ({ name, onClick, isSelected, isRecommended, logo }: PaymentProviderOptionProps) => {
|
|
13
|
+
return (
|
|
14
|
+
<Card
|
|
15
|
+
className={cn(
|
|
16
|
+
'flex border-2 border-solid justify-between p-4 cursor-pointer',
|
|
17
|
+
isSelected ? 'bg-background-raised' : 'bg-transparent'
|
|
18
|
+
)}
|
|
19
|
+
onClick={onClick}
|
|
20
|
+
>
|
|
21
|
+
<div className="flex justify-between w-full">
|
|
22
|
+
<div className="flex justify-between items-center gap-3">
|
|
23
|
+
<div className="rounded-xl">{logo}</div>
|
|
24
|
+
<Text variant="normal" fontWeight="bold" color="secondary">
|
|
25
|
+
{name}
|
|
26
|
+
</Text>
|
|
27
|
+
</div>
|
|
28
|
+
<div className="flex flex-row justify-center items-center gap-3">
|
|
29
|
+
{isRecommended && (
|
|
30
|
+
<Text color="muted" variant="small">
|
|
31
|
+
Recommended
|
|
32
|
+
</Text>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</Card>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { ArrowRightIcon, Card, PaymentsIcon, Spinner, Text } from '@0xsequence/design-system'
|
|
2
|
+
import { findSupportedNetwork } from '@0xsequence/network'
|
|
3
|
+
import { useClearCachedBalances, useGetContractInfo } from '@0xsequence/react-hooks'
|
|
4
|
+
import { useEffect, useState } from 'react'
|
|
5
|
+
import { useAccount } from 'wagmi'
|
|
6
|
+
|
|
7
|
+
import { SelectPaymentSettings } from '../../../contexts'
|
|
8
|
+
import { CheckoutSettings } from '../../../contexts/CheckoutModal'
|
|
9
|
+
import { useCheckoutModal, useSelectPaymentModal } from '../../../hooks'
|
|
10
|
+
|
|
11
|
+
interface PayWithCreditCardProps {
|
|
12
|
+
settings: SelectPaymentSettings
|
|
13
|
+
disableButtons: boolean
|
|
14
|
+
skipOnCloseCallback: () => void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type BasePaymentProviderOptions = 'sardine' | 'transak'
|
|
18
|
+
type CustomPaymentProviderOptions = 'custom'
|
|
19
|
+
type PaymentProviderOptions = BasePaymentProviderOptions | CustomPaymentProviderOptions
|
|
20
|
+
|
|
21
|
+
export const PayWithCreditCard = ({ settings, disableButtons, skipOnCloseCallback }: PayWithCreditCardProps) => {
|
|
22
|
+
const {
|
|
23
|
+
chain,
|
|
24
|
+
currencyAddress,
|
|
25
|
+
targetContractAddress,
|
|
26
|
+
price,
|
|
27
|
+
txData,
|
|
28
|
+
collectibles,
|
|
29
|
+
collectionAddress,
|
|
30
|
+
approvedSpenderAddress,
|
|
31
|
+
onSuccess = () => {},
|
|
32
|
+
onError = () => {},
|
|
33
|
+
onClose = () => {},
|
|
34
|
+
creditCardProviders = [],
|
|
35
|
+
transakConfig,
|
|
36
|
+
supplementaryAnalyticsInfo = {}
|
|
37
|
+
} = settings
|
|
38
|
+
|
|
39
|
+
const { address: userAddress } = useAccount()
|
|
40
|
+
const { clearCachedBalances } = useClearCachedBalances()
|
|
41
|
+
const { closeSelectPaymentModal } = useSelectPaymentModal()
|
|
42
|
+
const { triggerCheckout } = useCheckoutModal()
|
|
43
|
+
const network = findSupportedNetwork(chain)
|
|
44
|
+
const chainId = network?.chainId || 137
|
|
45
|
+
const { data: currencyInfoData, isLoading: isLoadingContractInfo } = useGetContractInfo({
|
|
46
|
+
chainID: String(chainId),
|
|
47
|
+
contractAddress: currencyAddress
|
|
48
|
+
})
|
|
49
|
+
const [selectedPaymentProvider, setSelectedPaymentProvider] = useState<PaymentProviderOptions>()
|
|
50
|
+
const isLoading = isLoadingContractInfo
|
|
51
|
+
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (selectedPaymentProvider) {
|
|
54
|
+
payWithSelectedProvider()
|
|
55
|
+
}
|
|
56
|
+
}, [selectedPaymentProvider])
|
|
57
|
+
|
|
58
|
+
const payWithSelectedProvider = () => {
|
|
59
|
+
switch (selectedPaymentProvider) {
|
|
60
|
+
case 'custom':
|
|
61
|
+
if (settings.customProviderCallback) {
|
|
62
|
+
onClickCustomProvider()
|
|
63
|
+
}
|
|
64
|
+
return
|
|
65
|
+
case 'sardine':
|
|
66
|
+
case 'transak':
|
|
67
|
+
onPurchase()
|
|
68
|
+
return
|
|
69
|
+
default:
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const onClickCustomProvider = () => {
|
|
75
|
+
if (settings.customProviderCallback) {
|
|
76
|
+
closeSelectPaymentModal()
|
|
77
|
+
settings.customProviderCallback(onSuccess, onError, onClose)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const onPurchase = () => {
|
|
82
|
+
if (!userAddress || !currencyInfoData) {
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const collectible = collectibles[0]
|
|
87
|
+
|
|
88
|
+
const checkoutSettings: CheckoutSettings = {
|
|
89
|
+
creditCardCheckout: {
|
|
90
|
+
onSuccess: (txHash: string) => {
|
|
91
|
+
clearCachedBalances()
|
|
92
|
+
onSuccess(txHash)
|
|
93
|
+
},
|
|
94
|
+
onError,
|
|
95
|
+
onClose,
|
|
96
|
+
chainId,
|
|
97
|
+
recipientAddress: userAddress,
|
|
98
|
+
contractAddress: targetContractAddress,
|
|
99
|
+
currencyQuantity: price,
|
|
100
|
+
currencySymbol: currencyInfoData.symbol,
|
|
101
|
+
currencyAddress,
|
|
102
|
+
currencyDecimals: String(currencyInfoData?.decimals || 0),
|
|
103
|
+
nftId: collectible.tokenId,
|
|
104
|
+
nftAddress: collectionAddress,
|
|
105
|
+
nftQuantity: collectible.quantity,
|
|
106
|
+
nftDecimals: collectible.decimals === undefined ? undefined : String(collectible.decimals),
|
|
107
|
+
provider: selectedPaymentProvider as BasePaymentProviderOptions,
|
|
108
|
+
calldata: txData,
|
|
109
|
+
transakConfig,
|
|
110
|
+
approvedSpenderAddress: approvedSpenderAddress || targetContractAddress,
|
|
111
|
+
supplementaryAnalyticsInfo
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
skipOnCloseCallback()
|
|
116
|
+
closeSelectPaymentModal()
|
|
117
|
+
triggerCheckout(checkoutSettings)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const Options = () => {
|
|
121
|
+
return (
|
|
122
|
+
<div className="flex flex-col justify-center items-center gap-2 w-full">
|
|
123
|
+
{/* Only 1 option will be displayed, even if multiple providers are passed */}
|
|
124
|
+
{creditCardProviders
|
|
125
|
+
.slice(0, 1)
|
|
126
|
+
.filter(provider => {
|
|
127
|
+
// cannot display transak checkout if the settings aren't provided
|
|
128
|
+
if (provider === 'transak' && !settings.transakConfig) {
|
|
129
|
+
return false
|
|
130
|
+
}
|
|
131
|
+
return true
|
|
132
|
+
})
|
|
133
|
+
.map(creditCardProvider => {
|
|
134
|
+
switch (creditCardProvider) {
|
|
135
|
+
case 'sardine':
|
|
136
|
+
case 'transak':
|
|
137
|
+
case 'custom':
|
|
138
|
+
return (
|
|
139
|
+
<Card
|
|
140
|
+
className="flex justify-between items-center p-4 cursor-pointer"
|
|
141
|
+
key="sardine"
|
|
142
|
+
onClick={() => {
|
|
143
|
+
setSelectedPaymentProvider(creditCardProvider)
|
|
144
|
+
}}
|
|
145
|
+
disabled={disableButtons}
|
|
146
|
+
>
|
|
147
|
+
<div className="flex flex-row gap-3 items-center">
|
|
148
|
+
<PaymentsIcon className="text-white" />
|
|
149
|
+
<Text color="primary" variant="normal" fontWeight="bold">
|
|
150
|
+
Pay with credit or debit card
|
|
151
|
+
</Text>
|
|
152
|
+
</div>
|
|
153
|
+
<div style={{ transform: 'rotate(-45deg)' }}>
|
|
154
|
+
<ArrowRightIcon className="text-white" />
|
|
155
|
+
</div>
|
|
156
|
+
</Card>
|
|
157
|
+
)
|
|
158
|
+
default:
|
|
159
|
+
return null
|
|
160
|
+
}
|
|
161
|
+
})}
|
|
162
|
+
</div>
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<div className="w-full">
|
|
168
|
+
{isLoading ? (
|
|
169
|
+
<div className="flex w-full pt-5 justify-center items-center">
|
|
170
|
+
<Spinner />
|
|
171
|
+
</div>
|
|
172
|
+
) : (
|
|
173
|
+
<Options />
|
|
174
|
+
)}
|
|
175
|
+
</div>
|
|
176
|
+
)
|
|
177
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const SardineLogo = () => {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="42" height="42" className="rounded-xl" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<rect className="w-24 h-24" fill="#2D29D7" />
|
|
5
|
+
<path
|
|
6
|
+
d="M19.6675 12.2188L13.9751 17.9112C13.8567 18.0296 13.649 18.0296 13.5306 17.9112L9.72601 14.1053C9.5485 13.9291 9.45219 13.6938 9.45219 13.4448C9.45219 13.1957 9.54988 12.9604 9.72601 12.7843L9.88975 12.6206C9.90213 12.6068 9.92002 12.5999 9.93653 12.5999C9.95442 12.5999 9.97093 12.6068 9.98332 12.6192L13.5788 16.216C13.6723 16.3082 13.8333 16.3082 13.9269 16.216L17.9709 12.1706C18.0659 12.0757 18.0659 11.9188 17.9709 11.8239L13.9269 7.77847C13.8333 7.68627 13.6723 7.6849 13.5802 7.77847L4.89078 16.4651C4.82336 16.5325 4.72979 16.5504 4.64173 16.5146C4.55366 16.4775 4.5 16.3963 4.5 16.3013V7.6904C4.5 7.59546 4.55366 7.51428 4.64173 7.4785C4.72841 7.44135 4.82473 7.46061 4.89216 7.52804L7.2506 9.88648C7.42673 10.0626 7.52442 10.2979 7.52442 10.547C7.52442 10.796 7.42673 11.0327 7.2506 11.2088L7.08824 11.3712C7.06484 11.3946 7.01944 11.3946 6.99467 11.3712L5.95855 10.3351C5.91314 10.2896 5.85397 10.2896 5.81545 10.3062C5.77554 10.3227 5.73289 10.3639 5.73289 10.4286V13.5617C5.73289 13.6264 5.77554 13.6677 5.81545 13.6842C5.85397 13.6993 5.91314 13.7007 5.95855 13.6553L13.5306 6.08462C13.6434 5.97179 13.8622 5.97179 13.9751 6.08462L19.6675 11.7771C19.79 11.8982 19.79 12.0977 19.6675 12.2202V12.2188Z"
|
|
7
|
+
fill="white"
|
|
8
|
+
/>
|
|
9
|
+
</svg>
|
|
10
|
+
)
|
|
11
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { CryptoOption, compareAddress, ContractVerificationStatus, formatDisplay } from '@0xsequence/connect'
|
|
2
|
+
import { AddIcon, Button, SubtractIcon, Text, Spinner } from '@0xsequence/design-system'
|
|
3
|
+
import { findSupportedNetwork } from '@0xsequence/network'
|
|
4
|
+
import { useClearCachedBalances, useGetTokenBalancesSummary, useGetContractInfo, useGetSwapPrices } from '@0xsequence/react-hooks'
|
|
5
|
+
import { motion } from 'motion/react'
|
|
6
|
+
import { useState, useEffect, Fragment, SetStateAction } from 'react'
|
|
7
|
+
import { formatUnits } from 'viem'
|
|
8
|
+
import { useAccount } from 'wagmi'
|
|
9
|
+
|
|
10
|
+
import { SelectPaymentSettings } from '../../../contexts'
|
|
11
|
+
|
|
12
|
+
interface PayWithCryptoProps {
|
|
13
|
+
settings: SelectPaymentSettings
|
|
14
|
+
disableButtons: boolean
|
|
15
|
+
selectedCurrency: string | undefined
|
|
16
|
+
setSelectedCurrency: React.Dispatch<SetStateAction<string | undefined>>
|
|
17
|
+
isLoading: boolean
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const MAX_OPTIONS = 3
|
|
21
|
+
|
|
22
|
+
export const PayWithCrypto = ({
|
|
23
|
+
settings,
|
|
24
|
+
disableButtons,
|
|
25
|
+
selectedCurrency,
|
|
26
|
+
setSelectedCurrency,
|
|
27
|
+
isLoading
|
|
28
|
+
}: PayWithCryptoProps) => {
|
|
29
|
+
const [showMore, setShowMore] = useState(false)
|
|
30
|
+
const { enableSwapPayments = true, enableMainCurrencyPayment = true } = settings
|
|
31
|
+
|
|
32
|
+
const { chain, currencyAddress, price } = settings
|
|
33
|
+
const { address: userAddress } = useAccount()
|
|
34
|
+
const { clearCachedBalances } = useClearCachedBalances()
|
|
35
|
+
const network = findSupportedNetwork(chain)
|
|
36
|
+
const chainId = network?.chainId || 137
|
|
37
|
+
|
|
38
|
+
const { data: currencyBalanceData, isLoading: currencyBalanceIsLoading } = useGetTokenBalancesSummary({
|
|
39
|
+
chainIds: [chainId],
|
|
40
|
+
filter: {
|
|
41
|
+
accountAddresses: userAddress ? [userAddress] : [],
|
|
42
|
+
contractStatus: ContractVerificationStatus.ALL,
|
|
43
|
+
contractWhitelist: [currencyAddress],
|
|
44
|
+
omitNativeBalances: false
|
|
45
|
+
},
|
|
46
|
+
omitMetadata: true
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
const { data: currencyInfoData, isLoading: isLoadingCurrencyInfo } = useGetContractInfo({
|
|
50
|
+
chainID: String(chainId),
|
|
51
|
+
contractAddress: currencyAddress
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const buyCurrencyAddress = settings?.currencyAddress
|
|
55
|
+
|
|
56
|
+
const { data: swapPrices = [], isLoading: swapPricesIsLoading } = useGetSwapPrices(
|
|
57
|
+
{
|
|
58
|
+
userAddress: userAddress ?? '',
|
|
59
|
+
buyCurrencyAddress,
|
|
60
|
+
chainId: chainId,
|
|
61
|
+
buyAmount: price,
|
|
62
|
+
withContractInfo: true
|
|
63
|
+
},
|
|
64
|
+
{ disabled: !enableSwapPayments }
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
const isLoadingOptions = currencyBalanceIsLoading || isLoadingCurrencyInfo || isLoading
|
|
68
|
+
|
|
69
|
+
const swapsIsLoading = swapPricesIsLoading
|
|
70
|
+
|
|
71
|
+
interface Coin {
|
|
72
|
+
index: number
|
|
73
|
+
name: string
|
|
74
|
+
symbol: string
|
|
75
|
+
currencyAddress: string
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const coins: Coin[] = [
|
|
79
|
+
...(enableMainCurrencyPayment
|
|
80
|
+
? [
|
|
81
|
+
{
|
|
82
|
+
index: 0,
|
|
83
|
+
name: currencyInfoData?.name || 'Unknown',
|
|
84
|
+
symbol: currencyInfoData?.symbol || '',
|
|
85
|
+
currencyAddress
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
: []),
|
|
89
|
+
...swapPrices.map((price, index) => {
|
|
90
|
+
return {
|
|
91
|
+
index: index + 1,
|
|
92
|
+
name: price.info?.name || 'Unknown',
|
|
93
|
+
symbol: price.info?.symbol || '',
|
|
94
|
+
currencyAddress: price.info?.address || ''
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (enableMainCurrencyPayment) {
|
|
101
|
+
setSelectedCurrency(coins[0].currencyAddress)
|
|
102
|
+
} else if (!swapPricesIsLoading) {
|
|
103
|
+
setSelectedCurrency(swapPrices?.[0]?.info?.address)
|
|
104
|
+
}
|
|
105
|
+
}, [swapPricesIsLoading])
|
|
106
|
+
const priceFormatted = formatUnits(BigInt(price), currencyInfoData?.decimals || 0)
|
|
107
|
+
const priceDisplay = formatDisplay(priceFormatted, {
|
|
108
|
+
disableScientificNotation: true,
|
|
109
|
+
disableCompactNotation: true,
|
|
110
|
+
significantDigits: 6
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
const balanceInfo = currencyBalanceData?.find(balanceData => compareAddress(currencyAddress, balanceData.contractAddress))
|
|
114
|
+
|
|
115
|
+
const balance: bigint = BigInt(balanceInfo?.balance || '0')
|
|
116
|
+
// let balanceFormatted = Number(formatUnits(balance, currencyInfoData?.decimals || 0))
|
|
117
|
+
// balanceFormatted = Math.trunc(Number(balanceFormatted) * 10000) / 10000
|
|
118
|
+
|
|
119
|
+
const isNotEnoughFunds: boolean = BigInt(price) > balance
|
|
120
|
+
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
clearCachedBalances()
|
|
123
|
+
}, [])
|
|
124
|
+
|
|
125
|
+
const Options = () => {
|
|
126
|
+
return (
|
|
127
|
+
<div className="flex flex-col justify-center items-center gap-2 w-full">
|
|
128
|
+
{coins.map(coin => {
|
|
129
|
+
if (compareAddress(coin.currencyAddress, currencyAddress)) {
|
|
130
|
+
return (
|
|
131
|
+
<Fragment key={currencyAddress}>
|
|
132
|
+
<CryptoOption
|
|
133
|
+
currencyName={currencyInfoData?.name || 'Unknown'}
|
|
134
|
+
chainId={chainId}
|
|
135
|
+
iconUrl={currencyInfoData?.logoURI}
|
|
136
|
+
symbol={currencyInfoData?.symbol || ''}
|
|
137
|
+
onClick={() => {
|
|
138
|
+
setSelectedCurrency(currencyAddress)
|
|
139
|
+
}}
|
|
140
|
+
price={priceDisplay}
|
|
141
|
+
disabled={disableButtons}
|
|
142
|
+
isSelected={compareAddress(selectedCurrency || '', currencyAddress)}
|
|
143
|
+
isInsufficientFunds={isNotEnoughFunds}
|
|
144
|
+
/>
|
|
145
|
+
</Fragment>
|
|
146
|
+
)
|
|
147
|
+
} else {
|
|
148
|
+
const swapPrice = swapPrices?.find(price => compareAddress(price.info?.address || '', coin.currencyAddress))
|
|
149
|
+
const currencyInfoNotFound =
|
|
150
|
+
!swapPrice || !swapPrice.info || swapPrice?.info?.decimals === undefined || !swapPrice.balance?.balance
|
|
151
|
+
|
|
152
|
+
if (currencyInfoNotFound || !enableSwapPayments) {
|
|
153
|
+
return null
|
|
154
|
+
}
|
|
155
|
+
const swapQuotePriceFormatted = formatUnits(BigInt(swapPrice.price.price), swapPrice.info?.decimals || 18)
|
|
156
|
+
const swapQuoteAddress = swapPrice.info?.address || ''
|
|
157
|
+
|
|
158
|
+
const swapQuotePriceDisplay = formatDisplay(swapQuotePriceFormatted, {
|
|
159
|
+
disableScientificNotation: true,
|
|
160
|
+
disableCompactNotation: true,
|
|
161
|
+
significantDigits: 6
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<CryptoOption
|
|
166
|
+
key={swapQuoteAddress}
|
|
167
|
+
currencyName={swapPrice.info?.name || 'Unknown'}
|
|
168
|
+
chainId={chainId}
|
|
169
|
+
iconUrl={swapPrice.info?.logoURI}
|
|
170
|
+
symbol={swapPrice.info?.symbol || ''}
|
|
171
|
+
onClick={() => {
|
|
172
|
+
setSelectedCurrency(swapQuoteAddress)
|
|
173
|
+
}}
|
|
174
|
+
price={swapQuotePriceDisplay}
|
|
175
|
+
disabled={disableButtons}
|
|
176
|
+
isSelected={compareAddress(selectedCurrency || '', swapQuoteAddress)}
|
|
177
|
+
isInsufficientFunds={false}
|
|
178
|
+
/>
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
})}
|
|
182
|
+
</div>
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const gutterHeight = 8
|
|
187
|
+
const optionHeight = 72
|
|
188
|
+
const displayedOptionsAmount = Math.min(coins.length, MAX_OPTIONS)
|
|
189
|
+
const displayedGuttersAmount = displayedOptionsAmount - 1
|
|
190
|
+
const collapsedOptionsHeight = `${optionHeight * displayedOptionsAmount + gutterHeight * displayedGuttersAmount}px`
|
|
191
|
+
|
|
192
|
+
const ShowMoreButton = () => {
|
|
193
|
+
return (
|
|
194
|
+
<div className="flex justify-center items-center w-full">
|
|
195
|
+
<Button
|
|
196
|
+
className="text-white"
|
|
197
|
+
rightIcon={() => {
|
|
198
|
+
if (showMore) {
|
|
199
|
+
return <SubtractIcon style={{ marginLeft: '-4px' }} size="xs" />
|
|
200
|
+
}
|
|
201
|
+
return <AddIcon style={{ marginLeft: '-4px' }} size="xs" />
|
|
202
|
+
}}
|
|
203
|
+
variant="ghost"
|
|
204
|
+
onClick={() => {
|
|
205
|
+
setShowMore(!showMore)
|
|
206
|
+
}}
|
|
207
|
+
label={showMore ? 'Show less' : 'Show more'}
|
|
208
|
+
/>
|
|
209
|
+
</div>
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return (
|
|
214
|
+
<div className="w-full">
|
|
215
|
+
<div>
|
|
216
|
+
<Text variant="small" fontWeight="medium" color="white">
|
|
217
|
+
Pay with crypto
|
|
218
|
+
</Text>
|
|
219
|
+
</div>
|
|
220
|
+
<div
|
|
221
|
+
className="py-3"
|
|
222
|
+
style={{
|
|
223
|
+
marginBottom: '-12px'
|
|
224
|
+
}}
|
|
225
|
+
>
|
|
226
|
+
{isLoadingOptions ? (
|
|
227
|
+
<div className="flex w-full py-5 justify-center items-center">
|
|
228
|
+
<Spinner />
|
|
229
|
+
</div>
|
|
230
|
+
) : (
|
|
231
|
+
<>
|
|
232
|
+
<motion.div
|
|
233
|
+
className="overflow-hidden"
|
|
234
|
+
animate={{ height: showMore ? 'auto' : collapsedOptionsHeight }}
|
|
235
|
+
transition={{ ease: 'easeOut', duration: 0.3 }}
|
|
236
|
+
>
|
|
237
|
+
<Options />
|
|
238
|
+
</motion.div>
|
|
239
|
+
{swapsIsLoading && (
|
|
240
|
+
<div className="flex justify-center items-center w-full mt-4">
|
|
241
|
+
<Spinner />
|
|
242
|
+
</div>
|
|
243
|
+
)}
|
|
244
|
+
{!swapsIsLoading && coins.length > MAX_OPTIONS && <ShowMoreButton />}
|
|
245
|
+
</>
|
|
246
|
+
)}
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
)
|
|
250
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Card, CheckmarkIcon, CopyIcon, IconButton, Text, truncateAddress } from '@0xsequence/design-system'
|
|
2
|
+
import { QRCodeCanvas } from 'qrcode.react'
|
|
3
|
+
import { useState, useEffect } from 'react'
|
|
4
|
+
import { CopyToClipboard } from 'react-copy-to-clipboard'
|
|
5
|
+
import { useAccount } from 'wagmi'
|
|
6
|
+
|
|
7
|
+
import { useSelectPaymentModal, useTransferFundsModal } from '../../hooks'
|
|
8
|
+
|
|
9
|
+
export const TransferFunds = () => {
|
|
10
|
+
const { openTransferFundsModal } = useTransferFundsModal()
|
|
11
|
+
const { openSelectPaymentModal, closeSelectPaymentModal, selectPaymentSettings } = useSelectPaymentModal()
|
|
12
|
+
const { address: userAddress } = useAccount()
|
|
13
|
+
const [isCopied, setCopy] = useState(false)
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (isCopied) {
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
setCopy(false)
|
|
19
|
+
}, 4000)
|
|
20
|
+
}
|
|
21
|
+
}, [isCopied])
|
|
22
|
+
|
|
23
|
+
const handleCopy = () => {
|
|
24
|
+
setCopy(true)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const onClickQrCode = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
28
|
+
e.preventDefault()
|
|
29
|
+
e.stopPropagation()
|
|
30
|
+
if (!selectPaymentSettings) {
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
closeSelectPaymentModal()
|
|
35
|
+
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
openTransferFundsModal({
|
|
38
|
+
walletAddress: userAddress || '',
|
|
39
|
+
onClose: () => {
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
openSelectPaymentModal(selectPaymentSettings)
|
|
42
|
+
}, 500)
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
}, 500)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div className="w-full">
|
|
50
|
+
<div className="mb-3">
|
|
51
|
+
<Text variant="small" fontWeight="medium" color="white">
|
|
52
|
+
Transfer funds to your connected wallet
|
|
53
|
+
</Text>
|
|
54
|
+
</div>
|
|
55
|
+
<Card className="flex cursor-pointer w-full justify-between p-4" onClick={onClickQrCode}>
|
|
56
|
+
<div className="flex flex-row gap-3 items-center">
|
|
57
|
+
<div className="bg-white p-4 rounded-sm" style={{ width: 40, height: 40 }}>
|
|
58
|
+
<QRCodeCanvas
|
|
59
|
+
value={userAddress || ''}
|
|
60
|
+
size={36}
|
|
61
|
+
bgColor="white"
|
|
62
|
+
fgColor="black"
|
|
63
|
+
data-id="qr-code"
|
|
64
|
+
style={{ position: 'relative', top: '-14px', left: '-14px' }}
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
<div className="flex flex-col justify-center items-start">
|
|
68
|
+
<div>
|
|
69
|
+
<Text variant="normal" fontWeight="bold" color="secondary">
|
|
70
|
+
Transfer Funds
|
|
71
|
+
</Text>
|
|
72
|
+
</div>
|
|
73
|
+
<div>
|
|
74
|
+
<Text className="text-sm" color="muted" variant="normal">
|
|
75
|
+
{truncateAddress(userAddress || '', 12, 4)}
|
|
76
|
+
</Text>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
<div
|
|
81
|
+
onClick={e => {
|
|
82
|
+
e.stopPropagation()
|
|
83
|
+
e.preventDefault()
|
|
84
|
+
}}
|
|
85
|
+
>
|
|
86
|
+
<CopyToClipboard text={userAddress || ''} onCopy={handleCopy}>
|
|
87
|
+
<IconButton
|
|
88
|
+
className="text-muted"
|
|
89
|
+
variant="base"
|
|
90
|
+
size="md"
|
|
91
|
+
icon={isCopied ? () => <CheckmarkIcon size="lg" /> : () => <CopyIcon size="lg" />}
|
|
92
|
+
/>
|
|
93
|
+
</CopyToClipboard>
|
|
94
|
+
</div>
|
|
95
|
+
</Card>
|
|
96
|
+
</div>
|
|
97
|
+
)
|
|
98
|
+
}
|