@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
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { TokenExtended } from "@lifi/sdk";
|
|
2
2
|
//#region src/hooks/useToken.d.ts
|
|
3
|
-
declare const useToken: (chainId?: number, tokenAddress?: string, latest?: boolean) => {
|
|
3
|
+
export declare const useToken: (chainId?: number, tokenAddress?: string, latest?: boolean) => {
|
|
4
4
|
token: TokenExtended | undefined;
|
|
5
5
|
isLoading: boolean;
|
|
6
6
|
};
|
|
7
7
|
//#endregion
|
|
8
|
-
export { useToken };
|
|
9
8
|
//# sourceMappingURL=useToken.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useToken.d.ts","names":[],"sources":["../../../src/hooks/useToken.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"useToken.d.ts","names":[],"sources":["../../../src/hooks/useToken.ts"],"mappings":";;qBAKa,WACX,kBACA,uBACA;EAEA,OAAO;EACP"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { ExtendedChain, TokenAmount } from "@lifi/sdk";
|
|
2
2
|
//#region src/hooks/useTokenAddressBalance.d.ts
|
|
3
|
-
declare const useTokenAddressBalance: (chainId?: number, tokenAddress?: string) => {
|
|
3
|
+
export declare const useTokenAddressBalance: (chainId?: number, tokenAddress?: string) => {
|
|
4
4
|
token: TokenAmount;
|
|
5
5
|
chain: ExtendedChain | undefined;
|
|
6
6
|
isLoading: boolean;
|
|
7
7
|
refetch: () => void;
|
|
8
8
|
};
|
|
9
9
|
//#endregion
|
|
10
|
-
export { useTokenAddressBalance };
|
|
11
10
|
//# sourceMappingURL=useTokenAddressBalance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenAddressBalance.d.ts","names":[],"sources":["../../../src/hooks/useTokenAddressBalance.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"useTokenAddressBalance.d.ts","names":[],"sources":["../../../src/hooks/useTokenAddressBalance.ts"],"mappings":";;qBAMa,yBACX,kBACA;EAEA,OAAO;EACP,OAAO;EACP;EACA"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { FormType } from "../stores/form/types.js";
|
|
2
2
|
import { TokenAmount } from "../types/token.js";
|
|
3
3
|
//#region src/hooks/useTokenBalances.d.ts
|
|
4
|
-
declare const useTokenBalances: (selectedChainId?: number, formType?: FormType, isAllNetworks?: boolean, search?: string) => {
|
|
4
|
+
export declare const useTokenBalances: (selectedChainId?: number, formType?: FormType, isAllNetworks?: boolean, search?: string) => {
|
|
5
5
|
tokens: TokenAmount[];
|
|
6
6
|
withCategories: boolean;
|
|
7
7
|
withPinnedTokens: boolean;
|
|
8
8
|
isTokensLoading: boolean;
|
|
9
9
|
isSearchLoading: boolean;
|
|
10
10
|
isBalanceLoading: boolean;
|
|
11
|
+
/** Always set; optional so hand-built results of this public shape stay valid. */
|
|
12
|
+
nativeHoisted?: boolean;
|
|
11
13
|
};
|
|
12
14
|
//#endregion
|
|
13
|
-
export { useTokenBalances };
|
|
14
15
|
//# sourceMappingURL=useTokenBalances.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenBalances.d.ts","names":[],"sources":["../../../src/hooks/useTokenBalances.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useTokenBalances.d.ts","names":[],"sources":["../../../src/hooks/useTokenBalances.ts"],"mappings":";;;qBAea,mBACX,0BACA,WAAW,UACX,yBACA;EAEA,QAAQ;EACR;EACA;EACA;EACA;EACA;;EAEA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
|
|
2
2
|
import { formatTokenPrice } from "../utils/format.js";
|
|
3
3
|
import { useSettings } from "../stores/settings/useSettings.js";
|
|
4
|
-
import {
|
|
4
|
+
import { hoistNativeToken, isHoistableNative, processTokenList } from "../utils/tokenList.js";
|
|
5
5
|
import { useAccountsBalancesData } from "./useAccountsBalancesData.js";
|
|
6
6
|
import { useDisplayedTokens } from "./useDisplayedTokens.js";
|
|
7
7
|
import { useTokenBalancesQueries } from "./useTokenBalancesQueries.js";
|
|
@@ -9,7 +9,7 @@ import { useMemo } from "react";
|
|
|
9
9
|
//#region src/hooks/useTokenBalances.ts
|
|
10
10
|
const useTokenBalances = (selectedChainId, formType, isAllNetworks, search) => {
|
|
11
11
|
const { hiddenUI, tokens: configTokens } = useWidgetConfig();
|
|
12
|
-
const { allTokens, displayedTokensList, isPinnedToken, isTokensLoading, isSearchLoading } = useDisplayedTokens(selectedChainId, formType, isAllNetworks, search);
|
|
12
|
+
const { allTokens, displayedTokensList, isPinnedToken, matchesSearch, isTokensLoading, isSearchLoading } = useDisplayedTokens(selectedChainId, formType, isAllNetworks, search);
|
|
13
13
|
const { data: accountsWithAllTokens, isLoading: isAccountsLoading } = useAccountsBalancesData(selectedChainId, formType, isAllNetworks, allTokens);
|
|
14
14
|
const { data: allTokensWithBalances, isLoading: isBalanceQueriesLoading } = useTokenBalancesQueries(accountsWithAllTokens, Boolean(accountsWithAllTokens) && !isAccountsLoading);
|
|
15
15
|
const { smallBalanceThreshold } = useSettings(["smallBalanceThreshold"]);
|
|
@@ -23,8 +23,8 @@ const useTokenBalances = (selectedChainId, formType, isAllNetworks, search) => {
|
|
|
23
23
|
return balancesByChain.reduce((acc, token) => {
|
|
24
24
|
const tokenKey = `${token.chainId}-${token.address.toLowerCase()}`;
|
|
25
25
|
const isInDisplayedList = displayedTokensSet.has(tokenKey) && token.amount;
|
|
26
|
-
const
|
|
27
|
-
if (!isInDisplayedList && !
|
|
26
|
+
const matchesTheSearch = matchesSearch(token);
|
|
27
|
+
if (!isInDisplayedList && !matchesTheSearch) return acc;
|
|
28
28
|
let processedToken = token;
|
|
29
29
|
if (hideSmallBalances && threshold !== void 0 && threshold >= 0 && token.amount) {
|
|
30
30
|
if (formatTokenPrice(token.amount, token.priceUSD, token.decimals) < threshold) processedToken = {
|
|
@@ -38,14 +38,24 @@ const useTokenBalances = (selectedChainId, formType, isAllNetworks, search) => {
|
|
|
38
38
|
}, [
|
|
39
39
|
allTokensWithBalances,
|
|
40
40
|
displayedTokensList,
|
|
41
|
-
|
|
41
|
+
matchesSearch,
|
|
42
42
|
selectedChainId,
|
|
43
43
|
isAllNetworks,
|
|
44
44
|
smallBalanceThreshold,
|
|
45
45
|
hiddenUI
|
|
46
46
|
]);
|
|
47
|
-
const { processedTokens, withCategories, withPinnedTokens } = useMemo(() => {
|
|
48
|
-
|
|
47
|
+
const { processedTokens, withCategories, withPinnedTokens, nativeHoisted } = useMemo(() => {
|
|
48
|
+
const result = processTokenList(isBalanceLoading, isAllNetworks || !!search, configTokens, selectedChainId, displayedTokensList, displayedTokensWithBalances, isPinnedToken);
|
|
49
|
+
if (isAllNetworks || search) return {
|
|
50
|
+
...result,
|
|
51
|
+
nativeHoisted: false
|
|
52
|
+
};
|
|
53
|
+
const hoisted = hoistNativeToken(result.processedTokens, selectedChainId);
|
|
54
|
+
return {
|
|
55
|
+
...result,
|
|
56
|
+
processedTokens: hoisted,
|
|
57
|
+
nativeHoisted: isHoistableNative(hoisted[0], selectedChainId)
|
|
58
|
+
};
|
|
49
59
|
}, [
|
|
50
60
|
isBalanceLoading,
|
|
51
61
|
isAllNetworks,
|
|
@@ -62,7 +72,8 @@ const useTokenBalances = (selectedChainId, formType, isAllNetworks, search) => {
|
|
|
62
72
|
withPinnedTokens,
|
|
63
73
|
isTokensLoading,
|
|
64
74
|
isSearchLoading,
|
|
65
|
-
isBalanceLoading
|
|
75
|
+
isBalanceLoading,
|
|
76
|
+
nativeHoisted
|
|
66
77
|
};
|
|
67
78
|
};
|
|
68
79
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenBalances.js","names":[],"sources":["../../../src/hooks/useTokenBalances.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport { useSettings } from '../stores/settings/useSettings.js'\nimport type { TokenAmount } from '../types/token.js'\nimport { formatTokenPrice } from '../utils/format.js'\nimport {
|
|
1
|
+
{"version":3,"file":"useTokenBalances.js","names":[],"sources":["../../../src/hooks/useTokenBalances.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport { useSettings } from '../stores/settings/useSettings.js'\nimport type { TokenAmount } from '../types/token.js'\nimport { formatTokenPrice } from '../utils/format.js'\nimport {\n hoistNativeToken,\n isHoistableNative,\n processTokenList,\n} from '../utils/tokenList.js'\nimport { useAccountsBalancesData } from './useAccountsBalancesData.js'\nimport { useDisplayedTokens } from './useDisplayedTokens.js'\nimport { useTokenBalancesQueries } from './useTokenBalancesQueries.js'\n\nexport const useTokenBalances = (\n selectedChainId?: number,\n formType?: FormType,\n isAllNetworks?: boolean,\n search?: string\n): {\n tokens: TokenAmount[]\n withCategories: boolean\n withPinnedTokens: boolean\n isTokensLoading: boolean\n isSearchLoading: boolean\n isBalanceLoading: boolean\n /** Always set; optional so hand-built results of this public shape stay valid. */\n nativeHoisted?: boolean\n} => {\n const { hiddenUI, tokens: configTokens } = useWidgetConfig()\n const {\n allTokens,\n displayedTokensList,\n isPinnedToken,\n matchesSearch,\n isTokensLoading,\n isSearchLoading,\n } = useDisplayedTokens(selectedChainId, formType, isAllNetworks, search)\n\n const { data: accountsWithAllTokens, isLoading: isAccountsLoading } =\n useAccountsBalancesData(selectedChainId, formType, isAllNetworks, allTokens)\n\n const isBalanceLoadingEnabled =\n Boolean(accountsWithAllTokens) && !isAccountsLoading\n\n const { data: allTokensWithBalances, isLoading: isBalanceQueriesLoading } =\n useTokenBalancesQueries(accountsWithAllTokens, isBalanceLoadingEnabled)\n\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n\n const isBalanceLoading =\n (isBalanceQueriesLoading || isAccountsLoading) &&\n !allTokensWithBalances?.length\n\n const displayedTokensWithBalances = useMemo(() => {\n const balancesByChain = isAllNetworks\n ? allTokensWithBalances\n : selectedChainId\n ? allTokensWithBalances?.filter((t) => t.chainId === selectedChainId)\n : undefined\n const displayedTokensSet = new Set(\n displayedTokensList?.map(\n (t) => `${t.chainId}-${t.address.toLowerCase()}`\n ) || []\n )\n\n const hideSmallBalances =\n !!smallBalanceThreshold && !hiddenUI?.hideSmallBalances\n const threshold = hideSmallBalances\n ? Number.parseFloat(smallBalanceThreshold)\n : undefined\n\n if (!balancesByChain) {\n return undefined\n }\n\n return balancesByChain.reduce<typeof balancesByChain>((acc, token) => {\n const tokenKey = `${token.chainId}-${token.address.toLowerCase()}`\n // Check if token is in displayed list and has amount\n const isInDisplayedList = displayedTokensSet.has(tokenKey) && token.amount\n // Check if it matches search (for cached appended tokens)\n const matchesTheSearch = matchesSearch(token)\n\n // Filter: only include tokens that match our criteria\n if (!isInDisplayedList && !matchesTheSearch) {\n return acc\n }\n\n // Apply small balance threshold transformation if enabled\n let processedToken = token\n if (\n hideSmallBalances &&\n threshold !== undefined &&\n threshold >= 0 &&\n token.amount\n ) {\n const balanceUSD = formatTokenPrice(\n token.amount,\n token.priceUSD,\n token.decimals\n )\n if (balanceUSD < threshold) {\n processedToken = {\n ...token,\n amount: 0n,\n }\n }\n }\n\n acc.push(processedToken)\n return acc\n }, [])\n }, [\n allTokensWithBalances,\n displayedTokensList,\n matchesSearch,\n selectedChainId,\n isAllNetworks,\n smallBalanceThreshold,\n hiddenUI,\n ])\n\n const { processedTokens, withCategories, withPinnedTokens, nativeHoisted } =\n useMemo(() => {\n const result = processTokenList(\n isBalanceLoading,\n isAllNetworks || !!search,\n configTokens,\n selectedChainId,\n displayedTokensList,\n displayedTokensWithBalances,\n isPinnedToken\n )\n // Search results stay ranked, and All networks has no single native.\n if (isAllNetworks || search) {\n return { ...result, nativeHoisted: false }\n }\n const hoisted = hoistNativeToken(result.processedTokens, selectedChainId)\n return {\n ...result,\n processedTokens: hoisted,\n nativeHoisted: isHoistableNative(hoisted[0], selectedChainId),\n }\n }, [\n isBalanceLoading,\n isAllNetworks,\n configTokens,\n selectedChainId,\n displayedTokensList,\n displayedTokensWithBalances,\n search,\n isPinnedToken,\n ])\n\n return {\n tokens: processedTokens ?? [],\n withCategories,\n withPinnedTokens,\n isTokensLoading,\n isSearchLoading,\n isBalanceLoading,\n nativeHoisted,\n }\n}\n"],"mappings":";;;;;;;;;AAeA,MAAa,oBACX,iBACA,UACA,eACA,WAUG;CACH,MAAM,EAAE,UAAU,QAAQ,iBAAiB,gBAAgB;CAC3D,MAAM,EACJ,WACA,qBACA,eACA,eACA,iBACA,oBACE,mBAAmB,iBAAiB,UAAU,eAAe,MAAM;CAEvE,MAAM,EAAE,MAAM,uBAAuB,WAAW,sBAC9C,wBAAwB,iBAAiB,UAAU,eAAe,SAAS;CAK7E,MAAM,EAAE,MAAM,uBAAuB,WAAW,4BAC9C,wBAAwB,uBAHxB,QAAQ,qBAAqB,KAAK,CAAC,iBAGmC;CAExE,MAAM,EAAE,0BAA0B,YAAY,CAAC,uBAAuB,CAAC;CAEvE,MAAM,oBACH,2BAA2B,sBAC5B,CAAC,uBAAuB;CAE1B,MAAM,8BAA8B,cAAc;EAChD,MAAM,kBAAkB,gBACpB,wBACA,kBACE,uBAAuB,QAAQ,MAAM,EAAE,YAAY,eAAe,IAClE,KAAA;EACN,MAAM,qBAAqB,IAAI,IAC7B,qBAAqB,KAClB,MAAM,GAAG,EAAE,QAAQ,GAAG,EAAE,QAAQ,YAAY,GAC/C,KAAK,CAAC,CACR;EAEA,MAAM,oBACJ,CAAC,CAAC,yBAAyB,CAAC,UAAU;EACxC,MAAM,YAAY,oBACd,OAAO,WAAW,qBAAqB,IACvC,KAAA;EAEJ,IAAI,CAAC,iBACH;EAGF,OAAO,gBAAgB,QAAgC,KAAK,UAAU;GACpE,MAAM,WAAW,GAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,YAAY;GAE/D,MAAM,oBAAoB,mBAAmB,IAAI,QAAQ,KAAK,MAAM;GAEpE,MAAM,mBAAmB,cAAc,KAAK;GAG5C,IAAI,CAAC,qBAAqB,CAAC,kBACzB,OAAO;GAIT,IAAI,iBAAiB;GACrB,IACE,qBACA,cAAc,KAAA,KACd,aAAa,KACb,MAAM,QAEa;QAAA,iBACjB,MAAM,QACN,MAAM,UACN,MAAM,QAEK,IAAI,WACf,iBAAiB;KACf,GAAG;KACH,QAAQ;IACV;GAAA;GAIJ,IAAI,KAAK,cAAc;GACvB,OAAO;EACT,GAAG,CAAC,CAAC;CACP,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,EAAE,iBAAiB,gBAAgB,kBAAkB,kBACzD,cAAc;EACZ,MAAM,SAAS,iBACb,kBACA,iBAAiB,CAAC,CAAC,QACnB,cACA,iBACA,qBACA,6BACA,aACF;EAEA,IAAI,iBAAiB,QACnB,OAAO;GAAE,GAAG;GAAQ,eAAe;EAAM;EAE3C,MAAM,UAAU,iBAAiB,OAAO,iBAAiB,eAAe;EACxE,OAAO;GACL,GAAG;GACH,iBAAiB;GACjB,eAAe,kBAAkB,QAAQ,IAAI,eAAe;EAC9D;CACF,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAEH,OAAO;EACL,QAAQ,mBAAmB,CAAC;EAC5B;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -11,35 +11,36 @@ const useTokenBalancesQueries = (accountsWithTokens, isBalanceLoadingEnabled) =>
|
|
|
11
11
|
const { keyPrefix } = useWidgetConfig();
|
|
12
12
|
const sdkClient = useSDKClient();
|
|
13
13
|
const firstLoadStartRef = useRef(null);
|
|
14
|
+
const queryConfig = useMemo(() => {
|
|
15
|
+
if (!accountsWithTokens) return [];
|
|
16
|
+
return Object.entries(accountsWithTokens).flatMap(([accountAddress, chainTokens]) => Object.entries(chainTokens).map(([chainIdStr, tokens]) => {
|
|
17
|
+
const chainId = Number(chainIdStr);
|
|
18
|
+
return {
|
|
19
|
+
queryKey: [
|
|
20
|
+
getQueryKey("token-balances", keyPrefix),
|
|
21
|
+
accountAddress,
|
|
22
|
+
chainId,
|
|
23
|
+
tokens.length
|
|
24
|
+
],
|
|
25
|
+
queryFn: async () => {
|
|
26
|
+
if (!accountAddress || !tokens) return [];
|
|
27
|
+
return await getTokenBalances(sdkClient, accountAddress, tokens);
|
|
28
|
+
},
|
|
29
|
+
enabled: isBalanceLoadingEnabled,
|
|
30
|
+
refetchInterval: defaultRefetchInterval,
|
|
31
|
+
staleTime: defaultRefetchInterval,
|
|
32
|
+
placeholderData: keepPreviousData,
|
|
33
|
+
retry: false
|
|
34
|
+
};
|
|
35
|
+
}));
|
|
36
|
+
}, [
|
|
37
|
+
accountsWithTokens,
|
|
38
|
+
isBalanceLoadingEnabled,
|
|
39
|
+
keyPrefix,
|
|
40
|
+
sdkClient
|
|
41
|
+
]);
|
|
14
42
|
return useQueries({
|
|
15
|
-
queries:
|
|
16
|
-
if (!accountsWithTokens) return [];
|
|
17
|
-
return Object.entries(accountsWithTokens).flatMap(([accountAddress, chainTokens]) => Object.entries(chainTokens).map(([chainIdStr, tokens]) => {
|
|
18
|
-
const chainId = Number(chainIdStr);
|
|
19
|
-
return {
|
|
20
|
-
queryKey: [
|
|
21
|
-
getQueryKey("token-balances", keyPrefix),
|
|
22
|
-
accountAddress,
|
|
23
|
-
chainId,
|
|
24
|
-
tokens.length
|
|
25
|
-
],
|
|
26
|
-
queryFn: async () => {
|
|
27
|
-
if (!accountAddress || !tokens) return [];
|
|
28
|
-
return await getTokenBalances(sdkClient, accountAddress, tokens);
|
|
29
|
-
},
|
|
30
|
-
enabled: isBalanceLoadingEnabled,
|
|
31
|
-
refetchInterval: defaultRefetchInterval,
|
|
32
|
-
staleTime: defaultRefetchInterval,
|
|
33
|
-
placeholderData: keepPreviousData,
|
|
34
|
-
retry: false
|
|
35
|
-
};
|
|
36
|
-
}));
|
|
37
|
-
}, [
|
|
38
|
-
accountsWithTokens,
|
|
39
|
-
isBalanceLoadingEnabled,
|
|
40
|
-
keyPrefix,
|
|
41
|
-
sdkClient
|
|
42
|
-
]),
|
|
43
|
+
queries: queryConfig,
|
|
43
44
|
combine: (results) => {
|
|
44
45
|
const now = Date.now();
|
|
45
46
|
if (results.some((result) => result.isLoading) && firstLoadStartRef.current === null) firstLoadStartRef.current = now;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenBalancesQueries.js","names":[],"sources":["../../../src/hooks/useTokenBalancesQueries.ts"],"sourcesContent":["import { getTokenBalances, type TokenExtended } from '@lifi/sdk'\nimport { keepPreviousData, useQueries } from '@tanstack/react-query'\nimport { useMemo, useRef } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { TokenAmount, TokenAmountExtended } from '../types/token.js'\nimport { getQueryKey } from '../utils/queries.js'\n\nconst defaultRefetchInterval = 32_000\n// Max time to hold the skeleton before revealing balances in the multi-chain view.\n// Sits just below the typical full-settle time so the list reveals once, sorted,\n// instead of reordering as each chain streams in.\nconst balanceRevealTimeout = 2_000\n\nexport const useTokenBalancesQueries = (\n accountsWithTokens?: Record<string, Record<number, TokenExtended[]>>,\n isBalanceLoadingEnabled?: boolean\n): {\n data: TokenAmount[] | undefined\n isLoading: boolean\n isError: boolean\n} => {\n const { keyPrefix } = useWidgetConfig()\n const sdkClient = useSDKClient()\n const firstLoadStartRef = useRef<number | null>(null)\n\n const queryConfig = useMemo(() => {\n if (!accountsWithTokens) {\n return []\n }\n return Object.entries(accountsWithTokens).flatMap(\n ([accountAddress, chainTokens]) =>\n Object.entries(chainTokens).map(([chainIdStr, tokens]) => {\n const chainId = Number(chainIdStr)\n return {\n queryKey: [\n getQueryKey('token-balances', keyPrefix),\n accountAddress,\n chainId,\n tokens.length,\n ],\n queryFn: async (): Promise<TokenAmountExtended[]> => {\n if (!accountAddress || !tokens) {\n return []\n }\n return await getTokenBalances(sdkClient, accountAddress, tokens)\n },\n enabled: isBalanceLoadingEnabled,\n refetchInterval: defaultRefetchInterval,\n staleTime: defaultRefetchInterval,\n placeholderData: keepPreviousData,\n // Resolve a failed chain immediately instead of retrying past the reveal\n // window (retries would pop the chain in late and re-sort the list).\n retry: false,\n }\n })\n )\n }, [accountsWithTokens, isBalanceLoadingEnabled, keyPrefix, sdkClient])\n\n const result = useQueries({\n queries: queryConfig,\n combine: (results) => {\n const now = Date.now()\n\n const hasLoadingQueries = results.some((result) => result.isLoading)\n if (hasLoadingQueries && firstLoadStartRef.current === null) {\n firstLoadStartRef.current = now\n }\n\n const allComplete = results.every(\n (result) => result.isSuccess || result.isError\n )\n\n // Reset the start time when all queries complete\n if (allComplete) {\n firstLoadStartRef.current = null\n }\n\n // Calculate time since first load started\n const timeSinceStart = firstLoadStartRef.current\n ? now - firstLoadStartRef.current\n : 0\n\n // Return results once all queries complete, or once the reveal timeout elapses\n const shouldReturnResults =\n allComplete || timeSinceStart >= balanceRevealTimeout\n\n if (shouldReturnResults) {\n const data: TokenAmount[] = results\n .flatMap((result) => result.data || [])\n .filter((token) => token.amount)\n return {\n data,\n isLoading: !allComplete,\n isError: results.some((result) => result.isError),\n }\n }\n\n return {\n data: undefined,\n isLoading: true,\n isError: false,\n }\n },\n })\n\n return result\n}\n"],"mappings":";;;;;;;AAQA,MAAM,yBAAyB;AAI/B,MAAM,uBAAuB;AAE7B,MAAa,2BACX,oBACA,4BAKG;CACH,MAAM,EAAE,cAAc,gBAAgB;CACtC,MAAM,YAAY,aAAa;CAC/B,MAAM,oBAAoB,OAAsB,IAAI;
|
|
1
|
+
{"version":3,"file":"useTokenBalancesQueries.js","names":[],"sources":["../../../src/hooks/useTokenBalancesQueries.ts"],"sourcesContent":["import { getTokenBalances, type TokenExtended } from '@lifi/sdk'\nimport { keepPreviousData, useQueries } from '@tanstack/react-query'\nimport { useMemo, useRef } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { TokenAmount, TokenAmountExtended } from '../types/token.js'\nimport { getQueryKey } from '../utils/queries.js'\n\nconst defaultRefetchInterval = 32_000\n// Max time to hold the skeleton before revealing balances in the multi-chain view.\n// Sits just below the typical full-settle time so the list reveals once, sorted,\n// instead of reordering as each chain streams in.\nconst balanceRevealTimeout = 2_000\n\nexport const useTokenBalancesQueries = (\n accountsWithTokens?: Record<string, Record<number, TokenExtended[]>>,\n isBalanceLoadingEnabled?: boolean\n): {\n data: TokenAmount[] | undefined\n isLoading: boolean\n isError: boolean\n} => {\n const { keyPrefix } = useWidgetConfig()\n const sdkClient = useSDKClient()\n const firstLoadStartRef = useRef<number | null>(null)\n\n const queryConfig = useMemo(() => {\n if (!accountsWithTokens) {\n return []\n }\n return Object.entries(accountsWithTokens).flatMap(\n ([accountAddress, chainTokens]) =>\n Object.entries(chainTokens).map(([chainIdStr, tokens]) => {\n const chainId = Number(chainIdStr)\n return {\n queryKey: [\n getQueryKey('token-balances', keyPrefix),\n accountAddress,\n chainId,\n tokens.length,\n ],\n queryFn: async (): Promise<TokenAmountExtended[]> => {\n if (!accountAddress || !tokens) {\n return []\n }\n return await getTokenBalances(sdkClient, accountAddress, tokens)\n },\n enabled: isBalanceLoadingEnabled,\n refetchInterval: defaultRefetchInterval,\n staleTime: defaultRefetchInterval,\n placeholderData: keepPreviousData,\n // Resolve a failed chain immediately instead of retrying past the reveal\n // window (retries would pop the chain in late and re-sort the list).\n retry: false,\n }\n })\n )\n }, [accountsWithTokens, isBalanceLoadingEnabled, keyPrefix, sdkClient])\n\n const result = useQueries({\n queries: queryConfig,\n combine: (results) => {\n const now = Date.now()\n\n const hasLoadingQueries = results.some((result) => result.isLoading)\n if (hasLoadingQueries && firstLoadStartRef.current === null) {\n firstLoadStartRef.current = now\n }\n\n const allComplete = results.every(\n (result) => result.isSuccess || result.isError\n )\n\n // Reset the start time when all queries complete\n if (allComplete) {\n firstLoadStartRef.current = null\n }\n\n // Calculate time since first load started\n const timeSinceStart = firstLoadStartRef.current\n ? now - firstLoadStartRef.current\n : 0\n\n // Return results once all queries complete, or once the reveal timeout elapses\n const shouldReturnResults =\n allComplete || timeSinceStart >= balanceRevealTimeout\n\n if (shouldReturnResults) {\n const data: TokenAmount[] = results\n .flatMap((result) => result.data || [])\n .filter((token) => token.amount)\n return {\n data,\n isLoading: !allComplete,\n isError: results.some((result) => result.isError),\n }\n }\n\n return {\n data: undefined,\n isLoading: true,\n isError: false,\n }\n },\n })\n\n return result\n}\n"],"mappings":";;;;;;;AAQA,MAAM,yBAAyB;AAI/B,MAAM,uBAAuB;AAE7B,MAAa,2BACX,oBACA,4BAKG;CACH,MAAM,EAAE,cAAc,gBAAgB;CACtC,MAAM,YAAY,aAAa;CAC/B,MAAM,oBAAoB,OAAsB,IAAI;CAEpD,MAAM,cAAc,cAAc;EAChC,IAAI,CAAC,oBACH,OAAO,CAAC;EAEV,OAAO,OAAO,QAAQ,kBAAkB,CAAC,CAAC,SACvC,CAAC,gBAAgB,iBAChB,OAAO,QAAQ,WAAW,CAAC,CAAC,KAAK,CAAC,YAAY,YAAY;GACxD,MAAM,UAAU,OAAO,UAAU;GACjC,OAAO;IACL,UAAU;KACR,YAAY,kBAAkB,SAAS;KACvC;KACA;KACA,OAAO;IACT;IACA,SAAS,YAA4C;KACnD,IAAI,CAAC,kBAAkB,CAAC,QACtB,OAAO,CAAC;KAEV,OAAO,MAAM,iBAAiB,WAAW,gBAAgB,MAAM;IACjE;IACA,SAAS;IACT,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IAGjB,OAAO;GACT;EACF,CAAC,CACL;CACF,GAAG;EAAC;EAAoB;EAAyB;EAAW;CAAS,CAAC;CAiDtE,OA/Ce,WAAW;EACxB,SAAS;EACT,UAAU,YAAY;GACpB,MAAM,MAAM,KAAK,IAAI;GAGrB,IAD0B,QAAQ,MAAM,WAAW,OAAO,SACtC,KAAK,kBAAkB,YAAY,MACrD,kBAAkB,UAAU;GAG9B,MAAM,cAAc,QAAQ,OACzB,WAAW,OAAO,aAAa,OAAO,OACzC;GAGA,IAAI,aACF,kBAAkB,UAAU;GAI9B,MAAM,iBAAiB,kBAAkB,UACrC,MAAM,kBAAkB,UACxB;GAMJ,IAFE,eAAe,kBAAkB,sBAMjC,OAAO;IACL,MAJ0B,QACzB,SAAS,WAAW,OAAO,QAAQ,CAAC,CAAC,CAAC,CACtC,QAAQ,UAAU,MAAM,MAEtB;IACH,WAAW,CAAC;IACZ,SAAS,QAAQ,MAAM,WAAW,OAAO,OAAO;GAClD;GAGF,OAAO;IACL,MAAM,KAAA;IACN,WAAW;IACX,SAAS;GACX;EACF;CACF,CAEY;AACd"}
|
|
@@ -4,7 +4,7 @@ import { TokenAmount } from "../types/token.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Token-selection list without wallet balances - No accounts are resolved and no balance queries are fired.
|
|
6
6
|
*/
|
|
7
|
-
declare const useTokenList: (selectedChainId?: number, formType?: FormType, isAllNetworks?: boolean, search?: string) => {
|
|
7
|
+
export declare const useTokenList: (selectedChainId?: number, formType?: FormType, isAllNetworks?: boolean, search?: string) => {
|
|
8
8
|
tokens: TokenAmount[];
|
|
9
9
|
withCategories: boolean;
|
|
10
10
|
withPinnedTokens: boolean;
|
|
@@ -12,5 +12,4 @@ declare const useTokenList: (selectedChainId?: number, formType?: FormType, isAl
|
|
|
12
12
|
isSearchLoading: boolean;
|
|
13
13
|
};
|
|
14
14
|
//#endregion
|
|
15
|
-
export { useTokenList };
|
|
16
15
|
//# sourceMappingURL=useTokenList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenList.d.ts","names":[],"sources":["../../../src/hooks/useTokenList.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"useTokenList.d.ts","names":[],"sources":["../../../src/hooks/useTokenList.ts"],"mappings":";;;;;;qBAUa,eACX,0BACA,WAAW,UACX,yBACA;EAEA,QAAQ;EACR;EACA;EACA;EACA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isFormItemAllowed } from "../utils/item.js";
|
|
2
2
|
import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
|
|
3
3
|
import { useSDKClient } from "../providers/SDKClientProvider.js";
|
|
4
4
|
import { getQueryKey } from "../utils/queries.js";
|
|
5
|
+
import { getChainTokenAllowSets } from "../utils/token.js";
|
|
5
6
|
import { getToken } from "@lifi/sdk";
|
|
6
7
|
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
7
8
|
//#region src/hooks/useTokenSearch.ts
|
|
@@ -18,17 +19,15 @@ const useTokenSearch = (chainId, tokenQuery, enabled, formType) => {
|
|
|
18
19
|
queryFn: async ({ queryKey: [, chainId, tokenQuery], signal }) => {
|
|
19
20
|
const token = await getToken(sdkClient, chainId, tokenQuery, { signal });
|
|
20
21
|
if (token) {
|
|
21
|
-
|
|
22
|
+
const filteredConfigTokens = getChainTokenAllowSets(configTokens, token.chainId, formType);
|
|
23
|
+
if (!isFormItemAllowed(token, filteredConfigTokens, formType, (t) => t.address.toLowerCase())) return null;
|
|
22
24
|
queryClient.setQueriesData({ queryKey: [getQueryKey("tokens", keyPrefix)] }, (data) => {
|
|
23
25
|
if (!data) return data;
|
|
24
26
|
const chainTokens = data[chainId];
|
|
25
27
|
if (chainTokens?.some((t) => t.address.toLowerCase() === token.address.toLowerCase())) return data;
|
|
26
28
|
return {
|
|
27
29
|
...data,
|
|
28
|
-
[chainId]: [...chainTokens ?? [],
|
|
29
|
-
...token,
|
|
30
|
-
verified: false
|
|
31
|
-
}]
|
|
30
|
+
[chainId]: [...chainTokens ?? [], token]
|
|
32
31
|
};
|
|
33
32
|
});
|
|
34
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenSearch.js","names":[],"sources":["../../../src/hooks/useTokenSearch.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useTokenSearch.js","names":[],"sources":["../../../src/hooks/useTokenSearch.ts"],"sourcesContent":["import { type ChainId, getToken, type TokenExtended } from '@lifi/sdk'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport { isFormItemAllowed } from '../utils/item.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { getChainTokenAllowSets } from '../utils/token.js'\n\nexport const useTokenSearch = (\n chainId?: number,\n tokenQuery?: string,\n enabled?: boolean,\n formType?: FormType\n): {\n token: TokenExtended | undefined\n isLoading: boolean\n} => {\n const queryClient = useQueryClient()\n const { tokens: configTokens, keyPrefix } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n const { data, isLoading } = useQuery({\n queryKey: [getQueryKey('token-search', keyPrefix), chainId, tokenQuery],\n queryFn: async ({ queryKey: [, chainId, tokenQuery], signal }) => {\n const token = await getToken(\n sdkClient,\n chainId as ChainId,\n tokenQuery as string,\n {\n signal,\n }\n )\n\n if (token) {\n // Filter config tokens by chain before checking if token is allowed\n const filteredConfigTokens = getChainTokenAllowSets(\n configTokens,\n token.chainId,\n formType\n )\n\n // Return undefined if the token is denied\n if (\n !isFormItemAllowed(token, filteredConfigTokens, formType, (t) =>\n t.address.toLowerCase()\n )\n ) {\n return null\n }\n\n // Add token to main tokens cache\n queryClient.setQueriesData<TokensByChain>(\n { queryKey: [getQueryKey('tokens', keyPrefix)] },\n (data) => {\n if (!data) {\n return data\n }\n const chainTokens = data[chainId as number]\n if (\n chainTokens?.some(\n (t) => t.address.toLowerCase() === token.address.toLowerCase()\n )\n ) {\n return data\n }\n return {\n ...data,\n [chainId as number]: [...(chainTokens ?? []), token],\n }\n }\n )\n }\n return token as TokenExtended\n },\n\n enabled: Boolean(chainId && tokenQuery && enabled),\n retry: false,\n })\n return {\n token: data || undefined,\n isLoading,\n }\n}\n"],"mappings":";;;;;;;;AAUA,MAAa,kBACX,SACA,YACA,SACA,aAIG;CACH,MAAM,cAAc,eAAe;CACnC,MAAM,EAAE,QAAQ,cAAc,cAAc,gBAAgB;CAC5D,MAAM,YAAY,aAAa;CAE/B,MAAM,EAAE,MAAM,cAAc,SAAS;EACnC,UAAU;GAAC,YAAY,gBAAgB,SAAS;GAAG;GAAS;EAAU;EACtE,SAAS,OAAO,EAAE,UAAU,GAAG,SAAS,aAAa,aAAa;GAChE,MAAM,QAAQ,MAAM,SAClB,WACA,SACA,YACA,EACE,OACF,CACF;GAEA,IAAI,OAAO;IAET,MAAM,uBAAuB,uBAC3B,cACA,MAAM,SACN,QACF;IAGA,IACE,CAAC,kBAAkB,OAAO,sBAAsB,WAAW,MACzD,EAAE,QAAQ,YAAY,CACxB,GAEA,OAAO;IAIT,YAAY,eACV,EAAE,UAAU,CAAC,YAAY,UAAU,SAAS,CAAC,EAAE,IAC9C,SAAS;KACR,IAAI,CAAC,MACH,OAAO;KAET,MAAM,cAAc,KAAK;KACzB,IACE,aAAa,MACV,MAAM,EAAE,QAAQ,YAAY,MAAM,MAAM,QAAQ,YAAY,CAC/D,GAEA,OAAO;KAET,OAAO;MACL,GAAG;OACF,UAAoB,CAAC,GAAI,eAAe,CAAC,GAAI,KAAK;KACrD;IACF,CACF;GACF;GACA,OAAO;EACT;EAEA,SAAS,QAAQ,WAAW,cAAc,OAAO;EACjD,OAAO;CACT,CAAC;CACD,OAAO;EACL,OAAO,QAAQ,KAAA;EACf;CACF;AACF"}
|
|
@@ -2,7 +2,9 @@ import { isItemAllowed } from "../utils/item.js";
|
|
|
2
2
|
import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
|
|
3
3
|
import { useSDKClient } from "../providers/SDKClientProvider.js";
|
|
4
4
|
import { getQueryKey } from "../utils/queries.js";
|
|
5
|
-
import {
|
|
5
|
+
import { useAvailableChains } from "./useAvailableChains.js";
|
|
6
|
+
import { filterAllowedTokens, getNativeTokenAddresses, mergeVerifiedWithSearchTokens } from "../utils/token.js";
|
|
7
|
+
import { isAddressQuery } from "../utils/address.js";
|
|
6
8
|
import { defaultChainIdsByType } from "../utils/chainType.js";
|
|
7
9
|
import { ChainType, getToken, getTokens } from "@lifi/sdk";
|
|
8
10
|
import { useMemo } from "react";
|
|
@@ -13,7 +15,9 @@ const refetchInterval = 3e5;
|
|
|
13
15
|
const useTokens = (formType, search, chainId) => {
|
|
14
16
|
const { tokens: configTokens, chains: chainsConfig, keyPrefix } = useWidgetConfig();
|
|
15
17
|
const sdkClient = useSDKClient();
|
|
16
|
-
const {
|
|
18
|
+
const { getChainTypeFromTokenAddress } = useChainTypeFromAddress();
|
|
19
|
+
const trimmedSearch = search?.trim();
|
|
20
|
+
const isAddressSearch = useMemo(() => isAddressQuery(trimmedSearch, getChainTypeFromTokenAddress), [trimmedSearch, getChainTypeFromTokenAddress]);
|
|
17
21
|
const { data: verifiedTokens, isLoading } = useQuery({
|
|
18
22
|
queryKey: [getQueryKey("tokens", keyPrefix)],
|
|
19
23
|
queryFn: async ({ signal }) => {
|
|
@@ -22,7 +26,8 @@ const useTokens = (formType, search, chainId) => {
|
|
|
22
26
|
ChainType.SVM,
|
|
23
27
|
ChainType.UTXO,
|
|
24
28
|
ChainType.MVM,
|
|
25
|
-
ChainType.TVM
|
|
29
|
+
ChainType.TVM,
|
|
30
|
+
ChainType.STL
|
|
26
31
|
].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types));
|
|
27
32
|
const tokensResponse = await getTokens(sdkClient, {
|
|
28
33
|
chainTypes,
|
|
@@ -33,7 +38,7 @@ const useTokens = (formType, search, chainId) => {
|
|
|
33
38
|
}, { signal });
|
|
34
39
|
return Object.fromEntries(Object.entries(tokensResponse.tokens).map(([chainId, tokens]) => [chainId, tokens.map((token) => ({
|
|
35
40
|
...token,
|
|
36
|
-
|
|
41
|
+
listed: true
|
|
37
42
|
}))]));
|
|
38
43
|
},
|
|
39
44
|
refetchInterval,
|
|
@@ -42,17 +47,19 @@ const useTokens = (formType, search, chainId) => {
|
|
|
42
47
|
const { data: searchTokens, isLoading: isSearchLoading } = useQuery({
|
|
43
48
|
queryKey: [
|
|
44
49
|
getQueryKey("tokens-search", keyPrefix),
|
|
45
|
-
|
|
46
|
-
chainId
|
|
50
|
+
trimmedSearch,
|
|
51
|
+
chainId,
|
|
52
|
+
isAddressSearch
|
|
47
53
|
],
|
|
48
54
|
queryFn: async ({ queryKey, signal }) => {
|
|
49
|
-
const [, searchQuery, searchChainId] = queryKey;
|
|
55
|
+
const [, searchQuery, searchChainId, addressSearch] = queryKey;
|
|
50
56
|
const chainTypes = [
|
|
51
57
|
ChainType.EVM,
|
|
52
58
|
ChainType.SVM,
|
|
53
59
|
ChainType.UTXO,
|
|
54
60
|
ChainType.MVM,
|
|
55
|
-
ChainType.TVM
|
|
61
|
+
ChainType.TVM,
|
|
62
|
+
ChainType.STL
|
|
56
63
|
].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types));
|
|
57
64
|
const tokensResponse = await getTokens(sdkClient, {
|
|
58
65
|
chainTypes,
|
|
@@ -62,38 +69,46 @@ const useTokens = (formType, search, chainId) => {
|
|
|
62
69
|
limit: 1e3,
|
|
63
70
|
minPriceUSD: 1e-6
|
|
64
71
|
}, { signal });
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
if (searchQuery) {
|
|
73
|
+
const chainType = getChainTypeFromTokenAddress(searchQuery);
|
|
74
|
+
const lookupChainId = searchChainId ?? (chainType ? defaultChainIdsByType[chainType] : void 0);
|
|
75
|
+
if (lookupChainId) {
|
|
76
|
+
const existingTokens = tokensResponse.tokens[lookupChainId] ?? [];
|
|
77
|
+
const hasTokenAtAddress = () => {
|
|
78
|
+
const address = searchQuery.toLowerCase();
|
|
79
|
+
return (searchChainId ? [existingTokens] : Object.values(tokensResponse.tokens)).some((tokens) => tokens.some((token) => token.address?.toLowerCase() === address));
|
|
80
|
+
};
|
|
81
|
+
if (addressSearch ? !hasTokenAtAddress() : !existingTokens.length) try {
|
|
82
|
+
const token = await getToken(sdkClient, lookupChainId, searchQuery, { signal });
|
|
83
|
+
if (token) tokensResponse.tokens[lookupChainId] = [...existingTokens, token];
|
|
84
|
+
} catch (error) {
|
|
85
|
+
if (signal.aborted) throw error;
|
|
86
|
+
}
|
|
74
87
|
}
|
|
75
88
|
}
|
|
76
|
-
return
|
|
77
|
-
...token,
|
|
78
|
-
verified: false
|
|
79
|
-
}))]));
|
|
89
|
+
return tokensResponse.tokens;
|
|
80
90
|
},
|
|
81
|
-
enabled: !!
|
|
91
|
+
enabled: !!trimmedSearch,
|
|
82
92
|
refetchInterval,
|
|
83
93
|
staleTime: refetchInterval
|
|
84
94
|
});
|
|
95
|
+
const { chains } = useAvailableChains();
|
|
96
|
+
const nativeTokenAddresses = useMemo(() => getNativeTokenAddresses(chains), [chains]);
|
|
85
97
|
return {
|
|
86
98
|
allTokens: useMemo(() => {
|
|
87
|
-
|
|
99
|
+
const merged = mergeVerifiedWithSearchTokens(verifiedTokens, searchTokens);
|
|
100
|
+
return filterAllowedTokens(merged, configTokens, chainsConfig, formType, nativeTokenAddresses);
|
|
88
101
|
}, [
|
|
89
102
|
verifiedTokens,
|
|
90
103
|
searchTokens,
|
|
91
104
|
configTokens,
|
|
92
105
|
chainsConfig,
|
|
93
|
-
formType
|
|
106
|
+
formType,
|
|
107
|
+
nativeTokenAddresses
|
|
94
108
|
]),
|
|
95
109
|
isLoading,
|
|
96
|
-
isSearchLoading
|
|
110
|
+
isSearchLoading,
|
|
111
|
+
isAddressSearch
|
|
97
112
|
};
|
|
98
113
|
};
|
|
99
114
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokens.js","names":[],"sources":["../../../src/hooks/useTokens.ts"],"sourcesContent":["import {\n ChainType,\n getToken,\n getTokens,\n type TokenExtended,\n type TokensExtendedResponse,\n} from '@lifi/sdk'\nimport { useChainTypeFromAddress } from '@lifi/widget-provider'\nimport { useQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport { defaultChainIdsByType } from '../utils/chainType.js'\nimport { isItemAllowed } from '../utils/item.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport {\n filterAllowedTokens,\n mergeVerifiedWithSearchTokens,\n} from '../utils/token.js'\n\nconst refetchInterval = 300_000\n\nexport const useTokens = (\n formType?: FormType,\n search?: string,\n chainId?: number\n): {\n allTokens: Record<number, TokenExtended[]> | undefined\n isLoading: boolean\n isSearchLoading: boolean\n} => {\n const {\n tokens: configTokens,\n chains: chainsConfig,\n keyPrefix,\n } = useWidgetConfig()\n const sdkClient = useSDKClient()\n const {
|
|
1
|
+
{"version":3,"file":"useTokens.js","names":[],"sources":["../../../src/hooks/useTokens.ts"],"sourcesContent":["import {\n ChainType,\n getToken,\n getTokens,\n type TokenExtended,\n type TokensExtendedResponse,\n} from '@lifi/sdk'\nimport { useChainTypeFromAddress } from '@lifi/widget-provider'\nimport { useQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport { isAddressQuery } from '../utils/address.js'\nimport { defaultChainIdsByType } from '../utils/chainType.js'\nimport { isItemAllowed } from '../utils/item.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport {\n filterAllowedTokens,\n getNativeTokenAddresses,\n mergeVerifiedWithSearchTokens,\n} from '../utils/token.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nconst refetchInterval = 300_000\n\nexport const useTokens = (\n formType?: FormType,\n search?: string,\n chainId?: number\n): {\n allTokens: Record<number, TokenExtended[]> | undefined\n isLoading: boolean\n isSearchLoading: boolean\n /** The search is a contract address, so only the token at that address matches. */\n isAddressSearch: boolean\n} => {\n const {\n tokens: configTokens,\n chains: chainsConfig,\n keyPrefix,\n } = useWidgetConfig()\n const sdkClient = useSDKClient()\n const { getChainTypeFromTokenAddress } = useChainTypeFromAddress()\n // A pasted address often carries a trailing space or newline, which the\n // API rejects. Trim once so the key, the requests and the checks agree.\n const trimmedSearch = search?.trim()\n // Keep this memoized, and out of any per-token loop: a provider validates by\n // parsing, which costs microseconds per call rather than nanoseconds.\n const isAddressSearch = useMemo(\n () => isAddressQuery(trimmedSearch, getChainTypeFromTokenAddress),\n [trimmedSearch, getChainTypeFromTokenAddress]\n )\n\n // Main tokens cache - verified tokens from API\n const { data: verifiedTokens, isLoading } = useQuery({\n queryKey: [getQueryKey('tokens', keyPrefix)],\n queryFn: async ({ signal }) => {\n const chainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n ChainType.STL,\n ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))\n\n const tokensResponse: TokensExtendedResponse = await getTokens(\n sdkClient,\n {\n chainTypes,\n orderBy: 'volumeUSD24H',\n extended: true,\n limit: 1000,\n minPriceUSD: 0.000001,\n },\n { signal }\n )\n\n // `listed` tells a main-list token from a searched one\n const tokens: TokensByChain = Object.fromEntries(\n Object.entries(tokensResponse.tokens).map(([chainId, tokens]) => [\n chainId,\n tokens.map((token) => ({ ...token, listed: true })),\n ])\n )\n\n return tokens\n },\n refetchInterval,\n staleTime: refetchInterval,\n })\n\n // Search tokens cache - unverified tokens from search\n const { data: searchTokens, isLoading: isSearchLoading } = useQuery({\n queryKey: [\n getQueryKey('tokens-search', keyPrefix),\n trimmedSearch,\n chainId,\n isAddressSearch,\n ] as const,\n queryFn: async ({ queryKey, signal }) => {\n const [, searchQuery, searchChainId, addressSearch] = queryKey\n const chainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n ChainType.STL,\n ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))\n\n const tokensResponse: TokensExtendedResponse = await getTokens(\n sdkClient,\n {\n chainTypes,\n orderBy: 'volumeUSD24H',\n extended: true,\n search: searchQuery,\n limit: 1000,\n minPriceUSD: 0.000001,\n },\n { signal }\n )\n\n // Fallback: fetch a single token from the /token endpoint when the\n // search did not deliver one. Look it up on the selected chain, or\n // without one on the default chain of the address format.\n if (searchQuery) {\n const chainType = getChainTypeFromTokenAddress(searchQuery)\n const lookupChainId =\n searchChainId ??\n (chainType ? defaultChainIdsByType[chainType] : undefined)\n if (lookupChainId) {\n const existingTokens = tokensResponse.tokens[lookupChainId] ?? []\n // The search index also matches names, so for an address query\n // impersonators that embed the address can fill the list while the\n // token at that address is missing. Without a selected chain the\n // token can sit on any chain of the response.\n const hasTokenAtAddress = () => {\n const address = searchQuery.toLowerCase()\n const candidates = searchChainId\n ? [existingTokens]\n : Object.values(tokensResponse.tokens)\n return candidates.some((tokens) =>\n tokens.some((token) => token.address?.toLowerCase() === address)\n )\n }\n const isTokenMissing = addressSearch\n ? !hasTokenAtAddress()\n : !existingTokens.length\n if (isTokenMissing) {\n try {\n const token = await getToken(\n sdkClient,\n lookupChainId,\n searchQuery,\n { signal }\n )\n if (token) {\n tokensResponse.tokens[lookupChainId] = [\n ...existingTokens,\n token,\n ]\n }\n } catch (error) {\n // A guessed chain may not hold the token (HTTP 400). Keep the\n // search results instead of failing the whole query.\n if (signal.aborted) {\n throw error\n }\n }\n }\n }\n }\n\n return tokensResponse.tokens as TokensByChain\n },\n enabled: !!trimmedSearch,\n refetchInterval,\n staleTime: refetchInterval,\n })\n\n const { chains } = useAvailableChains()\n const nativeTokenAddresses = useMemo(\n () => getNativeTokenAddresses(chains),\n [chains]\n )\n\n // Merge tokens at read time - single place where caches are combined\n const allTokens = useMemo(() => {\n const merged = mergeVerifiedWithSearchTokens(verifiedTokens, searchTokens)\n return filterAllowedTokens(\n merged,\n configTokens,\n chainsConfig,\n formType,\n nativeTokenAddresses\n )\n }, [\n verifiedTokens,\n searchTokens,\n configTokens,\n chainsConfig,\n formType,\n nativeTokenAddresses,\n ])\n\n return {\n allTokens,\n isLoading,\n isSearchLoading,\n isAddressSearch,\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAyBA,MAAM,kBAAkB;AAExB,MAAa,aACX,UACA,QACA,YAOG;CACH,MAAM,EACJ,QAAQ,cACR,QAAQ,cACR,cACE,gBAAgB;CACpB,MAAM,YAAY,aAAa;CAC/B,MAAM,EAAE,iCAAiC,wBAAwB;CAGjE,MAAM,gBAAgB,QAAQ,KAAK;CAGnC,MAAM,kBAAkB,cAChB,eAAe,eAAe,4BAA4B,GAChE,CAAC,eAAe,4BAA4B,CAC9C;CAGA,MAAM,EAAE,MAAM,gBAAgB,cAAc,SAAS;EACnD,UAAU,CAAC,YAAY,UAAU,SAAS,CAAC;EAC3C,SAAS,OAAO,EAAE,aAAa;GAC7B,MAAM,aAAa;IACjB,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;GACZ,CAAC,CAAC,QAAQ,cAAc,cAAc,WAAW,cAAc,KAAK,CAAC;GAErE,MAAM,iBAAyC,MAAM,UACnD,WACA;IACE;IACA,SAAS;IACT,UAAU;IACV,OAAO;IACP,aAAa;GACf,GACA,EAAE,OAAO,CACX;GAUA,OAP8B,OAAO,YACnC,OAAO,QAAQ,eAAe,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,YAAY,CAC/D,SACA,OAAO,KAAK,WAAW;IAAE,GAAG;IAAO,QAAQ;GAAK,EAAE,CACpD,CAAC,CAGS;EACd;EACA;EACA,WAAW;CACb,CAAC;CAGD,MAAM,EAAE,MAAM,cAAc,WAAW,oBAAoB,SAAS;EAClE,UAAU;GACR,YAAY,iBAAiB,SAAS;GACtC;GACA;GACA;EACF;EACA,SAAS,OAAO,EAAE,UAAU,aAAa;GACvC,MAAM,GAAG,aAAa,eAAe,iBAAiB;GACtD,MAAM,aAAa;IACjB,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;GACZ,CAAC,CAAC,QAAQ,cAAc,cAAc,WAAW,cAAc,KAAK,CAAC;GAErE,MAAM,iBAAyC,MAAM,UACnD,WACA;IACE;IACA,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,aAAa;GACf,GACA,EAAE,OAAO,CACX;GAKA,IAAI,aAAa;IACf,MAAM,YAAY,6BAA6B,WAAW;IAC1D,MAAM,gBACJ,kBACC,YAAY,sBAAsB,aAAa,KAAA;IAClD,IAAI,eAAe;KACjB,MAAM,iBAAiB,eAAe,OAAO,kBAAkB,CAAC;KAKhE,MAAM,0BAA0B;MAC9B,MAAM,UAAU,YAAY,YAAY;MAIxC,QAHmB,gBACf,CAAC,cAAc,IACf,OAAO,OAAO,eAAe,MAAM,EAAA,CACrB,MAAM,WACtB,OAAO,MAAM,UAAU,MAAM,SAAS,YAAY,MAAM,OAAO,CACjE;KACF;KAIA,IAHuB,gBACnB,CAAC,kBAAkB,IACnB,CAAC,eAAe,QAElB,IAAI;MACF,MAAM,QAAQ,MAAM,SAClB,WACA,eACA,aACA,EAAE,OAAO,CACX;MACA,IAAI,OACF,eAAe,OAAO,iBAAiB,CACrC,GAAG,gBACH,KACF;KAEJ,SAAS,OAAO;MAGd,IAAI,OAAO,SACT,MAAM;KAEV;IAEJ;GACF;GAEA,OAAO,eAAe;EACxB;EACA,SAAS,CAAC,CAAC;EACX;EACA,WAAW;CACb,CAAC;CAED,MAAM,EAAE,WAAW,mBAAmB;CACtC,MAAM,uBAAuB,cACrB,wBAAwB,MAAM,GACpC,CAAC,MAAM,CACT;CAqBA,OAAO;EACL,WAnBgB,cAAc;GAC9B,MAAM,SAAS,8BAA8B,gBAAgB,YAAY;GACzE,OAAO,oBACL,QACA,cACA,cACA,UACA,oBACF;EACF,GAAG;GACD;GACA;GACA;GACA;GACA;GACA;EACF,CAGU;EACR;EACA;EACA;CACF;AACF"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ToolsResponse } from "@lifi/sdk";
|
|
2
2
|
//#region src/hooks/useTools.d.ts
|
|
3
|
-
declare const useTools: () => {
|
|
3
|
+
export declare const useTools: () => {
|
|
4
4
|
tools: ToolsResponse | undefined;
|
|
5
5
|
};
|
|
6
6
|
//#endregion
|
|
7
|
-
export { useTools };
|
|
8
7
|
//# sourceMappingURL=useTools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTools.d.ts","names":[],"sources":["../../../src/hooks/useTools.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"useTools.d.ts","names":[],"sources":["../../../src/hooks/useTools.ts"],"mappings":";;qBAQa;EAAiB,OAAO"}
|
|
@@ -6,7 +6,8 @@ import { useMediaQuery } from "@mui/material";
|
|
|
6
6
|
const defaultExpandableWidth = 852;
|
|
7
7
|
const useWideVariant = () => {
|
|
8
8
|
const config = useWidgetConfig();
|
|
9
|
-
const
|
|
9
|
+
const activeTab = useNavigationTabsStore((store) => store.activeTab);
|
|
10
|
+
const variant = getTabVariant(config, activeTab);
|
|
10
11
|
const expandableAllowed = useMediaQuery((theme) => theme.breakpoints.up(defaultExpandableWidth));
|
|
11
12
|
return variant === "wide" && expandableAllowed && !config.showSingleRoute;
|
|
12
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWideVariant.js","names":[],"sources":["../../../src/hooks/useWideVariant.ts"],"sourcesContent":["import type { Theme } from '@mui/material'\nimport { useMediaQuery } from '@mui/material'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useNavigationTabsStore } from '../stores/navigationTabs/useNavigationTabsStore.js'\nimport { getTabVariant } from '../stores/navigationTabs/utils.js'\n\nconst defaultExpandableWidth = 852\n\nexport const useWideVariant = (): boolean => {\n const config = useWidgetConfig()\n const activeTab = useNavigationTabsStore((store) => store.activeTab)\n // The active tab can pin its own variant (e.g. the limit tab is compact),\n // falling back to the widget config's variant when it doesn't.\n const variant = getTabVariant(config, activeTab)\n const expandableAllowed = useMediaQuery((theme: Theme) =>\n theme.breakpoints.up(defaultExpandableWidth)\n )\n return variant === 'wide' && expandableAllowed && !config.showSingleRoute\n}\n"],"mappings":";;;;;AAMA,MAAM,yBAAyB;AAE/B,MAAa,uBAAgC;CAC3C,MAAM,SAAS,gBAAgB;
|
|
1
|
+
{"version":3,"file":"useWideVariant.js","names":[],"sources":["../../../src/hooks/useWideVariant.ts"],"sourcesContent":["import type { Theme } from '@mui/material'\nimport { useMediaQuery } from '@mui/material'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useNavigationTabsStore } from '../stores/navigationTabs/useNavigationTabsStore.js'\nimport { getTabVariant } from '../stores/navigationTabs/utils.js'\n\nconst defaultExpandableWidth = 852\n\nexport const useWideVariant = (): boolean => {\n const config = useWidgetConfig()\n const activeTab = useNavigationTabsStore((store) => store.activeTab)\n // The active tab can pin its own variant (e.g. the limit tab is compact),\n // falling back to the widget config's variant when it doesn't.\n const variant = getTabVariant(config, activeTab)\n const expandableAllowed = useMediaQuery((theme: Theme) =>\n theme.breakpoints.up(defaultExpandableWidth)\n )\n return variant === 'wide' && expandableAllowed && !config.showSingleRoute\n}\n"],"mappings":";;;;;AAMA,MAAM,yBAAyB;AAE/B,MAAa,uBAAgC;CAC3C,MAAM,SAAS,gBAAgB;CAC/B,MAAM,YAAY,wBAAwB,UAAU,MAAM,SAAS;CAGnE,MAAM,UAAU,cAAc,QAAQ,SAAS;CAC/C,MAAM,oBAAoB,eAAe,UACvC,MAAM,YAAY,GAAG,sBAAsB,CAC7C;CACA,OAAO,YAAY,UAAU,qBAAqB,CAAC,OAAO;AAC5D"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { WidgetConfig } from "../types/widget.js";
|
|
2
2
|
import { ExtendedChain } from "@lifi/sdk";
|
|
3
3
|
//#region src/hooks/useWidgetChains.d.ts
|
|
4
|
-
declare const useWidgetChains: (widgetConfig: WidgetConfig) => {
|
|
4
|
+
export declare const useWidgetChains: (widgetConfig: WidgetConfig) => {
|
|
5
5
|
chains: ExtendedChain[] | undefined;
|
|
6
6
|
getChainById: (chainId?: number, chains?: ExtendedChain[]) => ExtendedChain | undefined;
|
|
7
7
|
isLoading: boolean;
|
|
8
8
|
};
|
|
9
9
|
//#endregion
|
|
10
|
-
export { useWidgetChains };
|
|
11
10
|
//# sourceMappingURL=useWidgetChains.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWidgetChains.d.ts","names":[],"sources":["../../../src/hooks/useWidgetChains.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useWidgetChains.d.ts","names":[],"sources":["../../../src/hooks/useWidgetChains.ts"],"mappings":";;;qBAIa,kBACX,cAAc;EAEd,QAAQ;EACR,eACE,kBACA,SAAS,oBACN;EACL"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { WidgetEvents } from "../types/events.js";
|
|
2
2
|
import EventEmitter from "eventemitter3";
|
|
3
3
|
//#region src/hooks/useWidgetEvents.d.ts
|
|
4
|
-
type WidgetEventEmitter = EventEmitter<WidgetEvents>;
|
|
5
|
-
declare const widgetEvents: WidgetEventEmitter;
|
|
6
|
-
declare const useWidgetEvents: () => WidgetEventEmitter;
|
|
4
|
+
export type WidgetEventEmitter = EventEmitter<WidgetEvents>;
|
|
5
|
+
export declare const widgetEvents: WidgetEventEmitter;
|
|
6
|
+
export declare const useWidgetEvents: () => WidgetEventEmitter;
|
|
7
7
|
//#endregion
|
|
8
|
-
export { WidgetEventEmitter, useWidgetEvents, widgetEvents };
|
|
9
8
|
//# sourceMappingURL=useWidgetEvents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWidgetEvents.d.ts","names":[],"sources":["../../../src/hooks/useWidgetEvents.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useWidgetEvents.d.ts","names":[],"sources":["../../../src/hooks/useWidgetEvents.ts"],"mappings":";;;YAGY,qBAAqB,aAAa;qBAEjC,cAAc;qBAEd,uBAAsB"}
|