@lifi/widget 4.5.0 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -3
- package/dist/esm/App.d.ts +1 -2
- package/dist/esm/App.d.ts.map +1 -1
- package/dist/esm/AppDrawer.d.ts +1 -2
- package/dist/esm/AppDrawer.d.ts.map +1 -1
- package/dist/esm/AppDrawer.js +2 -1
- package/dist/esm/AppDrawer.js.map +1 -1
- package/dist/esm/components/ActionRow/ActionRow.d.ts +1 -2
- package/dist/esm/components/ActionRow/ActionRow.d.ts.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.js +13 -7
- package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.style.d.ts +2 -2
- package/dist/esm/components/AmountInput/AmountInput.style.d.ts.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +1 -2
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +2 -13
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts +1 -2
- package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts.map +1 -1
- package/dist/esm/components/AmountInputCard/PercentageChips.js +2 -13
- package/dist/esm/components/AmountInputCard/PercentageChips.js.map +1 -1
- package/dist/esm/components/AmountInputCard/PercentageChips.style.js +1 -1
- package/dist/esm/components/AmountInputCard/PercentageChips.style.js.map +1 -1
- package/dist/esm/components/AmountInputCard/ReceiveAmountCard.js +6 -2
- package/dist/esm/components/AmountInputCard/ReceiveAmountCard.js.map +1 -1
- package/dist/esm/components/AmountInputCard/SendAmountCard.js +13 -6
- package/dist/esm/components/AmountInputCard/SendAmountCard.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.d.ts +1 -2
- package/dist/esm/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/esm/components/Avatar/TokenAvatar.d.ts +1 -2
- package/dist/esm/components/Avatar/TokenAvatar.d.ts.map +1 -1
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts +1 -2
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts.map +1 -1
- package/dist/esm/components/BaseTransactionButton/types.d.ts +1 -2
- package/dist/esm/components/BaseTransactionButton/types.d.ts.map +1 -1
- package/dist/esm/components/BottomSheet/BottomSheet.js +1 -0
- package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
- package/dist/esm/components/BottomSheet/types.d.ts +1 -2
- package/dist/esm/components/BottomSheet/types.d.ts.map +1 -1
- package/dist/esm/components/ButtonTertiary.d.ts +1 -2
- package/dist/esm/components/ButtonTertiary.d.ts.map +1 -1
- package/dist/esm/components/Card/CardIconButton.d.ts +1 -2
- package/dist/esm/components/Card/CardIconButton.d.ts.map +1 -1
- package/dist/esm/components/Card/CardTitle.d.ts +1 -2
- package/dist/esm/components/Card/CardTitle.d.ts.map +1 -1
- package/dist/esm/components/Card/InputCard.d.ts +1 -2
- package/dist/esm/components/Card/InputCard.d.ts.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.d.ts +1 -2
- package/dist/esm/components/ChainSelect/ChainSelect.d.ts.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts +1 -2
- package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts.map +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js +7 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
- package/dist/esm/components/ContractComponent/ContractComponent.d.ts +1 -2
- package/dist/esm/components/ContractComponent/ContractComponent.d.ts.map +1 -1
- package/dist/esm/components/ContractComponent/ItemPrice.d.ts +2 -3
- package/dist/esm/components/ContractComponent/ItemPrice.d.ts.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFT.d.ts +1 -2
- package/dist/esm/components/ContractComponent/NFT/NFT.d.ts.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts +1 -2
- package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/types.d.ts +3 -4
- package/dist/esm/components/ContractComponent/NFT/types.d.ts.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +2 -1
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts +1 -2
- package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts.map +1 -1
- package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts +1 -2
- package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts.map +1 -1
- package/dist/esm/components/Expansion/Expansion.js +4 -3
- package/dist/esm/components/Expansion/Expansion.js.map +1 -1
- package/dist/esm/components/FeeBreakdownTooltip.d.ts +1 -2
- package/dist/esm/components/FeeBreakdownTooltip.d.ts.map +1 -1
- package/dist/esm/components/Header/SettingsButton.js +2 -1
- package/dist/esm/components/Header/SettingsButton.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.d.ts +1 -2
- package/dist/esm/components/IconCircle/IconCircle.d.ts.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.js +2 -1
- package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
- package/dist/esm/components/IconCircle/statusIcons.d.ts +1 -2
- package/dist/esm/components/IconCircle/statusIcons.d.ts.map +1 -1
- package/dist/esm/components/IconTypography.d.ts +1 -2
- package/dist/esm/components/IconTypography.d.ts.map +1 -1
- package/dist/esm/components/ListItem/ListItemButton.d.ts +1 -2
- package/dist/esm/components/ListItem/ListItemButton.d.ts.map +1 -1
- package/dist/esm/components/Messages/UnsupportedToAddressMessage.js +27 -0
- package/dist/esm/components/Messages/UnsupportedToAddressMessage.js.map +1 -0
- package/dist/esm/components/Messages/WarningMessages.d.ts +1 -2
- package/dist/esm/components/Messages/WarningMessages.d.ts.map +1 -1
- package/dist/esm/components/Messages/WarningMessages.js +2 -0
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/Messages/useMessageQueue.js +6 -1
- package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
- package/dist/esm/components/PageContainer.d.ts +2 -3
- package/dist/esm/components/PageContainer.d.ts.map +1 -1
- package/dist/esm/components/PoweredBy/PoweredBy.d.ts +1 -2
- package/dist/esm/components/PoweredBy/PoweredBy.d.ts.map +1 -1
- package/dist/esm/components/ProgressToNextUpdate.d.ts +1 -2
- package/dist/esm/components/ProgressToNextUpdate.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/RouteCard.d.ts +1 -2
- package/dist/esm/components/RouteCard/RouteCard.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts +1 -2
- package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/RouteDetails.d.ts +1 -2
- package/dist/esm/components/RouteCard/RouteDetails.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/RouteDetails.js +2 -1
- package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteDetails.style.d.ts +5 -6
- package/dist/esm/components/RouteCard/RouteDetails.style.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts +1 -2
- package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/RouteTokens.d.ts +1 -2
- package/dist/esm/components/RouteCard/RouteTokens.d.ts.map +1 -1
- package/dist/esm/components/RouteCard/types.d.ts +2 -3
- package/dist/esm/components/RouteCard/types.d.ts.map +1 -1
- package/dist/esm/components/Routes/LimitOrderRoutes.js +2 -2
- package/dist/esm/components/Routes/LimitOrderRoutes.js.map +1 -1
- package/dist/esm/components/Routes/RoutesContent.js +2 -2
- package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
- package/dist/esm/components/Search/SearchInput.d.ts +1 -2
- package/dist/esm/components/Search/SearchInput.d.ts.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts +1 -2
- package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js +2 -2
- package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts +1 -2
- package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js +2 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
- package/dist/esm/components/Step/StepActions.js +18 -16
- package/dist/esm/components/Step/StepActions.js.map +1 -1
- package/dist/esm/components/StepActions/SentToWalletRow.d.ts +1 -2
- package/dist/esm/components/StepActions/SentToWalletRow.d.ts.map +1 -1
- package/dist/esm/components/StepActions/StepActionRow.js +2 -1
- package/dist/esm/components/StepActions/StepActionRow.js.map +1 -1
- package/dist/esm/components/StepActions/StepActionRow.style.d.ts +1 -2
- package/dist/esm/components/StepActions/StepActionRow.style.d.ts.map +1 -1
- package/dist/esm/components/StepActions/StepActionsList.d.ts +1 -2
- package/dist/esm/components/StepActions/StepActionsList.d.ts.map +1 -1
- package/dist/esm/components/StepActions/executionRows.d.ts +2 -3
- package/dist/esm/components/StepActions/executionRows.d.ts.map +1 -1
- package/dist/esm/components/Switch.js +1 -1
- package/dist/esm/components/Switch.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.style.js +4 -2
- package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
- package/dist/esm/components/Token/Token.d.ts.map +1 -1
- package/dist/esm/components/Token/Token.js +2 -4
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TokenList/RecentTokensHeader.js +44 -0
- package/dist/esm/components/TokenList/RecentTokensHeader.js.map +1 -0
- package/dist/esm/components/TokenList/RecentTokensToggle.js +36 -0
- package/dist/esm/components/TokenList/RecentTokensToggle.js.map +1 -0
- package/dist/esm/components/TokenList/RemoveRecentTokenButton.js +32 -0
- package/dist/esm/components/TokenList/RemoveRecentTokenButton.js.map +1 -0
- package/dist/esm/components/TokenList/TokenList.js +55 -5
- package/dist/esm/components/TokenList/TokenList.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js +81 -27
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/TokenNotFound.d.ts +1 -2
- package/dist/esm/components/TokenList/TokenNotFound.d.ts.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts +1 -2
- package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js +63 -37
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/types.d.ts +9 -2
- package/dist/esm/components/TokenList/types.d.ts.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.d.ts +1 -2
- package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -1
- package/dist/esm/components/TokenRate/TokenRate.d.ts +1 -2
- package/dist/esm/components/TokenRate/TokenRate.d.ts.map +1 -1
- package/dist/esm/components/TokenRate/TokenRate.js +2 -1
- package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +22 -21
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts +2 -3
- package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts.map +1 -1
- package/dist/esm/config/constants.d.ts +1 -2
- package/dist/esm/config/constants.d.ts.map +1 -1
- package/dist/esm/config/version.d.ts +2 -3
- package/dist/esm/config/version.d.ts.map +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/config/version.js.map +1 -1
- package/dist/esm/hooks/timer/time.js +2 -2
- package/dist/esm/hooks/timer/time.js.map +1 -1
- package/dist/esm/hooks/useAddressActivity.d.ts +1 -2
- package/dist/esm/hooks/useAddressActivity.d.ts.map +1 -1
- package/dist/esm/hooks/useAddressValidation.d.ts +2 -3
- package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -1
- package/dist/esm/hooks/useAvailableChains.d.ts +1 -2
- package/dist/esm/hooks/useAvailableChains.d.ts.map +1 -1
- package/dist/esm/hooks/useAvailableChains.js +2 -1
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useChain.d.ts +1 -2
- package/dist/esm/hooks/useChain.d.ts.map +1 -1
- package/dist/esm/hooks/useContactSupport.d.ts +1 -2
- package/dist/esm/hooks/useContactSupport.d.ts.map +1 -1
- package/dist/esm/hooks/useDebouncedWatch.d.ts +1 -2
- package/dist/esm/hooks/useDebouncedWatch.d.ts.map +1 -1
- package/dist/esm/hooks/useDisplayedTokens.js +6 -4
- package/dist/esm/hooks/useDisplayedTokens.js.map +1 -1
- package/dist/esm/hooks/useExplorer.d.ts +1 -2
- package/dist/esm/hooks/useExplorer.d.ts.map +1 -1
- package/dist/esm/hooks/useExplorer.js +4 -0
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useFlaggedTokenGuard.js +28 -0
- package/dist/esm/hooks/useFlaggedTokenGuard.js.map +1 -0
- package/dist/esm/hooks/useGasSufficiency.js +3 -1
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useHeader.d.ts +1 -2
- package/dist/esm/hooks/useHeader.d.ts.map +1 -1
- package/dist/esm/hooks/useListHeight.d.ts +1 -2
- package/dist/esm/hooks/useListHeight.d.ts.map +1 -1
- package/dist/esm/hooks/useMaxSendAmount.js +15 -0
- package/dist/esm/hooks/useMaxSendAmount.js.map +1 -0
- package/dist/esm/hooks/useNavigateBack.d.ts +1 -2
- package/dist/esm/hooks/useNavigateBack.d.ts.map +1 -1
- package/dist/esm/hooks/usePacedRouteExecution.js +3 -2
- package/dist/esm/hooks/usePacedRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRecentTokens.js +46 -0
- package/dist/esm/hooks/useRecentTokens.js.map +1 -0
- package/dist/esm/hooks/useRouteExecution.d.ts +1 -2
- package/dist/esm/hooks/useRouteExecution.d.ts.map +1 -1
- package/dist/esm/hooks/useRouteExecutionMessage.d.ts +1 -2
- package/dist/esm/hooks/useRouteExecutionMessage.d.ts.map +1 -1
- package/dist/esm/hooks/useRouteExecutionMessage.js +3 -2
- package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
- package/dist/esm/hooks/useRoutes.d.ts +1 -2
- package/dist/esm/hooks/useRoutes.d.ts.map +1 -1
- package/dist/esm/hooks/useRoutes.js +8 -1
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.d.ts +3 -2
- package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js +13 -1
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToken.d.ts +1 -2
- package/dist/esm/hooks/useToken.d.ts.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.d.ts +1 -2
- package/dist/esm/hooks/useTokenAddressBalance.d.ts.map +1 -1
- package/dist/esm/hooks/useTokenBalances.d.ts +3 -2
- package/dist/esm/hooks/useTokenBalances.d.ts.map +1 -1
- package/dist/esm/hooks/useTokenBalances.js +19 -8
- package/dist/esm/hooks/useTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useTokenBalancesQueries.js +29 -28
- package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
- package/dist/esm/hooks/useTokenList.d.ts +1 -2
- package/dist/esm/hooks/useTokenList.d.ts.map +1 -1
- package/dist/esm/hooks/useTokenSearch.js +5 -6
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.js +40 -25
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useTools.d.ts +1 -2
- package/dist/esm/hooks/useTools.d.ts.map +1 -1
- package/dist/esm/hooks/useWideVariant.js +2 -1
- package/dist/esm/hooks/useWideVariant.js.map +1 -1
- package/dist/esm/hooks/useWidgetChains.d.ts +1 -2
- package/dist/esm/hooks/useWidgetChains.d.ts.map +1 -1
- package/dist/esm/hooks/useWidgetEvents.d.ts +3 -4
- package/dist/esm/hooks/useWidgetEvents.d.ts.map +1 -1
- package/dist/esm/i18n/bn.json +7 -1
- package/dist/esm/i18n/de.json +7 -1
- package/dist/esm/i18n/en.json +16 -3
- package/dist/esm/i18n/es.json +7 -1
- package/dist/esm/i18n/fr.json +7 -1
- package/dist/esm/i18n/hi.json +7 -1
- package/dist/esm/i18n/id.json +7 -1
- package/dist/esm/i18n/it.json +7 -1
- package/dist/esm/i18n/ja.json +7 -1
- package/dist/esm/i18n/ko.json +7 -1
- package/dist/esm/i18n/pl.json +7 -1
- package/dist/esm/i18n/pt.json +7 -1
- package/dist/esm/i18n/th.json +7 -1
- package/dist/esm/i18n/tr.json +7 -1
- package/dist/esm/i18n/uk.json +7 -1
- package/dist/esm/i18n/vi.json +7 -1
- package/dist/esm/i18n/zh.json +7 -1
- package/dist/esm/pages/MainPage/MainPage.js +2 -1
- package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
- package/dist/esm/pages/MainPage/MainWarningMessages.d.ts +1 -2
- package/dist/esm/pages/MainPage/MainWarningMessages.d.ts.map +1 -1
- package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
- package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.js +2 -2
- package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
- package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts +1 -2
- package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts.map +1 -1
- package/dist/esm/pages/SelectChainPage/SelectChainPage.js +13 -12
- package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
- package/dist/esm/pages/SelectChainPage/types.d.ts +1 -2
- package/dist/esm/pages/SelectChainPage/types.d.ts.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js +8 -5
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts +1 -2
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +2 -1
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js +2 -1
- package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts +1 -2
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js +2 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js +2 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts +2 -3
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/RouteTracker.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/RouteTracker.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js +4 -3
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +0 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenVerificationBottomSheet.js +63 -0
- package/dist/esm/pages/TransactionPage/TokenVerificationBottomSheet.js.map +1 -0
- package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +19 -16
- package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionFailedButtons.js +38 -10
- package/dist/esm/pages/TransactionPage/TransactionFailedButtons.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionReview.js +32 -9
- package/dist/esm/pages/TransactionPage/TransactionReview.js.map +1 -1
- package/dist/esm/pages/TransactionPage/types.d.ts +1 -2
- package/dist/esm/pages/TransactionPage/types.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/utils.d.ts +2 -3
- package/dist/esm/pages/TransactionPage/utils.d.ts.map +1 -1
- package/dist/esm/pages/TransactionPage/utils.js +23 -1
- package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
- package/dist/esm/providers/I18nProvider/I18nProvider.d.ts +1 -2
- package/dist/esm/providers/I18nProvider/I18nProvider.d.ts.map +1 -1
- package/dist/esm/providers/I18nProvider/I18nProvider.js +37 -36
- package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
- package/dist/esm/providers/I18nProvider/types.d.ts +4 -5
- package/dist/esm/providers/I18nProvider/types.d.ts.map +1 -1
- package/dist/esm/providers/QueryClientProvider.d.ts +1 -2
- package/dist/esm/providers/QueryClientProvider.d.ts.map +1 -1
- package/dist/esm/providers/SDKClientProvider.d.ts +2 -3
- package/dist/esm/providers/SDKClientProvider.d.ts.map +1 -1
- package/dist/esm/providers/ThemeProvider/ThemeProvider.js +2 -1
- package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.d.ts +1 -2
- package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js +10 -9
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +7 -3
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts +2 -3
- package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -1
- package/dist/esm/providers/WidgetProvider/types.d.ts +2 -3
- package/dist/esm/providers/WidgetProvider/types.d.ts.map +1 -1
- package/dist/esm/stores/StoreProvider.d.ts +1 -2
- package/dist/esm/stores/StoreProvider.d.ts.map +1 -1
- package/dist/esm/stores/StoreProvider.js +10 -6
- package/dist/esm/stores/StoreProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +1 -2
- package/dist/esm/stores/bookmarks/BookmarkStore.d.ts.map +1 -1
- package/dist/esm/stores/bookmarks/types.d.ts +5 -6
- package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.d.ts +1 -2
- package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js +11 -5
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/types.d.ts +1 -2
- package/dist/esm/stores/chains/types.d.ts.map +1 -1
- package/dist/esm/stores/form/types.d.ts +20 -21
- package/dist/esm/stores/form/types.d.ts.map +1 -1
- package/dist/esm/stores/form/useFieldActions.d.ts +1 -2
- package/dist/esm/stores/form/useFieldActions.d.ts.map +1 -1
- package/dist/esm/stores/form/useFieldValues.d.ts +1 -2
- package/dist/esm/stores/form/useFieldValues.d.ts.map +1 -1
- package/dist/esm/stores/header/types.d.ts +1 -2
- package/dist/esm/stores/header/types.d.ts.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.d.ts +2 -3
- package/dist/esm/stores/header/useHeaderStore.d.ts.map +1 -1
- package/dist/esm/stores/inputMode/useInputModeStore.d.ts +1 -2
- package/dist/esm/stores/inputMode/useInputModeStore.d.ts.map +1 -1
- package/dist/esm/stores/recentTokens/RecentTokensStore.js +23 -0
- package/dist/esm/stores/recentTokens/RecentTokensStore.js.map +1 -0
- package/dist/esm/stores/recentTokens/createRecentTokensStore.js +54 -0
- package/dist/esm/stores/recentTokens/createRecentTokensStore.js.map +1 -0
- package/dist/esm/stores/recentTokens/utils.js +15 -0
- package/dist/esm/stores/recentTokens/utils.js.map +1 -0
- package/dist/esm/stores/routes/RouteExecutionStore.d.ts +2 -3
- package/dist/esm/stores/routes/RouteExecutionStore.d.ts.map +1 -1
- package/dist/esm/stores/routes/types.d.ts +3 -4
- package/dist/esm/stores/routes/types.d.ts.map +1 -1
- package/dist/esm/stores/routes/useRouteExecutionIndicator.js +4 -3
- package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
- package/dist/esm/stores/routes/utils.d.ts +4 -5
- package/dist/esm/stores/routes/utils.d.ts.map +1 -1
- package/dist/esm/stores/settings/SettingsStore.d.ts +2 -3
- package/dist/esm/stores/settings/SettingsStore.d.ts.map +1 -1
- package/dist/esm/stores/settings/types.d.ts +2 -3
- package/dist/esm/stores/settings/types.d.ts.map +1 -1
- package/dist/esm/stores/types.d.ts +2 -3
- package/dist/esm/stores/types.d.ts.map +1 -1
- package/dist/esm/themes/azureLight.d.ts +1 -2
- package/dist/esm/themes/azureLight.d.ts.map +1 -1
- package/dist/esm/themes/jumper.d.ts +1 -2
- package/dist/esm/themes/jumper.d.ts.map +1 -1
- package/dist/esm/themes/palettes.d.ts +3 -4
- package/dist/esm/themes/palettes.d.ts.map +1 -1
- package/dist/esm/themes/types.d.ts +1 -0
- package/dist/esm/themes/watermelonLight.d.ts +1 -2
- package/dist/esm/themes/watermelonLight.d.ts.map +1 -1
- package/dist/esm/themes/windows95.d.ts +1 -2
- package/dist/esm/themes/windows95.d.ts.map +1 -1
- package/dist/esm/types/events.d.ts +13 -14
- package/dist/esm/types/events.d.ts.map +1 -1
- package/dist/esm/types/token.d.ts +6 -1
- package/dist/esm/types/token.d.ts.map +1 -1
- package/dist/esm/types/widget.d.ts +55 -51
- package/dist/esm/types/widget.d.ts.map +1 -1
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/address.js +19 -0
- package/dist/esm/utils/address.js.map +1 -0
- package/dist/esm/utils/compactNumberFormatter.d.ts +1 -2
- package/dist/esm/utils/compactNumberFormatter.d.ts.map +1 -1
- package/dist/esm/utils/compactNumberFormatter.js +1 -3
- package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
- package/dist/esm/utils/converters.d.ts +1 -2
- package/dist/esm/utils/converters.d.ts.map +1 -1
- package/dist/esm/utils/currencyExtendedFormatter.d.ts +1 -2
- package/dist/esm/utils/currencyExtendedFormatter.d.ts.map +1 -1
- package/dist/esm/utils/customReceiver.js +12 -0
- package/dist/esm/utils/customReceiver.js.map +1 -0
- package/dist/esm/utils/elements.d.ts +2 -3
- package/dist/esm/utils/elements.d.ts.map +1 -1
- package/dist/esm/utils/enum.d.ts +1 -2
- package/dist/esm/utils/enum.d.ts.map +1 -1
- package/dist/esm/utils/fees.d.ts +2 -3
- package/dist/esm/utils/fees.d.ts.map +1 -1
- package/dist/esm/utils/format.d.ts +8 -9
- package/dist/esm/utils/format.d.ts.map +1 -1
- package/dist/esm/utils/gas.js +24 -0
- package/dist/esm/utils/gas.js.map +1 -0
- package/dist/esm/utils/getErrorMessage.js +0 -1
- package/dist/esm/utils/getErrorMessage.js.map +1 -1
- package/dist/esm/utils/getPriceImpact.d.ts +1 -2
- package/dist/esm/utils/getPriceImpact.d.ts.map +1 -1
- package/dist/esm/utils/input.d.ts +1 -2
- package/dist/esm/utils/input.d.ts.map +1 -1
- package/dist/esm/utils/limitOrder.js +1 -1
- package/dist/esm/utils/limitOrder.js.map +1 -1
- package/dist/esm/utils/navigationRoutes.d.ts +2 -3
- package/dist/esm/utils/navigationRoutes.d.ts.map +1 -1
- package/dist/esm/utils/percentFormatter.d.ts +1 -2
- package/dist/esm/utils/percentFormatter.d.ts.map +1 -1
- package/dist/esm/utils/recentTokens.js +97 -0
- package/dist/esm/utils/recentTokens.js.map +1 -0
- package/dist/esm/utils/token.js +50 -7
- package/dist/esm/utils/token.js.map +1 -1
- package/dist/esm/utils/tokenList.js +54 -25
- package/dist/esm/utils/tokenList.js.map +1 -1
- package/dist/esm/utils/tokenListBands.js +85 -0
- package/dist/esm/utils/tokenListBands.js.map +1 -0
- package/dist/esm/utils/wallet.d.ts +1 -2
- package/dist/esm/utils/wallet.d.ts.map +1 -1
- package/package.json +15 -15
- package/src/components/AmountInput/AmountInputEndAdornment.tsx +2 -21
- package/src/components/AmountInputCard/PercentageChips.tsx +2 -18
- package/src/components/AmountInputCard/ReceiveAmountCard.tsx +16 -3
- package/src/components/BottomSheet/BottomSheet.tsx +3 -0
- package/src/components/Chains/AllChainsAvatar.tsx +7 -1
- package/src/components/Messages/UnsupportedToAddressMessage.tsx +24 -0
- package/src/components/Messages/WarningMessages.tsx +3 -0
- package/src/components/Messages/useMessageQueue.ts +9 -0
- package/src/components/Routes/LimitOrderRoutes.tsx +5 -2
- package/src/components/Routes/RoutesContent.tsx +5 -2
- package/src/components/SendToWallet/SendToWalletExpandButton.tsx +2 -1
- package/src/components/Token/Token.tsx +2 -1
- package/src/components/TokenList/RecentTokensHeader.tsx +52 -0
- package/src/components/TokenList/RecentTokensToggle.tsx +45 -0
- package/src/components/TokenList/RemoveRecentTokenButton.tsx +38 -0
- package/src/components/TokenList/TokenList.tsx +92 -3
- package/src/components/TokenList/TokenListItem.tsx +83 -9
- package/src/components/TokenList/VirtualizedTokenList.tsx +86 -103
- package/src/components/TokenList/types.ts +13 -0
- package/src/config/version.ts +1 -1
- package/src/hooks/useAvailableChains.ts +1 -0
- package/src/hooks/useDisplayedTokens.ts +17 -3
- package/src/hooks/useExplorer.ts +2 -0
- package/src/hooks/useFlaggedTokenGuard.ts +33 -0
- package/src/hooks/useGasSufficiency.ts +9 -1
- package/src/hooks/useMaxSendAmount.ts +21 -0
- package/src/hooks/useRecentTokens.ts +88 -0
- package/src/hooks/useRoutes.ts +10 -0
- package/src/hooks/useToAddressRequirements.ts +23 -1
- package/src/hooks/useTokenBalances.ts +38 -19
- package/src/hooks/useTokenSearch.ts +6 -19
- package/src/hooks/useTokens.ts +97 -40
- package/src/pages/MainPage/ReviewButton.tsx +6 -2
- package/src/pages/RoutesPage/RoutesPage.tsx +5 -2
- package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +1 -1
- package/src/pages/TransactionPage/TokenVerificationBottomSheet.tsx +93 -0
- package/src/pages/TransactionPage/TransactionFailedButtons.tsx +62 -26
- package/src/pages/TransactionPage/TransactionReview.tsx +51 -25
- package/src/pages/TransactionPage/utils.ts +78 -0
- package/src/providers/WalletProvider/useExternalWalletProvider.ts +9 -1
- package/src/stores/StoreProvider.tsx +10 -7
- package/src/stores/chains/ChainOrderStore.test.tsx +298 -0
- package/src/stores/chains/ChainOrderStore.tsx +25 -6
- package/src/stores/recentTokens/RecentTokensStore.tsx +39 -0
- package/src/stores/recentTokens/createRecentTokensStore.ts +107 -0
- package/src/stores/recentTokens/types.ts +37 -0
- package/src/stores/recentTokens/utils.ts +18 -0
- package/src/types/token.ts +8 -3
- package/src/types/widget.ts +5 -0
- package/src/utils/address.ts +21 -0
- package/src/utils/customReceiver.ts +31 -0
- package/src/utils/gas.ts +41 -0
- package/src/utils/recentTokens.ts +187 -0
- package/src/utils/token.ts +122 -19
- package/src/utils/tokenList.ts +60 -14
- package/src/utils/tokenListBands.ts +181 -0
package/dist/esm/i18n/tr.json
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"buy": "Satın al",
|
|
19
19
|
"cancel": "İptal",
|
|
20
20
|
"checkoutReview": "Satın alımı incele",
|
|
21
|
+
"clear": "",
|
|
21
22
|
"clearAllFailed": "",
|
|
22
23
|
"clearTransaction": "",
|
|
23
24
|
"close": "Kapat",
|
|
@@ -45,6 +46,8 @@
|
|
|
45
46
|
"resetSettings": "Ayarları Sıfırla",
|
|
46
47
|
"seeDetails": "Detayları Gör",
|
|
47
48
|
"showAll": "Tümünü Göster",
|
|
49
|
+
"showLess": "",
|
|
50
|
+
"showMore": "",
|
|
48
51
|
"startBridging": "Başla",
|
|
49
52
|
"startSwapping": "Takas işlemini başlat",
|
|
50
53
|
"swap": "Takas et",
|
|
@@ -87,6 +90,7 @@
|
|
|
87
90
|
"info": {
|
|
88
91
|
"message": {
|
|
89
92
|
"accountDeployedMessage": "",
|
|
93
|
+
"unsupportedToAddressMessage": "",
|
|
90
94
|
"autoRefuel": "{{chainName}} ağında gaz yetersiz. Devam ederek, işlem için gereken miktarda gaz alacaksınız.",
|
|
91
95
|
"emptyBridgesList": "Aradığın köprüyü bulamadık",
|
|
92
96
|
"emptyChainList": "Aradığın zinciri bulamadık",
|
|
@@ -118,12 +122,13 @@
|
|
|
118
122
|
},
|
|
119
123
|
"warning": {
|
|
120
124
|
"message": {
|
|
125
|
+
"tokenUnverified": "",
|
|
126
|
+
"tokenUnverifiedByProvider": "",
|
|
121
127
|
"accountNotDeployedMessage": "",
|
|
122
128
|
"lowAddressActivity": "Bu adres {{chainName}} ağında düşük etkinliğe sahip. Olası fon kaybını önlemek için lütfen doğru adrese ve ağa gönderim yaptığınızı doğrulayın.",
|
|
123
129
|
"clearFailedTransactions": "",
|
|
124
130
|
"fundsLossPrevention": "Her zaman akıllı sözleşme hesaplarının hedef zincirde düzgün bir şekilde ayarlandığından emin olun ve fon kaybını önlemek için borsalara doğrudan transferlerden kaçının.",
|
|
125
131
|
"highValueLoss": "Elde edilecek varlıkların değeri, takas edilen varlıklardan ve işlem maliyetinden önemli ölçüde düşüktür.",
|
|
126
|
-
"unverifiedToken": "",
|
|
127
132
|
"insufficientFunds": "Takas işlemini gerçekleştirmek için yeterli bakiyeniz bulunmamaktadır.",
|
|
128
133
|
"insufficientGas": "En azından şunları eklemelisiniz:",
|
|
129
134
|
"minFromAmountUSD": "",
|
|
@@ -285,6 +290,7 @@
|
|
|
285
290
|
"quotedAmount": "Teklif edilen tutar",
|
|
286
291
|
"rateChange": "Değişiklik oranı",
|
|
287
292
|
"receiving": "Alınıyor",
|
|
293
|
+
"recentSearches": "",
|
|
288
294
|
"refuelStepDetails": "{{tool}} aracılığıyla gaz al",
|
|
289
295
|
"route": "",
|
|
290
296
|
"select": "",
|
package/dist/esm/i18n/uk.json
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"buy": "Придбати",
|
|
19
19
|
"cancel": "Скасувати",
|
|
20
20
|
"checkoutReview": "Перегляд покупки",
|
|
21
|
+
"clear": "",
|
|
21
22
|
"clearAllFailed": "",
|
|
22
23
|
"clearTransaction": "",
|
|
23
24
|
"close": "Закрити",
|
|
@@ -45,6 +46,8 @@
|
|
|
45
46
|
"resetSettings": "Скинути налаштування",
|
|
46
47
|
"seeDetails": "Детальніше",
|
|
47
48
|
"showAll": "Показати всі",
|
|
49
|
+
"showLess": "",
|
|
50
|
+
"showMore": "",
|
|
48
51
|
"startBridging": "Почати бридж",
|
|
49
52
|
"startSwapping": "Почати своп",
|
|
50
53
|
"swap": "Своп",
|
|
@@ -87,6 +90,7 @@
|
|
|
87
90
|
"info": {
|
|
88
91
|
"message": {
|
|
89
92
|
"accountDeployedMessage": "Можливо, ваш смарт-акаунт не має однакової адреси на інших чейнах. Будь ласка, перевірте, перш ніж продовжити.",
|
|
93
|
+
"unsupportedToAddressMessage": "",
|
|
90
94
|
"autoRefuel": "У вас замало {{chainName}} газу. Продовжуючи, ви отримаєте достатньо газу, щоб завершити обмін.",
|
|
91
95
|
"emptyBridgesList": "Ми не змогли знайти жодного моста, що відповідає вашому запиту",
|
|
92
96
|
"emptyChainList": "Ми не змогли знайти жодного чейна, що відповідає вашому запиту",
|
|
@@ -118,12 +122,13 @@
|
|
|
118
122
|
},
|
|
119
123
|
"warning": {
|
|
120
124
|
"message": {
|
|
125
|
+
"tokenUnverified": "",
|
|
126
|
+
"tokenUnverifiedByProvider": "",
|
|
121
127
|
"accountNotDeployedMessage": "Обліковий запис смартконтракту не розгорнуто в цільовому чейні. Надсилання коштів на нереальний контракт призведе до незворотних втрат.",
|
|
122
128
|
"lowAddressActivity": "Ця адреса має низьку активність у мережі {{chainName}}. Будь ласка, перевірте, що ви надсилаєте на правильну адресу та мережу, щоб запобігти можливому втраті коштів.",
|
|
123
129
|
"clearFailedTransactions": "",
|
|
124
130
|
"fundsLossPrevention": "Завжди переконуйтеся, що облікові записи смартконтрактів правильно налаштовані в мережі призначення, та уникайте прямих переказів на біржі, щоб запобігти втраті коштів.",
|
|
125
131
|
"highValueLoss": "Вартість отриманих токенів значно нижча, ніж обмінені токени та вартість транзакції.",
|
|
126
|
-
"unverifiedToken": "",
|
|
127
132
|
"insufficientFunds": "У вас недостатньо коштів для здійснення свопу.",
|
|
128
133
|
"insufficientGas": "Для завершення свопа у вас недостатньо газу. Вам необхідно додати хоча б:",
|
|
129
134
|
"minFromAmountUSD": "Мінімальна сума {{amount, currencyExt(currency: USD)}}. Будь ласка, введіть більшу суму.",
|
|
@@ -285,6 +290,7 @@
|
|
|
285
290
|
"quotedAmount": "Запропонована сума",
|
|
286
291
|
"rateChange": "Зміна курсу",
|
|
287
292
|
"receiving": "Отримання",
|
|
293
|
+
"recentSearches": "",
|
|
288
294
|
"refuelStepDetails": "Отримати газ через {{tool}}",
|
|
289
295
|
"route": "",
|
|
290
296
|
"select": "",
|
package/dist/esm/i18n/vi.json
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"buy": "Mua",
|
|
19
19
|
"cancel": "Huỷ bỏ",
|
|
20
20
|
"checkoutReview": "",
|
|
21
|
+
"clear": "",
|
|
21
22
|
"clearAllFailed": "",
|
|
22
23
|
"clearTransaction": "",
|
|
23
24
|
"close": "Đóng",
|
|
@@ -45,6 +46,8 @@
|
|
|
45
46
|
"resetSettings": "Đặt lại cài đặt",
|
|
46
47
|
"seeDetails": "Xem chi tiết",
|
|
47
48
|
"showAll": "Hiển thị tất cả",
|
|
49
|
+
"showLess": "",
|
|
50
|
+
"showMore": "",
|
|
48
51
|
"startBridging": "Bắt đầu đi cầu",
|
|
49
52
|
"startSwapping": "Bắt đầu Swap",
|
|
50
53
|
"swap": "Swap",
|
|
@@ -87,6 +90,7 @@
|
|
|
87
90
|
"info": {
|
|
88
91
|
"message": {
|
|
89
92
|
"accountDeployedMessage": "",
|
|
93
|
+
"unsupportedToAddressMessage": "",
|
|
90
94
|
"autoRefuel": "Gas trên {{chainName}} chain của bạn đang thấp. Để tiếp tục, bạn nên có thêm gas để hoàn thành việc swap.",
|
|
91
95
|
"emptyBridgesList": "",
|
|
92
96
|
"emptyChainList": "",
|
|
@@ -118,12 +122,13 @@
|
|
|
118
122
|
},
|
|
119
123
|
"warning": {
|
|
120
124
|
"message": {
|
|
125
|
+
"tokenUnverified": "",
|
|
126
|
+
"tokenUnverifiedByProvider": "",
|
|
121
127
|
"accountNotDeployedMessage": "",
|
|
122
128
|
"lowAddressActivity": "",
|
|
123
129
|
"clearFailedTransactions": "",
|
|
124
130
|
"fundsLossPrevention": "",
|
|
125
131
|
"highValueLoss": "Giá trị của token nhận được đang thấp hơn rất nhiều so với token được swap và chi phí giao dịch.",
|
|
126
|
-
"unverifiedToken": "",
|
|
127
132
|
"insufficientFunds": "Bạn không có đủ tiền để thực hiện tác vụ này.",
|
|
128
133
|
"insufficientGas": "Bạn không đủ gas để thực hiện swap. Bạn cần thêm ít nhất:",
|
|
129
134
|
"minFromAmountUSD": "",
|
|
@@ -285,6 +290,7 @@
|
|
|
285
290
|
"quotedAmount": "Số tiền trích dẫn",
|
|
286
291
|
"rateChange": "Thay đổi tỉ giá",
|
|
287
292
|
"receiving": "Đang nhận",
|
|
293
|
+
"recentSearches": "",
|
|
288
294
|
"refuelStepDetails": "Lấy gas thông qua {{tool}}",
|
|
289
295
|
"route": "",
|
|
290
296
|
"select": "",
|
package/dist/esm/i18n/zh.json
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"buy": "购买",
|
|
19
19
|
"cancel": "取消",
|
|
20
20
|
"checkoutReview": "查看购买详情",
|
|
21
|
+
"clear": "",
|
|
21
22
|
"clearAllFailed": "",
|
|
22
23
|
"clearTransaction": "",
|
|
23
24
|
"close": "关闭",
|
|
@@ -45,6 +46,8 @@
|
|
|
45
46
|
"resetSettings": "恢复默认设置",
|
|
46
47
|
"seeDetails": "查看详情",
|
|
47
48
|
"showAll": "显示所有",
|
|
49
|
+
"showLess": "",
|
|
50
|
+
"showMore": "",
|
|
48
51
|
"startBridging": "开始跨链",
|
|
49
52
|
"startSwapping": "开始兑换",
|
|
50
53
|
"swap": "兑换",
|
|
@@ -87,6 +90,7 @@
|
|
|
87
90
|
"info": {
|
|
88
91
|
"message": {
|
|
89
92
|
"accountDeployedMessage": "",
|
|
93
|
+
"unsupportedToAddressMessage": "",
|
|
90
94
|
"autoRefuel": "您在 {{chainName}} 链上的燃气费很低。如果启用该选项,您将获得足够的燃气费完成此次兑换。",
|
|
91
95
|
"emptyBridgesList": "我们找不到任何匹配的桥",
|
|
92
96
|
"emptyChainList": "我们找不到任何匹配的链",
|
|
@@ -118,12 +122,13 @@
|
|
|
118
122
|
},
|
|
119
123
|
"warning": {
|
|
120
124
|
"message": {
|
|
125
|
+
"tokenUnverified": "",
|
|
126
|
+
"tokenUnverifiedByProvider": "",
|
|
121
127
|
"accountNotDeployedMessage": "",
|
|
122
128
|
"lowAddressActivity": "此地址在 {{chainName}} 网络上的活跃度较低。请确认您发送到了正确的地址和网络,以防止潜在的资金损失。",
|
|
123
129
|
"clearFailedTransactions": "",
|
|
124
130
|
"fundsLossPrevention": "总是确保在目的地链上适当建立智能合同账户,并避免直接转给交易所,以防止资金损失。",
|
|
125
131
|
"highValueLoss": "收到的代币的价值明显低于要被兑换的代币和交易成本。",
|
|
126
|
-
"unverifiedToken": "",
|
|
127
132
|
"insufficientFunds": "你没有足够的资金来完成这笔交易。",
|
|
128
133
|
"insufficientGas": "您没有足够的燃气费来完成此次交易。您至少需要添加:",
|
|
129
134
|
"minFromAmountUSD": "",
|
|
@@ -285,6 +290,7 @@
|
|
|
285
290
|
"quotedAmount": "报价金额",
|
|
286
291
|
"rateChange": "波动率",
|
|
287
292
|
"receiving": "接收",
|
|
293
|
+
"recentSearches": "",
|
|
288
294
|
"refuelStepDetails": "通过 {{tool}} 获取燃气费",
|
|
289
295
|
"route": "",
|
|
290
296
|
"select": "",
|
|
@@ -29,7 +29,8 @@ const MainPage = () => {
|
|
|
29
29
|
const showAmountEntry = !custom || modeOptions?.custom?.type === "deposit";
|
|
30
30
|
const showGasRefuelMessage = !hiddenUI?.gasRefuelMessage;
|
|
31
31
|
const splitTitle = modeOptions?.split === "bridge" ? t("header.bridge") : modeOptions?.split === "swap" ? t("header.swap") : void 0;
|
|
32
|
-
|
|
32
|
+
const title = mode === "limit" ? t("header.limit") : mode === "custom" ? t(`header.${modeOptions?.custom?.type ?? "checkout"}`) : mode === "refuel" ? t("header.gas") : mode === "split" && splitTitle ? splitTitle : t("header.exchange");
|
|
33
|
+
useHeader(title);
|
|
33
34
|
if (mode === "limit") return /* @__PURE__ */ jsx(LimitPageContent, {});
|
|
34
35
|
return /* @__PURE__ */ jsxs(PageContainer, {
|
|
35
36
|
topGutters: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainPage.js","names":[],"sources":["../../../../src/pages/MainPage/MainPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { AmountInput } from '../../components/AmountInput/AmountInput.js'\nimport { AmountInputCardPair } from '../../components/AmountInputCard/AmountInputCardPair.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { GasRefuelMessage } from '../../components/Messages/GasRefuelMessage.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { Routes } from '../../components/Routes/Routes.js'\nimport { SelectChainAndToken } from '../../components/SelectChainAndToken.js'\nimport { SendToWalletButton } from '../../components/SendToWallet/SendToWalletButton.js'\nimport { SettingsPanel } from '../../components/SettingsPanel/SettingsPanel.js'\nimport { advancedNavigationTabKeys } from '../../components/SettingsPanel/utils.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useWideVariant } from '../../hooks/useWideVariant.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useNavigationTabsStore } from '../../stores/navigationTabs/useNavigationTabsStore.js'\nimport { LimitPageContent } from './LimitPageContent.js'\nimport { MainPageActions } from './MainPageActions.js'\n\nconst marginSx = { marginBottom: 2 }\n\nexport const MainPage: React.FC = () => {\n const { t } = useTranslation()\n const wideVariant = useWideVariant()\n const { mode, modeOptions, contractComponent, hiddenUI, defaultUI } =\n useWidgetConfig()\n const activeTab = useNavigationTabsStore((state) => state.activeTab)\n\n const custom = mode === 'custom'\n // Surface the settings panel on the main page for advanced navigation tabs.\n const advancedMode =\n !!activeTab && advancedNavigationTabKeys.includes(activeTab)\n const showSendReceiveCards = defaultUI?.layout === 'cards'\n // Custom non-deposit contract flows have no amount entry — they keep the\n // chain/token selectors only, in both layouts.\n const showAmountEntry = !custom || modeOptions?.custom?.type === 'deposit'\n const showGasRefuelMessage = !hiddenUI?.gasRefuelMessage\n\n const splitTitle =\n modeOptions?.split === 'bridge'\n ? t('header.bridge')\n : modeOptions?.split === 'swap'\n ? t('header.swap')\n : undefined\n const title =\n mode === 'limit'\n ? t('header.limit')\n : mode === 'custom'\n ? t(`header.${modeOptions?.custom?.type ?? 'checkout'}`)\n : mode === 'refuel'\n ? t('header.gas')\n : mode === 'split' && splitTitle\n ? splitTitle\n : t('header.exchange')\n\n useHeader(title)\n\n if (mode === 'limit') {\n return <LimitPageContent />\n }\n\n return (\n <PageContainer topGutters>\n {custom ? (\n <ContractComponent sx={marginSx}>{contractComponent}</ContractComponent>\n ) : null}\n {showSendReceiveCards && showAmountEntry ? (\n <AmountInputCardPair sx={marginSx} />\n ) : (\n <>\n <SelectChainAndToken sx={marginSx} />\n {!showSendReceiveCards && showAmountEntry ? (\n <AmountInput formType=\"from\" sx={marginSx} />\n ) : null}\n </>\n )}\n {advancedMode ? <SettingsPanel sx={marginSx} /> : null}\n {!wideVariant ? <Routes sx={marginSx} /> : null}\n <SendToWalletButton sx={marginSx} />\n {showGasRefuelMessage ? <GasRefuelMessage sx={marginSx} /> : null}\n <MainPageActions showSendToWalletExpand />\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAM,WAAW,EAAE,cAAc,EAAE;AAEnC,MAAa,iBAA2B;CACtC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,cAAc,eAAe;CACnC,MAAM,EAAE,MAAM,aAAa,mBAAmB,UAAU,cACtD,gBAAgB;CAClB,MAAM,YAAY,wBAAwB,UAAU,MAAM,SAAS;CAEnE,MAAM,SAAS,SAAS;CAExB,MAAM,eACJ,CAAC,CAAC,aAAa,0BAA0B,SAAS,SAAS;CAC7D,MAAM,uBAAuB,WAAW,WAAW;CAGnD,MAAM,kBAAkB,CAAC,UAAU,aAAa,QAAQ,SAAS;CACjE,MAAM,uBAAuB,CAAC,UAAU;CAExC,MAAM,aACJ,aAAa,UAAU,WACnB,EAAE,eAAe,IACjB,aAAa,UAAU,SACrB,EAAE,aAAa,IACf,KAAA;
|
|
1
|
+
{"version":3,"file":"MainPage.js","names":[],"sources":["../../../../src/pages/MainPage/MainPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { AmountInput } from '../../components/AmountInput/AmountInput.js'\nimport { AmountInputCardPair } from '../../components/AmountInputCard/AmountInputCardPair.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { GasRefuelMessage } from '../../components/Messages/GasRefuelMessage.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { Routes } from '../../components/Routes/Routes.js'\nimport { SelectChainAndToken } from '../../components/SelectChainAndToken.js'\nimport { SendToWalletButton } from '../../components/SendToWallet/SendToWalletButton.js'\nimport { SettingsPanel } from '../../components/SettingsPanel/SettingsPanel.js'\nimport { advancedNavigationTabKeys } from '../../components/SettingsPanel/utils.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useWideVariant } from '../../hooks/useWideVariant.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useNavigationTabsStore } from '../../stores/navigationTabs/useNavigationTabsStore.js'\nimport { LimitPageContent } from './LimitPageContent.js'\nimport { MainPageActions } from './MainPageActions.js'\n\nconst marginSx = { marginBottom: 2 }\n\nexport const MainPage: React.FC = () => {\n const { t } = useTranslation()\n const wideVariant = useWideVariant()\n const { mode, modeOptions, contractComponent, hiddenUI, defaultUI } =\n useWidgetConfig()\n const activeTab = useNavigationTabsStore((state) => state.activeTab)\n\n const custom = mode === 'custom'\n // Surface the settings panel on the main page for advanced navigation tabs.\n const advancedMode =\n !!activeTab && advancedNavigationTabKeys.includes(activeTab)\n const showSendReceiveCards = defaultUI?.layout === 'cards'\n // Custom non-deposit contract flows have no amount entry — they keep the\n // chain/token selectors only, in both layouts.\n const showAmountEntry = !custom || modeOptions?.custom?.type === 'deposit'\n const showGasRefuelMessage = !hiddenUI?.gasRefuelMessage\n\n const splitTitle =\n modeOptions?.split === 'bridge'\n ? t('header.bridge')\n : modeOptions?.split === 'swap'\n ? t('header.swap')\n : undefined\n const title =\n mode === 'limit'\n ? t('header.limit')\n : mode === 'custom'\n ? t(`header.${modeOptions?.custom?.type ?? 'checkout'}`)\n : mode === 'refuel'\n ? t('header.gas')\n : mode === 'split' && splitTitle\n ? splitTitle\n : t('header.exchange')\n\n useHeader(title)\n\n if (mode === 'limit') {\n return <LimitPageContent />\n }\n\n return (\n <PageContainer topGutters>\n {custom ? (\n <ContractComponent sx={marginSx}>{contractComponent}</ContractComponent>\n ) : null}\n {showSendReceiveCards && showAmountEntry ? (\n <AmountInputCardPair sx={marginSx} />\n ) : (\n <>\n <SelectChainAndToken sx={marginSx} />\n {!showSendReceiveCards && showAmountEntry ? (\n <AmountInput formType=\"from\" sx={marginSx} />\n ) : null}\n </>\n )}\n {advancedMode ? <SettingsPanel sx={marginSx} /> : null}\n {!wideVariant ? <Routes sx={marginSx} /> : null}\n <SendToWalletButton sx={marginSx} />\n {showGasRefuelMessage ? <GasRefuelMessage sx={marginSx} /> : null}\n <MainPageActions showSendToWalletExpand />\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAM,WAAW,EAAE,cAAc,EAAE;AAEnC,MAAa,iBAA2B;CACtC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,cAAc,eAAe;CACnC,MAAM,EAAE,MAAM,aAAa,mBAAmB,UAAU,cACtD,gBAAgB;CAClB,MAAM,YAAY,wBAAwB,UAAU,MAAM,SAAS;CAEnE,MAAM,SAAS,SAAS;CAExB,MAAM,eACJ,CAAC,CAAC,aAAa,0BAA0B,SAAS,SAAS;CAC7D,MAAM,uBAAuB,WAAW,WAAW;CAGnD,MAAM,kBAAkB,CAAC,UAAU,aAAa,QAAQ,SAAS;CACjE,MAAM,uBAAuB,CAAC,UAAU;CAExC,MAAM,aACJ,aAAa,UAAU,WACnB,EAAE,eAAe,IACjB,aAAa,UAAU,SACrB,EAAE,aAAa,IACf,KAAA;CACR,MAAM,QACJ,SAAS,UACL,EAAE,cAAc,IAChB,SAAS,WACP,EAAE,UAAU,aAAa,QAAQ,QAAQ,YAAY,IACrD,SAAS,WACP,EAAE,YAAY,IACd,SAAS,WAAW,aAClB,aACA,EAAE,iBAAiB;CAE/B,UAAU,KAAK;CAEf,IAAI,SAAS,SACX,OAAO,oBAAC,kBAAD,CAAmB,CAAA;CAG5B,OACE,qBAAC,eAAD;EAAe,YAAA;EAAf,UAAA;GACG,SACC,oBAAC,mBAAD;IAAmB,IAAI;IAAW,UAAA;GAAqC,CAAA,IACrE;GACH,wBAAwB,kBACvB,oBAAC,qBAAD,EAAqB,IAAI,SAAW,CAAA,IAEpC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,qBAAD,EAAqB,IAAI,SAAW,CAAA,GACnC,CAAC,wBAAwB,kBACxB,oBAAC,aAAD;IAAa,UAAS;IAAO,IAAI;GAAW,CAAA,IAC1C,IACJ,EAAA,CAAA;GAEH,eAAe,oBAAC,eAAD,EAAe,IAAI,SAAW,CAAA,IAAI;GACjD,CAAC,cAAc,oBAAC,QAAD,EAAQ,IAAI,SAAW,CAAA,IAAI;GAC3C,oBAAC,oBAAD,EAAoB,IAAI,SAAW,CAAA;GAClC,uBAAuB,oBAAC,kBAAD,EAAkB,IAAI,SAAW,CAAA,IAAI;GAC7D,oBAAC,iBAAD,EAAiB,wBAAA,KAAwB,CAAA;EAC5B;;AAEnB"}
|
|
@@ -4,7 +4,6 @@ import { BoxProps } from "@mui/material";
|
|
|
4
4
|
interface MainWarningMessagesProps extends BoxProps {
|
|
5
5
|
route?: Route;
|
|
6
6
|
}
|
|
7
|
-
declare const MainWarningMessages: React.FC<MainWarningMessagesProps>;
|
|
7
|
+
export declare const MainWarningMessages: React.FC<MainWarningMessagesProps>;
|
|
8
8
|
//#endregion
|
|
9
|
-
export { MainWarningMessages };
|
|
10
9
|
//# sourceMappingURL=MainWarningMessages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainWarningMessages.d.ts","names":[],"sources":["../../../../src/pages/MainPage/MainWarningMessages.tsx"],"mappings":";;;UAKU,iCAAiC;EACzC,QAAQ;;
|
|
1
|
+
{"version":3,"file":"MainWarningMessages.d.ts","names":[],"sources":["../../../../src/pages/MainPage/MainWarningMessages.tsx"],"mappings":";;;UAKU,iCAAiC;EACzC,QAAQ;;qBAGG,qBAAqB,MAAM,GAAG"}
|
|
@@ -17,7 +17,7 @@ const ReviewButton = () => {
|
|
|
17
17
|
const emitter = useWidgetEvents();
|
|
18
18
|
const { mode, modeOptions } = useWidgetConfig();
|
|
19
19
|
const splitState = useSplitMode();
|
|
20
|
-
const { toAddress, requiredToAddress } = useToAddressRequirements();
|
|
20
|
+
const { toAddress, requiredToAddress, unsupportedReceiverBlocking } = useToAddressRequirements();
|
|
21
21
|
const { routes, setReviewableRoute } = useRoutes();
|
|
22
22
|
const [selectedRouteId] = useFieldValues("selectedRouteId");
|
|
23
23
|
const currentRoute = (mode === "limit" ? routes?.find((route) => route.id === selectedRouteId) : void 0) ?? routes?.[0];
|
|
@@ -56,7 +56,7 @@ const ReviewButton = () => {
|
|
|
56
56
|
return /* @__PURE__ */ jsx(BaseTransactionButton, {
|
|
57
57
|
text: getButtonText(),
|
|
58
58
|
onClick: handleClick,
|
|
59
|
-
disabled: currentRoute && requiredToAddress && !toAddress,
|
|
59
|
+
disabled: currentRoute && (unsupportedReceiverBlocking || requiredToAddress && !toAddress),
|
|
60
60
|
route: currentRoute,
|
|
61
61
|
sx: { flex: 1 }
|
|
62
62
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewButton.js","names":[],"sources":["../../../../src/pages/MainPage/ReviewButton.tsx"],"sourcesContent":["import { useNavigate } from '@tanstack/react-router'\nimport { useTranslation } from 'react-i18next'\nimport { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { useSplitMode } from '../../stores/navigationTabs/useNavigationTabsStore.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\n\nexport const ReviewButton: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const emitter = useWidgetEvents()\n const { mode, modeOptions } = useWidgetConfig()\n const splitState = useSplitMode()\n const { toAddress, requiredToAddress }
|
|
1
|
+
{"version":3,"file":"ReviewButton.js","names":[],"sources":["../../../../src/pages/MainPage/ReviewButton.tsx"],"sourcesContent":["import { useNavigate } from '@tanstack/react-router'\nimport { useTranslation } from 'react-i18next'\nimport { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { useSplitMode } from '../../stores/navigationTabs/useNavigationTabsStore.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\n\nexport const ReviewButton: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const emitter = useWidgetEvents()\n const { mode, modeOptions } = useWidgetConfig()\n const splitState = useSplitMode()\n const { toAddress, requiredToAddress, unsupportedReceiverBlocking } =\n useToAddressRequirements()\n const { routes, setReviewableRoute } = useRoutes()\n const [selectedRouteId] = useFieldValues('selectedRouteId')\n\n // The provider pick only applies in limit mode (it's the only flow that sets\n // it). Honoring it in other modes would be wrong, since provider/tool keys\n // can collide across modes. Everywhere else, fall back to the best route.\n const currentRoute =\n (mode === 'limit'\n ? routes?.find((route) => route.id === selectedRouteId)\n : undefined) ?? routes?.[0]\n\n const handleClick = async () => {\n if (!currentRoute) {\n return\n }\n\n setReviewableRoute(currentRoute)\n navigate({\n to: navigationRoutes.transactionExecution,\n search: { routeId: currentRoute.id },\n })\n emitter.emit(WidgetEvent.RouteSelected, {\n route: currentRoute,\n routes: routes!,\n })\n }\n\n const getButtonText = (): string => {\n if (currentRoute) {\n switch (mode) {\n case 'custom':\n return t(`button.${modeOptions?.custom?.type ?? 'checkout'}Review`)\n case 'refuel':\n return t('button.getGas')\n case 'limit':\n return t('button.review')\n default: {\n const transactionType =\n currentRoute.fromChainId === currentRoute.toChainId\n ? 'swap'\n : 'bridge'\n return t(`button.${transactionType}Review`)\n }\n }\n }\n switch (mode) {\n case 'custom':\n return modeOptions?.custom?.type === 'deposit'\n ? t('button.deposit')\n : t('button.buy')\n case 'refuel':\n return t('button.getGas')\n case 'limit':\n return t('button.review')\n case 'split':\n if (splitState) {\n return t(`button.${splitState}`)\n }\n return t('button.exchange')\n default:\n return t('button.exchange')\n }\n }\n\n return (\n <BaseTransactionButton\n text={getButtonText()}\n onClick={handleClick}\n disabled={\n currentRoute &&\n (unsupportedReceiverBlocking || (requiredToAddress && !toAddress))\n }\n route={currentRoute}\n sx={{ flex: 1 }}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,MAAa,qBAA+B;CAC1C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,UAAU,gBAAgB;CAChC,MAAM,EAAE,MAAM,gBAAgB,gBAAgB;CAC9C,MAAM,aAAa,aAAa;CAChC,MAAM,EAAE,WAAW,mBAAmB,gCACpC,yBAAyB;CAC3B,MAAM,EAAE,QAAQ,uBAAuB,UAAU;CACjD,MAAM,CAAC,mBAAmB,eAAe,iBAAiB;CAK1D,MAAM,gBACH,SAAS,UACN,QAAQ,MAAM,UAAU,MAAM,OAAO,eAAe,IACpD,KAAA,MAAc,SAAS;CAE7B,MAAM,cAAc,YAAY;EAC9B,IAAI,CAAC,cACH;EAGF,mBAAmB,YAAY;EAC/B,SAAS;GACP,IAAI,iBAAiB;GACrB,QAAQ,EAAE,SAAS,aAAa,GAAG;EACrC,CAAC;EACD,QAAQ,KAAA,iBAAgC;GACtC,OAAO;GACC;EACV,CAAC;CACH;CAEA,MAAM,sBAA8B;EAClC,IAAI,cACF,QAAQ,MAAR;GACE,KAAK,UACH,OAAO,EAAE,UAAU,aAAa,QAAQ,QAAQ,WAAW,OAAO;GACpE,KAAK,UACH,OAAO,EAAE,eAAe;GAC1B,KAAK,SACH,OAAO,EAAE,eAAe;GAC1B,SAAS;IACP,MAAM,kBACJ,aAAa,gBAAgB,aAAa,YACtC,SACA;IACN,OAAO,EAAE,UAAU,gBAAgB,OAAO;GAC5C;EACF;EAEF,QAAQ,MAAR;GACE,KAAK,UACH,OAAO,aAAa,QAAQ,SAAS,YACjC,EAAE,gBAAgB,IAClB,EAAE,YAAY;GACpB,KAAK,UACH,OAAO,EAAE,eAAe;GAC1B,KAAK,SACH,OAAO,EAAE,eAAe;GAC1B,KAAK;IACH,IAAI,YACF,OAAO,EAAE,UAAU,YAAY;IAEjC,OAAO,EAAE,iBAAiB;GAC5B,SACE,OAAO,EAAE,iBAAiB;EAC9B;CACF;CAEA,OACE,oBAAC,uBAAD;EACE,MAAM,cAAc;EACpB,SAAS;EACT,UACE,iBACC,+BAAgC,qBAAqB,CAAC;EAEzD,OAAO;EACP,IAAI,EAAE,MAAM,EAAE;CACf,CAAA;AAEL"}
|
|
@@ -27,7 +27,7 @@ const RoutesPage = () => {
|
|
|
27
27
|
const { routes, isLoading, isFetching, dataUpdatedAt, refetchTime, fromChain, refetch, setReviewableRoute } = useRoutes();
|
|
28
28
|
const { account } = useAccount({ chainType: fromChain?.chainType });
|
|
29
29
|
const [toAddress] = useFieldValues("toAddress");
|
|
30
|
-
const { requiredToAddress } = useToAddressRequirements();
|
|
30
|
+
const { requiredToAddress, unsupportedReceiverBlocking } = useToAddressRequirements();
|
|
31
31
|
const headerAction = useMemo(() => /* @__PURE__ */ jsx(ProgressToNextUpdate, {
|
|
32
32
|
updatedAt: dataUpdatedAt || Date.now(),
|
|
33
33
|
timeToUpdate: refetchTime,
|
|
@@ -55,7 +55,7 @@ const RoutesPage = () => {
|
|
|
55
55
|
});
|
|
56
56
|
};
|
|
57
57
|
const routeNotFound = !routes?.length && !isLoading && !isFetching;
|
|
58
|
-
const toAddressUnsatisfied = routes?.[0] && requiredToAddress && !toAddress;
|
|
58
|
+
const toAddressUnsatisfied = routes?.[0] && (unsupportedReceiverBlocking || requiredToAddress && !toAddress);
|
|
59
59
|
const allowInteraction = account.isConnected && !toAddressUnsatisfied;
|
|
60
60
|
return /* @__PURE__ */ jsx(PageContainer, {
|
|
61
61
|
disableGutters: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoutesPage.js","names":["Stack"],"sources":["../../../../src/pages/RoutesPage/RoutesPage.tsx"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { Box } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { type JSX, useMemo, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { ProgressToNextUpdate } from '../../components/ProgressToNextUpdate.js'\nimport { RouteCard } from '../../components/RouteCard/RouteCard.js'\nimport { RouteCardSkeleton } from '../../components/RouteCard/RouteCardSkeleton.js'\nimport { RouteNotFoundCard } from '../../components/RouteCard/RouteNotFoundCard.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { Stack } from './RoutesPage.style.js'\n\nexport const RoutesPage = (): JSX.Element => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const emitter = useWidgetEvents()\n const listParentRef = useRef<HTMLDivElement>(null)\n const {\n routes,\n isLoading,\n isFetching,\n dataUpdatedAt,\n refetchTime,\n fromChain,\n refetch,\n setReviewableRoute,\n } = useRoutes()\n const { account } = useAccount({ chainType: fromChain?.chainType })\n const [toAddress] = useFieldValues('toAddress')\n const { requiredToAddress }
|
|
1
|
+
{"version":3,"file":"RoutesPage.js","names":["Stack"],"sources":["../../../../src/pages/RoutesPage/RoutesPage.tsx"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { Box } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { type JSX, useMemo, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { ProgressToNextUpdate } from '../../components/ProgressToNextUpdate.js'\nimport { RouteCard } from '../../components/RouteCard/RouteCard.js'\nimport { RouteCardSkeleton } from '../../components/RouteCard/RouteCardSkeleton.js'\nimport { RouteNotFoundCard } from '../../components/RouteCard/RouteNotFoundCard.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { Stack } from './RoutesPage.style.js'\n\nexport const RoutesPage = (): JSX.Element => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const emitter = useWidgetEvents()\n const listParentRef = useRef<HTMLDivElement>(null)\n const {\n routes,\n isLoading,\n isFetching,\n dataUpdatedAt,\n refetchTime,\n fromChain,\n refetch,\n setReviewableRoute,\n } = useRoutes()\n const { account } = useAccount({ chainType: fromChain?.chainType })\n const [toAddress] = useFieldValues('toAddress')\n const { requiredToAddress, unsupportedReceiverBlocking } =\n useToAddressRequirements()\n\n const headerAction = useMemo(\n () => (\n <ProgressToNextUpdate\n updatedAt={dataUpdatedAt || Date.now()}\n timeToUpdate={refetchTime}\n isLoading={isFetching}\n onClick={() => refetch()}\n sx={{ marginRight: -1 }}\n size=\"medium\"\n />\n ),\n [dataUpdatedAt, isFetching, refetch, refetchTime]\n )\n\n useHeader(t('header.receive'), headerAction)\n\n const { listHeight } = useListHeight({\n listParentRef,\n })\n\n const handleRouteClick = (route: Route) => {\n setReviewableRoute(route)\n navigate({\n to: navigationRoutes.transactionExecution,\n search: { routeId: route.id },\n })\n emitter.emit(WidgetEvent.RouteSelected, {\n route,\n routes: routes!,\n })\n }\n\n const routeNotFound = !routes?.length && !isLoading && !isFetching\n\n const toAddressUnsatisfied =\n routes?.[0] &&\n (unsupportedReceiverBlocking || (requiredToAddress && !toAddress))\n\n const allowInteraction = account.isConnected && !toAddressUnsatisfied\n\n return (\n <PageContainer disableGutters>\n <Box\n className=\"long-list\"\n ref={listParentRef}\n style={{ height: listHeight, overflow: 'auto' }}\n >\n <Stack direction=\"column\" spacing={2} sx={{ pt: 1.5 }}>\n {routeNotFound ? (\n <RouteNotFoundCard />\n ) : isLoading && !routes?.length ? (\n Array.from({ length: 3 }).map((_, index) => (\n <RouteCardSkeleton key={index} />\n ))\n ) : (\n routes?.map((route: Route, index: number) => (\n <RouteCard\n key={index}\n route={route}\n onClick={\n allowInteraction ? () => handleRouteClick(route) : undefined\n }\n active={index === 0}\n expanded={routes?.length === 1}\n />\n ))\n )}\n </Stack>\n </Box>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,mBAAgC;CAC3C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,UAAU,gBAAgB;CAChC,MAAM,gBAAgB,OAAuB,IAAI;CACjD,MAAM,EACJ,QACA,WACA,YACA,eACA,aACA,WACA,SACA,uBACE,UAAU;CACd,MAAM,EAAE,YAAY,WAAW,EAAE,WAAW,WAAW,UAAU,CAAC;CAClE,MAAM,CAAC,aAAa,eAAe,WAAW;CAC9C,MAAM,EAAE,mBAAmB,gCACzB,yBAAyB;CAE3B,MAAM,eAAe,cAEjB,oBAAC,sBAAD;EACE,WAAW,iBAAiB,KAAK,IAAI;EACrC,cAAc;EACd,WAAW;EACX,eAAe,QAAQ;EACvB,IAAI,EAAE,aAAa,GAAG;EACtB,MAAK;CACN,CAAA,GAEH;EAAC;EAAe;EAAY;EAAS;CAAW,CAClD;CAEA,UAAU,EAAE,gBAAgB,GAAG,YAAY;CAE3C,MAAM,EAAE,eAAe,cAAc,EACnC,cACF,CAAC;CAED,MAAM,oBAAoB,UAAiB;EACzC,mBAAmB,KAAK;EACxB,SAAS;GACP,IAAI,iBAAiB;GACrB,QAAQ,EAAE,SAAS,MAAM,GAAG;EAC9B,CAAC;EACD,QAAQ,KAAA,iBAAgC;GACtC;GACQ;EACV,CAAC;CACH;CAEA,MAAM,gBAAgB,CAAC,QAAQ,UAAU,CAAC,aAAa,CAAC;CAExD,MAAM,uBACJ,SAAS,OACR,+BAAgC,qBAAqB,CAAC;CAEzD,MAAM,mBAAmB,QAAQ,eAAe,CAAC;CAEjD,OACE,oBAAC,eAAD;EAAe,gBAAA;EACb,UAAA,oBAAC,KAAD;GACE,WAAU;GACV,KAAK;GACL,OAAO;IAAE,QAAQ;IAAY,UAAU;GAAO;GAE9C,UAAA,oBAACA,SAAD;IAAO,WAAU;IAAS,SAAS;IAAG,IAAI,EAAE,IAAI,IAAI;IACjD,UAAA,gBACC,oBAAC,mBAAD,CAAoB,CAAA,IAClB,aAAa,CAAC,QAAQ,SACxB,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAChC,oBAAC,mBAAD,CAAgC,GAAR,KAAQ,CACjC,IAED,QAAQ,KAAK,OAAc,UACzB,oBAAC,WAAD;KAES;KACP,SACE,yBAAyB,iBAAiB,KAAK,IAAI,KAAA;KAErD,QAAQ,UAAU;KAClB,UAAU,QAAQ,WAAW;IAC9B,GAPM,KAON,CACF;GAEE,CAAA;EACJ,CAAA;CACQ,CAAA;AAEnB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { SelectChainPageProps } from "./types.js";
|
|
2
2
|
//#region src/pages/SelectChainPage/SelectChainPage.d.ts
|
|
3
|
-
declare const SelectChainPage: React.FC<SelectChainPageProps>;
|
|
3
|
+
export declare const SelectChainPage: React.FC<SelectChainPageProps>;
|
|
4
4
|
//#endregion
|
|
5
|
-
export { SelectChainPage };
|
|
6
5
|
//# sourceMappingURL=SelectChainPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectChainPage.d.ts","names":[],"sources":["../../../../src/pages/SelectChainPage/SelectChainPage.tsx"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"SelectChainPage.d.ts","names":[],"sources":["../../../../src/pages/SelectChainPage/SelectChainPage.tsx"],"mappings":";;qBAUa,iBAAiB,MAAM,GAAG"}
|
|
@@ -13,20 +13,21 @@ const SelectChainPage = ({ formType, selectNativeToken }) => {
|
|
|
13
13
|
const selectToken = useTokenSelect(formType, navigateBack);
|
|
14
14
|
const { t } = useTranslation();
|
|
15
15
|
useHeader(t("header.selectChain"));
|
|
16
|
+
const handleClick = useCallback(async (chain) => {
|
|
17
|
+
if (selectNativeToken) selectToken(chain.nativeToken.address, chain.id);
|
|
18
|
+
else {
|
|
19
|
+
setCurrentChain(chain.id);
|
|
20
|
+
navigateBack();
|
|
21
|
+
}
|
|
22
|
+
}, [
|
|
23
|
+
navigateBack,
|
|
24
|
+
selectNativeToken,
|
|
25
|
+
selectToken,
|
|
26
|
+
setCurrentChain
|
|
27
|
+
]);
|
|
16
28
|
return /* @__PURE__ */ jsx(SelectChainPageContent, {
|
|
17
29
|
formType,
|
|
18
|
-
onSelect:
|
|
19
|
-
if (selectNativeToken) selectToken(chain.nativeToken.address, chain.id);
|
|
20
|
-
else {
|
|
21
|
-
setCurrentChain(chain.id);
|
|
22
|
-
navigateBack();
|
|
23
|
-
}
|
|
24
|
-
}, [
|
|
25
|
-
navigateBack,
|
|
26
|
-
selectNativeToken,
|
|
27
|
-
selectToken,
|
|
28
|
-
setCurrentChain
|
|
29
|
-
])
|
|
30
|
+
onSelect: handleClick
|
|
30
31
|
});
|
|
31
32
|
};
|
|
32
33
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectChainPage.js","names":[],"sources":["../../../../src/pages/SelectChainPage/SelectChainPage.tsx"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useChainSelect } from '../../components/ChainSelect/useChainSelect.js'\nimport { SelectChainPageContent } from '../../components/Chains/SelectChainPageContent.js'\nimport { useTokenSelect } from '../../components/TokenList/useTokenSelect.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport type { SelectChainPageProps } from './types.js'\n\nexport const SelectChainPage: React.FC<SelectChainPageProps> = ({\n formType,\n selectNativeToken,\n}) => {\n const navigateBack = useNavigateBack()\n const { setCurrentChain } = useChainSelect(formType)\n const selectToken = useTokenSelect(formType, navigateBack)\n\n const { t } = useTranslation()\n\n useHeader(t('header.selectChain'))\n\n const handleClick = useCallback(\n async (chain: ExtendedChain) => {\n if (selectNativeToken) {\n selectToken(chain.nativeToken.address, chain.id)\n } else {\n setCurrentChain(chain.id)\n navigateBack()\n }\n },\n [navigateBack, selectNativeToken, selectToken, setCurrentChain]\n )\n\n return <SelectChainPageContent formType={formType} onSelect={handleClick} />\n}\n"],"mappings":";;;;;;;;;AAUA,MAAa,mBAAmD,EAC9D,UACA,wBACI;CACJ,MAAM,eAAe,gBAAgB;CACrC,MAAM,EAAE,oBAAoB,eAAe,QAAQ;CACnD,MAAM,cAAc,eAAe,UAAU,YAAY;CAEzD,MAAM,EAAE,MAAM,eAAe;CAE7B,UAAU,EAAE,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectChainPage.js","names":[],"sources":["../../../../src/pages/SelectChainPage/SelectChainPage.tsx"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useChainSelect } from '../../components/ChainSelect/useChainSelect.js'\nimport { SelectChainPageContent } from '../../components/Chains/SelectChainPageContent.js'\nimport { useTokenSelect } from '../../components/TokenList/useTokenSelect.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport type { SelectChainPageProps } from './types.js'\n\nexport const SelectChainPage: React.FC<SelectChainPageProps> = ({\n formType,\n selectNativeToken,\n}) => {\n const navigateBack = useNavigateBack()\n const { setCurrentChain } = useChainSelect(formType)\n const selectToken = useTokenSelect(formType, navigateBack)\n\n const { t } = useTranslation()\n\n useHeader(t('header.selectChain'))\n\n const handleClick = useCallback(\n async (chain: ExtendedChain) => {\n if (selectNativeToken) {\n selectToken(chain.nativeToken.address, chain.id)\n } else {\n setCurrentChain(chain.id)\n navigateBack()\n }\n },\n [navigateBack, selectNativeToken, selectToken, setCurrentChain]\n )\n\n return <SelectChainPageContent formType={formType} onSelect={handleClick} />\n}\n"],"mappings":";;;;;;;;;AAUA,MAAa,mBAAmD,EAC9D,UACA,wBACI;CACJ,MAAM,eAAe,gBAAgB;CACrC,MAAM,EAAE,oBAAoB,eAAe,QAAQ;CACnD,MAAM,cAAc,eAAe,UAAU,YAAY;CAEzD,MAAM,EAAE,MAAM,eAAe;CAE7B,UAAU,EAAE,oBAAoB,CAAC;CAEjC,MAAM,cAAc,YAClB,OAAO,UAAyB;EAC9B,IAAI,mBACF,YAAY,MAAM,YAAY,SAAS,MAAM,EAAE;OAC1C;GACL,gBAAgB,MAAM,EAAE;GACxB,aAAa;EACf;CACF,GACA;EAAC;EAAc;EAAmB;EAAa;CAAe,CAChE;CAEA,OAAO,oBAAC,wBAAD;EAAkC;EAAU,UAAU;CAAc,CAAA;AAC7E"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { FormTypeProps } from "../../stores/form/types.js";
|
|
2
2
|
//#region src/pages/SelectChainPage/types.d.ts
|
|
3
|
-
interface SelectChainPageProps extends FormTypeProps {
|
|
3
|
+
export interface SelectChainPageProps extends FormTypeProps {
|
|
4
4
|
selectNativeToken?: boolean;
|
|
5
5
|
}
|
|
6
6
|
//#endregion
|
|
7
|
-
export { SelectChainPageProps };
|
|
8
7
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/pages/SelectChainPage/types.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/pages/SelectChainPage/types.ts"],"mappings":";;iBAEiB,6BAA6B;EAC5C"}
|
|
@@ -13,8 +13,9 @@ import { useTranslation } from "react-i18next";
|
|
|
13
13
|
//#region src/pages/SelectEnabledToolsPage.tsx
|
|
14
14
|
const SelectAllCheckbox = memo(({ allCheckboxesSelected, anyCheckboxesSelected, noCheckboxesAvailable, onClick }) => {
|
|
15
15
|
const { t } = useTranslation();
|
|
16
|
+
const tooltipTitle = noCheckboxesAvailable ? void 0 : allCheckboxesSelected ? t("tooltip.deselectAll") : t("tooltip.selectAll");
|
|
16
17
|
return /* @__PURE__ */ jsx(Tooltip, {
|
|
17
|
-
title:
|
|
18
|
+
title: tooltipTitle,
|
|
18
19
|
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
19
20
|
id: "select-all",
|
|
20
21
|
checked: allCheckboxesSelected,
|
|
@@ -69,6 +70,11 @@ const SelectEnabledToolsPage = ({ type }) => {
|
|
|
69
70
|
filteredTools
|
|
70
71
|
]);
|
|
71
72
|
useHeader(t(`settings.enabled${type}`), headerAction);
|
|
73
|
+
const handleSearchInputChange = useCallback((e) => {
|
|
74
|
+
setSearchValue(e.target.value);
|
|
75
|
+
listRef.current?.scrollTo(0, 0);
|
|
76
|
+
}, []);
|
|
77
|
+
const debouncedSearchInputChange = debounce(handleSearchInputChange, 250);
|
|
72
78
|
return /* @__PURE__ */ jsxs(PageContainer, {
|
|
73
79
|
disableGutters: true,
|
|
74
80
|
children: [/* @__PURE__ */ jsx(Box, {
|
|
@@ -79,10 +85,7 @@ const SelectEnabledToolsPage = ({ type }) => {
|
|
|
79
85
|
pt: 1.5
|
|
80
86
|
},
|
|
81
87
|
children: /* @__PURE__ */ jsx(SearchInput, {
|
|
82
|
-
onChange:
|
|
83
|
-
setSearchValue(e.target.value);
|
|
84
|
-
listRef.current?.scrollTo(0, 0);
|
|
85
|
-
}, []), 250),
|
|
88
|
+
onChange: debouncedSearchInputChange,
|
|
86
89
|
placeholder: t(`main.search${type}`),
|
|
87
90
|
autoFocus: true
|
|
88
91
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectEnabledToolsPage.js","names":[],"sources":["../../../src/pages/SelectEnabledToolsPage.tsx"],"sourcesContent":["import { Box, Checkbox, debounce, Tooltip } from '@mui/material'\nimport type { ChangeEvent, ChangeEventHandler } from 'react'\nimport { memo, useCallback, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageContainer } from '../components/PageContainer.js'\nimport { SearchInput } from '../components/Search/SearchInput.js'\nimport { type ToolCollectionTypes, Tools } from '../components/Tools/Tools.js'\nimport { useHeader } from '../hooks/useHeader.js'\nimport { useListHeight } from '../hooks/useListHeight.js'\nimport { useTools } from '../hooks/useTools.js'\nimport { useSettingsStore } from '../stores/settings/SettingsStore.js'\nimport { useSettingsActions } from '../stores/settings/useSettingsActions.js'\n\ninterface SelectAllCheckboxProps {\n allCheckboxesSelected: boolean\n onClick: (event: ChangeEvent<HTMLInputElement>, checked: boolean) => void\n anyCheckboxesSelected: boolean\n noCheckboxesAvailable: boolean\n}\n\nconst SelectAllCheckbox = memo<SelectAllCheckboxProps>(\n ({\n allCheckboxesSelected,\n anyCheckboxesSelected,\n noCheckboxesAvailable,\n onClick,\n }) => {\n const { t } = useTranslation()\n const tooltipTitle = noCheckboxesAvailable\n ? undefined\n : allCheckboxesSelected\n ? t('tooltip.deselectAll')\n : t('tooltip.selectAll')\n\n return (\n <Tooltip title={tooltipTitle}>\n <Checkbox\n id=\"select-all\"\n checked={allCheckboxesSelected}\n indeterminate={anyCheckboxesSelected && !allCheckboxesSelected}\n onChange={onClick}\n disabled={noCheckboxesAvailable}\n sx={{ mr: -1.5, height: 20 }}\n />\n </Tooltip>\n )\n }\n)\n\nexport const SelectEnabledToolsPage: React.FC<{\n type: 'Bridges' | 'Exchanges'\n}> = ({ type }) => {\n const typeKey = type.toLowerCase() as 'bridges' | 'exchanges'\n const { tools } = useTools()\n const { toggleToolKeys } = useSettingsActions()\n\n const disabledTools = useSettingsStore((state) => state[`disabled${type}`])\n\n const { t } = useTranslation()\n const headerRef = useRef<HTMLElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const [searchValue, setSearchValue] = useState('')\n\n const { listHeight } = useListHeight({\n listParentRef: listRef,\n headerRef,\n })\n\n const filteredTools = useMemo(() => {\n const toolsList = tools?.[typeKey] ?? []\n\n if (!searchValue) {\n return toolsList\n }\n\n const lowerSearchValue = searchValue.toLowerCase()\n return toolsList.filter((tool) =>\n tool.name.toLowerCase().includes(lowerSearchValue)\n ) as ToolCollectionTypes\n }, [tools, typeKey, searchValue])\n\n const handleSelectAll = useCallback(() => {\n toggleToolKeys(\n type,\n filteredTools.map((tool) => tool.key)\n )\n }, [toggleToolKeys, type, filteredTools])\n\n const headerAction = useMemo(\n () => (\n <SelectAllCheckbox\n allCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.every((tool) => !disabledTools.includes(tool.key))\n }\n anyCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.some((tool) => disabledTools.includes(tool.key))\n }\n noCheckboxesAvailable={!filteredTools.length}\n onClick={handleSelectAll}\n />\n ),\n [disabledTools, handleSelectAll, filteredTools]\n )\n\n useHeader(t(`settings.enabled${type}`), headerAction)\n\n const handleSearchInputChange: ChangeEventHandler<HTMLInputElement> =\n useCallback((e) => {\n setSearchValue(e.target.value)\n listRef.current?.scrollTo(0, 0)\n }, [])\n\n const debouncedSearchInputChange = debounce(handleSearchInputChange, 250)\n\n return (\n <PageContainer disableGutters>\n <Box ref={headerRef} sx={{ px: 3, pb: 2, pt: 1.5 }}>\n <SearchInput\n onChange={debouncedSearchInputChange}\n placeholder={t(`main.search${type}`)}\n autoFocus\n />\n </Box>\n <Box ref={listRef} style={{ height: listHeight, overflow: 'auto' }}>\n <Tools filteredTools={filteredTools} type={type} />\n </Box>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,MAAM,oBAAoB,MACvB,EACC,uBACA,uBACA,uBACA,cACI;CACJ,MAAM,EAAE,MAAM,eAAe;
|
|
1
|
+
{"version":3,"file":"SelectEnabledToolsPage.js","names":[],"sources":["../../../src/pages/SelectEnabledToolsPage.tsx"],"sourcesContent":["import { Box, Checkbox, debounce, Tooltip } from '@mui/material'\nimport type { ChangeEvent, ChangeEventHandler } from 'react'\nimport { memo, useCallback, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageContainer } from '../components/PageContainer.js'\nimport { SearchInput } from '../components/Search/SearchInput.js'\nimport { type ToolCollectionTypes, Tools } from '../components/Tools/Tools.js'\nimport { useHeader } from '../hooks/useHeader.js'\nimport { useListHeight } from '../hooks/useListHeight.js'\nimport { useTools } from '../hooks/useTools.js'\nimport { useSettingsStore } from '../stores/settings/SettingsStore.js'\nimport { useSettingsActions } from '../stores/settings/useSettingsActions.js'\n\ninterface SelectAllCheckboxProps {\n allCheckboxesSelected: boolean\n onClick: (event: ChangeEvent<HTMLInputElement>, checked: boolean) => void\n anyCheckboxesSelected: boolean\n noCheckboxesAvailable: boolean\n}\n\nconst SelectAllCheckbox = memo<SelectAllCheckboxProps>(\n ({\n allCheckboxesSelected,\n anyCheckboxesSelected,\n noCheckboxesAvailable,\n onClick,\n }) => {\n const { t } = useTranslation()\n const tooltipTitle = noCheckboxesAvailable\n ? undefined\n : allCheckboxesSelected\n ? t('tooltip.deselectAll')\n : t('tooltip.selectAll')\n\n return (\n <Tooltip title={tooltipTitle}>\n <Checkbox\n id=\"select-all\"\n checked={allCheckboxesSelected}\n indeterminate={anyCheckboxesSelected && !allCheckboxesSelected}\n onChange={onClick}\n disabled={noCheckboxesAvailable}\n sx={{ mr: -1.5, height: 20 }}\n />\n </Tooltip>\n )\n }\n)\n\nexport const SelectEnabledToolsPage: React.FC<{\n type: 'Bridges' | 'Exchanges'\n}> = ({ type }) => {\n const typeKey = type.toLowerCase() as 'bridges' | 'exchanges'\n const { tools } = useTools()\n const { toggleToolKeys } = useSettingsActions()\n\n const disabledTools = useSettingsStore((state) => state[`disabled${type}`])\n\n const { t } = useTranslation()\n const headerRef = useRef<HTMLElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const [searchValue, setSearchValue] = useState('')\n\n const { listHeight } = useListHeight({\n listParentRef: listRef,\n headerRef,\n })\n\n const filteredTools = useMemo(() => {\n const toolsList = tools?.[typeKey] ?? []\n\n if (!searchValue) {\n return toolsList\n }\n\n const lowerSearchValue = searchValue.toLowerCase()\n return toolsList.filter((tool) =>\n tool.name.toLowerCase().includes(lowerSearchValue)\n ) as ToolCollectionTypes\n }, [tools, typeKey, searchValue])\n\n const handleSelectAll = useCallback(() => {\n toggleToolKeys(\n type,\n filteredTools.map((tool) => tool.key)\n )\n }, [toggleToolKeys, type, filteredTools])\n\n const headerAction = useMemo(\n () => (\n <SelectAllCheckbox\n allCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.every((tool) => !disabledTools.includes(tool.key))\n }\n anyCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.some((tool) => disabledTools.includes(tool.key))\n }\n noCheckboxesAvailable={!filteredTools.length}\n onClick={handleSelectAll}\n />\n ),\n [disabledTools, handleSelectAll, filteredTools]\n )\n\n useHeader(t(`settings.enabled${type}`), headerAction)\n\n const handleSearchInputChange: ChangeEventHandler<HTMLInputElement> =\n useCallback((e) => {\n setSearchValue(e.target.value)\n listRef.current?.scrollTo(0, 0)\n }, [])\n\n const debouncedSearchInputChange = debounce(handleSearchInputChange, 250)\n\n return (\n <PageContainer disableGutters>\n <Box ref={headerRef} sx={{ px: 3, pb: 2, pt: 1.5 }}>\n <SearchInput\n onChange={debouncedSearchInputChange}\n placeholder={t(`main.search${type}`)}\n autoFocus\n />\n </Box>\n <Box ref={listRef} style={{ height: listHeight, overflow: 'auto' }}>\n <Tools filteredTools={filteredTools} type={type} />\n </Box>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,MAAM,oBAAoB,MACvB,EACC,uBACA,uBACA,uBACA,cACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,eAAe,wBACjB,KAAA,IACA,wBACE,EAAE,qBAAqB,IACvB,EAAE,mBAAmB;CAE3B,OACE,oBAAC,SAAD;EAAS,OAAO;EACd,UAAA,oBAAC,UAAD;GACE,IAAG;GACH,SAAS;GACT,eAAe,yBAAyB,CAAC;GACzC,UAAU;GACV,UAAU;GACV,IAAI;IAAE,IAAI;IAAM,QAAQ;GAAG;EAC5B,CAAA;CACM,CAAA;AAEb,CACF;AAEA,MAAa,0BAEP,EAAE,WAAW;CACjB,MAAM,UAAU,KAAK,YAAY;CACjC,MAAM,EAAE,UAAU,SAAS;CAC3B,MAAM,EAAE,mBAAmB,mBAAmB;CAE9C,MAAM,gBAAgB,kBAAkB,UAAU,MAAM,WAAW,OAAO;CAE1E,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,YAAY,OAAoB,IAAI;CAC1C,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CAEjD,MAAM,EAAE,eAAe,cAAc;EACnC,eAAe;EACf;CACF,CAAC;CAED,MAAM,gBAAgB,cAAc;EAClC,MAAM,YAAY,QAAQ,YAAY,CAAC;EAEvC,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,mBAAmB,YAAY,YAAY;EACjD,OAAO,UAAU,QAAQ,SACvB,KAAK,KAAK,YAAY,CAAC,CAAC,SAAS,gBAAgB,CACnD;CACF,GAAG;EAAC;EAAO;EAAS;CAAW,CAAC;CAEhC,MAAM,kBAAkB,kBAAkB;EACxC,eACE,MACA,cAAc,KAAK,SAAS,KAAK,GAAG,CACtC;CACF,GAAG;EAAC;EAAgB;EAAM;CAAa,CAAC;CAExC,MAAM,eAAe,cAEjB,oBAAC,mBAAD;EACE,uBACE,CAAC,CAAC,cAAc,UAChB,cAAc,OAAO,SAAS,CAAC,cAAc,SAAS,KAAK,GAAG,CAAC;EAEjE,uBACE,CAAC,CAAC,cAAc,UAChB,cAAc,MAAM,SAAS,cAAc,SAAS,KAAK,GAAG,CAAC;EAE/D,uBAAuB,CAAC,cAAc;EACtC,SAAS;CACV,CAAA,GAEH;EAAC;EAAe;EAAiB;CAAa,CAChD;CAEA,UAAU,EAAE,mBAAmB,MAAM,GAAG,YAAY;CAEpD,MAAM,0BACJ,aAAa,MAAM;EACjB,eAAe,EAAE,OAAO,KAAK;EAC7B,QAAQ,SAAS,SAAS,GAAG,CAAC;CAChC,GAAG,CAAC,CAAC;CAEP,MAAM,6BAA6B,SAAS,yBAAyB,GAAG;CAExE,OACE,qBAAC,eAAD;EAAe,gBAAA;EAAf,UAAA,CACE,oBAAC,KAAD;GAAK,KAAK;GAAW,IAAI;IAAE,IAAI;IAAG,IAAI;IAAG,IAAI;GAAI;GAC/C,UAAA,oBAAC,aAAD;IACE,UAAU;IACV,aAAa,EAAE,cAAc,MAAM;IACnC,WAAA;GACD,CAAA;EACE,CAAA,GACL,oBAAC,KAAD;GAAK,KAAK;GAAS,OAAO;IAAE,QAAQ;IAAY,UAAU;GAAO;GAC/D,UAAA,oBAAC,OAAD;IAAsB;IAAqB;GAAO,CAAA;EAC/C,CAAA,CACQ;;AAEnB"}
|
|
@@ -4,7 +4,6 @@ import { JSX } from "react";
|
|
|
4
4
|
interface SearchTokenInputProps {
|
|
5
5
|
formType: FormType;
|
|
6
6
|
}
|
|
7
|
-
declare const SearchTokenInput: ({ formType }: SearchTokenInputProps) => JSX.Element;
|
|
7
|
+
export declare const SearchTokenInput: ({ formType }: SearchTokenInputProps) => JSX.Element;
|
|
8
8
|
//#endregion
|
|
9
|
-
export { SearchTokenInput };
|
|
10
9
|
//# sourceMappingURL=SearchTokenInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchTokenInput.d.ts","names":[],"sources":["../../../../src/pages/SelectTokenPage/SearchTokenInput.tsx"],"mappings":";;;UAQU;EACR,UAAU;;
|
|
1
|
+
{"version":3,"file":"SearchTokenInput.d.ts","names":[],"sources":["../../../../src/pages/SelectTokenPage/SearchTokenInput.tsx"],"mappings":";;;UAQU;EACR,UAAU;;qBAGC,qBACX,YACC,0BAAwB,IAAI"}
|
|
@@ -17,7 +17,8 @@ const SelectTokenPage = ({ formType }) => {
|
|
|
17
17
|
const { mode, hiddenUI } = useWidgetConfig();
|
|
18
18
|
const wideVariant = useWideVariant();
|
|
19
19
|
const { t } = useTranslation();
|
|
20
|
-
|
|
20
|
+
const title = formType === "from" ? mode === "custom" ? t("header.payWith") : t("header.from") : t("header.to");
|
|
21
|
+
useHeader(title);
|
|
21
22
|
const hideChainSelect = wideVariant && !hiddenUI?.chainSidebar || swapOnly && formType === "to" || hiddenUI?.chainSelect;
|
|
22
23
|
const isMobile = useMediaQuery((theme) => theme.breakpoints.down(theme.breakpoints.values.xs));
|
|
23
24
|
const hideSearchTokenInput = hiddenUI?.searchTokenInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTokenPage.js","names":[],"sources":["../../../../src/pages/SelectTokenPage/SelectTokenPage.tsx"],"sourcesContent":["import { Box, type Theme, useMediaQuery } from '@mui/material'\nimport type { FC } from 'react'\nimport { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ChainSelect } from '../../components/ChainSelect/ChainSelect.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TokenList } from '../../components/TokenList/TokenList.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useSwapOnly } from '../../hooks/useSwapOnly.js'\nimport { useWideVariant } from '../../hooks/useWideVariant.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormTypeProps } from '../../stores/form/types.js'\nimport { SearchTokenInput } from './SearchTokenInput.js'\n\nexport const SelectTokenPage: FC<FormTypeProps> = ({ formType }) => {\n const headerRef = useRef<HTMLElement>(null)\n\n const swapOnly = useSwapOnly()\n\n const { mode, hiddenUI } = useWidgetConfig()\n const wideVariant = useWideVariant()\n\n const { t } = useTranslation()\n const title =\n formType === 'from'\n ? mode === 'custom'\n ? t('header.payWith')\n : t('header.from')\n : t('header.to')\n\n useHeader(title)\n\n const hideChainSelect =\n (wideVariant && !hiddenUI?.chainSidebar) ||\n (swapOnly && formType === 'to') ||\n hiddenUI?.chainSelect\n\n const isMobile = useMediaQuery((theme: Theme) =>\n theme.breakpoints.down(theme.breakpoints.values.xs)\n )\n const hideSearchTokenInput = hiddenUI?.searchTokenInput\n\n const hasHeader = !hideChainSelect || !hideSearchTokenInput\n\n return (\n <PageContainer disableGutters>\n <Box\n ref={headerRef}\n sx={{\n pt: 1.5,\n pb: hasHeader ? 2 : 0,\n px: 3,\n }}\n >\n {!hideChainSelect ? <ChainSelect formType={formType} /> : null}\n {!hideSearchTokenInput && (\n <Box\n sx={{\n mt: !hideChainSelect ? 2 : 0,\n }}\n >\n <SearchTokenInput formType={formType} />\n </Box>\n )}\n </Box>\n <TokenList\n // Rerender component if variant changes (since chains tiles change height)\n key={\n hideChainSelect\n ? 'without-offset'\n : isMobile\n ? 'with-offset-mobile'\n : 'with-offset'\n }\n headerRef={headerRef}\n formType={formType}\n />\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,MAAa,mBAAsC,EAAE,eAAe;CAClE,MAAM,YAAY,OAAoB,IAAI;CAE1C,MAAM,WAAW,YAAY;CAE7B,MAAM,EAAE,MAAM,aAAa,gBAAgB;CAC3C,MAAM,cAAc,eAAe;CAEnC,MAAM,EAAE,MAAM,eAAe;
|
|
1
|
+
{"version":3,"file":"SelectTokenPage.js","names":[],"sources":["../../../../src/pages/SelectTokenPage/SelectTokenPage.tsx"],"sourcesContent":["import { Box, type Theme, useMediaQuery } from '@mui/material'\nimport type { FC } from 'react'\nimport { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ChainSelect } from '../../components/ChainSelect/ChainSelect.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TokenList } from '../../components/TokenList/TokenList.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useSwapOnly } from '../../hooks/useSwapOnly.js'\nimport { useWideVariant } from '../../hooks/useWideVariant.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormTypeProps } from '../../stores/form/types.js'\nimport { SearchTokenInput } from './SearchTokenInput.js'\n\nexport const SelectTokenPage: FC<FormTypeProps> = ({ formType }) => {\n const headerRef = useRef<HTMLElement>(null)\n\n const swapOnly = useSwapOnly()\n\n const { mode, hiddenUI } = useWidgetConfig()\n const wideVariant = useWideVariant()\n\n const { t } = useTranslation()\n const title =\n formType === 'from'\n ? mode === 'custom'\n ? t('header.payWith')\n : t('header.from')\n : t('header.to')\n\n useHeader(title)\n\n const hideChainSelect =\n (wideVariant && !hiddenUI?.chainSidebar) ||\n (swapOnly && formType === 'to') ||\n hiddenUI?.chainSelect\n\n const isMobile = useMediaQuery((theme: Theme) =>\n theme.breakpoints.down(theme.breakpoints.values.xs)\n )\n const hideSearchTokenInput = hiddenUI?.searchTokenInput\n\n const hasHeader = !hideChainSelect || !hideSearchTokenInput\n\n return (\n <PageContainer disableGutters>\n <Box\n ref={headerRef}\n sx={{\n pt: 1.5,\n pb: hasHeader ? 2 : 0,\n px: 3,\n }}\n >\n {!hideChainSelect ? <ChainSelect formType={formType} /> : null}\n {!hideSearchTokenInput && (\n <Box\n sx={{\n mt: !hideChainSelect ? 2 : 0,\n }}\n >\n <SearchTokenInput formType={formType} />\n </Box>\n )}\n </Box>\n <TokenList\n // Rerender component if variant changes (since chains tiles change height)\n key={\n hideChainSelect\n ? 'without-offset'\n : isMobile\n ? 'with-offset-mobile'\n : 'with-offset'\n }\n headerRef={headerRef}\n formType={formType}\n />\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,MAAa,mBAAsC,EAAE,eAAe;CAClE,MAAM,YAAY,OAAoB,IAAI;CAE1C,MAAM,WAAW,YAAY;CAE7B,MAAM,EAAE,MAAM,aAAa,gBAAgB;CAC3C,MAAM,cAAc,eAAe;CAEnC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,QACJ,aAAa,SACT,SAAS,WACP,EAAE,gBAAgB,IAClB,EAAE,aAAa,IACjB,EAAE,WAAW;CAEnB,UAAU,KAAK;CAEf,MAAM,kBACH,eAAe,CAAC,UAAU,gBAC1B,YAAY,aAAa,QAC1B,UAAU;CAEZ,MAAM,WAAW,eAAe,UAC9B,MAAM,YAAY,KAAK,MAAM,YAAY,OAAO,EAAE,CACpD;CACA,MAAM,uBAAuB,UAAU;CAIvC,OACE,qBAAC,eAAD;EAAe,gBAAA;EAAf,UAAA,CACE,qBAAC,KAAD;GACE,KAAK;GACL,IAAI;IACF,IAAI;IACJ,IARU,CAAC,mBAAmB,CAAC,uBAQf,IAAI;IACpB,IAAI;GACN;GANF,UAAA,CAQG,CAAC,kBAAkB,oBAAC,aAAD,EAAuB,SAAW,CAAA,IAAI,MACzD,CAAC,wBACA,oBAAC,KAAD;IACE,IAAI,EACF,IAAI,CAAC,kBAAkB,IAAI,EAC7B;IAEA,UAAA,oBAAC,kBAAD,EAA4B,SAAW,CAAA;GACpC,CAAA,CAEJ;EACL,CAAA,GAAA,oBAAC,WAAD;GASa;GACD;EACX,GARG,kBACI,mBACA,WACE,uBACA,aAIT,CACY;;AAEnB"}
|
|
@@ -19,7 +19,8 @@ const SmallBalanceFilterSettings = () => {
|
|
|
19
19
|
const buttonRef = useRef(null);
|
|
20
20
|
const inputRef = useRef(null);
|
|
21
21
|
const formatAndSetThreshold = (inputValue, returnInitial = false) => {
|
|
22
|
-
const
|
|
22
|
+
const value = inputValue.replace("$", "");
|
|
23
|
+
const formattedValue = formatInputAmount(value, 2, returnInitial);
|
|
23
24
|
if (returnInitial) setInputValue(formattedValue);
|
|
24
25
|
else {
|
|
25
26
|
const formattedOrDefault = formattedValue || defaultThreshold;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmallBalanceFilterSettings.js","names":["Switch"],"sources":["../../../../src/pages/SettingsPage/SmallBalanceFilterSettings.tsx"],"sourcesContent":["import AttachMoney from '@mui/icons-material/AttachMoney'\nimport { Box } from '@mui/material'\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type FocusEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Switch } from '../../components/Switch.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, usdDecimals } from '../../utils/format.js'\nimport {\n SettingCardExpandable,\n type SettingCardExpandableRef,\n} from './SettingsCard/SettingCardExpandable.js'\nimport {\n SettingsCustomInput,\n SettingsFieldSet,\n} from './SlippageSettings/SlippageSettings.style.js'\n\nconst defaultThreshold = '0.01'\n\nexport const SmallBalanceFilterSettings: React.FC = () => {\n const { t } = useTranslation()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n const { setValue } = useSettingsActions()\n const [inputValue, setInputValue] = useState(\n smallBalanceThreshold ?? defaultThreshold\n )\n const buttonRef = useRef<SettingCardExpandableRef>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const formatAndSetThreshold = (inputValue: string, returnInitial = false) => {\n const value = inputValue.replace('$', '')\n const formattedValue = formatInputAmount(value, usdDecimals, returnInitial)\n if (returnInitial) {\n setInputValue(formattedValue)\n } else {\n const formattedOrDefault = formattedValue || defaultThreshold\n setInputValue(formattedOrDefault)\n setValue('smallBalanceThreshold', formattedOrDefault)\n }\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, true)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, false)\n }\n\n const handleHideSmallBalancesChange = (\n event: ChangeEvent<HTMLInputElement>\n ) => {\n setValue(\n 'smallBalanceThreshold',\n event.target.checked ? defaultThreshold : undefined\n )\n if (buttonRef.current) {\n buttonRef.current?.toggleExpanded(event.target.checked)\n }\n }\n\n const handleExpanded = () => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n useEffect(() => {\n setInputValue(smallBalanceThreshold ?? defaultThreshold)\n }, [smallBalanceThreshold])\n\n return (\n <SettingCardExpandable\n ref={buttonRef}\n value={\n <Switch\n checked={!!smallBalanceThreshold}\n onChange={handleHideSmallBalancesChange}\n aria-label={t('settings.hideSmallBalances')}\n />\n }\n icon={<AttachMoney />}\n title={t('settings.hideSmallBalances')}\n disabled={!smallBalanceThreshold}\n keepValueVisible\n onEntered={handleExpanded}\n >\n <Box\n sx={{\n mt: 1.5,\n }}\n >\n <SettingsFieldSet>\n <SettingsCustomInput\n inputRef={inputRef}\n selected\n inputProps={{\n inputMode: 'decimal',\n }}\n onChange={handleInputUpdate}\n onBlur={handleInputBlur}\n value={`$${inputValue}`}\n autoComplete=\"off\"\n />\n </SettingsFieldSet>\n </Box>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AAEzB,MAAa,mCAA6C;CACxD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,0BAA0B,YAAY,CAAC,uBAAuB,CAAC;CACvE,MAAM,EAAE,aAAa,mBAAmB;CACxC,MAAM,CAAC,YAAY,iBAAiB,SAClC,yBAAyB,gBAC3B;CACA,MAAM,YAAY,OAAiC,IAAI;CACvD,MAAM,WAAW,OAAyB,IAAI;CAE9C,MAAM,yBAAyB,YAAoB,gBAAgB,UAAU;
|
|
1
|
+
{"version":3,"file":"SmallBalanceFilterSettings.js","names":["Switch"],"sources":["../../../../src/pages/SettingsPage/SmallBalanceFilterSettings.tsx"],"sourcesContent":["import AttachMoney from '@mui/icons-material/AttachMoney'\nimport { Box } from '@mui/material'\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type FocusEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Switch } from '../../components/Switch.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, usdDecimals } from '../../utils/format.js'\nimport {\n SettingCardExpandable,\n type SettingCardExpandableRef,\n} from './SettingsCard/SettingCardExpandable.js'\nimport {\n SettingsCustomInput,\n SettingsFieldSet,\n} from './SlippageSettings/SlippageSettings.style.js'\n\nconst defaultThreshold = '0.01'\n\nexport const SmallBalanceFilterSettings: React.FC = () => {\n const { t } = useTranslation()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n const { setValue } = useSettingsActions()\n const [inputValue, setInputValue] = useState(\n smallBalanceThreshold ?? defaultThreshold\n )\n const buttonRef = useRef<SettingCardExpandableRef>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const formatAndSetThreshold = (inputValue: string, returnInitial = false) => {\n const value = inputValue.replace('$', '')\n const formattedValue = formatInputAmount(value, usdDecimals, returnInitial)\n if (returnInitial) {\n setInputValue(formattedValue)\n } else {\n const formattedOrDefault = formattedValue || defaultThreshold\n setInputValue(formattedOrDefault)\n setValue('smallBalanceThreshold', formattedOrDefault)\n }\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, true)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, false)\n }\n\n const handleHideSmallBalancesChange = (\n event: ChangeEvent<HTMLInputElement>\n ) => {\n setValue(\n 'smallBalanceThreshold',\n event.target.checked ? defaultThreshold : undefined\n )\n if (buttonRef.current) {\n buttonRef.current?.toggleExpanded(event.target.checked)\n }\n }\n\n const handleExpanded = () => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n useEffect(() => {\n setInputValue(smallBalanceThreshold ?? defaultThreshold)\n }, [smallBalanceThreshold])\n\n return (\n <SettingCardExpandable\n ref={buttonRef}\n value={\n <Switch\n checked={!!smallBalanceThreshold}\n onChange={handleHideSmallBalancesChange}\n aria-label={t('settings.hideSmallBalances')}\n />\n }\n icon={<AttachMoney />}\n title={t('settings.hideSmallBalances')}\n disabled={!smallBalanceThreshold}\n keepValueVisible\n onEntered={handleExpanded}\n >\n <Box\n sx={{\n mt: 1.5,\n }}\n >\n <SettingsFieldSet>\n <SettingsCustomInput\n inputRef={inputRef}\n selected\n inputProps={{\n inputMode: 'decimal',\n }}\n onChange={handleInputUpdate}\n onBlur={handleInputBlur}\n value={`$${inputValue}`}\n autoComplete=\"off\"\n />\n </SettingsFieldSet>\n </Box>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AAEzB,MAAa,mCAA6C;CACxD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,0BAA0B,YAAY,CAAC,uBAAuB,CAAC;CACvE,MAAM,EAAE,aAAa,mBAAmB;CACxC,MAAM,CAAC,YAAY,iBAAiB,SAClC,yBAAyB,gBAC3B;CACA,MAAM,YAAY,OAAiC,IAAI;CACvD,MAAM,WAAW,OAAyB,IAAI;CAE9C,MAAM,yBAAyB,YAAoB,gBAAgB,UAAU;EAC3E,MAAM,QAAQ,WAAW,QAAQ,KAAK,EAAE;EACxC,MAAM,iBAAiB,kBAAkB,OAAA,GAAoB,aAAa;EAC1E,IAAI,eACF,cAAc,cAAc;OACvB;GACL,MAAM,qBAAqB,kBAAkB;GAC7C,cAAc,kBAAkB;GAChC,SAAS,yBAAyB,kBAAkB;EACtD;CACF;CAEA,MAAM,qBAA2D,UAAU;EACzE,sBAAsB,MAAM,OAAO,OAAO,IAAI;CAChD;CAEA,MAAM,mBAAwD,UAAU;EACtE,sBAAsB,MAAM,OAAO,OAAO,KAAK;CACjD;CAEA,MAAM,iCACJ,UACG;EACH,SACE,yBACA,MAAM,OAAO,UAAU,mBAAmB,KAAA,CAC5C;EACA,IAAI,UAAU,SACZ,UAAU,SAAS,eAAe,MAAM,OAAO,OAAO;CAE1D;CAEA,MAAM,uBAAuB;EAC3B,IAAI,SAAS,SACX,SAAS,QAAQ,MAAM;CAE3B;CAEA,gBAAgB;EACd,cAAc,yBAAyB,gBAAgB;CACzD,GAAG,CAAC,qBAAqB,CAAC;CAE1B,OACE,oBAAC,uBAAD;EACE,KAAK;EACL,OACE,oBAACA,UAAD;GACE,SAAS,CAAC,CAAC;GACX,UAAU;GACV,cAAY,EAAE,4BAA4B;EAC3C,CAAA;EAEH,MAAM,oBAAC,aAAD,CAAc,CAAA;EACpB,OAAO,EAAE,4BAA4B;EACrC,UAAU,CAAC;EACX,kBAAA;EACA,WAAW;EAEX,UAAA,oBAAC,KAAD;GACE,IAAI,EACF,IAAI,IACN;GAEA,UAAA,oBAAC,kBAAD,EAAA,UACE,oBAAC,qBAAD;IACY;IACV,UAAA;IACA,YAAY,EACV,WAAW,UACb;IACA,UAAU;IACV,QAAQ;IACR,OAAO,IAAI;IACX,cAAa;GACd,CAAA,EACe,CAAA;EACf,CAAA;CACgB,CAAA;AAE3B"}
|
|
@@ -3,7 +3,6 @@ import { JSX } from "react";
|
|
|
3
3
|
interface ContactSupportButtonProps {
|
|
4
4
|
supportId?: string;
|
|
5
5
|
}
|
|
6
|
-
declare const ContactSupportButton: ({ supportId }: ContactSupportButtonProps) => JSX.Element;
|
|
6
|
+
export declare const ContactSupportButton: ({ supportId }: ContactSupportButtonProps) => JSX.Element;
|
|
7
7
|
//#endregion
|
|
8
|
-
export { ContactSupportButton };
|
|
9
8
|
//# sourceMappingURL=ContactSupportButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactSupportButton.d.ts","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ContactSupportButton.tsx"],"mappings":";;UAKU;EACR;;
|
|
1
|
+
{"version":3,"file":"ContactSupportButton.d.ts","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ContactSupportButton.tsx"],"mappings":";;UAKU;EACR;;qBAGW,yBACX,aACC,8BAA4B,IAAI"}
|
|
@@ -5,8 +5,9 @@ import { useTranslation } from "react-i18next";
|
|
|
5
5
|
//#region src/pages/TransactionDetailsPage/ContactSupportButton.tsx
|
|
6
6
|
const ContactSupportButton = ({ supportId }) => {
|
|
7
7
|
const { t } = useTranslation();
|
|
8
|
+
const handleContactSupport = useContactSupport(supportId);
|
|
8
9
|
return /* @__PURE__ */ jsx(ButtonChip, {
|
|
9
|
-
onClick:
|
|
10
|
+
onClick: handleContactSupport,
|
|
10
11
|
children: t("button.contactSupport")
|
|
11
12
|
});
|
|
12
13
|
};
|