@daimo/pay 1.19.2 → 1.19.4
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/build/connectkit/package.json.js +117 -0
- package/build/connectkit/package.json.js.map +1 -0
- package/build/connectkit/src/assets/MobileWithLogos.js +329 -0
- package/build/connectkit/src/assets/MobileWithLogos.js.map +1 -0
- package/build/connectkit/src/assets/ScanIconWithLogos.js +243 -0
- package/build/connectkit/src/assets/ScanIconWithLogos.js.map +1 -0
- package/build/connectkit/src/assets/browsers.js +969 -0
- package/build/connectkit/src/assets/browsers.js.map +1 -0
- package/build/connectkit/src/assets/chains.js +648 -0
- package/build/connectkit/src/assets/chains.js.map +1 -0
- package/build/connectkit/src/assets/coins.js +43 -0
- package/build/connectkit/src/assets/coins.js.map +1 -0
- package/build/connectkit/src/assets/icons.js +273 -0
- package/build/connectkit/src/assets/icons.js.map +1 -0
- package/build/connectkit/src/assets/logos.js +1620 -0
- package/build/connectkit/src/assets/logos.js.map +1 -0
- package/build/connectkit/src/assets/wave.js +46 -0
- package/build/connectkit/src/assets/wave.js.map +1 -0
- package/build/connectkit/src/components/Common/Alert/index.js +13 -0
- package/build/connectkit/src/components/Common/Alert/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Alert/styles.js +55 -0
- package/build/connectkit/src/components/Common/Alert/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/AmountInput/AmountInputField.js +71 -0
- package/build/connectkit/src/components/Common/AmountInput/AmountInputField.js.map +1 -0
- package/build/connectkit/src/components/Common/AmountInput/index.js +159 -0
- package/build/connectkit/src/components/Common/AmountInput/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Avatar/index.js +78 -0
- package/build/connectkit/src/components/Common/Avatar/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Avatar/styles.js +54 -0
- package/build/connectkit/src/components/Common/Avatar/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/BrowserIcon/index.js +29 -0
- package/build/connectkit/src/components/Common/BrowserIcon/index.js.map +1 -0
- package/build/connectkit/src/components/Common/BrowserIcon/styles.js +20 -0
- package/build/connectkit/src/components/Common/BrowserIcon/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/Button/index.js +144 -0
- package/build/connectkit/src/components/Common/Button/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Button/styles.js +287 -0
- package/build/connectkit/src/components/Common/Button/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/Chain/index.js +141 -0
- package/build/connectkit/src/components/Common/Chain/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Chain/styles.js +90 -0
- package/build/connectkit/src/components/Common/Chain/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/ChainSelectList/index.js +250 -0
- package/build/connectkit/src/components/Common/ChainSelectList/index.js.map +1 -0
- package/build/connectkit/src/components/Common/ChainSelectList/styles.js +226 -0
- package/build/connectkit/src/components/Common/ChainSelectList/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/CircleTimer.js +92 -0
- package/build/connectkit/src/components/Common/CircleTimer.js.map +1 -0
- package/build/connectkit/src/components/Common/ConnectorList/index.js +120 -0
- package/build/connectkit/src/components/Common/ConnectorList/index.js.map +1 -0
- package/build/connectkit/src/components/Common/ConnectorList/styles.js +344 -0
- package/build/connectkit/src/components/Common/ConnectorList/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/CopyToClipboard/CopyToClipboardIcon.js +78 -0
- package/build/connectkit/src/components/Common/CopyToClipboard/CopyToClipboardIcon.js.map +1 -0
- package/build/connectkit/src/components/Common/CopyToClipboard/index.js +33 -0
- package/build/connectkit/src/components/Common/CopyToClipboard/index.js.map +1 -0
- package/build/connectkit/src/components/Common/CustomQRCode/QRCode.js +128 -0
- package/build/connectkit/src/components/Common/CustomQRCode/QRCode.js.map +1 -0
- package/build/connectkit/src/components/Common/CustomQRCode/index.js +71 -0
- package/build/connectkit/src/components/Common/CustomQRCode/index.js.map +1 -0
- package/build/connectkit/src/components/Common/CustomQRCode/styles.js +139 -0
- package/build/connectkit/src/components/Common/CustomQRCode/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/FitText/index.js +34 -0
- package/build/connectkit/src/components/Common/FitText/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Modal/index.js +523 -0
- package/build/connectkit/src/components/Common/Modal/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Modal/styles.js +665 -0
- package/build/connectkit/src/components/Common/Modal/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/OptionsList/index.js +145 -0
- package/build/connectkit/src/components/Common/OptionsList/index.js.map +1 -0
- package/build/connectkit/src/components/Common/OptionsList/styles.js +138 -0
- package/build/connectkit/src/components/Common/OptionsList/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/OrderHeader/index.js +192 -0
- package/build/connectkit/src/components/Common/OrderHeader/index.js.map +1 -0
- package/build/connectkit/src/components/Common/PaymentBreakdown/index.js +70 -0
- package/build/connectkit/src/components/Common/PaymentBreakdown/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Portal/index.js +30 -0
- package/build/connectkit/src/components/Common/Portal/index.js.map +1 -0
- package/build/connectkit/src/components/Common/PoweredByFooter/index.js +66 -0
- package/build/connectkit/src/components/Common/PoweredByFooter/index.js.map +1 -0
- package/build/connectkit/src/components/Common/ScrollArea/index.js +120 -0
- package/build/connectkit/src/components/Common/ScrollArea/index.js.map +1 -0
- package/build/connectkit/src/components/Common/ScrollArea/styles.js +169 -0
- package/build/connectkit/src/components/Common/ScrollArea/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/SelectAnotherMethodButton/index.js +96 -0
- package/build/connectkit/src/components/Common/SelectAnotherMethodButton/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Spinner/index.js +64 -0
- package/build/connectkit/src/components/Common/Spinner/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Spinner/styles.js +22 -0
- package/build/connectkit/src/components/Common/Spinner/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/SwitchButton/index.js +43 -0
- package/build/connectkit/src/components/Common/SwitchButton/index.js.map +1 -0
- package/build/connectkit/src/components/Common/ThemedButton/index.js +46 -0
- package/build/connectkit/src/components/Common/ThemedButton/index.js.map +1 -0
- package/build/connectkit/src/components/Common/ThemedButton/styles.js +152 -0
- package/build/connectkit/src/components/Common/ThemedButton/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/TokenChainLogo/index.js +62 -0
- package/build/connectkit/src/components/Common/TokenChainLogo/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Tooltip/index.js +129 -0
- package/build/connectkit/src/components/Common/Tooltip/index.js.map +1 -0
- package/build/connectkit/src/components/Common/Tooltip/styles.js +81 -0
- package/build/connectkit/src/components/Common/Tooltip/styles.js.map +1 -0
- package/build/connectkit/src/components/Common/WalletChainLogo/index.js +31 -0
- package/build/connectkit/src/components/Common/WalletChainLogo/index.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayButton/index.js +197 -0
- package/build/connectkit/src/components/DaimoPayButton/index.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayButton/styles.js +50 -0
- package/build/connectkit/src/components/DaimoPayButton/styles.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectUsing.js +68 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectUsing.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectWithInjector/index.js +335 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectWithInjector/index.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectWithInjector/styles.js +131 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectWithInjector/styles.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectWithQRCode.js +99 -0
- package/build/connectkit/src/components/DaimoPayModal/ConnectWithQRCode.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayModal/index.js +462 -0
- package/build/connectkit/src/components/DaimoPayModal/index.js.map +1 -0
- package/build/connectkit/src/components/DaimoPayThemeProvider/DaimoPayThemeProvider.js +25 -0
- package/build/connectkit/src/components/DaimoPayThemeProvider/DaimoPayThemeProvider.js.map +1 -0
- package/build/connectkit/src/components/Pages/About/graphics.js +853 -0
- package/build/connectkit/src/components/Pages/About/graphics.js.map +1 -0
- package/build/connectkit/src/components/Pages/About/index.js +222 -0
- package/build/connectkit/src/components/Pages/About/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/About/styles.js +140 -0
- package/build/connectkit/src/components/Pages/About/styles.js.map +1 -0
- package/build/connectkit/src/components/Pages/Confirmation/index.js +128 -0
- package/build/connectkit/src/components/Pages/Confirmation/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/Connectors/index.js +28 -0
- package/build/connectkit/src/components/Pages/Connectors/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/DownloadApp/index.js +35 -0
- package/build/connectkit/src/components/Pages/DownloadApp/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/Error/index.js +57 -0
- package/build/connectkit/src/components/Pages/Error/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/MobileConnectors/index.js +65 -0
- package/build/connectkit/src/components/Pages/MobileConnectors/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/MobileConnectors/styles.js +64 -0
- package/build/connectkit/src/components/Pages/MobileConnectors/styles.js.map +1 -0
- package/build/connectkit/src/components/Pages/Onboarding/index.js +34 -0
- package/build/connectkit/src/components/Pages/Onboarding/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/Onboarding/styles.js +229 -0
- package/build/connectkit/src/components/Pages/Onboarding/styles.js.map +1 -0
- package/build/connectkit/src/components/Pages/PayWithToken/index.js +157 -0
- package/build/connectkit/src/components/Pages/PayWithToken/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectAmount/index.js +24 -0
- package/build/connectkit/src/components/Pages/SelectAmount/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectDepositAddressAmount/index.js +79 -0
- package/build/connectkit/src/components/Pages/SelectDepositAddressAmount/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectDepositAddressChain/index.js +72 -0
- package/build/connectkit/src/components/Pages/SelectDepositAddressChain/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectExchange/index.js +41 -0
- package/build/connectkit/src/components/Pages/SelectExchange/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectExternalAmount/index.js +80 -0
- package/build/connectkit/src/components/Pages/SelectExternalAmount/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectMethod/index.js +230 -0
- package/build/connectkit/src/components/Pages/SelectMethod/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectToken/index.js +97 -0
- package/build/connectkit/src/components/Pages/SelectToken/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectWalletAmount/index.js +66 -0
- package/build/connectkit/src/components/Pages/SelectWalletAmount/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectWalletChain/index.js +55 -0
- package/build/connectkit/src/components/Pages/SelectWalletChain/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SelectZKP/index.js +41 -0
- package/build/connectkit/src/components/Pages/SelectZKP/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/Solana/ConnectorSolana/index.js +94 -0
- package/build/connectkit/src/components/Pages/Solana/ConnectorSolana/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/Solana/PayWithSolanaToken/index.js +92 -0
- package/build/connectkit/src/components/Pages/Solana/PayWithSolanaToken/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/Solana/SelectSolanaAmount/index.js +24 -0
- package/build/connectkit/src/components/Pages/Solana/SelectSolanaAmount/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/SwitchNetworks/index.js +45 -0
- package/build/connectkit/src/components/Pages/SwitchNetworks/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/WaitingDepositAddress/index.js +503 -0
- package/build/connectkit/src/components/Pages/WaitingDepositAddress/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/WaitingExternal/index.js +89 -0
- package/build/connectkit/src/components/Pages/WaitingExternal/index.js.map +1 -0
- package/build/connectkit/src/components/Pages/WaitingWallet/index.js +49 -0
- package/build/connectkit/src/components/Pages/WaitingWallet/index.js.map +1 -0
- package/build/connectkit/src/components/Spinners/CircleSpinner/index.js +104 -0
- package/build/connectkit/src/components/Spinners/CircleSpinner/index.js.map +1 -0
- package/build/connectkit/src/components/Spinners/CircleSpinner/styles.js +117 -0
- package/build/connectkit/src/components/Spinners/CircleSpinner/styles.js.map +1 -0
- package/build/connectkit/src/components/Spinners/ExternalPaymentSpinner/index.js +29 -0
- package/build/connectkit/src/components/Spinners/ExternalPaymentSpinner/index.js.map +1 -0
- package/build/connectkit/src/components/Spinners/SquircleSpinner/index.js +68 -0
- package/build/connectkit/src/components/Spinners/SquircleSpinner/index.js.map +1 -0
- package/build/connectkit/src/components/Spinners/SquircleSpinner/styles.js +66 -0
- package/build/connectkit/src/components/Spinners/SquircleSpinner/styles.js.map +1 -0
- package/build/connectkit/src/components/Spinners/TokenLogoSpinner/index.js +24 -0
- package/build/connectkit/src/components/Spinners/TokenLogoSpinner/index.js.map +1 -0
- package/build/connectkit/src/components/Spinners/TokenLogoSpinner/styles.js +40 -0
- package/build/connectkit/src/components/Spinners/TokenLogoSpinner/styles.js.map +1 -0
- package/build/connectkit/src/components/Spinners/WalletPaymentSpinner/index.js +37 -0
- package/build/connectkit/src/components/Spinners/WalletPaymentSpinner/index.js.map +1 -0
- package/build/connectkit/src/components/Spinners/styles.js +32 -0
- package/build/connectkit/src/components/Spinners/styles.js.map +1 -0
- package/build/connectkit/src/constants/defaultTheme.js +6 -0
- package/build/connectkit/src/constants/defaultTheme.js.map +1 -0
- package/build/connectkit/src/constants/routes.js +32 -0
- package/build/connectkit/src/constants/routes.js.map +1 -0
- package/build/connectkit/src/defaultConfig.js +63 -0
- package/build/connectkit/src/defaultConfig.js.map +1 -0
- package/build/connectkit/src/defaultConnectors.js +37 -0
- package/build/connectkit/src/defaultConnectors.js.map +1 -0
- package/build/connectkit/src/hooks/useChainIsSupported.js +10 -0
- package/build/connectkit/src/hooks/useChainIsSupported.js.map +1 -0
- package/build/connectkit/src/hooks/useChains.js +10 -0
- package/build/connectkit/src/hooks/useChains.js.map +1 -0
- package/build/connectkit/src/hooks/useConnect.js +61 -0
- package/build/connectkit/src/hooks/useConnect.js.map +1 -0
- package/build/connectkit/src/hooks/useConnectCallback.js +21 -0
- package/build/connectkit/src/hooks/useConnectCallback.js.map +1 -0
- package/build/connectkit/src/hooks/useConnectors.js +9 -0
- package/build/connectkit/src/hooks/useConnectors.js.map +1 -0
- package/build/connectkit/src/hooks/useDaimoPay.js +107 -0
- package/build/connectkit/src/hooks/useDaimoPay.js.map +1 -0
- package/build/connectkit/src/hooks/useDaimoPayStatus.js +12 -0
- package/build/connectkit/src/hooks/useDaimoPayStatus.js.map +1 -0
- package/build/connectkit/src/hooks/useDaimoPayUI.js +15 -0
- package/build/connectkit/src/hooks/useDaimoPayUI.js.map +1 -0
- package/build/connectkit/src/hooks/useDepositAddressOptions.js +35 -0
- package/build/connectkit/src/hooks/useDepositAddressOptions.js.map +1 -0
- package/build/connectkit/src/hooks/useEnsFallbackConfig.js +16 -0
- package/build/connectkit/src/hooks/useEnsFallbackConfig.js.map +1 -0
- package/build/connectkit/src/hooks/useExternalPaymentOptions.js +64 -0
- package/build/connectkit/src/hooks/useExternalPaymentOptions.js.map +1 -0
- package/build/connectkit/src/hooks/useFitText.js +133 -0
- package/build/connectkit/src/hooks/useFitText.js.map +1 -0
- package/build/connectkit/src/hooks/useFocusTrap.js +53 -0
- package/build/connectkit/src/hooks/useFocusTrap.js.map +1 -0
- package/build/connectkit/src/hooks/useIsMobile.js +11 -0
- package/build/connectkit/src/hooks/useIsMobile.js.map +1 -0
- package/build/connectkit/src/hooks/useIsMounted.js +10 -0
- package/build/connectkit/src/hooks/useIsMounted.js.map +1 -0
- package/build/connectkit/src/hooks/useLastConnector.js +24 -0
- package/build/connectkit/src/hooks/useLastConnector.js.map +1 -0
- package/build/connectkit/src/hooks/useLocales.js +60 -0
- package/build/connectkit/src/hooks/useLocales.js.map +1 -0
- package/build/connectkit/src/hooks/useLockBodyScroll.js +47 -0
- package/build/connectkit/src/hooks/useLockBodyScroll.js.map +1 -0
- package/build/connectkit/src/hooks/useOrderUsdLimits.js +24 -0
- package/build/connectkit/src/hooks/useOrderUsdLimits.js.map +1 -0
- package/build/connectkit/src/hooks/usePayContext.js +11 -0
- package/build/connectkit/src/hooks/usePayContext.js.map +1 -0
- package/build/connectkit/src/hooks/usePaymentState.js +376 -0
- package/build/connectkit/src/hooks/usePaymentState.js.map +1 -0
- package/build/connectkit/src/hooks/usePrevious.js +13 -0
- package/build/connectkit/src/hooks/usePrevious.js.map +1 -0
- package/build/connectkit/src/hooks/useSolanaPaymentOptions.js +40 -0
- package/build/connectkit/src/hooks/useSolanaPaymentOptions.js.map +1 -0
- package/build/connectkit/src/hooks/useTokenOptions.js +152 -0
- package/build/connectkit/src/hooks/useTokenOptions.js.map +1 -0
- package/build/connectkit/src/hooks/useUntronAvailability.js +32 -0
- package/build/connectkit/src/hooks/useUntronAvailability.js.map +1 -0
- package/build/connectkit/src/hooks/useWalletPaymentOptions.js +97 -0
- package/build/connectkit/src/hooks/useWalletPaymentOptions.js.map +1 -0
- package/build/connectkit/src/hooks/useWindowSize.js +23 -0
- package/build/connectkit/src/hooks/useWindowSize.js.map +1 -0
- package/build/connectkit/src/index.js +14 -0
- package/build/connectkit/src/index.js.map +1 -0
- package/build/connectkit/src/localizations/index.js +48 -0
- package/build/connectkit/src/localizations/index.js.map +1 -0
- package/build/connectkit/src/localizations/locales/ar-AE.js +95 -0
- package/build/connectkit/src/localizations/locales/ar-AE.js.map +1 -0
- package/build/connectkit/src/localizations/locales/ca-AD.js +93 -0
- package/build/connectkit/src/localizations/locales/ca-AD.js.map +1 -0
- package/build/connectkit/src/localizations/locales/ee-EE.js +101 -0
- package/build/connectkit/src/localizations/locales/ee-EE.js.map +1 -0
- package/build/connectkit/src/localizations/locales/en-US.js +139 -0
- package/build/connectkit/src/localizations/locales/en-US.js.map +1 -0
- package/build/connectkit/src/localizations/locales/es-ES.js +131 -0
- package/build/connectkit/src/localizations/locales/es-ES.js.map +1 -0
- package/build/connectkit/src/localizations/locales/fa-IR.js +93 -0
- package/build/connectkit/src/localizations/locales/fa-IR.js.map +1 -0
- package/build/connectkit/src/localizations/locales/fr-FR.js +93 -0
- package/build/connectkit/src/localizations/locales/fr-FR.js.map +1 -0
- package/build/connectkit/src/localizations/locales/ja-JP.js +93 -0
- package/build/connectkit/src/localizations/locales/ja-JP.js.map +1 -0
- package/build/connectkit/src/localizations/locales/pt-BR.js +101 -0
- package/build/connectkit/src/localizations/locales/pt-BR.js.map +1 -0
- package/build/connectkit/src/localizations/locales/ru-RU.js +97 -0
- package/build/connectkit/src/localizations/locales/ru-RU.js.map +1 -0
- package/build/connectkit/src/localizations/locales/tr-TR.js +101 -0
- package/build/connectkit/src/localizations/locales/tr-TR.js.map +1 -0
- package/build/connectkit/src/localizations/locales/vi-VN.js +101 -0
- package/build/connectkit/src/localizations/locales/vi-VN.js.map +1 -0
- package/build/connectkit/src/localizations/locales/zh-CN.js +93 -0
- package/build/connectkit/src/localizations/locales/zh-CN.js.map +1 -0
- package/build/connectkit/src/payment/paymentEffects.js +269 -0
- package/build/connectkit/src/payment/paymentEffects.js.map +1 -0
- package/build/connectkit/src/payment/paymentFsm.js +194 -0
- package/build/connectkit/src/payment/paymentFsm.js.map +1 -0
- package/build/connectkit/src/payment/paymentStore.js +18 -0
- package/build/connectkit/src/payment/paymentStore.js.map +1 -0
- package/build/connectkit/src/payment/paymentUtils.js +10 -0
- package/build/connectkit/src/payment/paymentUtils.js.map +1 -0
- package/build/connectkit/src/provider/DaimoPayProvider.js +293 -0
- package/build/connectkit/src/provider/DaimoPayProvider.js.map +1 -0
- package/build/connectkit/src/provider/PayContext.js +6 -0
- package/build/connectkit/src/provider/PayContext.js.map +1 -0
- package/build/connectkit/src/provider/PaymentProvider.js +29 -0
- package/build/connectkit/src/provider/PaymentProvider.js.map +1 -0
- package/build/connectkit/src/provider/SolanaContextProvider.js +14 -0
- package/build/connectkit/src/provider/SolanaContextProvider.js.map +1 -0
- package/build/connectkit/src/provider/Web3ContextProvider.js +36 -0
- package/build/connectkit/src/provider/Web3ContextProvider.js.map +1 -0
- package/build/connectkit/src/stateStore.js +36 -0
- package/build/connectkit/src/stateStore.js.map +1 -0
- package/build/connectkit/src/styles/defaultTheme.js +80 -0
- package/build/connectkit/src/styles/defaultTheme.js.map +1 -0
- package/build/connectkit/src/styles/index.js +313 -0
- package/build/connectkit/src/styles/index.js.map +1 -0
- package/build/connectkit/src/styles/styled/index.js +6 -0
- package/build/connectkit/src/styles/styled/index.js.map +1 -0
- package/build/connectkit/src/styles/themes/base.js +141 -0
- package/build/connectkit/src/styles/themes/base.js.map +1 -0
- package/build/connectkit/src/styles/themes/index.js +13 -0
- package/build/connectkit/src/styles/themes/index.js.map +1 -0
- package/build/connectkit/src/styles/themes/midnight.js +76 -0
- package/build/connectkit/src/styles/themes/midnight.js.map +1 -0
- package/build/connectkit/src/styles/themes/minimal.js +96 -0
- package/build/connectkit/src/styles/themes/minimal.js.map +1 -0
- package/build/connectkit/src/styles/themes/nouns.js +81 -0
- package/build/connectkit/src/styles/themes/nouns.js.map +1 -0
- package/build/connectkit/src/styles/themes/retro.js +106 -0
- package/build/connectkit/src/styles/themes/retro.js.map +1 -0
- package/build/connectkit/src/styles/themes/rounded.js +106 -0
- package/build/connectkit/src/styles/themes/rounded.js.map +1 -0
- package/build/connectkit/src/styles/themes/soft.js +71 -0
- package/build/connectkit/src/styles/themes/soft.js.map +1 -0
- package/build/connectkit/src/styles/themes/web95.js +132 -0
- package/build/connectkit/src/styles/themes/web95.js.map +1 -0
- package/build/connectkit/src/utils/exports.js +6 -0
- package/build/connectkit/src/utils/exports.js.map +1 -0
- package/build/connectkit/src/utils/format.js +45 -0
- package/build/connectkit/src/utils/format.js.map +1 -0
- package/build/connectkit/src/utils/index.js +42 -0
- package/build/connectkit/src/utils/index.js.map +1 -0
- package/build/connectkit/src/utils/p3.js +15 -0
- package/build/connectkit/src/utils/p3.js.map +1 -0
- package/build/connectkit/src/utils/platform.js +11 -0
- package/build/connectkit/src/utils/platform.js.map +1 -0
- package/build/connectkit/src/utils/polling.js +35 -0
- package/build/connectkit/src/utils/polling.js.map +1 -0
- package/build/connectkit/src/utils/supportUrl.js +16 -0
- package/build/connectkit/src/utils/supportUrl.js.map +1 -0
- package/build/connectkit/src/utils/trpc.js +19 -0
- package/build/connectkit/src/utils/trpc.js.map +1 -0
- package/build/connectkit/src/utils/validateInput.js +16 -0
- package/build/connectkit/src/utils/validateInput.js.map +1 -0
- package/build/connectkit/src/wallets/index.js +21 -0
- package/build/connectkit/src/wallets/index.js.map +1 -0
- package/build/connectkit/src/wallets/useWallets.js +207 -0
- package/build/connectkit/src/wallets/useWallets.js.map +1 -0
- package/build/connectkit/src/wallets/walletConfigs.js +277 -0
- package/build/connectkit/src/wallets/walletConfigs.js.map +1 -0
- package/build/connectkit/src/world-mini-app/WorldPayButton.js +148 -0
- package/build/connectkit/src/world-mini-app/WorldPayButton.js.map +1 -0
- package/build/connectkit/src/world-mini-app/promptWorldPayment.js +59 -0
- package/build/connectkit/src/world-mini-app/promptWorldPayment.js.map +1 -0
- package/build/connectkit/src/world.js +2 -0
- package/build/connectkit/src/world.js.map +1 -0
- package/build/package.json.js +2 -2
- package/build/pay-common/src/chain.js +9 -0
- package/build/pay-common/src/chain.js.map +1 -0
- package/build/src/assets/coins.js +43 -0
- package/build/src/assets/coins.js.map +1 -0
- package/build/src/components/Common/CopyToClipboard/index.js +33 -0
- package/build/src/components/Common/CopyToClipboard/index.js.map +1 -0
- package/build/src/components/DaimoPayModal/ConnectWithQRCode.js +1 -1
- package/build/src/components/DaimoPayModal/ConnectWithQRCode.js.map +1 -1
- package/build/src/components/DaimoPayModal/index.js +23 -3
- package/build/src/components/DaimoPayModal/index.js.map +1 -1
- package/build/src/components/Pages/DownloadApp/index.js +35 -0
- package/build/src/components/Pages/DownloadApp/index.js.map +1 -0
- package/build/src/components/Pages/SelectMethod/index.js +5 -3
- package/build/src/components/Pages/SelectMethod/index.js.map +1 -1
- package/build/src/components/Pages/SelectToken/index.js +3 -1
- package/build/src/components/Pages/SelectToken/index.js.map +1 -1
- package/build/src/localizations/locales/en-US.js +1 -1
- package/build/src/localizations/locales/en-US.js.map +1 -1
- package/build/src/localizations/locales/es-ES.js +1 -1
- package/build/src/localizations/locales/es-ES.js.map +1 -1
- package/build/src/wallets/useWallets.js.map +1 -1
- package/build/types-20835014.d.ts +68 -0
- package/package.json +2 -2
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { isHydrated, getChainName, DepositAddressPaymentOptions, ethereumUSDC, polygonUSDC, baseUSDC, arbitrumUSDC, optimismUSDC, getAddressContraction } from '@daimo/pay-common';
|
|
3
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
4
|
+
import { keyframes } from 'styled-components';
|
|
5
|
+
import { AlertIcon, WarningIcon } from '../../../assets/icons.js';
|
|
6
|
+
import { useDaimoPay } from '../../../hooks/useDaimoPay.js';
|
|
7
|
+
import useIsMobile from '../../../hooks/useIsMobile.js';
|
|
8
|
+
import useLocales from '../../../hooks/useLocales.js';
|
|
9
|
+
import { usePayContext } from '../../../hooks/usePayContext.js';
|
|
10
|
+
import styled from '../../../styles/styled/index.js';
|
|
11
|
+
import Button from '../../Common/Button/index.js';
|
|
12
|
+
import CircleTimer from '../../Common/CircleTimer.js';
|
|
13
|
+
import CopyToClipboardIcon from '../../Common/CopyToClipboard/CopyToClipboardIcon.js';
|
|
14
|
+
import CustomQRCode from '../../Common/CustomQRCode/index.js';
|
|
15
|
+
import { ModalBody, PageContent, ModalContent, ModalH1 } from '../../Common/Modal/styles.js';
|
|
16
|
+
import SelectAnotherMethodButton from '../../Common/SelectAnotherMethodButton/index.js';
|
|
17
|
+
import TokenChainLogo from '../../Common/TokenChainLogo/index.js';
|
|
18
|
+
|
|
19
|
+
const CenterContainer = styled.div`
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
align-items: center;
|
|
23
|
+
padding: 16px;
|
|
24
|
+
max-width: 100%;
|
|
25
|
+
`;
|
|
26
|
+
function WaitingDepositAddress() {
|
|
27
|
+
const context = usePayContext();
|
|
28
|
+
const { triggerResize, paymentState } = context;
|
|
29
|
+
const { payWithDepositAddress, selectedDepositAddressOption } = paymentState;
|
|
30
|
+
const { order } = useDaimoPay();
|
|
31
|
+
const tronUnderpay = order != null && isHydrated(order) && order.sourceTokenAmount != null && order.sourceTokenAmount.token.chainId === 10 && order.sourceTokenAmount.token.symbol.toUpperCase() === "USDT0" && Number(order.sourceTokenAmount.usd) < order.usdValue;
|
|
32
|
+
const [depAddr, setDepAddr] = useState();
|
|
33
|
+
const [failed, setFailed] = useState(false);
|
|
34
|
+
const generateDepositAddress = () => {
|
|
35
|
+
if (selectedDepositAddressOption == null) {
|
|
36
|
+
if (order == null || !isHydrated(order)) return;
|
|
37
|
+
if (order.sourceTokenAmount == null) return;
|
|
38
|
+
const taPaid = order.sourceTokenAmount;
|
|
39
|
+
const usdPaid = taPaid.usd;
|
|
40
|
+
const usdToPay = Math.max(order.usdValue - usdPaid, 0.01);
|
|
41
|
+
const dispDecimals = taPaid.token.displayDecimals;
|
|
42
|
+
const unitsToPay = (usdToPay / taPaid.token.usd).toFixed(dispDecimals);
|
|
43
|
+
const unitsPaid = (Number(taPaid.amount) / 10 ** taPaid.token.decimals).toFixed(dispDecimals);
|
|
44
|
+
let expirationS = (order.createdAt ?? 0) + 59.5 * 60;
|
|
45
|
+
if (order.expirationTs != null && Number(order.expirationTs) < expirationS) {
|
|
46
|
+
expirationS = Number(order.expirationTs);
|
|
47
|
+
}
|
|
48
|
+
setDepAddr({
|
|
49
|
+
address: order.intentAddr,
|
|
50
|
+
amount: unitsToPay,
|
|
51
|
+
underpayment: { unitsPaid, coin: taPaid.token.symbol },
|
|
52
|
+
coins: `${taPaid.token.symbol} on ${getChainName(taPaid.token.chainId)}`,
|
|
53
|
+
expirationS,
|
|
54
|
+
uri: order.intentAddr,
|
|
55
|
+
displayToken: taPaid.token,
|
|
56
|
+
logoURI: ""
|
|
57
|
+
// Not needed for underpaid orders
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
const displayToken = getDisplayToken(selectedDepositAddressOption);
|
|
61
|
+
const logoURI = selectedDepositAddressOption.logoURI;
|
|
62
|
+
setDepAddr({
|
|
63
|
+
displayToken,
|
|
64
|
+
logoURI
|
|
65
|
+
});
|
|
66
|
+
payWithDepositAddress(selectedDepositAddressOption.id).then((details) => {
|
|
67
|
+
if (details) {
|
|
68
|
+
setDepAddr({
|
|
69
|
+
address: details.address,
|
|
70
|
+
amount: details.amount,
|
|
71
|
+
coins: details.suffix,
|
|
72
|
+
expirationS: details.expirationS,
|
|
73
|
+
uri: details.uri,
|
|
74
|
+
displayToken,
|
|
75
|
+
logoURI
|
|
76
|
+
});
|
|
77
|
+
} else {
|
|
78
|
+
setFailed(true);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
useEffect(generateDepositAddress, [selectedDepositAddressOption]);
|
|
84
|
+
useEffect(triggerResize, [depAddr, failed]);
|
|
85
|
+
return /* @__PURE__ */ jsx(PageContent, { children: tronUnderpay ? /* @__PURE__ */ jsx(TronUnderpayContent, { orderId: order?.id?.toString() }) : failed ? selectedDepositAddressOption && /* @__PURE__ */ jsx(DepositFailed, { name: selectedDepositAddressOption.id }) : depAddr && /* @__PURE__ */ jsx(
|
|
86
|
+
DepositAddressInfo,
|
|
87
|
+
{
|
|
88
|
+
depAddr,
|
|
89
|
+
refresh: generateDepositAddress,
|
|
90
|
+
triggerResize
|
|
91
|
+
}
|
|
92
|
+
) });
|
|
93
|
+
}
|
|
94
|
+
function TronUnderpayContent({ orderId }) {
|
|
95
|
+
const locales = useLocales();
|
|
96
|
+
return /* @__PURE__ */ jsx(
|
|
97
|
+
ModalContent,
|
|
98
|
+
{
|
|
99
|
+
style: {
|
|
100
|
+
display: "flex",
|
|
101
|
+
justifyContent: "center",
|
|
102
|
+
alignItems: "center",
|
|
103
|
+
paddingBottom: 0,
|
|
104
|
+
position: "relative"
|
|
105
|
+
},
|
|
106
|
+
children: /* @__PURE__ */ jsxs(CenterContainer, { children: [
|
|
107
|
+
/* @__PURE__ */ jsx(FailIcon, {}),
|
|
108
|
+
/* @__PURE__ */ jsx(ModalH1, { style: { textAlign: "center", marginTop: 16 }, children: "USDT Tron Payment Was Too Low" }),
|
|
109
|
+
/* @__PURE__ */ jsx("div", { style: { height: 16 } }),
|
|
110
|
+
/* @__PURE__ */ jsxs(ModalBody, { style: { textAlign: "center" }, children: [
|
|
111
|
+
"Your funds are safe.",
|
|
112
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
113
|
+
"Email support@daimo.com for a refund."
|
|
114
|
+
] }),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
Button,
|
|
117
|
+
{
|
|
118
|
+
onClick: () => window.open(
|
|
119
|
+
`mailto:support@daimo.com?subject=Underpaid%20USDT%20Tron%20payment%20for%20order%20${orderId}`,
|
|
120
|
+
"_blank"
|
|
121
|
+
),
|
|
122
|
+
style: { marginTop: 16, width: 200 },
|
|
123
|
+
children: locales.contactSupport
|
|
124
|
+
}
|
|
125
|
+
)
|
|
126
|
+
] })
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
function DepositAddressInfo({
|
|
131
|
+
depAddr,
|
|
132
|
+
refresh,
|
|
133
|
+
triggerResize
|
|
134
|
+
}) {
|
|
135
|
+
const { isMobile } = useIsMobile();
|
|
136
|
+
const locales = useLocales();
|
|
137
|
+
const [remainingS, totalS] = useCountdown(depAddr?.expirationS);
|
|
138
|
+
const isExpired = depAddr?.expirationS != null && remainingS === 0;
|
|
139
|
+
const [showQR, setShowQR] = useState(!isMobile);
|
|
140
|
+
useEffect(triggerResize, [isExpired, showQR]);
|
|
141
|
+
const logoOffset = isMobile ? 4 : 0;
|
|
142
|
+
const logoElement = depAddr.displayToken ? /* @__PURE__ */ jsx(
|
|
143
|
+
TokenChainLogo,
|
|
144
|
+
{
|
|
145
|
+
token: depAddr.displayToken,
|
|
146
|
+
size: 64,
|
|
147
|
+
offset: logoOffset
|
|
148
|
+
}
|
|
149
|
+
) : /* @__PURE__ */ jsx("img", { src: depAddr.logoURI, width: "64px", height: "64px" });
|
|
150
|
+
return /* @__PURE__ */ jsxs(ModalContent, { children: [
|
|
151
|
+
isExpired ? /* @__PURE__ */ jsx(LogoRow, { children: /* @__PURE__ */ jsx(Button, { onClick: refresh, style: { width: 128 }, children: locales.refresh }) }) : showQR ? /* @__PURE__ */ jsx(QRWrap, { children: /* @__PURE__ */ jsx(
|
|
152
|
+
CustomQRCode,
|
|
153
|
+
{
|
|
154
|
+
value: depAddr?.uri,
|
|
155
|
+
contentPadding: 24,
|
|
156
|
+
size: 200,
|
|
157
|
+
image: logoElement
|
|
158
|
+
}
|
|
159
|
+
) }) : /* @__PURE__ */ jsx(LogoRow, { children: /* @__PURE__ */ jsx(LogoWrap, { children: logoElement }) }),
|
|
160
|
+
/* @__PURE__ */ jsx("div", { style: { height: 8 } }),
|
|
161
|
+
isMobile && /* @__PURE__ */ jsx(ShowHideQRRow, { showQR, setShowQR }),
|
|
162
|
+
/* @__PURE__ */ jsx(CopyableInfo, { depAddr, remainingS, totalS })
|
|
163
|
+
] });
|
|
164
|
+
}
|
|
165
|
+
function getDisplayToken(meta) {
|
|
166
|
+
switch (meta.id) {
|
|
167
|
+
case DepositAddressPaymentOptions.OP_MAINNET:
|
|
168
|
+
return optimismUSDC;
|
|
169
|
+
case DepositAddressPaymentOptions.ARBITRUM:
|
|
170
|
+
return arbitrumUSDC;
|
|
171
|
+
case DepositAddressPaymentOptions.BASE:
|
|
172
|
+
return baseUSDC;
|
|
173
|
+
case DepositAddressPaymentOptions.POLYGON:
|
|
174
|
+
return polygonUSDC;
|
|
175
|
+
case DepositAddressPaymentOptions.ETH_L1:
|
|
176
|
+
return ethereumUSDC;
|
|
177
|
+
default:
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function ShowHideQRRow({
|
|
182
|
+
showQR,
|
|
183
|
+
setShowQR
|
|
184
|
+
}) {
|
|
185
|
+
const toggleQR = () => setShowQR(!showQR);
|
|
186
|
+
const locales = useLocales();
|
|
187
|
+
return /* @__PURE__ */ jsx(ShowQRWrap, { children: /* @__PURE__ */ jsxs(CopyRow, { onClick: toggleQR, children: [
|
|
188
|
+
/* @__PURE__ */ jsx(SmallText, { children: showQR ? locales.hideQR : locales.showQR }),
|
|
189
|
+
/* @__PURE__ */ jsx("div", { style: { width: 8 } }),
|
|
190
|
+
/* @__PURE__ */ jsx(ShowQRIcon, { children: /* @__PURE__ */ jsxs(
|
|
191
|
+
"svg",
|
|
192
|
+
{
|
|
193
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
194
|
+
fill: "none",
|
|
195
|
+
viewBox: "0 0 24 24",
|
|
196
|
+
strokeWidth: 1.5,
|
|
197
|
+
stroke: "#666",
|
|
198
|
+
className: "size-6",
|
|
199
|
+
width: 20,
|
|
200
|
+
height: 20,
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ jsx(
|
|
203
|
+
"path",
|
|
204
|
+
{
|
|
205
|
+
strokeLinecap: "round",
|
|
206
|
+
strokeLinejoin: "round",
|
|
207
|
+
d: "M3.75 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 3.75 9.375v-4.5ZM3.75 14.625c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5a1.125 1.125 0 0 1-1.125-1.125v-4.5ZM13.5 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 13.5 9.375v-4.5Z"
|
|
208
|
+
}
|
|
209
|
+
),
|
|
210
|
+
/* @__PURE__ */ jsx(
|
|
211
|
+
"path",
|
|
212
|
+
{
|
|
213
|
+
strokeLinecap: "round",
|
|
214
|
+
strokeLinejoin: "round",
|
|
215
|
+
d: "M6.75 6.75h.75v.75h-.75v-.75ZM6.75 16.5h.75v.75h-.75v-.75ZM16.5 6.75h.75v.75h-.75v-.75ZM13.5 13.5h.75v.75h-.75v-.75ZM13.5 19.5h.75v.75h-.75v-.75ZM19.5 13.5h.75v.75h-.75v-.75ZM19.5 19.5h.75v.75h-.75v-.75ZM16.5 16.5h.75v.75h-.75v-.75Z"
|
|
216
|
+
}
|
|
217
|
+
)
|
|
218
|
+
]
|
|
219
|
+
}
|
|
220
|
+
) })
|
|
221
|
+
] }) });
|
|
222
|
+
}
|
|
223
|
+
const ShowQRWrap = styled.div`
|
|
224
|
+
display: flex;
|
|
225
|
+
justify-content: center;
|
|
226
|
+
color: var(--ck-primary-button-color);
|
|
227
|
+
`;
|
|
228
|
+
const ShowQRIcon = styled.div`
|
|
229
|
+
width: 20px;
|
|
230
|
+
`;
|
|
231
|
+
const LogoWrap = styled.div`
|
|
232
|
+
position: relative;
|
|
233
|
+
width: 64px;
|
|
234
|
+
height: 64px;
|
|
235
|
+
`;
|
|
236
|
+
const LogoRow = styled.div`
|
|
237
|
+
padding: 32px 0;
|
|
238
|
+
height: 128px;
|
|
239
|
+
display: flex;
|
|
240
|
+
align-items: center;
|
|
241
|
+
gap: 8px;
|
|
242
|
+
justify-content: center;
|
|
243
|
+
`;
|
|
244
|
+
const QRWrap = styled.div`
|
|
245
|
+
margin: 0 auto;
|
|
246
|
+
width: 280px;
|
|
247
|
+
`;
|
|
248
|
+
function CopyableInfo({
|
|
249
|
+
depAddr,
|
|
250
|
+
remainingS,
|
|
251
|
+
totalS
|
|
252
|
+
}) {
|
|
253
|
+
const underpayment = depAddr?.underpayment;
|
|
254
|
+
const isExpired = depAddr?.expirationS != null && remainingS === 0;
|
|
255
|
+
const locales = useLocales();
|
|
256
|
+
return /* @__PURE__ */ jsxs(CopyableInfoWrapper, { children: [
|
|
257
|
+
underpayment && /* @__PURE__ */ jsx(UnderpaymentInfo, { underpayment }),
|
|
258
|
+
/* @__PURE__ */ jsx(
|
|
259
|
+
CopyRowOrThrobber,
|
|
260
|
+
{
|
|
261
|
+
title: locales.sendExactly,
|
|
262
|
+
value: depAddr?.amount,
|
|
263
|
+
smallText: depAddr?.coins,
|
|
264
|
+
disabled: isExpired
|
|
265
|
+
}
|
|
266
|
+
),
|
|
267
|
+
/* @__PURE__ */ jsx(
|
|
268
|
+
CopyRowOrThrobber,
|
|
269
|
+
{
|
|
270
|
+
title: locales.receivingAddress,
|
|
271
|
+
value: depAddr?.address,
|
|
272
|
+
valueText: depAddr?.address && getAddressContraction(depAddr.address),
|
|
273
|
+
disabled: isExpired
|
|
274
|
+
}
|
|
275
|
+
),
|
|
276
|
+
/* @__PURE__ */ jsx(CountdownWrap, { children: /* @__PURE__ */ jsx(CountdownTimer, { remainingS, totalS }) })
|
|
277
|
+
] });
|
|
278
|
+
}
|
|
279
|
+
function UnderpaymentInfo({ underpayment }) {
|
|
280
|
+
return /* @__PURE__ */ jsxs(UnderpaymentWrapper, { children: [
|
|
281
|
+
/* @__PURE__ */ jsxs(UnderpaymentHeader, { children: [
|
|
282
|
+
/* @__PURE__ */ jsx(WarningIcon, {}),
|
|
283
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
284
|
+
"Received ",
|
|
285
|
+
underpayment.unitsPaid,
|
|
286
|
+
" ",
|
|
287
|
+
underpayment.coin
|
|
288
|
+
] })
|
|
289
|
+
] }),
|
|
290
|
+
/* @__PURE__ */ jsx(SmallText, { children: "Finish by sending the extra amount below." })
|
|
291
|
+
] });
|
|
292
|
+
}
|
|
293
|
+
const UnderpaymentWrapper = styled.div`
|
|
294
|
+
background: var(--ck-body-background-tertiary);
|
|
295
|
+
border-radius: 8px;
|
|
296
|
+
padding: 16px;
|
|
297
|
+
margin: 0 4px 16px 4px;
|
|
298
|
+
margin-bottom: 16px;
|
|
299
|
+
`;
|
|
300
|
+
const UnderpaymentHeader = styled.div`
|
|
301
|
+
font-weight: 500;
|
|
302
|
+
display: flex;
|
|
303
|
+
justify-content: center;
|
|
304
|
+
align-items: flex-end;
|
|
305
|
+
gap: 8px;
|
|
306
|
+
margin-bottom: 8px;
|
|
307
|
+
`;
|
|
308
|
+
const CopyableInfoWrapper = styled.div`
|
|
309
|
+
display: flex;
|
|
310
|
+
flex-direction: column;
|
|
311
|
+
justify-content: stretch;
|
|
312
|
+
gap: 0;
|
|
313
|
+
`;
|
|
314
|
+
const CountdownWrap = styled.div`
|
|
315
|
+
margin-top: 24px;
|
|
316
|
+
height: 16px;
|
|
317
|
+
`;
|
|
318
|
+
const FailIcon = styled(AlertIcon)`
|
|
319
|
+
color: var(--ck-body-color-alert);
|
|
320
|
+
width: 32px;
|
|
321
|
+
height: 32px;
|
|
322
|
+
margin-top: auto;
|
|
323
|
+
margin-bottom: 16px;
|
|
324
|
+
`;
|
|
325
|
+
function useCountdown(expirationS) {
|
|
326
|
+
const initMs = useMemo(() => Date.now(), [expirationS]);
|
|
327
|
+
const [ms, setMs] = useState(initMs);
|
|
328
|
+
useEffect(() => {
|
|
329
|
+
const interval = setInterval(() => setMs(Date.now()), 1e3);
|
|
330
|
+
return () => clearInterval(interval);
|
|
331
|
+
}, []);
|
|
332
|
+
if (expirationS == null) return [0, 0];
|
|
333
|
+
const remainingS = Math.max(0, expirationS - ms / 1e3 | 0);
|
|
334
|
+
const totalS = Math.max(0, expirationS - initMs / 1e3 | 0);
|
|
335
|
+
return [remainingS, totalS];
|
|
336
|
+
}
|
|
337
|
+
function CountdownTimer({
|
|
338
|
+
remainingS,
|
|
339
|
+
totalS
|
|
340
|
+
}) {
|
|
341
|
+
const locales = useLocales();
|
|
342
|
+
if (totalS == 0 || remainingS > 3600) {
|
|
343
|
+
return /* @__PURE__ */ jsx(SmallText, { children: locales.sendOnlyOnce });
|
|
344
|
+
}
|
|
345
|
+
const isExpired = remainingS === 0;
|
|
346
|
+
return /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(CountdownRow, { children: [
|
|
347
|
+
/* @__PURE__ */ jsx(
|
|
348
|
+
CircleTimer,
|
|
349
|
+
{
|
|
350
|
+
total: totalS,
|
|
351
|
+
currentTime: remainingS,
|
|
352
|
+
size: 18,
|
|
353
|
+
stroke: 3
|
|
354
|
+
}
|
|
355
|
+
),
|
|
356
|
+
/* @__PURE__ */ jsx("strong", { children: isExpired ? "Expired" : formatTime(remainingS) })
|
|
357
|
+
] }) });
|
|
358
|
+
}
|
|
359
|
+
const CountdownRow = styled.div`
|
|
360
|
+
display: flex;
|
|
361
|
+
align-items: center;
|
|
362
|
+
justify-content: center;
|
|
363
|
+
gap: 8px;
|
|
364
|
+
font-variant-numeric: tabular-nums;
|
|
365
|
+
`;
|
|
366
|
+
const formatTime = (sec) => {
|
|
367
|
+
const m = `${Math.floor(sec / 60)}`.padStart(2, "0");
|
|
368
|
+
const s = `${sec % 60}`.padStart(2, "0");
|
|
369
|
+
return `${m}:${s}`;
|
|
370
|
+
};
|
|
371
|
+
function DepositFailed({ name }) {
|
|
372
|
+
return /* @__PURE__ */ jsxs(ModalContent, { style: { marginLeft: 24, marginRight: 24 }, children: [
|
|
373
|
+
/* @__PURE__ */ jsxs(ModalH1, { children: [
|
|
374
|
+
name,
|
|
375
|
+
" unavailable"
|
|
376
|
+
] }),
|
|
377
|
+
/* @__PURE__ */ jsxs(ModalBody, { children: [
|
|
378
|
+
"We're unable to process ",
|
|
379
|
+
name,
|
|
380
|
+
" payments at this time. Please select another payment method."
|
|
381
|
+
] }),
|
|
382
|
+
/* @__PURE__ */ jsx(SelectAnotherMethodButton, {})
|
|
383
|
+
] });
|
|
384
|
+
}
|
|
385
|
+
const CopyRow = styled.button`
|
|
386
|
+
display: block;
|
|
387
|
+
height: 64px;
|
|
388
|
+
border-radius: 8px;
|
|
389
|
+
padding: 8px 16px;
|
|
390
|
+
|
|
391
|
+
cursor: pointer;
|
|
392
|
+
background-color: var(--ck-body-background);
|
|
393
|
+
background-color: var(--ck-body-background);
|
|
394
|
+
|
|
395
|
+
display: flex;
|
|
396
|
+
align-items: center;
|
|
397
|
+
justify-content: space-between;
|
|
398
|
+
|
|
399
|
+
transition: all 100ms ease;
|
|
400
|
+
|
|
401
|
+
&:hover {
|
|
402
|
+
opacity: 0.8;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
&:active {
|
|
406
|
+
transform: scale(0.98);
|
|
407
|
+
background-color: var(--ck-body-background-secondary);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
&:disabled {
|
|
411
|
+
cursor: default;
|
|
412
|
+
opacity: 0.5;
|
|
413
|
+
transform: scale(0.98);
|
|
414
|
+
background-color: var(--ck-body-background-secondary);
|
|
415
|
+
}
|
|
416
|
+
`;
|
|
417
|
+
const LabelRow = styled.div`
|
|
418
|
+
margin-bottom: 4px;
|
|
419
|
+
`;
|
|
420
|
+
const MainRow = styled.div`
|
|
421
|
+
display: flex;
|
|
422
|
+
align-items: center;
|
|
423
|
+
justify-content: space-between;
|
|
424
|
+
`;
|
|
425
|
+
const ValueContainer = styled.div`
|
|
426
|
+
display: flex;
|
|
427
|
+
align-items: center;
|
|
428
|
+
gap: 8px;
|
|
429
|
+
`;
|
|
430
|
+
const SmallText = styled.span`
|
|
431
|
+
font-size: 14px;
|
|
432
|
+
color: var(--ck-primary-button-color);
|
|
433
|
+
`;
|
|
434
|
+
const ValueText = styled.span`
|
|
435
|
+
font-size: 14px;
|
|
436
|
+
font-weight: 600;
|
|
437
|
+
color: var(--ck-primary-button-color);
|
|
438
|
+
`;
|
|
439
|
+
const LabelText = styled(ModalBody)`
|
|
440
|
+
margin: 0;
|
|
441
|
+
text-align: left;
|
|
442
|
+
`;
|
|
443
|
+
const pulse = keyframes`
|
|
444
|
+
0% {
|
|
445
|
+
opacity: 0.6;
|
|
446
|
+
}
|
|
447
|
+
50% {
|
|
448
|
+
opacity: 1;
|
|
449
|
+
}
|
|
450
|
+
100% {
|
|
451
|
+
opacity: 0.6;
|
|
452
|
+
}
|
|
453
|
+
`;
|
|
454
|
+
const Skeleton = styled.div`
|
|
455
|
+
width: 80px;
|
|
456
|
+
height: 16px;
|
|
457
|
+
border-radius: 8px;
|
|
458
|
+
background-color: rgba(0, 0, 0, 0.1);
|
|
459
|
+
animation: ${pulse} 1.5s ease-in-out infinite;
|
|
460
|
+
`;
|
|
461
|
+
function CopyRowOrThrobber({
|
|
462
|
+
title,
|
|
463
|
+
value,
|
|
464
|
+
valueText,
|
|
465
|
+
smallText,
|
|
466
|
+
disabled
|
|
467
|
+
}) {
|
|
468
|
+
const [copied, setCopied] = useState(false);
|
|
469
|
+
const handleCopy = () => {
|
|
470
|
+
if (disabled) return;
|
|
471
|
+
if (!value) return;
|
|
472
|
+
const str = value.trim();
|
|
473
|
+
if (navigator.clipboard) {
|
|
474
|
+
navigator.clipboard.writeText(str);
|
|
475
|
+
}
|
|
476
|
+
setCopied(true);
|
|
477
|
+
setTimeout(() => setCopied(false), 1e3);
|
|
478
|
+
};
|
|
479
|
+
if (!value) {
|
|
480
|
+
return /* @__PURE__ */ jsxs(CopyRow, { children: [
|
|
481
|
+
/* @__PURE__ */ jsx(LabelRow, { children: /* @__PURE__ */ jsx(LabelText, { children: title }) }),
|
|
482
|
+
/* @__PURE__ */ jsx(MainRow, { children: /* @__PURE__ */ jsx(Skeleton, {}) })
|
|
483
|
+
] });
|
|
484
|
+
}
|
|
485
|
+
const displayValue = valueText || value;
|
|
486
|
+
return /* @__PURE__ */ jsxs(CopyRow, { as: "button", onClick: handleCopy, disabled, children: [
|
|
487
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
488
|
+
/* @__PURE__ */ jsx(LabelRow, { children: /* @__PURE__ */ jsx(LabelText, { children: title }) }),
|
|
489
|
+
/* @__PURE__ */ jsx(MainRow, { children: /* @__PURE__ */ jsxs(ValueContainer, { children: [
|
|
490
|
+
/* @__PURE__ */ jsx(ValueText, { children: displayValue }),
|
|
491
|
+
smallText && /* @__PURE__ */ jsx(SmallText, { children: smallText })
|
|
492
|
+
] }) })
|
|
493
|
+
] }),
|
|
494
|
+
/* @__PURE__ */ jsx(CopyIconWrap, { children: /* @__PURE__ */ jsx(CopyToClipboardIcon, { copied, dark: true }) })
|
|
495
|
+
] });
|
|
496
|
+
}
|
|
497
|
+
const CopyIconWrap = styled.div`
|
|
498
|
+
--color: var(--ck-copytoclipboard-stroke);
|
|
499
|
+
--bg: var(--ck-body-background);
|
|
500
|
+
`;
|
|
501
|
+
|
|
502
|
+
export { WaitingDepositAddress as default };
|
|
503
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/components/Pages/WaitingDepositAddress/index.tsx"],"sourcesContent":["import {\n arbitrumUSDC,\n baseUSDC,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereumUSDC,\n getAddressContraction,\n getChainName,\n isHydrated,\n optimismUSDC,\n polygonUSDC,\n type Token,\n} from \"@daimo/pay-common\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { keyframes } from \"styled-components\";\nimport { AlertIcon, WarningIcon } from \"../../../assets/icons\";\nimport { useDaimoPay } from \"../../../hooks/useDaimoPay\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport styled from \"../../../styles/styled\";\nimport Button from \"../../Common/Button\";\nimport CircleTimer from \"../../Common/CircleTimer\";\nimport CopyToClipboardIcon from \"../../Common/CopyToClipboard/CopyToClipboardIcon\";\nimport CustomQRCode from \"../../Common/CustomQRCode\";\nimport {\n ModalBody,\n ModalContent,\n ModalH1,\n PageContent,\n} from \"../../Common/Modal/styles\";\nimport SelectAnotherMethodButton from \"../../Common/SelectAnotherMethodButton\";\nimport TokenChainLogo from \"../../Common/TokenChainLogo\";\n\n// Centered container for icon + text in Tron underpay screen\nconst CenterContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px;\n max-width: 100%;\n`;\n\ntype DepositAddr = {\n displayToken: Token | null;\n logoURI: string;\n expirationS?: number;\n uri?: string;\n coins?: string;\n amount?: string;\n address?: string;\n underpayment?: Underpayment;\n};\n\ntype Underpayment = {\n unitsPaid: string;\n coin: string;\n};\n\nexport default function WaitingDepositAddress() {\n const context = usePayContext();\n const { triggerResize, paymentState } = context;\n const { payWithDepositAddress, selectedDepositAddressOption } = paymentState;\n const { order } = useDaimoPay();\n\n // Detect Optimism USDT0 under-payment: the order has received some funds\n // but less than required.\n const tronUnderpay =\n order != null &&\n isHydrated(order) &&\n order.sourceTokenAmount != null &&\n order.sourceTokenAmount.token.chainId === 10 &&\n order.sourceTokenAmount.token.symbol.toUpperCase() === \"USDT0\" &&\n Number(order.sourceTokenAmount.usd) < order.usdValue;\n\n const [depAddr, setDepAddr] = useState<DepositAddr>();\n const [failed, setFailed] = useState(false);\n\n // If we selected a deposit address option, generate the address...\n const generateDepositAddress = () => {\n if (selectedDepositAddressOption == null) {\n if (order == null || !isHydrated(order)) return;\n if (order.sourceTokenAmount == null) return;\n\n // Pay underpaid order\n const taPaid = order.sourceTokenAmount;\n const usdPaid = taPaid.usd; // TODO: get usdPaid directly from the order\n const usdToPay = Math.max(order.usdValue - usdPaid, 0.01);\n const dispDecimals = taPaid.token.displayDecimals;\n const unitsToPay = (usdToPay / taPaid.token.usd).toFixed(dispDecimals);\n const unitsPaid = (\n Number(taPaid.amount) /\n 10 ** taPaid.token.decimals\n ).toFixed(dispDecimals);\n\n // (Removed duplicate tronUnderpay calculation now handled at top-level)\n // Hack to always show a <= 60 minute countdown\n let expirationS = (order.createdAt ?? 0) + 59.5 * 60;\n if (\n order.expirationTs != null &&\n Number(order.expirationTs) < expirationS\n ) {\n expirationS = Number(order.expirationTs);\n }\n\n setDepAddr({\n address: order.intentAddr,\n amount: unitsToPay,\n underpayment: { unitsPaid, coin: taPaid.token.symbol },\n coins: `${taPaid.token.symbol} on ${getChainName(taPaid.token.chainId)}`,\n expirationS: expirationS,\n uri: order.intentAddr,\n displayToken: taPaid.token,\n logoURI: \"\", // Not needed for underpaid orders\n });\n } else {\n const displayToken = getDisplayToken(selectedDepositAddressOption);\n const logoURI = selectedDepositAddressOption.logoURI;\n setDepAddr({\n displayToken,\n logoURI,\n });\n payWithDepositAddress(selectedDepositAddressOption.id).then((details) => {\n if (details) {\n setDepAddr({\n address: details.address,\n amount: details.amount,\n coins: details.suffix,\n expirationS: details.expirationS,\n uri: details.uri,\n displayToken,\n logoURI,\n });\n } else {\n setFailed(true);\n }\n });\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(generateDepositAddress, [selectedDepositAddressOption]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(triggerResize, [depAddr, failed]);\n\n return (\n <PageContent>\n {tronUnderpay ? (\n <TronUnderpayContent orderId={order?.id?.toString()} />\n ) : failed ? (\n selectedDepositAddressOption && (\n <DepositFailed name={selectedDepositAddressOption.id} />\n )\n ) : (\n depAddr && (\n <DepositAddressInfo\n depAddr={depAddr}\n refresh={generateDepositAddress}\n triggerResize={triggerResize}\n />\n )\n )}\n </PageContent>\n );\n}\n\nfunction TronUnderpayContent({ orderId }: { orderId?: string }) {\n const locales = useLocales();\n return (\n <ModalContent\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingBottom: 0,\n position: \"relative\",\n }}\n >\n <CenterContainer>\n <FailIcon />\n <ModalH1 style={{ textAlign: \"center\", marginTop: 16 }}>\n USDT Tron Payment Was Too Low\n </ModalH1>\n <div style={{ height: 16 }} />\n <ModalBody style={{ textAlign: \"center\" }}>\n Your funds are safe.\n <br />\n Email support@daimo.com for a refund.\n </ModalBody>\n <Button\n onClick={() =>\n window.open(\n `mailto:support@daimo.com?subject=Underpaid%20USDT%20Tron%20payment%20for%20order%20${orderId}`,\n \"_blank\",\n )\n }\n style={{ marginTop: 16, width: 200 }}\n >\n {locales.contactSupport}\n </Button>\n </CenterContainer>\n </ModalContent>\n );\n}\n\nfunction DepositAddressInfo({\n depAddr,\n refresh,\n triggerResize,\n}: {\n depAddr: DepositAddr;\n refresh: () => void;\n triggerResize: () => void;\n}) {\n const { isMobile } = useIsMobile();\n const locales = useLocales();\n const [remainingS, totalS] = useCountdown(depAddr?.expirationS);\n const isExpired = depAddr?.expirationS != null && remainingS === 0;\n const [showQR, setShowQR] = useState(!isMobile);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(triggerResize, [isExpired, showQR]);\n\n const logoOffset = isMobile ? 4 : 0;\n const logoElement = depAddr.displayToken ? (\n <TokenChainLogo\n token={depAddr.displayToken}\n size={64}\n offset={logoOffset}\n />\n ) : (\n <img src={depAddr.logoURI} width=\"64px\" height=\"64px\" />\n );\n\n return (\n <ModalContent>\n {isExpired ? (\n <LogoRow>\n <Button onClick={refresh} style={{ width: 128 }}>\n {locales.refresh}\n </Button>\n </LogoRow>\n ) : showQR ? (\n <QRWrap>\n <CustomQRCode\n value={depAddr?.uri}\n contentPadding={24}\n size={200}\n image={logoElement}\n />\n </QRWrap>\n ) : (\n <LogoRow>\n <LogoWrap>{logoElement}</LogoWrap>\n </LogoRow>\n )}\n <div style={{ height: 8 }} />\n {isMobile && <ShowHideQRRow showQR={showQR} setShowQR={setShowQR} />}\n <CopyableInfo depAddr={depAddr} remainingS={remainingS} totalS={totalS} />\n </ModalContent>\n );\n}\n\nfunction getDisplayToken(meta: DepositAddressPaymentOptionMetadata) {\n switch (meta.id) {\n case DepositAddressPaymentOptions.OP_MAINNET:\n return optimismUSDC;\n case DepositAddressPaymentOptions.ARBITRUM:\n return arbitrumUSDC;\n case DepositAddressPaymentOptions.BASE:\n return baseUSDC;\n case DepositAddressPaymentOptions.POLYGON:\n return polygonUSDC;\n case DepositAddressPaymentOptions.ETH_L1:\n return ethereumUSDC;\n default:\n return null;\n }\n}\n\nfunction ShowHideQRRow({\n showQR,\n setShowQR,\n}: {\n showQR: boolean;\n setShowQR: (showQR: boolean) => void;\n}) {\n const toggleQR = () => setShowQR(!showQR);\n const locales = useLocales();\n\n return (\n <ShowQRWrap>\n <CopyRow onClick={toggleQR}>\n <SmallText>{showQR ? locales.hideQR : locales.showQR}</SmallText>\n <div style={{ width: 8 }} />\n <ShowQRIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"#666\"\n className=\"size-6\"\n width={20}\n height={20}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 3.75 9.375v-4.5ZM3.75 14.625c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5a1.125 1.125 0 0 1-1.125-1.125v-4.5ZM13.5 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 13.5 9.375v-4.5Z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6.75 6.75h.75v.75h-.75v-.75ZM6.75 16.5h.75v.75h-.75v-.75ZM16.5 6.75h.75v.75h-.75v-.75ZM13.5 13.5h.75v.75h-.75v-.75ZM13.5 19.5h.75v.75h-.75v-.75ZM19.5 13.5h.75v.75h-.75v-.75ZM19.5 19.5h.75v.75h-.75v-.75ZM16.5 16.5h.75v.75h-.75v-.75Z\"\n />\n </svg>\n </ShowQRIcon>\n </CopyRow>\n </ShowQRWrap>\n );\n}\n\nconst ShowQRWrap = styled.div`\n display: flex;\n justify-content: center;\n color: var(--ck-primary-button-color);\n`;\n\nconst ShowQRIcon = styled.div`\n width: 20px;\n`;\n\nconst LogoWrap = styled.div`\n position: relative;\n width: 64px;\n height: 64px;\n`;\n\nconst LogoRow = styled.div`\n padding: 32px 0;\n height: 128px;\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n`;\n\nconst QRWrap = styled.div`\n margin: 0 auto;\n width: 280px;\n`;\n\nfunction CopyableInfo({\n depAddr,\n remainingS,\n totalS,\n}: {\n depAddr?: DepositAddr;\n remainingS: number;\n totalS: number;\n}) {\n const underpayment = depAddr?.underpayment;\n const isExpired = depAddr?.expirationS != null && remainingS === 0;\n const locales = useLocales();\n return (\n <CopyableInfoWrapper>\n {underpayment && <UnderpaymentInfo underpayment={underpayment} />}\n <CopyRowOrThrobber\n title={locales.sendExactly}\n value={depAddr?.amount}\n smallText={depAddr?.coins}\n disabled={isExpired}\n />\n <CopyRowOrThrobber\n title={locales.receivingAddress}\n value={depAddr?.address}\n valueText={depAddr?.address && getAddressContraction(depAddr.address)}\n disabled={isExpired}\n />\n <CountdownWrap>\n <CountdownTimer remainingS={remainingS} totalS={totalS} />\n </CountdownWrap>\n </CopyableInfoWrapper>\n );\n}\n\nfunction UnderpaymentInfo({ underpayment }: { underpayment: Underpayment }) {\n // Default message\n return (\n <UnderpaymentWrapper>\n <UnderpaymentHeader>\n <WarningIcon />\n <span>\n Received {underpayment.unitsPaid} {underpayment.coin}\n </span>\n </UnderpaymentHeader>\n <SmallText>Finish by sending the extra amount below.</SmallText>\n </UnderpaymentWrapper>\n );\n}\n\nconst UnderpaymentWrapper = styled.div`\n background: var(--ck-body-background-tertiary);\n border-radius: 8px;\n padding: 16px;\n margin: 0 4px 16px 4px;\n margin-bottom: 16px;\n`;\n\nconst UnderpaymentHeader = styled.div`\n font-weight: 500;\n display: flex;\n justify-content: center;\n align-items: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n`;\n\nconst CopyableInfoWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n gap: 0;\n`;\n\nconst CountdownWrap = styled.div`\n margin-top: 24px;\n height: 16px;\n`;\n\nconst FailIcon = styled(AlertIcon)`\n color: var(--ck-body-color-alert);\n width: 32px;\n height: 32px;\n margin-top: auto;\n margin-bottom: 16px;\n`;\n\nfunction useCountdown(expirationS?: number) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const initMs = useMemo(() => Date.now(), [expirationS]);\n const [ms, setMs] = useState(initMs);\n\n useEffect(() => {\n const interval = setInterval(() => setMs(Date.now()), 1000);\n return () => clearInterval(interval);\n }, []);\n\n if (expirationS == null) return [0, 0];\n\n const remainingS = Math.max(0, (expirationS - ms / 1000) | 0);\n const totalS = Math.max(0, (expirationS - initMs / 1000) | 0);\n return [remainingS, totalS];\n}\n\nfunction CountdownTimer({\n remainingS,\n totalS,\n}: {\n remainingS: number;\n totalS: number;\n}) {\n const locales = useLocales();\n if (totalS == 0 || remainingS > 3600) {\n return <SmallText>{locales.sendOnlyOnce}</SmallText>;\n }\n const isExpired = remainingS === 0;\n\n return (\n <ModalBody>\n <CountdownRow>\n <CircleTimer\n total={totalS}\n currentTime={remainingS}\n size={18}\n stroke={3}\n />\n <strong>{isExpired ? \"Expired\" : formatTime(remainingS)}</strong>\n </CountdownRow>\n </ModalBody>\n );\n}\n\nconst CountdownRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-variant-numeric: tabular-nums;\n`;\n\nconst formatTime = (sec: number) => {\n const m = `${Math.floor(sec / 60)}`.padStart(2, \"0\");\n const s = `${sec % 60}`.padStart(2, \"0\");\n return `${m}:${s}`;\n};\n\nfunction DepositFailed({ name }: { name: string }) {\n return (\n <ModalContent style={{ marginLeft: 24, marginRight: 24 }}>\n <ModalH1>{name} unavailable</ModalH1>\n <ModalBody>\n We're unable to process {name} payments at this time. Please select\n another payment method.\n </ModalBody>\n <SelectAnotherMethodButton />\n </ModalContent>\n );\n}\n\nconst CopyRow = styled.button`\n display: block;\n height: 64px;\n border-radius: 8px;\n padding: 8px 16px;\n\n cursor: pointer;\n background-color: var(--ck-body-background);\n background-color: var(--ck-body-background);\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n transition: all 100ms ease;\n\n &:hover {\n opacity: 0.8;\n }\n\n &:active {\n transform: scale(0.98);\n background-color: var(--ck-body-background-secondary);\n }\n\n &:disabled {\n cursor: default;\n opacity: 0.5;\n transform: scale(0.98);\n background-color: var(--ck-body-background-secondary);\n }\n`;\n\nconst LabelRow = styled.div`\n margin-bottom: 4px;\n`;\n\nconst MainRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst ValueContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nconst SmallText = styled.span`\n font-size: 14px;\n color: var(--ck-primary-button-color);\n`;\n\nconst ValueText = styled.span`\n font-size: 14px;\n font-weight: 600;\n color: var(--ck-primary-button-color);\n`;\n\nconst LabelText = styled(ModalBody)`\n margin: 0;\n text-align: left;\n`;\n\nconst pulse = keyframes`\n 0% {\n opacity: 0.6;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.6;\n }\n`;\n\nconst Skeleton = styled.div`\n width: 80px;\n height: 16px;\n border-radius: 8px;\n background-color: rgba(0, 0, 0, 0.1);\n animation: ${pulse} 1.5s ease-in-out infinite;\n`;\n\nfunction CopyRowOrThrobber({\n title,\n value,\n valueText,\n smallText,\n disabled,\n}: {\n title: string;\n value?: string;\n valueText?: string;\n smallText?: string;\n disabled?: boolean;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n if (disabled) return;\n if (!value) return;\n const str = value.trim();\n if (navigator.clipboard) {\n navigator.clipboard.writeText(str);\n }\n setCopied(true);\n setTimeout(() => setCopied(false), 1000);\n };\n\n if (!value) {\n return (\n <CopyRow>\n <LabelRow>\n <LabelText>{title}</LabelText>\n </LabelRow>\n <MainRow>\n <Skeleton />\n </MainRow>\n </CopyRow>\n );\n }\n\n const displayValue = valueText || value;\n\n return (\n <CopyRow as=\"button\" onClick={handleCopy} disabled={disabled}>\n <div>\n <LabelRow>\n <LabelText>{title}</LabelText>\n </LabelRow>\n <MainRow>\n <ValueContainer>\n <ValueText>{displayValue}</ValueText>\n {smallText && <SmallText>{smallText}</SmallText>}\n </ValueContainer>\n </MainRow>\n </div>\n <CopyIconWrap>\n <CopyToClipboardIcon copied={copied} dark />\n </CopyIconWrap>\n </CopyRow>\n );\n}\n\nconst CopyIconWrap = styled.div`\n --color: var(--ck-copytoclipboard-stroke);\n --bg: var(--ck-body-background);\n`;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { usePayContext } from '../../../hooks/usePayContext.js';
|
|
4
|
+
import { PageContent, ModalContent, ModalH1, ModalBody } from '../../Common/Modal/styles.js';
|
|
5
|
+
import { ExternalPaymentOptions, shouldShowExternalQRCodeOnDesktop } from '@daimo/pay-common';
|
|
6
|
+
import { ExternalLinkIcon } from '../../../assets/icons.js';
|
|
7
|
+
import useIsMobile from '../../../hooks/useIsMobile.js';
|
|
8
|
+
import useLocales from '../../../hooks/useLocales.js';
|
|
9
|
+
import Button from '../../Common/Button/index.js';
|
|
10
|
+
import ConnectWithQRCode from '../../DaimoPayModal/ConnectWithQRCode.js';
|
|
11
|
+
import ExternalPaymentSpinner from '../../Spinners/ExternalPaymentSpinner/index.js';
|
|
12
|
+
|
|
13
|
+
const WaitingExternal = () => {
|
|
14
|
+
const context = usePayContext();
|
|
15
|
+
const { triggerResize, paymentState } = context;
|
|
16
|
+
const { isMobile } = useIsMobile();
|
|
17
|
+
const locales = useLocales();
|
|
18
|
+
const { selectedExternalOption, payWithExternal, paymentWaitingMessage } = paymentState;
|
|
19
|
+
let isCoinbase = false;
|
|
20
|
+
if (selectedExternalOption) {
|
|
21
|
+
isCoinbase = selectedExternalOption.id === ExternalPaymentOptions.Coinbase;
|
|
22
|
+
}
|
|
23
|
+
const [externalURL, setExternalURL] = useState(null);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!selectedExternalOption) return;
|
|
26
|
+
payWithExternal(selectedExternalOption.id).then((url) => {
|
|
27
|
+
setExternalURL(url);
|
|
28
|
+
if (!shouldShowExternalQRCodeOnDesktop) {
|
|
29
|
+
openExternalWindow(url);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}, [selectedExternalOption]);
|
|
33
|
+
const openExternalWindow = (url) => {
|
|
34
|
+
if (!isCoinbase || isMobile) {
|
|
35
|
+
window.open(url, "_blank");
|
|
36
|
+
} else {
|
|
37
|
+
let width = 500;
|
|
38
|
+
let height = 700;
|
|
39
|
+
const left = Math.max(
|
|
40
|
+
0,
|
|
41
|
+
Math.floor((window.innerWidth - width) / 2) + window.screenX
|
|
42
|
+
);
|
|
43
|
+
const top = Math.max(
|
|
44
|
+
0,
|
|
45
|
+
Math.floor((window.innerHeight - height) / 2) + window.screenY
|
|
46
|
+
);
|
|
47
|
+
window.open(
|
|
48
|
+
url,
|
|
49
|
+
"popupWindow",
|
|
50
|
+
`width=${width},height=${height},left=${left},top=${top},scrollbars=yes`
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const waitingMessageLength = paymentWaitingMessage?.length;
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
triggerResize();
|
|
57
|
+
}, [waitingMessageLength, externalURL]);
|
|
58
|
+
if (!selectedExternalOption) {
|
|
59
|
+
return /* @__PURE__ */ jsx(PageContent, {});
|
|
60
|
+
}
|
|
61
|
+
return shouldShowExternalQRCodeOnDesktop(selectedExternalOption.id) && !isMobile ? /* @__PURE__ */ jsx(ConnectWithQRCode, { externalUrl: externalURL ?? "" }) : /* @__PURE__ */ jsxs(PageContent, { children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
ExternalPaymentSpinner,
|
|
64
|
+
{
|
|
65
|
+
logoURI: selectedExternalOption.logoURI,
|
|
66
|
+
logoShape: selectedExternalOption.logoShape
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsxs(ModalContent, { style: { marginLeft: 24, marginRight: 24 }, children: [
|
|
70
|
+
/* @__PURE__ */ jsx(ModalH1, { children: locales.waitingForPayment }),
|
|
71
|
+
paymentWaitingMessage && /* @__PURE__ */ jsx(ModalBody, { style: { marginTop: 12, marginBottom: 12 }, children: paymentWaitingMessage })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
Button,
|
|
75
|
+
{
|
|
76
|
+
icon: /* @__PURE__ */ jsx(ExternalLinkIcon, {}),
|
|
77
|
+
onClick: () => {
|
|
78
|
+
if (externalURL) {
|
|
79
|
+
openExternalWindow(externalURL);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
children: selectedExternalOption.cta
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
] });
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export { WaitingExternal as default };
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/components/Pages/WaitingExternal/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport {\n ModalBody,\n ModalContent,\n ModalH1,\n PageContent,\n} from \"../../Common/Modal/styles\";\n\nimport {\n ExternalPaymentOptions,\n shouldShowExternalQRCodeOnDesktop,\n} from \"@daimo/pay-common\";\nimport { ExternalLinkIcon } from \"../../../assets/icons\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport Button from \"../../Common/Button\";\nimport ConnectWithQRCode from \"../../DaimoPayModal/ConnectWithQRCode\";\nimport ExternalPaymentSpinner from \"../../Spinners/ExternalPaymentSpinner\";\n\nconst WaitingExternal: React.FC = () => {\n const context = usePayContext();\n const { triggerResize, paymentState } = context;\n const { isMobile } = useIsMobile();\n const locales = useLocales();\n const { selectedExternalOption, payWithExternal, paymentWaitingMessage } =\n paymentState;\n\n let isCoinbase = false;\n if (selectedExternalOption) {\n isCoinbase = selectedExternalOption.id === ExternalPaymentOptions.Coinbase;\n }\n\n const [externalURL, setExternalURL] = useState<string | null>(null);\n\n useEffect(() => {\n if (!selectedExternalOption) return;\n payWithExternal(selectedExternalOption.id).then((url) => {\n setExternalURL(url);\n if (!shouldShowExternalQRCodeOnDesktop) {\n openExternalWindow(url);\n }\n });\n }, [selectedExternalOption]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const openExternalWindow = (url: string) => {\n if (!isCoinbase || isMobile) {\n // for non-exchange apps: open in a new tab\n window.open(url, \"_blank\");\n } else {\n // for Coinbase: open in a popup window\n // in portrait mode in the center of the screen\n let width = 500;\n let height = 700;\n const left = Math.max(\n 0,\n Math.floor((window.innerWidth - width) / 2) + window.screenX,\n );\n const top = Math.max(\n 0,\n Math.floor((window.innerHeight - height) / 2) + window.screenY,\n );\n\n window.open(\n url,\n \"popupWindow\",\n `width=${width},height=${height},left=${left},top=${top},scrollbars=yes`,\n );\n }\n };\n\n const waitingMessageLength = paymentWaitingMessage?.length;\n\n useEffect(() => {\n triggerResize();\n }, [waitingMessageLength, externalURL]); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (!selectedExternalOption) {\n return <PageContent></PageContent>;\n }\n\n return shouldShowExternalQRCodeOnDesktop(selectedExternalOption.id) &&\n !isMobile ? (\n <ConnectWithQRCode externalUrl={externalURL ?? \"\"} />\n ) : (\n <PageContent>\n <ExternalPaymentSpinner\n logoURI={selectedExternalOption.logoURI}\n logoShape={selectedExternalOption.logoShape}\n />\n <ModalContent style={{ marginLeft: 24, marginRight: 24 }}>\n <ModalH1>{locales.waitingForPayment}</ModalH1>\n {paymentWaitingMessage && (\n <ModalBody style={{ marginTop: 12, marginBottom: 12 }}>\n {paymentWaitingMessage}\n </ModalBody>\n )}\n </ModalContent>\n <Button\n icon={<ExternalLinkIcon />}\n onClick={() => {\n if (externalURL) {\n openExternalWindow(externalURL);\n }\n }}\n >\n {selectedExternalOption.cta}\n </Button>\n </PageContent>\n );\n};\n\nexport default WaitingExternal;\n"],"names":[],"mappings":"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"}
|