@lifi/widget 4.0.0-beta.14 → 4.0.0-beta.17

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.
Files changed (206) hide show
  1. package/dist/esm/AppDefault.js +31 -29
  2. package/dist/esm/AppDefault.js.map +1 -1
  3. package/dist/esm/AppLayout.js +2 -2
  4. package/dist/esm/AppLayout.js.map +1 -1
  5. package/dist/esm/components/AmountInput/AmountInput.js +2 -2
  6. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  7. package/dist/esm/components/AppContainer.js +3 -3
  8. package/dist/esm/components/AppContainer.js.map +1 -1
  9. package/dist/esm/components/Chains/AllChainsAvatar.js +6 -0
  10. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  11. package/dist/esm/components/ContractComponent/ItemPrice.js +1 -1
  12. package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
  13. package/dist/esm/components/ContractComponent/NFT/NFTBase.js +1 -1
  14. package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
  15. package/dist/esm/components/Expansion/Expansion.js +4 -4
  16. package/dist/esm/components/Expansion/Expansion.js.map +1 -1
  17. package/dist/esm/components/Header/ActivitiesButton.js +1 -1
  18. package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
  19. package/dist/esm/components/Header/Header.js +2 -2
  20. package/dist/esm/components/Header/Header.js.map +1 -1
  21. package/dist/esm/components/Header/NavigationHeader.js +3 -3
  22. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  23. package/dist/esm/components/Header/WalletHeader.js +3 -3
  24. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  25. package/dist/esm/components/IconTypography.js.map +1 -1
  26. package/dist/esm/components/Messages/AlertMessage.js +1 -1
  27. package/dist/esm/components/Messages/AlertMessage.js.map +1 -1
  28. package/dist/esm/components/PageEntered.js +2 -2
  29. package/dist/esm/components/PageEntered.js.map +1 -1
  30. package/dist/esm/components/RouteCard/RouteCard.js +2 -2
  31. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  32. package/dist/esm/components/RouteCard/RouteCardEssentials.js +10 -4
  33. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  34. package/dist/esm/components/RouteCard/RouteToken.js +2 -2
  35. package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
  36. package/dist/esm/components/Routes/RoutesExpanded.js +3 -3
  37. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  38. package/dist/esm/components/SelectChainAndToken.js +8 -5
  39. package/dist/esm/components/SelectChainAndToken.js.map +1 -1
  40. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js +1 -2
  41. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  42. package/dist/esm/components/SendToWallet/SendToWalletButton.js +3 -3
  43. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  44. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js +3 -3
  45. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  46. package/dist/esm/components/Step/Step.js +20 -9
  47. package/dist/esm/components/Step/Step.js.map +1 -1
  48. package/dist/esm/components/Step/StepActions.js +2 -2
  49. package/dist/esm/components/Step/StepActions.js.map +1 -1
  50. package/dist/esm/components/StepActions/StepActions.js +2 -2
  51. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  52. package/dist/esm/components/Timer/TimerContent.js +1 -0
  53. package/dist/esm/components/Timer/TimerContent.js.map +1 -1
  54. package/dist/esm/components/Token/Token.js +2 -2
  55. package/dist/esm/components/Token/Token.js.map +1 -1
  56. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +6 -4
  57. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  58. package/dist/esm/components/TokenList/TokenList.js +2 -2
  59. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  60. package/dist/esm/components/TokenList/useTokenSelect.js +2 -2
  61. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  62. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +2 -3
  63. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  64. package/dist/esm/components/TransactionDetails.js +5 -2
  65. package/dist/esm/components/TransactionDetails.js.map +1 -1
  66. package/dist/esm/config/version.d.ts +1 -1
  67. package/dist/esm/config/version.js +1 -1
  68. package/dist/esm/config/version.js.map +1 -1
  69. package/dist/esm/hooks/useAddressValidation.js +3 -8
  70. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  71. package/dist/esm/hooks/useAvailableChains.js +2 -1
  72. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  73. package/dist/esm/hooks/useContactSupport.js +3 -3
  74. package/dist/esm/hooks/useContactSupport.js.map +1 -1
  75. package/dist/esm/hooks/useExplorer.js +15 -4
  76. package/dist/esm/hooks/useExplorer.js.map +1 -1
  77. package/dist/esm/hooks/useGasRecommendation.js +2 -2
  78. package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
  79. package/dist/esm/hooks/useGasRefuel.js +2 -2
  80. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  81. package/dist/esm/hooks/useGasSufficiency.js +2 -2
  82. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  83. package/dist/esm/hooks/useHasChainExpansion.js +3 -3
  84. package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
  85. package/dist/esm/hooks/useListHeight.js +2 -2
  86. package/dist/esm/hooks/useListHeight.js.map +1 -1
  87. package/dist/esm/hooks/useRouteExecution.js +5 -5
  88. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  89. package/dist/esm/hooks/useRoutes.js +4 -4
  90. package/dist/esm/hooks/useRoutes.js.map +1 -1
  91. package/dist/esm/hooks/useToAddressRequirements.js +2 -2
  92. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  93. package/dist/esm/hooks/useToAddressReset.js +2 -2
  94. package/dist/esm/hooks/useToAddressReset.js.map +1 -1
  95. package/dist/esm/hooks/useTokenBalances.js +2 -2
  96. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  97. package/dist/esm/hooks/useTokens.js +4 -2
  98. package/dist/esm/hooks/useTokens.js.map +1 -1
  99. package/dist/esm/hooks/useTransactionList.js +2 -3
  100. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  101. package/dist/esm/i18n/en.json +3 -0
  102. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -2
  103. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  104. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js +1 -1
  105. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
  106. package/dist/esm/pages/MainPage/MainPage.js +6 -6
  107. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  108. package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
  109. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  110. package/dist/esm/pages/RoutesPage/RoutesPage.js +3 -3
  111. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  112. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +3 -3
  113. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  114. package/dist/esm/pages/SendToWallet/BookmarksPage.js +1 -1
  115. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  116. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +1 -1
  117. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  118. package/dist/esm/pages/SendToWallet/SendToWalletPage.js +6 -6
  119. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  120. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +2 -2
  121. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  122. package/dist/esm/pages/SettingsPage/LanguageSetting.js +2 -2
  123. package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
  124. package/dist/esm/pages/SettingsPage/SettingsPage.js +2 -2
  125. package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
  126. package/dist/esm/pages/SettingsPage/ThemeSettings.js +2 -2
  127. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  128. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js +2 -2
  129. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
  130. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +2 -2
  131. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  132. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +1 -1
  133. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  134. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +20 -21
  135. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  136. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js +5 -6
  137. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
  138. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +14 -4
  139. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  140. package/dist/esm/pages/TransactionPage/TransactionPage.js +15 -19
  141. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  142. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +7 -3
  143. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
  144. package/dist/esm/stores/chains/ChainOrderStore.js +2 -2
  145. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  146. package/dist/esm/stores/chains/createChainOrderStore.js +2 -2
  147. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  148. package/dist/esm/stores/form/useFieldActions.js +3 -3
  149. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  150. package/dist/esm/stores/form/useFormRef.js +2 -2
  151. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  152. package/dist/esm/stores/routes/createRouteExecutionStore.js +8 -9
  153. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  154. package/dist/esm/stores/routes/useRouteExecutionIndicator.js +2 -3
  155. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  156. package/dist/esm/stores/settings/createSettingsStore.js +1 -5
  157. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  158. package/dist/esm/stores/settings/useSettingsActions.js +2 -2
  159. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  160. package/dist/esm/themes/createTheme.js +4 -4
  161. package/dist/esm/themes/createTheme.js.map +1 -1
  162. package/dist/esm/types/events.d.ts +0 -5
  163. package/dist/esm/types/events.d.ts.map +1 -1
  164. package/dist/esm/types/events.js +0 -4
  165. package/dist/esm/types/events.js.map +1 -1
  166. package/dist/esm/types/widget.d.ts +1 -5
  167. package/dist/esm/types/widget.d.ts.map +1 -1
  168. package/dist/esm/types/widget.js.map +1 -1
  169. package/dist/esm/utils/elements.js +5 -12
  170. package/dist/esm/utils/elements.js.map +1 -1
  171. package/package.json +7 -7
  172. package/src/AppDefault.tsx +9 -11
  173. package/src/components/Chains/AllChainsAvatar.tsx +6 -0
  174. package/src/components/ContractComponent/ItemPrice.tsx +1 -1
  175. package/src/components/ContractComponent/NFT/NFTBase.tsx +1 -1
  176. package/src/components/Header/ActivitiesButton.tsx +1 -1
  177. package/src/components/IconTypography.ts +8 -8
  178. package/src/components/Messages/AlertMessage.tsx +1 -1
  179. package/src/components/RouteCard/RouteCardEssentials.tsx +2 -2
  180. package/src/components/SelectChainAndToken.tsx +1 -1
  181. package/src/components/Step/Step.tsx +6 -7
  182. package/src/components/Timer/TimerContent.tsx +1 -0
  183. package/src/components/Token/Token.tsx +2 -2
  184. package/src/components/TokenList/TokenDetailsSheetContent.tsx +6 -4
  185. package/src/components/TransactionCard/ActiveTransactionCard.tsx +1 -1
  186. package/src/components/TransactionDetails.tsx +1 -1
  187. package/src/config/version.ts +1 -1
  188. package/src/hooks/useAvailableChains.ts +1 -0
  189. package/src/hooks/useExplorer.ts +16 -5
  190. package/src/hooks/useTokens.ts +2 -0
  191. package/src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx +1 -1
  192. package/src/pages/MainPage/MainPage.tsx +3 -3
  193. package/src/pages/RoutesPage/RoutesPage.tsx +6 -1
  194. package/src/pages/SendToWallet/BookmarksPage.tsx +1 -1
  195. package/src/pages/SendToWallet/RecentWalletsPage.tsx +1 -1
  196. package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +1 -1
  197. package/src/pages/TransactionPage/StatusBottomSheet.tsx +1 -1
  198. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +27 -5
  199. package/src/pages/TransactionPage/TransactionPage.tsx +2 -9
  200. package/src/providers/WalletProvider/useExternalWalletProvider.ts +9 -1
  201. package/src/stores/settings/createSettingsStore.ts +1 -9
  202. package/src/themes/createTheme.ts +4 -6
  203. package/src/types/events.ts +0 -5
  204. package/src/types/widget.ts +1 -4
  205. package/dist/esm/stores/routes/types.js +0 -14
  206. package/dist/esm/stores/routes/types.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { useWidgetEvents } from "./useWidgetEvents.js";
2
- import { WidgetEvent } from "../types/events.js";
2
+ import "../types/events.js";
3
3
  import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
4
4
  import { useSwapOnly } from "./useSwapOnly.js";
5
5
  import { useFieldValues } from "../stores/form/useFieldValues.js";
@@ -247,15 +247,15 @@ const useRoutes = ({ observableRoute } = {}) => {
247
247
  const initialRoutes = routesResult?.routes ?? [];
248
248
  if (shouldUseRelayerQuote && initialRoutes.length) {
249
249
  setIntermediateRoutes(queryKey, initialRoutes);
250
- emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes);
250
+ emitter.emit("availableRoutes", initialRoutes);
251
251
  } else if (shouldUseMainRoutes) {
252
- emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes);
252
+ emitter.emit("availableRoutes", initialRoutes);
253
253
  return initialRoutes;
254
254
  }
255
255
  const relayerRouteResult = await relayerQuotePromise;
256
256
  if (relayerRouteResult) {
257
257
  initialRoutes.splice(1, 0, relayerRouteResult);
258
- emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes);
258
+ emitter.emit("availableRoutes", initialRoutes);
259
259
  }
260
260
  return initialRoutes;
261
261
  },
