@lifi/widget 4.0.0-beta.18 → 4.0.0-beta.20

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 (303) hide show
  1. package/dist/esm/App.js.map +1 -1
  2. package/dist/esm/AppDefault.js.map +1 -1
  3. package/dist/esm/AppDrawer.js.map +1 -1
  4. package/dist/esm/AppLayout.js.map +1 -1
  5. package/dist/esm/AppProvider.js.map +1 -1
  6. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  7. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  8. package/dist/esm/components/AmountInput/AmountInputStartAdornment.js.map +1 -1
  9. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  10. package/dist/esm/components/AppContainer.js.map +1 -1
  11. package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
  12. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  13. package/dist/esm/components/Avatar/Avatar.style.js.map +1 -1
  14. package/dist/esm/components/Avatar/ChainBadgeContent.js.map +1 -1
  15. package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
  16. package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
  17. package/dist/esm/components/Avatar/utils.js.map +1 -1
  18. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
  19. package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
  20. package/dist/esm/components/Card/Card.js.map +1 -1
  21. package/dist/esm/components/Card/CardIconButton.js.map +1 -1
  22. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  23. package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
  24. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  25. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  26. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  27. package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
  28. package/dist/esm/components/Chains/ChainListItem.js.map +1 -1
  29. package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
  30. package/dist/esm/components/Chains/ChainsExpanded.js.map +1 -1
  31. package/dist/esm/components/Chains/PinChainButton.js.map +1 -1
  32. package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
  33. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  34. package/dist/esm/components/ContextMenu.js.map +1 -1
  35. package/dist/esm/components/ContractComponent/ContractComponent.js.map +1 -1
  36. package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
  37. package/dist/esm/components/ContractComponent/NFT/NFT.js.map +1 -1
  38. package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
  39. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  40. package/dist/esm/components/Expansion/Expansion.js.map +1 -1
  41. package/dist/esm/components/Expansion/ExpansionTransition.js.map +1 -1
  42. package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
  43. package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
  44. package/dist/esm/components/Header/BackButton.js.map +1 -1
  45. package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
  46. package/dist/esm/components/Header/DisconnectIconButton.js.map +1 -1
  47. package/dist/esm/components/Header/Header.js.map +1 -1
  48. package/dist/esm/components/Header/Header.style.js.map +1 -1
  49. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  50. package/dist/esm/components/Header/SettingsButton.js.map +1 -1
  51. package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
  52. package/dist/esm/components/Header/SplitNavigationTabs.js.map +1 -1
  53. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  54. package/dist/esm/components/Header/WalletMenu.js.map +1 -1
  55. package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
  56. package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
  57. package/dist/esm/components/Initializer.js.map +1 -1
  58. package/dist/esm/components/ListItemButton.js.map +1 -1
  59. package/dist/esm/components/Messages/AccountDeployedMessage.js.map +1 -1
  60. package/dist/esm/components/Messages/AccountNotDeployedMessage.js.map +1 -1
  61. package/dist/esm/components/Messages/FundsSufficiencyMessage.js.map +1 -1
  62. package/dist/esm/components/Messages/GasRefuelMessage.js.map +1 -1
  63. package/dist/esm/components/Messages/GasSufficiencyMessage.js.map +1 -1
  64. package/dist/esm/components/Messages/MinFromAmountUSDMessage.js.map +1 -1
  65. package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js.map +1 -1
  66. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  67. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
  68. package/dist/esm/components/NotFound.js.map +1 -1
  69. package/dist/esm/components/PageEntered.js.map +1 -1
  70. package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
  71. package/dist/esm/components/ProgressToNextUpdate.js.map +1 -1
  72. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
  73. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
  74. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  75. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  76. package/dist/esm/components/RouteCard/RouteCardSkeleton.js.map +1 -1
  77. package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
  78. package/dist/esm/components/RouteCard/RouteNotFoundCard.js.map +1 -1
  79. package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
  80. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  81. package/dist/esm/components/RouteCard/getMatchingLabels.js +1 -0
  82. package/dist/esm/components/RouteCard/getMatchingLabels.js.map +1 -1
  83. package/dist/esm/components/Routes/Routes.js.map +1 -1
  84. package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
  85. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  86. package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
  87. package/dist/esm/components/Search/SearchInput.js.map +1 -1
  88. package/dist/esm/components/SelectChainAndToken.js.map +1 -1
  89. package/dist/esm/components/SelectTokenButton/SelectTokenButton.js.map +1 -1
  90. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  91. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  92. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  93. package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
  94. package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
  95. package/dist/esm/components/Step/CircularProgress.js.map +1 -1
  96. package/dist/esm/components/Step/CircularProgress.style.js.map +1 -1
  97. package/dist/esm/components/Step/DestinationWalletAddress.js.map +1 -1
  98. package/dist/esm/components/Step/Step.js.map +1 -1
  99. package/dist/esm/components/Step/StepAction.js.map +1 -1
  100. package/dist/esm/components/Step/StepActions.js.map +1 -1
  101. package/dist/esm/components/Step/StepList.js.map +1 -1
  102. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  103. package/dist/esm/components/StepDivider/StepDivider.js.map +1 -1
  104. package/dist/esm/components/TextFitter/TextFitter.js.map +1 -1
  105. package/dist/esm/components/Timer/StepTimer.js.map +1 -1
  106. package/dist/esm/components/Timer/TimerContent.js.map +1 -1
  107. package/dist/esm/components/Token/Token.js.map +1 -1
  108. package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
  109. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  110. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  111. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  112. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  113. package/dist/esm/components/TokenList/TokenNotFound.js.map +1 -1
  114. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  115. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  116. package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
  117. package/dist/esm/components/Tools/ToolItem.js.map +1 -1
  118. package/dist/esm/components/Tools/Tools.js.map +1 -1
  119. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  120. package/dist/esm/components/TransactionCard/TransactionCard.js.map +1 -1
  121. package/dist/esm/components/TransactionCard/TransactionCardSkeleton.js.map +1 -1
  122. package/dist/esm/components/TransactionDetails.js.map +1 -1
  123. package/dist/esm/config/version.d.ts +1 -1
  124. package/dist/esm/config/version.js +1 -1
  125. package/dist/esm/config/version.js.map +1 -1
  126. package/dist/esm/hooks/timer/time.js.map +1 -1
  127. package/dist/esm/hooks/timer/useExecutionTimer.js.map +1 -1
  128. package/dist/esm/hooks/timer/useInterval.js.map +1 -1
  129. package/dist/esm/hooks/timer/useTimer.js.map +1 -1
  130. package/dist/esm/hooks/timer/validate.js.map +1 -1
  131. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  132. package/dist/esm/hooks/useActionMessage.js.map +1 -1
  133. package/dist/esm/hooks/useAddressActivity.js.map +1 -1
  134. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  135. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  136. package/dist/esm/hooks/useChain.js.map +1 -1
  137. package/dist/esm/hooks/useChains.js.map +1 -1
  138. package/dist/esm/hooks/useContactSupport.js.map +1 -1
  139. package/dist/esm/hooks/useDebouncedWatch.js.map +1 -1
  140. package/dist/esm/hooks/useDefaultElementId.js.map +1 -1
  141. package/dist/esm/hooks/useExplorer.js.map +1 -1
  142. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  143. package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
  144. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  145. package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
  146. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  147. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  148. package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
  149. package/dist/esm/hooks/useHeader.js.map +1 -1
  150. package/dist/esm/hooks/useInitializeSDKProviders.js.map +1 -1
  151. package/dist/esm/hooks/useInitializer.js.map +1 -1
  152. package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -1
  153. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  154. package/dist/esm/hooks/useLanguages.js.map +1 -1
  155. package/dist/esm/hooks/useListHeight.js.map +1 -1
  156. package/dist/esm/hooks/useLongPress.js.map +1 -1
  157. package/dist/esm/hooks/useNavigateBack.js.map +1 -1
  158. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  159. package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
  160. package/dist/esm/hooks/useRoutes.js.map +1 -1
  161. package/dist/esm/hooks/useScrollableContainer.js.map +1 -1
  162. package/dist/esm/hooks/useSetContentHeight.js.map +1 -1
  163. package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
  164. package/dist/esm/hooks/useSwapOnly.js.map +1 -1
  165. package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
  166. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  167. package/dist/esm/hooks/useToAddressReset.js.map +1 -1
  168. package/dist/esm/hooks/useToken.js.map +1 -1
  169. package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
  170. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  171. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  172. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  173. package/dist/esm/hooks/useTokenRateText.js.map +1 -1
  174. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  175. package/dist/esm/hooks/useTokens.js.map +1 -1
  176. package/dist/esm/hooks/useTools.js.map +1 -1
  177. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  178. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  179. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  180. package/dist/esm/hooks/useWideVariant.js.map +1 -1
  181. package/dist/esm/hooks/useWidgetChains.js.map +1 -1
  182. package/dist/esm/hooks/useWidgetEvents.js.map +1 -1
  183. package/dist/esm/pages/ActivitiesPage/ActiveTransactionItem.js.map +1 -1
  184. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  185. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
  186. package/dist/esm/pages/ActivitiesPage/TransactionHistoryEmpty.js.map +1 -1
  187. package/dist/esm/pages/ActivitiesPage/TransactionHistoryItem.js.map +1 -1
  188. package/dist/esm/pages/LanguagesPage.js.map +1 -1
  189. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  190. package/dist/esm/pages/MainPage/MainWarningMessages.js.map +1 -1
  191. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  192. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  193. package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
  194. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  195. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
  196. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  197. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  198. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  199. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  200. package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
  201. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  202. package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
  203. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  204. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  205. package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
  206. package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
  207. package/dist/esm/pages/SettingsPage/ResetSettingsButton.js.map +1 -1
  208. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
  209. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  210. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
  211. package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
  212. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
  213. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
  214. package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
  215. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  216. package/dist/esm/pages/TransactionDetailsPage/ActionRow.js.map +1 -1
  217. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
  218. package/dist/esm/pages/TransactionDetailsPage/ReceiptsCard.js.map +1 -1
  219. package/dist/esm/pages/TransactionDetailsPage/SentToWalletRow.js.map +1 -1
  220. package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js.map +1 -1
  221. package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js.map +1 -1
  222. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  223. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
  224. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
  225. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  226. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  227. package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
  228. package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
  229. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  230. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
  231. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  232. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  233. package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
  234. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  235. package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
  236. package/dist/esm/providers/QueryClientProvider.js.map +1 -1
  237. package/dist/esm/providers/SDKClientProvider.js.map +1 -1
  238. package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
  239. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  240. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
  241. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  242. package/dist/esm/stores/StoreProvider.js.map +1 -1
  243. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  244. package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
  245. package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
  246. package/dist/esm/stores/bookmarks/useBookmarks.js.map +1 -1
  247. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  248. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  249. package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
  250. package/dist/esm/stores/form/FormStore.js.map +1 -1
  251. package/dist/esm/stores/form/FormUpdater.js.map +1 -1
  252. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  253. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  254. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
  255. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  256. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  257. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  258. package/dist/esm/stores/form/useFormStore.js.map +1 -1
  259. package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
  260. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  261. package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
  262. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
  263. package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
  264. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  265. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  266. package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
  267. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  268. package/dist/esm/stores/routes/useSetExecutableRoute.js.map +1 -1
  269. package/dist/esm/stores/routes/utils.js.map +1 -1
  270. package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
  271. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  272. package/dist/esm/stores/settings/useSettings.js.map +1 -1
  273. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  274. package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
  275. package/dist/esm/themes/createTheme.js.map +1 -1
  276. package/dist/esm/themes/utils.js.map +1 -1
  277. package/dist/esm/types/events.js.map +1 -1
  278. package/dist/esm/types/widget.d.ts +9 -1
  279. package/dist/esm/types/widget.d.ts.map +1 -1
  280. package/dist/esm/types/widget.js.map +1 -1
  281. package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
  282. package/dist/esm/utils/converters.js.map +1 -1
  283. package/dist/esm/utils/currencyExtendedFormatter.js.map +1 -1
  284. package/dist/esm/utils/deepEqual.js.map +1 -1
  285. package/dist/esm/utils/deepMerge.js.map +1 -1
  286. package/dist/esm/utils/fees.js.map +1 -1
  287. package/dist/esm/utils/format.js.map +1 -1
  288. package/dist/esm/utils/getActionMessage.js.map +1 -1
  289. package/dist/esm/utils/getErrorMessage.js.map +1 -1
  290. package/dist/esm/utils/getPriceImpact.js.map +1 -1
  291. package/dist/esm/utils/input.js.map +1 -1
  292. package/dist/esm/utils/item.js.map +1 -1
  293. package/dist/esm/utils/percentFormatter.js.map +1 -1
  294. package/dist/esm/utils/prepareActions.js.map +1 -1
  295. package/dist/esm/utils/timer.js.map +1 -1
  296. package/dist/esm/utils/token.js.map +1 -1
  297. package/dist/esm/utils/tokenList.js.map +1 -1
  298. package/dist/esm/utils/variant.js.map +1 -1
  299. package/dist/esm/utils/widgetSize.js.map +1 -1
  300. package/package.json +11 -11
  301. package/src/components/RouteCard/getMatchingLabels.ts +5 -0
  302. package/src/config/version.ts +1 -1
  303. package/src/types/widget.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveTransactionCard.js","names":["Card"],"sources":["../../../../src/components/TransactionCard/ActiveTransactionCard.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport DeleteOutline from '@mui/icons-material/DeleteOutlined'\nimport { Box, Tooltip, Typography } from '@mui/material'\nimport type { JSX, MouseEvent } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useActionMessage } from '../../hooks/useActionMessage.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { Card } from '../Card/Card.js'\nimport { IconCircle } from '../IconCircle/IconCircle.js'\nimport { RouteTokens } from '../RouteCard/RouteTokens.js'\nimport { CircularProgressPending } from '../Step/CircularProgress.style.js'\nimport { ExecutionTimerText, getExpiryTimestamp } from '../Timer/StepTimer.js'\nimport {\n DeleteButton,\n PendingCircle,\n StatusRow,\n} from './ActiveTransactionCard.style.js'\n\ninterface ActiveTransactionCardProps {\n route: RouteExtended\n status?: RouteExecutionStatus\n onClick: () => void\n onDelete: (e: MouseEvent) => void\n}\n\nexport const ActiveTransactionCard = ({\n route,\n status,\n onClick,\n onDelete,\n}: ActiveTransactionCardProps): JSX.Element => {\n const { t } = useTranslation()\n\n const lastActiveStep = route.steps.findLast((step) => step.execution)\n const lastActiveAction = lastActiveStep?.execution?.actions?.at(-1)\n const { title } = useActionMessage(lastActiveStep, lastActiveAction)\n\n const isFailed = status === RouteExecutionStatus.Failed\n\n const statusIcon = (() => {\n if (isFailed) {\n return <IconCircle status=\"error\" size={24} />\n }\n if (\n ['ACTION_REQUIRED', 'MESSAGE_REQUIRED', 'RESET_REQUIRED'].includes(\n lastActiveAction?.status ?? ''\n )\n ) {\n return <IconCircle status=\"info\" size={24} />\n }\n return (\n <PendingCircle>\n <CircularProgressPending size={24} sx={{ top: -2, left: -2 }} />\n </PendingCircle>\n )\n })()\n\n return (\n <Card onClick={onClick} indented>\n <StatusRow sx={{ mb: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n {statusIcon}\n <Typography sx={{ fontSize: 12, fontWeight: 500 }}>\n {title}\n </Typography>\n </Box>\n {isFailed ? (\n <Tooltip title={t('button.clearTransaction')}>\n <DeleteButton size=\"small\" onClick={onDelete}>\n <DeleteOutline sx={{ fontSize: 16 }} />\n </DeleteButton>\n </Tooltip>\n ) : lastActiveStep?.execution?.signedAt ? (\n <Typography sx={{ fontSize: 12, fontWeight: 600 }}>\n <ExecutionTimerText\n expiryTimestamp={getExpiryTimestamp(lastActiveStep)}\n />\n </Typography>\n ) : null}\n </StatusRow>\n <RouteTokens route={route} />\n </Card>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAyBA,MAAa,yBAAyB,EACpC,OACA,QACA,SACA,eAC6C;CAC7C,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,iBAAiB,MAAM,MAAM,UAAU,SAAS,KAAK,UAAU;CACrE,MAAM,mBAAmB,gBAAgB,WAAW,SAAS,GAAG,GAAG;CACnE,MAAM,EAAE,UAAU,iBAAiB,gBAAgB,iBAAiB;CAEpE,MAAM,WAAW,WAAA;AAoBjB,QACE,qBAACA,QAAD;EAAe;EAAS,UAAA;YAAxB,CACE,qBAAC,WAAD;GAAW,IAAI,EAAE,IAAI,KAAK;aAA1B,CACE,qBAAC,KAAD;IAAK,IAAI;KAAE,SAAS;KAAQ,YAAY;KAAU,KAAK;KAAK;cAA5D,QArBoB;AACxB,SAAI,SACF,QAAO,oBAAC,YAAD;MAAY,QAAO;MAAQ,MAAM;MAAM,CAAA;AAEhD,SACE;MAAC;MAAmB;MAAoB;MAAiB,CAAC,SACxD,kBAAkB,UAAU,GAC7B,CAED,QAAO,oBAAC,YAAD;MAAY,QAAO;MAAO,MAAM;MAAM,CAAA;AAE/C,YACE,oBAAC,eAAD,EAAA,UACE,oBAAC,yBAAD;MAAyB,MAAM;MAAI,IAAI;OAAE,KAAK;OAAI,MAAM;OAAI;MAAI,CAAA,EAClD,CAAA;QAQD,EACX,oBAAC,YAAD;KAAY,IAAI;MAAE,UAAU;MAAI,YAAY;MAAK;eAC9C;KACU,CAAA,CACT;OACL,WACC,oBAAC,SAAD;IAAS,OAAO,EAAE,0BAA0B;cAC1C,oBAAC,cAAD;KAAc,MAAK;KAAQ,SAAS;eAClC,oBAAC,eAAD,EAAe,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA;KAC1B,CAAA;IACP,CAAA,GACR,gBAAgB,WAAW,WAC7B,oBAAC,YAAD;IAAY,IAAI;KAAE,UAAU;KAAI,YAAY;KAAK;cAC/C,oBAAC,oBAAD,EACE,iBAAiB,mBAAmB,eAAe,EACnD,CAAA;IACS,CAAA,GACX,KACM;MACZ,oBAAC,aAAD,EAAoB,OAAS,CAAA,CACxB"}
1
+ {"version":3,"file":"ActiveTransactionCard.js","names":["Card"],"sources":["../../../../src/components/TransactionCard/ActiveTransactionCard.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport DeleteOutline from '@mui/icons-material/DeleteOutlined'\nimport { Box, Tooltip, Typography } from '@mui/material'\nimport type { JSX, MouseEvent } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useActionMessage } from '../../hooks/useActionMessage.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { Card } from '../Card/Card.js'\nimport { IconCircle } from '../IconCircle/IconCircle.js'\nimport { RouteTokens } from '../RouteCard/RouteTokens.js'\nimport { CircularProgressPending } from '../Step/CircularProgress.style.js'\nimport { ExecutionTimerText, getExpiryTimestamp } from '../Timer/StepTimer.js'\nimport {\n DeleteButton,\n PendingCircle,\n StatusRow,\n} from './ActiveTransactionCard.style.js'\n\ninterface ActiveTransactionCardProps {\n route: RouteExtended\n status?: RouteExecutionStatus\n onClick: () => void\n onDelete: (e: MouseEvent) => void\n}\n\nexport const ActiveTransactionCard = ({\n route,\n status,\n onClick,\n onDelete,\n}: ActiveTransactionCardProps): JSX.Element => {\n const { t } = useTranslation()\n\n const lastActiveStep = route.steps.findLast((step) => step.execution)\n const lastActiveAction = lastActiveStep?.execution?.actions?.at(-1)\n const { title } = useActionMessage(lastActiveStep, lastActiveAction)\n\n const isFailed = status === RouteExecutionStatus.Failed\n\n const statusIcon = (() => {\n if (isFailed) {\n return <IconCircle status=\"error\" size={24} />\n }\n if (\n ['ACTION_REQUIRED', 'MESSAGE_REQUIRED', 'RESET_REQUIRED'].includes(\n lastActiveAction?.status ?? ''\n )\n ) {\n return <IconCircle status=\"info\" size={24} />\n }\n return (\n <PendingCircle>\n <CircularProgressPending size={24} sx={{ top: -2, left: -2 }} />\n </PendingCircle>\n )\n })()\n\n return (\n <Card onClick={onClick} indented>\n <StatusRow sx={{ mb: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n {statusIcon}\n <Typography sx={{ fontSize: 12, fontWeight: 500 }}>\n {title}\n </Typography>\n </Box>\n {isFailed ? (\n <Tooltip title={t('button.clearTransaction')}>\n <DeleteButton size=\"small\" onClick={onDelete}>\n <DeleteOutline sx={{ fontSize: 16 }} />\n </DeleteButton>\n </Tooltip>\n ) : lastActiveStep?.execution?.signedAt ? (\n <Typography sx={{ fontSize: 12, fontWeight: 600 }}>\n <ExecutionTimerText\n expiryTimestamp={getExpiryTimestamp(lastActiveStep)}\n />\n </Typography>\n ) : null}\n </StatusRow>\n <RouteTokens route={route} />\n </Card>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAyBA,MAAa,yBAAyB,EACpC,OACA,QACA,SACA,eAC6C;CAC7C,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,iBAAiB,MAAM,MAAM,UAAU,SAAS,KAAK,UAAU;CACrE,MAAM,mBAAmB,gBAAgB,WAAW,SAAS,GAAG,GAAG;CACnE,MAAM,EAAE,UAAU,iBAAiB,gBAAgB,iBAAiB;CAEpE,MAAM,WAAW,WAAA;CAoBjB,OACE,qBAACA,QAAD;EAAe;EAAS,UAAA;YAAxB,CACE,qBAAC,WAAD;GAAW,IAAI,EAAE,IAAI,KAAK;aAA1B,CACE,qBAAC,KAAD;IAAK,IAAI;KAAE,SAAS;KAAQ,YAAY;KAAU,KAAK;KAAK;cAA5D,QArBoB;KACxB,IAAI,UACF,OAAO,oBAAC,YAAD;MAAY,QAAO;MAAQ,MAAM;MAAM,CAAA;KAEhD,IACE;MAAC;MAAmB;MAAoB;MAAiB,CAAC,SACxD,kBAAkB,UAAU,GAC7B,EAED,OAAO,oBAAC,YAAD;MAAY,QAAO;MAAO,MAAM;MAAM,CAAA;KAE/C,OACE,oBAAC,eAAD,EAAA,UACE,oBAAC,yBAAD;MAAyB,MAAM;MAAI,IAAI;OAAE,KAAK;OAAI,MAAM;OAAI;MAAI,CAAA,EAClD,CAAA;QAQD,EACX,oBAAC,YAAD;KAAY,IAAI;MAAE,UAAU;MAAI,YAAY;MAAK;eAC9C;KACU,CAAA,CACT;OACL,WACC,oBAAC,SAAD;IAAS,OAAO,EAAE,0BAA0B;cAC1C,oBAAC,cAAD;KAAc,MAAK;KAAQ,SAAS;eAClC,oBAAC,eAAD,EAAe,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA;KAC1B,CAAA;IACP,CAAA,GACR,gBAAgB,WAAW,WAC7B,oBAAC,YAAD;IAAY,IAAI;KAAE,UAAU;KAAI,YAAY;KAAK;cAC/C,oBAAC,oBAAD,EACE,iBAAiB,mBAAmB,eAAe,EACnD,CAAA;IACS,CAAA,GACX,KACM;MACZ,oBAAC,aAAD,EAAoB,OAAS,CAAA,CACxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionCard.js","names":["Card"],"sources":["../../../../src/components/TransactionCard/TransactionCard.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { Box } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Card } from '../Card/Card.js'\nimport { RouteTokens } from '../RouteCard/RouteTokens.js'\nimport { DateLabelContainer, DateLabelText } from './TransactionCard.style.js'\n\ninterface TransactionCardProps {\n route: RouteExtended\n date: Date\n onClick?: () => void\n}\n\nexport const TransactionCard = ({\n route,\n date,\n onClick,\n}: TransactionCardProps): JSX.Element => {\n const { i18n } = useTranslation()\n\n return (\n <Card indented onClick={onClick}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <DateLabelContainer>\n <DateLabelText color=\"text.secondary\">\n {date.toLocaleString(i18n.language, { dateStyle: 'long' })}\n </DateLabelText>\n <DateLabelText color=\"text.secondary\">\n {date.toLocaleString(i18n.language, { timeStyle: 'short' })}\n </DateLabelText>\n </DateLabelContainer>\n <RouteTokens route={route} />\n </Box>\n </Card>\n )\n}\n"],"mappings":";;;;;;;AAcA,MAAa,mBAAmB,EAC9B,OACA,MACA,cACuC;CACvC,MAAM,EAAE,SAAS,gBAAgB;AAEjC,QACE,oBAACA,QAAD;EAAM,UAAA;EAAkB;YACtB,qBAAC,KAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,KAAK;IAAK;aAA/D,CACE,qBAAC,oBAAD,EAAA,UAAA,CACE,oBAAC,eAAD;IAAe,OAAM;cAClB,KAAK,eAAe,KAAK,UAAU,EAAE,WAAW,QAAQ,CAAC;IAC5C,CAAA,EAChB,oBAAC,eAAD;IAAe,OAAM;cAClB,KAAK,eAAe,KAAK,UAAU,EAAE,WAAW,SAAS,CAAC;IAC7C,CAAA,CACG,EAAA,CAAA,EACrB,oBAAC,aAAD,EAAoB,OAAS,CAAA,CACzB;;EACD,CAAA"}
1
+ {"version":3,"file":"TransactionCard.js","names":["Card"],"sources":["../../../../src/components/TransactionCard/TransactionCard.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { Box } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Card } from '../Card/Card.js'\nimport { RouteTokens } from '../RouteCard/RouteTokens.js'\nimport { DateLabelContainer, DateLabelText } from './TransactionCard.style.js'\n\ninterface TransactionCardProps {\n route: RouteExtended\n date: Date\n onClick?: () => void\n}\n\nexport const TransactionCard = ({\n route,\n date,\n onClick,\n}: TransactionCardProps): JSX.Element => {\n const { i18n } = useTranslation()\n\n return (\n <Card indented onClick={onClick}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <DateLabelContainer>\n <DateLabelText color=\"text.secondary\">\n {date.toLocaleString(i18n.language, { dateStyle: 'long' })}\n </DateLabelText>\n <DateLabelText color=\"text.secondary\">\n {date.toLocaleString(i18n.language, { timeStyle: 'short' })}\n </DateLabelText>\n </DateLabelContainer>\n <RouteTokens route={route} />\n </Box>\n </Card>\n )\n}\n"],"mappings":";;;;;;;AAcA,MAAa,mBAAmB,EAC9B,OACA,MACA,cACuC;CACvC,MAAM,EAAE,SAAS,gBAAgB;CAEjC,OACE,oBAACA,QAAD;EAAM,UAAA;EAAkB;YACtB,qBAAC,KAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,KAAK;IAAK;aAA/D,CACE,qBAAC,oBAAD,EAAA,UAAA,CACE,oBAAC,eAAD;IAAe,OAAM;cAClB,KAAK,eAAe,KAAK,UAAU,EAAE,WAAW,QAAQ,CAAC;IAC5C,CAAA,EAChB,oBAAC,eAAD;IAAe,OAAM;cAClB,KAAK,eAAe,KAAK,UAAU,EAAE,WAAW,SAAS,CAAC;IAC7C,CAAA,CACG,EAAA,CAAA,EACrB,oBAAC,aAAD,EAAoB,OAAS,CAAA,CACzB;;EACD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionCardSkeleton.js","names":["Card"],"sources":["../../../../src/components/TransactionCard/TransactionCardSkeleton.tsx"],"sourcesContent":["import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'\nimport { Box, Skeleton } from '@mui/material'\nimport type { JSX } from 'react'\nimport { Card } from '../Card/Card.js'\nimport { TokenSkeleton } from '../Token/Token.js'\n\ninterface TransactionCardSkeletonProps {\n active?: boolean\n}\n\nexport const TransactionCardSkeleton = ({\n active,\n}: TransactionCardSkeletonProps): JSX.Element => {\n return (\n <Card indented>\n {active ? (\n <Skeleton\n variant=\"rectangular\"\n height={40}\n sx={(theme) => ({\n borderRadius: theme.vars.shape.borderRadiusTertiary,\n mb: 1.5,\n })}\n />\n ) : (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n pb: 1.5,\n }}\n >\n <Skeleton\n variant=\"rectangular\"\n width={96}\n height={18}\n sx={(theme) => ({\n borderRadius: theme.vars.shape.borderRadius,\n })}\n />\n <Skeleton\n variant=\"rectangular\"\n width={64}\n height={18}\n sx={(theme) => ({\n borderRadius: theme.vars.shape.borderRadius,\n })}\n />\n </Box>\n )}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <TokenSkeleton />\n <Box\n sx={{\n width: 40,\n height: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <ArrowDownwardIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n </Box>\n <TokenSkeleton />\n </Box>\n </Card>\n )\n}\n"],"mappings":";;;;;;AAUA,MAAa,2BAA2B,EACtC,aAC+C;AAC/C,QACE,qBAACA,QAAD;EAAM,UAAA;YAAN,CACG,SACC,oBAAC,UAAD;GACE,SAAQ;GACR,QAAQ;GACR,KAAK,WAAW;IACd,cAAc,MAAM,KAAK,MAAM;IAC/B,IAAI;IACL;GACD,CAAA,GAEF,qBAAC,KAAD;GACE,IAAI;IACF,SAAS;IACT,gBAAgB;IAChB,IAAI;IACL;aALH,CAOE,oBAAC,UAAD;IACE,SAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK,WAAW,EACd,cAAc,MAAM,KAAK,MAAM,cAChC;IACD,CAAA,EACF,oBAAC,UAAD;IACE,SAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK,WAAW,EACd,cAAc,MAAM,KAAK,MAAM,cAChC;IACD,CAAA,CACE;MAER,qBAAC,KAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,KAAK;IAAK;aAA/D;IACE,oBAAC,eAAD,EAAiB,CAAA;IACjB,oBAAC,KAAD;KACE,IAAI;MACF,OAAO;MACP,QAAQ;MACR,SAAS;MACT,YAAY;MACZ,gBAAgB;MACjB;eAED,oBAAC,mBAAD,EAAmB,IAAI;MAAE,UAAU;MAAI,OAAO;MAAkB,EAAI,CAAA;KAChE,CAAA;IACN,oBAAC,eAAD,EAAiB,CAAA;IACb;KACD"}
1
+ {"version":3,"file":"TransactionCardSkeleton.js","names":["Card"],"sources":["../../../../src/components/TransactionCard/TransactionCardSkeleton.tsx"],"sourcesContent":["import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'\nimport { Box, Skeleton } from '@mui/material'\nimport type { JSX } from 'react'\nimport { Card } from '../Card/Card.js'\nimport { TokenSkeleton } from '../Token/Token.js'\n\ninterface TransactionCardSkeletonProps {\n active?: boolean\n}\n\nexport const TransactionCardSkeleton = ({\n active,\n}: TransactionCardSkeletonProps): JSX.Element => {\n return (\n <Card indented>\n {active ? (\n <Skeleton\n variant=\"rectangular\"\n height={40}\n sx={(theme) => ({\n borderRadius: theme.vars.shape.borderRadiusTertiary,\n mb: 1.5,\n })}\n />\n ) : (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n pb: 1.5,\n }}\n >\n <Skeleton\n variant=\"rectangular\"\n width={96}\n height={18}\n sx={(theme) => ({\n borderRadius: theme.vars.shape.borderRadius,\n })}\n />\n <Skeleton\n variant=\"rectangular\"\n width={64}\n height={18}\n sx={(theme) => ({\n borderRadius: theme.vars.shape.borderRadius,\n })}\n />\n </Box>\n )}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <TokenSkeleton />\n <Box\n sx={{\n width: 40,\n height: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <ArrowDownwardIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n </Box>\n <TokenSkeleton />\n </Box>\n </Card>\n )\n}\n"],"mappings":";;;;;;AAUA,MAAa,2BAA2B,EACtC,aAC+C;CAC/C,OACE,qBAACA,QAAD;EAAM,UAAA;YAAN,CACG,SACC,oBAAC,UAAD;GACE,SAAQ;GACR,QAAQ;GACR,KAAK,WAAW;IACd,cAAc,MAAM,KAAK,MAAM;IAC/B,IAAI;IACL;GACD,CAAA,GAEF,qBAAC,KAAD;GACE,IAAI;IACF,SAAS;IACT,gBAAgB;IAChB,IAAI;IACL;aALH,CAOE,oBAAC,UAAD;IACE,SAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK,WAAW,EACd,cAAc,MAAM,KAAK,MAAM,cAChC;IACD,CAAA,EACF,oBAAC,UAAD;IACE,SAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK,WAAW,EACd,cAAc,MAAM,KAAK,MAAM,cAChC;IACD,CAAA,CACE;MAER,qBAAC,KAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,KAAK;IAAK;aAA/D;IACE,oBAAC,eAAD,EAAiB,CAAA;IACjB,oBAAC,KAAD;KACE,IAAI;MACF,OAAO;MACP,QAAQ;MACR,SAAS;MACT,YAAY;MACZ,gBAAgB;MACjB;eAED,oBAAC,mBAAD,EAAmB,IAAI;MAAE,UAAU;MAAI,OAAO;MAAkB,EAAI,CAAA;KAChE,CAAA;IACN,oBAAC,eAAD,EAAiB,CAAA;IACb;KACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionDetails.js","names":["Card"],"sources":["../../../src/components/TransactionDetails.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { useEthereumContext } from '@lifi/widget-provider'\nimport ExpandLess from '@mui/icons-material/ExpandLess'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport LocalGasStationRounded from '@mui/icons-material/LocalGasStationRounded'\nimport type { CardProps } from '@mui/material'\nimport { Box, Collapse, Tooltip, Typography } from '@mui/material'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { isRouteDone } from '../stores/routes/utils.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../utils/fees.js'\nimport { formatTokenAmount, formatTokenPrice } from '../utils/format.js'\nimport { getPriceImpact } from '../utils/getPriceImpact.js'\nimport { Card } from './Card/Card.js'\nimport { CardIconButton } from './Card/CardIconButton.js'\nimport { FeeBreakdownTooltip } from './FeeBreakdownTooltip.js'\nimport { IconTypography } from './IconTypography.js'\nimport { TokenRate } from './TokenRate/TokenRate.js'\n\ninterface TransactionDetailsProps extends CardProps {\n route: RouteExtended\n}\n\nexport const TransactionDetails: React.FC<TransactionDetailsProps> = ({\n route,\n ...props\n}) => {\n const { t } = useTranslation()\n const { feeConfig, defaultUI } = useWidgetConfig()\n const [cardExpanded, setCardExpanded] = useState(\n defaultUI?.transactionDetailsExpanded ?? false\n )\n const { isGaslessStep } = useEthereumContext()\n\n const toggleCard = () => {\n setCardExpanded((cardExpanded) => !cardExpanded)\n }\n const { gasCosts, feeCosts, gasCostUSD, feeCostUSD, combinedFeesUSD } =\n getAccumulatedFeeCostsBreakdown(route)\n\n const priceImpact = getPriceImpact({\n fromAmount: BigInt(route.fromAmount),\n toAmount: BigInt(route.toAmount),\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n\n const feeCollectionStep = route.steps[0].includedSteps.find(\n (includedStep) => includedStep.tool === 'feeCollection'\n )\n\n let feeAmountUSD = 0\n let feePercentage = 0\n\n if (feeCollectionStep) {\n const estimatedFromAmount =\n BigInt(feeCollectionStep.estimate.fromAmount) -\n BigInt(feeCollectionStep.estimate.toAmount)\n\n feeAmountUSD = formatTokenPrice(\n estimatedFromAmount,\n feeCollectionStep.action.fromToken.priceUSD,\n feeCollectionStep.action.fromToken.decimals\n )\n\n feePercentage =\n feeCollectionStep.estimate.feeCosts?.reduce(\n (percentage, feeCost) =>\n percentage + Number.parseFloat(feeCost.percentage || '0'),\n 0\n ) ?? 0\n }\n\n const hasGaslessSupport = route.steps.every((step) => isGaslessStep?.(step))\n\n const showIntegratorFeeCollectionDetails =\n (feeAmountUSD || Number.isFinite(feeConfig?.fee)) && !hasGaslessSupport\n\n return (\n <Card selectionColor=\"secondary\" {...props}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 2,\n py: 1.75,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n justifyContent: 'left',\n }}\n >\n <TokenRate route={route} />\n </Box>\n <Collapse timeout={100} in={!cardExpanded} mountOnEnter>\n <FeeBreakdownTooltip\n gasCosts={gasCosts}\n feeCosts={feeCosts}\n gasless={hasGaslessSupport}\n >\n <Box\n onClick={toggleCard}\n role=\"button\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 1,\n cursor: 'pointer',\n }}\n >\n <IconTypography component=\"span\" sx={{ mr: 0.5, fontSize: 16 }}>\n <LocalGasStationRounded fontSize=\"inherit\" />\n </IconTypography>\n <Typography\n data-value={combinedFeesUSD}\n sx={{\n fontSize: 14,\n color: 'text.primary',\n fontWeight: 600,\n lineHeight: 1.429,\n }}\n >\n {!combinedFeesUSD\n ? t('main.fees.free')\n : t('format.currency', { value: combinedFeesUSD })}\n </Typography>\n </Box>\n </FeeBreakdownTooltip>\n </Collapse>\n <CardIconButton onClick={toggleCard} size=\"small\">\n {cardExpanded ? (\n <ExpandLess fontSize=\"inherit\" />\n ) : (\n <ExpandMore fontSize=\"inherit\" />\n )}\n </CardIconButton>\n </Box>\n <Collapse timeout={225} in={cardExpanded} mountOnEnter>\n <Box\n sx={{\n px: 2,\n pb: 2,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.fees.network')}</Typography>\n <FeeBreakdownTooltip\n gasCosts={gasCosts}\n gasless={hasGaslessSupport}\n >\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {!gasCostUSD\n ? t('main.fees.free')\n : t('format.currency', {\n value: gasCostUSD,\n })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n {feeCosts.length ? (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.fees.provider')}</Typography>\n <FeeBreakdownTooltip feeCosts={feeCosts}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.currency', {\n value: feeCostUSD,\n })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n ) : null}\n {showIntegratorFeeCollectionDetails ? (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">\n {feeConfig?.name || t('main.fees.defaultIntegrator')}\n {feeConfig?.showFeePercentage && (\n <> ({t('format.percent', { value: feePercentage })})</>\n )}\n </Typography>\n {feeConfig?.showFeeTooltip &&\n (feeConfig?.name || feeConfig?.feeTooltipComponent) ? (\n <Tooltip\n title={\n feeConfig?.feeTooltipComponent ||\n t('tooltip.feeCollection', { tool: feeConfig.name })\n }\n >\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.currency', {\n value: feeAmountUSD,\n })}\n </Typography>\n </Tooltip>\n ) : (\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {t('format.currency', {\n value: feeAmountUSD,\n })}\n </Typography>\n )}\n </Box>\n ) : null}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.priceImpact')}</Typography>\n <Tooltip title={t('tooltip.priceImpact')}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.percent', {\n value: priceImpact,\n usePlusSign: true,\n })}\n </Typography>\n </Tooltip>\n </Box>\n {!isRouteDone(route) ? (\n <>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.maxSlippage')}</Typography>\n <Tooltip title={t('tooltip.slippage')}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {route.steps[0].action.slippage\n ? t('format.percent', {\n value: route.steps[0].action.slippage,\n })\n : t('button.auto')}\n </Typography>\n </Tooltip>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <Typography variant=\"body2\">{t('main.minReceived')}</Typography>\n <Tooltip title={t('tooltip.minReceived')}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.tokenAmount', {\n value: formatTokenAmount(\n BigInt(route.toAmountMin),\n route.toToken.decimals\n ),\n })}{' '}\n {route.toToken.symbol}\n </Typography>\n </Tooltip>\n </Box>\n </>\n ) : null}\n </Box>\n </Collapse>\n </Card>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TransactionDetails.js","names":["Card"],"sources":["../../../src/components/TransactionDetails.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { useEthereumContext } from '@lifi/widget-provider'\nimport ExpandLess from '@mui/icons-material/ExpandLess'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport LocalGasStationRounded from '@mui/icons-material/LocalGasStationRounded'\nimport type { CardProps } from '@mui/material'\nimport { Box, Collapse, Tooltip, Typography } from '@mui/material'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { isRouteDone } from '../stores/routes/utils.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../utils/fees.js'\nimport { formatTokenAmount, formatTokenPrice } from '../utils/format.js'\nimport { getPriceImpact } from '../utils/getPriceImpact.js'\nimport { Card } from './Card/Card.js'\nimport { CardIconButton } from './Card/CardIconButton.js'\nimport { FeeBreakdownTooltip } from './FeeBreakdownTooltip.js'\nimport { IconTypography } from './IconTypography.js'\nimport { TokenRate } from './TokenRate/TokenRate.js'\n\ninterface TransactionDetailsProps extends CardProps {\n route: RouteExtended\n}\n\nexport const TransactionDetails: React.FC<TransactionDetailsProps> = ({\n route,\n ...props\n}) => {\n const { t } = useTranslation()\n const { feeConfig, defaultUI } = useWidgetConfig()\n const [cardExpanded, setCardExpanded] = useState(\n defaultUI?.transactionDetailsExpanded ?? false\n )\n const { isGaslessStep } = useEthereumContext()\n\n const toggleCard = () => {\n setCardExpanded((cardExpanded) => !cardExpanded)\n }\n const { gasCosts, feeCosts, gasCostUSD, feeCostUSD, combinedFeesUSD } =\n getAccumulatedFeeCostsBreakdown(route)\n\n const priceImpact = getPriceImpact({\n fromAmount: BigInt(route.fromAmount),\n toAmount: BigInt(route.toAmount),\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n\n const feeCollectionStep = route.steps[0].includedSteps.find(\n (includedStep) => includedStep.tool === 'feeCollection'\n )\n\n let feeAmountUSD = 0\n let feePercentage = 0\n\n if (feeCollectionStep) {\n const estimatedFromAmount =\n BigInt(feeCollectionStep.estimate.fromAmount) -\n BigInt(feeCollectionStep.estimate.toAmount)\n\n feeAmountUSD = formatTokenPrice(\n estimatedFromAmount,\n feeCollectionStep.action.fromToken.priceUSD,\n feeCollectionStep.action.fromToken.decimals\n )\n\n feePercentage =\n feeCollectionStep.estimate.feeCosts?.reduce(\n (percentage, feeCost) =>\n percentage + Number.parseFloat(feeCost.percentage || '0'),\n 0\n ) ?? 0\n }\n\n const hasGaslessSupport = route.steps.every((step) => isGaslessStep?.(step))\n\n const showIntegratorFeeCollectionDetails =\n (feeAmountUSD || Number.isFinite(feeConfig?.fee)) && !hasGaslessSupport\n\n return (\n <Card selectionColor=\"secondary\" {...props}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 2,\n py: 1.75,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n justifyContent: 'left',\n }}\n >\n <TokenRate route={route} />\n </Box>\n <Collapse timeout={100} in={!cardExpanded} mountOnEnter>\n <FeeBreakdownTooltip\n gasCosts={gasCosts}\n feeCosts={feeCosts}\n gasless={hasGaslessSupport}\n >\n <Box\n onClick={toggleCard}\n role=\"button\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 1,\n cursor: 'pointer',\n }}\n >\n <IconTypography component=\"span\" sx={{ mr: 0.5, fontSize: 16 }}>\n <LocalGasStationRounded fontSize=\"inherit\" />\n </IconTypography>\n <Typography\n data-value={combinedFeesUSD}\n sx={{\n fontSize: 14,\n color: 'text.primary',\n fontWeight: 600,\n lineHeight: 1.429,\n }}\n >\n {!combinedFeesUSD\n ? t('main.fees.free')\n : t('format.currency', { value: combinedFeesUSD })}\n </Typography>\n </Box>\n </FeeBreakdownTooltip>\n </Collapse>\n <CardIconButton onClick={toggleCard} size=\"small\">\n {cardExpanded ? (\n <ExpandLess fontSize=\"inherit\" />\n ) : (\n <ExpandMore fontSize=\"inherit\" />\n )}\n </CardIconButton>\n </Box>\n <Collapse timeout={225} in={cardExpanded} mountOnEnter>\n <Box\n sx={{\n px: 2,\n pb: 2,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.fees.network')}</Typography>\n <FeeBreakdownTooltip\n gasCosts={gasCosts}\n gasless={hasGaslessSupport}\n >\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {!gasCostUSD\n ? t('main.fees.free')\n : t('format.currency', {\n value: gasCostUSD,\n })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n {feeCosts.length ? (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.fees.provider')}</Typography>\n <FeeBreakdownTooltip feeCosts={feeCosts}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.currency', {\n value: feeCostUSD,\n })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n ) : null}\n {showIntegratorFeeCollectionDetails ? (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">\n {feeConfig?.name || t('main.fees.defaultIntegrator')}\n {feeConfig?.showFeePercentage && (\n <> ({t('format.percent', { value: feePercentage })})</>\n )}\n </Typography>\n {feeConfig?.showFeeTooltip &&\n (feeConfig?.name || feeConfig?.feeTooltipComponent) ? (\n <Tooltip\n title={\n feeConfig?.feeTooltipComponent ||\n t('tooltip.feeCollection', { tool: feeConfig.name })\n }\n >\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.currency', {\n value: feeAmountUSD,\n })}\n </Typography>\n </Tooltip>\n ) : (\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {t('format.currency', {\n value: feeAmountUSD,\n })}\n </Typography>\n )}\n </Box>\n ) : null}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.priceImpact')}</Typography>\n <Tooltip title={t('tooltip.priceImpact')}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.percent', {\n value: priceImpact,\n usePlusSign: true,\n })}\n </Typography>\n </Tooltip>\n </Box>\n {!isRouteDone(route) ? (\n <>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\">{t('main.maxSlippage')}</Typography>\n <Tooltip title={t('tooltip.slippage')}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {route.steps[0].action.slippage\n ? t('format.percent', {\n value: route.steps[0].action.slippage,\n })\n : t('button.auto')}\n </Typography>\n </Tooltip>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <Typography variant=\"body2\">{t('main.minReceived')}</Typography>\n <Tooltip title={t('tooltip.minReceived')}>\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, cursor: 'help' }}\n >\n {t('format.tokenAmount', {\n value: formatTokenAmount(\n BigInt(route.toAmountMin),\n route.toToken.decimals\n ),\n })}{' '}\n {route.toToken.symbol}\n </Typography>\n </Tooltip>\n </Box>\n </>\n ) : null}\n </Box>\n </Collapse>\n </Card>\n )\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  //#region src/config/version.d.ts
2
2
  declare const name = "@lifi/widget";
3
- declare const version = "4.0.0-beta.18";
3
+ declare const version = "4.0.0-beta.20";
4
4
  //#endregion
5
5
  export { name, version };
6
6
  //# sourceMappingURL=version.d.ts.map
@@ -1,6 +1,6 @@
1
1
  //#region src/config/version.ts
2
2
  const name = "@lifi/widget";
3
- const version = "4.0.0-beta.18";
3
+ const version = "4.0.0-beta.20";
4
4
  //#endregion
5
5
  export { name, version };
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","names":[],"sources":["../../../src/config/version.ts"],"sourcesContent":["export const name = '@lifi/widget'\nexport const version = '4.0.0-beta.18'\n"],"mappings":";AAAA,MAAa,OAAO;AACpB,MAAa,UAAU"}
1
+ {"version":3,"file":"version.js","names":[],"sources":["../../../src/config/version.ts"],"sourcesContent":["export const name = '@lifi/widget'\nexport const version = '4.0.0-beta.20'\n"],"mappings":";AAAA,MAAa,OAAO;AACpB,MAAa,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","names":[],"sources":["../../../../src/hooks/timer/time.ts"],"sourcesContent":["export type TimeFromMillisecondsType = {\n totalMilliseconds: number\n totalSeconds: number\n milliseconds: number\n seconds: number\n minutes: number\n hours: number\n days: number\n}\n\nexport function getTimeFromMilliseconds(\n millisecs: number,\n isCountDown = true\n): TimeFromMillisecondsType {\n const totalSeconds = isCountDown\n ? Math.ceil(millisecs / 1000)\n : Math.floor(millisecs / 1000)\n const days = Math.floor(totalSeconds / (60 * 60 * 24))\n const hours = Math.floor((totalSeconds % (60 * 60 * 24)) / (60 * 60))\n const minutes = Math.floor((totalSeconds % (60 * 60)) / 60)\n const seconds = Math.floor(totalSeconds % 60)\n const milliseconds = Math.floor(millisecs % 1000)\n\n return {\n totalMilliseconds: millisecs,\n totalSeconds,\n milliseconds,\n seconds,\n minutes,\n hours,\n days,\n }\n}\n\nexport function getMillisecondsFromExpiry(expiry: Date): number {\n const now = Date.now()\n const milliSecondsDistance = expiry?.getTime() - now\n return milliSecondsDistance > 0 ? milliSecondsDistance : 0\n}\n"],"mappings":";AAUA,SAAgB,wBACd,WACA,cAAc,MACY;CAC1B,MAAM,eAAe,cACjB,KAAK,KAAK,YAAY,IAAK,GAC3B,KAAK,MAAM,YAAY,IAAK;CAChC,MAAM,OAAO,KAAK,MAAM,gBAAgB,OAAU,IAAI;CACtD,MAAM,QAAQ,KAAK,MAAO,gBAAgB,OAAU,MAAQ,KAAS;CACrE,MAAM,UAAU,KAAK,MAAO,eAAgB,OAAY,GAAG;CAC3D,MAAM,UAAU,KAAK,MAAM,eAAe,GAAG;AAG7C,QAAO;EACL,mBAAmB;EACnB;EACA,cALmB,KAAK,MAAM,YAAY,IAK9B;EACZ;EACA;EACA;EACA;EACD;;AAGH,SAAgB,0BAA0B,QAAsB;CAC9D,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,uBAAuB,QAAQ,SAAS,GAAG;AACjD,QAAO,uBAAuB,IAAI,uBAAuB"}
1
+ {"version":3,"file":"time.js","names":[],"sources":["../../../../src/hooks/timer/time.ts"],"sourcesContent":["export type TimeFromMillisecondsType = {\n totalMilliseconds: number\n totalSeconds: number\n milliseconds: number\n seconds: number\n minutes: number\n hours: number\n days: number\n}\n\nexport function getTimeFromMilliseconds(\n millisecs: number,\n isCountDown = true\n): TimeFromMillisecondsType {\n const totalSeconds = isCountDown\n ? Math.ceil(millisecs / 1000)\n : Math.floor(millisecs / 1000)\n const days = Math.floor(totalSeconds / (60 * 60 * 24))\n const hours = Math.floor((totalSeconds % (60 * 60 * 24)) / (60 * 60))\n const minutes = Math.floor((totalSeconds % (60 * 60)) / 60)\n const seconds = Math.floor(totalSeconds % 60)\n const milliseconds = Math.floor(millisecs % 1000)\n\n return {\n totalMilliseconds: millisecs,\n totalSeconds,\n milliseconds,\n seconds,\n minutes,\n hours,\n days,\n }\n}\n\nexport function getMillisecondsFromExpiry(expiry: Date): number {\n const now = Date.now()\n const milliSecondsDistance = expiry?.getTime() - now\n return milliSecondsDistance > 0 ? milliSecondsDistance : 0\n}\n"],"mappings":";AAUA,SAAgB,wBACd,WACA,cAAc,MACY;CAC1B,MAAM,eAAe,cACjB,KAAK,KAAK,YAAY,IAAK,GAC3B,KAAK,MAAM,YAAY,IAAK;CAChC,MAAM,OAAO,KAAK,MAAM,gBAAgB,OAAU,IAAI;CACtD,MAAM,QAAQ,KAAK,MAAO,gBAAgB,OAAU,MAAQ,KAAS;CACrE,MAAM,UAAU,KAAK,MAAO,eAAgB,OAAY,GAAG;CAC3D,MAAM,UAAU,KAAK,MAAM,eAAe,GAAG;CAG7C,OAAO;EACL,mBAAmB;EACnB;EACA,cALmB,KAAK,MAAM,YAAY,IAK9B;EACZ;EACA;EACA;EACA;EACD;;AAGH,SAAgB,0BAA0B,QAAsB;CAC9D,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,uBAAuB,QAAQ,SAAS,GAAG;CACjD,OAAO,uBAAuB,IAAI,uBAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useExecutionTimer.js","names":[],"sources":["../../../../src/hooks/timer/useExecutionTimer.ts"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { formatTimer } from '../../utils/timer.js'\nimport { useTimer } from './useTimer.js'\n\nexport const useExecutionTimer = (\n expiryTimestamp: Date\n): { formatted: string | null; isTimerExpired: boolean } => {\n const { i18n } = useTranslation()\n const [isExpired, setExpired] = useState(false)\n const { days, hours, minutes, seconds } = useTimer({\n autoStart: true,\n expiryTimestamp,\n onExpire: () => setExpired(true),\n })\n const isTimerExpired = isExpired || (!minutes && !seconds)\n const formatted = isTimerExpired\n ? null\n : formatTimer({ locale: i18n.language, days, hours, minutes, seconds })\n return { formatted, isTimerExpired }\n}\n"],"mappings":";;;;;AAKA,MAAa,qBACX,oBAC0D;CAC1D,MAAM,EAAE,SAAS,gBAAgB;CACjC,MAAM,CAAC,WAAW,cAAc,SAAS,MAAM;CAC/C,MAAM,EAAE,MAAM,OAAO,SAAS,YAAY,SAAS;EACjD,WAAW;EACX;EACA,gBAAgB,WAAW,KAAK;EACjC,CAAC;CACF,MAAM,iBAAiB,aAAc,CAAC,WAAW,CAAC;AAIlD,QAAO;EAAE,WAHS,iBACd,OACA,YAAY;GAAE,QAAQ,KAAK;GAAU;GAAM;GAAO;GAAS;GAAS,CAAC;EACrD;EAAgB"}
1
+ {"version":3,"file":"useExecutionTimer.js","names":[],"sources":["../../../../src/hooks/timer/useExecutionTimer.ts"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { formatTimer } from '../../utils/timer.js'\nimport { useTimer } from './useTimer.js'\n\nexport const useExecutionTimer = (\n expiryTimestamp: Date\n): { formatted: string | null; isTimerExpired: boolean } => {\n const { i18n } = useTranslation()\n const [isExpired, setExpired] = useState(false)\n const { days, hours, minutes, seconds } = useTimer({\n autoStart: true,\n expiryTimestamp,\n onExpire: () => setExpired(true),\n })\n const isTimerExpired = isExpired || (!minutes && !seconds)\n const formatted = isTimerExpired\n ? null\n : formatTimer({ locale: i18n.language, days, hours, minutes, seconds })\n return { formatted, isTimerExpired }\n}\n"],"mappings":";;;;;AAKA,MAAa,qBACX,oBAC0D;CAC1D,MAAM,EAAE,SAAS,gBAAgB;CACjC,MAAM,CAAC,WAAW,cAAc,SAAS,MAAM;CAC/C,MAAM,EAAE,MAAM,OAAO,SAAS,YAAY,SAAS;EACjD,WAAW;EACX;EACA,gBAAgB,WAAW,KAAK;EACjC,CAAC;CACF,MAAM,iBAAiB,aAAc,CAAC,WAAW,CAAC;CAIlD,OAAO;EAAE,WAHS,iBACd,OACA,YAAY;GAAE,QAAQ,KAAK;GAAU;GAAM;GAAO;GAAS;GAAS,CAAC;EACrD;EAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useInterval.js","names":[],"sources":["../../../../src/hooks/timer/useInterval.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nexport function useInterval(callback: () => void, delay: number | null): void {\n const callbackRef = useRef(callback)\n\n // update callback function with current render callback that has access to latest props and state\n useEffect(() => {\n callbackRef.current = callback\n })\n\n useEffect(() => {\n if (!delay) {\n return () => {}\n }\n\n const interval = setInterval(() => {\n callbackRef?.current?.()\n }, delay)\n return () => clearInterval(interval)\n }, [delay])\n}\n"],"mappings":";;AAEA,SAAgB,YAAY,UAAsB,OAA4B;CAC5E,MAAM,cAAc,OAAO,SAAS;AAGpC,iBAAgB;AACd,cAAY,UAAU;GACtB;AAEF,iBAAgB;AACd,MAAI,CAAC,MACH,cAAa;EAGf,MAAM,WAAW,kBAAkB;AACjC,gBAAa,WAAW;KACvB,MAAM;AACT,eAAa,cAAc,SAAS;IACnC,CAAC,MAAM,CAAC"}
1
+ {"version":3,"file":"useInterval.js","names":[],"sources":["../../../../src/hooks/timer/useInterval.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nexport function useInterval(callback: () => void, delay: number | null): void {\n const callbackRef = useRef(callback)\n\n // update callback function with current render callback that has access to latest props and state\n useEffect(() => {\n callbackRef.current = callback\n })\n\n useEffect(() => {\n if (!delay) {\n return () => {}\n }\n\n const interval = setInterval(() => {\n callbackRef?.current?.()\n }, delay)\n return () => clearInterval(interval)\n }, [delay])\n}\n"],"mappings":";;AAEA,SAAgB,YAAY,UAAsB,OAA4B;CAC5E,MAAM,cAAc,OAAO,SAAS;CAGpC,gBAAgB;EACd,YAAY,UAAU;GACtB;CAEF,gBAAgB;EACd,IAAI,CAAC,OACH,aAAa;EAGf,MAAM,WAAW,kBAAkB;GACjC,aAAa,WAAW;KACvB,MAAM;EACT,aAAa,cAAc,SAAS;IACnC,CAAC,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTimer.js","names":[],"sources":["../../../../src/hooks/timer/useTimer.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport {\n getMillisecondsFromExpiry,\n getTimeFromMilliseconds,\n type TimeFromMillisecondsType,\n} from './time.js'\nimport { useInterval } from './useInterval.js'\nimport { validateExpiryTimestamp, validateOnExpire } from './validate.js'\n\nconst SECOND_INTERVAL = 1000\n\ntype useTimerSettingsType = {\n expiryTimestamp: Date\n onExpire?: () => void\n autoStart?: boolean\n interval?: number\n}\n\ntype useTimerResultType = TimeFromMillisecondsType & {\n start: () => void\n pause: () => void\n resume: () => void\n restart: (newExpiryTimestamp: Date, newAutoStart?: boolean) => void\n isRunning: boolean\n}\n\n/**\n * `useTimer` from https://github.com/amrlabib/react-timer-hook\n */\nexport function useTimer({\n expiryTimestamp: expiry,\n onExpire = () => {},\n autoStart = true,\n interval: customInterval = SECOND_INTERVAL,\n}: useTimerSettingsType): useTimerResultType {\n const [expiryTimestamp, setExpiryTimestamp] = useState(expiry)\n const [milliseconds, setMilliseconds] = useState(\n getMillisecondsFromExpiry(expiryTimestamp)\n )\n const [isRunning, setIsRunning] = useState(autoStart)\n const [didStart, setDidStart] = useState(autoStart)\n const [interval, setInterval] = useState<number | null>(customInterval)\n\n const handleExpire = useCallback(() => {\n if (validateOnExpire(onExpire)) {\n onExpire()\n }\n setIsRunning(false)\n setInterval(null)\n }, [onExpire])\n\n const pause = useCallback(() => {\n setIsRunning(false)\n }, [])\n\n const restart = useCallback(\n (newExpiryTimestamp: Date, newAutoStart = true) => {\n setInterval(customInterval)\n setDidStart(newAutoStart)\n setIsRunning(newAutoStart)\n setExpiryTimestamp(newExpiryTimestamp)\n setMilliseconds(getMillisecondsFromExpiry(newExpiryTimestamp))\n },\n [customInterval]\n )\n\n const resume = useCallback(() => {\n const time = new Date()\n time.setMilliseconds(time.getMilliseconds() + milliseconds)\n restart(time)\n }, [milliseconds, restart])\n\n const start = useCallback(() => {\n if (didStart) {\n setMilliseconds(getMillisecondsFromExpiry(expiryTimestamp))\n setIsRunning(true)\n } else {\n resume()\n }\n }, [expiryTimestamp, didStart, resume])\n\n useInterval(\n () => {\n const millisecondsValue = getMillisecondsFromExpiry(expiryTimestamp)\n setMilliseconds(millisecondsValue)\n if (millisecondsValue <= 0) {\n handleExpire()\n } else if (interval && millisecondsValue < interval) {\n setInterval(millisecondsValue)\n }\n },\n isRunning ? interval : null\n )\n\n useEffect(() => {\n validateExpiryTimestamp(expiryTimestamp)\n }, [expiryTimestamp])\n\n return {\n ...getTimeFromMilliseconds(milliseconds),\n start,\n pause,\n resume,\n restart,\n isRunning,\n }\n}\n"],"mappings":";;;;;AASA,MAAM,kBAAkB;;;;AAoBxB,SAAgB,SAAS,EACvB,iBAAiB,QACjB,iBAAiB,IACjB,YAAY,MACZ,UAAU,iBAAiB,mBACgB;CAC3C,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,OAAO;CAC9D,MAAM,CAAC,cAAc,mBAAmB,SACtC,0BAA0B,gBAAgB,CAC3C;CACD,MAAM,CAAC,WAAW,gBAAgB,SAAS,UAAU;CACrD,MAAM,CAAC,UAAU,eAAe,SAAS,UAAU;CACnD,MAAM,CAAC,UAAU,eAAe,SAAwB,eAAe;CAEvE,MAAM,eAAe,kBAAkB;AACrC,MAAI,iBAAiB,SAAS,CAC5B,WAAU;AAEZ,eAAa,MAAM;AACnB,cAAY,KAAK;IAChB,CAAC,SAAS,CAAC;CAEd,MAAM,QAAQ,kBAAkB;AAC9B,eAAa,MAAM;IAClB,EAAE,CAAC;CAEN,MAAM,UAAU,aACb,oBAA0B,eAAe,SAAS;AACjD,cAAY,eAAe;AAC3B,cAAY,aAAa;AACzB,eAAa,aAAa;AAC1B,qBAAmB,mBAAmB;AACtC,kBAAgB,0BAA0B,mBAAmB,CAAC;IAEhE,CAAC,eAAe,CACjB;CAED,MAAM,SAAS,kBAAkB;EAC/B,MAAM,uBAAO,IAAI,MAAM;AACvB,OAAK,gBAAgB,KAAK,iBAAiB,GAAG,aAAa;AAC3D,UAAQ,KAAK;IACZ,CAAC,cAAc,QAAQ,CAAC;CAE3B,MAAM,QAAQ,kBAAkB;AAC9B,MAAI,UAAU;AACZ,mBAAgB,0BAA0B,gBAAgB,CAAC;AAC3D,gBAAa,KAAK;QAElB,SAAQ;IAET;EAAC;EAAiB;EAAU;EAAO,CAAC;AAEvC,mBACQ;EACJ,MAAM,oBAAoB,0BAA0B,gBAAgB;AACpE,kBAAgB,kBAAkB;AAClC,MAAI,qBAAqB,EACvB,eAAc;WACL,YAAY,oBAAoB,SACzC,aAAY,kBAAkB;IAGlC,YAAY,WAAW,KACxB;AAED,iBAAgB;AACd,0BAAwB,gBAAgB;IACvC,CAAC,gBAAgB,CAAC;AAErB,QAAO;EACL,GAAG,wBAAwB,aAAa;EACxC;EACA;EACA;EACA;EACA;EACD"}
1
+ {"version":3,"file":"useTimer.js","names":[],"sources":["../../../../src/hooks/timer/useTimer.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport {\n getMillisecondsFromExpiry,\n getTimeFromMilliseconds,\n type TimeFromMillisecondsType,\n} from './time.js'\nimport { useInterval } from './useInterval.js'\nimport { validateExpiryTimestamp, validateOnExpire } from './validate.js'\n\nconst SECOND_INTERVAL = 1000\n\ntype useTimerSettingsType = {\n expiryTimestamp: Date\n onExpire?: () => void\n autoStart?: boolean\n interval?: number\n}\n\ntype useTimerResultType = TimeFromMillisecondsType & {\n start: () => void\n pause: () => void\n resume: () => void\n restart: (newExpiryTimestamp: Date, newAutoStart?: boolean) => void\n isRunning: boolean\n}\n\n/**\n * `useTimer` from https://github.com/amrlabib/react-timer-hook\n */\nexport function useTimer({\n expiryTimestamp: expiry,\n onExpire = () => {},\n autoStart = true,\n interval: customInterval = SECOND_INTERVAL,\n}: useTimerSettingsType): useTimerResultType {\n const [expiryTimestamp, setExpiryTimestamp] = useState(expiry)\n const [milliseconds, setMilliseconds] = useState(\n getMillisecondsFromExpiry(expiryTimestamp)\n )\n const [isRunning, setIsRunning] = useState(autoStart)\n const [didStart, setDidStart] = useState(autoStart)\n const [interval, setInterval] = useState<number | null>(customInterval)\n\n const handleExpire = useCallback(() => {\n if (validateOnExpire(onExpire)) {\n onExpire()\n }\n setIsRunning(false)\n setInterval(null)\n }, [onExpire])\n\n const pause = useCallback(() => {\n setIsRunning(false)\n }, [])\n\n const restart = useCallback(\n (newExpiryTimestamp: Date, newAutoStart = true) => {\n setInterval(customInterval)\n setDidStart(newAutoStart)\n setIsRunning(newAutoStart)\n setExpiryTimestamp(newExpiryTimestamp)\n setMilliseconds(getMillisecondsFromExpiry(newExpiryTimestamp))\n },\n [customInterval]\n )\n\n const resume = useCallback(() => {\n const time = new Date()\n time.setMilliseconds(time.getMilliseconds() + milliseconds)\n restart(time)\n }, [milliseconds, restart])\n\n const start = useCallback(() => {\n if (didStart) {\n setMilliseconds(getMillisecondsFromExpiry(expiryTimestamp))\n setIsRunning(true)\n } else {\n resume()\n }\n }, [expiryTimestamp, didStart, resume])\n\n useInterval(\n () => {\n const millisecondsValue = getMillisecondsFromExpiry(expiryTimestamp)\n setMilliseconds(millisecondsValue)\n if (millisecondsValue <= 0) {\n handleExpire()\n } else if (interval && millisecondsValue < interval) {\n setInterval(millisecondsValue)\n }\n },\n isRunning ? interval : null\n )\n\n useEffect(() => {\n validateExpiryTimestamp(expiryTimestamp)\n }, [expiryTimestamp])\n\n return {\n ...getTimeFromMilliseconds(milliseconds),\n start,\n pause,\n resume,\n restart,\n isRunning,\n }\n}\n"],"mappings":";;;;;AASA,MAAM,kBAAkB;;;;AAoBxB,SAAgB,SAAS,EACvB,iBAAiB,QACjB,iBAAiB,IACjB,YAAY,MACZ,UAAU,iBAAiB,mBACgB;CAC3C,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,OAAO;CAC9D,MAAM,CAAC,cAAc,mBAAmB,SACtC,0BAA0B,gBAAgB,CAC3C;CACD,MAAM,CAAC,WAAW,gBAAgB,SAAS,UAAU;CACrD,MAAM,CAAC,UAAU,eAAe,SAAS,UAAU;CACnD,MAAM,CAAC,UAAU,eAAe,SAAwB,eAAe;CAEvE,MAAM,eAAe,kBAAkB;EACrC,IAAI,iBAAiB,SAAS,EAC5B,UAAU;EAEZ,aAAa,MAAM;EACnB,YAAY,KAAK;IAChB,CAAC,SAAS,CAAC;CAEd,MAAM,QAAQ,kBAAkB;EAC9B,aAAa,MAAM;IAClB,EAAE,CAAC;CAEN,MAAM,UAAU,aACb,oBAA0B,eAAe,SAAS;EACjD,YAAY,eAAe;EAC3B,YAAY,aAAa;EACzB,aAAa,aAAa;EAC1B,mBAAmB,mBAAmB;EACtC,gBAAgB,0BAA0B,mBAAmB,CAAC;IAEhE,CAAC,eAAe,CACjB;CAED,MAAM,SAAS,kBAAkB;EAC/B,MAAM,uBAAO,IAAI,MAAM;EACvB,KAAK,gBAAgB,KAAK,iBAAiB,GAAG,aAAa;EAC3D,QAAQ,KAAK;IACZ,CAAC,cAAc,QAAQ,CAAC;CAE3B,MAAM,QAAQ,kBAAkB;EAC9B,IAAI,UAAU;GACZ,gBAAgB,0BAA0B,gBAAgB,CAAC;GAC3D,aAAa,KAAK;SAElB,QAAQ;IAET;EAAC;EAAiB;EAAU;EAAO,CAAC;CAEvC,kBACQ;EACJ,MAAM,oBAAoB,0BAA0B,gBAAgB;EACpE,gBAAgB,kBAAkB;EAClC,IAAI,qBAAqB,GACvB,cAAc;OACT,IAAI,YAAY,oBAAoB,UACzC,YAAY,kBAAkB;IAGlC,YAAY,WAAW,KACxB;CAED,gBAAgB;EACd,wBAAwB,gBAAgB;IACvC,CAAC,gBAAgB,CAAC;CAErB,OAAO;EACL,GAAG,wBAAwB,aAAa;EACxC;EACA;EACA;EACA;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","names":[],"sources":["../../../../src/hooks/timer/validate.ts"],"sourcesContent":["export function validateExpiryTimestamp(expiryTimestamp: Date): boolean {\n const isValid = new Date(expiryTimestamp).getTime() > 0\n if (!isValid) {\n console.warn('useTimer Invalid expiryTimestamp settings', expiryTimestamp)\n }\n return isValid\n}\n\nexport function validateOnExpire(onExpire: () => void): boolean {\n const isValid = onExpire && typeof onExpire === 'function'\n if (onExpire && !isValid) {\n console.warn('useTimer Invalid onExpire settings function', onExpire)\n }\n return isValid\n}\n"],"mappings":";AAAA,SAAgB,wBAAwB,iBAAgC;CACtE,MAAM,UAAU,IAAI,KAAK,gBAAgB,CAAC,SAAS,GAAG;AACtD,KAAI,CAAC,QACH,SAAQ,KAAK,6CAA6C,gBAAgB;AAE5E,QAAO;;AAGT,SAAgB,iBAAiB,UAA+B;CAC9D,MAAM,UAAU,YAAY,OAAO,aAAa;AAChD,KAAI,YAAY,CAAC,QACf,SAAQ,KAAK,+CAA+C,SAAS;AAEvE,QAAO"}
1
+ {"version":3,"file":"validate.js","names":[],"sources":["../../../../src/hooks/timer/validate.ts"],"sourcesContent":["export function validateExpiryTimestamp(expiryTimestamp: Date): boolean {\n const isValid = new Date(expiryTimestamp).getTime() > 0\n if (!isValid) {\n console.warn('useTimer Invalid expiryTimestamp settings', expiryTimestamp)\n }\n return isValid\n}\n\nexport function validateOnExpire(onExpire: () => void): boolean {\n const isValid = onExpire && typeof onExpire === 'function'\n if (onExpire && !isValid) {\n console.warn('useTimer Invalid onExpire settings function', onExpire)\n }\n return isValid\n}\n"],"mappings":";AAAA,SAAgB,wBAAwB,iBAAgC;CACtE,MAAM,UAAU,IAAI,KAAK,gBAAgB,CAAC,SAAS,GAAG;CACtD,IAAI,CAAC,SACH,QAAQ,KAAK,6CAA6C,gBAAgB;CAE5E,OAAO;;AAGT,SAAgB,iBAAiB,UAA+B;CAC9D,MAAM,UAAU,YAAY,OAAO,aAAa;CAChD,IAAI,YAAY,CAAC,SACf,QAAQ,KAAK,+CAA+C,SAAS;CAEvE,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAccountsBalancesData.js","names":[],"sources":["../../../src/hooks/useAccountsBalancesData.ts"],"sourcesContent":["import type { ChainType, TokenExtended } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { useMemo } from 'react'\nimport type { FormType } from '../stores/form/types.js'\nimport { useChains } from './useChains.js'\nimport { useFilteredTokensByBalance } from './useFilteredByTokenBalances.js'\n\nexport const useAccountsBalancesData = (\n selectedChainId?: number,\n formType?: FormType,\n isAllNetworks?: boolean,\n allTokens?: Record<number, TokenExtended[]>\n): {\n data: Record<string, Record<number, TokenExtended[]>> | undefined\n isLoading: boolean\n} => {\n const { data: accountsWithTokens, isLoading: isAccountsLoading } =\n useAccountsData(selectedChainId, formType, isAllNetworks, allTokens)\n\n // Filter out EVM tokens that do not have balances\n const { data: filteredTokens, isLoading: isCachedBalancesLoading } =\n useFilteredTokensByBalance(accountsWithTokens, formType)\n\n return {\n data: filteredTokens,\n isLoading: isAccountsLoading || isCachedBalancesLoading,\n }\n}\n\nconst useAccountsData = (\n selectedChainId?: number,\n formType?: FormType,\n isAllNetworks?: boolean,\n allTokens?: Record<number, TokenExtended[]>\n) => {\n const {\n chains: allChains,\n isLoading: isChainsLoading,\n getChainById,\n } = useChains(formType)\n const currentChain = useMemo(() => {\n return selectedChainId\n ? getChainById(selectedChainId, allChains)\n : undefined\n }, [selectedChainId, allChains, getChainById])\n const chains = useMemo(() => {\n return isAllNetworks ? allChains : currentChain ? [currentChain] : undefined\n }, [allChains, isAllNetworks, currentChain])\n\n const { accounts: allAccounts, account: currentAccount } = useAccount(\n isAllNetworks ? undefined : { chainType: currentChain?.chainType }\n )\n const accounts = useMemo(() => {\n return isAllNetworks\n ? allAccounts\n : currentAccount\n ? [currentAccount]\n : undefined\n }, [allAccounts, currentAccount, isAllNetworks])\n\n const accountsWithTokens = useMemo(() => {\n if (!chains || !allTokens || !accounts?.length) {\n return undefined\n }\n return accounts\n ?.filter((account) => account.address)\n .reduce(\n (acc, account) => {\n if (account.address) {\n const accountChains = chains?.filter(\n (chain) => account.chainType === chain?.chainType\n )\n if (accountChains) {\n const chainIdSet = new Set(accountChains.map((chain) => chain.id))\n const filteredTokens = Object.entries(allTokens).reduce(\n (tokenAcc, [chainIdStr, tokens]) => {\n const chainId = Number(chainIdStr)\n if (chainIdSet.has(chainId)) {\n tokenAcc[chainId] = tokens\n }\n return tokenAcc\n },\n {} as { [chainId: number]: TokenExtended[] }\n )\n acc[account.address] = {\n chainType: account.chainType,\n tokens: filteredTokens,\n }\n }\n }\n return acc\n },\n {} as Record<\n string,\n { chainType: ChainType; tokens: Record<number, TokenExtended[]> }\n >\n )\n }, [accounts, chains, allTokens])\n\n return {\n data: accountsWithTokens,\n isLoading: isChainsLoading,\n }\n}\n"],"mappings":";;;;;AAOA,MAAa,2BACX,iBACA,UACA,eACA,cAIG;CACH,MAAM,EAAE,MAAM,oBAAoB,WAAW,sBAC3C,gBAAgB,iBAAiB,UAAU,eAAe,UAAU;CAGtE,MAAM,EAAE,MAAM,gBAAgB,WAAW,4BACvC,2BAA2B,oBAAoB,SAAS;AAE1D,QAAO;EACL,MAAM;EACN,WAAW,qBAAqB;EACjC;;AAGH,MAAM,mBACJ,iBACA,UACA,eACA,cACG;CACH,MAAM,EACJ,QAAQ,WACR,WAAW,iBACX,iBACE,UAAU,SAAS;CACvB,MAAM,eAAe,cAAc;AACjC,SAAO,kBACH,aAAa,iBAAiB,UAAU,GACxC,KAAA;IACH;EAAC;EAAiB;EAAW;EAAa,CAAC;CAC9C,MAAM,SAAS,cAAc;AAC3B,SAAO,gBAAgB,YAAY,eAAe,CAAC,aAAa,GAAG,KAAA;IAClE;EAAC;EAAW;EAAe;EAAa,CAAC;CAE5C,MAAM,EAAE,UAAU,aAAa,SAAS,mBAAmB,WACzD,gBAAgB,KAAA,IAAY,EAAE,WAAW,cAAc,WAAW,CACnE;CACD,MAAM,WAAW,cAAc;AAC7B,SAAO,gBACH,cACA,iBACE,CAAC,eAAe,GAChB,KAAA;IACL;EAAC;EAAa;EAAgB;EAAc,CAAC;AAyChD,QAAO;EACL,MAxCyB,cAAc;AACvC,OAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,OACtC;AAEF,UAAO,UACH,QAAQ,YAAY,QAAQ,QAAQ,CACrC,QACE,KAAK,YAAY;AAChB,QAAI,QAAQ,SAAS;KACnB,MAAM,gBAAgB,QAAQ,QAC3B,UAAU,QAAQ,cAAc,OAAO,UACzC;AACD,SAAI,eAAe;MACjB,MAAM,aAAa,IAAI,IAAI,cAAc,KAAK,UAAU,MAAM,GAAG,CAAC;MAClE,MAAM,iBAAiB,OAAO,QAAQ,UAAU,CAAC,QAC9C,UAAU,CAAC,YAAY,YAAY;OAClC,MAAM,UAAU,OAAO,WAAW;AAClC,WAAI,WAAW,IAAI,QAAQ,CACzB,UAAS,WAAW;AAEtB,cAAO;SAET,EAAE,CACH;AACD,UAAI,QAAQ,WAAW;OACrB,WAAW,QAAQ;OACnB,QAAQ;OACT;;;AAGL,WAAO;MAET,EAAE,CAIH;KACF;GAAC;GAAU;GAAQ;GAAU,CAGN;EACxB,WAAW;EACZ"}
1
+ {"version":3,"file":"useAccountsBalancesData.js","names":[],"sources":["../../../src/hooks/useAccountsBalancesData.ts"],"sourcesContent":["import type { ChainType, TokenExtended } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { useMemo } from 'react'\nimport type { FormType } from '../stores/form/types.js'\nimport { useChains } from './useChains.js'\nimport { useFilteredTokensByBalance } from './useFilteredByTokenBalances.js'\n\nexport const useAccountsBalancesData = (\n selectedChainId?: number,\n formType?: FormType,\n isAllNetworks?: boolean,\n allTokens?: Record<number, TokenExtended[]>\n): {\n data: Record<string, Record<number, TokenExtended[]>> | undefined\n isLoading: boolean\n} => {\n const { data: accountsWithTokens, isLoading: isAccountsLoading } =\n useAccountsData(selectedChainId, formType, isAllNetworks, allTokens)\n\n // Filter out EVM tokens that do not have balances\n const { data: filteredTokens, isLoading: isCachedBalancesLoading } =\n useFilteredTokensByBalance(accountsWithTokens, formType)\n\n return {\n data: filteredTokens,\n isLoading: isAccountsLoading || isCachedBalancesLoading,\n }\n}\n\nconst useAccountsData = (\n selectedChainId?: number,\n formType?: FormType,\n isAllNetworks?: boolean,\n allTokens?: Record<number, TokenExtended[]>\n) => {\n const {\n chains: allChains,\n isLoading: isChainsLoading,\n getChainById,\n } = useChains(formType)\n const currentChain = useMemo(() => {\n return selectedChainId\n ? getChainById(selectedChainId, allChains)\n : undefined\n }, [selectedChainId, allChains, getChainById])\n const chains = useMemo(() => {\n return isAllNetworks ? allChains : currentChain ? [currentChain] : undefined\n }, [allChains, isAllNetworks, currentChain])\n\n const { accounts: allAccounts, account: currentAccount } = useAccount(\n isAllNetworks ? undefined : { chainType: currentChain?.chainType }\n )\n const accounts = useMemo(() => {\n return isAllNetworks\n ? allAccounts\n : currentAccount\n ? [currentAccount]\n : undefined\n }, [allAccounts, currentAccount, isAllNetworks])\n\n const accountsWithTokens = useMemo(() => {\n if (!chains || !allTokens || !accounts?.length) {\n return undefined\n }\n return accounts\n ?.filter((account) => account.address)\n .reduce(\n (acc, account) => {\n if (account.address) {\n const accountChains = chains?.filter(\n (chain) => account.chainType === chain?.chainType\n )\n if (accountChains) {\n const chainIdSet = new Set(accountChains.map((chain) => chain.id))\n const filteredTokens = Object.entries(allTokens).reduce(\n (tokenAcc, [chainIdStr, tokens]) => {\n const chainId = Number(chainIdStr)\n if (chainIdSet.has(chainId)) {\n tokenAcc[chainId] = tokens\n }\n return tokenAcc\n },\n {} as { [chainId: number]: TokenExtended[] }\n )\n acc[account.address] = {\n chainType: account.chainType,\n tokens: filteredTokens,\n }\n }\n }\n return acc\n },\n {} as Record<\n string,\n { chainType: ChainType; tokens: Record<number, TokenExtended[]> }\n >\n )\n }, [accounts, chains, allTokens])\n\n return {\n data: accountsWithTokens,\n isLoading: isChainsLoading,\n }\n}\n"],"mappings":";;;;;AAOA,MAAa,2BACX,iBACA,UACA,eACA,cAIG;CACH,MAAM,EAAE,MAAM,oBAAoB,WAAW,sBAC3C,gBAAgB,iBAAiB,UAAU,eAAe,UAAU;CAGtE,MAAM,EAAE,MAAM,gBAAgB,WAAW,4BACvC,2BAA2B,oBAAoB,SAAS;CAE1D,OAAO;EACL,MAAM;EACN,WAAW,qBAAqB;EACjC;;AAGH,MAAM,mBACJ,iBACA,UACA,eACA,cACG;CACH,MAAM,EACJ,QAAQ,WACR,WAAW,iBACX,iBACE,UAAU,SAAS;CACvB,MAAM,eAAe,cAAc;EACjC,OAAO,kBACH,aAAa,iBAAiB,UAAU,GACxC,KAAA;IACH;EAAC;EAAiB;EAAW;EAAa,CAAC;CAC9C,MAAM,SAAS,cAAc;EAC3B,OAAO,gBAAgB,YAAY,eAAe,CAAC,aAAa,GAAG,KAAA;IAClE;EAAC;EAAW;EAAe;EAAa,CAAC;CAE5C,MAAM,EAAE,UAAU,aAAa,SAAS,mBAAmB,WACzD,gBAAgB,KAAA,IAAY,EAAE,WAAW,cAAc,WAAW,CACnE;CACD,MAAM,WAAW,cAAc;EAC7B,OAAO,gBACH,cACA,iBACE,CAAC,eAAe,GAChB,KAAA;IACL;EAAC;EAAa;EAAgB;EAAc,CAAC;CAyChD,OAAO;EACL,MAxCyB,cAAc;GACvC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,QACtC;GAEF,OAAO,UACH,QAAQ,YAAY,QAAQ,QAAQ,CACrC,QACE,KAAK,YAAY;IAChB,IAAI,QAAQ,SAAS;KACnB,MAAM,gBAAgB,QAAQ,QAC3B,UAAU,QAAQ,cAAc,OAAO,UACzC;KACD,IAAI,eAAe;MACjB,MAAM,aAAa,IAAI,IAAI,cAAc,KAAK,UAAU,MAAM,GAAG,CAAC;MAClE,MAAM,iBAAiB,OAAO,QAAQ,UAAU,CAAC,QAC9C,UAAU,CAAC,YAAY,YAAY;OAClC,MAAM,UAAU,OAAO,WAAW;OAClC,IAAI,WAAW,IAAI,QAAQ,EACzB,SAAS,WAAW;OAEtB,OAAO;SAET,EAAE,CACH;MACD,IAAI,QAAQ,WAAW;OACrB,WAAW,QAAQ;OACnB,QAAQ;OACT;;;IAGL,OAAO;MAET,EAAE,CAIH;KACF;GAAC;GAAU;GAAQ;GAAU,CAGN;EACxB,WAAW;EACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useActionMessage.js","names":[],"sources":["../../../src/hooks/useActionMessage.ts"],"sourcesContent":["import type { ExecutionAction, LiFiStepExtended } from '@lifi/sdk'\nimport { useTranslation } from 'react-i18next'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { getActionMessage } from '../utils/getActionMessage.js'\nimport { getErrorMessage } from '../utils/getErrorMessage.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nexport const useActionMessage = (\n step?: LiFiStepExtended,\n action?: ExecutionAction,\n defaultLabelsOnly?: boolean\n): { title?: string; message?: string } => {\n const { subvariant, subvariantOptions } = useWidgetConfig()\n const { t } = useTranslation()\n const { getChainById } = useAvailableChains()\n\n if (!step || !action) {\n return {}\n }\n\n if (action.status === 'FAILED') {\n return getErrorMessage(t, getChainById, step, action)\n }\n\n return getActionMessage(\n t,\n step,\n action.type,\n action.status,\n action.substatus,\n defaultLabelsOnly ? undefined : subvariant,\n defaultLabelsOnly ? undefined : subvariantOptions\n )\n}\n"],"mappings":";;;;;;AAOA,MAAa,oBACX,MACA,QACA,sBACyC;CACzC,MAAM,EAAE,YAAY,sBAAsB,iBAAiB;CAC3D,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,iBAAiB,oBAAoB;AAE7C,KAAI,CAAC,QAAQ,CAAC,OACZ,QAAO,EAAE;AAGX,KAAI,OAAO,WAAW,SACpB,QAAO,gBAAgB,GAAG,cAAc,MAAM,OAAO;AAGvD,QAAO,iBACL,GACA,MACA,OAAO,MACP,OAAO,QACP,OAAO,WACP,oBAAoB,KAAA,IAAY,YAChC,oBAAoB,KAAA,IAAY,kBACjC"}
1
+ {"version":3,"file":"useActionMessage.js","names":[],"sources":["../../../src/hooks/useActionMessage.ts"],"sourcesContent":["import type { ExecutionAction, LiFiStepExtended } from '@lifi/sdk'\nimport { useTranslation } from 'react-i18next'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { getActionMessage } from '../utils/getActionMessage.js'\nimport { getErrorMessage } from '../utils/getErrorMessage.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nexport const useActionMessage = (\n step?: LiFiStepExtended,\n action?: ExecutionAction,\n defaultLabelsOnly?: boolean\n): { title?: string; message?: string } => {\n const { subvariant, subvariantOptions } = useWidgetConfig()\n const { t } = useTranslation()\n const { getChainById } = useAvailableChains()\n\n if (!step || !action) {\n return {}\n }\n\n if (action.status === 'FAILED') {\n return getErrorMessage(t, getChainById, step, action)\n }\n\n return getActionMessage(\n t,\n step,\n action.type,\n action.status,\n action.substatus,\n defaultLabelsOnly ? undefined : subvariant,\n defaultLabelsOnly ? undefined : subvariantOptions\n )\n}\n"],"mappings":";;;;;;AAOA,MAAa,oBACX,MACA,QACA,sBACyC;CACzC,MAAM,EAAE,YAAY,sBAAsB,iBAAiB;CAC3D,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,iBAAiB,oBAAoB;CAE7C,IAAI,CAAC,QAAQ,CAAC,QACZ,OAAO,EAAE;CAGX,IAAI,OAAO,WAAW,UACpB,OAAO,gBAAgB,GAAG,cAAc,MAAM,OAAO;CAGvD,OAAO,iBACL,GACA,MACA,OAAO,MACP,OAAO,QACP,OAAO,WACP,oBAAoB,KAAA,IAAY,YAChC,oBAAoB,KAAA,IAAY,kBACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAddressActivity.js","names":[],"sources":["../../../src/hooks/useAddressActivity.ts"],"sourcesContent":["import { ChainType } from '@lifi/sdk'\nimport { useEthereumContext } from '@lifi/widget-provider'\nimport { useQuery } from '@tanstack/react-query'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\ninterface AddressActivity {\n hasActivity: boolean\n isLoading: boolean\n isFetched: boolean\n toAddress: string | undefined\n}\nexport const useAddressActivity = (chainId?: number): AddressActivity => {\n const { getChainById } = useAvailableChains()\n const [toAddress, toChainId] = useFieldValues('toAddress', 'toChain')\n const { getTransactionCount } = useEthereumContext()\n\n const destinationChainId = chainId ?? toChainId\n const toChain = getChainById(destinationChainId)\n\n const {\n data: transactionCount,\n isLoading,\n isFetched,\n error,\n } = useQuery({\n queryKey: ['getTransactionCount', toAddress, destinationChainId],\n queryFn: async () => {\n const count = await getTransactionCount?.(destinationChainId!, toAddress!)\n return count ?? null\n },\n refetchInterval: 300_000,\n staleTime: 300_000,\n enabled:\n toChain?.chainType === ChainType.EVM &&\n !!destinationChainId &&\n !!toAddress &&\n !!getTransactionCount,\n })\n\n return {\n toAddress,\n hasActivity: Boolean(transactionCount && transactionCount > 0),\n isLoading,\n isFetched: isFetched && !error,\n }\n}\n"],"mappings":";;;;;;AAYA,MAAa,sBAAsB,YAAsC;CACvE,MAAM,EAAE,iBAAiB,oBAAoB;CAC7C,MAAM,CAAC,WAAW,aAAa,eAAe,aAAa,UAAU;CACrE,MAAM,EAAE,wBAAwB,oBAAoB;CAEpD,MAAM,qBAAqB,WAAW;CACtC,MAAM,UAAU,aAAa,mBAAmB;CAEhD,MAAM,EACJ,MAAM,kBACN,WACA,WACA,UACE,SAAS;EACX,UAAU;GAAC;GAAuB;GAAW;GAAmB;EAChE,SAAS,YAAY;AAEnB,UAAO,MADa,sBAAsB,oBAAqB,UAAW,IAC1D;;EAElB,iBAAiB;EACjB,WAAW;EACX,SACE,SAAS,cAAc,UAAU,OACjC,CAAC,CAAC,sBACF,CAAC,CAAC,aACF,CAAC,CAAC;EACL,CAAC;AAEF,QAAO;EACL;EACA,aAAa,QAAQ,oBAAoB,mBAAmB,EAAE;EAC9D;EACA,WAAW,aAAa,CAAC;EAC1B"}
1
+ {"version":3,"file":"useAddressActivity.js","names":[],"sources":["../../../src/hooks/useAddressActivity.ts"],"sourcesContent":["import { ChainType } from '@lifi/sdk'\nimport { useEthereumContext } from '@lifi/widget-provider'\nimport { useQuery } from '@tanstack/react-query'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\ninterface AddressActivity {\n hasActivity: boolean\n isLoading: boolean\n isFetched: boolean\n toAddress: string | undefined\n}\nexport const useAddressActivity = (chainId?: number): AddressActivity => {\n const { getChainById } = useAvailableChains()\n const [toAddress, toChainId] = useFieldValues('toAddress', 'toChain')\n const { getTransactionCount } = useEthereumContext()\n\n const destinationChainId = chainId ?? toChainId\n const toChain = getChainById(destinationChainId)\n\n const {\n data: transactionCount,\n isLoading,\n isFetched,\n error,\n } = useQuery({\n queryKey: ['getTransactionCount', toAddress, destinationChainId],\n queryFn: async () => {\n const count = await getTransactionCount?.(destinationChainId!, toAddress!)\n return count ?? null\n },\n refetchInterval: 300_000,\n staleTime: 300_000,\n enabled:\n toChain?.chainType === ChainType.EVM &&\n !!destinationChainId &&\n !!toAddress &&\n !!getTransactionCount,\n })\n\n return {\n toAddress,\n hasActivity: Boolean(transactionCount && transactionCount > 0),\n isLoading,\n isFetched: isFetched && !error,\n }\n}\n"],"mappings":";;;;;;AAYA,MAAa,sBAAsB,YAAsC;CACvE,MAAM,EAAE,iBAAiB,oBAAoB;CAC7C,MAAM,CAAC,WAAW,aAAa,eAAe,aAAa,UAAU;CACrE,MAAM,EAAE,wBAAwB,oBAAoB;CAEpD,MAAM,qBAAqB,WAAW;CACtC,MAAM,UAAU,aAAa,mBAAmB;CAEhD,MAAM,EACJ,MAAM,kBACN,WACA,WACA,UACE,SAAS;EACX,UAAU;GAAC;GAAuB;GAAW;GAAmB;EAChE,SAAS,YAAY;GAEnB,OAAO,MADa,sBAAsB,oBAAqB,UAAW,IAC1D;;EAElB,iBAAiB;EACjB,WAAW;EACX,SACE,SAAS,cAAc,UAAU,OACjC,CAAC,CAAC,sBACF,CAAC,CAAC,aACF,CAAC,CAAC;EACL,CAAC;CAEF,OAAO;EACL;EACA,aAAa,QAAQ,oBAAoB,mBAAmB,EAAE;EAC9D;EACA,WAAW,aAAa,CAAC;EAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAddressValidation.js","names":[],"sources":["../../../src/hooks/useAddressValidation.ts"],"sourcesContent":["import type { Chain, ChainType } from '@lifi/sdk'\nimport { getNameServiceAddress } from '@lifi/sdk'\nimport { useChainTypeFromAddress } from '@lifi/widget-provider'\nimport { useMutation } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\n\nexport enum AddressType {\n Address = 0,\n NameService = 1,\n}\n\ntype ValidationArgs = {\n value: string\n chainType?: ChainType\n chain?: Chain\n}\n\ntype ValidResponse = {\n address: string\n addressType: AddressType\n chainType: ChainType\n isValid: true\n}\n\ntype InvalidResponse = {\n error: string\n isValid: false\n}\n\nexport const useAddressValidation = (): {\n validateAddress: (\n args: ValidationArgs\n ) => Promise<ValidResponse | InvalidResponse>\n isValidating: boolean\n} => {\n const { t } = useTranslation()\n const { getChainTypeFromAddress } = useChainTypeFromAddress()\n const sdkClient = useSDKClient()\n\n const { mutateAsync: validateAddress, isPending: isValidating } = useMutation(\n {\n mutationFn: async ({\n value,\n chainType,\n chain,\n }: ValidationArgs): Promise<ValidResponse | InvalidResponse> => {\n try {\n if (!value) {\n throw new Error()\n }\n\n const _chainType = getChainTypeFromAddress(value)\n if (_chainType) {\n return {\n address: value,\n addressType: AddressType.Address,\n chainType: _chainType,\n isValid: true,\n }\n }\n\n const address = await getNameServiceAddress(\n sdkClient,\n value,\n chainType\n )\n\n if (address) {\n const _chainType = getChainTypeFromAddress(address)\n if (_chainType) {\n return {\n address: address,\n addressType: AddressType.NameService,\n chainType: _chainType,\n isValid: true,\n }\n }\n }\n\n throw new Error()\n } catch (_) {\n return {\n isValid: false,\n error: t(\n 'error.title.walletAddressInvalid',\n chain?.name\n ? { context: 'chain', chainName: chain.name }\n : undefined\n ),\n }\n }\n },\n }\n )\n\n return {\n validateAddress,\n isValidating,\n }\n}\n"],"mappings":";;;;;;AA8BA,MAAa,6BAKR;CACH,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,4BAA4B,yBAAyB;CAC7D,MAAM,YAAY,cAAc;CAEhC,MAAM,EAAE,aAAa,iBAAiB,WAAW,iBAAiB,YAChE,EACE,YAAY,OAAO,EACjB,OACA,WACA,YAC8D;AAC9D,MAAI;AACF,OAAI,CAAC,MACH,OAAM,IAAI,OAAO;GAGnB,MAAM,aAAa,wBAAwB,MAAM;AACjD,OAAI,WACF,QAAO;IACL,SAAS;IACT,aAAA;IACA,WAAW;IACX,SAAS;IACV;GAGH,MAAM,UAAU,MAAM,sBACpB,WACA,OACA,UACD;AAED,OAAI,SAAS;IACX,MAAM,aAAa,wBAAwB,QAAQ;AACnD,QAAI,WACF,QAAO;KACI;KACT,aAAA;KACA,WAAW;KACX,SAAS;KACV;;AAIL,SAAM,IAAI,OAAO;WACV,GAAG;AACV,UAAO;IACL,SAAS;IACT,OAAO,EACL,oCACA,OAAO,OACH;KAAE,SAAS;KAAS,WAAW,MAAM;KAAM,GAC3C,KAAA,EACL;IACF;;IAGN,CACF;AAED,QAAO;EACL;EACA;EACD"}
1
+ {"version":3,"file":"useAddressValidation.js","names":[],"sources":["../../../src/hooks/useAddressValidation.ts"],"sourcesContent":["import type { Chain, ChainType } from '@lifi/sdk'\nimport { getNameServiceAddress } from '@lifi/sdk'\nimport { useChainTypeFromAddress } from '@lifi/widget-provider'\nimport { useMutation } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\n\nexport enum AddressType {\n Address = 0,\n NameService = 1,\n}\n\ntype ValidationArgs = {\n value: string\n chainType?: ChainType\n chain?: Chain\n}\n\ntype ValidResponse = {\n address: string\n addressType: AddressType\n chainType: ChainType\n isValid: true\n}\n\ntype InvalidResponse = {\n error: string\n isValid: false\n}\n\nexport const useAddressValidation = (): {\n validateAddress: (\n args: ValidationArgs\n ) => Promise<ValidResponse | InvalidResponse>\n isValidating: boolean\n} => {\n const { t } = useTranslation()\n const { getChainTypeFromAddress } = useChainTypeFromAddress()\n const sdkClient = useSDKClient()\n\n const { mutateAsync: validateAddress, isPending: isValidating } = useMutation(\n {\n mutationFn: async ({\n value,\n chainType,\n chain,\n }: ValidationArgs): Promise<ValidResponse | InvalidResponse> => {\n try {\n if (!value) {\n throw new Error()\n }\n\n const _chainType = getChainTypeFromAddress(value)\n if (_chainType) {\n return {\n address: value,\n addressType: AddressType.Address,\n chainType: _chainType,\n isValid: true,\n }\n }\n\n const address = await getNameServiceAddress(\n sdkClient,\n value,\n chainType\n )\n\n if (address) {\n const _chainType = getChainTypeFromAddress(address)\n if (_chainType) {\n return {\n address: address,\n addressType: AddressType.NameService,\n chainType: _chainType,\n isValid: true,\n }\n }\n }\n\n throw new Error()\n } catch (_) {\n return {\n isValid: false,\n error: t(\n 'error.title.walletAddressInvalid',\n chain?.name\n ? { context: 'chain', chainName: chain.name }\n : undefined\n ),\n }\n }\n },\n }\n )\n\n return {\n validateAddress,\n isValidating,\n }\n}\n"],"mappings":";;;;;;AA8BA,MAAa,6BAKR;CACH,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,4BAA4B,yBAAyB;CAC7D,MAAM,YAAY,cAAc;CAEhC,MAAM,EAAE,aAAa,iBAAiB,WAAW,iBAAiB,YAChE,EACE,YAAY,OAAO,EACjB,OACA,WACA,YAC8D;EAC9D,IAAI;GACF,IAAI,CAAC,OACH,MAAM,IAAI,OAAO;GAGnB,MAAM,aAAa,wBAAwB,MAAM;GACjD,IAAI,YACF,OAAO;IACL,SAAS;IACT,aAAA;IACA,WAAW;IACX,SAAS;IACV;GAGH,MAAM,UAAU,MAAM,sBACpB,WACA,OACA,UACD;GAED,IAAI,SAAS;IACX,MAAM,aAAa,wBAAwB,QAAQ;IACnD,IAAI,YACF,OAAO;KACI;KACT,aAAA;KACA,WAAW;KACX,SAAS;KACV;;GAIL,MAAM,IAAI,OAAO;WACV,GAAG;GACV,OAAO;IACL,SAAS;IACT,OAAO,EACL,oCACA,OAAO,OACH;KAAE,SAAS;KAAS,WAAW,MAAM;KAAM,GAC3C,KAAA,EACL;IACF;;IAGN,CACF;CAED,OAAO;EACL;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAvailableChains.js","names":[],"sources":["../../../src/hooks/useAvailableChains.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { ChainType, createClient, getChains } from '@lifi/sdk'\nimport { useQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { WidgetConfig } from '../types/widget.js'\nimport { getConfigItemSets, isItemAllowedForSets } from '../utils/item.js'\nimport { getQueryKey } from '../utils/queries.js'\n\ntype GetChainById = (\n chainId?: number,\n chains?: ExtendedChain[]\n) => ExtendedChain | undefined\n\nconst supportedChainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n]\n\nexport const useAvailableChains = (\n chainTypes?: ChainType[],\n widgetConfig?: WidgetConfig\n): {\n chains: ExtendedChain[] | undefined\n getChainById: GetChainById\n isLoading: boolean\n} => {\n const { chains: internalChains, keyPrefix: internalKeyPrefix } =\n useWidgetConfig()\n const internalClient = useSDKClient()\n\n const externalClient = useMemo(() => {\n if (!widgetConfig) {\n return undefined\n }\n return createClient({\n ...widgetConfig.sdkConfig,\n apiKey: widgetConfig.apiKey,\n integrator: widgetConfig.integrator ?? window?.location.hostname,\n })\n }, [widgetConfig])\n\n // Overwrite widget config if passed as param\n const keyPrefix = widgetConfig?.keyPrefix ?? internalKeyPrefix\n const chains = widgetConfig?.chains ?? internalChains\n\n const { data, isLoading } = useQuery({\n queryKey: [\n getQueryKey('chains', keyPrefix),\n chains?.types,\n chains?.allow,\n chains?.deny,\n chains?.from,\n chains?.to,\n !!externalClient,\n ] as const,\n queryFn: async ({ queryKey: [, chainTypesConfig] }) => {\n const chainsConfigSets = getConfigItemSets(\n chainTypesConfig,\n (chains) => new Set(chains)\n )\n const chainTypesRequest = supportedChainTypes.filter((chainType) =>\n isItemAllowedForSets(chainType, chainsConfigSets)\n )\n const client = externalClient ?? internalClient\n const availableChains = await getChains(client, {\n chainTypes: chainTypes || chainTypesRequest,\n })\n client.setChains(availableChains)\n return availableChains\n },\n refetchInterval: 300_000,\n staleTime: 300_000,\n })\n\n // Ensure the current internal client always has chains, even when:\n // - the query result came from cache (external call populated it first)\n // - the client was recreated due to config changes (stale closure in queryFn)\n useEffect(() => {\n if (data && !externalClient) {\n internalClient.setChains(data)\n }\n }, [data, externalClient, internalClient])\n\n const getChainById: GetChainById = useCallback(\n (chainId?: number, chains: ExtendedChain[] | undefined = data) => {\n if (!chainId) {\n return\n }\n const chain = chains?.find((chain) => chain.id === chainId)\n // if (!chain) {\n // throw new Error('Chain not found or chainId is invalid.');\n // }\n return chain\n },\n [data]\n )\n\n return {\n chains: data,\n getChainById,\n isLoading,\n }\n}\n"],"mappings":";;;;;;;;AAeA,MAAM,sBAAsB;CAC1B,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACX;AAED,MAAa,sBACX,YACA,iBAKG;CACH,MAAM,EAAE,QAAQ,gBAAgB,WAAW,sBACzC,iBAAiB;CACnB,MAAM,iBAAiB,cAAc;CAErC,MAAM,iBAAiB,cAAc;AACnC,MAAI,CAAC,aACH;AAEF,SAAO,aAAa;GAClB,GAAG,aAAa;GAChB,QAAQ,aAAa;GACrB,YAAY,aAAa,cAAc,QAAQ,SAAS;GACzD,CAAC;IACD,CAAC,aAAa,CAAC;CAGlB,MAAM,YAAY,cAAc,aAAa;CAC7C,MAAM,SAAS,cAAc,UAAU;CAEvC,MAAM,EAAE,MAAM,cAAc,SAAS;EACnC,UAAU;GACR,YAAY,UAAU,UAAU;GAChC,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,CAAC,CAAC;GACH;EACD,SAAS,OAAO,EAAE,UAAU,GAAG,wBAAwB;GACrD,MAAM,mBAAmB,kBACvB,mBACC,WAAW,IAAI,IAAI,OAAO,CAC5B;GACD,MAAM,oBAAoB,oBAAoB,QAAQ,cACpD,qBAAqB,WAAW,iBAAiB,CAClD;GACD,MAAM,SAAS,kBAAkB;GACjC,MAAM,kBAAkB,MAAM,UAAU,QAAQ,EAC9C,YAAY,cAAc,mBAC3B,CAAC;AACF,UAAO,UAAU,gBAAgB;AACjC,UAAO;;EAET,iBAAiB;EACjB,WAAW;EACZ,CAAC;AAKF,iBAAgB;AACd,MAAI,QAAQ,CAAC,eACX,gBAAe,UAAU,KAAK;IAE/B;EAAC;EAAM;EAAgB;EAAe,CAAC;AAgB1C,QAAO;EACL,QAAQ;EACR,cAhBiC,aAChC,SAAkB,SAAsC,SAAS;AAChE,OAAI,CAAC,QACH;AAMF,UAJc,QAAQ,MAAM,UAAU,MAAM,OAAO,QAAQ;KAM7D,CAAC,KAAK,CAKM;EACZ;EACD"}
1
+ {"version":3,"file":"useAvailableChains.js","names":[],"sources":["../../../src/hooks/useAvailableChains.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { ChainType, createClient, getChains } from '@lifi/sdk'\nimport { useQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { WidgetConfig } from '../types/widget.js'\nimport { getConfigItemSets, isItemAllowedForSets } from '../utils/item.js'\nimport { getQueryKey } from '../utils/queries.js'\n\ntype GetChainById = (\n chainId?: number,\n chains?: ExtendedChain[]\n) => ExtendedChain | undefined\n\nconst supportedChainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n]\n\nexport const useAvailableChains = (\n chainTypes?: ChainType[],\n widgetConfig?: WidgetConfig\n): {\n chains: ExtendedChain[] | undefined\n getChainById: GetChainById\n isLoading: boolean\n} => {\n const { chains: internalChains, keyPrefix: internalKeyPrefix } =\n useWidgetConfig()\n const internalClient = useSDKClient()\n\n const externalClient = useMemo(() => {\n if (!widgetConfig) {\n return undefined\n }\n return createClient({\n ...widgetConfig.sdkConfig,\n apiKey: widgetConfig.apiKey,\n integrator: widgetConfig.integrator ?? window?.location.hostname,\n })\n }, [widgetConfig])\n\n // Overwrite widget config if passed as param\n const keyPrefix = widgetConfig?.keyPrefix ?? internalKeyPrefix\n const chains = widgetConfig?.chains ?? internalChains\n\n const { data, isLoading } = useQuery({\n queryKey: [\n getQueryKey('chains', keyPrefix),\n chains?.types,\n chains?.allow,\n chains?.deny,\n chains?.from,\n chains?.to,\n !!externalClient,\n ] as const,\n queryFn: async ({ queryKey: [, chainTypesConfig] }) => {\n const chainsConfigSets = getConfigItemSets(\n chainTypesConfig,\n (chains) => new Set(chains)\n )\n const chainTypesRequest = supportedChainTypes.filter((chainType) =>\n isItemAllowedForSets(chainType, chainsConfigSets)\n )\n const client = externalClient ?? internalClient\n const availableChains = await getChains(client, {\n chainTypes: chainTypes || chainTypesRequest,\n })\n client.setChains(availableChains)\n return availableChains\n },\n refetchInterval: 300_000,\n staleTime: 300_000,\n })\n\n // Ensure the current internal client always has chains, even when:\n // - the query result came from cache (external call populated it first)\n // - the client was recreated due to config changes (stale closure in queryFn)\n useEffect(() => {\n if (data && !externalClient) {\n internalClient.setChains(data)\n }\n }, [data, externalClient, internalClient])\n\n const getChainById: GetChainById = useCallback(\n (chainId?: number, chains: ExtendedChain[] | undefined = data) => {\n if (!chainId) {\n return\n }\n const chain = chains?.find((chain) => chain.id === chainId)\n // if (!chain) {\n // throw new Error('Chain not found or chainId is invalid.');\n // }\n return chain\n },\n [data]\n )\n\n return {\n chains: data,\n getChainById,\n isLoading,\n }\n}\n"],"mappings":";;;;;;;;AAeA,MAAM,sBAAsB;CAC1B,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACX;AAED,MAAa,sBACX,YACA,iBAKG;CACH,MAAM,EAAE,QAAQ,gBAAgB,WAAW,sBACzC,iBAAiB;CACnB,MAAM,iBAAiB,cAAc;CAErC,MAAM,iBAAiB,cAAc;EACnC,IAAI,CAAC,cACH;EAEF,OAAO,aAAa;GAClB,GAAG,aAAa;GAChB,QAAQ,aAAa;GACrB,YAAY,aAAa,cAAc,QAAQ,SAAS;GACzD,CAAC;IACD,CAAC,aAAa,CAAC;CAGlB,MAAM,YAAY,cAAc,aAAa;CAC7C,MAAM,SAAS,cAAc,UAAU;CAEvC,MAAM,EAAE,MAAM,cAAc,SAAS;EACnC,UAAU;GACR,YAAY,UAAU,UAAU;GAChC,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,CAAC,CAAC;GACH;EACD,SAAS,OAAO,EAAE,UAAU,GAAG,wBAAwB;GACrD,MAAM,mBAAmB,kBACvB,mBACC,WAAW,IAAI,IAAI,OAAO,CAC5B;GACD,MAAM,oBAAoB,oBAAoB,QAAQ,cACpD,qBAAqB,WAAW,iBAAiB,CAClD;GACD,MAAM,SAAS,kBAAkB;GACjC,MAAM,kBAAkB,MAAM,UAAU,QAAQ,EAC9C,YAAY,cAAc,mBAC3B,CAAC;GACF,OAAO,UAAU,gBAAgB;GACjC,OAAO;;EAET,iBAAiB;EACjB,WAAW;EACZ,CAAC;CAKF,gBAAgB;EACd,IAAI,QAAQ,CAAC,gBACX,eAAe,UAAU,KAAK;IAE/B;EAAC;EAAM;EAAgB;EAAe,CAAC;CAgB1C,OAAO;EACL,QAAQ;EACR,cAhBiC,aAChC,SAAkB,SAAsC,SAAS;GAChE,IAAI,CAAC,SACH;GAMF,OAJc,QAAQ,MAAM,UAAU,MAAM,OAAO,QAAQ;KAM7D,CAAC,KAAK,CAKM;EACZ;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useChain.js","names":[],"sources":["../../../src/hooks/useChain.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useMemo } from 'react'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nexport const useChain = (\n chainId?: number\n): {\n chain: ExtendedChain | undefined\n isLoading: boolean\n getChainById: (\n chainId?: number,\n chains?: ExtendedChain[]\n ) => ExtendedChain | undefined\n} => {\n const { isLoading, getChainById } = useAvailableChains()\n\n const chain = useMemo(() => getChainById(chainId), [chainId, getChainById])\n\n return {\n chain,\n isLoading,\n getChainById,\n }\n}\n"],"mappings":";;;AAIA,MAAa,YACX,YAQG;CACH,MAAM,EAAE,WAAW,iBAAiB,oBAAoB;AAIxD,QAAO;EACL,OAHY,cAAc,aAAa,QAAQ,EAAE,CAAC,SAAS,aAAa,CAGnE;EACL;EACA;EACD"}
1
+ {"version":3,"file":"useChain.js","names":[],"sources":["../../../src/hooks/useChain.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useMemo } from 'react'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nexport const useChain = (\n chainId?: number\n): {\n chain: ExtendedChain | undefined\n isLoading: boolean\n getChainById: (\n chainId?: number,\n chains?: ExtendedChain[]\n ) => ExtendedChain | undefined\n} => {\n const { isLoading, getChainById } = useAvailableChains()\n\n const chain = useMemo(() => getChainById(chainId), [chainId, getChainById])\n\n return {\n chain,\n isLoading,\n getChainById,\n }\n}\n"],"mappings":";;;AAIA,MAAa,YACX,YAQG;CACH,MAAM,EAAE,WAAW,iBAAiB,oBAAoB;CAIxD,OAAO;EACL,OAHY,cAAc,aAAa,QAAQ,EAAE,CAAC,SAAS,aAAa,CAGnE;EACL;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useChains.js","names":[],"sources":["../../../src/hooks/useChains.ts"],"sourcesContent":["import type { ChainType, ExtendedChain } from '@lifi/sdk'\nimport { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport { getConfigItemSets, isFormItemAllowed } from '../utils/item.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nexport const useChains = (\n type?: FormType,\n chainTypes?: ChainType[]\n): {\n chains: ExtendedChain[] | undefined\n getChainById: (\n chainId?: number,\n chains?: ExtendedChain[]\n ) => ExtendedChain | undefined\n isLoading: boolean\n} => {\n const { chains } = useWidgetConfig()\n const {\n chains: availableChains,\n isLoading: isLoadingAvailableChains,\n getChainById,\n } = useAvailableChains()\n\n const filteredChains = useMemo(() => {\n const chainsConfigSets = getConfigItemSets(\n chains,\n (chains) => new Set(chains),\n type\n )\n const filteredChains = type\n ? availableChains?.filter(\n (chain) =>\n isFormItemAllowed(chain.id, chainsConfigSets, type) &&\n // Check against chain types if they are provided\n (chainTypes?.includes(chain.chainType) ?? true)\n )\n : availableChains?.filter((chain) =>\n isFormItemAllowed(chain.id, chainsConfigSets)\n )\n return filteredChains\n }, [availableChains, chainTypes, chains, type])\n\n return {\n chains: filteredChains,\n getChainById,\n isLoading: isLoadingAvailableChains,\n }\n}\n"],"mappings":";;;;;AAOA,MAAa,aACX,MACA,eAQG;CACH,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,EACJ,QAAQ,iBACR,WAAW,0BACX,iBACE,oBAAoB;AAqBxB,QAAO;EACL,QApBqB,cAAc;GACnC,MAAM,mBAAmB,kBACvB,SACC,WAAW,IAAI,IAAI,OAAO,EAC3B,KACD;AAWD,UAVuB,OACnB,iBAAiB,QACd,UACC,kBAAkB,MAAM,IAAI,kBAAkB,KAAK,KAElD,YAAY,SAAS,MAAM,UAAU,IAAI,MAC7C,GACD,iBAAiB,QAAQ,UACvB,kBAAkB,MAAM,IAAI,iBAAiB,CAC9C;KAEJ;GAAC;GAAiB;GAAY;GAAQ;GAAK,CAGtB;EACtB;EACA,WAAW;EACZ"}
1
+ {"version":3,"file":"useChains.js","names":[],"sources":["../../../src/hooks/useChains.ts"],"sourcesContent":["import type { ChainType, ExtendedChain } from '@lifi/sdk'\nimport { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport type { FormType } from '../stores/form/types.js'\nimport { getConfigItemSets, isFormItemAllowed } from '../utils/item.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nexport const useChains = (\n type?: FormType,\n chainTypes?: ChainType[]\n): {\n chains: ExtendedChain[] | undefined\n getChainById: (\n chainId?: number,\n chains?: ExtendedChain[]\n ) => ExtendedChain | undefined\n isLoading: boolean\n} => {\n const { chains } = useWidgetConfig()\n const {\n chains: availableChains,\n isLoading: isLoadingAvailableChains,\n getChainById,\n } = useAvailableChains()\n\n const filteredChains = useMemo(() => {\n const chainsConfigSets = getConfigItemSets(\n chains,\n (chains) => new Set(chains),\n type\n )\n const filteredChains = type\n ? availableChains?.filter(\n (chain) =>\n isFormItemAllowed(chain.id, chainsConfigSets, type) &&\n // Check against chain types if they are provided\n (chainTypes?.includes(chain.chainType) ?? true)\n )\n : availableChains?.filter((chain) =>\n isFormItemAllowed(chain.id, chainsConfigSets)\n )\n return filteredChains\n }, [availableChains, chainTypes, chains, type])\n\n return {\n chains: filteredChains,\n getChainById,\n isLoading: isLoadingAvailableChains,\n }\n}\n"],"mappings":";;;;;AAOA,MAAa,aACX,MACA,eAQG;CACH,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,EACJ,QAAQ,iBACR,WAAW,0BACX,iBACE,oBAAoB;CAqBxB,OAAO;EACL,QApBqB,cAAc;GACnC,MAAM,mBAAmB,kBACvB,SACC,WAAW,IAAI,IAAI,OAAO,EAC3B,KACD;GAWD,OAVuB,OACnB,iBAAiB,QACd,UACC,kBAAkB,MAAM,IAAI,kBAAkB,KAAK,KAElD,YAAY,SAAS,MAAM,UAAU,IAAI,MAC7C,GACD,iBAAiB,QAAQ,UACvB,kBAAkB,MAAM,IAAI,iBAAiB,CAC9C;KAEJ;GAAC;GAAiB;GAAY;GAAQ;GAAK,CAGtB;EACtB;EACA,WAAW;EACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useContactSupport.js","names":[],"sources":["../../../src/hooks/useContactSupport.ts"],"sourcesContent":["import { WidgetEvent } from '../types/events.js'\nimport { useWidgetEvents } from './useWidgetEvents.js'\n\nexport const useContactSupport = (supportId?: string): (() => void) => {\n const widgetEvents = useWidgetEvents()\n\n const handleContactSupport = () => {\n if (!widgetEvents.all.has(WidgetEvent.ContactSupport)) {\n window.open('https://help.li.fi', '_blank', 'nofollow noreferrer')\n } else {\n widgetEvents.emit(WidgetEvent.ContactSupport, { supportId })\n }\n }\n\n return handleContactSupport\n}\n"],"mappings":";;;AAGA,MAAa,qBAAqB,cAAqC;CACrE,MAAM,eAAe,iBAAiB;CAEtC,MAAM,6BAA6B;AACjC,MAAI,CAAC,aAAa,IAAI,IAAA,iBAA+B,CACnD,QAAO,KAAK,sBAAsB,UAAU,sBAAsB;MAElE,cAAa,KAAA,kBAAiC,EAAE,WAAW,CAAC;;AAIhE,QAAO"}
1
+ {"version":3,"file":"useContactSupport.js","names":[],"sources":["../../../src/hooks/useContactSupport.ts"],"sourcesContent":["import { WidgetEvent } from '../types/events.js'\nimport { useWidgetEvents } from './useWidgetEvents.js'\n\nexport const useContactSupport = (supportId?: string): (() => void) => {\n const widgetEvents = useWidgetEvents()\n\n const handleContactSupport = () => {\n if (!widgetEvents.all.has(WidgetEvent.ContactSupport)) {\n window.open('https://help.li.fi', '_blank', 'nofollow noreferrer')\n } else {\n widgetEvents.emit(WidgetEvent.ContactSupport, { supportId })\n }\n }\n\n return handleContactSupport\n}\n"],"mappings":";;;AAGA,MAAa,qBAAqB,cAAqC;CACrE,MAAM,eAAe,iBAAiB;CAEtC,MAAM,6BAA6B;EACjC,IAAI,CAAC,aAAa,IAAI,IAAA,iBAA+B,EACnD,OAAO,KAAK,sBAAsB,UAAU,sBAAsB;OAElE,aAAa,KAAA,kBAAiC,EAAE,WAAW,CAAC;;CAIhE,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDebouncedWatch.js","names":[],"sources":["../../../src/hooks/useDebouncedWatch.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport type { FormFieldArray, FormFieldNames } from '../stores/form/types.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\n\nexport const useDebouncedWatch = <T extends FormFieldNames[]>(\n delay: number,\n ...name: T\n): FormFieldArray<T> => {\n const watchedValue = useFieldValues(...name)\n const [debouncedValue, setDebouncedValue] = useState(watchedValue)\n const debouncedValueRef = useRef<typeof watchedValue>(null)\n const isMounted = useRef(false)\n\n useEffect(() => {\n if (isMounted.current) {\n const hasWatchedValue = watchedValue.some((value) => value)\n if (hasWatchedValue) {\n const handler = setTimeout(() => {\n setDebouncedValue(watchedValue)\n }, delay)\n return () => clearTimeout(handler)\n }\n debouncedValueRef.current = watchedValue\n setDebouncedValue(watchedValue)\n return undefined\n }\n isMounted.current = true\n return undefined\n }, [delay, watchedValue])\n\n return debouncedValue\n}\n"],"mappings":";;;AAIA,MAAa,qBACX,OACA,GAAG,SACmB;CACtB,MAAM,eAAe,eAAe,GAAG,KAAK;CAC5C,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,aAAa;CAClE,MAAM,oBAAoB,OAA4B,KAAK;CAC3D,MAAM,YAAY,OAAO,MAAM;AAE/B,iBAAgB;AACd,MAAI,UAAU,SAAS;AAErB,OADwB,aAAa,MAAM,UAAU,MAClC,EAAE;IACnB,MAAM,UAAU,iBAAiB;AAC/B,uBAAkB,aAAa;OAC9B,MAAM;AACT,iBAAa,aAAa,QAAQ;;AAEpC,qBAAkB,UAAU;AAC5B,qBAAkB,aAAa;AAC/B;;AAEF,YAAU,UAAU;IAEnB,CAAC,OAAO,aAAa,CAAC;AAEzB,QAAO"}
1
+ {"version":3,"file":"useDebouncedWatch.js","names":[],"sources":["../../../src/hooks/useDebouncedWatch.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport type { FormFieldArray, FormFieldNames } from '../stores/form/types.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\n\nexport const useDebouncedWatch = <T extends FormFieldNames[]>(\n delay: number,\n ...name: T\n): FormFieldArray<T> => {\n const watchedValue = useFieldValues(...name)\n const [debouncedValue, setDebouncedValue] = useState(watchedValue)\n const debouncedValueRef = useRef<typeof watchedValue>(null)\n const isMounted = useRef(false)\n\n useEffect(() => {\n if (isMounted.current) {\n const hasWatchedValue = watchedValue.some((value) => value)\n if (hasWatchedValue) {\n const handler = setTimeout(() => {\n setDebouncedValue(watchedValue)\n }, delay)\n return () => clearTimeout(handler)\n }\n debouncedValueRef.current = watchedValue\n setDebouncedValue(watchedValue)\n return undefined\n }\n isMounted.current = true\n return undefined\n }, [delay, watchedValue])\n\n return debouncedValue\n}\n"],"mappings":";;;AAIA,MAAa,qBACX,OACA,GAAG,SACmB;CACtB,MAAM,eAAe,eAAe,GAAG,KAAK;CAC5C,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,aAAa;CAClE,MAAM,oBAAoB,OAA4B,KAAK;CAC3D,MAAM,YAAY,OAAO,MAAM;CAE/B,gBAAgB;EACd,IAAI,UAAU,SAAS;GAErB,IADwB,aAAa,MAAM,UAAU,MAClC,EAAE;IACnB,MAAM,UAAU,iBAAiB;KAC/B,kBAAkB,aAAa;OAC9B,MAAM;IACT,aAAa,aAAa,QAAQ;;GAEpC,kBAAkB,UAAU;GAC5B,kBAAkB,aAAa;GAC/B;;EAEF,UAAU,UAAU;IAEnB,CAAC,OAAO,aAAa,CAAC;CAEzB,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDefaultElementId.js","names":[],"sources":["../../../src/hooks/useDefaultElementId.ts"],"sourcesContent":["import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\n\nexport const useDefaultElementId = (): string | undefined => {\n const { elementId } = useWidgetConfig()\n return elementId\n}\n"],"mappings":";;AAEA,MAAa,4BAAgD;CAC3D,MAAM,EAAE,cAAc,iBAAiB;AACvC,QAAO"}
1
+ {"version":3,"file":"useDefaultElementId.js","names":[],"sources":["../../../src/hooks/useDefaultElementId.ts"],"sourcesContent":["import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\n\nexport const useDefaultElementId = (): string | undefined => {\n const { elementId } = useWidgetConfig()\n return elementId\n}\n"],"mappings":";;AAEA,MAAa,4BAAgD;CAC3D,MAAM,EAAE,cAAc,iBAAiB;CACvC,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"useExplorer.js","names":[],"sources":["../../../src/hooks/useExplorer.ts"],"sourcesContent":["import type { Chain } from '@lifi/sdk'\nimport { ChainId, ChainType, isHex } from '@lifi/sdk'\nimport { internalExplorerUrl } from '../config/constants.js'\nimport { useAvailableChains } from '../hooks/useAvailableChains.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\n\nconst sanitiseBaseUrl = (baseUrl: string) => baseUrl.trim().replace(/\\/+$/, '')\n\nconst explorerPathOverrides: Partial<\n Record<ChainType | ChainId, { txPath: string; addressPath: string }>\n> = {\n [ChainId.SUI]: { txPath: 'txblock', addressPath: 'coin' },\n [ChainType.TVM]: { txPath: '#/transaction', addressPath: '#/address' },\n}\n\ntype TransactionLinkProps = { chain?: Chain | number } & (\n | {\n txHash: string\n txLink?: never\n }\n | {\n txHash?: never\n txLink: string\n }\n)\n\nexport const useExplorer = (): {\n getTransactionLink: (props: TransactionLinkProps) => string | undefined\n getAddressLink: (address: string, chain?: Chain | number) => string\n} => {\n const { explorerUrls } = useWidgetConfig()\n const { getChainById } = useAvailableChains()\n\n const getExplorerConfig = (chain?: Chain | number) => {\n const resolvedChain = Number.isFinite(chain)\n ? getChainById(chain as number)\n : (chain as Chain)\n\n const explorerUrl =\n (resolvedChain\n ? (explorerUrls?.[resolvedChain.id]?.[0] ??\n resolvedChain.metamask.blockExplorerUrls[0])\n : explorerUrls?.internal?.[0]) || internalExplorerUrl\n\n const baseUrl =\n typeof explorerUrl === 'string' ? explorerUrl : explorerUrl.url\n\n const overrides =\n explorerPathOverrides[resolvedChain?.id as ChainId] ??\n explorerPathOverrides[resolvedChain?.chainType as ChainType]\n\n const defaultTxPath = overrides?.txPath ?? 'tx'\n const defaultAddressPath = overrides?.addressPath ?? 'address'\n const txPath =\n typeof explorerUrl === 'string'\n ? defaultTxPath\n : explorerUrl.txPath || defaultTxPath\n const addressPath =\n typeof explorerUrl === 'string'\n ? defaultAddressPath\n : explorerUrl.addressPath || defaultAddressPath\n\n return {\n url: sanitiseBaseUrl(baseUrl),\n txPath,\n addressPath,\n resolvedChain,\n }\n }\n\n const getTransactionLink = ({\n txHash,\n txLink,\n chain,\n }: TransactionLinkProps): string | undefined => {\n if (!txHash) {\n return txLink\n }\n\n const config = getExplorerConfig(chain)\n\n // For EVM chains, validate the transaction hash as some relayers return custom task hashes that are not visible on-chain\n if (config.resolvedChain?.chainType === ChainType.EVM) {\n if (!isHex(txHash, { strict: true })) {\n return undefined\n }\n }\n\n return `${config.url}/${config.txPath}/${txHash}`\n }\n\n const getAddressLink = (address: string, chain?: Chain | number) => {\n const config = getExplorerConfig(chain)\n return `${config.url}/${config.addressPath}/${address}`\n }\n\n return {\n getTransactionLink,\n getAddressLink,\n }\n}\n"],"mappings":";;;;;AAMA,MAAM,mBAAmB,YAAoB,QAAQ,MAAM,CAAC,QAAQ,QAAQ,GAAG;AAE/E,MAAM,wBAEF;EACD,QAAQ,MAAM;EAAE,QAAQ;EAAW,aAAa;EAAQ;EACxD,UAAU,MAAM;EAAE,QAAQ;EAAiB,aAAa;EAAa;CACvE;AAaD,MAAa,oBAGR;CACH,MAAM,EAAE,iBAAiB,iBAAiB;CAC1C,MAAM,EAAE,iBAAiB,oBAAoB;CAE7C,MAAM,qBAAqB,UAA2B;EACpD,MAAM,gBAAgB,OAAO,SAAS,MAAM,GACxC,aAAa,MAAgB,GAC5B;EAEL,MAAM,eACH,gBACI,eAAe,cAAc,MAAM,MACpC,cAAc,SAAS,kBAAkB,KACzC,cAAc,WAAW,OAAA;EAE/B,MAAM,UACJ,OAAO,gBAAgB,WAAW,cAAc,YAAY;EAE9D,MAAM,YACJ,sBAAsB,eAAe,OACrC,sBAAsB,eAAe;EAEvC,MAAM,gBAAgB,WAAW,UAAU;EAC3C,MAAM,qBAAqB,WAAW,eAAe;EACrD,MAAM,SACJ,OAAO,gBAAgB,WACnB,gBACA,YAAY,UAAU;EAC5B,MAAM,cACJ,OAAO,gBAAgB,WACnB,qBACA,YAAY,eAAe;AAEjC,SAAO;GACL,KAAK,gBAAgB,QAAQ;GAC7B;GACA;GACA;GACD;;CAGH,MAAM,sBAAsB,EAC1B,QACA,QACA,YAC8C;AAC9C,MAAI,CAAC,OACH,QAAO;EAGT,MAAM,SAAS,kBAAkB,MAAM;AAGvC,MAAI,OAAO,eAAe,cAAc,UAAU;OAC5C,CAAC,MAAM,QAAQ,EAAE,QAAQ,MAAM,CAAC,CAClC;;AAIJ,SAAO,GAAG,OAAO,IAAI,GAAG,OAAO,OAAO,GAAG;;CAG3C,MAAM,kBAAkB,SAAiB,UAA2B;EAClE,MAAM,SAAS,kBAAkB,MAAM;AACvC,SAAO,GAAG,OAAO,IAAI,GAAG,OAAO,YAAY,GAAG;;AAGhD,QAAO;EACL;EACA;EACD"}
1
+ {"version":3,"file":"useExplorer.js","names":[],"sources":["../../../src/hooks/useExplorer.ts"],"sourcesContent":["import type { Chain } from '@lifi/sdk'\nimport { ChainId, ChainType, isHex } from '@lifi/sdk'\nimport { internalExplorerUrl } from '../config/constants.js'\nimport { useAvailableChains } from '../hooks/useAvailableChains.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\n\nconst sanitiseBaseUrl = (baseUrl: string) => baseUrl.trim().replace(/\\/+$/, '')\n\nconst explorerPathOverrides: Partial<\n Record<ChainType | ChainId, { txPath: string; addressPath: string }>\n> = {\n [ChainId.SUI]: { txPath: 'txblock', addressPath: 'coin' },\n [ChainType.TVM]: { txPath: '#/transaction', addressPath: '#/address' },\n}\n\ntype TransactionLinkProps = { chain?: Chain | number } & (\n | {\n txHash: string\n txLink?: never\n }\n | {\n txHash?: never\n txLink: string\n }\n)\n\nexport const useExplorer = (): {\n getTransactionLink: (props: TransactionLinkProps) => string | undefined\n getAddressLink: (address: string, chain?: Chain | number) => string\n} => {\n const { explorerUrls } = useWidgetConfig()\n const { getChainById } = useAvailableChains()\n\n const getExplorerConfig = (chain?: Chain | number) => {\n const resolvedChain = Number.isFinite(chain)\n ? getChainById(chain as number)\n : (chain as Chain)\n\n const explorerUrl =\n (resolvedChain\n ? (explorerUrls?.[resolvedChain.id]?.[0] ??\n resolvedChain.metamask.blockExplorerUrls[0])\n : explorerUrls?.internal?.[0]) || internalExplorerUrl\n\n const baseUrl =\n typeof explorerUrl === 'string' ? explorerUrl : explorerUrl.url\n\n const overrides =\n explorerPathOverrides[resolvedChain?.id as ChainId] ??\n explorerPathOverrides[resolvedChain?.chainType as ChainType]\n\n const defaultTxPath = overrides?.txPath ?? 'tx'\n const defaultAddressPath = overrides?.addressPath ?? 'address'\n const txPath =\n typeof explorerUrl === 'string'\n ? defaultTxPath\n : explorerUrl.txPath || defaultTxPath\n const addressPath =\n typeof explorerUrl === 'string'\n ? defaultAddressPath\n : explorerUrl.addressPath || defaultAddressPath\n\n return {\n url: sanitiseBaseUrl(baseUrl),\n txPath,\n addressPath,\n resolvedChain,\n }\n }\n\n const getTransactionLink = ({\n txHash,\n txLink,\n chain,\n }: TransactionLinkProps): string | undefined => {\n if (!txHash) {\n return txLink\n }\n\n const config = getExplorerConfig(chain)\n\n // For EVM chains, validate the transaction hash as some relayers return custom task hashes that are not visible on-chain\n if (config.resolvedChain?.chainType === ChainType.EVM) {\n if (!isHex(txHash, { strict: true })) {\n return undefined\n }\n }\n\n return `${config.url}/${config.txPath}/${txHash}`\n }\n\n const getAddressLink = (address: string, chain?: Chain | number) => {\n const config = getExplorerConfig(chain)\n return `${config.url}/${config.addressPath}/${address}`\n }\n\n return {\n getTransactionLink,\n getAddressLink,\n }\n}\n"],"mappings":";;;;;AAMA,MAAM,mBAAmB,YAAoB,QAAQ,MAAM,CAAC,QAAQ,QAAQ,GAAG;AAE/E,MAAM,wBAEF;EACD,QAAQ,MAAM;EAAE,QAAQ;EAAW,aAAa;EAAQ;EACxD,UAAU,MAAM;EAAE,QAAQ;EAAiB,aAAa;EAAa;CACvE;AAaD,MAAa,oBAGR;CACH,MAAM,EAAE,iBAAiB,iBAAiB;CAC1C,MAAM,EAAE,iBAAiB,oBAAoB;CAE7C,MAAM,qBAAqB,UAA2B;EACpD,MAAM,gBAAgB,OAAO,SAAS,MAAM,GACxC,aAAa,MAAgB,GAC5B;EAEL,MAAM,eACH,gBACI,eAAe,cAAc,MAAM,MACpC,cAAc,SAAS,kBAAkB,KACzC,cAAc,WAAW,OAAA;EAE/B,MAAM,UACJ,OAAO,gBAAgB,WAAW,cAAc,YAAY;EAE9D,MAAM,YACJ,sBAAsB,eAAe,OACrC,sBAAsB,eAAe;EAEvC,MAAM,gBAAgB,WAAW,UAAU;EAC3C,MAAM,qBAAqB,WAAW,eAAe;EACrD,MAAM,SACJ,OAAO,gBAAgB,WACnB,gBACA,YAAY,UAAU;EAC5B,MAAM,cACJ,OAAO,gBAAgB,WACnB,qBACA,YAAY,eAAe;EAEjC,OAAO;GACL,KAAK,gBAAgB,QAAQ;GAC7B;GACA;GACA;GACD;;CAGH,MAAM,sBAAsB,EAC1B,QACA,QACA,YAC8C;EAC9C,IAAI,CAAC,QACH,OAAO;EAGT,MAAM,SAAS,kBAAkB,MAAM;EAGvC,IAAI,OAAO,eAAe,cAAc,UAAU;OAC5C,CAAC,MAAM,QAAQ,EAAE,QAAQ,MAAM,CAAC,EAClC;;EAIJ,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO,OAAO,GAAG;;CAG3C,MAAM,kBAAkB,SAAiB,UAA2B;EAClE,MAAM,SAAS,kBAAkB,MAAM;EACvC,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO,YAAY,GAAG;;CAGhD,OAAO;EACL;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFilteredByTokenBalances.js","names":[],"sources":["../../../src/hooks/useFilteredByTokenBalances.ts"],"sourcesContent":["import {\n type BaseToken,\n ChainType,\n getWalletBalances,\n type TokenExtended,\n type WalletTokenExtended,\n} from '@lifi/sdk'\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 { getConfigItemSets, isFormItemAllowed } from '../utils/item.js'\nimport { isSupportedToken } from '../utils/tokenList.js'\n\nexport const useFilteredTokensByBalance = (\n accountsWithTokens?: Record<\n string,\n { chainType: ChainType; tokens: Record<number, TokenExtended[]> }\n >,\n formType?: FormType\n): {\n data: Record<string, Record<number, TokenExtended[]>> | undefined\n isLoading: boolean\n} => {\n const { tokens: configTokens } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n const evmAddress = useMemo(() => {\n const evmAccount = Object.entries(accountsWithTokens ?? {}).find(\n ([_, { chainType }]) => chainType === ChainType.EVM\n )\n return evmAccount?.[0]\n }, [accountsWithTokens])\n\n const { data: existingBalances, isLoading } = useQuery({\n queryKey: ['existing-evm-balances', evmAddress],\n queryFn: () => getWalletBalances(sdkClient, evmAddress ?? ''),\n enabled: !!evmAddress,\n refetchInterval: 30_000, // 30 seconds\n staleTime: 30_000, // 30 seconds\n retry: false,\n })\n\n const accountsWithFilteredTokens = useMemo(() => {\n if (!accountsWithTokens) {\n return undefined\n }\n\n // Early return if no existing balances - return all tokens\n const result: Record<string, Record<number, TokenExtended[]>> = {}\n if (!existingBalances) {\n for (const [address, { tokens }] of Object.entries(accountsWithTokens)) {\n result[address] = tokens\n }\n return result\n }\n\n for (const [address, { tokens }] of Object.entries(accountsWithTokens)) {\n result[address] = {}\n\n for (const [chainIdStr, chainTokens] of Object.entries(tokens)) {\n const chainId = Number(chainIdStr)\n // Get balances for this specific chain\n const balances = existingBalances?.[chainId]\n // If no balances, RPC all tokens of the chain\n if (!balances?.length) {\n if (chainTokens.length) {\n result[address][chainId] = chainTokens\n }\n continue\n }\n\n // Optimize token matching with Set for O(1) lookup\n const balanceSet = new Set(\n balances.map((balance: WalletTokenExtended) =>\n balance.address.toLowerCase()\n )\n )\n\n // Get tokens that are in chainTokens and have balances\n const filteredTokens = chainTokens.filter((token) => {\n const tokenKey = token.address.toLowerCase()\n return balanceSet.has(tokenKey)\n })\n\n // Get tokens that are in balances but not in chainTokens\n const chainTokenSet = new Set(\n chainTokens.map((token) => token.address.toLowerCase())\n )\n\n // Get allowed addresses from config tokens\n const allowedAddressesConfig = getConfigItemSets(\n configTokens,\n (tokens: BaseToken[]) =>\n new Set(\n tokens\n .filter((t) => Number(t.chainId) === chainId)\n .map((t) => t.address.toLowerCase())\n ),\n formType\n )\n\n const additionalTokens = balances\n .filter((balance: WalletTokenExtended) => {\n const balanceKey = balance.address.toLowerCase()\n return (\n !chainTokenSet.has(balanceKey) &&\n isSupportedToken(balance) &&\n isFormItemAllowed(\n balance,\n allowedAddressesConfig,\n formType,\n (t) => t.address.toLowerCase()\n )\n )\n })\n // Mark tokens from wallet balances as unverified\n .map((token: WalletTokenExtended) => ({\n ...token,\n verified: false,\n })) as TokenExtended[]\n\n // Combine both sets of tokens - convert WalletTokenExtended to TokenAmount\n const allTokens = [\n ...filteredTokens,\n ...additionalTokens,\n ] as TokenExtended[]\n\n if (allTokens.length) {\n result[address][chainId] = allTokens\n }\n }\n }\n\n return result\n }, [accountsWithTokens, existingBalances, configTokens, formType])\n\n return { data: accountsWithFilteredTokens, isLoading }\n}\n"],"mappings":";;;;;;;;AAeA,MAAa,8BACX,oBAIA,aAIG;CACH,MAAM,EAAE,QAAQ,iBAAiB,iBAAiB;CAClD,MAAM,YAAY,cAAc;CAEhC,MAAM,aAAa,cAAc;AAI/B,SAHmB,OAAO,QAAQ,sBAAsB,EAAE,CAAC,CAAC,MACzD,CAAC,GAAG,EAAE,iBAAiB,cAAc,UAAU,IAEjC,GAAG;IACnB,CAAC,mBAAmB,CAAC;CAExB,MAAM,EAAE,MAAM,kBAAkB,cAAc,SAAS;EACrD,UAAU,CAAC,yBAAyB,WAAW;EAC/C,eAAe,kBAAkB,WAAW,cAAc,GAAG;EAC7D,SAAS,CAAC,CAAC;EACX,iBAAiB;EACjB,WAAW;EACX,OAAO;EACR,CAAC;AAgGF,QAAO;EAAE,MA9F0B,cAAc;AAC/C,OAAI,CAAC,mBACH;GAIF,MAAM,SAA0D,EAAE;AAClE,OAAI,CAAC,kBAAkB;AACrB,SAAK,MAAM,CAAC,SAAS,EAAE,aAAa,OAAO,QAAQ,mBAAmB,CACpE,QAAO,WAAW;AAEpB,WAAO;;AAGT,QAAK,MAAM,CAAC,SAAS,EAAE,aAAa,OAAO,QAAQ,mBAAmB,EAAE;AACtE,WAAO,WAAW,EAAE;AAEpB,SAAK,MAAM,CAAC,YAAY,gBAAgB,OAAO,QAAQ,OAAO,EAAE;KAC9D,MAAM,UAAU,OAAO,WAAW;KAElC,MAAM,WAAW,mBAAmB;AAEpC,SAAI,CAAC,UAAU,QAAQ;AACrB,UAAI,YAAY,OACd,QAAO,SAAS,WAAW;AAE7B;;KAIF,MAAM,aAAa,IAAI,IACrB,SAAS,KAAK,YACZ,QAAQ,QAAQ,aAAa,CAC9B,CACF;KAGD,MAAM,iBAAiB,YAAY,QAAQ,UAAU;MACnD,MAAM,WAAW,MAAM,QAAQ,aAAa;AAC5C,aAAO,WAAW,IAAI,SAAS;OAC/B;KAGF,MAAM,gBAAgB,IAAI,IACxB,YAAY,KAAK,UAAU,MAAM,QAAQ,aAAa,CAAC,CACxD;KAGD,MAAM,yBAAyB,kBAC7B,eACC,WACC,IAAI,IACF,OACG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC5C,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACvC,EACH,SACD;KAED,MAAM,mBAAmB,SACtB,QAAQ,YAAiC;MACxC,MAAM,aAAa,QAAQ,QAAQ,aAAa;AAChD,aACE,CAAC,cAAc,IAAI,WAAW,IAC9B,iBAAiB,QAAQ,IACzB,kBACE,SACA,wBACA,WACC,MAAM,EAAE,QAAQ,aAAa,CAC/B;OAEH,CAED,KAAK,WAAgC;MACpC,GAAG;MACH,UAAU;MACX,EAAE;KAGL,MAAM,YAAY,CAChB,GAAG,gBACH,GAAG,iBACJ;AAED,SAAI,UAAU,OACZ,QAAO,SAAS,WAAW;;;AAKjC,UAAO;KACN;GAAC;GAAoB;GAAkB;GAAc;GAAS,CAExB;EAAE;EAAW"}
1
+ {"version":3,"file":"useFilteredByTokenBalances.js","names":[],"sources":["../../../src/hooks/useFilteredByTokenBalances.ts"],"sourcesContent":["import {\n type BaseToken,\n ChainType,\n getWalletBalances,\n type TokenExtended,\n type WalletTokenExtended,\n} from '@lifi/sdk'\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 { getConfigItemSets, isFormItemAllowed } from '../utils/item.js'\nimport { isSupportedToken } from '../utils/tokenList.js'\n\nexport const useFilteredTokensByBalance = (\n accountsWithTokens?: Record<\n string,\n { chainType: ChainType; tokens: Record<number, TokenExtended[]> }\n >,\n formType?: FormType\n): {\n data: Record<string, Record<number, TokenExtended[]>> | undefined\n isLoading: boolean\n} => {\n const { tokens: configTokens } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n const evmAddress = useMemo(() => {\n const evmAccount = Object.entries(accountsWithTokens ?? {}).find(\n ([_, { chainType }]) => chainType === ChainType.EVM\n )\n return evmAccount?.[0]\n }, [accountsWithTokens])\n\n const { data: existingBalances, isLoading } = useQuery({\n queryKey: ['existing-evm-balances', evmAddress],\n queryFn: () => getWalletBalances(sdkClient, evmAddress ?? ''),\n enabled: !!evmAddress,\n refetchInterval: 30_000, // 30 seconds\n staleTime: 30_000, // 30 seconds\n retry: false,\n })\n\n const accountsWithFilteredTokens = useMemo(() => {\n if (!accountsWithTokens) {\n return undefined\n }\n\n // Early return if no existing balances - return all tokens\n const result: Record<string, Record<number, TokenExtended[]>> = {}\n if (!existingBalances) {\n for (const [address, { tokens }] of Object.entries(accountsWithTokens)) {\n result[address] = tokens\n }\n return result\n }\n\n for (const [address, { tokens }] of Object.entries(accountsWithTokens)) {\n result[address] = {}\n\n for (const [chainIdStr, chainTokens] of Object.entries(tokens)) {\n const chainId = Number(chainIdStr)\n // Get balances for this specific chain\n const balances = existingBalances?.[chainId]\n // If no balances, RPC all tokens of the chain\n if (!balances?.length) {\n if (chainTokens.length) {\n result[address][chainId] = chainTokens\n }\n continue\n }\n\n // Optimize token matching with Set for O(1) lookup\n const balanceSet = new Set(\n balances.map((balance: WalletTokenExtended) =>\n balance.address.toLowerCase()\n )\n )\n\n // Get tokens that are in chainTokens and have balances\n const filteredTokens = chainTokens.filter((token) => {\n const tokenKey = token.address.toLowerCase()\n return balanceSet.has(tokenKey)\n })\n\n // Get tokens that are in balances but not in chainTokens\n const chainTokenSet = new Set(\n chainTokens.map((token) => token.address.toLowerCase())\n )\n\n // Get allowed addresses from config tokens\n const allowedAddressesConfig = getConfigItemSets(\n configTokens,\n (tokens: BaseToken[]) =>\n new Set(\n tokens\n .filter((t) => Number(t.chainId) === chainId)\n .map((t) => t.address.toLowerCase())\n ),\n formType\n )\n\n const additionalTokens = balances\n .filter((balance: WalletTokenExtended) => {\n const balanceKey = balance.address.toLowerCase()\n return (\n !chainTokenSet.has(balanceKey) &&\n isSupportedToken(balance) &&\n isFormItemAllowed(\n balance,\n allowedAddressesConfig,\n formType,\n (t) => t.address.toLowerCase()\n )\n )\n })\n // Mark tokens from wallet balances as unverified\n .map((token: WalletTokenExtended) => ({\n ...token,\n verified: false,\n })) as TokenExtended[]\n\n // Combine both sets of tokens - convert WalletTokenExtended to TokenAmount\n const allTokens = [\n ...filteredTokens,\n ...additionalTokens,\n ] as TokenExtended[]\n\n if (allTokens.length) {\n result[address][chainId] = allTokens\n }\n }\n }\n\n return result\n }, [accountsWithTokens, existingBalances, configTokens, formType])\n\n return { data: accountsWithFilteredTokens, isLoading }\n}\n"],"mappings":";;;;;;;;AAeA,MAAa,8BACX,oBAIA,aAIG;CACH,MAAM,EAAE,QAAQ,iBAAiB,iBAAiB;CAClD,MAAM,YAAY,cAAc;CAEhC,MAAM,aAAa,cAAc;EAI/B,OAHmB,OAAO,QAAQ,sBAAsB,EAAE,CAAC,CAAC,MACzD,CAAC,GAAG,EAAE,iBAAiB,cAAc,UAAU,IAEjC,GAAG;IACnB,CAAC,mBAAmB,CAAC;CAExB,MAAM,EAAE,MAAM,kBAAkB,cAAc,SAAS;EACrD,UAAU,CAAC,yBAAyB,WAAW;EAC/C,eAAe,kBAAkB,WAAW,cAAc,GAAG;EAC7D,SAAS,CAAC,CAAC;EACX,iBAAiB;EACjB,WAAW;EACX,OAAO;EACR,CAAC;CAgGF,OAAO;EAAE,MA9F0B,cAAc;GAC/C,IAAI,CAAC,oBACH;GAIF,MAAM,SAA0D,EAAE;GAClE,IAAI,CAAC,kBAAkB;IACrB,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,OAAO,QAAQ,mBAAmB,EACpE,OAAO,WAAW;IAEpB,OAAO;;GAGT,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,OAAO,QAAQ,mBAAmB,EAAE;IACtE,OAAO,WAAW,EAAE;IAEpB,KAAK,MAAM,CAAC,YAAY,gBAAgB,OAAO,QAAQ,OAAO,EAAE;KAC9D,MAAM,UAAU,OAAO,WAAW;KAElC,MAAM,WAAW,mBAAmB;KAEpC,IAAI,CAAC,UAAU,QAAQ;MACrB,IAAI,YAAY,QACd,OAAO,SAAS,WAAW;MAE7B;;KAIF,MAAM,aAAa,IAAI,IACrB,SAAS,KAAK,YACZ,QAAQ,QAAQ,aAAa,CAC9B,CACF;KAGD,MAAM,iBAAiB,YAAY,QAAQ,UAAU;MACnD,MAAM,WAAW,MAAM,QAAQ,aAAa;MAC5C,OAAO,WAAW,IAAI,SAAS;OAC/B;KAGF,MAAM,gBAAgB,IAAI,IACxB,YAAY,KAAK,UAAU,MAAM,QAAQ,aAAa,CAAC,CACxD;KAGD,MAAM,yBAAyB,kBAC7B,eACC,WACC,IAAI,IACF,OACG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC5C,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACvC,EACH,SACD;KAED,MAAM,mBAAmB,SACtB,QAAQ,YAAiC;MACxC,MAAM,aAAa,QAAQ,QAAQ,aAAa;MAChD,OACE,CAAC,cAAc,IAAI,WAAW,IAC9B,iBAAiB,QAAQ,IACzB,kBACE,SACA,wBACA,WACC,MAAM,EAAE,QAAQ,aAAa,CAC/B;OAEH,CAED,KAAK,WAAgC;MACpC,GAAG;MACH,UAAU;MACX,EAAE;KAGL,MAAM,YAAY,CAChB,GAAG,gBACH,GAAG,iBACJ;KAED,IAAI,UAAU,QACZ,OAAO,SAAS,WAAW;;;GAKjC,OAAO;KACN;GAAC;GAAoB;GAAkB;GAAc;GAAS,CAExB;EAAE;EAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFromAmountThreshold.js","names":[],"sources":["../../../src/hooks/useFromAmountThreshold.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { FormKeyHelper } from '../stores/form/types.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { formatTokenPrice } from '../utils/format.js'\nimport { useToken } from './useToken.js'\n\nexport const useFromAmountThreshold = (): {\n belowMinFromAmountUSD: boolean\n minFromAmountUSD: number | undefined\n} => {\n const { minFromAmountUSD } = useWidgetConfig()\n\n const [chainId, tokenAddress, fromAmount] = useFieldValues(\n FormKeyHelper.getChainKey('from'),\n FormKeyHelper.getTokenKey('from'),\n FormKeyHelper.getAmountKey('from')\n )\n const { token } = useToken(chainId, tokenAddress)\n\n const belowMinFromAmountUSD = useMemo(() => {\n const fromAmountUSD = formatTokenPrice(\n fromAmount,\n token?.priceUSD,\n token?.decimals\n )\n\n if (!minFromAmountUSD || !fromAmountUSD) {\n return false\n }\n return fromAmountUSD < minFromAmountUSD\n }, [minFromAmountUSD, fromAmount, token?.priceUSD, token?.decimals])\n\n return {\n belowMinFromAmountUSD,\n minFromAmountUSD,\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAa,+BAGR;CACH,MAAM,EAAE,qBAAqB,iBAAiB;CAE9C,MAAM,CAAC,SAAS,cAAc,cAAc,eAC1C,cAAc,YAAY,OAAO,EACjC,cAAc,YAAY,OAAO,EACjC,cAAc,aAAa,OAAO,CACnC;CACD,MAAM,EAAE,UAAU,SAAS,SAAS,aAAa;AAejD,QAAO;EACL,uBAd4B,cAAc;GAC1C,MAAM,gBAAgB,iBACpB,YACA,OAAO,UACP,OAAO,SACR;AAED,OAAI,CAAC,oBAAoB,CAAC,cACxB,QAAO;AAET,UAAO,gBAAgB;KACtB;GAAC;GAAkB;GAAY,OAAO;GAAU,OAAO;GAAS,CAG5C;EACrB;EACD"}
1
+ {"version":3,"file":"useFromAmountThreshold.js","names":[],"sources":["../../../src/hooks/useFromAmountThreshold.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { FormKeyHelper } from '../stores/form/types.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { formatTokenPrice } from '../utils/format.js'\nimport { useToken } from './useToken.js'\n\nexport const useFromAmountThreshold = (): {\n belowMinFromAmountUSD: boolean\n minFromAmountUSD: number | undefined\n} => {\n const { minFromAmountUSD } = useWidgetConfig()\n\n const [chainId, tokenAddress, fromAmount] = useFieldValues(\n FormKeyHelper.getChainKey('from'),\n FormKeyHelper.getTokenKey('from'),\n FormKeyHelper.getAmountKey('from')\n )\n const { token } = useToken(chainId, tokenAddress)\n\n const belowMinFromAmountUSD = useMemo(() => {\n const fromAmountUSD = formatTokenPrice(\n fromAmount,\n token?.priceUSD,\n token?.decimals\n )\n\n if (!minFromAmountUSD || !fromAmountUSD) {\n return false\n }\n return fromAmountUSD < minFromAmountUSD\n }, [minFromAmountUSD, fromAmount, token?.priceUSD, token?.decimals])\n\n return {\n belowMinFromAmountUSD,\n minFromAmountUSD,\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAa,+BAGR;CACH,MAAM,EAAE,qBAAqB,iBAAiB;CAE9C,MAAM,CAAC,SAAS,cAAc,cAAc,eAC1C,cAAc,YAAY,OAAO,EACjC,cAAc,YAAY,OAAO,EACjC,cAAc,aAAa,OAAO,CACnC;CACD,MAAM,EAAE,UAAU,SAAS,SAAS,aAAa;CAejD,OAAO;EACL,uBAd4B,cAAc;GAC1C,MAAM,gBAAgB,iBACpB,YACA,OAAO,UACP,OAAO,SACR;GAED,IAAI,CAAC,oBAAoB,CAAC,eACxB,OAAO;GAET,OAAO,gBAAgB;KACtB;GAAC;GAAkB;GAAY,OAAO;GAAU,OAAO;GAAS,CAG5C;EACrB;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFromTokenSufficiency.js","names":[],"sources":["../../../src/hooks/useFromTokenSufficiency.ts"],"sourcesContent":["import { parseUnits, type RouteExtended } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { keepPreviousData, useQuery } from '@tanstack/react-query'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { isRouteDone } from '../stores/routes/utils.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { useTokenAddressBalance } from './useTokenAddressBalance.js'\nimport { getTokenBalancesWithRetry } from './useTokenBalance.js'\n\nconst refetchInterval = 30_000\n\nexport const useFromTokenSufficiency = (\n route?: RouteExtended\n): {\n insufficientFromToken: boolean | undefined\n isLoading: boolean\n} => {\n const [fromChainId, fromTokenAddress, fromAmount] = useFieldValues(\n 'fromChain',\n 'fromToken',\n 'fromAmount'\n )\n const { keyPrefix } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n let chainId = fromChainId\n let tokenAddress = fromTokenAddress\n if (route) {\n chainId = route.fromToken.chainId\n tokenAddress = route.fromToken.address\n }\n\n const {\n token,\n chain,\n isLoading: isTokenAddressBalanceLoading,\n } = useTokenAddressBalance(chainId, tokenAddress)\n\n const { account } = useAccount({ chainType: chain?.chainType })\n\n const { data: insufficientFromToken, isLoading } = useQuery({\n queryKey: [\n getQueryKey('from-token-sufficiency-check', keyPrefix),\n account.address,\n chainId,\n tokenAddress,\n route?.id ?? fromAmount,\n ] as const,\n queryFn: async ({ queryKey: [, accountAddress] }) => {\n if (!accountAddress || !token) {\n return\n }\n const parsedFromAmount = parseUnits(fromAmount, token.decimals)\n let currentTokenBalance = token.amount ?? 0n\n\n if (!route || isRouteDone(route)) {\n const insufficientFunds = currentTokenBalance < parsedFromAmount\n return insufficientFunds\n }\n\n const currentAction = route.steps.filter(\n (step) => !step.execution || step.execution.status !== 'DONE'\n )[0]?.action\n\n if (\n token.chainId === currentAction.fromToken.chainId &&\n token.address === currentAction.fromToken.address &&\n currentTokenBalance > 0\n ) {\n const insufficientFunds = BigInt(route.fromAmount) > currentTokenBalance\n return insufficientFunds\n }\n\n const tokenBalances = await getTokenBalancesWithRetry(\n sdkClient,\n accountAddress,\n [currentAction.fromToken]\n )\n\n currentTokenBalance = tokenBalances?.[0]?.amount ?? 0n\n const insufficientFunds =\n BigInt(currentAction.fromAmount) > currentTokenBalance\n return insufficientFunds\n },\n\n enabled: Boolean(account.address && token && !isTokenAddressBalanceLoading),\n refetchInterval,\n staleTime: refetchInterval,\n placeholderData: account.address ? keepPreviousData : undefined,\n })\n\n return {\n insufficientFromToken,\n isLoading,\n }\n}\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,kBAAkB;AAExB,MAAa,2BACX,UAIG;CACH,MAAM,CAAC,aAAa,kBAAkB,cAAc,eAClD,aACA,aACA,aACD;CACD,MAAM,EAAE,cAAc,iBAAiB;CACvC,MAAM,YAAY,cAAc;CAEhC,IAAI,UAAU;CACd,IAAI,eAAe;AACnB,KAAI,OAAO;AACT,YAAU,MAAM,UAAU;AAC1B,iBAAe,MAAM,UAAU;;CAGjC,MAAM,EACJ,OACA,OACA,WAAW,iCACT,uBAAuB,SAAS,aAAa;CAEjD,MAAM,EAAE,YAAY,WAAW,EAAE,WAAW,OAAO,WAAW,CAAC;CAE/D,MAAM,EAAE,MAAM,uBAAuB,cAAc,SAAS;EAC1D,UAAU;GACR,YAAY,gCAAgC,UAAU;GACtD,QAAQ;GACR;GACA;GACA,OAAO,MAAM;GACd;EACD,SAAS,OAAO,EAAE,UAAU,GAAG,sBAAsB;AACnD,OAAI,CAAC,kBAAkB,CAAC,MACtB;GAEF,MAAM,mBAAmB,WAAW,YAAY,MAAM,SAAS;GAC/D,IAAI,sBAAsB,MAAM,UAAU;AAE1C,OAAI,CAAC,SAAS,YAAY,MAAM,CAE9B,QAD0B,sBAAsB;GAIlD,MAAM,gBAAgB,MAAM,MAAM,QAC/B,SAAS,CAAC,KAAK,aAAa,KAAK,UAAU,WAAW,OACxD,CAAC,IAAI;AAEN,OACE,MAAM,YAAY,cAAc,UAAU,WAC1C,MAAM,YAAY,cAAc,UAAU,WAC1C,sBAAsB,EAGtB,QAD0B,OAAO,MAAM,WAAW,GAAG;AAUvD,0BAAsB,MANM,0BAC1B,WACA,gBACA,CAAC,cAAc,UAAU,CAC1B,IAEqC,IAAI,UAAU;AAGpD,UADE,OAAO,cAAc,WAAW,GAAG;;EAIvC,SAAS,QAAQ,QAAQ,WAAW,SAAS,CAAC,6BAA6B;EAC3E;EACA,WAAW;EACX,iBAAiB,QAAQ,UAAU,mBAAmB,KAAA;EACvD,CAAC;AAEF,QAAO;EACL;EACA;EACD"}
1
+ {"version":3,"file":"useFromTokenSufficiency.js","names":[],"sources":["../../../src/hooks/useFromTokenSufficiency.ts"],"sourcesContent":["import { parseUnits, type RouteExtended } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { keepPreviousData, useQuery } from '@tanstack/react-query'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { isRouteDone } from '../stores/routes/utils.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { useTokenAddressBalance } from './useTokenAddressBalance.js'\nimport { getTokenBalancesWithRetry } from './useTokenBalance.js'\n\nconst refetchInterval = 30_000\n\nexport const useFromTokenSufficiency = (\n route?: RouteExtended\n): {\n insufficientFromToken: boolean | undefined\n isLoading: boolean\n} => {\n const [fromChainId, fromTokenAddress, fromAmount] = useFieldValues(\n 'fromChain',\n 'fromToken',\n 'fromAmount'\n )\n const { keyPrefix } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n let chainId = fromChainId\n let tokenAddress = fromTokenAddress\n if (route) {\n chainId = route.fromToken.chainId\n tokenAddress = route.fromToken.address\n }\n\n const {\n token,\n chain,\n isLoading: isTokenAddressBalanceLoading,\n } = useTokenAddressBalance(chainId, tokenAddress)\n\n const { account } = useAccount({ chainType: chain?.chainType })\n\n const { data: insufficientFromToken, isLoading } = useQuery({\n queryKey: [\n getQueryKey('from-token-sufficiency-check', keyPrefix),\n account.address,\n chainId,\n tokenAddress,\n route?.id ?? fromAmount,\n ] as const,\n queryFn: async ({ queryKey: [, accountAddress] }) => {\n if (!accountAddress || !token) {\n return\n }\n const parsedFromAmount = parseUnits(fromAmount, token.decimals)\n let currentTokenBalance = token.amount ?? 0n\n\n if (!route || isRouteDone(route)) {\n const insufficientFunds = currentTokenBalance < parsedFromAmount\n return insufficientFunds\n }\n\n const currentAction = route.steps.filter(\n (step) => !step.execution || step.execution.status !== 'DONE'\n )[0]?.action\n\n if (\n token.chainId === currentAction.fromToken.chainId &&\n token.address === currentAction.fromToken.address &&\n currentTokenBalance > 0\n ) {\n const insufficientFunds = BigInt(route.fromAmount) > currentTokenBalance\n return insufficientFunds\n }\n\n const tokenBalances = await getTokenBalancesWithRetry(\n sdkClient,\n accountAddress,\n [currentAction.fromToken]\n )\n\n currentTokenBalance = tokenBalances?.[0]?.amount ?? 0n\n const insufficientFunds =\n BigInt(currentAction.fromAmount) > currentTokenBalance\n return insufficientFunds\n },\n\n enabled: Boolean(account.address && token && !isTokenAddressBalanceLoading),\n refetchInterval,\n staleTime: refetchInterval,\n placeholderData: account.address ? keepPreviousData : undefined,\n })\n\n return {\n insufficientFromToken,\n isLoading,\n }\n}\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,kBAAkB;AAExB,MAAa,2BACX,UAIG;CACH,MAAM,CAAC,aAAa,kBAAkB,cAAc,eAClD,aACA,aACA,aACD;CACD,MAAM,EAAE,cAAc,iBAAiB;CACvC,MAAM,YAAY,cAAc;CAEhC,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAI,OAAO;EACT,UAAU,MAAM,UAAU;EAC1B,eAAe,MAAM,UAAU;;CAGjC,MAAM,EACJ,OACA,OACA,WAAW,iCACT,uBAAuB,SAAS,aAAa;CAEjD,MAAM,EAAE,YAAY,WAAW,EAAE,WAAW,OAAO,WAAW,CAAC;CAE/D,MAAM,EAAE,MAAM,uBAAuB,cAAc,SAAS;EAC1D,UAAU;GACR,YAAY,gCAAgC,UAAU;GACtD,QAAQ;GACR;GACA;GACA,OAAO,MAAM;GACd;EACD,SAAS,OAAO,EAAE,UAAU,GAAG,sBAAsB;GACnD,IAAI,CAAC,kBAAkB,CAAC,OACtB;GAEF,MAAM,mBAAmB,WAAW,YAAY,MAAM,SAAS;GAC/D,IAAI,sBAAsB,MAAM,UAAU;GAE1C,IAAI,CAAC,SAAS,YAAY,MAAM,EAE9B,OAD0B,sBAAsB;GAIlD,MAAM,gBAAgB,MAAM,MAAM,QAC/B,SAAS,CAAC,KAAK,aAAa,KAAK,UAAU,WAAW,OACxD,CAAC,IAAI;GAEN,IACE,MAAM,YAAY,cAAc,UAAU,WAC1C,MAAM,YAAY,cAAc,UAAU,WAC1C,sBAAsB,GAGtB,OAD0B,OAAO,MAAM,WAAW,GAAG;GAUvD,uBAAsB,MANM,0BAC1B,WACA,gBACA,CAAC,cAAc,UAAU,CAC1B,IAEqC,IAAI,UAAU;GAGpD,OADE,OAAO,cAAc,WAAW,GAAG;;EAIvC,SAAS,QAAQ,QAAQ,WAAW,SAAS,CAAC,6BAA6B;EAC3E;EACA,WAAW;EACX,iBAAiB,QAAQ,UAAU,mBAAmB,KAAA;EACvD,CAAC;CAEF,OAAO;EACL;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGasRecommendation.js","names":[],"sources":["../../../src/hooks/useGasRecommendation.ts"],"sourcesContent":["import { type ChainId, getGasRecommendation } from '@lifi/sdk'\nimport type { UseQueryResult } from '@tanstack/react-query'\nimport { useQuery } from '@tanstack/react-query'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../types/widget.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nconst refetchInterval = 60_000\n\nexport const useGasRecommendation = (\n toChainId?: ChainId,\n fromChain?: ChainId,\n fromToken?: string\n): UseQueryResult<Awaited<ReturnType<typeof getGasRecommendation>> | null> => {\n const { chains } = useAvailableChains()\n const { keyPrefix, hiddenUI } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n const checkRecommendationLiFuel =\n Boolean(toChainId) &&\n Boolean(fromChain) &&\n Boolean(fromToken) &&\n Boolean(chains?.length)\n\n const checkRecommendationMaxButton =\n Boolean(toChainId) && !fromChain && !fromToken && Boolean(chains?.length)\n\n return useQuery({\n queryKey: [\n getQueryKey('gas-recommendation', keyPrefix),\n toChainId,\n fromChain,\n fromToken,\n ],\n queryFn: async ({\n queryKey: [_, toChainId, fromChain, fromToken],\n signal,\n }) => {\n if (!chains?.some((chain) => chain.id === toChainId)) {\n return null\n }\n const gasRecommendation = await getGasRecommendation(\n sdkClient,\n {\n chainId: toChainId as ChainId,\n fromChain: fromChain as ChainId,\n fromToken: fromToken as string,\n },\n { signal }\n )\n return gasRecommendation\n },\n enabled:\n (checkRecommendationLiFuel || checkRecommendationMaxButton) &&\n !hiddenUI?.includes(HiddenUI.GasRefuelMessage),\n refetchInterval,\n staleTime: refetchInterval,\n })\n}\n"],"mappings":";;;;;;;;AASA,MAAM,kBAAkB;AAExB,MAAa,wBACX,WACA,WACA,cAC4E;CAC5E,MAAM,EAAE,WAAW,oBAAoB;CACvC,MAAM,EAAE,WAAW,aAAa,iBAAiB;CACjD,MAAM,YAAY,cAAc;CAEhC,MAAM,4BACJ,QAAQ,UAAU,IAClB,QAAQ,UAAU,IAClB,QAAQ,UAAU,IAClB,QAAQ,QAAQ,OAAO;CAEzB,MAAM,+BACJ,QAAQ,UAAU,IAAI,CAAC,aAAa,CAAC,aAAa,QAAQ,QAAQ,OAAO;AAE3E,QAAO,SAAS;EACd,UAAU;GACR,YAAY,sBAAsB,UAAU;GAC5C;GACA;GACA;GACD;EACD,SAAS,OAAO,EACd,UAAU,CAAC,GAAG,WAAW,WAAW,YACpC,aACI;AACJ,OAAI,CAAC,QAAQ,MAAM,UAAU,MAAM,OAAO,UAAU,CAClD,QAAO;AAWT,UAAO,MATyB,qBAC9B,WACA;IACE,SAAS;IACE;IACA;IACZ,EACD,EAAE,QAAQ,CACX;;EAGH,UACG,6BAA6B,iCAC9B,CAAC,UAAU,SAAA,mBAAmC;EAChD;EACA,WAAW;EACZ,CAAC"}
1
+ {"version":3,"file":"useGasRecommendation.js","names":[],"sources":["../../../src/hooks/useGasRecommendation.ts"],"sourcesContent":["import { type ChainId, getGasRecommendation } from '@lifi/sdk'\nimport type { UseQueryResult } from '@tanstack/react-query'\nimport { useQuery } from '@tanstack/react-query'\nimport { useSDKClient } from '../providers/SDKClientProvider.js'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../types/widget.js'\nimport { getQueryKey } from '../utils/queries.js'\nimport { useAvailableChains } from './useAvailableChains.js'\n\nconst refetchInterval = 60_000\n\nexport const useGasRecommendation = (\n toChainId?: ChainId,\n fromChain?: ChainId,\n fromToken?: string\n): UseQueryResult<Awaited<ReturnType<typeof getGasRecommendation>> | null> => {\n const { chains } = useAvailableChains()\n const { keyPrefix, hiddenUI } = useWidgetConfig()\n const sdkClient = useSDKClient()\n\n const checkRecommendationLiFuel =\n Boolean(toChainId) &&\n Boolean(fromChain) &&\n Boolean(fromToken) &&\n Boolean(chains?.length)\n\n const checkRecommendationMaxButton =\n Boolean(toChainId) && !fromChain && !fromToken && Boolean(chains?.length)\n\n return useQuery({\n queryKey: [\n getQueryKey('gas-recommendation', keyPrefix),\n toChainId,\n fromChain,\n fromToken,\n ],\n queryFn: async ({\n queryKey: [_, toChainId, fromChain, fromToken],\n signal,\n }) => {\n if (!chains?.some((chain) => chain.id === toChainId)) {\n return null\n }\n const gasRecommendation = await getGasRecommendation(\n sdkClient,\n {\n chainId: toChainId as ChainId,\n fromChain: fromChain as ChainId,\n fromToken: fromToken as string,\n },\n { signal }\n )\n return gasRecommendation\n },\n enabled:\n (checkRecommendationLiFuel || checkRecommendationMaxButton) &&\n !hiddenUI?.includes(HiddenUI.GasRefuelMessage),\n refetchInterval,\n staleTime: refetchInterval,\n })\n}\n"],"mappings":";;;;;;;;AASA,MAAM,kBAAkB;AAExB,MAAa,wBACX,WACA,WACA,cAC4E;CAC5E,MAAM,EAAE,WAAW,oBAAoB;CACvC,MAAM,EAAE,WAAW,aAAa,iBAAiB;CACjD,MAAM,YAAY,cAAc;CAEhC,MAAM,4BACJ,QAAQ,UAAU,IAClB,QAAQ,UAAU,IAClB,QAAQ,UAAU,IAClB,QAAQ,QAAQ,OAAO;CAEzB,MAAM,+BACJ,QAAQ,UAAU,IAAI,CAAC,aAAa,CAAC,aAAa,QAAQ,QAAQ,OAAO;CAE3E,OAAO,SAAS;EACd,UAAU;GACR,YAAY,sBAAsB,UAAU;GAC5C;GACA;GACA;GACD;EACD,SAAS,OAAO,EACd,UAAU,CAAC,GAAG,WAAW,WAAW,YACpC,aACI;GACJ,IAAI,CAAC,QAAQ,MAAM,UAAU,MAAM,OAAO,UAAU,EAClD,OAAO;GAWT,OAAO,MATyB,qBAC9B,WACA;IACE,SAAS;IACE;IACA;IACZ,EACD,EAAE,QAAQ,CACX;;EAGH,UACG,6BAA6B,iCAC9B,CAAC,UAAU,SAAA,mBAAmC;EAChD;EACA,WAAW;EACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGasRefuel.js","names":[],"sources":["../../../src/hooks/useGasRefuel.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { HiddenUI } from '../types/widget.js'\nimport { useAvailableChains } from './useAvailableChains.js'\nimport { useGasRecommendation } from './useGasRecommendation.js'\nimport { useIsContractAddress } from './useIsContractAddress.js'\nimport { useTokenBalance } from './useTokenBalance.js'\n\nexport const useGasRefuel = (): {\n enabled: boolean\n availble: boolean | undefined\n isLoading: boolean\n chain: ExtendedChain | undefined\n fromAmount: string | undefined\n} => {\n const { getChainById } = useAvailableChains()\n const { hiddenUI } = useWidgetConfig()\n const [fromChainId, fromTokenAddress, toChainId, toAddress] = useFieldValues(\n 'fromChain',\n 'fromToken',\n 'toChain',\n 'toAddress'\n )\n\n const toChain = getChainById(toChainId)\n const fromChain = getChainById(fromChainId)\n\n const { account: toAccount } = useAccount({ chainType: toChain?.chainType })\n\n const effectiveToAddress = toAddress || toAccount?.address\n\n const { isContractAddress: isToContractAddress } = useIsContractAddress(\n effectiveToAddress,\n toChainId,\n toChain?.chainType\n )\n\n const { token: destinationNativeToken } = useTokenBalance(\n effectiveToAddress,\n toChainId ? toChain?.nativeToken : undefined\n )\n\n const { data: gasRecommendation, isLoading } = useGasRecommendation(\n toChainId,\n fromChainId,\n fromTokenAddress\n )\n\n // When we bridge between ecosystems we need to be sure toAddress is set\n const isChainTypeSatisfied =\n fromChain?.chainType !== toChain?.chainType ? Boolean(toAddress) : true\n\n // We should not refuel to the contract address\n const isToAddressSatisfied = effectiveToAddress && !isToContractAddress\n\n const enabled = useMemo(() => {\n if (\n // Same chain refuel is not allowed since users need gas on source chain to initiate transaction\n // We allow refuel when bridging to native token since bridging routes may require gas for destination swaps\n fromChainId === toChainId ||\n !gasRecommendation?.available ||\n !gasRecommendation?.recommended ||\n !destinationNativeToken ||\n !isChainTypeSatisfied ||\n !isToAddressSatisfied ||\n hiddenUI?.includes(HiddenUI.GasRefuelMessage)\n ) {\n return false\n }\n const tokenBalance = destinationNativeToken.amount ?? 0n\n\n // Check if the user balance < 50% of the recommended amount\n const recommendedAmount = BigInt(gasRecommendation.recommended.amount) / 2n\n\n const insufficientGas = tokenBalance < recommendedAmount\n return insufficientGas\n }, [\n fromChainId,\n gasRecommendation,\n isChainTypeSatisfied,\n isToAddressSatisfied,\n destinationNativeToken,\n toChainId,\n hiddenUI,\n ])\n\n return {\n enabled: enabled,\n availble: gasRecommendation?.available,\n isLoading: isLoading,\n chain: toChain,\n fromAmount: gasRecommendation?.available\n ? gasRecommendation.fromAmount\n : undefined,\n }\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAa,qBAMR;CACH,MAAM,EAAE,iBAAiB,oBAAoB;CAC7C,MAAM,EAAE,aAAa,iBAAiB;CACtC,MAAM,CAAC,aAAa,kBAAkB,WAAW,aAAa,eAC5D,aACA,aACA,WACA,YACD;CAED,MAAM,UAAU,aAAa,UAAU;CACvC,MAAM,YAAY,aAAa,YAAY;CAE3C,MAAM,EAAE,SAAS,cAAc,WAAW,EAAE,WAAW,SAAS,WAAW,CAAC;CAE5E,MAAM,qBAAqB,aAAa,WAAW;CAEnD,MAAM,EAAE,mBAAmB,wBAAwB,qBACjD,oBACA,WACA,SAAS,UACV;CAED,MAAM,EAAE,OAAO,2BAA2B,gBACxC,oBACA,YAAY,SAAS,cAAc,KAAA,EACpC;CAED,MAAM,EAAE,MAAM,mBAAmB,cAAc,qBAC7C,WACA,aACA,iBACD;CAGD,MAAM,uBACJ,WAAW,cAAc,SAAS,YAAY,QAAQ,UAAU,GAAG;CAGrE,MAAM,uBAAuB,sBAAsB,CAAC;AAiCpD,QAAO;EACL,SAhCc,cAAc;AAC5B,OAGE,gBAAgB,aAChB,CAAC,mBAAmB,aACpB,CAAC,mBAAmB,eACpB,CAAC,0BACD,CAAC,wBACD,CAAC,wBACD,UAAU,SAAA,mBAAmC,CAE7C,QAAO;AAQT,WANqB,uBAAuB,UAAU,MAG5B,OAAO,kBAAkB,YAAY,OAAO,GAAG;KAIxE;GACD;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAGiB;EAChB,UAAU,mBAAmB;EAClB;EACX,OAAO;EACP,YAAY,mBAAmB,YAC3B,kBAAkB,aAClB,KAAA;EACL"}
1
+ {"version":3,"file":"useGasRefuel.js","names":[],"sources":["../../../src/hooks/useGasRefuel.ts"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useAccount } from '@lifi/wallet-management'\nimport { useMemo } from 'react'\nimport { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../stores/form/useFieldValues.js'\nimport { HiddenUI } from '../types/widget.js'\nimport { useAvailableChains } from './useAvailableChains.js'\nimport { useGasRecommendation } from './useGasRecommendation.js'\nimport { useIsContractAddress } from './useIsContractAddress.js'\nimport { useTokenBalance } from './useTokenBalance.js'\n\nexport const useGasRefuel = (): {\n enabled: boolean\n availble: boolean | undefined\n isLoading: boolean\n chain: ExtendedChain | undefined\n fromAmount: string | undefined\n} => {\n const { getChainById } = useAvailableChains()\n const { hiddenUI } = useWidgetConfig()\n const [fromChainId, fromTokenAddress, toChainId, toAddress] = useFieldValues(\n 'fromChain',\n 'fromToken',\n 'toChain',\n 'toAddress'\n )\n\n const toChain = getChainById(toChainId)\n const fromChain = getChainById(fromChainId)\n\n const { account: toAccount } = useAccount({ chainType: toChain?.chainType })\n\n const effectiveToAddress = toAddress || toAccount?.address\n\n const { isContractAddress: isToContractAddress } = useIsContractAddress(\n effectiveToAddress,\n toChainId,\n toChain?.chainType\n )\n\n const { token: destinationNativeToken } = useTokenBalance(\n effectiveToAddress,\n toChainId ? toChain?.nativeToken : undefined\n )\n\n const { data: gasRecommendation, isLoading } = useGasRecommendation(\n toChainId,\n fromChainId,\n fromTokenAddress\n )\n\n // When we bridge between ecosystems we need to be sure toAddress is set\n const isChainTypeSatisfied =\n fromChain?.chainType !== toChain?.chainType ? Boolean(toAddress) : true\n\n // We should not refuel to the contract address\n const isToAddressSatisfied = effectiveToAddress && !isToContractAddress\n\n const enabled = useMemo(() => {\n if (\n // Same chain refuel is not allowed since users need gas on source chain to initiate transaction\n // We allow refuel when bridging to native token since bridging routes may require gas for destination swaps\n fromChainId === toChainId ||\n !gasRecommendation?.available ||\n !gasRecommendation?.recommended ||\n !destinationNativeToken ||\n !isChainTypeSatisfied ||\n !isToAddressSatisfied ||\n hiddenUI?.includes(HiddenUI.GasRefuelMessage)\n ) {\n return false\n }\n const tokenBalance = destinationNativeToken.amount ?? 0n\n\n // Check if the user balance < 50% of the recommended amount\n const recommendedAmount = BigInt(gasRecommendation.recommended.amount) / 2n\n\n const insufficientGas = tokenBalance < recommendedAmount\n return insufficientGas\n }, [\n fromChainId,\n gasRecommendation,\n isChainTypeSatisfied,\n isToAddressSatisfied,\n destinationNativeToken,\n toChainId,\n hiddenUI,\n ])\n\n return {\n enabled: enabled,\n availble: gasRecommendation?.available,\n isLoading: isLoading,\n chain: toChain,\n fromAmount: gasRecommendation?.available\n ? gasRecommendation.fromAmount\n : undefined,\n }\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAa,qBAMR;CACH,MAAM,EAAE,iBAAiB,oBAAoB;CAC7C,MAAM,EAAE,aAAa,iBAAiB;CACtC,MAAM,CAAC,aAAa,kBAAkB,WAAW,aAAa,eAC5D,aACA,aACA,WACA,YACD;CAED,MAAM,UAAU,aAAa,UAAU;CACvC,MAAM,YAAY,aAAa,YAAY;CAE3C,MAAM,EAAE,SAAS,cAAc,WAAW,EAAE,WAAW,SAAS,WAAW,CAAC;CAE5E,MAAM,qBAAqB,aAAa,WAAW;CAEnD,MAAM,EAAE,mBAAmB,wBAAwB,qBACjD,oBACA,WACA,SAAS,UACV;CAED,MAAM,EAAE,OAAO,2BAA2B,gBACxC,oBACA,YAAY,SAAS,cAAc,KAAA,EACpC;CAED,MAAM,EAAE,MAAM,mBAAmB,cAAc,qBAC7C,WACA,aACA,iBACD;CAGD,MAAM,uBACJ,WAAW,cAAc,SAAS,YAAY,QAAQ,UAAU,GAAG;CAGrE,MAAM,uBAAuB,sBAAsB,CAAC;CAiCpD,OAAO;EACL,SAhCc,cAAc;GAC5B,IAGE,gBAAgB,aAChB,CAAC,mBAAmB,aACpB,CAAC,mBAAmB,eACpB,CAAC,0BACD,CAAC,wBACD,CAAC,wBACD,UAAU,SAAA,mBAAmC,EAE7C,OAAO;GAQT,QANqB,uBAAuB,UAAU,MAG5B,OAAO,kBAAkB,YAAY,OAAO,GAAG;KAIxE;GACD;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAGiB;EAChB,UAAU,mBAAmB;EAClB;EACX,OAAO;EACP,YAAY,mBAAmB,YAC3B,kBAAkB,aAClB,KAAA;EACL"}