@@ -1 +1 @@
1
- {"version":3,"file":"useRoutes.js","names":[],"sources":["../../../src/hooks/useRoutes.ts"],"sourcesContent":["import type { ExtendedChain, Route, Token } from '@lifi/sdk'\nimport {\n ChainType,\n convertQuoteToRoute,\n getContractCallsQuote,\n getRelayerQuote,\n getRoutes,\n LiFiErrorCode,\n parseUnits,\n} from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport {\n useChainTypeFromAddress,\n useEthereumContext,\n} from '@lifi/widget-provider'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useCallback, useMemo } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { useIntermediateRoutesStore } from '../stores/routes/useIntermediateRoutesStore.js'\nimport { useSetExecutableRoute } from '../stores/routes/useSetExecutableRoute.js'\nimport { defaultSlippage } from '../stores/settings/createSettingsStore.js'\nimport { useSettings } from '../stores/settings/useSettings.js'\nimport { WidgetEvent } from '../types/events.js'\nimport type { TokensByChain } from '../types/token.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { updateTokenInCache } from '../utils/token.js'\nimport { useChain } from './useChain.js'\nimport { useDebouncedWatch } from './useDebouncedWatch.js'\nimport { useGasRefuel } from './useGasRefuel.js'\nimport { useIsBatchingSupported } from './useIsBatchingSupported.js'\nimport { useSwapOnly } from './useSwapOnly.js'\nimport { useToken } from './useToken.js'\nimport { useWidgetEvents } from './useWidgetEvents.js'\n\nconst refetchTime = 60_000\n\ninterface RoutesProps {\n observableRoute?: Route\n}\n\nexport const useRoutes = ({\n observableRoute,\n}: RoutesProps = {}): {\n routes: Route[] | undefined\n isLoading: boolean\n isFetching: boolean\n isFetched: boolean\n dataUpdatedAt: number\n refetchTime: number\n refetch: () => void\n fromChain: ExtendedChain | undefined\n toChain: ExtendedChain | undefined\n queryKey: readonly unknown[]\n setReviewableRoute: (route: Route) => void\n} => {\n const {\n subvariant,\n subvariantOptions,\n contractTool,\n bridges,\n exchanges,\n fee,\n feeConfig,\n useRelayerRoutes,\n keyPrefix,\n } = useWidgetConfig()\n const sdkClient = useSDKClient()\n const setExecutableRoute = useSetExecutableRoute()\n const queryClient = useQueryClient()\n const emitter = useWidgetEvents()\n const swapOnly = useSwapOnly()\n const {\n disabledBridges,\n disabledExchanges,\n enabledBridges,\n enabledExchanges,\n enabledAutoRefuel,\n routePriority,\n slippage,\n } = useSettings([\n 'disabledBridges',\n 'disabledExchanges',\n 'enabledBridges',\n 'enabledExchanges',\n 'enabledAutoRefuel',\n 'routePriority',\n 'slippage',\n ])\n const [fromTokenAmount] = useDebouncedWatch(500, 'fromAmount')\n const [\n fromChainId,\n fromTokenAddress,\n toAddress,\n toTokenAmount,\n toChainId,\n toTokenAddress,\n contractCalls,\n ] = useFieldValues(\n 'fromChain',\n 'fromToken',\n 'toAddress',\n 'toAmount',\n 'toChain',\n 'toToken',\n 'contractCalls'\n )\n const { token: fromToken } = useToken(fromChainId, fromTokenAddress)\n const { token: toToken } = useToken(toChainId, toTokenAddress)\n const { chain: fromChain } = useChain(fromChainId)\n const { chain: toChain } = useChain(toChainId)\n const { enabled: enabledRefuel, fromAmount: gasRecommendationFromAmount } =\n useGasRefuel()\n const { getChainTypeFromAddress } = useChainTypeFromAddress()\n const { isGaslessStep, disableMessageSigning } = useEthereumContext()\n const { account } = useAccount({ chainType: fromChain?.chainType })\n const { isBatchingSupported, isBatchingSupportedLoading } =\n useIsBatchingSupported(fromChain, account.address)\n\n const hasAmount = Number(fromTokenAmount) > 0 || Number(toTokenAmount) > 0\n\n const contractCallQuoteEnabled: boolean =\n subvariant === 'custom' ? Boolean(contractCalls && account.address) : true\n\n // When we bridge between ecosystems we need to be sure toAddress is set and has the same chainType as toChain\n // If toAddress is set, it must have the same chainType as toChain\n const hasToAddressAndChainTypeSatisfied: boolean =\n !!toChain &&\n !!toAddress &&\n getChainTypeFromAddress(toAddress) === toChain.chainType\n // We need to check for toAddress only if it is set\n const isToAddressSatisfied = toAddress\n ? hasToAddressAndChainTypeSatisfied\n : true\n\n // toAddress might be an empty string, but we need to pass undefined if there is no value\n const toWalletAddress = toAddress || undefined\n\n // We need to send the full allowed tools array if custom tool settings are applied\n const allowedBridges =\n bridges?.allow?.length || bridges?.deny?.length ? enabledBridges : undefined\n const allowedExchanges =\n exchanges?.allow?.length || exchanges?.deny?.length\n ? enabledExchanges\n : undefined\n const allowSwitchChain = sdkClient.config?.routeOptions?.allowSwitchChain\n\n const isEnabled =\n Boolean(Number(fromChain?.id)) &&\n Boolean(Number(toChain?.id)) &&\n Boolean(fromToken?.address) &&\n Boolean(toToken?.address) &&\n !Number.isNaN(slippage) &&\n hasAmount &&\n isToAddressSatisfied &&\n contractCallQuoteEnabled &&\n !isBatchingSupportedLoading\n\n // Some values should be strictly typed and isEnabled ensures that\n const queryKey = useMemo(\n () =>\n [\n getQueryKey('routes', keyPrefix),\n account.address,\n fromChain?.id as number,\n fromToken?.address as string,\n fromTokenAmount,\n toWalletAddress,\n toChain?.id as number,\n toToken?.address as string,\n toTokenAmount,\n contractCalls,\n slippage,\n swapOnly,\n disabledBridges,\n disabledExchanges,\n allowedBridges,\n allowedExchanges,\n routePriority,\n subvariant,\n allowSwitchChain,\n enabledRefuel && enabledAutoRefuel,\n gasRecommendationFromAmount,\n feeConfig?.fee || fee,\n disableMessageSigning,\n !!isBatchingSupported,\n observableRoute?.id,\n ] as const,\n [\n keyPrefix,\n account.address,\n fromChain?.id,\n fromToken?.address,\n fromTokenAmount,\n toWalletAddress,\n toChain?.id,\n toToken?.address,\n toTokenAmount,\n contractCalls,\n slippage,\n swapOnly,\n disabledBridges,\n disabledExchanges,\n allowedBridges,\n allowedExchanges,\n routePriority,\n subvariant,\n allowSwitchChain,\n enabledRefuel,\n enabledAutoRefuel,\n gasRecommendationFromAmount,\n feeConfig?.fee,\n fee,\n disableMessageSigning,\n isBatchingSupported,\n observableRoute?.id,\n ]\n )\n\n const { getIntermediateRoutes, setIntermediateRoutes } =\n useIntermediateRoutesStore()\n\n const { data, isLoading, isFetching, isFetched, dataUpdatedAt, refetch } =\n useQuery({\n queryKey,\n queryFn: async ({\n queryKey: [\n _,\n fromAddress,\n fromChainId,\n fromTokenAddress,\n fromTokenAmount,\n toAddress,\n toChainId,\n toTokenAddress,\n toTokenAmount,\n contractCalls,\n slippage = defaultSlippage,\n swapOnly,\n disabledBridges,\n disabledExchanges,\n allowedBridges,\n allowedExchanges,\n routePriority,\n subvariant,\n allowSwitchChain,\n enabledRefuel,\n gasRecommendationFromAmount,\n fee,\n disableMessageSigning,\n isBatchingSupported,\n // _observableRouteId must be the last element in the query key\n _observableRouteId,\n ],\n signal,\n }) => {\n const fromAmount = parseUnits(fromTokenAmount, fromToken!.decimals)\n const toAmount = parseUnits(toTokenAmount, toToken!.decimals)\n const formattedSlippage = slippage\n ? Number.parseFloat(slippage) / 100\n : defaultSlippage\n\n const allowBridges = swapOnly\n ? []\n : observableRoute\n ? observableRoute.steps.flatMap((step) =>\n step.includedSteps.reduce((toolKeys, includedStep) => {\n if (includedStep.type === 'cross') {\n toolKeys.push(includedStep.toolDetails.key)\n }\n return toolKeys\n }, [] as string[])\n )\n : allowedBridges\n const allowExchanges = observableRoute\n ? observableRoute.steps.flatMap((step) =>\n step.includedSteps.reduce((toolKeys, includedStep) => {\n if (includedStep.type === 'swap') {\n toolKeys.push(includedStep.toolDetails.key)\n }\n return toolKeys\n }, [] as string[])\n )\n : allowedExchanges\n\n const calculatedFee = await feeConfig?.calculateFee?.({\n fromChain: fromChain!,\n toChain: toChain!,\n fromToken: fromToken!,\n toToken: toToken!,\n fromAddress,\n toAddress,\n fromAmount,\n toAmount,\n slippage: formattedSlippage,\n })\n\n if (subvariant === 'custom' && contractCalls && toAmount) {\n const contractCallQuote = await getContractCallsQuote(\n sdkClient,\n {\n // Contract calls are enabled only when fromAddress is set\n fromAddress: fromAddress as string,\n fromChain: fromChainId,\n fromToken: fromTokenAddress,\n toAmount: toAmount.toString(),\n toChain: toChainId,\n toToken: toTokenAddress,\n contractCalls,\n denyBridges: disabledBridges.length ? disabledBridges : undefined,\n denyExchanges: disabledExchanges.length\n ? disabledExchanges\n : undefined,\n allowBridges,\n allowExchanges,\n toFallbackAddress: toAddress,\n slippage: formattedSlippage,\n fee: calculatedFee || fee,\n },\n { signal }\n )\n\n contractCallQuote.action.toToken = toToken!\n\n const customStep =\n subvariant === 'custom'\n ? contractCallQuote.includedSteps?.find(\n (step) => step.type === 'custom'\n )\n : undefined\n\n if (customStep && contractTool) {\n const toolDetails = {\n key: contractTool.name,\n name: contractTool.name,\n logoURI: contractTool.logoURI,\n }\n customStep.toolDetails = toolDetails\n contractCallQuote.toolDetails = toolDetails\n }\n\n const route: Route = convertQuoteToRoute(contractCallQuote)\n\n return [route]\n }\n\n // Prevent sending a request for the same chain token combinations.\n // Exception: proceed anyway if subvariant is custom and subvariantOptions is deposit\n if (\n fromChainId === toChainId &&\n fromTokenAddress === toTokenAddress &&\n !(subvariant === 'custom' && subvariantOptions?.custom === 'deposit')\n ) {\n return\n }\n\n const isObservableRelayerRoute = observableRoute?.steps?.some(\n (step) => !!isGaslessStep?.(step, fromChain)\n )\n\n const shouldUseMainRoutes =\n !observableRoute || !isObservableRelayerRoute\n const shouldUseRelayerQuote =\n fromAddress &&\n fromChain?.chainType === ChainType.EVM &&\n fromChain.permit2 &&\n fromChain.permit2Proxy &&\n fromChain.relayerSupported &&\n fromChain.nativeToken.address !== fromTokenAddress &&\n useRelayerRoutes &&\n !isBatchingSupported &&\n (!observableRoute || isObservableRelayerRoute)\n\n const mainRoutesPromise = shouldUseMainRoutes\n ? getRoutes(\n sdkClient,\n {\n fromAddress,\n fromAmount: fromAmount.toString(),\n fromChainId,\n fromTokenAddress,\n toAddress,\n toChainId,\n toTokenAddress,\n fromAmountForGas:\n enabledRefuel && gasRecommendationFromAmount\n ? gasRecommendationFromAmount\n : undefined,\n options: {\n allowSwitchChain:\n subvariant === 'refuel' ? false : allowSwitchChain,\n bridges:\n allowBridges?.length || disabledBridges.length\n ? {\n allow: allowBridges,\n deny: disabledBridges.length\n ? disabledBridges\n : undefined,\n }\n : undefined,\n exchanges:\n allowExchanges?.length || disabledExchanges.length\n ? {\n allow: allowExchanges,\n deny: disabledExchanges.length\n ? disabledExchanges\n : undefined,\n }\n : undefined,\n order: routePriority,\n slippage: formattedSlippage,\n fee: calculatedFee || fee,\n executionType: disableMessageSigning ? 'transaction' : 'all',\n },\n },\n { signal }\n )\n : Promise.resolve(null)\n\n const relayerQuotePromise = shouldUseRelayerQuote\n ? getRelayerQuote(\n sdkClient,\n {\n fromAddress,\n fromAmount: fromAmount.toString(),\n fromChain: fromChainId,\n fromToken: fromTokenAddress,\n toAddress,\n toChain: toChainId,\n toToken: toTokenAddress,\n fromAmountForGas:\n enabledRefuel && gasRecommendationFromAmount\n ? gasRecommendationFromAmount\n : undefined,\n order: routePriority,\n slippage: formattedSlippage,\n fee: calculatedFee || fee,\n ...(allowBridges?.length || disabledBridges.length\n ? {\n allowBridges: allowBridges,\n denyBridges: disabledBridges.length\n ? disabledBridges\n : undefined,\n }\n : undefined),\n ...(allowExchanges?.length || disabledExchanges.length\n ? {\n allowExchanges: allowExchanges,\n denyExchanges: disabledExchanges.length\n ? disabledExchanges\n : undefined,\n }\n : undefined),\n },\n { signal }\n )\n .then(convertQuoteToRoute)\n .catch(() => null)\n : Promise.resolve(null)\n\n // Wait for the main routes to complete first\n const routesResult = await mainRoutesPromise\n\n if (routesResult?.routes[0] && fromAddress) {\n // Update local tokens cache to keep priceUSD in sync\n const { fromToken, toToken } = routesResult.routes[0]\n ;[fromToken, toToken].forEach((token) => {\n // Update main tokens cache (verified)\n queryClient.setQueriesData<TokensByChain>(\n { queryKey: [getQueryKey('tokens', keyPrefix)] },\n (data) => updateTokenInCache(data, token)\n )\n\n // Update search tokens cache (unverified) - matches any search query\n queryClient.setQueriesData<TokensByChain>(\n {\n queryKey: [getQueryKey('tokens-search', keyPrefix)],\n exact: false,\n },\n (data) => updateTokenInCache(data, token)\n )\n\n queryClient.setQueriesData<Token[]>(\n {\n queryKey: [\n getQueryKey('token-balances', keyPrefix),\n fromAddress,\n token.chainId,\n ],\n },\n (data) => {\n if (data) {\n const clonedData = [...data]\n const index = clonedData.findIndex(\n (dataToken) => dataToken.address === token.address\n )\n if (index >= 0) {\n clonedData[index] = {\n ...clonedData[index],\n ...token,\n }\n }\n return clonedData\n }\n }\n )\n })\n }\n\n const initialRoutes = routesResult?.routes ?? []\n\n if (shouldUseRelayerQuote && initialRoutes.length) {\n setIntermediateRoutes(queryKey, initialRoutes)\n emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)\n // Return early if we're only using main routes\n } else if (shouldUseMainRoutes) {\n // If we don't need relayer quote, return the initial routes\n emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)\n return initialRoutes\n }\n\n const relayerRouteResult = await relayerQuotePromise\n // If we have a relayer route, add it to the routes array\n if (relayerRouteResult) {\n // Insert the relayer route at position 1 (after the first route)\n initialRoutes.splice(1, 0, relayerRouteResult)\n // Emit the updated routes\n emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)\n }\n\n return initialRoutes\n },\n enabled: isEnabled,\n staleTime: refetchTime,\n refetchInterval(query) {\n return Math.min(\n Math.abs(refetchTime - (Date.now() - query.state.dataUpdatedAt)),\n refetchTime\n )\n },\n retry(failureCount, error: any) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('Route query failed:', { failureCount, error })\n }\n if (failureCount >= 3) {\n return false\n }\n if (error?.code === LiFiErrorCode.NotFound) {\n return false\n }\n return true\n },\n })\n\n const setReviewableRoute = useCallback(\n (route: Route) => {\n const queryDataKey = queryKey.toSpliced(queryKey.length - 1, 1, route.id)\n queryClient.setQueryData(queryDataKey, [route], {\n updatedAt: dataUpdatedAt || Date.now(),\n })\n setExecutableRoute(route)\n },\n [queryClient, dataUpdatedAt, setExecutableRoute, queryKey]\n )\n\n return {\n routes: data || getIntermediateRoutes(queryKey),\n isLoading: isEnabled && isLoading,\n isFetching,\n isFetched,\n dataUpdatedAt,\n refetchTime,\n refetch,\n fromChain,\n toChain,\n queryKey,\n setReviewableRoute,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useRoutes.js","names":[],"sources":["../../../src/hooks/useRoutes.ts"],"sourcesContent":["import type { ExtendedChain, Route, Token } from '@lifi/sdk'\nimport {\n ChainType,\n convertQuoteToRoute,\n getContractCallsQuote,\n getRelayerQuote,\n getRoutes,\n LiFiErrorCode,\n parseUnits,\n} from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport {\n useChainTypeFromAddress,\n useEthereumContext,\n} from '@lifi/widget-provider'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useCallback, useMemo } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { useIntermediateRoutesStore } from '../stores/routes/useIntermediateRoutesStore.js'\nimport { useSetExecutableRoute } from '../stores/routes/useSetExecutableRoute.js'\nimport { defaultSlippage } from '../stores/settings/createSettingsStore.js'\nimport { useSettings } from '../stores/settings/useSettings.js'\nimport { WidgetEvent } from '../types/events.js'\nimport type { TokensByChain } from '../types/token.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { updateTokenInCache } from '../utils/token.js'\nimport { useChain } from './useChain.js'\nimport { useDebouncedWatch } from './useDebouncedWatch.js'\nimport { useGasRefuel } from './useGasRefuel.js'\nimport { useIsBatchingSupported } from './useIsBatchingSupported.js'\nimport { useSwapOnly } from './useSwapOnly.js'\nimport { useToken } from './useToken.js'\nimport { useWidgetEvents } from './useWidgetEvents.js'\n\nconst refetchTime = 60_000\n\ninterface RoutesProps {\n observableRoute?: Route\n}\n\nexport const useRoutes = ({\n observableRoute,\n}: RoutesProps = {}): {\n routes: Route[] | undefined\n isLoading: boolean\n isFetching: boolean\n isFetched: boolean\n dataUpdatedAt: number\n refetchTime: number\n refetch: () => void\n fromChain: ExtendedChain | undefined\n toChain: ExtendedChain | undefined\n queryKey: readonly unknown[]\n setReviewableRoute: (route: Route) => void\n} => {\n const {\n subvariant,\n subvariantOptions,\n contractTool,\n bridges,\n exchanges,\n fee,\n feeConfig,\n useRelayerRoutes,\n keyPrefix,\n } = useWidgetConfig()\n const sdkClient = useSDKClient()\n const setExecutableRoute = useSetExecutableRoute()\n const queryClient = useQueryClient()\n const emitter = useWidgetEvents()\n const swapOnly = useSwapOnly()\n const {\n disabledBridges,\n disabledExchanges,\n enabledBridges,\n enabledExchanges,\n enabledAutoRefuel,\n routePriority,\n slippage,\n } = useSettings([\n 'disabledBridges',\n 'disabledExchanges',\n 'enabledBridges',\n 'enabledExchanges',\n 'enabledAutoRefuel',\n 'routePriority',\n 'slippage',\n ])\n const [fromTokenAmount] = useDebouncedWatch(500, 'fromAmount')\n const [\n fromChainId,\n fromTokenAddress,\n toAddress,\n toTokenAmount,\n toChainId,\n toTokenAddress,\n contractCalls,\n ] = useFieldValues(\n 'fromChain',\n 'fromToken',\n 'toAddress',\n 'toAmount',\n 'toChain',\n 'toToken',\n 'contractCalls'\n )\n const { token: fromToken } = useToken(fromChainId, fromTokenAddress)\n const { token: toToken } = useToken(toChainId, toTokenAddress)\n const { chain: fromChain } = useChain(fromChainId)\n const { chain: toChain } = useChain(toChainId)\n const { enabled: enabledRefuel, fromAmount: gasRecommendationFromAmount } =\n useGasRefuel()\n const { getChainTypeFromAddress } = useChainTypeFromAddress()\n const { isGaslessStep, disableMessageSigning } = useEthereumContext()\n const { account } = useAccount({ chainType: fromChain?.chainType })\n const { isBatchingSupported, isBatchingSupportedLoading } =\n useIsBatchingSupported(fromChain, account.address)\n\n const hasAmount = Number(fromTokenAmount) > 0 || Number(toTokenAmount) > 0\n\n const contractCallQuoteEnabled: boolean =\n subvariant === 'custom' ? Boolean(contractCalls && account.address) : true\n\n // When we bridge between ecosystems we need to be sure toAddress is set and has the same chainType as toChain\n // If toAddress is set, it must have the same chainType as toChain\n const hasToAddressAndChainTypeSatisfied: boolean =\n !!toChain &&\n !!toAddress &&\n getChainTypeFromAddress(toAddress) === toChain.chainType\n // We need to check for toAddress only if it is set\n const isToAddressSatisfied = toAddress\n ? hasToAddressAndChainTypeSatisfied\n : true\n\n // toAddress might be an empty string, but we need to pass undefined if there is no value\n const toWalletAddress = toAddress || undefined\n\n // We need to send the full allowed tools array if custom tool settings are applied\n const allowedBridges =\n bridges?.allow?.length || bridges?.deny?.length ? enabledBridges : undefined\n const allowedExchanges =\n exchanges?.allow?.length || exchanges?.deny?.length\n ? enabledExchanges\n : undefined\n const allowSwitchChain = sdkClient.config?.routeOptions?.allowSwitchChain\n\n const isEnabled =\n Boolean(Number(fromChain?.id)) &&\n Boolean(Number(toChain?.id)) &&\n Boolean(fromToken?.address) &&\n Boolean(toToken?.address) &&\n !Number.isNaN(slippage) &&\n hasAmount &&\n isToAddressSatisfied &&\n contractCallQuoteEnabled &&\n !isBatchingSupportedLoading\n\n // Some values should be strictly typed and isEnabled ensures that\n const queryKey = useMemo(\n () =>\n [\n getQueryKey('routes', keyPrefix),\n account.address,\n fromChain?.id as number,\n fromToken?.address as string,\n fromTokenAmount,\n toWalletAddress,\n toChain?.id as number,\n toToken?.address as string,\n toTokenAmount,\n contractCalls,\n slippage,\n swapOnly,\n disabledBridges,\n disabledExchanges,\n allowedBridges,\n allowedExchanges,\n routePriority,\n subvariant,\n allowSwitchChain,\n enabledRefuel && enabledAutoRefuel,\n gasRecommendationFromAmount,\n feeConfig?.fee || fee,\n disableMessageSigning,\n !!isBatchingSupported,\n observableRoute?.id,\n ] as const,\n [\n keyPrefix,\n account.address,\n fromChain?.id,\n fromToken?.address,\n fromTokenAmount,\n toWalletAddress,\n toChain?.id,\n toToken?.address,\n toTokenAmount,\n contractCalls,\n slippage,\n swapOnly,\n disabledBridges,\n disabledExchanges,\n allowedBridges,\n allowedExchanges,\n routePriority,\n subvariant,\n allowSwitchChain,\n enabledRefuel,\n enabledAutoRefuel,\n gasRecommendationFromAmount,\n feeConfig?.fee,\n fee,\n disableMessageSigning,\n isBatchingSupported,\n observableRoute?.id,\n ]\n )\n\n const { getIntermediateRoutes, setIntermediateRoutes } =\n useIntermediateRoutesStore()\n\n const { data, isLoading, isFetching, isFetched, dataUpdatedAt, refetch } =\n useQuery({\n queryKey,\n queryFn: async ({\n queryKey: [\n _,\n fromAddress,\n fromChainId,\n fromTokenAddress,\n fromTokenAmount,\n toAddress,\n toChainId,\n toTokenAddress,\n toTokenAmount,\n contractCalls,\n slippage = defaultSlippage,\n swapOnly,\n disabledBridges,\n disabledExchanges,\n allowedBridges,\n allowedExchanges,\n routePriority,\n subvariant,\n allowSwitchChain,\n enabledRefuel,\n gasRecommendationFromAmount,\n fee,\n disableMessageSigning,\n isBatchingSupported,\n // _observableRouteId must be the last element in the query key\n _observableRouteId,\n ],\n signal,\n }) => {\n const fromAmount = parseUnits(fromTokenAmount, fromToken!.decimals)\n const toAmount = parseUnits(toTokenAmount, toToken!.decimals)\n const formattedSlippage = slippage\n ? Number.parseFloat(slippage) / 100\n : defaultSlippage\n\n const allowBridges = swapOnly\n ? []\n : observableRoute\n ? observableRoute.steps.flatMap((step) =>\n step.includedSteps.reduce((toolKeys, includedStep) => {\n if (includedStep.type === 'cross') {\n toolKeys.push(includedStep.toolDetails.key)\n }\n return toolKeys\n }, [] as string[])\n )\n : allowedBridges\n const allowExchanges = observableRoute\n ? observableRoute.steps.flatMap((step) =>\n step.includedSteps.reduce((toolKeys, includedStep) => {\n if (includedStep.type === 'swap') {\n toolKeys.push(includedStep.toolDetails.key)\n }\n return toolKeys\n }, [] as string[])\n )\n : allowedExchanges\n\n const calculatedFee = await feeConfig?.calculateFee?.({\n fromChain: fromChain!,\n toChain: toChain!,\n fromToken: fromToken!,\n toToken: toToken!,\n fromAddress,\n toAddress,\n fromAmount,\n toAmount,\n slippage: formattedSlippage,\n })\n\n if (subvariant === 'custom' && contractCalls && toAmount) {\n const contractCallQuote = await getContractCallsQuote(\n sdkClient,\n {\n // Contract calls are enabled only when fromAddress is set\n fromAddress: fromAddress as string,\n fromChain: fromChainId,\n fromToken: fromTokenAddress,\n toAmount: toAmount.toString(),\n toChain: toChainId,\n toToken: toTokenAddress,\n contractCalls,\n denyBridges: disabledBridges.length ? disabledBridges : undefined,\n denyExchanges: disabledExchanges.length\n ? disabledExchanges\n : undefined,\n allowBridges,\n allowExchanges,\n toFallbackAddress: toAddress,\n slippage: formattedSlippage,\n fee: calculatedFee || fee,\n },\n { signal }\n )\n\n contractCallQuote.action.toToken = toToken!\n\n const customStep =\n subvariant === 'custom'\n ? contractCallQuote.includedSteps?.find(\n (step) => step.type === 'custom'\n )\n : undefined\n\n if (customStep && contractTool) {\n const toolDetails = {\n key: contractTool.name,\n name: contractTool.name,\n logoURI: contractTool.logoURI,\n }\n customStep.toolDetails = toolDetails\n contractCallQuote.toolDetails = toolDetails\n }\n\n const route: Route = convertQuoteToRoute(contractCallQuote)\n\n return [route]\n }\n\n // Prevent sending a request for the same chain token combinations.\n // Exception: proceed anyway if subvariant is custom and subvariantOptions is deposit\n if (\n fromChainId === toChainId &&\n fromTokenAddress === toTokenAddress &&\n !(subvariant === 'custom' && subvariantOptions?.custom === 'deposit')\n ) {\n return\n }\n\n const isObservableRelayerRoute = observableRoute?.steps?.some(\n (step) => !!isGaslessStep?.(step, fromChain)\n )\n\n const shouldUseMainRoutes =\n !observableRoute || !isObservableRelayerRoute\n const shouldUseRelayerQuote =\n fromAddress &&\n fromChain?.chainType === ChainType.EVM &&\n fromChain.permit2 &&\n fromChain.permit2Proxy &&\n fromChain.relayerSupported &&\n fromChain.nativeToken.address !== fromTokenAddress &&\n useRelayerRoutes &&\n !isBatchingSupported &&\n (!observableRoute || isObservableRelayerRoute)\n\n const mainRoutesPromise = shouldUseMainRoutes\n ? getRoutes(\n sdkClient,\n {\n fromAddress,\n fromAmount: fromAmount.toString(),\n fromChainId,\n fromTokenAddress,\n toAddress,\n toChainId,\n toTokenAddress,\n fromAmountForGas:\n enabledRefuel && gasRecommendationFromAmount\n ? gasRecommendationFromAmount\n : undefined,\n options: {\n allowSwitchChain:\n subvariant === 'refuel' ? false : allowSwitchChain,\n bridges:\n allowBridges?.length || disabledBridges.length\n ? {\n allow: allowBridges,\n deny: disabledBridges.length\n ? disabledBridges\n : undefined,\n }\n : undefined,\n exchanges:\n allowExchanges?.length || disabledExchanges.length\n ? {\n allow: allowExchanges,\n deny: disabledExchanges.length\n ? disabledExchanges\n : undefined,\n }\n : undefined,\n order: routePriority,\n slippage: formattedSlippage,\n fee: calculatedFee || fee,\n executionType: disableMessageSigning ? 'transaction' : 'all',\n },\n },\n { signal }\n )\n : Promise.resolve(null)\n\n const relayerQuotePromise = shouldUseRelayerQuote\n ? getRelayerQuote(\n sdkClient,\n {\n fromAddress,\n fromAmount: fromAmount.toString(),\n fromChain: fromChainId,\n fromToken: fromTokenAddress,\n toAddress,\n toChain: toChainId,\n toToken: toTokenAddress,\n fromAmountForGas:\n enabledRefuel && gasRecommendationFromAmount\n ? gasRecommendationFromAmount\n : undefined,\n order: routePriority,\n slippage: formattedSlippage,\n fee: calculatedFee || fee,\n ...(allowBridges?.length || disabledBridges.length\n ? {\n allowBridges: allowBridges,\n denyBridges: disabledBridges.length\n ? disabledBridges\n : undefined,\n }\n : undefined),\n ...(allowExchanges?.length || disabledExchanges.length\n ? {\n allowExchanges: allowExchanges,\n denyExchanges: disabledExchanges.length\n ? disabledExchanges\n : undefined,\n }\n : undefined),\n },\n { signal }\n )\n .then(convertQuoteToRoute)\n .catch(() => null)\n : Promise.resolve(null)\n\n // Wait for the main routes to complete first\n const routesResult = await mainRoutesPromise\n\n if (routesResult?.routes[0] && fromAddress) {\n // Update local tokens cache to keep priceUSD in sync\n const { fromToken, toToken } = routesResult.routes[0]\n ;[fromToken, toToken].forEach((token) => {\n // Update main tokens cache (verified)\n queryClient.setQueriesData<TokensByChain>(\n { queryKey: [getQueryKey('tokens', keyPrefix)] },\n (data) => updateTokenInCache(data, token)\n )\n\n // Update search tokens cache (unverified) - matches any search query\n queryClient.setQueriesData<TokensByChain>(\n {\n queryKey: [getQueryKey('tokens-search', keyPrefix)],\n exact: false,\n },\n (data) => updateTokenInCache(data, token)\n )\n\n queryClient.setQueriesData<Token[]>(\n {\n queryKey: [\n getQueryKey('token-balances', keyPrefix),\n fromAddress,\n token.chainId,\n ],\n },\n (data) => {\n if (data) {\n const clonedData = [...data]\n const index = clonedData.findIndex(\n (dataToken) => dataToken.address === token.address\n )\n if (index >= 0) {\n clonedData[index] = {\n ...clonedData[index],\n ...token,\n }\n }\n return clonedData\n }\n }\n )\n })\n }\n\n const initialRoutes = routesResult?.routes ?? []\n\n if (shouldUseRelayerQuote && initialRoutes.length) {\n setIntermediateRoutes(queryKey, initialRoutes)\n emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)\n // Return early if we're only using main routes\n } else if (shouldUseMainRoutes) {\n // If we don't need relayer quote, return the initial routes\n emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)\n return initialRoutes\n }\n\n const relayerRouteResult = await relayerQuotePromise\n // If we have a relayer route, add it to the routes array\n if (relayerRouteResult) {\n // Insert the relayer route at position 1 (after the first route)\n initialRoutes.splice(1, 0, relayerRouteResult)\n // Emit the updated routes\n emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)\n }\n\n return initialRoutes\n },\n enabled: isEnabled,\n staleTime: refetchTime,\n refetchInterval(query) {\n return Math.min(\n Math.abs(refetchTime - (Date.now() - query.state.dataUpdatedAt)),\n refetchTime\n )\n },\n retry(failureCount, error: any) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('Route query failed:', { failureCount, error })\n }\n if (failureCount >= 3) {\n return false\n }\n if (error?.code === LiFiErrorCode.NotFound) {\n return false\n }\n return true\n },\n })\n\n const setReviewableRoute = useCallback(\n (route: Route) => {\n const queryDataKey = queryKey.toSpliced(queryKey.length - 1, 1, route.id)\n queryClient.setQueryData(queryDataKey, [route], {\n updatedAt: dataUpdatedAt || Date.now(),\n })\n setExecutableRoute(route)\n },\n [queryClient, dataUpdatedAt, setExecutableRoute, queryKey]\n )\n\n return {\n routes: data || getIntermediateRoutes(queryKey),\n isLoading: isEnabled && isLoading,\n isFetching,\n isFetched,\n dataUpdatedAt,\n refetchTime,\n refetch,\n fromChain,\n toChain,\n queryKey,\n setReviewableRoute,\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
2
- import { HiddenUI, RequiredUI } from "../types/widget.js";
2
+ import "../types/widget.js";
3
3
  import { useFieldValues } from "../stores/form/useFieldValues.js";
4
4
  import { useChain } from "./useChain.js";
5
5
  import { useIsContractAddress } from "./useIsContractAddress.js";
@@ -21,7 +21,7 @@ const useToAddressRequirements = (route) => {
21
21
  const { isContractAddress: isToContractAddress, isLoading: isToContractLoading, isFetched: isToContractFetched } = useIsContractAddress(toAddress, toChainId, toChain?.chainType);
22
22
  const isDifferentChainType = fromChain && toChain && fromChain.chainType !== toChain.chainType;
23
23
  const fromContractCodeHasDelegationIndicator = isDelegationDesignatorCode?.(fromContractCode);
24
- const requiredToAddress = Boolean((isDifferentChainType || isFromContractAddress && fromChainId !== toChainId && !fromContractCodeHasDelegationIndicator || requiredUI?.includes(RequiredUI.ToAddress)) && !hiddenUI?.includes(HiddenUI.ToAddress));
24
+ const requiredToAddress = Boolean((isDifferentChainType || isFromContractAddress && fromChainId !== toChainId && !fromContractCodeHasDelegationIndicator || requiredUI?.includes("toAddress")) && !hiddenUI?.includes("toAddress"));
25
25
  const accountNotDeployedAtDestination = Boolean(isFromContractAddress && !fromContractCodeHasDelegationIndicator && !isToContractAddress && fromAddress?.toLowerCase() === toAddress?.toLowerCase());
26
26
  const accountDeployedAtDestination = Boolean(isFromContractAddress && isToContractAddress && !fromContractCodeHasDelegationIndicator && fromAddress?.toLowerCase() === toAddress?.toLowerCase());
27
27
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useToAddressRequirements.js","names":[],"sources":["../../../src/hooks/useToAddressRequirements.ts"],"sourcesContent":["import type { ChainType, RouteExtended } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { useEthereumContext } from '@lifi/widget-provider'\nimport { useChain } from '../hooks/useChain.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { HiddenUI, RequiredUI } from '../types/widget.js'\nimport { useIsContractAddress } from './useIsContractAddress.js'\n\nexport const useToAddressRequirements = (\n route?: RouteExtended\n): {\n requiredToAddress: boolean\n requiredToChainType: ChainType | undefined\n accountNotDeployedAtDestination: boolean\n accountDeployedAtDestination: boolean\n toAddress: string | undefined\n isFromContractAddress: boolean | undefined\n isToContractAddress: boolean | undefined\n isLoading: boolean\n isFetched: boolean\n} => {\n const { requiredUI, hiddenUI } = useWidgetConfig()\n const [formFromChainId, formToChainId, formToAddress] = useFieldValues(\n 'fromChain',\n 'toChain',\n 'toAddress'\n )\n const { isDelegationDesignatorCode } = useEthereumContext()\n\n const fromChainId = route?.fromChainId ?? formFromChainId\n const toChainId = route?.toChainId ?? formToChainId\n\n const { chain: fromChain } = useChain(fromChainId)\n const { chain: toChain } = useChain(toChainId)\n const { account } = useAccount({\n chainType: fromChain?.chainType,\n })\n\n const fromAddress = route?.fromAddress ?? account.address\n const toAddress = route\n ? route.fromAddress !== route.toAddress\n ? route.toAddress\n : formToAddress\n : formToAddress\n\n const {\n isContractAddress: isFromContractAddress,\n contractCode: fromContractCode,\n isLoading: isFromContractLoading,\n isFetched: isFromContractFetched,\n } = useIsContractAddress(account.address, fromChainId, account.chainType)\n const {\n isContractAddress: isToContractAddress,\n isLoading: isToContractLoading,\n isFetched: isToContractFetched,\n } = useIsContractAddress(toAddress, toChainId, toChain?.chainType)\n\n const isDifferentChainType =\n fromChain && toChain && fromChain.chainType !== toChain.chainType\n\n // We don't want to block transfers for EIP-7702 accounts since they are designed\n // to maintain EOA-like properties while delegating execution.\n const fromContractCodeHasDelegationIndicator =\n isDelegationDesignatorCode?.(fromContractCode)\n\n const isCrossChainContractAddress =\n isFromContractAddress &&\n fromChainId !== toChainId &&\n !fromContractCodeHasDelegationIndicator\n\n const requiredToAddress = Boolean(\n (isDifferentChainType ||\n isCrossChainContractAddress ||\n requiredUI?.includes(RequiredUI.ToAddress)) &&\n !hiddenUI?.includes(HiddenUI.ToAddress)\n )\n\n const accountNotDeployedAtDestination = Boolean(\n isFromContractAddress &&\n !fromContractCodeHasDelegationIndicator &&\n !isToContractAddress &&\n fromAddress?.toLowerCase() === toAddress?.toLowerCase()\n )\n\n const accountDeployedAtDestination = Boolean(\n isFromContractAddress &&\n isToContractAddress &&\n !fromContractCodeHasDelegationIndicator &&\n fromAddress?.toLowerCase() === toAddress?.toLowerCase()\n )\n\n return {\n requiredToAddress,\n requiredToChainType: toChain?.chainType,\n accountNotDeployedAtDestination,\n accountDeployedAtDestination,\n toAddress,\n isFromContractAddress,\n isToContractAddress,\n isLoading: isFromContractLoading || isToContractLoading,\n isFetched: isFromContractFetched && isToContractFetched,\n }\n}\n"],"mappings":";;;;;;;;AASA,MAAa,4BACX,UAWG;CACH,MAAM,EAAE,YAAY,aAAa,iBAAiB;CAClD,MAAM,CAAC,iBAAiB,eAAe,iBAAiB,eACtD,aACA,WACA,YACD;CACD,MAAM,EAAE,+BAA+B,oBAAoB;CAE3D,MAAM,cAAc,OAAO,eAAe;CAC1C,MAAM,YAAY,OAAO,aAAa;CAEtC,MAAM,EAAE,OAAO,cAAc,SAAS,YAAY;CAClD,MAAM,EAAE,OAAO,YAAY,SAAS,UAAU;CAC9C,MAAM,EAAE,YAAY,WAAW,EAC7B,WAAW,WAAW,WACvB,CAAC;CAEF,MAAM,cAAc,OAAO,eAAe,QAAQ;CAClD,MAAM,YAAY,QACd,MAAM,gBAAgB,MAAM,YAC1B,MAAM,YACN,gBACF;CAEJ,MAAM,EACJ,mBAAmB,uBACnB,cAAc,kBACd,WAAW,uBACX,WAAW,0BACT,qBAAqB,QAAQ,SAAS,aAAa,QAAQ,UAAU;CACzE,MAAM,EACJ,mBAAmB,qBACnB,WAAW,qBACX,WAAW,wBACT,qBAAqB,WAAW,WAAW,SAAS,UAAU;CAElE,MAAM,uBACJ,aAAa,WAAW,UAAU,cAAc,QAAQ;CAI1D,MAAM,yCACJ,6BAA6B,iBAAiB;CAOhD,MAAM,oBAAoB,SACvB,wBALD,yBACA,gBAAgB,aAChB,CAAC,0CAKC,YAAY,SAAS,WAAW,UAAU,KAC1C,CAAC,UAAU,SAAS,SAAS,UAAU,CAC1C;CAED,MAAM,kCAAkC,QACtC,yBACE,CAAC,0CACD,CAAC,uBACD,aAAa,aAAa,KAAK,WAAW,aAAa,CAC1D;CAED,MAAM,+BAA+B,QACnC,yBACE,uBACA,CAAC,0CACD,aAAa,aAAa,KAAK,WAAW,aAAa,CAC1D;AAED,QAAO;EACL;EACA,qBAAqB,SAAS;EAC9B;EACA;EACA;EACA;EACA;EACA,WAAW,yBAAyB;EACpC,WAAW,yBAAyB;EACrC"}
1
+ {"version":3,"file":"useToAddressRequirements.js","names":[],"sources":["../../../src/hooks/useToAddressRequirements.ts"],"sourcesContent":["import type { ChainType, RouteExtended } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { useEthereumContext } from '@lifi/widget-provider'\nimport { useChain } from '../hooks/useChain.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { HiddenUI, RequiredUI } from '../types/widget.js'\nimport { useIsContractAddress } from './useIsContractAddress.js'\n\nexport const useToAddressRequirements = (\n route?: RouteExtended\n): {\n requiredToAddress: boolean\n requiredToChainType: ChainType | undefined\n accountNotDeployedAtDestination: boolean\n accountDeployedAtDestination: boolean\n toAddress: string | undefined\n isFromContractAddress: boolean | undefined\n isToContractAddress: boolean | undefined\n isLoading: boolean\n isFetched: boolean\n} => {\n const { requiredUI, hiddenUI } = useWidgetConfig()\n const [formFromChainId, formToChainId, formToAddress] = useFieldValues(\n 'fromChain',\n 'toChain',\n 'toAddress'\n )\n const { isDelegationDesignatorCode } = useEthereumContext()\n\n const fromChainId = route?.fromChainId ?? formFromChainId\n const toChainId = route?.toChainId ?? formToChainId\n\n const { chain: fromChain } = useChain(fromChainId)\n const { chain: toChain } = useChain(toChainId)\n const { account } = useAccount({\n chainType: fromChain?.chainType,\n })\n\n const fromAddress = route?.fromAddress ?? account.address\n const toAddress = route\n ? route.fromAddress !== route.toAddress\n ? route.toAddress\n : formToAddress\n : formToAddress\n\n const {\n isContractAddress: isFromContractAddress,\n contractCode: fromContractCode,\n isLoading: isFromContractLoading,\n isFetched: isFromContractFetched,\n } = useIsContractAddress(account.address, fromChainId, account.chainType)\n const {\n isContractAddress: isToContractAddress,\n isLoading: isToContractLoading,\n isFetched: isToContractFetched,\n } = useIsContractAddress(toAddress, toChainId, toChain?.chainType)\n\n const isDifferentChainType =\n fromChain && toChain && fromChain.chainType !== toChain.chainType\n\n // We don't want to block transfers for EIP-7702 accounts since they are designed\n // to maintain EOA-like properties while delegating execution.\n const fromContractCodeHasDelegationIndicator =\n isDelegationDesignatorCode?.(fromContractCode)\n\n const isCrossChainContractAddress =\n isFromContractAddress &&\n fromChainId !== toChainId &&\n !fromContractCodeHasDelegationIndicator\n\n const requiredToAddress = Boolean(\n (isDifferentChainType ||\n isCrossChainContractAddress ||\n requiredUI?.includes(RequiredUI.ToAddress)) &&\n !hiddenUI?.includes(HiddenUI.ToAddress)\n )\n\n const accountNotDeployedAtDestination = Boolean(\n isFromContractAddress &&\n !fromContractCodeHasDelegationIndicator &&\n !isToContractAddress &&\n fromAddress?.toLowerCase() === toAddress?.toLowerCase()\n )\n\n const accountDeployedAtDestination = Boolean(\n isFromContractAddress &&\n isToContractAddress &&\n !fromContractCodeHasDelegationIndicator &&\n fromAddress?.toLowerCase() === toAddress?.toLowerCase()\n )\n\n return {\n requiredToAddress,\n requiredToChainType: toChain?.chainType,\n accountNotDeployedAtDestination,\n accountDeployedAtDestination,\n toAddress,\n isFromContractAddress,\n isToContractAddress,\n isLoading: isFromContractLoading || isToContractLoading,\n isFetched: isFromContractFetched && isToContractFetched,\n }\n}\n"],"mappings":";;;;;;;;AASA,MAAa,4BACX,UAWG;CACH,MAAM,EAAE,YAAY,aAAa,iBAAiB;CAClD,MAAM,CAAC,iBAAiB,eAAe,iBAAiB,eACtD,aACA,WACA,YACD;CACD,MAAM,EAAE,+BAA+B,oBAAoB;CAE3D,MAAM,cAAc,OAAO,eAAe;CAC1C,MAAM,YAAY,OAAO,aAAa;CAEtC,MAAM,EAAE,OAAO,cAAc,SAAS,YAAY;CAClD,MAAM,EAAE,OAAO,YAAY,SAAS,UAAU;CAC9C,MAAM,EAAE,YAAY,WAAW,EAC7B,WAAW,WAAW,WACvB,CAAC;CAEF,MAAM,cAAc,OAAO,eAAe,QAAQ;CAClD,MAAM,YAAY,QACd,MAAM,gBAAgB,MAAM,YAC1B,MAAM,YACN,gBACF;CAEJ,MAAM,EACJ,mBAAmB,uBACnB,cAAc,kBACd,WAAW,uBACX,WAAW,0BACT,qBAAqB,QAAQ,SAAS,aAAa,QAAQ,UAAU;CACzE,MAAM,EACJ,mBAAmB,qBACnB,WAAW,qBACX,WAAW,wBACT,qBAAqB,WAAW,WAAW,SAAS,UAAU;CAElE,MAAM,uBACJ,aAAa,WAAW,UAAU,cAAc,QAAQ;CAI1D,MAAM,yCACJ,6BAA6B,iBAAiB;CAOhD,MAAM,oBAAoB,SACvB,wBALD,yBACA,gBAAgB,aAChB,CAAC,0CAKC,YAAY,SAAA,YAA8B,KAC1C,CAAC,UAAU,SAAA,YAA4B,CAC1C;CAED,MAAM,kCAAkC,QACtC,yBACE,CAAC,0CACD,CAAC,uBACD,aAAa,aAAa,KAAK,WAAW,aAAa,CAC1D;CAED,MAAM,+BAA+B,QACnC,yBACE,uBACA,CAAC,0CACD,aAAa,aAAa,KAAK,WAAW,aAAa,CAC1D;AAED,QAAO;EACL;EACA,qBAAqB,SAAS;EAC9B;EACA;EACA;EACA;EACA;EACA,WAAW,yBAAyB;EACpC,WAAW,yBAAyB;EACrC"}
@@ -1,5 +1,5 @@
1
1
  import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
2
- import { RequiredUI } from "../types/widget.js";
2
+ import "../types/widget.js";
3
3
  import { useBookmarkActions } from "../stores/bookmarks/useBookmarkActions.js";
4
4
  import { useBookmarks } from "../stores/bookmarks/useBookmarks.js";
5
5
  import { useFieldActions } from "../stores/form/useFieldActions.js";
@@ -11,7 +11,7 @@ const useToAddressReset = () => {
11
11
  const { selectedBookmark } = useBookmarks();
12
12
  const { setSelectedBookmark } = useBookmarkActions();
13
13
  return { tryResetToAddress: useCallback((toChain) => {
14
- const requiredToAddress = requiredUI?.includes(RequiredUI.ToAddress);
14
+ const requiredToAddress = requiredUI?.includes("toAddress");
15
15
  const bookmarkSatisfiesToChainType = selectedBookmark?.chainType === toChain?.chainType;
16
16
  if (!requiredToAddress && !bookmarkSatisfiesToChainType) {
17
17
  setFieldValue("toAddress", "", { isTouched: true });
@@ -1 +1 @@
1
- {"version":3,"file":"useToAddressReset.js","names":[],"sources":["../../../src/hooks/useToAddressReset.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useCallback } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useBookmarkActions } from '../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../stores/form/useFieldActions.js'\nimport { RequiredUI } from '../types/widget.js'\n\nexport const useToAddressReset = (): {\n tryResetToAddress: (toChain: ExtendedChain) => void\n} => {\n const { requiredUI } = useWidgetConfig()\n const { setFieldValue } = useFieldActions()\n const { selectedBookmark } = useBookmarks()\n const { setSelectedBookmark } = useBookmarkActions()\n\n const tryResetToAddress = useCallback(\n (toChain: ExtendedChain) => {\n const requiredToAddress = requiredUI?.includes(RequiredUI.ToAddress)\n\n const bookmarkSatisfiesToChainType =\n selectedBookmark?.chainType === toChain?.chainType\n\n const shouldResetToAddress =\n !requiredToAddress && !bookmarkSatisfiesToChainType\n\n // We reset toAddress on each chain change if it's no longer required, ensuring that\n // switching chain types doesn't leave a stale toAddress from a different ecosystem.\n if (shouldResetToAddress) {\n setFieldValue('toAddress', '', { isTouched: true })\n setSelectedBookmark()\n }\n },\n [setFieldValue, setSelectedBookmark, requiredUI, selectedBookmark]\n )\n\n return {\n tryResetToAddress,\n }\n}\n"],"mappings":";;;;;;;AAQA,MAAa,0BAER;CACH,MAAM,EAAE,eAAe,iBAAiB;CACxC,MAAM,EAAE,kBAAkB,iBAAiB;CAC3C,MAAM,EAAE,qBAAqB,cAAc;CAC3C,MAAM,EAAE,wBAAwB,oBAAoB;AAsBpD,QAAO,EACL,mBArBwB,aACvB,YAA2B;EAC1B,MAAM,oBAAoB,YAAY,SAAS,WAAW,UAAU;EAEpE,MAAM,+BACJ,kBAAkB,cAAc,SAAS;AAO3C,MAJE,CAAC,qBAAqB,CAAC,8BAIC;AACxB,iBAAc,aAAa,IAAI,EAAE,WAAW,MAAM,CAAC;AACnD,wBAAqB;;IAGzB;EAAC;EAAe;EAAqB;EAAY;EAAiB,CACnE,EAIA"}
1
+ {"version":3,"file":"useToAddressReset.js","names":[],"sources":["../../../src/hooks/useToAddressReset.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useCallback } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useBookmarkActions } from '../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../stores/form/useFieldActions.js'\nimport { RequiredUI } from '../types/widget.js'\n\nexport const useToAddressReset = (): {\n tryResetToAddress: (toChain: ExtendedChain) => void\n} => {\n const { requiredUI } = useWidgetConfig()\n const { setFieldValue } = useFieldActions()\n const { selectedBookmark } = useBookmarks()\n const { setSelectedBookmark } = useBookmarkActions()\n\n const tryResetToAddress = useCallback(\n (toChain: ExtendedChain) => {\n const requiredToAddress = requiredUI?.includes(RequiredUI.ToAddress)\n\n const bookmarkSatisfiesToChainType =\n selectedBookmark?.chainType === toChain?.chainType\n\n const shouldResetToAddress =\n !requiredToAddress && !bookmarkSatisfiesToChainType\n\n // We reset toAddress on each chain change if it's no longer required, ensuring that\n // switching chain types doesn't leave a stale toAddress from a different ecosystem.\n if (shouldResetToAddress) {\n setFieldValue('toAddress', '', { isTouched: true })\n setSelectedBookmark()\n }\n },\n [setFieldValue, setSelectedBookmark, requiredUI, selectedBookmark]\n )\n\n return {\n tryResetToAddress,\n }\n}\n"],"mappings":";;;;;;;AAQA,MAAa,0BAER;CACH,MAAM,EAAE,eAAe,iBAAiB;CACxC,MAAM,EAAE,kBAAkB,iBAAiB;CAC3C,MAAM,EAAE,qBAAqB,cAAc;CAC3C,MAAM,EAAE,wBAAwB,oBAAoB;AAsBpD,QAAO,EACL,mBArBwB,aACvB,YAA2B;EAC1B,MAAM,oBAAoB,YAAY,SAAA,YAA8B;EAEpE,MAAM,+BACJ,kBAAkB,cAAc,SAAS;AAO3C,MAJE,CAAC,qBAAqB,CAAC,8BAIC;AACxB,iBAAc,aAAa,IAAI,EAAE,WAAW,MAAM,CAAC;AACnD,wBAAqB;;IAGzB;EAAC;EAAe;EAAqB;EAAY;EAAiB,CACnE,EAIA"}
@@ -1,5 +1,5 @@
1
1
  import { useWidgetConfig } from "../providers/WidgetProvider/WidgetProvider.js";
2
- import { HiddenUI } from "../types/widget.js";
2
+ import "../types/widget.js";
3
3
  import { formatTokenPrice } from "../utils/format.js";
4
4
  import { useSettings } from "../stores/settings/useSettings.js";
5
5
  import { useTokens } from "./useTokens.js";
@@ -58,7 +58,7 @@ const useTokenBalances = (selectedChainId, formType, isAllNetworks, search) => {
58
58
  const displayedTokensWithBalances = useMemo(() => {
59
59
  const balancesByChain = isAllNetworks ? allTokensWithBalances : selectedChainId ? allTokensWithBalances?.filter((t) => t.chainId === selectedChainId) : void 0;
60
60
  const displayedTokensSet = new Set(displayedTokensList?.map((t) => `${t.chainId}-${t.address.toLowerCase()}`) || []);
61
- const hideSmallBalances = !!smallBalanceThreshold && !hiddenUI?.includes(HiddenUI.HideSmallBalances);
61
+ const hideSmallBalances = !!smallBalanceThreshold && !hiddenUI?.includes("hideSmallBalances");
62
62
  const threshold = hideSmallBalances ? Number.parseFloat(smallBalanceThreshold) : void 0;
63
63
  if (!balancesByChain) return;
64
64
  return balancesByChain.reduce((acc, token) => {
@@ -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 { usePinnedTokensStore } from '../stores/pinnedTokens/PinnedTokensStore.js'\nimport { useSettings } from '../stores/settings/useSettings.js'\nimport type { TokenAmount } from '../types/token.js'\nimport { HiddenUI } from '../types/widget.js'\nimport { formatTokenPrice } from '../utils/format.js'\nimport { isSearchMatch, processTokenBalances } from '../utils/tokenList.js'\nimport { useAccountsBalancesData } from './useAccountsBalancesData.js'\nimport { useTokenBalancesQueries } from './useTokenBalancesQueries.js'\nimport { useTokens } from './useTokens.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} => {\n const { hiddenUI } = useWidgetConfig()\n const {\n allTokens,\n isLoading: isTokensLoading,\n isSearchLoading,\n } = useTokens(formType, search, isAllNetworks ? undefined : selectedChainId)\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 { tokens: configTokens } = useWidgetConfig()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n\n const pinnedTokens = usePinnedTokensStore((state) => state.pinnedTokens)\n\n const isBalanceLoading =\n (isBalanceQueriesLoading || isAccountsLoading) &&\n !allTokensWithBalances?.length\n\n // Create function to check if token is pinned\n const isPinnedToken = useMemo(() => {\n if (isAllNetworks) {\n // For all networks, check all pinned tokens\n const allPinned: Array<{ chainId: number; tokenAddress: string }> = []\n Object.entries(pinnedTokens).forEach(([chainIdStr, addresses]) => {\n const chainId = Number.parseInt(chainIdStr, 10)\n addresses.forEach((address) => {\n allPinned.push({ chainId, tokenAddress: address })\n })\n })\n const pinnedSet = new Set(\n allPinned.map((p) => `${p.chainId}-${p.tokenAddress.toLowerCase()}`)\n )\n return (chainId: number, tokenAddress: string) => {\n const key = `${chainId}-${tokenAddress.toLowerCase()}`\n return pinnedSet.has(key)\n }\n } else if (selectedChainId) {\n // For single chain, check only selected chain\n const chainPinnedTokens = pinnedTokens[selectedChainId] || []\n const pinnedSet = new Set(\n chainPinnedTokens.map((addr) => addr.toLowerCase())\n )\n return (chainId: number, tokenAddress: string) => {\n return (\n chainId === selectedChainId &&\n pinnedSet.has(tokenAddress.toLowerCase())\n )\n }\n }\n return undefined\n }, [isAllNetworks, selectedChainId, pinnedTokens])\n\n const displayedTokensList = useMemo(() => {\n const tokensByChain = isAllNetworks\n ? Object.values(allTokens ?? {}).flat()\n : selectedChainId\n ? allTokens?.[selectedChainId]\n : undefined\n return tokensByChain?.filter((t) => isSearchMatch(t, search)) ?? []\n }, [allTokens, isAllNetworks, selectedChainId, search])\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?.includes(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 matchesSearch = isSearchMatch(token, search)\n\n // Filter: only include tokens that match our criteria\n if (!isInDisplayedList && !matchesSearch) {\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 search,\n selectedChainId,\n isAllNetworks,\n smallBalanceThreshold,\n hiddenUI,\n ])\n\n const { processedTokens, withCategories, withPinnedTokens } = useMemo(() => {\n return processTokenBalances(\n isBalanceLoading,\n isAllNetworks || !!search,\n configTokens,\n selectedChainId,\n displayedTokensList,\n displayedTokensWithBalances,\n isPinnedToken\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 }\n}\n"],"mappings":"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"}
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 { usePinnedTokensStore } from '../stores/pinnedTokens/PinnedTokensStore.js'\nimport { useSettings } from '../stores/settings/useSettings.js'\nimport type { TokenAmount } from '../types/token.js'\nimport { HiddenUI } from '../types/widget.js'\nimport { formatTokenPrice } from '../utils/format.js'\nimport { isSearchMatch, processTokenBalances } from '../utils/tokenList.js'\nimport { useAccountsBalancesData } from './useAccountsBalancesData.js'\nimport { useTokenBalancesQueries } from './useTokenBalancesQueries.js'\nimport { useTokens } from './useTokens.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} => {\n const { hiddenUI } = useWidgetConfig()\n const {\n allTokens,\n isLoading: isTokensLoading,\n isSearchLoading,\n } = useTokens(formType, search, isAllNetworks ? undefined : selectedChainId)\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 { tokens: configTokens } = useWidgetConfig()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n\n const pinnedTokens = usePinnedTokensStore((state) => state.pinnedTokens)\n\n const isBalanceLoading =\n (isBalanceQueriesLoading || isAccountsLoading) &&\n !allTokensWithBalances?.length\n\n // Create function to check if token is pinned\n const isPinnedToken = useMemo(() => {\n if (isAllNetworks) {\n // For all networks, check all pinned tokens\n const allPinned: Array<{ chainId: number; tokenAddress: string }> = []\n Object.entries(pinnedTokens).forEach(([chainIdStr, addresses]) => {\n const chainId = Number.parseInt(chainIdStr, 10)\n addresses.forEach((address) => {\n allPinned.push({ chainId, tokenAddress: address })\n })\n })\n const pinnedSet = new Set(\n allPinned.map((p) => `${p.chainId}-${p.tokenAddress.toLowerCase()}`)\n )\n return (chainId: number, tokenAddress: string) => {\n const key = `${chainId}-${tokenAddress.toLowerCase()}`\n return pinnedSet.has(key)\n }\n } else if (selectedChainId) {\n // For single chain, check only selected chain\n const chainPinnedTokens = pinnedTokens[selectedChainId] || []\n const pinnedSet = new Set(\n chainPinnedTokens.map((addr) => addr.toLowerCase())\n )\n return (chainId: number, tokenAddress: string) => {\n return (\n chainId === selectedChainId &&\n pinnedSet.has(tokenAddress.toLowerCase())\n )\n }\n }\n return undefined\n }, [isAllNetworks, selectedChainId, pinnedTokens])\n\n const displayedTokensList = useMemo(() => {\n const tokensByChain = isAllNetworks\n ? Object.values(allTokens ?? {}).flat()\n : selectedChainId\n ? allTokens?.[selectedChainId]\n : undefined\n return tokensByChain?.filter((t) => isSearchMatch(t, search)) ?? []\n }, [allTokens, isAllNetworks, selectedChainId, search])\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?.includes(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 matchesSearch = isSearchMatch(token, search)\n\n // Filter: only include tokens that match our criteria\n if (!isInDisplayedList && !matchesSearch) {\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 search,\n selectedChainId,\n isAllNetworks,\n smallBalanceThreshold,\n hiddenUI,\n ])\n\n const { processedTokens, withCategories, withPinnedTokens } = useMemo(() => {\n return processTokenBalances(\n isBalanceLoading,\n isAllNetworks || !!search,\n configTokens,\n selectedChainId,\n displayedTokensList,\n displayedTokensWithBalances,\n isPinnedToken\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 }\n}\n"],"mappings":"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"}
@@ -22,7 +22,8 @@ const useTokens = (formType, search, chainId) => {
22
22
  ChainType.EVM,
23
23
  ChainType.SVM,
24
24
  ChainType.UTXO,
25
- ChainType.MVM
25
+ ChainType.MVM,
26
+ ChainType.TVM
26
27
  ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types)),
27
28
  orderBy: "volumeUSD24H",
28
29
  extended: true,
@@ -50,7 +51,8 @@ const useTokens = (formType, search, chainId) => {
50
51
  ChainType.EVM,
51
52
  ChainType.SVM,
52
53
  ChainType.UTXO,
53
- ChainType.MVM
54
+ ChainType.MVM,
55
+ ChainType.TVM
54
56
  ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types)),
55
57
  orderBy: "volumeUSD24H",
56
58
  extended: true,
@@ -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 { getChainTypeFromAddress } = useChainTypeFromAddress()\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 ].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 // Mark all tokens as verified\n const tokens: TokensByChain = Object.fromEntries(\n Object.entries(tokensResponse.tokens).map(([chainId, tokens]) => [\n chainId,\n tokens.map((token) => ({ ...token, verified: 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: [getQueryKey('tokens-search', keyPrefix), search, chainId],\n queryFn: async ({ queryKey, signal }) => {\n const [, searchQuery, searchChainId] = queryKey as [\n string,\n string,\n number,\n ]\n const chainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\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 // If the chainId is not provided, try to get it from the search query\n let _chainId = searchChainId\n if (!_chainId) {\n const chainType = getChainTypeFromAddress(searchQuery)\n if (chainType && chainType in defaultChainIdsByType) {\n _chainId = defaultChainIdsByType[chainType]\n }\n }\n\n // Fallback: If the main search returned no tokens for the specific chainId,\n // fetch a single token using the /token endpoint\n if (_chainId && searchQuery) {\n const existingTokens = tokensResponse.tokens[_chainId] || []\n if (!existingTokens.length) {\n const token = await getToken(sdkClient, _chainId, searchQuery, {\n signal,\n })\n if (token) {\n tokensResponse.tokens[_chainId] = [token]\n }\n }\n }\n\n // Mark all search tokens as unverified\n const tokens: TokensByChain = Object.fromEntries(\n Object.entries(tokensResponse.tokens).map(([chainId, tokens]) => [\n chainId,\n tokens.map((token) => ({ ...token, verified: false })),\n ])\n )\n\n return tokens\n },\n enabled: !!search,\n refetchInterval,\n staleTime: refetchInterval,\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(merged, configTokens, chainsConfig, formType)\n }, [verifiedTokens, searchTokens, configTokens, chainsConfig, formType])\n\n return {\n allTokens,\n isLoading,\n isSearchLoading,\n }\n}\n"],"mappings":";;;;;;;;;;;AAsBA,MAAM,kBAAkB;AAExB,MAAa,aACX,UACA,QACA,YAKG;CACH,MAAM,EACJ,QAAQ,cACR,QAAQ,cACR,cACE,iBAAiB;CACrB,MAAM,YAAY,cAAc;CAChC,MAAM,EAAE,4BAA4B,yBAAyB;CAG7D,MAAM,EAAE,MAAM,gBAAgB,cAAc,SAAS;EACnD,UAAU,CAAC,YAAY,UAAU,UAAU,CAAC;EAC5C,SAAS,OAAO,EAAE,aAAa;GAQ7B,MAAM,iBAAyC,MAAM,UACnD,WACA;IACE,YAVe;KACjB,UAAU;KACV,UAAU;KACV,UAAU;KACV,UAAU;KACX,CAAC,QAAQ,cAAc,cAAc,WAAW,cAAc,MAAM,CAAC;IAMlE,SAAS;IACT,UAAU;IACV,OAAO;IACP,aAAa;IACd,EACD,EAAE,QAAQ,CACX;AAUD,UAP8B,OAAO,YACnC,OAAO,QAAQ,eAAe,OAAO,CAAC,KAAK,CAAC,SAAS,YAAY,CAC/D,SACA,OAAO,KAAK,WAAW;IAAE,GAAG;IAAO,UAAU;IAAM,EAAE,CACtD,CAAC,CACH;;EAIH;EACA,WAAW;EACZ,CAAC;CAGF,MAAM,EAAE,MAAM,cAAc,WAAW,oBAAoB,SAAS;EAClE,UAAU;GAAC,YAAY,iBAAiB,UAAU;GAAE;GAAQ;GAAQ;EACpE,SAAS,OAAO,EAAE,UAAU,aAAa;GACvC,MAAM,GAAG,aAAa,iBAAiB;GAYvC,MAAM,iBAAyC,MAAM,UACnD,WACA;IACE,YAVe;KACjB,UAAU;KACV,UAAU;KACV,UAAU;KACV,UAAU;KACX,CAAC,QAAQ,cAAc,cAAc,WAAW,cAAc,MAAM,CAAC;IAMlE,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,aAAa;IACd,EACD,EAAE,QAAQ,CACX;GAGD,IAAI,WAAW;AACf,OAAI,CAAC,UAAU;IACb,MAAM,YAAY,wBAAwB,YAAY;AACtD,QAAI,aAAa,aAAa,sBAC5B,YAAW,sBAAsB;;AAMrC,OAAI,YAAY;QAEV,EADmB,eAAe,OAAO,aAAa,EAAE,EACxC,QAAQ;KAC1B,MAAM,QAAQ,MAAM,SAAS,WAAW,UAAU,aAAa,EAC7D,QACD,CAAC;AACF,SAAI,MACF,gBAAe,OAAO,YAAY,CAAC,MAAM;;;AAa/C,UAP8B,OAAO,YACnC,OAAO,QAAQ,eAAe,OAAO,CAAC,KAAK,CAAC,SAAS,YAAY,CAC/D,SACA,OAAO,KAAK,WAAW;IAAE,GAAG;IAAO,UAAU;IAAO,EAAE,CACvD,CAAC,CACH;;EAIH,SAAS,CAAC,CAAC;EACX;EACA,WAAW;EACZ,CAAC;AAQF,QAAO;EACL,WANgB,cAAc;AAE9B,UAAO,oBADQ,8BAA8B,gBAAgB,aAAa,EACvC,cAAc,cAAc,SAAS;KACvE;GAAC;GAAgB;GAAc;GAAc;GAAc;GAAS,CAAC;EAItE;EACA;EACD"}
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 { getChainTypeFromAddress } = useChainTypeFromAddress()\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 ].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 // Mark all tokens as verified\n const tokens: TokensByChain = Object.fromEntries(\n Object.entries(tokensResponse.tokens).map(([chainId, tokens]) => [\n chainId,\n tokens.map((token) => ({ ...token, verified: 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: [getQueryKey('tokens-search', keyPrefix), search, chainId],\n queryFn: async ({ queryKey, signal }) => {\n const [, searchQuery, searchChainId] = queryKey as [\n string,\n string,\n number,\n ]\n const chainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\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 // If the chainId is not provided, try to get it from the search query\n let _chainId = searchChainId\n if (!_chainId) {\n const chainType = getChainTypeFromAddress(searchQuery)\n if (chainType && chainType in defaultChainIdsByType) {\n _chainId = defaultChainIdsByType[chainType]\n }\n }\n\n // Fallback: If the main search returned no tokens for the specific chainId,\n // fetch a single token using the /token endpoint\n if (_chainId && searchQuery) {\n const existingTokens = tokensResponse.tokens[_chainId] || []\n if (!existingTokens.length) {\n const token = await getToken(sdkClient, _chainId, searchQuery, {\n signal,\n })\n if (token) {\n tokensResponse.tokens[_chainId] = [token]\n }\n }\n }\n\n // Mark all search tokens as unverified\n const tokens: TokensByChain = Object.fromEntries(\n Object.entries(tokensResponse.tokens).map(([chainId, tokens]) => [\n chainId,\n tokens.map((token) => ({ ...token, verified: false })),\n ])\n )\n\n return tokens\n },\n enabled: !!search,\n refetchInterval,\n staleTime: refetchInterval,\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(merged, configTokens, chainsConfig, formType)\n }, [verifiedTokens, searchTokens, configTokens, chainsConfig, formType])\n\n return {\n allTokens,\n isLoading,\n isSearchLoading,\n }\n}\n"],"mappings":";;;;;;;;;;;AAsBA,MAAM,kBAAkB;AAExB,MAAa,aACX,UACA,QACA,YAKG;CACH,MAAM,EACJ,QAAQ,cACR,QAAQ,cACR,cACE,iBAAiB;CACrB,MAAM,YAAY,cAAc;CAChC,MAAM,EAAE,4BAA4B,yBAAyB;CAG7D,MAAM,EAAE,MAAM,gBAAgB,cAAc,SAAS;EACnD,UAAU,CAAC,YAAY,UAAU,UAAU,CAAC;EAC5C,SAAS,OAAO,EAAE,aAAa;GAS7B,MAAM,iBAAyC,MAAM,UACnD,WACA;IACE,YAXe;KACjB,UAAU;KACV,UAAU;KACV,UAAU;KACV,UAAU;KACV,UAAU;KACX,CAAC,QAAQ,cAAc,cAAc,WAAW,cAAc,MAAM,CAAC;IAMlE,SAAS;IACT,UAAU;IACV,OAAO;IACP,aAAa;IACd,EACD,EAAE,QAAQ,CACX;AAUD,UAP8B,OAAO,YACnC,OAAO,QAAQ,eAAe,OAAO,CAAC,KAAK,CAAC,SAAS,YAAY,CAC/D,SACA,OAAO,KAAK,WAAW;IAAE,GAAG;IAAO,UAAU;IAAM,EAAE,CACtD,CAAC,CACH;;EAIH;EACA,WAAW;EACZ,CAAC;CAGF,MAAM,EAAE,MAAM,cAAc,WAAW,oBAAoB,SAAS;EAClE,UAAU;GAAC,YAAY,iBAAiB,UAAU;GAAE;GAAQ;GAAQ;EACpE,SAAS,OAAO,EAAE,UAAU,aAAa;GACvC,MAAM,GAAG,aAAa,iBAAiB;GAavC,MAAM,iBAAyC,MAAM,UACnD,WACA;IACE,YAXe;KACjB,UAAU;KACV,UAAU;KACV,UAAU;KACV,UAAU;KACV,UAAU;KACX,CAAC,QAAQ,cAAc,cAAc,WAAW,cAAc,MAAM,CAAC;IAMlE,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,aAAa;IACd,EACD,EAAE,QAAQ,CACX;GAGD,IAAI,WAAW;AACf,OAAI,CAAC,UAAU;IACb,MAAM,YAAY,wBAAwB,YAAY;AACtD,QAAI,aAAa,aAAa,sBAC5B,YAAW,sBAAsB;;AAMrC,OAAI,YAAY;QAEV,EADmB,eAAe,OAAO,aAAa,EAAE,EACxC,QAAQ;KAC1B,MAAM,QAAQ,MAAM,SAAS,WAAW,UAAU,aAAa,EAC7D,QACD,CAAC;AACF,SAAI,MACF,gBAAe,OAAO,YAAY,CAAC,MAAM;;;AAa/C,UAP8B,OAAO,YACnC,OAAO,QAAQ,eAAe,OAAO,CAAC,KAAK,CAAC,SAAS,YAAY,CAC/D,SACA,OAAO,KAAK,WAAW;IAAE,GAAG;IAAO,UAAU;IAAO,EAAE,CACvD,CAAC,CACH;;EAIH,SAAS,CAAC,CAAC;EACX;EACA,WAAW;EACZ,CAAC;AAQF,QAAO;EACL,WANgB,cAAc;AAE9B,UAAO,oBADQ,8BAA8B,gBAAgB,aAAa,EACvC,cAAc,cAAc,SAAS;KACvE;GAAC;GAAgB;GAAc;GAAc;GAAc;GAAS,CAAC;EAItE;EACA;EACD"}
@@ -1,5 +1,4 @@
1
1
  import { hasEnumFlag } from "../utils/enum.js";
2
- import { RouteExecutionStatus } from "../stores/routes/types.js";
3
2
  import { getSourceTxHash } from "../stores/routes/utils.js";
4
3
  import { useRouteExecutionStore } from "../stores/routes/RouteExecutionStore.js";
5
4
  import { useTransactionHistory } from "./useTransactionHistory.js";
@@ -21,12 +20,12 @@ const useTransactionList = () => {
21
20
  if (!accountAddresses.includes(r.route.fromAddress)) continue;
22
21
  if (apiTxHashes.has(getSourceTxHash(r.route))) continue;
23
22
  const startedAt = r.route.steps[0]?.execution?.startedAt ?? 0;
24
- if (r.status === RouteExecutionStatus.Pending || r.status === RouteExecutionStatus.Failed) activeItems.push({
23
+ if (r.status === 2 || r.status === 8) activeItems.push({
25
24
  type: "active",
26
25
  routeId: r.route.id,
27
26
  startedAt
28
27
  });
29
- else if (hasEnumFlag(r.status, RouteExecutionStatus.Done)) localItems.push({
28
+ else if (hasEnumFlag(r.status, 4)) localItems.push({
30
29
  type: "local",
31
30
  routeExecution: r,
32
31
  txHash: getSourceTxHash(r.route) ?? "",
@@ -1 +1 @@
1
- {"version":3,"file":"useTransactionList.js","names":[],"sources":["../../../src/hooks/useTransactionList.ts"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { useMemo } from 'react'\nimport type {\n ActiveItem,\n HistoryItem,\n LocalItem,\n TransactionListItem,\n} from '../pages/ActivitiesPage/types.js'\nimport { useRouteExecutionStore } from '../stores/routes/RouteExecutionStore.js'\nimport type {\n RouteExecution,\n RouteExecutionState,\n} from '../stores/routes/types.js'\nimport { RouteExecutionStatus } from '../stores/routes/types.js'\nimport { getSourceTxHash } from '../stores/routes/utils.js'\nimport { hasEnumFlag } from '../utils/enum.js'\nimport { useTransactionHistory } from './useTransactionHistory.js'\n\nconst routesSelector = (state: RouteExecutionState) => state.routes\n\nexport const useTransactionList = (): {\n items: TransactionListItem[]\n isLoading: boolean\n} => {\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n\n const { data: apiRouteExecutions, isLoading } = useTransactionHistory()\n const routes = useRouteExecutionStore(routesSelector)\n\n const items = useMemo<TransactionListItem[]>(() => {\n const apiTxHashes = new Set(\n apiRouteExecutions.map((r) => getSourceTxHash(r.route))\n )\n\n const activeItems: ActiveItem[] = []\n const localItems: LocalItem[] = []\n\n for (const r of Object.values(routes) as RouteExecution[]) {\n if (!accountAddresses.includes(r.route.fromAddress)) {\n continue\n }\n // Guard against duplicates on the render before the store deletion\n // from useTransactionHistory's combine propagates.\n if (apiTxHashes.has(getSourceTxHash(r.route))) {\n continue\n }\n const startedAt = r.route.steps[0]?.execution?.startedAt ?? 0\n if (\n r.status === RouteExecutionStatus.Pending ||\n r.status === RouteExecutionStatus.Failed\n ) {\n activeItems.push({ type: 'active', routeId: r.route.id, startedAt })\n } else if (hasEnumFlag(r.status, RouteExecutionStatus.Done)) {\n localItems.push({\n type: 'local',\n routeExecution: r,\n txHash: getSourceTxHash(r.route) ?? '',\n // store startedAt is already in ms\n startedAt,\n })\n }\n }\n\n const historyItems: HistoryItem[] = apiRouteExecutions.map(\n (routeExecution) => ({\n type: 'history',\n routeExecution,\n txHash: getSourceTxHash(routeExecution.route) ?? '',\n startedAt: routeExecution.route.steps[0]?.execution?.startedAt ?? 0,\n })\n )\n\n return [...activeItems, ...localItems, ...historyItems].sort(\n (a, b) => b.startedAt - a.startedAt\n )\n }, [accountAddresses, apiRouteExecutions, routes])\n\n return { items, isLoading }\n}\n"],"mappings":";;;;;;;;AAkBA,MAAM,kBAAkB,UAA+B,MAAM;AAE7D,MAAa,2BAGR;CACH,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,QAAQ,EAChD,CAAC,SAAS,CACX;CAED,MAAM,EAAE,MAAM,oBAAoB,cAAc,uBAAuB;CACvE,MAAM,SAAS,uBAAuB,eAAe;AAkDrD,QAAO;EAAE,OAhDK,cAAqC;GACjD,MAAM,cAAc,IAAI,IACtB,mBAAmB,KAAK,MAAM,gBAAgB,EAAE,MAAM,CAAC,CACxD;GAED,MAAM,cAA4B,EAAE;GACpC,MAAM,aAA0B,EAAE;AAElC,QAAK,MAAM,KAAK,OAAO,OAAO,OAAO,EAAsB;AACzD,QAAI,CAAC,iBAAiB,SAAS,EAAE,MAAM,YAAY,CACjD;AAIF,QAAI,YAAY,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAC3C;IAEF,MAAM,YAAY,EAAE,MAAM,MAAM,IAAI,WAAW,aAAa;AAC5D,QACE,EAAE,WAAW,qBAAqB,WAClC,EAAE,WAAW,qBAAqB,OAElC,aAAY,KAAK;KAAE,MAAM;KAAU,SAAS,EAAE,MAAM;KAAI;KAAW,CAAC;aAC3D,YAAY,EAAE,QAAQ,qBAAqB,KAAK,CACzD,YAAW,KAAK;KACd,MAAM;KACN,gBAAgB;KAChB,QAAQ,gBAAgB,EAAE,MAAM,IAAI;KAEpC;KACD,CAAC;;GAIN,MAAM,eAA8B,mBAAmB,KACpD,oBAAoB;IACnB,MAAM;IACN;IACA,QAAQ,gBAAgB,eAAe,MAAM,IAAI;IACjD,WAAW,eAAe,MAAM,MAAM,IAAI,WAAW,aAAa;IACnE,EACF;AAED,UAAO;IAAC,GAAG;IAAa,GAAG;IAAY,GAAG;IAAa,CAAC,MACrD,GAAG,MAAM,EAAE,YAAY,EAAE,UAC3B;KACA;GAAC;GAAkB;GAAoB;GAAO,CAAC;EAElC;EAAW"}
1
+ {"version":3,"file":"useTransactionList.js","names":[],"sources":["../../../src/hooks/useTransactionList.ts"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { useMemo } from 'react'\nimport type {\n ActiveItem,\n HistoryItem,\n LocalItem,\n TransactionListItem,\n} from '../pages/ActivitiesPage/types.js'\nimport { useRouteExecutionStore } from '../stores/routes/RouteExecutionStore.js'\nimport type {\n RouteExecution,\n RouteExecutionState,\n} from '../stores/routes/types.js'\nimport { RouteExecutionStatus } from '../stores/routes/types.js'\nimport { getSourceTxHash } from '../stores/routes/utils.js'\nimport { hasEnumFlag } from '../utils/enum.js'\nimport { useTransactionHistory } from './useTransactionHistory.js'\n\nconst routesSelector = (state: RouteExecutionState) => state.routes\n\nexport const useTransactionList = (): {\n items: TransactionListItem[]\n isLoading: boolean\n} => {\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n\n const { data: apiRouteExecutions, isLoading } = useTransactionHistory()\n const routes = useRouteExecutionStore(routesSelector)\n\n const items = useMemo<TransactionListItem[]>(() => {\n const apiTxHashes = new Set(\n apiRouteExecutions.map((r) => getSourceTxHash(r.route))\n )\n\n const activeItems: ActiveItem[] = []\n const localItems: LocalItem[] = []\n\n for (const r of Object.values(routes) as RouteExecution[]) {\n if (!accountAddresses.includes(r.route.fromAddress)) {\n continue\n }\n // Guard against duplicates on the render before the store deletion\n // from useTransactionHistory's combine propagates.\n if (apiTxHashes.has(getSourceTxHash(r.route))) {\n continue\n }\n const startedAt = r.route.steps[0]?.execution?.startedAt ?? 0\n if (\n r.status === RouteExecutionStatus.Pending ||\n r.status === RouteExecutionStatus.Failed\n ) {\n activeItems.push({ type: 'active', routeId: r.route.id, startedAt })\n } else if (hasEnumFlag(r.status, RouteExecutionStatus.Done)) {\n localItems.push({\n type: 'local',\n routeExecution: r,\n txHash: getSourceTxHash(r.route) ?? '',\n // store startedAt is already in ms\n startedAt,\n })\n }\n }\n\n const historyItems: HistoryItem[] = apiRouteExecutions.map(\n (routeExecution) => ({\n type: 'history',\n routeExecution,\n txHash: getSourceTxHash(routeExecution.route) ?? '',\n startedAt: routeExecution.route.steps[0]?.execution?.startedAt ?? 0,\n })\n )\n\n return [...activeItems, ...localItems, ...historyItems].sort(\n (a, b) => b.startedAt - a.startedAt\n )\n }, [accountAddresses, apiRouteExecutions, routes])\n\n return { items, isLoading }\n}\n"],"mappings":";;;;;;;AAkBA,MAAM,kBAAkB,UAA+B,MAAM;AAE7D,MAAa,2BAGR;CACH,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,QAAQ,EAChD,CAAC,SAAS,CACX;CAED,MAAM,EAAE,MAAM,oBAAoB,cAAc,uBAAuB;CACvE,MAAM,SAAS,uBAAuB,eAAe;AAkDrD,QAAO;EAAE,OAhDK,cAAqC;GACjD,MAAM,cAAc,IAAI,IACtB,mBAAmB,KAAK,MAAM,gBAAgB,EAAE,MAAM,CAAC,CACxD;GAED,MAAM,cAA4B,EAAE;GACpC,MAAM,aAA0B,EAAE;AAElC,QAAK,MAAM,KAAK,OAAO,OAAO,OAAO,EAAsB;AACzD,QAAI,CAAC,iBAAiB,SAAS,EAAE,MAAM,YAAY,CACjD;AAIF,QAAI,YAAY,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAC3C;IAEF,MAAM,YAAY,EAAE,MAAM,MAAM,IAAI,WAAW,aAAa;AAC5D,QACE,EAAE,WAAA,KACF,EAAE,WAAA,EAEF,aAAY,KAAK;KAAE,MAAM;KAAU,SAAS,EAAE,MAAM;KAAI;KAAW,CAAC;aAC3D,YAAY,EAAE,QAAA,EAAkC,CACzD,YAAW,KAAK;KACd,MAAM;KACN,gBAAgB;KAChB,QAAQ,gBAAgB,EAAE,MAAM,IAAI;KAEpC;KACD,CAAC;;GAIN,MAAM,eAA8B,mBAAmB,KACpD,oBAAoB;IACnB,MAAM;IACN;IACA,QAAQ,gBAAgB,eAAe,MAAM,IAAI;IACjD,WAAW,eAAe,MAAM,MAAM,IAAI,WAAW,aAAa;IACnE,EACF;AAED,UAAO;IAAC,GAAG;IAAa,GAAG;IAAY,GAAG;IAAa,CAAC,MACrD,GAAG,MAAM,EAAE,YAAY,EAAE,UAC3B;KACA;GAAC;GAAkB;GAAoB;GAAO,CAAC;EAElC;EAAW"}
@@ -132,6 +132,9 @@
132
132
  "slippageOutsideRecommendedLimits": "High slippage tolerance may result in unfavorable trade caused by front-running.",
133
133
  "slippageUnderRecommendedLimits": "Low slippage tolerance may cause transaction delays or failures."
134
134
  },
135
+ "checkbox": {
136
+ "highValueLoss": "I accept the high value loss"
137
+ },
135
138
  "title": {
136
139
  "clearFailedTransactions": "Clear all failed transactions?",
137
140
  "highValueLoss": "High value loss",
@@ -1,5 +1,4 @@
1
1
  import { PageContainer } from "../../components/PageContainer.js";
2
- import { RouteExecutionStatus } from "../../stores/routes/types.js";
3
2
  import { useRouteExecutionStore } from "../../stores/routes/RouteExecutionStore.js";
4
3
  import { TransactionCardSkeleton } from "../../components/TransactionCard/TransactionCardSkeleton.js";
5
4
  import { useHeader } from "../../hooks/useHeader.js";
@@ -23,7 +22,7 @@ const ActivitiesPage = () => {
23
22
  const { t } = useTranslation();
24
23
  const { accounts } = useAccount();
25
24
  const accountAddresses = useMemo(() => accounts.map((account) => account.address), [accounts]);
26
- const hasFailedItems = useRouteExecutionStore(useCallback((state) => Object.values(state.routes).some((r) => r?.status === RouteExecutionStatus.Failed && accountAddresses.includes(r.route.fromAddress)), [accountAddresses]));
25
+ const hasFailedItems = useRouteExecutionStore(useCallback((state) => Object.values(state.routes).some((r) => r?.status === 8 && accountAddresses.includes(r.route.fromAddress)), [accountAddresses]));
27
26
  useHeader(t("header.activities"), hasFailedItems ? /* @__PURE__ */ jsx(ActivitiesPageMenuButton, {}) : null);
28
27
  const { listHeight } = useListHeight({ listParentRef: parentRef });
29
28
  const hasStoreItems = items.length > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ActivitiesPage.js","names":[],"sources":["../../../../src/pages/ActivitiesPage/ActivitiesPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { Box, List } from '@mui/material'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { type JSX, useCallback, useMemo, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TransactionCardSkeleton } from '../../components/TransactionCard/TransactionCardSkeleton.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useTransactionList } from '../../hooks/useTransactionList.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { ActiveTransactionItem } from './ActiveTransactionItem.js'\nimport { ActivitiesPageMenuButton } from './ActivitiesPageMenuButton.js'\nimport { TransactionHistoryEmpty } from './TransactionHistoryEmpty.js'\nimport { TransactionHistoryItem } from './TransactionHistoryItem.js'\n\nconst SKELETON_COUNT = 3\n\nexport const ActivitiesPage = (): JSX.Element => {\n // Parent ref and useVirtualizer should be in one file to avoid blank page (0 virtual items) issue\n const parentRef = useRef<HTMLDivElement | null>(null)\n const { items, isLoading } = useTransactionList()\n const { t } = useTranslation()\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n const hasFailedItems = useRouteExecutionStore(\n useCallback(\n (state) =>\n Object.values(state.routes).some(\n (r) =>\n r?.status === RouteExecutionStatus.Failed &&\n accountAddresses.includes(r.route.fromAddress)\n ),\n [accountAddresses]\n )\n )\n\n useHeader(\n t('header.activities'),\n hasFailedItems ? <ActivitiesPageMenuButton /> : null\n )\n\n const { listHeight } = useListHeight({\n listParentRef: parentRef,\n })\n\n const hasStoreItems = items.length > 0\n const skeletonCount = isLoading && hasStoreItems ? SKELETON_COUNT : 0\n const totalCount = items.length + skeletonCount\n\n const getItemKey = useCallback(\n (index: number) => {\n if (index >= items.length) {\n return `skeleton-${index}`\n }\n const item = items[index]\n if (item.type === 'active') {\n return `active-${item.routeId}`\n }\n return `${item.type}-${item.txHash || item.routeExecution.route.id}`\n },\n [items]\n )\n\n const { getVirtualItems, getTotalSize, measureElement } = useVirtualizer({\n count: hasStoreItems ? totalCount : 0,\n overscan: 3,\n paddingEnd: 12,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => (items[index]?.type === 'active' ? 218 : 196),\n getItemKey,\n })\n\n if (!items.length && !isLoading) {\n return <TransactionHistoryEmpty />\n }\n\n return (\n <PageContainer disableGutters style={{ minHeight: 544 }}>\n <Box\n ref={parentRef}\n style={{ height: listHeight }}\n sx={{ overflow: 'auto', paddingX: 3 }}\n >\n {isLoading && !hasStoreItems ? (\n <List\n disablePadding\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginBottom: 2,\n }}\n >\n {Array.from({ length: SKELETON_COUNT }).map((_, index) => (\n <TransactionCardSkeleton key={index} />\n ))}\n </List>\n ) : (\n <List\n className=\"long-list\"\n style={{ height: getTotalSize(), position: 'relative' }}\n disablePadding\n >\n {getVirtualItems().map((item) => {\n const listItem =\n item.index < items.length ? items[item.index] : null\n return (\n <li\n key={item.key}\n ref={measureElement}\n data-index={item.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n paddingBottom: 16,\n transform: `translateY(${item.start}px)`,\n listStyle: 'none',\n }}\n >\n {!listItem ? (\n <TransactionCardSkeleton />\n ) : listItem.type === 'active' ? (\n <ActiveTransactionItem routeId={listItem.routeId} />\n ) : (\n <TransactionHistoryItem\n route={listItem.routeExecution.route}\n type={listItem.type}\n transactionHash={listItem.txHash}\n startedAt={listItem.startedAt}\n />\n )}\n </li>\n )\n })}\n </List>\n )}\n </Box>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,MAAM,iBAAiB;AAEvB,MAAa,uBAAoC;CAE/C,MAAM,YAAY,OAA8B,KAAK;CACrD,MAAM,EAAE,OAAO,cAAc,oBAAoB;CACjD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,QAAQ,EAChD,CAAC,SAAS,CACX;CACD,MAAM,iBAAiB,uBACrB,aACG,UACC,OAAO,OAAO,MAAM,OAAO,CAAC,MACzB,MACC,GAAG,WAAW,qBAAqB,UACnC,iBAAiB,SAAS,EAAE,MAAM,YAAY,CACjD,EACH,CAAC,iBAAiB,CACnB,CACF;AAED,WACE,EAAE,oBAAoB,EACtB,iBAAiB,oBAAC,0BAAD,EAA4B,CAAA,GAAG,KACjD;CAED,MAAM,EAAE,eAAe,cAAc,EACnC,eAAe,WAChB,CAAC;CAEF,MAAM,gBAAgB,MAAM,SAAS;CACrC,MAAM,gBAAgB,aAAa,gBAAgB,iBAAiB;CACpE,MAAM,aAAa,MAAM,SAAS;CAElC,MAAM,aAAa,aAChB,UAAkB;AACjB,MAAI,SAAS,MAAM,OACjB,QAAO,YAAY;EAErB,MAAM,OAAO,MAAM;AACnB,MAAI,KAAK,SAAS,SAChB,QAAO,UAAU,KAAK;AAExB,SAAO,GAAG,KAAK,KAAK,GAAG,KAAK,UAAU,KAAK,eAAe,MAAM;IAElE,CAAC,MAAM,CACR;CAED,MAAM,EAAE,iBAAiB,cAAc,mBAAmB,eAAe;EACvE,OAAO,gBAAgB,aAAa;EACpC,UAAU;EACV,YAAY;EACZ,wBAAwB,UAAU;EAClC,eAAe,UAAW,MAAM,QAAQ,SAAS,WAAW,MAAM;EAClE;EACD,CAAC;AAEF,KAAI,CAAC,MAAM,UAAU,CAAC,UACpB,QAAO,oBAAC,yBAAD,EAA2B,CAAA;AAGpC,QACE,oBAAC,eAAD;EAAe,gBAAA;EAAe,OAAO,EAAE,WAAW,KAAK;YACrD,oBAAC,KAAD;GACE,KAAK;GACL,OAAO,EAAE,QAAQ,YAAY;GAC7B,IAAI;IAAE,UAAU;IAAQ,UAAU;IAAG;aAEpC,aAAa,CAAC,gBACb,oBAAC,MAAD;IACE,gBAAA;IACA,IAAI;KACF,SAAS;KACT,eAAe;KACf,KAAK;KACL,cAAc;KACf;cAEA,MAAM,KAAK,EAAE,QAAQ,gBAAgB,CAAC,CAAC,KAAK,GAAG,UAC9C,oBAAC,yBAAD,EAAuC,EAAT,MAAS,CACvC;IACG,CAAA,GAEP,oBAAC,MAAD;IACE,WAAU;IACV,OAAO;KAAE,QAAQ,cAAc;KAAE,UAAU;KAAY;IACvD,gBAAA;cAEC,iBAAiB,CAAC,KAAK,SAAS;KAC/B,MAAM,WACJ,KAAK,QAAQ,MAAM,SAAS,MAAM,KAAK,SAAS;AAClD,YACE,oBAAC,MAAD;MAEE,KAAK;MACL,cAAY,KAAK;MACjB,OAAO;OACL,UAAU;OACV,KAAK;OACL,MAAM;OACN,OAAO;OACP,eAAe;OACf,WAAW,cAAc,KAAK,MAAM;OACpC,WAAW;OACZ;gBAEA,CAAC,WACA,oBAAC,yBAAD,EAA2B,CAAA,GACzB,SAAS,SAAS,WACpB,oBAAC,uBAAD,EAAuB,SAAS,SAAS,SAAW,CAAA,GAEpD,oBAAC,wBAAD;OACE,OAAO,SAAS,eAAe;OAC/B,MAAM,SAAS;OACf,iBAAiB,SAAS;OAC1B,WAAW,SAAS;OACpB,CAAA;MAED,EAzBE,KAAK,IAyBP;MAEP;IACG,CAAA;GAEL,CAAA;EACQ,CAAA"}
1
+ {"version":3,"file":"ActivitiesPage.js","names":[],"sources":["../../../../src/pages/ActivitiesPage/ActivitiesPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { Box, List } from '@mui/material'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { type JSX, useCallback, useMemo, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TransactionCardSkeleton } from '../../components/TransactionCard/TransactionCardSkeleton.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useTransactionList } from '../../hooks/useTransactionList.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { ActiveTransactionItem } from './ActiveTransactionItem.js'\nimport { ActivitiesPageMenuButton } from './ActivitiesPageMenuButton.js'\nimport { TransactionHistoryEmpty } from './TransactionHistoryEmpty.js'\nimport { TransactionHistoryItem } from './TransactionHistoryItem.js'\n\nconst SKELETON_COUNT = 3\n\nexport const ActivitiesPage = (): JSX.Element => {\n // Parent ref and useVirtualizer should be in one file to avoid blank page (0 virtual items) issue\n const parentRef = useRef<HTMLDivElement | null>(null)\n const { items, isLoading } = useTransactionList()\n const { t } = useTranslation()\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n const hasFailedItems = useRouteExecutionStore(\n useCallback(\n (state) =>\n Object.values(state.routes).some(\n (r) =>\n r?.status === RouteExecutionStatus.Failed &&\n accountAddresses.includes(r.route.fromAddress)\n ),\n [accountAddresses]\n )\n )\n\n useHeader(\n t('header.activities'),\n hasFailedItems ? <ActivitiesPageMenuButton /> : null\n )\n\n const { listHeight } = useListHeight({\n listParentRef: parentRef,\n })\n\n const hasStoreItems = items.length > 0\n const skeletonCount = isLoading && hasStoreItems ? SKELETON_COUNT : 0\n const totalCount = items.length + skeletonCount\n\n const getItemKey = useCallback(\n (index: number) => {\n if (index >= items.length) {\n return `skeleton-${index}`\n }\n const item = items[index]\n if (item.type === 'active') {\n return `active-${item.routeId}`\n }\n return `${item.type}-${item.txHash || item.routeExecution.route.id}`\n },\n [items]\n )\n\n const { getVirtualItems, getTotalSize, measureElement } = useVirtualizer({\n count: hasStoreItems ? totalCount : 0,\n overscan: 3,\n paddingEnd: 12,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => (items[index]?.type === 'active' ? 218 : 196),\n getItemKey,\n })\n\n if (!items.length && !isLoading) {\n return <TransactionHistoryEmpty />\n }\n\n return (\n <PageContainer disableGutters style={{ minHeight: 544 }}>\n <Box\n ref={parentRef}\n style={{ height: listHeight }}\n sx={{ overflow: 'auto', paddingX: 3 }}\n >\n {isLoading && !hasStoreItems ? (\n <List\n disablePadding\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginBottom: 2,\n }}\n >\n {Array.from({ length: SKELETON_COUNT }).map((_, index) => (\n <TransactionCardSkeleton key={index} />\n ))}\n </List>\n ) : (\n <List\n className=\"long-list\"\n style={{ height: getTotalSize(), position: 'relative' }}\n disablePadding\n >\n {getVirtualItems().map((item) => {\n const listItem =\n item.index < items.length ? items[item.index] : null\n return (\n <li\n key={item.key}\n ref={measureElement}\n data-index={item.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n paddingBottom: 16,\n transform: `translateY(${item.start}px)`,\n listStyle: 'none',\n }}\n >\n {!listItem ? (\n <TransactionCardSkeleton />\n ) : listItem.type === 'active' ? (\n <ActiveTransactionItem routeId={listItem.routeId} />\n ) : (\n <TransactionHistoryItem\n route={listItem.routeExecution.route}\n type={listItem.type}\n transactionHash={listItem.txHash}\n startedAt={listItem.startedAt}\n />\n )}\n </li>\n )\n })}\n </List>\n )}\n </Box>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,MAAM,iBAAiB;AAEvB,MAAa,uBAAoC;CAE/C,MAAM,YAAY,OAA8B,KAAK;CACrD,MAAM,EAAE,OAAO,cAAc,oBAAoB;CACjD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,QAAQ,EAChD,CAAC,SAAS,CACX;CACD,MAAM,iBAAiB,uBACrB,aACG,UACC,OAAO,OAAO,MAAM,OAAO,CAAC,MACzB,MACC,GAAG,WAAA,KACH,iBAAiB,SAAS,EAAE,MAAM,YAAY,CACjD,EACH,CAAC,iBAAiB,CACnB,CACF;AAED,WACE,EAAE,oBAAoB,EACtB,iBAAiB,oBAAC,0BAAD,EAA4B,CAAA,GAAG,KACjD;CAED,MAAM,EAAE,eAAe,cAAc,EACnC,eAAe,WAChB,CAAC;CAEF,MAAM,gBAAgB,MAAM,SAAS;CACrC,MAAM,gBAAgB,aAAa,gBAAgB,iBAAiB;CACpE,MAAM,aAAa,MAAM,SAAS;CAElC,MAAM,aAAa,aAChB,UAAkB;AACjB,MAAI,SAAS,MAAM,OACjB,QAAO,YAAY;EAErB,MAAM,OAAO,MAAM;AACnB,MAAI,KAAK,SAAS,SAChB,QAAO,UAAU,KAAK;AAExB,SAAO,GAAG,KAAK,KAAK,GAAG,KAAK,UAAU,KAAK,eAAe,MAAM;IAElE,CAAC,MAAM,CACR;CAED,MAAM,EAAE,iBAAiB,cAAc,mBAAmB,eAAe;EACvE,OAAO,gBAAgB,aAAa;EACpC,UAAU;EACV,YAAY;EACZ,wBAAwB,UAAU;EAClC,eAAe,UAAW,MAAM,QAAQ,SAAS,WAAW,MAAM;EAClE;EACD,CAAC;AAEF,KAAI,CAAC,MAAM,UAAU,CAAC,UACpB,QAAO,oBAAC,yBAAD,EAA2B,CAAA;AAGpC,QACE,oBAAC,eAAD;EAAe,gBAAA;EAAe,OAAO,EAAE,WAAW,KAAK;YACrD,oBAAC,KAAD;GACE,KAAK;GACL,OAAO,EAAE,QAAQ,YAAY;GAC7B,IAAI;IAAE,UAAU;IAAQ,UAAU;IAAG;aAEpC,aAAa,CAAC,gBACb,oBAAC,MAAD;IACE,gBAAA;IACA,IAAI;KACF,SAAS;KACT,eAAe;KACf,KAAK;KACL,cAAc;KACf;cAEA,MAAM,KAAK,EAAE,QAAQ,gBAAgB,CAAC,CAAC,KAAK,GAAG,UAC9C,oBAAC,yBAAD,EAAuC,EAAT,MAAS,CACvC;IACG,CAAA,GAEP,oBAAC,MAAD;IACE,WAAU;IACV,OAAO;KAAE,QAAQ,cAAc;KAAE,UAAU;KAAY;IACvD,gBAAA;cAEC,iBAAiB,CAAC,KAAK,SAAS;KAC/B,MAAM,WACJ,KAAK,QAAQ,MAAM,SAAS,MAAM,KAAK,SAAS;AAClD,YACE,oBAAC,MAAD;MAEE,KAAK;MACL,cAAY,KAAK;MACjB,OAAO;OACL,UAAU;OACV,KAAK;OACL,MAAM;OACN,OAAO;OACP,eAAe;OACf,WAAW,cAAc,KAAK,MAAM;OACpC,WAAW;OACZ;gBAEA,CAAC,WACA,oBAAC,yBAAD,EAA2B,CAAA,GACzB,SAAS,SAAS,WACpB,oBAAC,uBAAD,EAAuB,SAAS,SAAS,SAAW,CAAA,GAEpD,oBAAC,wBAAD;OACE,OAAO,SAAS,eAAe;OAC/B,MAAM,SAAS;OACf,iBAAiB,SAAS;OAC1B,WAAW,SAAS;OACpB,CAAA;MAED,EAzBE,KAAK,IAyBP;MAEP;IACG,CAAA;GAEL,CAAA;EACQ,CAAA"}
@@ -7,7 +7,7 @@ import { Button } from "@mui/material";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { useTranslation } from "react-i18next";
9
9
  import { useAccount } from "@lifi/wallet-management";
10
- import DeleteOutline from "@mui/icons-material/DeleteOutline";
10
+ import DeleteOutline from "@mui/icons-material/DeleteOutlined";
11
11
  //#region src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx
12
12
  const ActivitiesPageMenuButton = () => {
13
13
  const { t } = useTranslation();
@@ -1 +1 @@
1
- {"version":3,"file":"ActivitiesPageMenuButton.js","names":["DeleteOutlineIcon","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions"],"sources":["../../../../src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'\nimport { Button } from '@mui/material'\nimport { useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ContextMenu } from '../../components/ContextMenu.js'\nimport { Dialog } from '../../components/Dialog/Dialog.js'\nimport {\n DialogActions,\n DialogContainer,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from '../../components/Dialog/Dialog.style.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\n\nexport const ActivitiesPageMenuButton: React.FC = () => {\n const { t } = useTranslation()\n const [dialogOpen, setDialogOpen] = useState(false)\n const deleteRoutes = useRouteExecutionStore((store) => store.deleteRoutes)\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.flatMap((account) => account.address ?? []),\n [accounts]\n )\n\n const handleDialogOpen = () => setDialogOpen(true)\n const handleDialogClose = () => setDialogOpen(false)\n\n const handleRemoveAllFailed = () => {\n deleteRoutes('failed', accountAddresses)\n handleDialogClose()\n }\n\n return (\n <>\n <ContextMenu\n buttonSx={{ position: 'static', marginRight: -1.5 }}\n items={[\n {\n icon: <DeleteOutlineIcon />,\n label: t('button.clearAllFailed'),\n onClick: handleDialogOpen,\n },\n ]}\n />\n <Dialog open={dialogOpen} onClose={handleDialogClose}>\n <DialogContainer>\n <DialogTitle>\n {t('warning.title.clearFailedTransactions')}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {t('warning.message.clearFailedTransactions')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleDialogClose}>{t('button.cancel')}</Button>\n <Button\n variant=\"contained\"\n onClick={handleRemoveAllFailed}\n autoFocus\n >\n {t('button.delete')}\n </Button>\n </DialogActions>\n </DialogContainer>\n </Dialog>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAa,iCAA2C;CACtD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,eAAe,wBAAwB,UAAU,MAAM,aAAa;CAC1E,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,SAAS,YAAY,QAAQ,WAAW,EAAE,CAAC,EAC1D,CAAC,SAAS,CACX;CAED,MAAM,yBAAyB,cAAc,KAAK;CAClD,MAAM,0BAA0B,cAAc,MAAM;CAEpD,MAAM,8BAA8B;AAClC,eAAa,UAAU,iBAAiB;AACxC,qBAAmB;;AAGrB,QACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,aAAD;EACE,UAAU;GAAE,UAAU;GAAU,aAAa;GAAM;EACnD,OAAO,CACL;GACE,MAAM,oBAACA,eAAD,EAAqB,CAAA;GAC3B,OAAO,EAAE,wBAAwB;GACjC,SAAS;GACV,CACF;EACD,CAAA,EACF,oBAACC,UAAD;EAAQ,MAAM;EAAY,SAAS;YACjC,qBAAC,iBAAD,EAAA,UAAA;GACE,oBAACC,eAAD,EAAA,UACG,EAAE,wCAAwC,EAC/B,CAAA;GACd,oBAACC,iBAAD,EAAA,UACE,oBAACC,qBAAD,EAAA,UACG,EAAE,0CAA0C,EAC3B,CAAA,EACN,CAAA;GAChB,qBAACC,iBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAS;cAAoB,EAAE,gBAAgB;IAAU,CAAA,EACjE,oBAAC,QAAD;IACE,SAAQ;IACR,SAAS;IACT,WAAA;cAEC,EAAE,gBAAgB;IACZ,CAAA,CACK,EAAA,CAAA;GACA,EAAA,CAAA;EACX,CAAA,CACR,EAAA,CAAA"}
1
+ {"version":3,"file":"ActivitiesPageMenuButton.js","names":["DeleteOutlineIcon","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions"],"sources":["../../../../src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutlined'\nimport { Button } from '@mui/material'\nimport { useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ContextMenu } from '../../components/ContextMenu.js'\nimport { Dialog } from '../../components/Dialog/Dialog.js'\nimport {\n DialogActions,\n DialogContainer,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from '../../components/Dialog/Dialog.style.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\n\nexport const ActivitiesPageMenuButton: React.FC = () => {\n const { t } = useTranslation()\n const [dialogOpen, setDialogOpen] = useState(false)\n const deleteRoutes = useRouteExecutionStore((store) => store.deleteRoutes)\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.flatMap((account) => account.address ?? []),\n [accounts]\n )\n\n const handleDialogOpen = () => setDialogOpen(true)\n const handleDialogClose = () => setDialogOpen(false)\n\n const handleRemoveAllFailed = () => {\n deleteRoutes('failed', accountAddresses)\n handleDialogClose()\n }\n\n return (\n <>\n <ContextMenu\n buttonSx={{ position: 'static', marginRight: -1.5 }}\n items={[\n {\n icon: <DeleteOutlineIcon />,\n label: t('button.clearAllFailed'),\n onClick: handleDialogOpen,\n },\n ]}\n />\n <Dialog open={dialogOpen} onClose={handleDialogClose}>\n <DialogContainer>\n <DialogTitle>\n {t('warning.title.clearFailedTransactions')}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {t('warning.message.clearFailedTransactions')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleDialogClose}>{t('button.cancel')}</Button>\n <Button\n variant=\"contained\"\n onClick={handleRemoveAllFailed}\n autoFocus\n >\n {t('button.delete')}\n </Button>\n </DialogActions>\n </DialogContainer>\n </Dialog>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAa,iCAA2C;CACtD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,eAAe,wBAAwB,UAAU,MAAM,aAAa;CAC1E,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,SAAS,YAAY,QAAQ,WAAW,EAAE,CAAC,EAC1D,CAAC,SAAS,CACX;CAED,MAAM,yBAAyB,cAAc,KAAK;CAClD,MAAM,0BAA0B,cAAc,MAAM;CAEpD,MAAM,8BAA8B;AAClC,eAAa,UAAU,iBAAiB;AACxC,qBAAmB;;AAGrB,QACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,aAAD;EACE,UAAU;GAAE,UAAU;GAAU,aAAa;GAAM;EACnD,OAAO,CACL;GACE,MAAM,oBAACA,eAAD,EAAqB,CAAA;GAC3B,OAAO,EAAE,wBAAwB;GACjC,SAAS;GACV,CACF;EACD,CAAA,EACF,oBAACC,UAAD;EAAQ,MAAM;EAAY,SAAS;YACjC,qBAAC,iBAAD,EAAA,UAAA;GACE,oBAACC,eAAD,EAAA,UACG,EAAE,wCAAwC,EAC/B,CAAA;GACd,oBAACC,iBAAD,EAAA,UACE,oBAACC,qBAAD,EAAA,UACG,EAAE,0CAA0C,EAC3B,CAAA,EACN,CAAA;GAChB,qBAACC,iBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAS;cAAoB,EAAE,gBAAgB;IAAU,CAAA,EACjE,oBAAC,QAAD;IACE,SAAQ;IACR,SAAS;IACT,WAAA;cAEC,EAAE,gBAAgB;IACZ,CAAA,CACK,EAAA,CAAA;GACA,EAAA,CAAA;EACX,CAAA,CACR,EAAA,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { useWidgetConfig } from "../../providers/WidgetProvider/WidgetProvider.js";
2
- import { HiddenUI } from "../../types/widget.js";
2
+ import "../../types/widget.js";
3
3
  import { PageContainer } from "../../components/PageContainer.js";
4
4
  import { useWideVariant } from "../../hooks/useWideVariant.js";
5
5
  import { useHeader } from "../../hooks/useHeader.js";
@@ -22,8 +22,8 @@ const MainPage = () => {
22
22
  const wideVariant = useWideVariant();
23
23
  const { subvariant, subvariantOptions, contractComponent, hiddenUI } = useWidgetConfig();
24
24
  const custom = subvariant === "custom";
25
- const showPoweredBy = !hiddenUI?.includes(HiddenUI.PoweredBy);
26
- const showGasRefuelMessage = !hiddenUI?.includes(HiddenUI.GasRefuelMessage);
25
+ const showPoweredBy = !hiddenUI?.includes("poweredBy");
26
+ const showGasRefuelMessage = !hiddenUI?.includes("gasRefuelMessage");
27
27
  const splitTitle = subvariantOptions?.split === "bridge" ? t("header.bridge") : subvariantOptions?.split === "swap" ? t("header.swap") : void 0;
28
28
  useHeader(subvariant === "custom" ? t(`header.${subvariantOptions?.custom ?? "checkout"}`) : subvariant === "refuel" ? t("header.gas") : subvariant === "split" && splitTitle ? splitTitle : t("header.exchange"));
29
29
  const marginSx = { marginBottom: 2 };
@@ -32,15 +32,15 @@ const MainPage = () => {
32
32
  sx: marginSx,
33
33
  children: contractComponent
34
34
  }) : null,
35
- /* @__PURE__ */ jsx(SelectChainAndToken, { mb: 2 }),
35
+ /* @__PURE__ */ jsx(SelectChainAndToken, { sx: marginSx }),
36
36
  !custom || subvariantOptions?.custom === "deposit" ? /* @__PURE__ */ jsx(AmountInput, {
37
37
  formType: "from",
38
38
  sx: marginSx
39
39
  }) : null,
40
40
  !wideVariant ? /* @__PURE__ */ jsx(Routes, { sx: marginSx }) : null,
41
41
  /* @__PURE__ */ jsx(SendToWalletButton, { sx: marginSx }),
42
- showGasRefuelMessage ? /* @__PURE__ */ jsx(GasRefuelMessage, { mb: 2 }) : null,
43
- /* @__PURE__ */ jsx(MainWarningMessages, { mb: 2 }),
42
+ showGasRefuelMessage ? /* @__PURE__ */ jsx(GasRefuelMessage, { sx: marginSx }) : null,
43
+ /* @__PURE__ */ jsx(MainWarningMessages, { sx: marginSx }),
44
44
  /* @__PURE__ */ jsxs(Box, {
45
45
  sx: {
46
46
  display: "flex",
@@ -1 +1 @@
1
- {"version":3,"file":"MainPage.js","names":[],"sources":["../../../../src/pages/MainPage/MainPage.tsx"],"sourcesContent":["import { Box } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { AmountInput } from '../../components/AmountInput/AmountInput.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { GasRefuelMessage } from '../../components/Messages/GasRefuelMessage.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { PoweredBy } from '../../components/PoweredBy/PoweredBy.js'\nimport { Routes } from '../../components/Routes/Routes.js'\nimport { SelectChainAndToken } from '../../components/SelectChainAndToken.js'\nimport { SendToWalletButton } from '../../components/SendToWallet/SendToWalletButton.js'\nimport { SendToWalletExpandButton } from '../../components/SendToWallet/SendToWalletExpandButton.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useWideVariant } from '../../hooks/useWideVariant.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { MainWarningMessages } from './MainWarningMessages.js'\nimport { ReviewButton } from './ReviewButton.js'\n\nexport const MainPage: React.FC = () => {\n const { t } = useTranslation()\n const wideVariant = useWideVariant()\n const { subvariant, subvariantOptions, contractComponent, hiddenUI } =\n useWidgetConfig()\n const custom = subvariant === 'custom'\n const showPoweredBy = !hiddenUI?.includes(HiddenUI.PoweredBy)\n const showGasRefuelMessage = !hiddenUI?.includes(HiddenUI.GasRefuelMessage)\n\n const splitTitle =\n subvariantOptions?.split === 'bridge'\n ? t('header.bridge')\n : subvariantOptions?.split === 'swap'\n ? t('header.swap')\n : undefined\n const title =\n subvariant === 'custom'\n ? t(`header.${subvariantOptions?.custom ?? 'checkout'}`)\n : subvariant === 'refuel'\n ? t('header.gas')\n : subvariant === 'split' && splitTitle\n ? splitTitle\n : t('header.exchange')\n\n useHeader(title)\n\n const marginSx = { marginBottom: 2 }\n\n return (\n <PageContainer>\n {custom ? (\n <ContractComponent sx={marginSx}>{contractComponent}</ContractComponent>\n ) : null}\n <SelectChainAndToken mb={2} />\n {!custom || subvariantOptions?.custom === 'deposit' ? (\n <AmountInput formType=\"from\" sx={marginSx} />\n ) : null}\n {!wideVariant ? <Routes sx={marginSx} /> : null}\n <SendToWalletButton sx={marginSx} />\n {showGasRefuelMessage ? <GasRefuelMessage mb={2} /> : null}\n <MainWarningMessages mb={2} />\n <Box\n sx={{\n display: 'flex',\n mb: showPoweredBy ? 1 : 3,\n }}\n >\n <ReviewButton />\n <SendToWalletExpandButton />\n </Box>\n {showPoweredBy ? <PoweredBy /> : null}\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAa,iBAA2B;CACtC,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,cAAc,gBAAgB;CACpC,MAAM,EAAE,YAAY,mBAAmB,mBAAmB,aACxD,iBAAiB;CACnB,MAAM,SAAS,eAAe;CAC9B,MAAM,gBAAgB,CAAC,UAAU,SAAS,SAAS,UAAU;CAC7D,MAAM,uBAAuB,CAAC,UAAU,SAAS,SAAS,iBAAiB;CAE3E,MAAM,aACJ,mBAAmB,UAAU,WACzB,EAAE,gBAAgB,GAClB,mBAAmB,UAAU,SAC3B,EAAE,cAAc,GAChB,KAAA;AAUR,WARE,eAAe,WACX,EAAE,UAAU,mBAAmB,UAAU,aAAa,GACtD,eAAe,WACb,EAAE,aAAa,GACf,eAAe,WAAW,aACxB,aACA,EAAE,kBAAkB,CAEd;CAEhB,MAAM,WAAW,EAAE,cAAc,GAAG;AAEpC,QACE,qBAAC,eAAD,EAAA,UAAA;EACG,SACC,oBAAC,mBAAD;GAAmB,IAAI;aAAW;GAAsC,CAAA,GACtE;EACJ,oBAAC,qBAAD,EAAqB,IAAI,GAAK,CAAA;EAC7B,CAAC,UAAU,mBAAmB,WAAW,YACxC,oBAAC,aAAD;GAAa,UAAS;GAAO,IAAI;GAAY,CAAA,GAC3C;EACH,CAAC,cAAc,oBAAC,QAAD,EAAQ,IAAI,UAAY,CAAA,GAAG;EAC3C,oBAAC,oBAAD,EAAoB,IAAI,UAAY,CAAA;EACnC,uBAAuB,oBAAC,kBAAD,EAAkB,IAAI,GAAK,CAAA,GAAG;EACtD,oBAAC,qBAAD,EAAqB,IAAI,GAAK,CAAA;EAC9B,qBAAC,KAAD;GACE,IAAI;IACF,SAAS;IACT,IAAI,gBAAgB,IAAI;IACzB;aAJH,CAME,oBAAC,cAAD,EAAgB,CAAA,EAChB,oBAAC,0BAAD,EAA4B,CAAA,CACxB;;EACL,gBAAgB,oBAAC,WAAD,EAAa,CAAA,GAAG;EACnB,EAAA,CAAA"}
1
+ {"version":3,"file":"MainPage.js","names":[],"sources":["../../../../src/pages/MainPage/MainPage.tsx"],"sourcesContent":["import { Box } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { AmountInput } from '../../components/AmountInput/AmountInput.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { GasRefuelMessage } from '../../components/Messages/GasRefuelMessage.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { PoweredBy } from '../../components/PoweredBy/PoweredBy.js'\nimport { Routes } from '../../components/Routes/Routes.js'\nimport { SelectChainAndToken } from '../../components/SelectChainAndToken.js'\nimport { SendToWalletButton } from '../../components/SendToWallet/SendToWalletButton.js'\nimport { SendToWalletExpandButton } from '../../components/SendToWallet/SendToWalletExpandButton.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useWideVariant } from '../../hooks/useWideVariant.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { MainWarningMessages } from './MainWarningMessages.js'\nimport { ReviewButton } from './ReviewButton.js'\n\nexport const MainPage: React.FC = () => {\n const { t } = useTranslation()\n const wideVariant = useWideVariant()\n const { subvariant, subvariantOptions, contractComponent, hiddenUI } =\n useWidgetConfig()\n const custom = subvariant === 'custom'\n const showPoweredBy = !hiddenUI?.includes(HiddenUI.PoweredBy)\n const showGasRefuelMessage = !hiddenUI?.includes(HiddenUI.GasRefuelMessage)\n\n const splitTitle =\n subvariantOptions?.split === 'bridge'\n ? t('header.bridge')\n : subvariantOptions?.split === 'swap'\n ? t('header.swap')\n : undefined\n const title =\n subvariant === 'custom'\n ? t(`header.${subvariantOptions?.custom ?? 'checkout'}`)\n : subvariant === 'refuel'\n ? t('header.gas')\n : subvariant === 'split' && splitTitle\n ? splitTitle\n : t('header.exchange')\n\n useHeader(title)\n\n const marginSx = { marginBottom: 2 }\n\n return (\n <PageContainer>\n {custom ? (\n <ContractComponent sx={marginSx}>{contractComponent}</ContractComponent>\n ) : null}\n <SelectChainAndToken sx={marginSx} />\n {!custom || subvariantOptions?.custom === 'deposit' ? (\n <AmountInput formType=\"from\" sx={marginSx} />\n ) : null}\n {!wideVariant ? <Routes sx={marginSx} /> : null}\n <SendToWalletButton sx={marginSx} />\n {showGasRefuelMessage ? <GasRefuelMessage sx={marginSx} /> : null}\n <MainWarningMessages sx={marginSx} />\n <Box\n sx={{\n display: 'flex',\n mb: showPoweredBy ? 1 : 3,\n }}\n >\n <ReviewButton />\n <SendToWalletExpandButton />\n </Box>\n {showPoweredBy ? <PoweredBy /> : null}\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAa,iBAA2B;CACtC,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,cAAc,gBAAgB;CACpC,MAAM,EAAE,YAAY,mBAAmB,mBAAmB,aACxD,iBAAiB;CACnB,MAAM,SAAS,eAAe;CAC9B,MAAM,gBAAgB,CAAC,UAAU,SAAA,YAA4B;CAC7D,MAAM,uBAAuB,CAAC,UAAU,SAAA,mBAAmC;CAE3E,MAAM,aACJ,mBAAmB,UAAU,WACzB,EAAE,gBAAgB,GAClB,mBAAmB,UAAU,SAC3B,EAAE,cAAc,GAChB,KAAA;AAUR,WARE,eAAe,WACX,EAAE,UAAU,mBAAmB,UAAU,aAAa,GACtD,eAAe,WACb,EAAE,aAAa,GACf,eAAe,WAAW,aACxB,aACA,EAAE,kBAAkB,CAEd;CAEhB,MAAM,WAAW,EAAE,cAAc,GAAG;AAEpC,QACE,qBAAC,eAAD,EAAA,UAAA;EACG,SACC,oBAAC,mBAAD;GAAmB,IAAI;aAAW;GAAsC,CAAA,GACtE;EACJ,oBAAC,qBAAD,EAAqB,IAAI,UAAY,CAAA;EACpC,CAAC,UAAU,mBAAmB,WAAW,YACxC,oBAAC,aAAD;GAAa,UAAS;GAAO,IAAI;GAAY,CAAA,GAC3C;EACH,CAAC,cAAc,oBAAC,QAAD,EAAQ,IAAI,UAAY,CAAA,GAAG;EAC3C,oBAAC,oBAAD,EAAoB,IAAI,UAAY,CAAA;EACnC,uBAAuB,oBAAC,kBAAD,EAAkB,IAAI,UAAY,CAAA,GAAG;EAC7D,oBAAC,qBAAD,EAAqB,IAAI,UAAY,CAAA;EACrC,qBAAC,KAAD;GACE,IAAI;IACF,SAAS;IACT,IAAI,gBAAgB,IAAI;IACzB;aAJH,CAME,oBAAC,cAAD,EAAgB,CAAA,EAChB,oBAAC,0BAAD,EAA4B,CAAA,CACxB;;EACL,gBAAgB,oBAAC,WAAD,EAAa,CAAA,GAAG;EACnB,EAAA,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { useWidgetEvents } from "../../hooks/useWidgetEvents.js";
2
- import { WidgetEvent } from "../../types/events.js";
2
+ import "../../types/events.js";
3
3
  import { useWidgetConfig } from "../../providers/WidgetProvider/WidgetProvider.js";
4
4
  import { navigationRoutes } from "../../utils/navigationRoutes.js";
5
5
  import { useSplitSubvariantStore } from "../../stores/settings/useSplitSubvariantStore.js";
@@ -26,7 +26,7 @@ const ReviewButton = () => {
26
26
  to: navigationRoutes.transactionExecution,
27
27
  search: { routeId: currentRoute.id }
28
28
  });
29
- emitter.emit(WidgetEvent.RouteSelected, {
29
+ emitter.emit("routeSelected", {
30
30
  route: currentRoute,
31
31
  routes
32
32
  });