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

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 (327) 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 +1 -1
  26. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  27. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  28. package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
  29. package/dist/esm/components/Chains/ChainListItem.js.map +1 -1
  30. package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
  31. package/dist/esm/components/Chains/ChainsExpanded.js.map +1 -1
  32. package/dist/esm/components/Chains/PinChainButton.js.map +1 -1
  33. package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
  34. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  35. package/dist/esm/components/ContextMenu.js.map +1 -1
  36. package/dist/esm/components/ContractComponent/ContractComponent.js.map +1 -1
  37. package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
  38. package/dist/esm/components/ContractComponent/NFT/NFT.js.map +1 -1
  39. package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
  40. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  41. package/dist/esm/components/Expansion/Expansion.js.map +1 -1
  42. package/dist/esm/components/Expansion/ExpansionTransition.js.map +1 -1
  43. package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
  44. package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
  45. package/dist/esm/components/Header/BackButton.js.map +1 -1
  46. package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
  47. package/dist/esm/components/Header/DisconnectIconButton.js.map +1 -1
  48. package/dist/esm/components/Header/Header.js.map +1 -1
  49. package/dist/esm/components/Header/Header.style.js.map +1 -1
  50. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  51. package/dist/esm/components/Header/SettingsButton.js.map +1 -1
  52. package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
  53. package/dist/esm/components/Header/SplitNavigationTabs.js.map +1 -1
  54. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  55. package/dist/esm/components/Header/WalletMenu.js.map +1 -1
  56. package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
  57. package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
  58. package/dist/esm/components/Initializer.js.map +1 -1
  59. package/dist/esm/components/ListItemButton.js.map +1 -1
  60. package/dist/esm/components/Messages/AccountDeployedMessage.js.map +1 -1
  61. package/dist/esm/components/Messages/AccountNotDeployedMessage.js.map +1 -1
  62. package/dist/esm/components/Messages/FundsSufficiencyMessage.js.map +1 -1
  63. package/dist/esm/components/Messages/GasRefuelMessage.js.map +1 -1
  64. package/dist/esm/components/Messages/GasSufficiencyMessage.js.map +1 -1
  65. package/dist/esm/components/Messages/MinFromAmountUSDMessage.js.map +1 -1
  66. package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js.map +1 -1
  67. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  68. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
  69. package/dist/esm/components/NotFound.js.map +1 -1
  70. package/dist/esm/components/PageEntered.js.map +1 -1
  71. package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
  72. package/dist/esm/components/ProgressToNextUpdate.js.map +1 -1
  73. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
  74. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
  75. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  76. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  77. package/dist/esm/components/RouteCard/RouteCardSkeleton.js.map +1 -1
  78. package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
  79. package/dist/esm/components/RouteCard/RouteNotFoundCard.js.map +1 -1
  80. package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
  81. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  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 +1 -1
  92. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  93. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  94. package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
  95. package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
  96. package/dist/esm/components/Step/CircularProgress.js.map +1 -1
  97. package/dist/esm/components/Step/CircularProgress.style.js.map +1 -1
  98. package/dist/esm/components/Step/DestinationWalletAddress.js.map +1 -1
  99. package/dist/esm/components/Step/Step.js.map +1 -1
  100. package/dist/esm/components/Step/StepAction.js.map +1 -1
  101. package/dist/esm/components/Step/StepActions.js.map +1 -1
  102. package/dist/esm/components/Step/StepList.js.map +1 -1
  103. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  104. package/dist/esm/components/StepDivider/StepDivider.js.map +1 -1
  105. package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
  106. package/dist/esm/components/TextFitter/TextFitter.js.map +1 -1
  107. package/dist/esm/components/Timer/StepTimer.js.map +1 -1
  108. package/dist/esm/components/Timer/TimerContent.js.map +1 -1
  109. package/dist/esm/components/Token/Token.js.map +1 -1
  110. package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
  111. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  112. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  113. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  114. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  115. package/dist/esm/components/TokenList/TokenNotFound.js.map +1 -1
  116. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  117. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  118. package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
  119. package/dist/esm/components/Tools/ToolItem.js.map +1 -1
  120. package/dist/esm/components/Tools/Tools.js.map +1 -1
  121. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  122. package/dist/esm/components/TransactionCard/TransactionCard.js.map +1 -1
  123. package/dist/esm/components/TransactionCard/TransactionCardSkeleton.js.map +1 -1
  124. package/dist/esm/components/TransactionDetails.js.map +1 -1
  125. package/dist/esm/config/version.d.ts +1 -1
  126. package/dist/esm/config/version.js +1 -1
  127. package/dist/esm/config/version.js.map +1 -1
  128. package/dist/esm/hooks/timer/time.js.map +1 -1
  129. package/dist/esm/hooks/timer/useExecutionTimer.js.map +1 -1
  130. package/dist/esm/hooks/timer/useInterval.js.map +1 -1
  131. package/dist/esm/hooks/timer/useTimer.js.map +1 -1
  132. package/dist/esm/hooks/timer/validate.js.map +1 -1
  133. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  134. package/dist/esm/hooks/useActionMessage.js +2 -2
  135. package/dist/esm/hooks/useActionMessage.js.map +1 -1
  136. package/dist/esm/hooks/useAddressActivity.js.map +1 -1
  137. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  138. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  139. package/dist/esm/hooks/useChain.js.map +1 -1
  140. package/dist/esm/hooks/useChains.js.map +1 -1
  141. package/dist/esm/hooks/useContactSupport.js.map +1 -1
  142. package/dist/esm/hooks/useDebouncedWatch.js.map +1 -1
  143. package/dist/esm/hooks/useDefaultElementId.js.map +1 -1
  144. package/dist/esm/hooks/useExplorer.js.map +1 -1
  145. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  146. package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
  147. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  148. package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
  149. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  150. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  151. package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
  152. package/dist/esm/hooks/useHeader.js.map +1 -1
  153. package/dist/esm/hooks/useInitializeSDKProviders.js.map +1 -1
  154. package/dist/esm/hooks/useInitializer.js.map +1 -1
  155. package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -1
  156. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  157. package/dist/esm/hooks/useLanguages.js.map +1 -1
  158. package/dist/esm/hooks/useListHeight.js.map +1 -1
  159. package/dist/esm/hooks/useLongPress.js.map +1 -1
  160. package/dist/esm/hooks/useNavigateBack.js.map +1 -1
  161. package/dist/esm/hooks/useRouteExecution.js +0 -2
  162. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  163. package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
  164. package/dist/esm/hooks/useRoutes.js.map +1 -1
  165. package/dist/esm/hooks/useScrollableContainer.js.map +1 -1
  166. package/dist/esm/hooks/useSetContentHeight.js.map +1 -1
  167. package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
  168. package/dist/esm/hooks/useSwapOnly.js.map +1 -1
  169. package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
  170. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  171. package/dist/esm/hooks/useToAddressReset.js.map +1 -1
  172. package/dist/esm/hooks/useToken.js.map +1 -1
  173. package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
  174. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  175. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  176. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  177. package/dist/esm/hooks/useTokenRateText.js.map +1 -1
  178. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  179. package/dist/esm/hooks/useTokens.js.map +1 -1
  180. package/dist/esm/hooks/useTools.js.map +1 -1
  181. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  182. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  183. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  184. package/dist/esm/hooks/useWideVariant.js.map +1 -1
  185. package/dist/esm/hooks/useWidgetChains.js.map +1 -1
  186. package/dist/esm/hooks/useWidgetEvents.js.map +1 -1
  187. package/dist/esm/i18n/bn.json +3 -0
  188. package/dist/esm/i18n/de.json +3 -0
  189. package/dist/esm/i18n/es.json +3 -0
  190. package/dist/esm/i18n/fr.json +3 -0
  191. package/dist/esm/i18n/hi.json +3 -0
  192. package/dist/esm/i18n/id.json +3 -0
  193. package/dist/esm/i18n/it.json +3 -0
  194. package/dist/esm/i18n/ja.json +3 -0
  195. package/dist/esm/i18n/ko.json +3 -0
  196. package/dist/esm/i18n/pl.json +3 -0
  197. package/dist/esm/i18n/pt.json +3 -0
  198. package/dist/esm/i18n/th.json +3 -0
  199. package/dist/esm/i18n/tr.json +3 -0
  200. package/dist/esm/i18n/uk.json +3 -0
  201. package/dist/esm/i18n/vi.json +3 -0
  202. package/dist/esm/i18n/zh.json +3 -0
  203. package/dist/esm/pages/ActivitiesPage/ActiveTransactionItem.js.map +1 -1
  204. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  205. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
  206. package/dist/esm/pages/ActivitiesPage/TransactionHistoryEmpty.js.map +1 -1
  207. package/dist/esm/pages/ActivitiesPage/TransactionHistoryItem.js.map +1 -1
  208. package/dist/esm/pages/LanguagesPage.js.map +1 -1
  209. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  210. package/dist/esm/pages/MainPage/MainWarningMessages.js.map +1 -1
  211. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  212. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  213. package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
  214. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  215. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
  216. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  217. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  218. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  219. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  220. package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
  221. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  222. package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
  223. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  224. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  225. package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
  226. package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
  227. package/dist/esm/pages/SettingsPage/ResetSettingsButton.js.map +1 -1
  228. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
  229. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  230. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
  231. package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
  232. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
  233. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
  234. package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
  235. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  236. package/dist/esm/pages/TransactionDetailsPage/ActionRow.js.map +1 -1
  237. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
  238. package/dist/esm/pages/TransactionDetailsPage/ReceiptsCard.js.map +1 -1
  239. package/dist/esm/pages/TransactionDetailsPage/SentToWalletRow.js.map +1 -1
  240. package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js +2 -2
  241. package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js.map +1 -1
  242. package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js +11 -5
  243. package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js.map +1 -1
  244. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  245. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
  246. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
  247. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  248. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  249. package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
  250. package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
  251. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  252. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
  253. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  254. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  255. package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
  256. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  257. package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
  258. package/dist/esm/providers/QueryClientProvider.js.map +1 -1
  259. package/dist/esm/providers/SDKClientProvider.js.map +1 -1
  260. package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
  261. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  262. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
  263. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  264. package/dist/esm/stores/StoreProvider.js.map +1 -1
  265. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  266. package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
  267. package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
  268. package/dist/esm/stores/bookmarks/useBookmarks.js.map +1 -1
  269. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  270. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  271. package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
  272. package/dist/esm/stores/form/FormStore.js.map +1 -1
  273. package/dist/esm/stores/form/FormUpdater.js.map +1 -1
  274. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  275. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  276. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
  277. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  278. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  279. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  280. package/dist/esm/stores/form/useFormStore.js.map +1 -1
  281. package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
  282. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  283. package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
  284. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
  285. package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
  286. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  287. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  288. package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
  289. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  290. package/dist/esm/stores/routes/useSetExecutableRoute.js.map +1 -1
  291. package/dist/esm/stores/routes/utils.js.map +1 -1
  292. package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
  293. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  294. package/dist/esm/stores/settings/useSettings.js.map +1 -1
  295. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  296. package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
  297. package/dist/esm/themes/createTheme.js.map +1 -1
  298. package/dist/esm/themes/utils.js.map +1 -1
  299. package/dist/esm/types/events.js.map +1 -1
  300. package/dist/esm/types/widget.js.map +1 -1
  301. package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
  302. package/dist/esm/utils/converters.js.map +1 -1
  303. package/dist/esm/utils/currencyExtendedFormatter.js.map +1 -1
  304. package/dist/esm/utils/deepEqual.js.map +1 -1
  305. package/dist/esm/utils/deepMerge.js.map +1 -1
  306. package/dist/esm/utils/fees.js.map +1 -1
  307. package/dist/esm/utils/format.js.map +1 -1
  308. package/dist/esm/utils/getActionMessage.js.map +1 -1
  309. package/dist/esm/utils/getErrorMessage.js.map +1 -1
  310. package/dist/esm/utils/getPriceImpact.js.map +1 -1
  311. package/dist/esm/utils/input.js.map +1 -1
  312. package/dist/esm/utils/item.js.map +1 -1
  313. package/dist/esm/utils/percentFormatter.js.map +1 -1
  314. package/dist/esm/utils/prepareActions.js.map +1 -1
  315. package/dist/esm/utils/timer.js.map +1 -1
  316. package/dist/esm/utils/token.js.map +1 -1
  317. package/dist/esm/utils/tokenList.js.map +1 -1
  318. package/dist/esm/utils/variant.js.map +1 -1
  319. package/dist/esm/utils/widgetSize.js.map +1 -1
  320. package/package.json +12 -12
  321. package/src/components/Chains/AllChainsAvatar.tsx +1 -1
  322. package/src/components/SendToWallet/SendToWalletButton.tsx +1 -1
  323. package/src/config/version.ts +1 -1
  324. package/src/hooks/useActionMessage.ts +4 -3
  325. package/src/hooks/useRouteExecution.ts +0 -2
  326. package/src/pages/TransactionDetailsPage/StepActionRow.tsx +3 -2
  327. package/src/pages/TransactionDetailsPage/StepActionsList.tsx +19 -12
@@ -1 +1 @@
1
- {"version":3,"file":"createTheme.js","names":["createTheme","createMuiTheme"],"sources":["../../../src/themes/createTheme.ts"],"sourcesContent":["import type {\n CSSObject,\n Shape,\n SimplePaletteColorOptions,\n Theme,\n} from '@mui/material'\nimport {\n alpha,\n buttonClasses,\n createTheme as createMuiTheme,\n css,\n darken,\n keyframes,\n lighten,\n tabsClasses,\n touchRippleClasses,\n} from '@mui/material'\nimport type { WidgetTheme } from '../types/widget.js'\nimport { palette, paletteDark, paletteLight } from './palettes.js'\nimport type {} from './types.js'\nimport { getStyleOverrides } from './utils.js'\n\nconst shape: Shape = {\n borderRadius: 12,\n borderRadiusSecondary: 12,\n borderRadiusTertiary: 24,\n}\n\nconst enterKeyframe = keyframes`\n 0% {\n transform: scale(0);\n opacity: 0.05;\n }\n 100% {\n transform: scale(1);\n opacity: 0.1;\n }\n`\n\nexport const createTheme = (widgetTheme: WidgetTheme = {}): Theme => {\n const configuredPaletteLight = widgetTheme.colorSchemes?.light?.palette\n const configuredPaletteDark = widgetTheme.colorSchemes?.dark?.palette\n\n const primaryMainColorLight =\n (configuredPaletteLight?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n const primaryMainColorDark =\n (configuredPaletteDark?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n\n const primaryLightenColorLight = lighten(primaryMainColorLight, 0.84)\n const primaryDarkenColorLight = darken(primaryMainColorLight, 0.2)\n const primaryLightenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryLightenColorLight\n : lighten(primaryMainColorDark, 0.84)\n const primaryDarkenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryDarkenColorLight\n : darken(primaryMainColorDark, 0.2)\n\n const secondaryMainColorLight =\n (configuredPaletteLight?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n const secondaryMainColorDark =\n (configuredPaletteDark?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n\n const secondaryLightenColorLight = lighten(secondaryMainColorLight, 0.84)\n const secondaryDarkenColorLight = darken(secondaryMainColorLight, 0.2)\n const secondaryLightenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryLightenColorLight\n : lighten(secondaryMainColorDark, 0.84)\n const secondaryDarkenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryDarkenColorLight\n : darken(secondaryMainColorDark, 0.2)\n\n const theme = createMuiTheme({\n cssVariables: {\n cssVarPrefix: 'lifi',\n colorSchemeSelector: 'class',\n nativeColor: true,\n },\n colorSchemes: {\n light: {\n palette: {\n ...palette,\n ...paletteLight,\n ...widgetTheme.colorSchemes?.light?.palette,\n primary: {\n main: primaryMainColorLight,\n light: primaryLightenColorLight,\n dark: primaryDarkenColorLight,\n },\n secondary: {\n main: secondaryMainColorLight,\n light: secondaryLightenColorLight,\n dark: secondaryDarkenColorLight,\n },\n },\n },\n dark: {\n palette: {\n ...palette,\n ...paletteDark,\n ...widgetTheme.colorSchemes?.dark?.palette,\n primary: {\n main: primaryMainColorDark,\n light: primaryLightenColorDark,\n dark: primaryDarkenColorDark,\n },\n secondary: {\n main: secondaryMainColorDark,\n light: secondaryLightenColorDark,\n dark: secondaryDarkenColorDark,\n },\n },\n },\n },\n container: widgetTheme.container,\n routesContainer: widgetTheme.routesContainer,\n chainSidebarContainer: widgetTheme.chainSidebarContainer,\n header: widgetTheme.header,\n navigation: {\n edge: true,\n ...widgetTheme.navigation,\n },\n typography: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n shape: {\n ...shape,\n ...widgetTheme.shape,\n },\n breakpoints: {\n values: {\n xs: 360,\n sm: 416,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n },\n components: {\n MuiScopedCssBaseline: {\n styleOverrides: {\n root: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n },\n },\n MuiAppBar: {\n styleOverrides: {\n root: ({ ownerState }) => ({\n minHeight: 40,\n padding: 0,\n ...getStyleOverrides('MuiAppBar', 'root', widgetTheme, ownerState),\n }),\n },\n },\n MuiCard: {\n defaultProps: {\n variant: 'outlined',\n ...widgetTheme.components?.MuiCard?.defaultProps,\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => {\n const root = widgetTheme.components?.MuiCard?.styleOverrides\n ?.root as CSSObject\n const rootHover = root?.['&:hover']\n return {\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n borderRadius: theme.vars.shape.borderRadius,\n overflow: 'hidden',\n position: 'relative',\n boxSizing: 'border-box',\n transition: theme.transitions.create(\n ['background-color', 'filter'],\n {\n duration: theme.transitions.duration.enteringScreen,\n easing: theme.transitions.easing.easeOut,\n }\n ),\n ...(!!ownerState.onClick && {\n '&:hover': {\n cursor: 'pointer',\n },\n }),\n ...(!!ownerState.onClick &&\n (ownerState.variant === 'outlined' ||\n ownerState.variant === 'filled') && {\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, black)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, white)`,\n }),\n },\n }),\n ...(!!ownerState.onClick &&\n ownerState.variant === 'elevation' && {\n '&:hover': {\n cursor: 'pointer',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 8%, transparent))`,\n }),\n },\n }),\n ...(typeof root === 'object' && root),\n ...(!!ownerState.onClick &&\n !!rootHover && {\n '&:hover': {\n ...rootHover,\n ...theme.applyStyles('dark', {\n ...rootHover,\n }),\n },\n }),\n ...(!ownerState.onClick && {\n '&:hover': {},\n }),\n }\n },\n },\n variants: widgetTheme.components?.MuiCard?.variants ?? [\n {\n props: { variant: 'outlined' },\n style: ({ theme }) => ({\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: theme.vars.palette.grey[300],\n ...theme.applyStyles('dark', {\n borderColor: theme.vars.palette.grey[800],\n }),\n }),\n },\n {\n props: { variant: 'elevation' },\n style: ({ theme }) => ({\n border: 'none',\n boxShadow: 'none',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 4%, transparent))`,\n }),\n }),\n },\n {\n props: { variant: 'filled' },\n style: {\n border: 'none',\n },\n },\n ],\n },\n MuiInputCard: {\n ...widgetTheme.components?.MuiInputCard,\n },\n MuiButtonBase: {\n styleOverrides: {\n // This `css()` function invokes keyframes. `styled-components` only supports keyframes\n // in string templates. Do not convert these styles in JS object as it will break.\n root: css`\n &\n .${touchRippleClasses.ripple}.${touchRippleClasses.rippleVisible} {\n opacity: 0.1;\n animation-name: ${enterKeyframe};\n }\n `,\n },\n },\n MuiButton: {\n defaultProps: {\n disableElevation: true,\n ...widgetTheme.components?.MuiButton?.defaultProps,\n },\n styleOverrides: {\n root: ({ theme, ownerState }) => ({\n borderRadius: theme.vars.shape.borderRadiusSecondary,\n textTransform: 'none',\n fontSize: 16,\n fontWeight: 600,\n '&.Mui-disabled, &.Mui-disabled:hover': {\n color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 56%, transparent)`,\n cursor: 'not-allowed',\n pointerEvents: 'auto',\n },\n [`&.${buttonClasses.loading}.Mui-disabled`]: {\n backgroundColor: theme.vars.palette.primary.main,\n color: theme.palette.getContrastText(theme.palette.primary.main),\n cursor: 'auto',\n pointerEvents: 'auto',\n },\n [`.${buttonClasses.loadingIndicator}`]: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n [`&.${buttonClasses.root}.${buttonClasses.loading}`]: {\n color: 'transparent',\n },\n ...getStyleOverrides('MuiButton', 'root', widgetTheme, ownerState),\n }),\n text: ({ theme, ownerState }) => ({\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 8%, transparent)`,\n color: theme.vars.palette.primary.main,\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 12%, transparent)`,\n },\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 42%, transparent)`,\n color: theme.palette.getContrastText(\n alpha(theme.palette.primary.main, 0.08)\n ),\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 56%, transparent)`,\n },\n }),\n ...getStyleOverrides('MuiButton', 'text', widgetTheme, ownerState),\n }),\n contained: ({ ownerState }) => ({\n '&:hover': {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n ...getStyleOverrides(\n 'MuiButton',\n 'contained',\n widgetTheme,\n ownerState\n ),\n }),\n sizeMedium: ({ ownerState }) => ({\n padding: '10px 14px',\n ...getStyleOverrides(\n 'MuiButton',\n 'sizeMedium',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiIconButton: {\n ...widgetTheme.components?.MuiIconButton,\n styleOverrides: {\n ...widgetTheme.components?.MuiIconButton?.styleOverrides,\n root: ({ ownerState }) => ({\n color: 'inherit',\n '&:hover': {\n color: 'inherit',\n },\n ...getStyleOverrides(\n 'MuiIconButton',\n 'root',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n height: 40,\n width: 40,\n },\n img: {\n objectFit: 'contain',\n },\n },\n ...widgetTheme.components?.MuiAvatar,\n },\n MuiListItemText: {\n styleOverrides: {\n primary: ({ theme }) => ({\n fontWeight: 600,\n fontSize: '1.125rem',\n lineHeight: '1.2778',\n color: theme.vars.palette.text.primary,\n }),\n secondary: ({ theme }) => ({\n fontWeight: 500,\n fontSize: '0.75rem',\n color: theme.vars.palette.text.secondary,\n }),\n },\n },\n MuiTooltip: {\n defaultProps: {\n enterDelay: 400,\n disableInteractive: true,\n arrow: true,\n placement: 'top',\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n backgroundColor: 'rgb(0 0 0 / 64%)',\n backdropFilter: 'blur(3px)',\n fontSize: '0.75rem',\n padding: theme.spacing(1, 1.5),\n }),\n arrow: {\n color: 'rgb(0 0 0 / 64%)',\n },\n },\n },\n MuiMenu: {\n styleOverrides: {\n paper: ({ theme }) => ({\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n }),\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n backgroundImage: 'none',\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundImage: 'none',\n },\n },\n },\n MuiTabs: {\n ...widgetTheme.components?.MuiTabs,\n styleOverrides: {\n ...widgetTheme.components?.MuiTabs?.styleOverrides,\n root: ({ theme, ownerState }) => {\n const rootStyleOverrides = getStyleOverrides(\n 'MuiTabs',\n 'root',\n widgetTheme,\n ownerState\n )\n return {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent)`,\n }),\n borderRadius: theme.vars.shape.borderRadius,\n ...rootStyleOverrides,\n [`.${tabsClasses.indicator}`]: {\n backgroundColor: theme.vars.palette.background.paper,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.background} 56%, transparent)`,\n }),\n borderRadius:\n theme.shape.borderRadius > 0\n ? `calc(${theme.vars.shape.borderRadius} - 4px)`\n : theme.vars.shape.borderRadius,\n boxShadow: `0px 2px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...rootStyleOverrides?.[`.${tabsClasses.indicator}`],\n },\n }\n },\n },\n },\n MuiNavigationTabs: {\n ...widgetTheme.components?.MuiNavigationTabs,\n },\n MuiNavigationTab: {\n ...widgetTheme.components?.MuiNavigationTab,\n },\n MuiCheckbox: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n },\n ...widgetTheme.components?.MuiCheckbox,\n },\n },\n })\n\n return theme\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createTheme.js","names":["createTheme","createMuiTheme"],"sources":["../../../src/themes/createTheme.ts"],"sourcesContent":["import type {\n CSSObject,\n Shape,\n SimplePaletteColorOptions,\n Theme,\n} from '@mui/material'\nimport {\n alpha,\n buttonClasses,\n createTheme as createMuiTheme,\n css,\n darken,\n keyframes,\n lighten,\n tabsClasses,\n touchRippleClasses,\n} from '@mui/material'\nimport type { WidgetTheme } from '../types/widget.js'\nimport { palette, paletteDark, paletteLight } from './palettes.js'\nimport type {} from './types.js'\nimport { getStyleOverrides } from './utils.js'\n\nconst shape: Shape = {\n borderRadius: 12,\n borderRadiusSecondary: 12,\n borderRadiusTertiary: 24,\n}\n\nconst enterKeyframe = keyframes`\n 0% {\n transform: scale(0);\n opacity: 0.05;\n }\n 100% {\n transform: scale(1);\n opacity: 0.1;\n }\n`\n\nexport const createTheme = (widgetTheme: WidgetTheme = {}): Theme => {\n const configuredPaletteLight = widgetTheme.colorSchemes?.light?.palette\n const configuredPaletteDark = widgetTheme.colorSchemes?.dark?.palette\n\n const primaryMainColorLight =\n (configuredPaletteLight?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n const primaryMainColorDark =\n (configuredPaletteDark?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n\n const primaryLightenColorLight = lighten(primaryMainColorLight, 0.84)\n const primaryDarkenColorLight = darken(primaryMainColorLight, 0.2)\n const primaryLightenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryLightenColorLight\n : lighten(primaryMainColorDark, 0.84)\n const primaryDarkenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryDarkenColorLight\n : darken(primaryMainColorDark, 0.2)\n\n const secondaryMainColorLight =\n (configuredPaletteLight?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n const secondaryMainColorDark =\n (configuredPaletteDark?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n\n const secondaryLightenColorLight = lighten(secondaryMainColorLight, 0.84)\n const secondaryDarkenColorLight = darken(secondaryMainColorLight, 0.2)\n const secondaryLightenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryLightenColorLight\n : lighten(secondaryMainColorDark, 0.84)\n const secondaryDarkenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryDarkenColorLight\n : darken(secondaryMainColorDark, 0.2)\n\n const theme = createMuiTheme({\n cssVariables: {\n cssVarPrefix: 'lifi',\n colorSchemeSelector: 'class',\n nativeColor: true,\n },\n colorSchemes: {\n light: {\n palette: {\n ...palette,\n ...paletteLight,\n ...widgetTheme.colorSchemes?.light?.palette,\n primary: {\n main: primaryMainColorLight,\n light: primaryLightenColorLight,\n dark: primaryDarkenColorLight,\n },\n secondary: {\n main: secondaryMainColorLight,\n light: secondaryLightenColorLight,\n dark: secondaryDarkenColorLight,\n },\n },\n },\n dark: {\n palette: {\n ...palette,\n ...paletteDark,\n ...widgetTheme.colorSchemes?.dark?.palette,\n primary: {\n main: primaryMainColorDark,\n light: primaryLightenColorDark,\n dark: primaryDarkenColorDark,\n },\n secondary: {\n main: secondaryMainColorDark,\n light: secondaryLightenColorDark,\n dark: secondaryDarkenColorDark,\n },\n },\n },\n },\n container: widgetTheme.container,\n routesContainer: widgetTheme.routesContainer,\n chainSidebarContainer: widgetTheme.chainSidebarContainer,\n header: widgetTheme.header,\n navigation: {\n edge: true,\n ...widgetTheme.navigation,\n },\n typography: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n shape: {\n ...shape,\n ...widgetTheme.shape,\n },\n breakpoints: {\n values: {\n xs: 360,\n sm: 416,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n },\n components: {\n MuiScopedCssBaseline: {\n styleOverrides: {\n root: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n },\n },\n MuiAppBar: {\n styleOverrides: {\n root: ({ ownerState }) => ({\n minHeight: 40,\n padding: 0,\n ...getStyleOverrides('MuiAppBar', 'root', widgetTheme, ownerState),\n }),\n },\n },\n MuiCard: {\n defaultProps: {\n variant: 'outlined',\n ...widgetTheme.components?.MuiCard?.defaultProps,\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => {\n const root = widgetTheme.components?.MuiCard?.styleOverrides\n ?.root as CSSObject\n const rootHover = root?.['&:hover']\n return {\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n borderRadius: theme.vars.shape.borderRadius,\n overflow: 'hidden',\n position: 'relative',\n boxSizing: 'border-box',\n transition: theme.transitions.create(\n ['background-color', 'filter'],\n {\n duration: theme.transitions.duration.enteringScreen,\n easing: theme.transitions.easing.easeOut,\n }\n ),\n ...(!!ownerState.onClick && {\n '&:hover': {\n cursor: 'pointer',\n },\n }),\n ...(!!ownerState.onClick &&\n (ownerState.variant === 'outlined' ||\n ownerState.variant === 'filled') && {\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, black)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, white)`,\n }),\n },\n }),\n ...(!!ownerState.onClick &&\n ownerState.variant === 'elevation' && {\n '&:hover': {\n cursor: 'pointer',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 8%, transparent))`,\n }),\n },\n }),\n ...(typeof root === 'object' && root),\n ...(!!ownerState.onClick &&\n !!rootHover && {\n '&:hover': {\n ...rootHover,\n ...theme.applyStyles('dark', {\n ...rootHover,\n }),\n },\n }),\n ...(!ownerState.onClick && {\n '&:hover': {},\n }),\n }\n },\n },\n variants: widgetTheme.components?.MuiCard?.variants ?? [\n {\n props: { variant: 'outlined' },\n style: ({ theme }) => ({\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: theme.vars.palette.grey[300],\n ...theme.applyStyles('dark', {\n borderColor: theme.vars.palette.grey[800],\n }),\n }),\n },\n {\n props: { variant: 'elevation' },\n style: ({ theme }) => ({\n border: 'none',\n boxShadow: 'none',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 4%, transparent))`,\n }),\n }),\n },\n {\n props: { variant: 'filled' },\n style: {\n border: 'none',\n },\n },\n ],\n },\n MuiInputCard: {\n ...widgetTheme.components?.MuiInputCard,\n },\n MuiButtonBase: {\n styleOverrides: {\n // This `css()` function invokes keyframes. `styled-components` only supports keyframes\n // in string templates. Do not convert these styles in JS object as it will break.\n root: css`\n &\n .${touchRippleClasses.ripple}.${touchRippleClasses.rippleVisible} {\n opacity: 0.1;\n animation-name: ${enterKeyframe};\n }\n `,\n },\n },\n MuiButton: {\n defaultProps: {\n disableElevation: true,\n ...widgetTheme.components?.MuiButton?.defaultProps,\n },\n styleOverrides: {\n root: ({ theme, ownerState }) => ({\n borderRadius: theme.vars.shape.borderRadiusSecondary,\n textTransform: 'none',\n fontSize: 16,\n fontWeight: 600,\n '&.Mui-disabled, &.Mui-disabled:hover': {\n color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 56%, transparent)`,\n cursor: 'not-allowed',\n pointerEvents: 'auto',\n },\n [`&.${buttonClasses.loading}.Mui-disabled`]: {\n backgroundColor: theme.vars.palette.primary.main,\n color: theme.palette.getContrastText(theme.palette.primary.main),\n cursor: 'auto',\n pointerEvents: 'auto',\n },\n [`.${buttonClasses.loadingIndicator}`]: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n [`&.${buttonClasses.root}.${buttonClasses.loading}`]: {\n color: 'transparent',\n },\n ...getStyleOverrides('MuiButton', 'root', widgetTheme, ownerState),\n }),\n text: ({ theme, ownerState }) => ({\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 8%, transparent)`,\n color: theme.vars.palette.primary.main,\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 12%, transparent)`,\n },\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 42%, transparent)`,\n color: theme.palette.getContrastText(\n alpha(theme.palette.primary.main, 0.08)\n ),\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 56%, transparent)`,\n },\n }),\n ...getStyleOverrides('MuiButton', 'text', widgetTheme, ownerState),\n }),\n contained: ({ ownerState }) => ({\n '&:hover': {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n ...getStyleOverrides(\n 'MuiButton',\n 'contained',\n widgetTheme,\n ownerState\n ),\n }),\n sizeMedium: ({ ownerState }) => ({\n padding: '10px 14px',\n ...getStyleOverrides(\n 'MuiButton',\n 'sizeMedium',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiIconButton: {\n ...widgetTheme.components?.MuiIconButton,\n styleOverrides: {\n ...widgetTheme.components?.MuiIconButton?.styleOverrides,\n root: ({ ownerState }) => ({\n color: 'inherit',\n '&:hover': {\n color: 'inherit',\n },\n ...getStyleOverrides(\n 'MuiIconButton',\n 'root',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n height: 40,\n width: 40,\n },\n img: {\n objectFit: 'contain',\n },\n },\n ...widgetTheme.components?.MuiAvatar,\n },\n MuiListItemText: {\n styleOverrides: {\n primary: ({ theme }) => ({\n fontWeight: 600,\n fontSize: '1.125rem',\n lineHeight: '1.2778',\n color: theme.vars.palette.text.primary,\n }),\n secondary: ({ theme }) => ({\n fontWeight: 500,\n fontSize: '0.75rem',\n color: theme.vars.palette.text.secondary,\n }),\n },\n },\n MuiTooltip: {\n defaultProps: {\n enterDelay: 400,\n disableInteractive: true,\n arrow: true,\n placement: 'top',\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n backgroundColor: 'rgb(0 0 0 / 64%)',\n backdropFilter: 'blur(3px)',\n fontSize: '0.75rem',\n padding: theme.spacing(1, 1.5),\n }),\n arrow: {\n color: 'rgb(0 0 0 / 64%)',\n },\n },\n },\n MuiMenu: {\n styleOverrides: {\n paper: ({ theme }) => ({\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n }),\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n backgroundImage: 'none',\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundImage: 'none',\n },\n },\n },\n MuiTabs: {\n ...widgetTheme.components?.MuiTabs,\n styleOverrides: {\n ...widgetTheme.components?.MuiTabs?.styleOverrides,\n root: ({ theme, ownerState }) => {\n const rootStyleOverrides = getStyleOverrides(\n 'MuiTabs',\n 'root',\n widgetTheme,\n ownerState\n )\n return {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent)`,\n }),\n borderRadius: theme.vars.shape.borderRadius,\n ...rootStyleOverrides,\n [`.${tabsClasses.indicator}`]: {\n backgroundColor: theme.vars.palette.background.paper,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.background} 56%, transparent)`,\n }),\n borderRadius:\n theme.shape.borderRadius > 0\n ? `calc(${theme.vars.shape.borderRadius} - 4px)`\n : theme.vars.shape.borderRadius,\n boxShadow: `0px 2px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...rootStyleOverrides?.[`.${tabsClasses.indicator}`],\n },\n }\n },\n },\n },\n MuiNavigationTabs: {\n ...widgetTheme.components?.MuiNavigationTabs,\n },\n MuiNavigationTab: {\n ...widgetTheme.components?.MuiNavigationTab,\n },\n MuiCheckbox: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n },\n ...widgetTheme.components?.MuiCheckbox,\n },\n },\n })\n\n return theme\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../src/themes/utils.ts"],"sourcesContent":["import type { WidgetTheme, WidgetThemeComponents } from '../types/widget.js'\n\ntype ComponentName = keyof WidgetThemeComponents\n\nexport const getStyleOverrides = (\n componentName: ComponentName,\n styleOverrideProp: string,\n theme: WidgetTheme,\n ownerState?: any\n): any => {\n const component = theme.components?.[componentName]\n const property = (component?.styleOverrides as any)?.[styleOverrideProp]\n\n if (typeof property === 'function') {\n return property({ theme, ownerState })\n }\n return property\n}\n"],"mappings":";AAIA,MAAa,qBACX,eACA,mBACA,OACA,eACQ;CAER,MAAM,aADY,MAAM,aAAa,iBACR,kBAAyB;AAEtD,KAAI,OAAO,aAAa,WACtB,QAAO,SAAS;EAAE;EAAO;EAAY,CAAC;AAExC,QAAO"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../src/themes/utils.ts"],"sourcesContent":["import type { WidgetTheme, WidgetThemeComponents } from '../types/widget.js'\n\ntype ComponentName = keyof WidgetThemeComponents\n\nexport const getStyleOverrides = (\n componentName: ComponentName,\n styleOverrideProp: string,\n theme: WidgetTheme,\n ownerState?: any\n): any => {\n const component = theme.components?.[componentName]\n const property = (component?.styleOverrides as any)?.[styleOverrideProp]\n\n if (typeof property === 'function') {\n return property({ theme, ownerState })\n }\n return property\n}\n"],"mappings":";AAIA,MAAa,qBACX,eACA,mBACA,OACA,eACQ;CAER,MAAM,aADY,MAAM,aAAa,iBACR,kBAAyB;CAEtD,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS;EAAE;EAAO;EAAY,CAAC;CAExC,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","names":[],"sources":["../../../src/types/events.ts"],"sourcesContent":["import type { ChainId, ChainType, ExecutionAction, Route } from '@lifi/sdk'\nimport type { DefaultValues } from '../stores/form/types.js'\nimport type { SettingsProps } from '../stores/settings/types.js'\nimport type { NavigationRouteType } from '../utils/navigationRoutes.js'\nimport type { TokenAmount } from './token.js'\n\nexport enum WidgetEvent {\n AvailableRoutes = 'availableRoutes',\n ChainPinned = 'chainPinned',\n ContactSupport = 'contactSupport',\n DestinationChainTokenSelected = 'destinationChainTokenSelected',\n FormFieldChanged = 'formFieldChanged',\n LowAddressActivityConfirmed = 'lowAddressActivityConfirmed',\n PageEntered = 'pageEntered',\n RouteExecutionCompleted = 'routeExecutionCompleted',\n RouteExecutionFailed = 'routeExecutionFailed',\n RouteExecutionStarted = 'routeExecutionStarted',\n RouteExecutionUpdated = 'routeExecutionUpdated',\n RouteHighValueLoss = 'routeHighValueLoss',\n RouteSelected = 'routeSelected',\n SendToWalletToggled = 'sendToWalletToggled',\n SettingUpdated = 'settingUpdated',\n SourceChainTokenSelected = 'sourceChainTokenSelected',\n TokenSearch = 'tokenSearch',\n WidgetExpanded = 'widgetExpanded',\n}\n\nexport type WidgetEvents = {\n availableRoutes: Route[]\n chainPinned: ChainPinned\n contactSupport: ContactSupport\n destinationChainTokenSelected: ChainTokenSelected\n formFieldChanged: FormFieldChanged\n lowAddressActivityConfirmed: LowAddressActivityConfirmed\n pageEntered: NavigationRouteType\n routeExecutionCompleted: Route\n routeExecutionFailed: RouteExecutionUpdate\n routeExecutionStarted: Route\n routeExecutionUpdated: RouteExecutionUpdate\n routeHighValueLoss: RouteHighValueLossUpdate\n routeSelected: RouteSelected\n sendToWalletToggled: boolean\n settingUpdated: SettingUpdated\n sourceChainTokenSelected: ChainTokenSelected\n tokenSearch: TokenSearch\n walletConnected: WalletConnected\n widgetExpanded: boolean\n}\n\nexport type ContactSupport = {\n supportId?: string\n}\n\nexport type RouteHighValueLossUpdate = {\n fromAmountUSD: number\n toAmountUSD: number\n gasCostUSD?: number\n feeCostUSD?: number\n valueLoss: number\n}\n\nexport type RouteExecutionUpdate = {\n route: Route\n action: ExecutionAction\n}\n\nexport type RouteSelected = {\n route: Route\n routes: Route[]\n}\n\nexport type TokenSearch = {\n value: string\n tokens: TokenAmount[]\n}\n\nexport type ChainTokenSelected = {\n chainId: ChainId\n tokenAddress: string\n}\n\nexport type WalletConnected = {\n address?: string\n chainId?: number\n chainType?: ChainType\n}\n\nexport type FormFieldChanged = {\n [K in keyof DefaultValues]: {\n fieldName: K\n newValue: DefaultValues[K]\n oldValue: DefaultValues[K]\n }\n}[keyof DefaultValues]\n\nexport type SettingUpdated<\n K extends keyof SettingsProps = keyof SettingsProps,\n> = {\n setting: K\n newValue: SettingsProps[K]\n oldValue: SettingsProps[K]\n newSettings: SettingsProps\n oldSettings: SettingsProps\n}\n\nexport type ChainPinned = {\n chainId: number\n pinned: boolean\n}\n\nexport type LowAddressActivityConfirmed = {\n address: string\n chainId: number\n}\n"],"mappings":";AAMA,IAAY,cAAL,yBAAA,aAAA;AACL,aAAA,qBAAA;AACA,aAAA,iBAAA;AACA,aAAA,oBAAA;AACA,aAAA,mCAAA;AACA,aAAA,sBAAA;AACA,aAAA,iCAAA;AACA,aAAA,iBAAA;AACA,aAAA,6BAAA;AACA,aAAA,0BAAA;AACA,aAAA,2BAAA;AACA,aAAA,2BAAA;AACA,aAAA,wBAAA;AACA,aAAA,mBAAA;AACA,aAAA,yBAAA;AACA,aAAA,oBAAA;AACA,aAAA,8BAAA;AACA,aAAA,iBAAA;AACA,aAAA,oBAAA;;KACD"}
1
+ {"version":3,"file":"events.js","names":[],"sources":["../../../src/types/events.ts"],"sourcesContent":["import type { ChainId, ChainType, ExecutionAction, Route } from '@lifi/sdk'\nimport type { DefaultValues } from '../stores/form/types.js'\nimport type { SettingsProps } from '../stores/settings/types.js'\nimport type { NavigationRouteType } from '../utils/navigationRoutes.js'\nimport type { TokenAmount } from './token.js'\n\nexport enum WidgetEvent {\n AvailableRoutes = 'availableRoutes',\n ChainPinned = 'chainPinned',\n ContactSupport = 'contactSupport',\n DestinationChainTokenSelected = 'destinationChainTokenSelected',\n FormFieldChanged = 'formFieldChanged',\n LowAddressActivityConfirmed = 'lowAddressActivityConfirmed',\n PageEntered = 'pageEntered',\n RouteExecutionCompleted = 'routeExecutionCompleted',\n RouteExecutionFailed = 'routeExecutionFailed',\n RouteExecutionStarted = 'routeExecutionStarted',\n RouteExecutionUpdated = 'routeExecutionUpdated',\n RouteHighValueLoss = 'routeHighValueLoss',\n RouteSelected = 'routeSelected',\n SendToWalletToggled = 'sendToWalletToggled',\n SettingUpdated = 'settingUpdated',\n SourceChainTokenSelected = 'sourceChainTokenSelected',\n TokenSearch = 'tokenSearch',\n WidgetExpanded = 'widgetExpanded',\n}\n\nexport type WidgetEvents = {\n availableRoutes: Route[]\n chainPinned: ChainPinned\n contactSupport: ContactSupport\n destinationChainTokenSelected: ChainTokenSelected\n formFieldChanged: FormFieldChanged\n lowAddressActivityConfirmed: LowAddressActivityConfirmed\n pageEntered: NavigationRouteType\n routeExecutionCompleted: Route\n routeExecutionFailed: RouteExecutionUpdate\n routeExecutionStarted: Route\n routeExecutionUpdated: RouteExecutionUpdate\n routeHighValueLoss: RouteHighValueLossUpdate\n routeSelected: RouteSelected\n sendToWalletToggled: boolean\n settingUpdated: SettingUpdated\n sourceChainTokenSelected: ChainTokenSelected\n tokenSearch: TokenSearch\n walletConnected: WalletConnected\n widgetExpanded: boolean\n}\n\nexport type ContactSupport = {\n supportId?: string\n}\n\nexport type RouteHighValueLossUpdate = {\n fromAmountUSD: number\n toAmountUSD: number\n gasCostUSD?: number\n feeCostUSD?: number\n valueLoss: number\n}\n\nexport type RouteExecutionUpdate = {\n route: Route\n action: ExecutionAction\n}\n\nexport type RouteSelected = {\n route: Route\n routes: Route[]\n}\n\nexport type TokenSearch = {\n value: string\n tokens: TokenAmount[]\n}\n\nexport type ChainTokenSelected = {\n chainId: ChainId\n tokenAddress: string\n}\n\nexport type WalletConnected = {\n address?: string\n chainId?: number\n chainType?: ChainType\n}\n\nexport type FormFieldChanged = {\n [K in keyof DefaultValues]: {\n fieldName: K\n newValue: DefaultValues[K]\n oldValue: DefaultValues[K]\n }\n}[keyof DefaultValues]\n\nexport type SettingUpdated<\n K extends keyof SettingsProps = keyof SettingsProps,\n> = {\n setting: K\n newValue: SettingsProps[K]\n oldValue: SettingsProps[K]\n newSettings: SettingsProps\n oldSettings: SettingsProps\n}\n\nexport type ChainPinned = {\n chainId: number\n pinned: boolean\n}\n\nexport type LowAddressActivityConfirmed = {\n address: string\n chainId: number\n}\n"],"mappings":";AAMA,IAAY,cAAL,yBAAA,aAAA;CACL,YAAA,qBAAA;CACA,YAAA,iBAAA;CACA,YAAA,oBAAA;CACA,YAAA,mCAAA;CACA,YAAA,sBAAA;CACA,YAAA,iCAAA;CACA,YAAA,iBAAA;CACA,YAAA,6BAAA;CACA,YAAA,0BAAA;CACA,YAAA,2BAAA;CACA,YAAA,2BAAA;CACA,YAAA,wBAAA;CACA,YAAA,mBAAA;CACA,YAAA,yBAAA;CACA,YAAA,oBAAA;CACA,YAAA,8BAAA;CACA,YAAA,iBAAA;CACA,YAAA,oBAAA;;KACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"widget.js","names":[],"sources":["../../../src/types/widget.ts"],"sourcesContent":["import type {\n BaseToken,\n ChainType,\n ContractCall,\n ExecutionOptions,\n ExtendedChain,\n Order,\n RouteExtended,\n RouteOptions,\n SDKConfig,\n StaticToken,\n Token,\n} from '@lifi/sdk'\nimport type { WalletMenuOpenArgs } from '@lifi/wallet-management'\nimport type { WidgetProviderProps } from '@lifi/widget-provider'\nimport type {\n Components,\n PaletteMode,\n PaletteOptions,\n Shape,\n SxProps,\n Theme,\n} from '@mui/material'\nimport type { TypographyVariantsOptions } from '@mui/material/styles'\nimport type {\n CSSProperties,\n FC,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from 'react'\nimport type {\n LanguageKey,\n LanguageResources,\n} from '../providers/I18nProvider/types.js'\nimport type { DefaultFieldValues } from '../stores/form/types.js'\n\nexport type WidgetVariant = 'compact' | 'wide' | 'drawer'\nexport type WidgetSubvariant = 'default' | 'split' | 'custom' | 'refuel'\nexport type SplitSubvariant = 'bridge' | 'swap'\nexport type SplitSubvariantOptions = {\n defaultTab: SplitSubvariant\n}\nexport type CustomSubvariant = 'checkout' | 'deposit'\nexport type WideSubvariant = {\n disableChainSidebar?: boolean\n}\nexport interface SubvariantOptions {\n /**\n * Configure split subvariant behavior:\n * - 'bridge' | 'swap': Single mode without tabs\n * - { defaultTab: 'bridge' | 'swap' }: Tabs mode with configurable default tab\n */\n split?: SplitSubvariant | SplitSubvariantOptions\n custom?: CustomSubvariant\n wide?: WideSubvariant\n}\n\nexport type Appearance = PaletteMode | 'system'\nexport interface NavigationProps {\n /**\n * If given, uses a negative margin to counteract the padding on sides for navigation elements like icon buttons.\n * @default true\n */\n edge?: boolean\n}\nexport type WidgetThemeComponents = Partial<\n Pick<\n Components<Theme>,\n | 'MuiAppBar'\n | 'MuiAvatar'\n | 'MuiButton'\n | 'MuiCard'\n | 'MuiIconButton'\n | 'MuiInputCard'\n | 'MuiNavigationTabs'\n | 'MuiNavigationTab'\n | 'MuiTabs'\n | 'MuiCheckbox'\n >\n>\n\nexport type WidgetTheme = {\n colorSchemes?: {\n light?: {\n palette: PaletteOptions\n }\n dark?: {\n palette: PaletteOptions\n }\n }\n shape?: Partial<Shape>\n typography?: TypographyVariantsOptions\n components?: WidgetThemeComponents\n container?: CSSProperties\n routesContainer?: CSSProperties\n chainSidebarContainer?: CSSProperties\n header?: CSSProperties\n navigation?: NavigationProps\n}\n\nexport enum DisabledUI {\n FromAmount = 'fromAmount',\n FromToken = 'fromToken',\n ToAddress = 'toAddress',\n ToToken = 'toToken',\n}\nexport type DisabledUIType = `${DisabledUI}`\n\nexport enum HiddenUI {\n Appearance = 'appearance',\n DrawerCloseButton = 'drawerCloseButton',\n History = 'history',\n Language = 'language',\n PoweredBy = 'poweredBy',\n ToAddress = 'toAddress',\n FromToken = 'fromToken',\n ToToken = 'toToken',\n WalletMenu = 'walletMenu',\n IntegratorStepDetails = 'integratorStepDetails',\n ReverseTokensButton = 'reverseTokensButton',\n RouteTokenDescription = 'routeTokenDescription',\n RouteCardPriceImpact = 'routeCardPriceImpact',\n ChainSelect = 'chainSelect',\n BridgesSettings = 'bridgesSettings',\n AddressBookConnectedWallets = 'addressBookConnectedWallets',\n LowAddressActivityConfirmation = 'lowAddressActivityConfirmation',\n GasRefuelMessage = 'gasRefuelMessage',\n SearchTokenInput = 'searchTokenInput',\n InsufficientGasMessage = 'insufficientGasMessage',\n ContactSupport = 'contactSupport',\n HideSmallBalances = 'hideSmallBalances',\n AllNetworks = 'allNetworks',\n}\nexport type HiddenUIType = `${HiddenUI}`\n\nexport enum RequiredUI {\n ToAddress = 'toAddress',\n AccountDeployedMessage = 'accountDeployedMessage',\n}\nexport type RequiredUIType = `${RequiredUI}`\n\nexport type DefaultUI = {\n transactionDetailsExpanded?: boolean\n navigationHeaderTitleNoWrap?: boolean\n}\n\nexport interface WidgetWalletConfig {\n walletEcosystemsOrder?: Record<string, ChainType[]>\n onConnect?(args?: WalletMenuOpenArgs): void\n /**\n * Determines whether the widget should provide partial wallet management functionality.\n *\n * In partial mode, external wallet management will be used for \"opt-out\" providers,\n * while the internal management is applied for any remaining providers that do not opt out.\n * This allows a flexible balance between the integrator's custom wallet menu and the widget's native wallet menu.\n * @default false\n */\n usePartialWalletManagement?: boolean\n /**\n * This option forces the widget to always use internal wallet management ignoring external wallet management contexts\n * @default false\n */\n forceInternalWalletManagement?: boolean\n}\n\nexport interface WidgetSDKConfig\n extends Omit<\n SDKConfig,\n | 'apiKey'\n | 'disableVersionCheck'\n | 'integrator'\n | 'providers'\n | 'routeOptions'\n | 'widgetVersion'\n > {\n routeOptions?: Omit<RouteOptions, 'bridges' | 'exchanges'>\n executionOptions?: Pick<ExecutionOptions, 'updateTransactionRequestHook'>\n}\n\nexport interface WidgetContractTool {\n name: string\n logoURI: string\n}\n\nexport interface CalculateFeeParams {\n fromChain: ExtendedChain\n toChain: ExtendedChain\n fromToken: Token\n toToken: Token\n fromAddress?: string\n toAddress?: string\n fromAmount?: bigint\n toAmount?: bigint\n slippage?: number\n}\n\nexport interface WidgetFeeConfig {\n name?: string\n logoURI?: string\n fee?: number\n /**\n * Whether to show the fee percentage in the fee details.\n * @default false\n */\n showFeePercentage?: boolean\n /**\n * Whether to show a tooltip with the fee details. Requires `name` or `feeTooltipComponent` to be set.\n * @default false\n */\n showFeeTooltip?: boolean\n /**\n * Custom tooltip component to show with the fee details.\n */\n feeTooltipComponent?: ReactNode\n /**\n * Function to calculate fees before fetching quotes.\n * If provided, this function will be used instead of the `fee` parameter.\n * Only one of `fee` or `calculateFee` should be used.\n *\n * @param params Object containing the fee calculation parameters\n * @returns A promise that resolves to the calculated fee as a number (e.g., 0.03 represents a 3% fee)\n */\n calculateFee?(params: CalculateFeeParams): Promise<number | undefined>\n /**\n * @internal\n */\n _vcComponent?: FC<{ route: RouteExtended }>\n}\n\nexport interface ToAddress {\n name?: string\n address: string\n chainType: ChainType\n logoURI?: string\n}\n\nexport interface AllowDeny<T> {\n allow?: T[]\n deny?: T[]\n}\n\nexport type AllowDenySetItem = string | number\nexport interface AllowDenySet {\n allow?: Set<AllowDenySetItem>\n deny?: Set<AllowDenySetItem>\n}\n\nexport type AllowDenySets = {\n from?: AllowDenySet\n to?: AllowDenySet\n} & AllowDenySet\n\nexport type AllowDenyItems<T> = {\n from?: AllowDeny<T>\n to?: AllowDeny<T>\n} & AllowDeny<T>\n\nexport type WidgetChains = {\n types?: AllowDeny<ChainType>\n} & AllowDenyItems<number>\n\nexport type WidgetTokens = {\n featured?: StaticToken[]\n include?: Token[]\n popular?: StaticToken[]\n} & AllowDenyItems<BaseToken>\n\nexport type WidgetLanguages = {\n default?: LanguageKey\n} & AllowDeny<LanguageKey>\n\nexport type PoweredByType = 'default' | 'jumper'\n\nexport interface RouteLabel {\n text: string\n sx?: SxProps<Theme>\n}\n\nexport interface RouteLabelRule {\n label: RouteLabel\n // Matching criteria\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n fromChainId?: number[]\n toChainId?: number[]\n fromTokenAddress?: string[]\n toTokenAddress?: string[]\n}\n\nexport type ExplorerUrl =\n | string\n | {\n url: string\n txPath?: string\n addressPath?: string\n }\n\nexport type WidgetProvider = (\n props: PropsWithChildren<WidgetProviderProps>\n) => ReactNode\n\nexport interface WidgetConfig {\n fromChain?: number\n toChain?: number\n fromToken?: string\n toToken?: string\n toAddress?: ToAddress\n toAddresses?: ToAddress[]\n fromAmount?: number | string\n minFromAmountUSD?: number\n toAmount?: number | string\n formUpdateKey?: string\n\n providers?: WidgetProvider[]\n\n contractCalls?: ContractCall[]\n contractComponent?: ReactNode\n contractSecondaryComponent?: ReactNode\n contractCompactComponent?: ReactNode\n contractTool?: WidgetContractTool\n integrator: string\n apiKey?: string\n fee?: number\n feeConfig?: WidgetFeeConfig\n referrer?: string\n\n routePriority?: Order\n slippage?: number\n\n variant?: WidgetVariant\n subvariant?: WidgetSubvariant\n subvariantOptions?: SubvariantOptions\n\n appearance?: Appearance\n theme?: WidgetTheme\n\n disabledUI?: DisabledUIType[]\n hiddenUI?: HiddenUIType[]\n requiredUI?: RequiredUIType[]\n defaultUI?: DefaultUI\n useRecommendedRoute?: boolean\n useRelayerRoutes?: boolean\n\n walletConfig?: WidgetWalletConfig\n sdkConfig?: WidgetSDKConfig\n\n buildUrl?: boolean\n keyPrefix?: string\n\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n chains?: WidgetChains\n tokens?: WidgetTokens\n languages?: WidgetLanguages\n languageResources?: LanguageResources\n explorerUrls?: Record<number, ExplorerUrl[]> &\n Partial<Record<'internal', ExplorerUrl[]>>\n poweredBy?: PoweredByType\n\n /**\n * Custom labels/badges to show on routes based on specified rules\n */\n routeLabels?: RouteLabelRule[]\n}\n\nexport interface FormFieldOptions {\n setUrlSearchParam: boolean\n}\n\nexport interface FieldValues\n extends Omit<DefaultFieldValues, 'fromAmount' | 'toAmount' | 'toAddress'> {\n fromAmount?: number | string\n toAmount?: number | string\n toAddress?: ToAddress | string\n}\n\nexport type FieldNames = keyof FieldValues\n\nexport type SetFieldValueFunction = <K extends FieldNames>(\n key: K,\n value: FieldValues[K],\n options?: FormFieldOptions\n) => void\n\nexport type FormState = {\n setFieldValue: SetFieldValueFunction\n}\n\nexport type FormRef = RefObject<FormState | null>\n\nexport interface FormRefProps {\n formRef?: FormRef\n}\n\nexport interface WidgetConfigProps extends FormRefProps {\n config: WidgetConfig\n}\n\nexport interface WidgetConfigPartialProps {\n config?: Partial<WidgetConfig>\n}\n\nexport type WidgetProps = WidgetDrawerProps &\n WidgetConfig &\n WidgetConfigPartialProps &\n FormRefProps\n\nexport interface WidgetDrawerProps extends WidgetConfigPartialProps {\n elementRef?: RefObject<HTMLDivElement>\n open?: boolean\n /**\n * Make sure to make the onClose callback stable (e.g. using useCallback) to avoid causing re-renders of the entire widget\n */\n onClose?(): void\n}\n\nexport enum ExpansionType {\n Routes = 'routes',\n FromChain = 'fromChain',\n ToChain = 'toChain',\n}\n"],"mappings":";AAqGA,IAAY,aAAL,yBAAA,YAAA;AACL,YAAA,gBAAA;AACA,YAAA,eAAA;AACA,YAAA,eAAA;AACA,YAAA,aAAA;;KACD;AAGD,IAAY,WAAL,yBAAA,UAAA;AACL,UAAA,gBAAA;AACA,UAAA,uBAAA;AACA,UAAA,aAAA;AACA,UAAA,cAAA;AACA,UAAA,eAAA;AACA,UAAA,eAAA;AACA,UAAA,eAAA;AACA,UAAA,aAAA;AACA,UAAA,gBAAA;AACA,UAAA,2BAAA;AACA,UAAA,yBAAA;AACA,UAAA,2BAAA;AACA,UAAA,0BAAA;AACA,UAAA,iBAAA;AACA,UAAA,qBAAA;AACA,UAAA,iCAAA;AACA,UAAA,oCAAA;AACA,UAAA,sBAAA;AACA,UAAA,sBAAA;AACA,UAAA,4BAAA;AACA,UAAA,oBAAA;AACA,UAAA,uBAAA;AACA,UAAA,iBAAA;;KACD;AAGD,IAAY,aAAL,yBAAA,YAAA;AACL,YAAA,eAAA;AACA,YAAA,4BAAA;;KACD;AAsRD,IAAY,gBAAL,yBAAA,eAAA;AACL,eAAA,YAAA;AACA,eAAA,eAAA;AACA,eAAA,aAAA;;KACD"}
1
+ {"version":3,"file":"widget.js","names":[],"sources":["../../../src/types/widget.ts"],"sourcesContent":["import type {\n BaseToken,\n ChainType,\n ContractCall,\n ExecutionOptions,\n ExtendedChain,\n Order,\n RouteExtended,\n RouteOptions,\n SDKConfig,\n StaticToken,\n Token,\n} from '@lifi/sdk'\nimport type { WalletMenuOpenArgs } from '@lifi/wallet-management'\nimport type { WidgetProviderProps } from '@lifi/widget-provider'\nimport type {\n Components,\n PaletteMode,\n PaletteOptions,\n Shape,\n SxProps,\n Theme,\n} from '@mui/material'\nimport type { TypographyVariantsOptions } from '@mui/material/styles'\nimport type {\n CSSProperties,\n FC,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from 'react'\nimport type {\n LanguageKey,\n LanguageResources,\n} from '../providers/I18nProvider/types.js'\nimport type { DefaultFieldValues } from '../stores/form/types.js'\n\nexport type WidgetVariant = 'compact' | 'wide' | 'drawer'\nexport type WidgetSubvariant = 'default' | 'split' | 'custom' | 'refuel'\nexport type SplitSubvariant = 'bridge' | 'swap'\nexport type SplitSubvariantOptions = {\n defaultTab: SplitSubvariant\n}\nexport type CustomSubvariant = 'checkout' | 'deposit'\nexport type WideSubvariant = {\n disableChainSidebar?: boolean\n}\nexport interface SubvariantOptions {\n /**\n * Configure split subvariant behavior:\n * - 'bridge' | 'swap': Single mode without tabs\n * - { defaultTab: 'bridge' | 'swap' }: Tabs mode with configurable default tab\n */\n split?: SplitSubvariant | SplitSubvariantOptions\n custom?: CustomSubvariant\n wide?: WideSubvariant\n}\n\nexport type Appearance = PaletteMode | 'system'\nexport interface NavigationProps {\n /**\n * If given, uses a negative margin to counteract the padding on sides for navigation elements like icon buttons.\n * @default true\n */\n edge?: boolean\n}\nexport type WidgetThemeComponents = Partial<\n Pick<\n Components<Theme>,\n | 'MuiAppBar'\n | 'MuiAvatar'\n | 'MuiButton'\n | 'MuiCard'\n | 'MuiIconButton'\n | 'MuiInputCard'\n | 'MuiNavigationTabs'\n | 'MuiNavigationTab'\n | 'MuiTabs'\n | 'MuiCheckbox'\n >\n>\n\nexport type WidgetTheme = {\n colorSchemes?: {\n light?: {\n palette: PaletteOptions\n }\n dark?: {\n palette: PaletteOptions\n }\n }\n shape?: Partial<Shape>\n typography?: TypographyVariantsOptions\n components?: WidgetThemeComponents\n container?: CSSProperties\n routesContainer?: CSSProperties\n chainSidebarContainer?: CSSProperties\n header?: CSSProperties\n navigation?: NavigationProps\n}\n\nexport enum DisabledUI {\n FromAmount = 'fromAmount',\n FromToken = 'fromToken',\n ToAddress = 'toAddress',\n ToToken = 'toToken',\n}\nexport type DisabledUIType = `${DisabledUI}`\n\nexport enum HiddenUI {\n Appearance = 'appearance',\n DrawerCloseButton = 'drawerCloseButton',\n History = 'history',\n Language = 'language',\n PoweredBy = 'poweredBy',\n ToAddress = 'toAddress',\n FromToken = 'fromToken',\n ToToken = 'toToken',\n WalletMenu = 'walletMenu',\n IntegratorStepDetails = 'integratorStepDetails',\n ReverseTokensButton = 'reverseTokensButton',\n RouteTokenDescription = 'routeTokenDescription',\n RouteCardPriceImpact = 'routeCardPriceImpact',\n ChainSelect = 'chainSelect',\n BridgesSettings = 'bridgesSettings',\n AddressBookConnectedWallets = 'addressBookConnectedWallets',\n LowAddressActivityConfirmation = 'lowAddressActivityConfirmation',\n GasRefuelMessage = 'gasRefuelMessage',\n SearchTokenInput = 'searchTokenInput',\n InsufficientGasMessage = 'insufficientGasMessage',\n ContactSupport = 'contactSupport',\n HideSmallBalances = 'hideSmallBalances',\n AllNetworks = 'allNetworks',\n}\nexport type HiddenUIType = `${HiddenUI}`\n\nexport enum RequiredUI {\n ToAddress = 'toAddress',\n AccountDeployedMessage = 'accountDeployedMessage',\n}\nexport type RequiredUIType = `${RequiredUI}`\n\nexport type DefaultUI = {\n transactionDetailsExpanded?: boolean\n navigationHeaderTitleNoWrap?: boolean\n}\n\nexport interface WidgetWalletConfig {\n walletEcosystemsOrder?: Record<string, ChainType[]>\n onConnect?(args?: WalletMenuOpenArgs): void\n /**\n * Determines whether the widget should provide partial wallet management functionality.\n *\n * In partial mode, external wallet management will be used for \"opt-out\" providers,\n * while the internal management is applied for any remaining providers that do not opt out.\n * This allows a flexible balance between the integrator's custom wallet menu and the widget's native wallet menu.\n * @default false\n */\n usePartialWalletManagement?: boolean\n /**\n * This option forces the widget to always use internal wallet management ignoring external wallet management contexts\n * @default false\n */\n forceInternalWalletManagement?: boolean\n}\n\nexport interface WidgetSDKConfig\n extends Omit<\n SDKConfig,\n | 'apiKey'\n | 'disableVersionCheck'\n | 'integrator'\n | 'providers'\n | 'routeOptions'\n | 'widgetVersion'\n > {\n routeOptions?: Omit<RouteOptions, 'bridges' | 'exchanges'>\n executionOptions?: Pick<ExecutionOptions, 'updateTransactionRequestHook'>\n}\n\nexport interface WidgetContractTool {\n name: string\n logoURI: string\n}\n\nexport interface CalculateFeeParams {\n fromChain: ExtendedChain\n toChain: ExtendedChain\n fromToken: Token\n toToken: Token\n fromAddress?: string\n toAddress?: string\n fromAmount?: bigint\n toAmount?: bigint\n slippage?: number\n}\n\nexport interface WidgetFeeConfig {\n name?: string\n logoURI?: string\n fee?: number\n /**\n * Whether to show the fee percentage in the fee details.\n * @default false\n */\n showFeePercentage?: boolean\n /**\n * Whether to show a tooltip with the fee details. Requires `name` or `feeTooltipComponent` to be set.\n * @default false\n */\n showFeeTooltip?: boolean\n /**\n * Custom tooltip component to show with the fee details.\n */\n feeTooltipComponent?: ReactNode\n /**\n * Function to calculate fees before fetching quotes.\n * If provided, this function will be used instead of the `fee` parameter.\n * Only one of `fee` or `calculateFee` should be used.\n *\n * @param params Object containing the fee calculation parameters\n * @returns A promise that resolves to the calculated fee as a number (e.g., 0.03 represents a 3% fee)\n */\n calculateFee?(params: CalculateFeeParams): Promise<number | undefined>\n /**\n * @internal\n */\n _vcComponent?: FC<{ route: RouteExtended }>\n}\n\nexport interface ToAddress {\n name?: string\n address: string\n chainType: ChainType\n logoURI?: string\n}\n\nexport interface AllowDeny<T> {\n allow?: T[]\n deny?: T[]\n}\n\nexport type AllowDenySetItem = string | number\nexport interface AllowDenySet {\n allow?: Set<AllowDenySetItem>\n deny?: Set<AllowDenySetItem>\n}\n\nexport type AllowDenySets = {\n from?: AllowDenySet\n to?: AllowDenySet\n} & AllowDenySet\n\nexport type AllowDenyItems<T> = {\n from?: AllowDeny<T>\n to?: AllowDeny<T>\n} & AllowDeny<T>\n\nexport type WidgetChains = {\n types?: AllowDeny<ChainType>\n} & AllowDenyItems<number>\n\nexport type WidgetTokens = {\n featured?: StaticToken[]\n include?: Token[]\n popular?: StaticToken[]\n} & AllowDenyItems<BaseToken>\n\nexport type WidgetLanguages = {\n default?: LanguageKey\n} & AllowDeny<LanguageKey>\n\nexport type PoweredByType = 'default' | 'jumper'\n\nexport interface RouteLabel {\n text: string\n sx?: SxProps<Theme>\n}\n\nexport interface RouteLabelRule {\n label: RouteLabel\n // Matching criteria\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n fromChainId?: number[]\n toChainId?: number[]\n fromTokenAddress?: string[]\n toTokenAddress?: string[]\n}\n\nexport type ExplorerUrl =\n | string\n | {\n url: string\n txPath?: string\n addressPath?: string\n }\n\nexport type WidgetProvider = (\n props: PropsWithChildren<WidgetProviderProps>\n) => ReactNode\n\nexport interface WidgetConfig {\n fromChain?: number\n toChain?: number\n fromToken?: string\n toToken?: string\n toAddress?: ToAddress\n toAddresses?: ToAddress[]\n fromAmount?: number | string\n minFromAmountUSD?: number\n toAmount?: number | string\n formUpdateKey?: string\n\n providers?: WidgetProvider[]\n\n contractCalls?: ContractCall[]\n contractComponent?: ReactNode\n contractSecondaryComponent?: ReactNode\n contractCompactComponent?: ReactNode\n contractTool?: WidgetContractTool\n integrator: string\n apiKey?: string\n fee?: number\n feeConfig?: WidgetFeeConfig\n referrer?: string\n\n routePriority?: Order\n slippage?: number\n\n variant?: WidgetVariant\n subvariant?: WidgetSubvariant\n subvariantOptions?: SubvariantOptions\n\n appearance?: Appearance\n theme?: WidgetTheme\n\n disabledUI?: DisabledUIType[]\n hiddenUI?: HiddenUIType[]\n requiredUI?: RequiredUIType[]\n defaultUI?: DefaultUI\n useRecommendedRoute?: boolean\n useRelayerRoutes?: boolean\n\n walletConfig?: WidgetWalletConfig\n sdkConfig?: WidgetSDKConfig\n\n buildUrl?: boolean\n keyPrefix?: string\n\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n chains?: WidgetChains\n tokens?: WidgetTokens\n languages?: WidgetLanguages\n languageResources?: LanguageResources\n explorerUrls?: Record<number, ExplorerUrl[]> &\n Partial<Record<'internal', ExplorerUrl[]>>\n poweredBy?: PoweredByType\n\n /**\n * Custom labels/badges to show on routes based on specified rules\n */\n routeLabels?: RouteLabelRule[]\n}\n\nexport interface FormFieldOptions {\n setUrlSearchParam: boolean\n}\n\nexport interface FieldValues\n extends Omit<DefaultFieldValues, 'fromAmount' | 'toAmount' | 'toAddress'> {\n fromAmount?: number | string\n toAmount?: number | string\n toAddress?: ToAddress | string\n}\n\nexport type FieldNames = keyof FieldValues\n\nexport type SetFieldValueFunction = <K extends FieldNames>(\n key: K,\n value: FieldValues[K],\n options?: FormFieldOptions\n) => void\n\nexport type FormState = {\n setFieldValue: SetFieldValueFunction\n}\n\nexport type FormRef = RefObject<FormState | null>\n\nexport interface FormRefProps {\n formRef?: FormRef\n}\n\nexport interface WidgetConfigProps extends FormRefProps {\n config: WidgetConfig\n}\n\nexport interface WidgetConfigPartialProps {\n config?: Partial<WidgetConfig>\n}\n\nexport type WidgetProps = WidgetDrawerProps &\n WidgetConfig &\n WidgetConfigPartialProps &\n FormRefProps\n\nexport interface WidgetDrawerProps extends WidgetConfigPartialProps {\n elementRef?: RefObject<HTMLDivElement>\n open?: boolean\n /**\n * Make sure to make the onClose callback stable (e.g. using useCallback) to avoid causing re-renders of the entire widget\n */\n onClose?(): void\n}\n\nexport enum ExpansionType {\n Routes = 'routes',\n FromChain = 'fromChain',\n ToChain = 'toChain',\n}\n"],"mappings":";AAqGA,IAAY,aAAL,yBAAA,YAAA;CACL,WAAA,gBAAA;CACA,WAAA,eAAA;CACA,WAAA,eAAA;CACA,WAAA,aAAA;;KACD;AAGD,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,gBAAA;CACA,SAAA,uBAAA;CACA,SAAA,aAAA;CACA,SAAA,cAAA;CACA,SAAA,eAAA;CACA,SAAA,eAAA;CACA,SAAA,eAAA;CACA,SAAA,aAAA;CACA,SAAA,gBAAA;CACA,SAAA,2BAAA;CACA,SAAA,yBAAA;CACA,SAAA,2BAAA;CACA,SAAA,0BAAA;CACA,SAAA,iBAAA;CACA,SAAA,qBAAA;CACA,SAAA,iCAAA;CACA,SAAA,oCAAA;CACA,SAAA,sBAAA;CACA,SAAA,sBAAA;CACA,SAAA,4BAAA;CACA,SAAA,oBAAA;CACA,SAAA,uBAAA;CACA,SAAA,iBAAA;;KACD;AAGD,IAAY,aAAL,yBAAA,YAAA;CACL,WAAA,eAAA;CACA,WAAA,4BAAA;;KACD;AAsRD,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,YAAA;CACA,cAAA,eAAA;CACA,cAAA,aAAA;;KACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"compactNumberFormatter.js","names":[],"sources":["../../../src/utils/compactNumberFormatter.ts"],"sourcesContent":["/**\n * Converts a non-negative integer to its subscript representation using Unicode subscript characters.\n * @param n - The number to convert to subscript\n * @returns A string where each digit is converted to its subscript equivalent\n * @example\n * toSubscript(5) => '₅'\n * toSubscript(10) => '₁₀'\n */\nfunction toSubscript(n: number): string {\n return n\n .toString()\n .split('')\n .map((digit) => String.fromCharCode(8320 + Number(digit)))\n .join('')\n}\n\n/**\n * Formats numbers with special handling for small decimal values, converting runs of leading zeros\n * into a more compact subscript notation.\n *\n * @param value - The numeric value to format (expected to be a string representing a BigInt)\n * @param lng - The locale string for number formatting\n * @param options - Formatting options including decimals and Intl.NumberFormat options\n * @returns A formatted string with subscript notation for leading zeros\n */\nexport const compactNumberFormatter = (\n lng: string | undefined,\n options: any\n): ((value: any) => string) => {\n const formatter = new Intl.NumberFormat(lng, {\n notation: 'standard',\n roundingPriority: 'morePrecision',\n maximumSignificantDigits: 20,\n maximumFractionDigits: 20,\n ...options,\n })\n return (value: any) => {\n if (!Number.parseFloat(value) || Number.isNaN(Number(value))) {\n return '0'\n }\n\n const parts = formatter.formatToParts(value as Intl.StringNumericLiteral)\n let integerPart = ''\n let fractionPart = ''\n let decimalSeparator = ''\n let minusSign = ''\n\n for (const p of parts) {\n switch (p.type) {\n case 'integer':\n case 'group':\n integerPart += p.value\n break\n case 'fraction':\n fractionPart += p.value\n break\n case 'decimal':\n decimalSeparator = p.value\n break\n case 'minusSign':\n minusSign = p.value\n break\n }\n }\n\n // For numbers with no decimal part, return early\n if (!fractionPart) {\n return `${minusSign}${integerPart}`\n }\n\n // Count consecutive leading zeros in the fraction part\n const match = fractionPart.match(/^0+/)\n const leadingZerosCount = match ? match[0].length : 0\n\n // For numbers with few leading zeros (≤ 3), format normally\n // but limit the total length and trim trailing zeros\n if (leadingZerosCount <= 3) {\n fractionPart = fractionPart.slice(0, 6).replace(/0+$/, '')\n return `${minusSign}${integerPart}${decimalSeparator}${fractionPart}`\n }\n\n // For numbers with many leading zeros (> 3), use subscript notation\n // Format: \"0.0₍number_of_zeros₎significant_digits\"\n const zerosSubscript = toSubscript(leadingZerosCount)\n const remainder = fractionPart\n .slice(leadingZerosCount, leadingZerosCount + 4)\n .replace(/0+$/, '')\n\n return `${minusSign}${integerPart}${decimalSeparator}0${zerosSubscript}${remainder}`\n }\n}\n"],"mappings":";;;;;;;;;AAQA,SAAS,YAAY,GAAmB;AACtC,QAAO,EACJ,UAAU,CACV,MAAM,GAAG,CACT,KAAK,UAAU,OAAO,aAAa,OAAO,OAAO,MAAM,CAAC,CAAC,CACzD,KAAK,GAAG;;;;;;;;;;;AAYb,MAAa,0BACX,KACA,YAC6B;CAC7B,MAAM,YAAY,IAAI,KAAK,aAAa,KAAK;EAC3C,UAAU;EACV,kBAAkB;EAClB,0BAA0B;EAC1B,uBAAuB;EACvB,GAAG;EACJ,CAAC;AACF,SAAQ,UAAe;AACrB,MAAI,CAAC,OAAO,WAAW,MAAM,IAAI,OAAO,MAAM,OAAO,MAAM,CAAC,CAC1D,QAAO;EAGT,MAAM,QAAQ,UAAU,cAAc,MAAmC;EACzE,IAAI,cAAc;EAClB,IAAI,eAAe;EACnB,IAAI,mBAAmB;EACvB,IAAI,YAAY;AAEhB,OAAK,MAAM,KAAK,MACd,SAAQ,EAAE,MAAV;GACE,KAAK;GACL,KAAK;AACH,mBAAe,EAAE;AACjB;GACF,KAAK;AACH,oBAAgB,EAAE;AAClB;GACF,KAAK;AACH,uBAAmB,EAAE;AACrB;GACF,KAAK;AACH,gBAAY,EAAE;AACd;;AAKN,MAAI,CAAC,aACH,QAAO,GAAG,YAAY;EAIxB,MAAM,QAAQ,aAAa,MAAM,MAAM;EACvC,MAAM,oBAAoB,QAAQ,MAAM,GAAG,SAAS;AAIpD,MAAI,qBAAqB,GAAG;AAC1B,kBAAe,aAAa,MAAM,GAAG,EAAE,CAAC,QAAQ,OAAO,GAAG;AAC1D,UAAO,GAAG,YAAY,cAAc,mBAAmB;;EAKzD,MAAM,iBAAiB,YAAY,kBAAkB;EACrD,MAAM,YAAY,aACf,MAAM,mBAAmB,oBAAoB,EAAE,CAC/C,QAAQ,OAAO,GAAG;AAErB,SAAO,GAAG,YAAY,cAAc,iBAAiB,GAAG,iBAAiB"}
1
+ {"version":3,"file":"compactNumberFormatter.js","names":[],"sources":["../../../src/utils/compactNumberFormatter.ts"],"sourcesContent":["/**\n * Converts a non-negative integer to its subscript representation using Unicode subscript characters.\n * @param n - The number to convert to subscript\n * @returns A string where each digit is converted to its subscript equivalent\n * @example\n * toSubscript(5) => '₅'\n * toSubscript(10) => '₁₀'\n */\nfunction toSubscript(n: number): string {\n return n\n .toString()\n .split('')\n .map((digit) => String.fromCharCode(8320 + Number(digit)))\n .join('')\n}\n\n/**\n * Formats numbers with special handling for small decimal values, converting runs of leading zeros\n * into a more compact subscript notation.\n *\n * @param value - The numeric value to format (expected to be a string representing a BigInt)\n * @param lng - The locale string for number formatting\n * @param options - Formatting options including decimals and Intl.NumberFormat options\n * @returns A formatted string with subscript notation for leading zeros\n */\nexport const compactNumberFormatter = (\n lng: string | undefined,\n options: any\n): ((value: any) => string) => {\n const formatter = new Intl.NumberFormat(lng, {\n notation: 'standard',\n roundingPriority: 'morePrecision',\n maximumSignificantDigits: 20,\n maximumFractionDigits: 20,\n ...options,\n })\n return (value: any) => {\n if (!Number.parseFloat(value) || Number.isNaN(Number(value))) {\n return '0'\n }\n\n const parts = formatter.formatToParts(value as Intl.StringNumericLiteral)\n let integerPart = ''\n let fractionPart = ''\n let decimalSeparator = ''\n let minusSign = ''\n\n for (const p of parts) {\n switch (p.type) {\n case 'integer':\n case 'group':\n integerPart += p.value\n break\n case 'fraction':\n fractionPart += p.value\n break\n case 'decimal':\n decimalSeparator = p.value\n break\n case 'minusSign':\n minusSign = p.value\n break\n }\n }\n\n // For numbers with no decimal part, return early\n if (!fractionPart) {\n return `${minusSign}${integerPart}`\n }\n\n // Count consecutive leading zeros in the fraction part\n const match = fractionPart.match(/^0+/)\n const leadingZerosCount = match ? match[0].length : 0\n\n // For numbers with few leading zeros (≤ 3), format normally\n // but limit the total length and trim trailing zeros\n if (leadingZerosCount <= 3) {\n fractionPart = fractionPart.slice(0, 6).replace(/0+$/, '')\n return `${minusSign}${integerPart}${decimalSeparator}${fractionPart}`\n }\n\n // For numbers with many leading zeros (> 3), use subscript notation\n // Format: \"0.0₍number_of_zeros₎significant_digits\"\n const zerosSubscript = toSubscript(leadingZerosCount)\n const remainder = fractionPart\n .slice(leadingZerosCount, leadingZerosCount + 4)\n .replace(/0+$/, '')\n\n return `${minusSign}${integerPart}${decimalSeparator}0${zerosSubscript}${remainder}`\n }\n}\n"],"mappings":";;;;;;;;;AAQA,SAAS,YAAY,GAAmB;CACtC,OAAO,EACJ,UAAU,CACV,MAAM,GAAG,CACT,KAAK,UAAU,OAAO,aAAa,OAAO,OAAO,MAAM,CAAC,CAAC,CACzD,KAAK,GAAG;;;;;;;;;;;AAYb,MAAa,0BACX,KACA,YAC6B;CAC7B,MAAM,YAAY,IAAI,KAAK,aAAa,KAAK;EAC3C,UAAU;EACV,kBAAkB;EAClB,0BAA0B;EAC1B,uBAAuB;EACvB,GAAG;EACJ,CAAC;CACF,QAAQ,UAAe;EACrB,IAAI,CAAC,OAAO,WAAW,MAAM,IAAI,OAAO,MAAM,OAAO,MAAM,CAAC,EAC1D,OAAO;EAGT,MAAM,QAAQ,UAAU,cAAc,MAAmC;EACzE,IAAI,cAAc;EAClB,IAAI,eAAe;EACnB,IAAI,mBAAmB;EACvB,IAAI,YAAY;EAEhB,KAAK,MAAM,KAAK,OACd,QAAQ,EAAE,MAAV;GACE,KAAK;GACL,KAAK;IACH,eAAe,EAAE;IACjB;GACF,KAAK;IACH,gBAAgB,EAAE;IAClB;GACF,KAAK;IACH,mBAAmB,EAAE;IACrB;GACF,KAAK;IACH,YAAY,EAAE;IACd;;EAKN,IAAI,CAAC,cACH,OAAO,GAAG,YAAY;EAIxB,MAAM,QAAQ,aAAa,MAAM,MAAM;EACvC,MAAM,oBAAoB,QAAQ,MAAM,GAAG,SAAS;EAIpD,IAAI,qBAAqB,GAAG;GAC1B,eAAe,aAAa,MAAM,GAAG,EAAE,CAAC,QAAQ,OAAO,GAAG;GAC1D,OAAO,GAAG,YAAY,cAAc,mBAAmB;;EAKzD,MAAM,iBAAiB,YAAY,kBAAkB;EACrD,MAAM,YAAY,aACf,MAAM,mBAAmB,oBAAoB,EAAE,CAC/C,QAAQ,OAAO,GAAG;EAErB,OAAO,GAAG,YAAY,cAAc,iBAAiB,GAAG,iBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"converters.js","names":[],"sources":["../../../src/utils/converters.ts"],"sourcesContent":["import type {\n ExecutionAction,\n ExecutionActionStatus,\n ExtendedTransactionInfo,\n FeeCost,\n FullStatusData,\n Substatus,\n TokenAmount,\n ToolsResponse,\n} from '@lifi/sdk'\nimport type { RouteExecution } from '../stores/routes/types.js'\nimport { formatTokenPrice } from './format.js'\n\nconst buildActionsFromTxHistory = (tx: FullStatusData): ExecutionAction[] => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return []\n }\n\n const actionStatus: ExecutionActionStatus =\n tx.status === 'DONE' ? 'DONE' : 'FAILED'\n const substatus: Substatus =\n actionStatus === 'FAILED' ? 'UNKNOWN_ERROR' : 'COMPLETED'\n\n if (sending.chainId === receiving.chainId) {\n return [\n {\n type: 'SWAP', // operations on same chain will be swaps\n message: '',\n status: actionStatus,\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n substatus,\n substatusMessage: '',\n },\n ]\n }\n\n const actions: ExecutionAction[] = [\n {\n type: 'CROSS_CHAIN', // first step of bridging, ignoring the approvals\n message: '',\n status: actionStatus, // can be FAILED\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n },\n {\n type: 'RECEIVING_CHAIN', // final step of bridging, post swaps\n message: '',\n status: actionStatus,\n substatus,\n substatusMessage: '',\n chainId: receiving.chainId,\n txHash: receiving.txHash,\n txLink: receiving.txLink,\n },\n ]\n\n return actions\n}\n\nexport const buildRouteFromTxHistory = (\n tx: FullStatusData,\n tools?: ToolsResponse\n): RouteExecution | undefined => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return\n }\n\n let usedTool = tx.sending.includedSteps?.find(\n (step) => step.toolDetails.key === tx.tool\n )?.toolDetails\n\n if (!usedTool) {\n const selectedBridge = tools?.bridges.find(\n (bridge) => bridge.key === tx.tool\n )\n\n const selectedExchange = tools?.exchanges.find(\n (exchange) => exchange.key === tx.tool\n )\n usedTool = {\n key: tx.tool,\n name: selectedBridge?.name ?? selectedExchange?.name ?? tx.tool,\n logoURI: selectedBridge?.logoURI ?? selectedExchange?.logoURI ?? '',\n }\n }\n\n const fromToken: TokenAmount = {\n ...sending.token,\n amount: BigInt(sending.amount ?? 0),\n }\n\n const toToken: TokenAmount = {\n ...receiving.token,\n amount: BigInt(receiving.amount ?? 0),\n }\n\n const sendingValue = sending.value ? BigInt(sending.value) : 0n\n const sendingFeeAmount =\n sending.gasToken.address === sending.token.address && sending.amount\n ? sendingValue - BigInt(sending.amount)\n : sendingValue\n const sendingFeeAmountUsd =\n sending.gasToken.priceUSD && sendingFeeAmount\n ? formatTokenPrice(\n sendingFeeAmount,\n sending.gasToken.priceUSD,\n sending.gasToken.decimals\n )\n : 0\n\n const feeCosts: FeeCost[] | undefined = sendingFeeAmount\n ? [\n {\n amount: sendingFeeAmount.toString(),\n amountUSD: sendingFeeAmountUsd.toFixed(2),\n token: sending.gasToken,\n included: false,\n // Not used\n description: '',\n name: '',\n percentage: '',\n },\n ]\n : undefined\n\n const routeExecution: RouteExecution = {\n status: 1,\n route: {\n id: (tx as FullStatusData).transactionId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n toChainId: receiving.chainId,\n fromToken,\n toToken,\n gasCostUSD: sending.gasAmountUSD,\n steps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: 'lifi',\n tool: tx.tool,\n toolDetails: usedTool,\n action: {\n fromToken: sending.token,\n fromAmount: sending.amount ?? '',\n fromChainId: sending.chainId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toToken: receiving.token,\n toChainId: receiving.chainId,\n toAddress: (tx as FullStatusData).toAddress,\n slippage: 0,\n },\n estimate: {\n tool: tx.tool,\n approvalAddress: '',\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n executionDuration: 0,\n },\n includedSteps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: sending.chainId === receiving.chainId ? 'swap' : 'cross',\n action: {\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromToken: sending.token,\n toChainId: receiving.chainId,\n toToken: receiving.token,\n slippage: 0,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n },\n estimate: {\n tool: tx.tool,\n fromAmount: sending.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n approvalAddress: '',\n executionDuration: 0,\n },\n tool: tx.tool,\n toolDetails: usedTool,\n },\n ],\n integrator: tx.metadata?.integrator ?? '',\n execution: {\n status: 'DONE', // can be FAILED\n startedAt: sending.timestamp\n ? sending.timestamp * 1000\n : Date.now(),\n actions: buildActionsFromTxHistory(tx),\n fromAmount: sending.amount,\n toAmount: receiving.amount,\n toToken: receiving.token,\n internalTxLink: tx.lifiExplorerLink,\n externalTxLink: tx.bridgeExplorerLink,\n gasCosts: [\n {\n amount: sending.gasAmount,\n amountUSD: sending.gasAmountUSD,\n token: sending.gasToken,\n estimate: '0',\n limit: '0',\n price: '0',\n type: 'SEND',\n },\n ],\n feeCosts,\n },\n },\n ],\n insurance: {\n state: 'NOT_INSURABLE',\n feeAmountUsd: '0',\n },\n },\n }\n\n return routeExecution\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"converters.js","names":[],"sources":["../../../src/utils/converters.ts"],"sourcesContent":["import type {\n ExecutionAction,\n ExecutionActionStatus,\n ExtendedTransactionInfo,\n FeeCost,\n FullStatusData,\n Substatus,\n TokenAmount,\n ToolsResponse,\n} from '@lifi/sdk'\nimport type { RouteExecution } from '../stores/routes/types.js'\nimport { formatTokenPrice } from './format.js'\n\nconst buildActionsFromTxHistory = (tx: FullStatusData): ExecutionAction[] => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return []\n }\n\n const actionStatus: ExecutionActionStatus =\n tx.status === 'DONE' ? 'DONE' : 'FAILED'\n const substatus: Substatus =\n actionStatus === 'FAILED' ? 'UNKNOWN_ERROR' : 'COMPLETED'\n\n if (sending.chainId === receiving.chainId) {\n return [\n {\n type: 'SWAP', // operations on same chain will be swaps\n message: '',\n status: actionStatus,\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n substatus,\n substatusMessage: '',\n },\n ]\n }\n\n const actions: ExecutionAction[] = [\n {\n type: 'CROSS_CHAIN', // first step of bridging, ignoring the approvals\n message: '',\n status: actionStatus, // can be FAILED\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n },\n {\n type: 'RECEIVING_CHAIN', // final step of bridging, post swaps\n message: '',\n status: actionStatus,\n substatus,\n substatusMessage: '',\n chainId: receiving.chainId,\n txHash: receiving.txHash,\n txLink: receiving.txLink,\n },\n ]\n\n return actions\n}\n\nexport const buildRouteFromTxHistory = (\n tx: FullStatusData,\n tools?: ToolsResponse\n): RouteExecution | undefined => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return\n }\n\n let usedTool = tx.sending.includedSteps?.find(\n (step) => step.toolDetails.key === tx.tool\n )?.toolDetails\n\n if (!usedTool) {\n const selectedBridge = tools?.bridges.find(\n (bridge) => bridge.key === tx.tool\n )\n\n const selectedExchange = tools?.exchanges.find(\n (exchange) => exchange.key === tx.tool\n )\n usedTool = {\n key: tx.tool,\n name: selectedBridge?.name ?? selectedExchange?.name ?? tx.tool,\n logoURI: selectedBridge?.logoURI ?? selectedExchange?.logoURI ?? '',\n }\n }\n\n const fromToken: TokenAmount = {\n ...sending.token,\n amount: BigInt(sending.amount ?? 0),\n }\n\n const toToken: TokenAmount = {\n ...receiving.token,\n amount: BigInt(receiving.amount ?? 0),\n }\n\n const sendingValue = sending.value ? BigInt(sending.value) : 0n\n const sendingFeeAmount =\n sending.gasToken.address === sending.token.address && sending.amount\n ? sendingValue - BigInt(sending.amount)\n : sendingValue\n const sendingFeeAmountUsd =\n sending.gasToken.priceUSD && sendingFeeAmount\n ? formatTokenPrice(\n sendingFeeAmount,\n sending.gasToken.priceUSD,\n sending.gasToken.decimals\n )\n : 0\n\n const feeCosts: FeeCost[] | undefined = sendingFeeAmount\n ? [\n {\n amount: sendingFeeAmount.toString(),\n amountUSD: sendingFeeAmountUsd.toFixed(2),\n token: sending.gasToken,\n included: false,\n // Not used\n description: '',\n name: '',\n percentage: '',\n },\n ]\n : undefined\n\n const routeExecution: RouteExecution = {\n status: 1,\n route: {\n id: (tx as FullStatusData).transactionId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n toChainId: receiving.chainId,\n fromToken,\n toToken,\n gasCostUSD: sending.gasAmountUSD,\n steps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: 'lifi',\n tool: tx.tool,\n toolDetails: usedTool,\n action: {\n fromToken: sending.token,\n fromAmount: sending.amount ?? '',\n fromChainId: sending.chainId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toToken: receiving.token,\n toChainId: receiving.chainId,\n toAddress: (tx as FullStatusData).toAddress,\n slippage: 0,\n },\n estimate: {\n tool: tx.tool,\n approvalAddress: '',\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n executionDuration: 0,\n },\n includedSteps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: sending.chainId === receiving.chainId ? 'swap' : 'cross',\n action: {\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromToken: sending.token,\n toChainId: receiving.chainId,\n toToken: receiving.token,\n slippage: 0,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n },\n estimate: {\n tool: tx.tool,\n fromAmount: sending.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n approvalAddress: '',\n executionDuration: 0,\n },\n tool: tx.tool,\n toolDetails: usedTool,\n },\n ],\n integrator: tx.metadata?.integrator ?? '',\n execution: {\n status: 'DONE', // can be FAILED\n startedAt: sending.timestamp\n ? sending.timestamp * 1000\n : Date.now(),\n actions: buildActionsFromTxHistory(tx),\n fromAmount: sending.amount,\n toAmount: receiving.amount,\n toToken: receiving.token,\n internalTxLink: tx.lifiExplorerLink,\n externalTxLink: tx.bridgeExplorerLink,\n gasCosts: [\n {\n amount: sending.gasAmount,\n amountUSD: sending.gasAmountUSD,\n token: sending.gasToken,\n estimate: '0',\n limit: '0',\n price: '0',\n type: 'SEND',\n },\n ],\n feeCosts,\n },\n },\n ],\n insurance: {\n state: 'NOT_INSURABLE',\n feeAmountUsd: '0',\n },\n },\n }\n\n return routeExecution\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"currencyExtendedFormatter.js","names":[],"sources":["../../../src/utils/currencyExtendedFormatter.ts"],"sourcesContent":["export const currencyExtendedFormatter = (\n lng: string | undefined,\n options: any\n): ((value: any) => string) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...options,\n style: 'currency',\n })\n return (value: any) => {\n if (value > 0 && value < 0.01) {\n return `<${formatter.format(0.01)}`\n }\n return formatter.format(value)\n }\n}\n"],"mappings":";AAAA,MAAa,6BACX,KACA,YAC6B;CAC7B,MAAM,YAAY,IAAI,KAAK,aAAa,KAAK;EAC3C,GAAG;EACH,OAAO;EACR,CAAC;AACF,SAAQ,UAAe;AACrB,MAAI,QAAQ,KAAK,QAAQ,IACvB,QAAO,IAAI,UAAU,OAAO,IAAK;AAEnC,SAAO,UAAU,OAAO,MAAM"}
1
+ {"version":3,"file":"currencyExtendedFormatter.js","names":[],"sources":["../../../src/utils/currencyExtendedFormatter.ts"],"sourcesContent":["export const currencyExtendedFormatter = (\n lng: string | undefined,\n options: any\n): ((value: any) => string) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...options,\n style: 'currency',\n })\n return (value: any) => {\n if (value > 0 && value < 0.01) {\n return `<${formatter.format(0.01)}`\n }\n return formatter.format(value)\n }\n}\n"],"mappings":";AAAA,MAAa,6BACX,KACA,YAC6B;CAC7B,MAAM,YAAY,IAAI,KAAK,aAAa,KAAK;EAC3C,GAAG;EACH,OAAO;EACR,CAAC;CACF,QAAQ,UAAe;EACrB,IAAI,QAAQ,KAAK,QAAQ,KACvB,OAAO,IAAI,UAAU,OAAO,IAAK;EAEnC,OAAO,UAAU,OAAO,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"deepEqual.js","names":[],"sources":["../../../src/utils/deepEqual.ts"],"sourcesContent":["/** Forked from https://github.com/epoberezkin/fast-deep-equal */\n\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false\n }\n\n let length: number\n let i: number\n\n if (Array.isArray(a) && Array.isArray(b)) {\n length = a.length\n if (length !== b.length) {\n return false\n }\n for (i = length; i-- !== 0; ) {\n if (!deepEqual(a[i], b[i])) {\n return false\n }\n }\n return true\n }\n\n if (a.valueOf !== Object.prototype.valueOf) {\n return a.valueOf() === b.valueOf()\n }\n if (a.toString !== Object.prototype.toString) {\n return a.toString() === b.toString()\n }\n\n const keys = Object.keys(a)\n length = keys.length\n if (length !== Object.keys(b).length) {\n return false\n }\n\n for (i = length; i-- !== 0; ) {\n if (!Object.hasOwn(b, keys[i]!)) {\n return false\n }\n }\n\n for (i = length; i-- !== 0; ) {\n const key = keys[i]\n\n if (key && !deepEqual(a[key], b[key])) {\n return false\n }\n }\n\n return true\n }\n\n // true if both NaN, false otherwise\n // biome-ignore lint/suspicious/noSelfCompare: allowed in typescript\n return a !== a && b !== b\n}\n"],"mappings":";;AAEA,SAAgB,UAAU,GAAQ,GAAiB;AACjD,KAAI,MAAM,EACR,QAAO;AAGT,KAAI,KAAK,KAAK,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAC5D,MAAI,EAAE,gBAAgB,EAAE,YACtB,QAAO;EAGT,IAAI;EACJ,IAAI;AAEJ,MAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,EAAE;AACxC,YAAS,EAAE;AACX,OAAI,WAAW,EAAE,OACf,QAAO;AAET,QAAK,IAAI,QAAQ,QAAQ,GACvB,KAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CACxB,QAAO;AAGX,UAAO;;AAGT,MAAI,EAAE,YAAY,OAAO,UAAU,QACjC,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;AAEpC,MAAI,EAAE,aAAa,OAAO,UAAU,SAClC,QAAO,EAAE,UAAU,KAAK,EAAE,UAAU;EAGtC,MAAM,OAAO,OAAO,KAAK,EAAE;AAC3B,WAAS,KAAK;AACd,MAAI,WAAW,OAAO,KAAK,EAAE,CAAC,OAC5B,QAAO;AAGT,OAAK,IAAI,QAAQ,QAAQ,GACvB,KAAI,CAAC,OAAO,OAAO,GAAG,KAAK,GAAI,CAC7B,QAAO;AAIX,OAAK,IAAI,QAAQ,QAAQ,IAAK;GAC5B,MAAM,MAAM,KAAK;AAEjB,OAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CACnC,QAAO;;AAIX,SAAO;;AAKT,QAAO,MAAM,KAAK,MAAM"}
1
+ {"version":3,"file":"deepEqual.js","names":[],"sources":["../../../src/utils/deepEqual.ts"],"sourcesContent":["/** Forked from https://github.com/epoberezkin/fast-deep-equal */\n\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false\n }\n\n let length: number\n let i: number\n\n if (Array.isArray(a) && Array.isArray(b)) {\n length = a.length\n if (length !== b.length) {\n return false\n }\n for (i = length; i-- !== 0; ) {\n if (!deepEqual(a[i], b[i])) {\n return false\n }\n }\n return true\n }\n\n if (a.valueOf !== Object.prototype.valueOf) {\n return a.valueOf() === b.valueOf()\n }\n if (a.toString !== Object.prototype.toString) {\n return a.toString() === b.toString()\n }\n\n const keys = Object.keys(a)\n length = keys.length\n if (length !== Object.keys(b).length) {\n return false\n }\n\n for (i = length; i-- !== 0; ) {\n if (!Object.hasOwn(b, keys[i]!)) {\n return false\n }\n }\n\n for (i = length; i-- !== 0; ) {\n const key = keys[i]\n\n if (key && !deepEqual(a[key], b[key])) {\n return false\n }\n }\n\n return true\n }\n\n // true if both NaN, false otherwise\n // biome-ignore lint/suspicious/noSelfCompare: allowed in typescript\n return a !== a && b !== b\n}\n"],"mappings":";;AAEA,SAAgB,UAAU,GAAQ,GAAiB;CACjD,IAAI,MAAM,GACR,OAAO;CAGT,IAAI,KAAK,KAAK,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;EAC5D,IAAI,EAAE,gBAAgB,EAAE,aACtB,OAAO;EAGT,IAAI;EACJ,IAAI;EAEJ,IAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,EAAE;GACxC,SAAS,EAAE;GACX,IAAI,WAAW,EAAE,QACf,OAAO;GAET,KAAK,IAAI,QAAQ,QAAQ,IACvB,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,EACxB,OAAO;GAGX,OAAO;;EAGT,IAAI,EAAE,YAAY,OAAO,UAAU,SACjC,OAAO,EAAE,SAAS,KAAK,EAAE,SAAS;EAEpC,IAAI,EAAE,aAAa,OAAO,UAAU,UAClC,OAAO,EAAE,UAAU,KAAK,EAAE,UAAU;EAGtC,MAAM,OAAO,OAAO,KAAK,EAAE;EAC3B,SAAS,KAAK;EACd,IAAI,WAAW,OAAO,KAAK,EAAE,CAAC,QAC5B,OAAO;EAGT,KAAK,IAAI,QAAQ,QAAQ,IACvB,IAAI,CAAC,OAAO,OAAO,GAAG,KAAK,GAAI,EAC7B,OAAO;EAIX,KAAK,IAAI,QAAQ,QAAQ,IAAK;GAC5B,MAAM,MAAM,KAAK;GAEjB,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EACnC,OAAO;;EAIX,OAAO;;CAKT,OAAO,MAAM,KAAK,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"deepMerge.js","names":[],"sources":["../../../src/utils/deepMerge.ts"],"sourcesContent":["const isObject = (obj: any): boolean => obj && typeof obj === 'object'\n\nexport const deepMerge = (...objects: any[]): any => {\n return objects.reduce((prev, obj) => {\n for (const key in obj) {\n if (isObject(prev[key]) && isObject(obj[key])) {\n prev[key] = deepMerge(prev[key], obj[key])\n } else {\n prev[key] = obj[key]\n }\n }\n return prev\n }, {})\n}\n"],"mappings":";AAAA,MAAM,YAAY,QAAsB,OAAO,OAAO,QAAQ;AAE9D,MAAa,aAAa,GAAG,YAAwB;AACnD,QAAO,QAAQ,QAAQ,MAAM,QAAQ;AACnC,OAAK,MAAM,OAAO,IAChB,KAAI,SAAS,KAAK,KAAK,IAAI,SAAS,IAAI,KAAK,CAC3C,MAAK,OAAO,UAAU,KAAK,MAAM,IAAI,KAAK;MAE1C,MAAK,OAAO,IAAI;AAGpB,SAAO;IACN,EAAE,CAAC"}
1
+ {"version":3,"file":"deepMerge.js","names":[],"sources":["../../../src/utils/deepMerge.ts"],"sourcesContent":["const isObject = (obj: any): boolean => obj && typeof obj === 'object'\n\nexport const deepMerge = (...objects: any[]): any => {\n return objects.reduce((prev, obj) => {\n for (const key in obj) {\n if (isObject(prev[key]) && isObject(obj[key])) {\n prev[key] = deepMerge(prev[key], obj[key])\n } else {\n prev[key] = obj[key]\n }\n }\n return prev\n }, {})\n}\n"],"mappings":";AAAA,MAAM,YAAY,QAAsB,OAAO,OAAO,QAAQ;AAE9D,MAAa,aAAa,GAAG,YAAwB;CACnD,OAAO,QAAQ,QAAQ,MAAM,QAAQ;EACnC,KAAK,MAAM,OAAO,KAChB,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,IAAI,KAAK,EAC3C,KAAK,OAAO,UAAU,KAAK,MAAM,IAAI,KAAK;OAE1C,KAAK,OAAO,IAAI;EAGpB,OAAO;IACN,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fees.js","names":[],"sources":["../../../src/utils/fees.ts"],"sourcesContent":["import type { FeeCost, GasCost, RouteExtended, Token } from '@lifi/sdk'\nimport { formatTokenPrice } from './format.js'\n\nexport interface FeesBreakdown {\n amount: bigint\n amountUSD: number\n token: Token\n}\n\nexport const getAccumulatedFeeCostsBreakdown = (\n route: RouteExtended,\n included: boolean = false\n): {\n gasCosts: FeesBreakdown[]\n feeCosts: FeesBreakdown[]\n gasCostUSD: number\n feeCostUSD: number\n combinedFeesUSD: number\n} => {\n const gasCosts = getGasCostsBreakdown(route)\n const feeCosts = getFeeCostsBreakdown(route, included)\n const gasCostUSD = gasCosts.reduce(\n (sum, gasCost) => sum + gasCost.amountUSD,\n 0\n )\n const feeCostUSD = feeCosts.reduce(\n (sum, feeCost) => sum + feeCost.amountUSD,\n 0\n )\n const combinedFeesUSD = gasCostUSD + feeCostUSD\n return {\n gasCosts,\n feeCosts,\n gasCostUSD,\n feeCostUSD,\n combinedFeesUSD,\n }\n}\n\nconst getGasCostsBreakdown = (route: RouteExtended): FeesBreakdown[] => {\n return Array.from(\n route.steps\n .reduce((groupedGasCosts, step) => {\n const gasCosts = step.execution?.gasCosts ?? step.estimate.gasCosts\n if (gasCosts?.length) {\n const {\n token,\n amount: gasCostAmount,\n amountUSD: gasCostAmountUSD,\n } = getStepFeeCostsBreakdown(gasCosts)\n const groupedGasCost = groupedGasCosts.get(token.chainId)\n const amount = groupedGasCost\n ? groupedGasCost.amount + gasCostAmount\n : gasCostAmount\n const amountUSD = groupedGasCost\n ? groupedGasCost.amountUSD + gasCostAmountUSD\n : gasCostAmountUSD\n groupedGasCosts.set(token.chainId, {\n amount,\n amountUSD,\n token,\n })\n return groupedGasCosts\n }\n return groupedGasCosts\n }, new Map<number, FeesBreakdown>())\n .values()\n )\n}\n\nconst getFeeCostsBreakdown = (\n route: RouteExtended,\n included?: boolean\n): FeesBreakdown[] => {\n return Array.from(\n route.steps\n .reduce((groupedFeeCosts, step) => {\n let feeCosts = step.execution?.feeCosts ?? step.estimate.feeCosts\n if (typeof included === 'boolean') {\n feeCosts = feeCosts?.filter(\n (feeCost) => feeCost.included === included\n )\n }\n if (feeCosts?.length) {\n const {\n token,\n amount: feeCostAmount,\n amountUSD: feeCostAmountUSD,\n } = getStepFeeCostsBreakdown(feeCosts)\n const groupedFeeCost = groupedFeeCosts.get(token.chainId)\n const amount = groupedFeeCost\n ? groupedFeeCost.amount + feeCostAmount\n : feeCostAmount\n const amountUSD = groupedFeeCost\n ? groupedFeeCost.amountUSD + feeCostAmountUSD\n : feeCostAmountUSD\n groupedFeeCosts.set(token.chainId, {\n amount,\n amountUSD,\n token,\n })\n return groupedFeeCosts\n }\n return groupedFeeCosts\n }, new Map<number, FeesBreakdown>())\n .values()\n )\n}\n\nconst getStepFeeCostsBreakdown = (\n feeCosts: FeeCost[] | GasCost[]\n): FeesBreakdown => {\n const { token } = feeCosts[0]\n\n const { amount, amountUSD } = feeCosts.reduce(\n (acc, feeCost) => {\n const feeAmount = BigInt(Number(feeCost.amount).toFixed(0) || 0)\n const amountUSD = formatTokenPrice(\n feeAmount,\n feeCost.token.priceUSD,\n feeCost.token.decimals\n )\n\n acc.amount += feeAmount\n acc.amountUSD += amountUSD\n return acc\n },\n { amount: 0n, amountUSD: 0 }\n )\n\n return {\n amount,\n amountUSD,\n token,\n }\n}\n"],"mappings":";;AASA,MAAa,mCACX,OACA,WAAoB,UAOjB;CACH,MAAM,WAAW,qBAAqB,MAAM;CAC5C,MAAM,WAAW,qBAAqB,OAAO,SAAS;CACtD,MAAM,aAAa,SAAS,QACzB,KAAK,YAAY,MAAM,QAAQ,WAChC,EACD;CACD,MAAM,aAAa,SAAS,QACzB,KAAK,YAAY,MAAM,QAAQ,WAChC,EACD;AAED,QAAO;EACL;EACA;EACA;EACA;EACA,iBANsB,aAAa;EAOpC;;AAGH,MAAM,wBAAwB,UAA0C;AACtE,QAAO,MAAM,KACX,MAAM,MACH,QAAQ,iBAAiB,SAAS;EACjC,MAAM,WAAW,KAAK,WAAW,YAAY,KAAK,SAAS;AAC3D,MAAI,UAAU,QAAQ;GACpB,MAAM,EACJ,OACA,QAAQ,eACR,WAAW,qBACT,yBAAyB,SAAS;GACtC,MAAM,iBAAiB,gBAAgB,IAAI,MAAM,QAAQ;GACzD,MAAM,SAAS,iBACX,eAAe,SAAS,gBACxB;GACJ,MAAM,YAAY,iBACd,eAAe,YAAY,mBAC3B;AACJ,mBAAgB,IAAI,MAAM,SAAS;IACjC;IACA;IACA;IACD,CAAC;AACF,UAAO;;AAET,SAAO;oBACN,IAAI,KAA4B,CAAC,CACnC,QAAQ,CACZ;;AAGH,MAAM,wBACJ,OACA,aACoB;AACpB,QAAO,MAAM,KACX,MAAM,MACH,QAAQ,iBAAiB,SAAS;EACjC,IAAI,WAAW,KAAK,WAAW,YAAY,KAAK,SAAS;AACzD,MAAI,OAAO,aAAa,UACtB,YAAW,UAAU,QAClB,YAAY,QAAQ,aAAa,SACnC;AAEH,MAAI,UAAU,QAAQ;GACpB,MAAM,EACJ,OACA,QAAQ,eACR,WAAW,qBACT,yBAAyB,SAAS;GACtC,MAAM,iBAAiB,gBAAgB,IAAI,MAAM,QAAQ;GACzD,MAAM,SAAS,iBACX,eAAe,SAAS,gBACxB;GACJ,MAAM,YAAY,iBACd,eAAe,YAAY,mBAC3B;AACJ,mBAAgB,IAAI,MAAM,SAAS;IACjC;IACA;IACA;IACD,CAAC;AACF,UAAO;;AAET,SAAO;oBACN,IAAI,KAA4B,CAAC,CACnC,QAAQ,CACZ;;AAGH,MAAM,4BACJ,aACkB;CAClB,MAAM,EAAE,UAAU,SAAS;CAE3B,MAAM,EAAE,QAAQ,cAAc,SAAS,QACpC,KAAK,YAAY;EAChB,MAAM,YAAY,OAAO,OAAO,QAAQ,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;EAChE,MAAM,YAAY,iBAChB,WACA,QAAQ,MAAM,UACd,QAAQ,MAAM,SACf;AAED,MAAI,UAAU;AACd,MAAI,aAAa;AACjB,SAAO;IAET;EAAE,QAAQ;EAAI,WAAW;EAAG,CAC7B;AAED,QAAO;EACL;EACA;EACA;EACD"}
1
+ {"version":3,"file":"fees.js","names":[],"sources":["../../../src/utils/fees.ts"],"sourcesContent":["import type { FeeCost, GasCost, RouteExtended, Token } from '@lifi/sdk'\nimport { formatTokenPrice } from './format.js'\n\nexport interface FeesBreakdown {\n amount: bigint\n amountUSD: number\n token: Token\n}\n\nexport const getAccumulatedFeeCostsBreakdown = (\n route: RouteExtended,\n included: boolean = false\n): {\n gasCosts: FeesBreakdown[]\n feeCosts: FeesBreakdown[]\n gasCostUSD: number\n feeCostUSD: number\n combinedFeesUSD: number\n} => {\n const gasCosts = getGasCostsBreakdown(route)\n const feeCosts = getFeeCostsBreakdown(route, included)\n const gasCostUSD = gasCosts.reduce(\n (sum, gasCost) => sum + gasCost.amountUSD,\n 0\n )\n const feeCostUSD = feeCosts.reduce(\n (sum, feeCost) => sum + feeCost.amountUSD,\n 0\n )\n const combinedFeesUSD = gasCostUSD + feeCostUSD\n return {\n gasCosts,\n feeCosts,\n gasCostUSD,\n feeCostUSD,\n combinedFeesUSD,\n }\n}\n\nconst getGasCostsBreakdown = (route: RouteExtended): FeesBreakdown[] => {\n return Array.from(\n route.steps\n .reduce((groupedGasCosts, step) => {\n const gasCosts = step.execution?.gasCosts ?? step.estimate.gasCosts\n if (gasCosts?.length) {\n const {\n token,\n amount: gasCostAmount,\n amountUSD: gasCostAmountUSD,\n } = getStepFeeCostsBreakdown(gasCosts)\n const groupedGasCost = groupedGasCosts.get(token.chainId)\n const amount = groupedGasCost\n ? groupedGasCost.amount + gasCostAmount\n : gasCostAmount\n const amountUSD = groupedGasCost\n ? groupedGasCost.amountUSD + gasCostAmountUSD\n : gasCostAmountUSD\n groupedGasCosts.set(token.chainId, {\n amount,\n amountUSD,\n token,\n })\n return groupedGasCosts\n }\n return groupedGasCosts\n }, new Map<number, FeesBreakdown>())\n .values()\n )\n}\n\nconst getFeeCostsBreakdown = (\n route: RouteExtended,\n included?: boolean\n): FeesBreakdown[] => {\n return Array.from(\n route.steps\n .reduce((groupedFeeCosts, step) => {\n let feeCosts = step.execution?.feeCosts ?? step.estimate.feeCosts\n if (typeof included === 'boolean') {\n feeCosts = feeCosts?.filter(\n (feeCost) => feeCost.included === included\n )\n }\n if (feeCosts?.length) {\n const {\n token,\n amount: feeCostAmount,\n amountUSD: feeCostAmountUSD,\n } = getStepFeeCostsBreakdown(feeCosts)\n const groupedFeeCost = groupedFeeCosts.get(token.chainId)\n const amount = groupedFeeCost\n ? groupedFeeCost.amount + feeCostAmount\n : feeCostAmount\n const amountUSD = groupedFeeCost\n ? groupedFeeCost.amountUSD + feeCostAmountUSD\n : feeCostAmountUSD\n groupedFeeCosts.set(token.chainId, {\n amount,\n amountUSD,\n token,\n })\n return groupedFeeCosts\n }\n return groupedFeeCosts\n }, new Map<number, FeesBreakdown>())\n .values()\n )\n}\n\nconst getStepFeeCostsBreakdown = (\n feeCosts: FeeCost[] | GasCost[]\n): FeesBreakdown => {\n const { token } = feeCosts[0]\n\n const { amount, amountUSD } = feeCosts.reduce(\n (acc, feeCost) => {\n const feeAmount = BigInt(Number(feeCost.amount).toFixed(0) || 0)\n const amountUSD = formatTokenPrice(\n feeAmount,\n feeCost.token.priceUSD,\n feeCost.token.decimals\n )\n\n acc.amount += feeAmount\n acc.amountUSD += amountUSD\n return acc\n },\n { amount: 0n, amountUSD: 0 }\n )\n\n return {\n amount,\n amountUSD,\n token,\n }\n}\n"],"mappings":";;AASA,MAAa,mCACX,OACA,WAAoB,UAOjB;CACH,MAAM,WAAW,qBAAqB,MAAM;CAC5C,MAAM,WAAW,qBAAqB,OAAO,SAAS;CACtD,MAAM,aAAa,SAAS,QACzB,KAAK,YAAY,MAAM,QAAQ,WAChC,EACD;CACD,MAAM,aAAa,SAAS,QACzB,KAAK,YAAY,MAAM,QAAQ,WAChC,EACD;CAED,OAAO;EACL;EACA;EACA;EACA;EACA,iBANsB,aAAa;EAOpC;;AAGH,MAAM,wBAAwB,UAA0C;CACtE,OAAO,MAAM,KACX,MAAM,MACH,QAAQ,iBAAiB,SAAS;EACjC,MAAM,WAAW,KAAK,WAAW,YAAY,KAAK,SAAS;EAC3D,IAAI,UAAU,QAAQ;GACpB,MAAM,EACJ,OACA,QAAQ,eACR,WAAW,qBACT,yBAAyB,SAAS;GACtC,MAAM,iBAAiB,gBAAgB,IAAI,MAAM,QAAQ;GACzD,MAAM,SAAS,iBACX,eAAe,SAAS,gBACxB;GACJ,MAAM,YAAY,iBACd,eAAe,YAAY,mBAC3B;GACJ,gBAAgB,IAAI,MAAM,SAAS;IACjC;IACA;IACA;IACD,CAAC;GACF,OAAO;;EAET,OAAO;oBACN,IAAI,KAA4B,CAAC,CACnC,QAAQ,CACZ;;AAGH,MAAM,wBACJ,OACA,aACoB;CACpB,OAAO,MAAM,KACX,MAAM,MACH,QAAQ,iBAAiB,SAAS;EACjC,IAAI,WAAW,KAAK,WAAW,YAAY,KAAK,SAAS;EACzD,IAAI,OAAO,aAAa,WACtB,WAAW,UAAU,QAClB,YAAY,QAAQ,aAAa,SACnC;EAEH,IAAI,UAAU,QAAQ;GACpB,MAAM,EACJ,OACA,QAAQ,eACR,WAAW,qBACT,yBAAyB,SAAS;GACtC,MAAM,iBAAiB,gBAAgB,IAAI,MAAM,QAAQ;GACzD,MAAM,SAAS,iBACX,eAAe,SAAS,gBACxB;GACJ,MAAM,YAAY,iBACd,eAAe,YAAY,mBAC3B;GACJ,gBAAgB,IAAI,MAAM,SAAS;IACjC;IACA;IACA;IACD,CAAC;GACF,OAAO;;EAET,OAAO;oBACN,IAAI,KAA4B,CAAC,CACnC,QAAQ,CACZ;;AAGH,MAAM,4BACJ,aACkB;CAClB,MAAM,EAAE,UAAU,SAAS;CAE3B,MAAM,EAAE,QAAQ,cAAc,SAAS,QACpC,KAAK,YAAY;EAChB,MAAM,YAAY,OAAO,OAAO,QAAQ,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;EAChE,MAAM,YAAY,iBAChB,WACA,QAAQ,MAAM,UACd,QAAQ,MAAM,SACf;EAED,IAAI,UAAU;EACd,IAAI,aAAa;EACjB,OAAO;IAET;EAAE,QAAQ;EAAI,WAAW;EAAG,CAC7B;CAED,OAAO;EACL;EACA;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":[],"sources":["../../../src/utils/format.ts"],"sourcesContent":["import { formatUnits } from '@lifi/sdk'\n\nexport const usdDecimals = 2\n\n/**\n * Format token amount to at least 6 decimals.\n * @param amount amount to format.\n * @returns formatted amount.\n */\nexport function formatTokenAmount(\n amount: bigint | undefined,\n decimals: number\n): string {\n const formattedAmount = amount ? formatUnits(amount, decimals) : '0'\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (!parsedAmount || Number.isNaN(Number(formattedAmount))) {\n return '0'\n }\n\n return formattedAmount\n}\n\nexport function formatSlippage(\n slippage = '',\n defaultValue = '',\n returnInitial = false\n): string {\n if (!slippage) {\n return slippage\n }\n const parsedSlippage = Number.parseFloat(slippage)\n if (Number.isNaN(Number(slippage)) && !Number.isNaN(parsedSlippage)) {\n return parsedSlippage.toString()\n }\n if (Number.isNaN(parsedSlippage)) {\n return defaultValue\n }\n if (parsedSlippage >= 100) {\n return '100'\n }\n if (parsedSlippage < 0) {\n return Math.abs(parsedSlippage).toString()\n }\n if (returnInitial) {\n return slippage\n }\n return parsedSlippage.toString()\n}\n\n/**\n * Formats a user input amount string, normalizing it and optionally limiting decimal places.\n * @param amount - The amount string to format (e.g., '123.45', '1,23', '0..')\n * @param decimals - Maximum number of decimal places to allow. If null, no limit is applied.\n * @param returnInitial - If true, preserves the input format during typing (e.g., keeps trailing dots,\n * preserves leading zeros, keeps negative signs). If false (default), cleans up the\n * format on blur (removes leading/trailing zeros, removes negative signs).\n * @returns The formatted amount string, or empty string for invalid input.\n */\nexport function formatInputAmount(\n amount: string,\n decimals: number | null = null,\n returnInitial: boolean = false\n): string {\n if (!amount) {\n return amount\n }\n\n // Replace commas with dots\n let formattedAmount = amount.trim().replaceAll(',', '.')\n\n // Keep only the first dot, remove all subsequent dots\n const dotIndex = formattedAmount.indexOf('.')\n if (dotIndex !== -1) {\n formattedAmount = `${formattedAmount.slice(0, dotIndex + 1)}${formattedAmount.slice(dotIndex + 1).replaceAll('.', '')}`\n }\n\n // If the amount starts with a dot, prepend 0\n if (\n (!returnInitial && formattedAmount.startsWith('.')) ||\n formattedAmount === '.'\n ) {\n formattedAmount = `0${formattedAmount}`\n }\n\n // Parse the valid part of the amount\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (Number.isNaN(Number(formattedAmount)) && !Number.isNaN(parsedAmount)) {\n formattedAmount = parsedAmount.toString()\n }\n if (Number.isNaN(Math.abs(Number(formattedAmount)))) {\n return ''\n }\n\n // Split and limit decimals\n let [integer, fraction = ''] = formattedAmount.split('.')\n if (decimals !== null && fraction.length > decimals) {\n fraction = fraction.slice(0, decimals)\n }\n\n if (returnInitial) {\n if (!fraction) {\n return formattedAmount\n }\n return `${integer}${fraction ? `.${fraction}` : ''}`\n }\n\n // Remove leading zeros and minus sign\n integer = integer.replace(/^0+|-/, '')\n // Remove trailing zeros\n fraction = fraction.replace(/(0+)$/, '')\n\n return `${integer || (fraction ? '0' : '')}${fraction ? `.${fraction}` : ''}`\n}\n\nexport function formatTokenPrice(\n amount?: string | bigint,\n price?: string,\n decimals?: number\n): number {\n if (!amount || !price) {\n return 0\n }\n\n const formattedAmount =\n typeof amount === 'bigint' && decimals !== undefined\n ? formatUnits(amount, decimals)\n : amount.toString()\n\n if (Number.isNaN(Number(formattedAmount)) || Number.isNaN(Number(price))) {\n return 0\n }\n return Number.parseFloat(formattedAmount) * Number.parseFloat(price)\n}\n\n/**\n * Formatter for price value to token amount\n */\nconst formatter = new Intl.NumberFormat('en', {\n notation: 'standard',\n roundingPriority: 'morePrecision',\n maximumSignificantDigits: 20,\n maximumFractionDigits: 20,\n useGrouping: false,\n})\n\n/**\n * Convert price value to token amount\n */\nexport function priceToTokenAmount(\n priceValue: string,\n priceUSD?: string\n): string {\n if (!priceValue || !priceUSD) {\n return '0'\n }\n\n const numericPriceValue = Number.parseFloat(priceValue)\n const numericPrice = Number.parseFloat(priceUSD)\n\n if (\n Number.isNaN(numericPriceValue) ||\n Number.isNaN(numericPrice) ||\n !numericPrice\n ) {\n return '0'\n }\n\n return formatter.format(numericPriceValue / numericPrice)\n}\n\nconst units = [\n ['day', 86400],\n ['hour', 3600],\n ['minute', 60],\n ['second', 1],\n] as const\n\nexport function formatDuration(seconds: number, locale: string): string {\n const match = units.find(([, v]) => seconds >= v)\n const amount = match ? Math.floor(seconds / match[1]) : 0\n const unit = match?.[0] ?? 'second'\n\n return amount.toLocaleString(locale, {\n style: 'unit',\n unit,\n unitDisplay: 'narrow',\n })\n}\n\nexport function wrapLongWords(text: string): string {\n return text.replace(\n /\\S{32,}/g,\n (word) => `${word.slice(0, 8)}...${word.slice(-4)}`\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"format.js","names":[],"sources":["../../../src/utils/format.ts"],"sourcesContent":["import { formatUnits } from '@lifi/sdk'\n\nexport const usdDecimals = 2\n\n/**\n * Format token amount to at least 6 decimals.\n * @param amount amount to format.\n * @returns formatted amount.\n */\nexport function formatTokenAmount(\n amount: bigint | undefined,\n decimals: number\n): string {\n const formattedAmount = amount ? formatUnits(amount, decimals) : '0'\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (!parsedAmount || Number.isNaN(Number(formattedAmount))) {\n return '0'\n }\n\n return formattedAmount\n}\n\nexport function formatSlippage(\n slippage = '',\n defaultValue = '',\n returnInitial = false\n): string {\n if (!slippage) {\n return slippage\n }\n const parsedSlippage = Number.parseFloat(slippage)\n if (Number.isNaN(Number(slippage)) && !Number.isNaN(parsedSlippage)) {\n return parsedSlippage.toString()\n }\n if (Number.isNaN(parsedSlippage)) {\n return defaultValue\n }\n if (parsedSlippage >= 100) {\n return '100'\n }\n if (parsedSlippage < 0) {\n return Math.abs(parsedSlippage).toString()\n }\n if (returnInitial) {\n return slippage\n }\n return parsedSlippage.toString()\n}\n\n/**\n * Formats a user input amount string, normalizing it and optionally limiting decimal places.\n * @param amount - The amount string to format (e.g., '123.45', '1,23', '0..')\n * @param decimals - Maximum number of decimal places to allow. If null, no limit is applied.\n * @param returnInitial - If true, preserves the input format during typing (e.g., keeps trailing dots,\n * preserves leading zeros, keeps negative signs). If false (default), cleans up the\n * format on blur (removes leading/trailing zeros, removes negative signs).\n * @returns The formatted amount string, or empty string for invalid input.\n */\nexport function formatInputAmount(\n amount: string,\n decimals: number | null = null,\n returnInitial: boolean = false\n): string {\n if (!amount) {\n return amount\n }\n\n // Replace commas with dots\n let formattedAmount = amount.trim().replaceAll(',', '.')\n\n // Keep only the first dot, remove all subsequent dots\n const dotIndex = formattedAmount.indexOf('.')\n if (dotIndex !== -1) {\n formattedAmount = `${formattedAmount.slice(0, dotIndex + 1)}${formattedAmount.slice(dotIndex + 1).replaceAll('.', '')}`\n }\n\n // If the amount starts with a dot, prepend 0\n if (\n (!returnInitial && formattedAmount.startsWith('.')) ||\n formattedAmount === '.'\n ) {\n formattedAmount = `0${formattedAmount}`\n }\n\n // Parse the valid part of the amount\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (Number.isNaN(Number(formattedAmount)) && !Number.isNaN(parsedAmount)) {\n formattedAmount = parsedAmount.toString()\n }\n if (Number.isNaN(Math.abs(Number(formattedAmount)))) {\n return ''\n }\n\n // Split and limit decimals\n let [integer, fraction = ''] = formattedAmount.split('.')\n if (decimals !== null && fraction.length > decimals) {\n fraction = fraction.slice(0, decimals)\n }\n\n if (returnInitial) {\n if (!fraction) {\n return formattedAmount\n }\n return `${integer}${fraction ? `.${fraction}` : ''}`\n }\n\n // Remove leading zeros and minus sign\n integer = integer.replace(/^0+|-/, '')\n // Remove trailing zeros\n fraction = fraction.replace(/(0+)$/, '')\n\n return `${integer || (fraction ? '0' : '')}${fraction ? `.${fraction}` : ''}`\n}\n\nexport function formatTokenPrice(\n amount?: string | bigint,\n price?: string,\n decimals?: number\n): number {\n if (!amount || !price) {\n return 0\n }\n\n const formattedAmount =\n typeof amount === 'bigint' && decimals !== undefined\n ? formatUnits(amount, decimals)\n : amount.toString()\n\n if (Number.isNaN(Number(formattedAmount)) || Number.isNaN(Number(price))) {\n return 0\n }\n return Number.parseFloat(formattedAmount) * Number.parseFloat(price)\n}\n\n/**\n * Formatter for price value to token amount\n */\nconst formatter = new Intl.NumberFormat('en', {\n notation: 'standard',\n roundingPriority: 'morePrecision',\n maximumSignificantDigits: 20,\n maximumFractionDigits: 20,\n useGrouping: false,\n})\n\n/**\n * Convert price value to token amount\n */\nexport function priceToTokenAmount(\n priceValue: string,\n priceUSD?: string\n): string {\n if (!priceValue || !priceUSD) {\n return '0'\n }\n\n const numericPriceValue = Number.parseFloat(priceValue)\n const numericPrice = Number.parseFloat(priceUSD)\n\n if (\n Number.isNaN(numericPriceValue) ||\n Number.isNaN(numericPrice) ||\n !numericPrice\n ) {\n return '0'\n }\n\n return formatter.format(numericPriceValue / numericPrice)\n}\n\nconst units = [\n ['day', 86400],\n ['hour', 3600],\n ['minute', 60],\n ['second', 1],\n] as const\n\nexport function formatDuration(seconds: number, locale: string): string {\n const match = units.find(([, v]) => seconds >= v)\n const amount = match ? Math.floor(seconds / match[1]) : 0\n const unit = match?.[0] ?? 'second'\n\n return amount.toLocaleString(locale, {\n style: 'unit',\n unit,\n unitDisplay: 'narrow',\n })\n}\n\nexport function wrapLongWords(text: string): string {\n return text.replace(\n /\\S{32,}/g,\n (word) => `${word.slice(0, 8)}...${word.slice(-4)}`\n )\n}\n"],"mappings":";;AAEA,MAAa,cAAc;;;;;;AAO3B,SAAgB,kBACd,QACA,UACQ;CACR,MAAM,kBAAkB,SAAS,YAAY,QAAQ,SAAS,GAAG;CAEjE,IAAI,CADiB,OAAO,WAAW,gBACtB,IAAI,OAAO,MAAM,OAAO,gBAAgB,CAAC,EACxD,OAAO;CAGT,OAAO;;AAGT,SAAgB,eACd,WAAW,IACX,eAAe,IACf,gBAAgB,OACR;CACR,IAAI,CAAC,UACH,OAAO;CAET,MAAM,iBAAiB,OAAO,WAAW,SAAS;CAClD,IAAI,OAAO,MAAM,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,MAAM,eAAe,EACjE,OAAO,eAAe,UAAU;CAElC,IAAI,OAAO,MAAM,eAAe,EAC9B,OAAO;CAET,IAAI,kBAAkB,KACpB,OAAO;CAET,IAAI,iBAAiB,GACnB,OAAO,KAAK,IAAI,eAAe,CAAC,UAAU;CAE5C,IAAI,eACF,OAAO;CAET,OAAO,eAAe,UAAU;;;;;;;;;;;AAYlC,SAAgB,kBACd,QACA,WAA0B,MAC1B,gBAAyB,OACjB;CACR,IAAI,CAAC,QACH,OAAO;CAIT,IAAI,kBAAkB,OAAO,MAAM,CAAC,WAAW,KAAK,IAAI;CAGxD,MAAM,WAAW,gBAAgB,QAAQ,IAAI;CAC7C,IAAI,aAAa,IACf,kBAAkB,GAAG,gBAAgB,MAAM,GAAG,WAAW,EAAE,GAAG,gBAAgB,MAAM,WAAW,EAAE,CAAC,WAAW,KAAK,GAAG;CAIvH,IACG,CAAC,iBAAiB,gBAAgB,WAAW,IAAI,IAClD,oBAAoB,KAEpB,kBAAkB,IAAI;CAIxB,MAAM,eAAe,OAAO,WAAW,gBAAgB;CACvD,IAAI,OAAO,MAAM,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,MAAM,aAAa,EACtE,kBAAkB,aAAa,UAAU;CAE3C,IAAI,OAAO,MAAM,KAAK,IAAI,OAAO,gBAAgB,CAAC,CAAC,EACjD,OAAO;CAIT,IAAI,CAAC,SAAS,WAAW,MAAM,gBAAgB,MAAM,IAAI;CACzD,IAAI,aAAa,QAAQ,SAAS,SAAS,UACzC,WAAW,SAAS,MAAM,GAAG,SAAS;CAGxC,IAAI,eAAe;EACjB,IAAI,CAAC,UACH,OAAO;EAET,OAAO,GAAG,UAAU,WAAW,IAAI,aAAa;;CAIlD,UAAU,QAAQ,QAAQ,SAAS,GAAG;CAEtC,WAAW,SAAS,QAAQ,SAAS,GAAG;CAExC,OAAO,GAAG,YAAY,WAAW,MAAM,MAAM,WAAW,IAAI,aAAa;;AAG3E,SAAgB,iBACd,QACA,OACA,UACQ;CACR,IAAI,CAAC,UAAU,CAAC,OACd,OAAO;CAGT,MAAM,kBACJ,OAAO,WAAW,YAAY,aAAa,KAAA,IACvC,YAAY,QAAQ,SAAS,GAC7B,OAAO,UAAU;CAEvB,IAAI,OAAO,MAAM,OAAO,gBAAgB,CAAC,IAAI,OAAO,MAAM,OAAO,MAAM,CAAC,EACtE,OAAO;CAET,OAAO,OAAO,WAAW,gBAAgB,GAAG,OAAO,WAAW,MAAM;;;;;AAMtE,MAAM,YAAY,IAAI,KAAK,aAAa,MAAM;CAC5C,UAAU;CACV,kBAAkB;CAClB,0BAA0B;CAC1B,uBAAuB;CACvB,aAAa;CACd,CAAC;;;;AAKF,SAAgB,mBACd,YACA,UACQ;CACR,IAAI,CAAC,cAAc,CAAC,UAClB,OAAO;CAGT,MAAM,oBAAoB,OAAO,WAAW,WAAW;CACvD,MAAM,eAAe,OAAO,WAAW,SAAS;CAEhD,IACE,OAAO,MAAM,kBAAkB,IAC/B,OAAO,MAAM,aAAa,IAC1B,CAAC,cAED,OAAO;CAGT,OAAO,UAAU,OAAO,oBAAoB,aAAa;;AAG3D,MAAM,QAAQ;CACZ,CAAC,OAAO,MAAM;CACd,CAAC,QAAQ,KAAK;CACd,CAAC,UAAU,GAAG;CACd,CAAC,UAAU,EAAE;CACd;AAED,SAAgB,eAAe,SAAiB,QAAwB;CACtE,MAAM,QAAQ,MAAM,MAAM,GAAG,OAAO,WAAW,EAAE;CACjD,MAAM,SAAS,QAAQ,KAAK,MAAM,UAAU,MAAM,GAAG,GAAG;CACxD,MAAM,OAAO,QAAQ,MAAM;CAE3B,OAAO,OAAO,eAAe,QAAQ;EACnC,OAAO;EACP;EACA,aAAa;EACd,CAAC;;AAGJ,SAAgB,cAAc,MAAsB;CAClD,OAAO,KAAK,QACV,aACC,SAAS,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,KAAK,MAAM,GAAG,GAClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"getActionMessage.js","names":[],"sources":["../../../src/utils/getActionMessage.ts"],"sourcesContent":["import type {\n ExecutionActionStatus,\n ExecutionActionType,\n LiFiStepExtended,\n StatusMessage,\n Substatus,\n} from '@lifi/sdk'\nimport type { TFunction } from 'i18next'\nimport type { SubvariantOptions, WidgetSubvariant } from '../types/widget'\n\nexport function getActionMessage(\n t: TFunction,\n step: LiFiStepExtended,\n type: ExecutionActionType,\n status: ExecutionActionStatus,\n substatus?: Substatus,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n): {\n title?: string\n message?: string\n} {\n const messageWithSubstatus = substatus\n ? actionSubstatusMessages[status as StatusMessage]?.[substatus]?.(t)\n : undefined\n const title =\n messageWithSubstatus ??\n actionStatusMessages[type]?.[status]?.(\n t,\n step,\n subvariant,\n subvariantOptions\n )\n return { title }\n}\n\nconst actionStatusMessages: Record<\n ExecutionActionType,\n Partial<\n Record<\n ExecutionActionStatus,\n (\n t: TFunction,\n step: LiFiStepExtended,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n ) => string\n >\n >\n> = {\n CHECK_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.started', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n NATIVE_PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n RESET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n RESET_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.resetRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n SET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n ACTION_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.actionRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n SWAP: {\n STARTED: (t) => t('main.process.swap.started'),\n ACTION_REQUIRED: (t) => t('main.process.swap.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.swap.messageRequired'),\n PENDING: (t) => t('main.process.swap.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.swap.done'),\n },\n CROSS_CHAIN: {\n STARTED: (t) => t('main.process.bridge.started'),\n ACTION_REQUIRED: (t) => t('main.process.bridge.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.bridge.messageRequired'),\n PENDING: (t) => t('main.process.bridge.pending'),\n DONE: (t) => t('main.process.bridge.done'),\n },\n RECEIVING_CHAIN: {\n STARTED: (t) => t('main.process.receivingChain.pending'),\n PENDING: (t) => t('main.process.receivingChain.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.receivingChain.done'),\n },\n}\n\nconst actionSubstatusMessages: Record<\n StatusMessage,\n Partial<Record<Substatus, (t: TFunction) => string>>\n> = {\n PENDING: {\n // BRIDGE_NOT_AVAILABLE: 'Bridge communication is temporarily unavailable.',\n // CHAIN_NOT_AVAILABLE: 'RPC communication is temporarily unavailable.',\n // REFUND_IN_PROGRESS:\n // \"The refund has been requested and it's being processed\",\n // WAIT_DESTINATION_TRANSACTION:\n // 'The bridge off-chain logic is being executed. Wait for the transaction to appear on the destination chain.',\n // WAIT_SOURCE_CONFIRMATIONS:\n // 'The bridge deposit has been received. The bridge is waiting for more confirmations to start the off-chain logic.',\n },\n DONE: {\n // COMPLETED: 'The transfer is complete.',\n PARTIAL: (t) => t('main.process.receivingChain.partial'),\n REFUNDED: (t) => t('main.process.receivingChain.partial'),\n },\n FAILED: {\n // TODO: should be moved to failed status\n // NOT_PROCESSABLE_REFUND_NEEDED:\n // 'The transfer cannot be completed successfully. A refund operation is required.',\n // UNKNOWN_ERROR:\n // 'An unexpected error occurred. Please seek assistance in the LI.FI discord server.',\n },\n INVALID: {},\n NOT_FOUND: {},\n}\n"],"mappings":";AAUA,SAAgB,iBACd,GACA,MACA,MACA,QACA,WACA,YACA,mBAIA;AAYA,QAAO,EAAE,QAXoB,YACzB,wBAAwB,UAA2B,aAAa,EAAE,GAClE,KAAA,MAGF,qBAAqB,QAAQ,UAC3B,GACA,MACA,YACA,kBACD,EACa;;AAGlB,MAAM,uBAaF;CACF,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,iBAAiB,GAAG,SAClB,EAAE,6CAA6C,EAC7C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,kBAAkB,GAAG,SACnB,EAAE,8CAA8C,EAC9C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,QAAQ;EACN,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,MAAM;EACJ,UAAU,MAAM,EAAE,4BAA4B;EAC9C,kBAAkB,MAAM,EAAE,mCAAmC;EAC7D,mBAAmB,MAAM,EAAE,oCAAoC;EAC/D,UAAU,MAAM,EAAE,4BAA4B;EAC9C,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,yBAAyB;EAClC;CACD,aAAa;EACX,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,mBAAmB,MAAM,EAAE,sCAAsC;EACjE,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,MAAM,EAAE,sCAAsC;EACxD,UAAU,MAAM,EAAE,sCAAsC;EACxD,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,mCAAmC;EAC5C;CACF;AAED,MAAM,0BAGF;CACF,SAAS,EASR;CACD,MAAM;EAEJ,UAAU,MAAM,EAAE,sCAAsC;EACxD,WAAW,MAAM,EAAE,sCAAsC;EAC1D;CACD,QAAQ,EAMP;CACD,SAAS,EAAE;CACX,WAAW,EAAE;CACd"}
1
+ {"version":3,"file":"getActionMessage.js","names":[],"sources":["../../../src/utils/getActionMessage.ts"],"sourcesContent":["import type {\n ExecutionActionStatus,\n ExecutionActionType,\n LiFiStepExtended,\n StatusMessage,\n Substatus,\n} from '@lifi/sdk'\nimport type { TFunction } from 'i18next'\nimport type { SubvariantOptions, WidgetSubvariant } from '../types/widget'\n\nexport function getActionMessage(\n t: TFunction,\n step: LiFiStepExtended,\n type: ExecutionActionType,\n status: ExecutionActionStatus,\n substatus?: Substatus,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n): {\n title?: string\n message?: string\n} {\n const messageWithSubstatus = substatus\n ? actionSubstatusMessages[status as StatusMessage]?.[substatus]?.(t)\n : undefined\n const title =\n messageWithSubstatus ??\n actionStatusMessages[type]?.[status]?.(\n t,\n step,\n subvariant,\n subvariantOptions\n )\n return { title }\n}\n\nconst actionStatusMessages: Record<\n ExecutionActionType,\n Partial<\n Record<\n ExecutionActionStatus,\n (\n t: TFunction,\n step: LiFiStepExtended,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n ) => string\n >\n >\n> = {\n CHECK_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.started', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n NATIVE_PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n RESET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n RESET_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.resetRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n SET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n ACTION_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.actionRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n SWAP: {\n STARTED: (t) => t('main.process.swap.started'),\n ACTION_REQUIRED: (t) => t('main.process.swap.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.swap.messageRequired'),\n PENDING: (t) => t('main.process.swap.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.swap.done'),\n },\n CROSS_CHAIN: {\n STARTED: (t) => t('main.process.bridge.started'),\n ACTION_REQUIRED: (t) => t('main.process.bridge.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.bridge.messageRequired'),\n PENDING: (t) => t('main.process.bridge.pending'),\n DONE: (t) => t('main.process.bridge.done'),\n },\n RECEIVING_CHAIN: {\n STARTED: (t) => t('main.process.receivingChain.pending'),\n PENDING: (t) => t('main.process.receivingChain.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.receivingChain.done'),\n },\n}\n\nconst actionSubstatusMessages: Record<\n StatusMessage,\n Partial<Record<Substatus, (t: TFunction) => string>>\n> = {\n PENDING: {\n // BRIDGE_NOT_AVAILABLE: 'Bridge communication is temporarily unavailable.',\n // CHAIN_NOT_AVAILABLE: 'RPC communication is temporarily unavailable.',\n // REFUND_IN_PROGRESS:\n // \"The refund has been requested and it's being processed\",\n // WAIT_DESTINATION_TRANSACTION:\n // 'The bridge off-chain logic is being executed. Wait for the transaction to appear on the destination chain.',\n // WAIT_SOURCE_CONFIRMATIONS:\n // 'The bridge deposit has been received. The bridge is waiting for more confirmations to start the off-chain logic.',\n },\n DONE: {\n // COMPLETED: 'The transfer is complete.',\n PARTIAL: (t) => t('main.process.receivingChain.partial'),\n REFUNDED: (t) => t('main.process.receivingChain.partial'),\n },\n FAILED: {\n // TODO: should be moved to failed status\n // NOT_PROCESSABLE_REFUND_NEEDED:\n // 'The transfer cannot be completed successfully. A refund operation is required.',\n // UNKNOWN_ERROR:\n // 'An unexpected error occurred. Please seek assistance in the LI.FI discord server.',\n },\n INVALID: {},\n NOT_FOUND: {},\n}\n"],"mappings":";AAUA,SAAgB,iBACd,GACA,MACA,MACA,QACA,WACA,YACA,mBAIA;CAYA,OAAO,EAAE,QAXoB,YACzB,wBAAwB,UAA2B,aAAa,EAAE,GAClE,KAAA,MAGF,qBAAqB,QAAQ,UAC3B,GACA,MACA,YACA,kBACD,EACa;;AAGlB,MAAM,uBAaF;CACF,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,iBAAiB,GAAG,SAClB,EAAE,6CAA6C,EAC7C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,kBAAkB,GAAG,SACnB,EAAE,8CAA8C,EAC9C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,QAAQ;EACN,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,MAAM;EACJ,UAAU,MAAM,EAAE,4BAA4B;EAC9C,kBAAkB,MAAM,EAAE,mCAAmC;EAC7D,mBAAmB,MAAM,EAAE,oCAAoC;EAC/D,UAAU,MAAM,EAAE,4BAA4B;EAC9C,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,yBAAyB;EAClC;CACD,aAAa;EACX,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,mBAAmB,MAAM,EAAE,sCAAsC;EACjE,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,MAAM,EAAE,sCAAsC;EACxD,UAAU,MAAM,EAAE,sCAAsC;EACxD,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,mCAAmC;EAC5C;CACF;AAED,MAAM,0BAGF;CACF,SAAS,EASR;CACD,MAAM;EAEJ,UAAU,MAAM,EAAE,sCAAsC;EACxD,WAAW,MAAM,EAAE,sCAAsC;EAC1D;CACD,QAAQ,EAMP;CACD,SAAS,EAAE;CACX,WAAW,EAAE;CACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"getErrorMessage.js","names":[],"sources":["../../../src/utils/getErrorMessage.ts"],"sourcesContent":["import {\n type EVMChain,\n type ExecutionAction,\n LiFiErrorCode,\n type LiFiStepExtended,\n} from '@lifi/sdk'\nimport type { TFunction } from 'i18next'\nimport { formatTokenAmount, wrapLongWords } from '../utils/format.js'\n\nexport function getErrorMessage(\n t: TFunction,\n getChainById: (chainId: number) => EVMChain | undefined,\n step: LiFiStepExtended,\n failedAction?: ExecutionAction\n): { title: string; message: string } {\n const error = failedAction?.error\n if (!error) {\n return {\n title: t('error.title.unknown'),\n message: t('error.message.unknown'),\n }\n }\n\n const getDefaultErrorMessage = (key?: string) =>\n `${t((key as any) ?? 'error.message.transactionNotSent')} ${t(\n 'error.message.remainInYourWallet',\n {\n amount: formatTokenAmount(\n BigInt(step.action.fromAmount),\n step.action.fromToken.decimals\n ),\n tokenSymbol: step.action.fromToken.symbol,\n chainName: getChainById(step.action.fromChainId)?.name ?? '',\n }\n )}`\n\n let title = ''\n let message = ''\n switch (error.code) {\n case LiFiErrorCode.AllowanceRequired:\n title = t('error.title.allowanceRequired')\n message = t('error.message.allowanceRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n })\n break\n case LiFiErrorCode.BalanceError:\n title = t('error.title.balanceIsTooLow')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.ChainSwitchError:\n title = t('error.title.chainSwitch')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.GasLimitError:\n title = t('error.title.gasLimitIsTooLow')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.InsufficientFunds:\n title = t('error.title.insufficientFunds')\n message = `${t(\n 'error.message.insufficientFunds'\n )} ${getDefaultErrorMessage()}`\n break\n case LiFiErrorCode.InsufficientGas:\n title = t('error.title.insufficientGas')\n message = `${t(\n 'error.message.insufficientFunds'\n )} ${getDefaultErrorMessage()}`\n break\n case LiFiErrorCode.SlippageError:\n title = t('error.title.slippageNotMet')\n message = t('error.message.slippageThreshold')\n break\n case LiFiErrorCode.TransactionFailed:\n title = t('error.title.transactionFailed')\n message = t('error.message.transactionFailed')\n break\n case LiFiErrorCode.TransactionExpired:\n title = t('error.title.transactionExpired')\n message = t('error.message.transactionExpired')\n break\n case LiFiErrorCode.TransactionSimulationFailed:\n title = t('error.title.transactionSimulationFailed')\n message = t('error.message.transactionSimulationFailed')\n break\n case LiFiErrorCode.WalletChangedDuringExecution:\n title = t('error.title.walletMismatch')\n message = t('error.message.walletChangedDuringExecution')\n break\n case LiFiErrorCode.RateLimitExceeded:\n title = t('error.title.rateLimitExceeded')\n message = t('error.message.rateLimitExceeded')\n break\n case LiFiErrorCode.ThirdPartyError:\n title = t('error.title.thirdPartyError')\n message = t('error.message.thirdPartyError')\n break\n case LiFiErrorCode.TransactionUnderpriced:\n title = t('error.title.transactionUnderpriced')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.TransactionUnprepared:\n title = t('error.title.transactionUnprepared')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.TransactionCanceled:\n title = t('error.title.transactionCanceled')\n message = getDefaultErrorMessage('error.message.transactionCanceled')\n break\n case LiFiErrorCode.TransactionRejected:\n title = t('error.title.transactionRejected')\n message = getDefaultErrorMessage('error.message.transactionRejected')\n break\n case LiFiErrorCode.TransactionConflict:\n title = t('error.title.transactionConflict')\n message = getDefaultErrorMessage('error.message.transactionConflict')\n break\n case LiFiErrorCode.ExchangeRateUpdateCanceled:\n title = t('error.title.exchangeRateUpdateCanceled')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.SignatureRejected:\n title = t('error.title.signatureRejected')\n message = t('error.message.signatureRejected', {\n amount: formatTokenAmount(\n BigInt(step.action.fromAmount),\n step.action.fromToken.decimals\n ),\n tokenSymbol: step.action.fromToken.symbol,\n chainName: getChainById(step.action.fromChainId)?.name ?? '',\n })\n break\n default:\n title = t('error.title.unknown')\n if (failedAction?.txHash) {\n message = t('error.message.transactionFailed')\n } else {\n message = error.message || t('error.message.unknown')\n }\n break\n }\n message = wrapLongWords(message)\n return { title, message }\n}\n"],"mappings":";;;AASA,SAAgB,gBACd,GACA,cACA,MACA,cACoC;CACpC,MAAM,QAAQ,cAAc;AAC5B,KAAI,CAAC,MACH,QAAO;EACL,OAAO,EAAE,sBAAsB;EAC/B,SAAS,EAAE,wBAAwB;EACpC;CAGH,MAAM,0BAA0B,QAC9B,GAAG,EAAG,OAAe,mCAAmC,CAAC,GAAG,EAC1D,oCACA;EACE,QAAQ,kBACN,OAAO,KAAK,OAAO,WAAW,EAC9B,KAAK,OAAO,UAAU,SACvB;EACD,aAAa,KAAK,OAAO,UAAU;EACnC,WAAW,aAAa,KAAK,OAAO,YAAY,EAAE,QAAQ;EAC3D,CACF;CAEH,IAAI,QAAQ;CACZ,IAAI,UAAU;AACd,SAAQ,MAAM,MAAd;EACE,KAAK,cAAc;AACjB,WAAQ,EAAE,gCAAgC;AAC1C,aAAU,EAAE,mCAAmC,EAC7C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;AACF;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,8BAA8B;AACxC,aAAU,wBAAwB;AAClC;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,0BAA0B;AACpC,aAAU,wBAAwB;AAClC;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,+BAA+B;AACzC,aAAU,wBAAwB;AAClC;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,gCAAgC;AAC1C,aAAU,GAAG,EACX,kCACD,CAAC,GAAG,wBAAwB;AAC7B;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,8BAA8B;AACxC,aAAU,GAAG,EACX,kCACD,CAAC,GAAG,wBAAwB;AAC7B;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,6BAA6B;AACvC,aAAU,EAAE,kCAAkC;AAC9C;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,gCAAgC;AAC1C,aAAU,EAAE,kCAAkC;AAC9C;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,iCAAiC;AAC3C,aAAU,EAAE,mCAAmC;AAC/C;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,0CAA0C;AACpD,aAAU,EAAE,4CAA4C;AACxD;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,6BAA6B;AACvC,aAAU,EAAE,6CAA6C;AACzD;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,gCAAgC;AAC1C,aAAU,EAAE,kCAAkC;AAC9C;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,8BAA8B;AACxC,aAAU,EAAE,gCAAgC;AAC5C;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,qCAAqC;AAC/C,aAAU,wBAAwB;AAClC;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,oCAAoC;AAC9C,aAAU,wBAAwB;AAClC;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,kCAAkC;AAC5C,aAAU,uBAAuB,oCAAoC;AACrE;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,kCAAkC;AAC5C,aAAU,uBAAuB,oCAAoC;AACrE;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,kCAAkC;AAC5C,aAAU,uBAAuB,oCAAoC;AACrE;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,yCAAyC;AACnD,aAAU,wBAAwB;AAClC;EACF,KAAK,cAAc;AACjB,WAAQ,EAAE,gCAAgC;AAC1C,aAAU,EAAE,mCAAmC;IAC7C,QAAQ,kBACN,OAAO,KAAK,OAAO,WAAW,EAC9B,KAAK,OAAO,UAAU,SACvB;IACD,aAAa,KAAK,OAAO,UAAU;IACnC,WAAW,aAAa,KAAK,OAAO,YAAY,EAAE,QAAQ;IAC3D,CAAC;AACF;EACF;AACE,WAAQ,EAAE,sBAAsB;AAChC,OAAI,cAAc,OAChB,WAAU,EAAE,kCAAkC;OAE9C,WAAU,MAAM,WAAW,EAAE,wBAAwB;AAEvD;;AAEJ,WAAU,cAAc,QAAQ;AAChC,QAAO;EAAE;EAAO;EAAS"}
1
+ {"version":3,"file":"getErrorMessage.js","names":[],"sources":["../../../src/utils/getErrorMessage.ts"],"sourcesContent":["import {\n type EVMChain,\n type ExecutionAction,\n LiFiErrorCode,\n type LiFiStepExtended,\n} from '@lifi/sdk'\nimport type { TFunction } from 'i18next'\nimport { formatTokenAmount, wrapLongWords } from '../utils/format.js'\n\nexport function getErrorMessage(\n t: TFunction,\n getChainById: (chainId: number) => EVMChain | undefined,\n step: LiFiStepExtended,\n failedAction?: ExecutionAction\n): { title: string; message: string } {\n const error = failedAction?.error\n if (!error) {\n return {\n title: t('error.title.unknown'),\n message: t('error.message.unknown'),\n }\n }\n\n const getDefaultErrorMessage = (key?: string) =>\n `${t((key as any) ?? 'error.message.transactionNotSent')} ${t(\n 'error.message.remainInYourWallet',\n {\n amount: formatTokenAmount(\n BigInt(step.action.fromAmount),\n step.action.fromToken.decimals\n ),\n tokenSymbol: step.action.fromToken.symbol,\n chainName: getChainById(step.action.fromChainId)?.name ?? '',\n }\n )}`\n\n let title = ''\n let message = ''\n switch (error.code) {\n case LiFiErrorCode.AllowanceRequired:\n title = t('error.title.allowanceRequired')\n message = t('error.message.allowanceRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n })\n break\n case LiFiErrorCode.BalanceError:\n title = t('error.title.balanceIsTooLow')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.ChainSwitchError:\n title = t('error.title.chainSwitch')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.GasLimitError:\n title = t('error.title.gasLimitIsTooLow')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.InsufficientFunds:\n title = t('error.title.insufficientFunds')\n message = `${t(\n 'error.message.insufficientFunds'\n )} ${getDefaultErrorMessage()}`\n break\n case LiFiErrorCode.InsufficientGas:\n title = t('error.title.insufficientGas')\n message = `${t(\n 'error.message.insufficientFunds'\n )} ${getDefaultErrorMessage()}`\n break\n case LiFiErrorCode.SlippageError:\n title = t('error.title.slippageNotMet')\n message = t('error.message.slippageThreshold')\n break\n case LiFiErrorCode.TransactionFailed:\n title = t('error.title.transactionFailed')\n message = t('error.message.transactionFailed')\n break\n case LiFiErrorCode.TransactionExpired:\n title = t('error.title.transactionExpired')\n message = t('error.message.transactionExpired')\n break\n case LiFiErrorCode.TransactionSimulationFailed:\n title = t('error.title.transactionSimulationFailed')\n message = t('error.message.transactionSimulationFailed')\n break\n case LiFiErrorCode.WalletChangedDuringExecution:\n title = t('error.title.walletMismatch')\n message = t('error.message.walletChangedDuringExecution')\n break\n case LiFiErrorCode.RateLimitExceeded:\n title = t('error.title.rateLimitExceeded')\n message = t('error.message.rateLimitExceeded')\n break\n case LiFiErrorCode.ThirdPartyError:\n title = t('error.title.thirdPartyError')\n message = t('error.message.thirdPartyError')\n break\n case LiFiErrorCode.TransactionUnderpriced:\n title = t('error.title.transactionUnderpriced')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.TransactionUnprepared:\n title = t('error.title.transactionUnprepared')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.TransactionCanceled:\n title = t('error.title.transactionCanceled')\n message = getDefaultErrorMessage('error.message.transactionCanceled')\n break\n case LiFiErrorCode.TransactionRejected:\n title = t('error.title.transactionRejected')\n message = getDefaultErrorMessage('error.message.transactionRejected')\n break\n case LiFiErrorCode.TransactionConflict:\n title = t('error.title.transactionConflict')\n message = getDefaultErrorMessage('error.message.transactionConflict')\n break\n case LiFiErrorCode.ExchangeRateUpdateCanceled:\n title = t('error.title.exchangeRateUpdateCanceled')\n message = getDefaultErrorMessage()\n break\n case LiFiErrorCode.SignatureRejected:\n title = t('error.title.signatureRejected')\n message = t('error.message.signatureRejected', {\n amount: formatTokenAmount(\n BigInt(step.action.fromAmount),\n step.action.fromToken.decimals\n ),\n tokenSymbol: step.action.fromToken.symbol,\n chainName: getChainById(step.action.fromChainId)?.name ?? '',\n })\n break\n default:\n title = t('error.title.unknown')\n if (failedAction?.txHash) {\n message = t('error.message.transactionFailed')\n } else {\n message = error.message || t('error.message.unknown')\n }\n break\n }\n message = wrapLongWords(message)\n return { title, message }\n}\n"],"mappings":";;;AASA,SAAgB,gBACd,GACA,cACA,MACA,cACoC;CACpC,MAAM,QAAQ,cAAc;CAC5B,IAAI,CAAC,OACH,OAAO;EACL,OAAO,EAAE,sBAAsB;EAC/B,SAAS,EAAE,wBAAwB;EACpC;CAGH,MAAM,0BAA0B,QAC9B,GAAG,EAAG,OAAe,mCAAmC,CAAC,GAAG,EAC1D,oCACA;EACE,QAAQ,kBACN,OAAO,KAAK,OAAO,WAAW,EAC9B,KAAK,OAAO,UAAU,SACvB;EACD,aAAa,KAAK,OAAO,UAAU;EACnC,WAAW,aAAa,KAAK,OAAO,YAAY,EAAE,QAAQ;EAC3D,CACF;CAEH,IAAI,QAAQ;CACZ,IAAI,UAAU;CACd,QAAQ,MAAM,MAAd;EACE,KAAK,cAAc;GACjB,QAAQ,EAAE,gCAAgC;GAC1C,UAAU,EAAE,mCAAmC,EAC7C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;GACF;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,8BAA8B;GACxC,UAAU,wBAAwB;GAClC;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,0BAA0B;GACpC,UAAU,wBAAwB;GAClC;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,+BAA+B;GACzC,UAAU,wBAAwB;GAClC;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,gCAAgC;GAC1C,UAAU,GAAG,EACX,kCACD,CAAC,GAAG,wBAAwB;GAC7B;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,8BAA8B;GACxC,UAAU,GAAG,EACX,kCACD,CAAC,GAAG,wBAAwB;GAC7B;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,6BAA6B;GACvC,UAAU,EAAE,kCAAkC;GAC9C;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,gCAAgC;GAC1C,UAAU,EAAE,kCAAkC;GAC9C;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,iCAAiC;GAC3C,UAAU,EAAE,mCAAmC;GAC/C;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,0CAA0C;GACpD,UAAU,EAAE,4CAA4C;GACxD;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,6BAA6B;GACvC,UAAU,EAAE,6CAA6C;GACzD;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,gCAAgC;GAC1C,UAAU,EAAE,kCAAkC;GAC9C;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,8BAA8B;GACxC,UAAU,EAAE,gCAAgC;GAC5C;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,qCAAqC;GAC/C,UAAU,wBAAwB;GAClC;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,oCAAoC;GAC9C,UAAU,wBAAwB;GAClC;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,kCAAkC;GAC5C,UAAU,uBAAuB,oCAAoC;GACrE;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,kCAAkC;GAC5C,UAAU,uBAAuB,oCAAoC;GACrE;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,kCAAkC;GAC5C,UAAU,uBAAuB,oCAAoC;GACrE;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,yCAAyC;GACnD,UAAU,wBAAwB;GAClC;EACF,KAAK,cAAc;GACjB,QAAQ,EAAE,gCAAgC;GAC1C,UAAU,EAAE,mCAAmC;IAC7C,QAAQ,kBACN,OAAO,KAAK,OAAO,WAAW,EAC9B,KAAK,OAAO,UAAU,SACvB;IACD,aAAa,KAAK,OAAO,UAAU;IACnC,WAAW,aAAa,KAAK,OAAO,YAAY,EAAE,QAAQ;IAC3D,CAAC;GACF;EACF;GACE,QAAQ,EAAE,sBAAsB;GAChC,IAAI,cAAc,QAChB,UAAU,EAAE,kCAAkC;QAE9C,UAAU,MAAM,WAAW,EAAE,wBAAwB;GAEvD;;CAEJ,UAAU,cAAc,QAAQ;CAChC,OAAO;EAAE;EAAO;EAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"getPriceImpact.js","names":[],"sources":["../../../src/utils/getPriceImpact.ts"],"sourcesContent":["import type { Token } from '@lifi/sdk'\nimport { formatTokenPrice } from './format.js'\n\ninterface GetPriceImpactProps {\n fromToken: Token\n toToken: Token\n fromAmount?: bigint\n toAmount?: bigint\n}\n\nexport const getPriceImpact = ({\n fromToken,\n toToken,\n fromAmount,\n toAmount,\n}: GetPriceImpactProps): number => {\n const fromTokenPrice = formatTokenPrice(\n fromAmount,\n fromToken.priceUSD,\n fromToken.decimals\n )\n const toTokenPrice = formatTokenPrice(\n toAmount,\n toToken.priceUSD,\n toToken.decimals\n )\n\n if (!fromTokenPrice) {\n return 0\n }\n\n const priceImpact = toTokenPrice / fromTokenPrice - 1\n\n return priceImpact\n}\n"],"mappings":";;AAUA,MAAa,kBAAkB,EAC7B,WACA,SACA,YACA,eACiC;CACjC,MAAM,iBAAiB,iBACrB,YACA,UAAU,UACV,UAAU,SACX;CACD,MAAM,eAAe,iBACnB,UACA,QAAQ,UACR,QAAQ,SACT;AAED,KAAI,CAAC,eACH,QAAO;AAKT,QAFoB,eAAe,iBAAiB"}
1
+ {"version":3,"file":"getPriceImpact.js","names":[],"sources":["../../../src/utils/getPriceImpact.ts"],"sourcesContent":["import type { Token } from '@lifi/sdk'\nimport { formatTokenPrice } from './format.js'\n\ninterface GetPriceImpactProps {\n fromToken: Token\n toToken: Token\n fromAmount?: bigint\n toAmount?: bigint\n}\n\nexport const getPriceImpact = ({\n fromToken,\n toToken,\n fromAmount,\n toAmount,\n}: GetPriceImpactProps): number => {\n const fromTokenPrice = formatTokenPrice(\n fromAmount,\n fromToken.priceUSD,\n fromToken.decimals\n )\n const toTokenPrice = formatTokenPrice(\n toAmount,\n toToken.priceUSD,\n toToken.decimals\n )\n\n if (!fromTokenPrice) {\n return 0\n }\n\n const priceImpact = toTokenPrice / fromTokenPrice - 1\n\n return priceImpact\n}\n"],"mappings":";;AAUA,MAAa,kBAAkB,EAC7B,WACA,SACA,YACA,eACiC;CACjC,MAAM,iBAAiB,iBACrB,YACA,UAAU,UACV,UAAU,SACX;CACD,MAAM,eAAe,iBACnB,UACA,QAAQ,UACR,QAAQ,SACT;CAED,IAAI,CAAC,gBACH,OAAO;CAKT,OAFoB,eAAe,iBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","names":[],"sources":["../../../src/utils/input.ts"],"sourcesContent":["export const fitInputText = (\n maxFontSize: number,\n minFontSize: number,\n element: HTMLElement\n): void => {\n if (!element) {\n return\n }\n let high = maxFontSize\n let low = minFontSize\n let size = minFontSize\n let mid = 0\n // Binary search for highest font size best fit\n while (low <= high) {\n mid = (high + low) >> 1\n const fontSize = `${mid + 1}px`\n element.style.fontSize = fontSize\n // scrollWidth has different rounding than clientWidth, remove 1px for consistency\n const scrollWidth = element.scrollWidth - 1\n if (scrollWidth <= element.clientWidth) {\n size = mid\n low = mid + 1\n } else {\n high = mid - 1\n }\n }\n const fontSize = `${size}px`\n element.style.fontSize = fontSize\n}\n"],"mappings":";AAAA,MAAa,gBACX,aACA,aACA,YACS;AACT,KAAI,CAAC,QACH;CAEF,IAAI,OAAO;CACX,IAAI,MAAM;CACV,IAAI,OAAO;CACX,IAAI,MAAM;AAEV,QAAO,OAAO,MAAM;AAClB,QAAO,OAAO,OAAQ;EACtB,MAAM,WAAW,GAAG,MAAM,EAAE;AAC5B,UAAQ,MAAM,WAAW;AAGzB,MADoB,QAAQ,cAAc,KACvB,QAAQ,aAAa;AACtC,UAAO;AACP,SAAM,MAAM;QAEZ,QAAO,MAAM;;CAGjB,MAAM,WAAW,GAAG,KAAK;AACzB,SAAQ,MAAM,WAAW"}
1
+ {"version":3,"file":"input.js","names":[],"sources":["../../../src/utils/input.ts"],"sourcesContent":["export const fitInputText = (\n maxFontSize: number,\n minFontSize: number,\n element: HTMLElement\n): void => {\n if (!element) {\n return\n }\n let high = maxFontSize\n let low = minFontSize\n let size = minFontSize\n let mid = 0\n // Binary search for highest font size best fit\n while (low <= high) {\n mid = (high + low) >> 1\n const fontSize = `${mid + 1}px`\n element.style.fontSize = fontSize\n // scrollWidth has different rounding than clientWidth, remove 1px for consistency\n const scrollWidth = element.scrollWidth - 1\n if (scrollWidth <= element.clientWidth) {\n size = mid\n low = mid + 1\n } else {\n high = mid - 1\n }\n }\n const fontSize = `${size}px`\n element.style.fontSize = fontSize\n}\n"],"mappings":";AAAA,MAAa,gBACX,aACA,aACA,YACS;CACT,IAAI,CAAC,SACH;CAEF,IAAI,OAAO;CACX,IAAI,MAAM;CACV,IAAI,OAAO;CACX,IAAI,MAAM;CAEV,OAAO,OAAO,MAAM;EAClB,MAAO,OAAO,OAAQ;EACtB,MAAM,WAAW,GAAG,MAAM,EAAE;EAC5B,QAAQ,MAAM,WAAW;EAGzB,IADoB,QAAQ,cAAc,KACvB,QAAQ,aAAa;GACtC,OAAO;GACP,MAAM,MAAM;SAEZ,OAAO,MAAM;;CAGjB,MAAM,WAAW,GAAG,KAAK;CACzB,QAAQ,MAAM,WAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","names":[],"sources":["../../../src/utils/item.ts"],"sourcesContent":["import type { FormType } from '../stores/form/types.js'\nimport type {\n AllowDeny,\n AllowDenyItems,\n AllowDenySet,\n AllowDenySetItem,\n AllowDenySets,\n} from '../types/widget.js'\n\n// Use for a single item check\nexport const isItemAllowed = <T>(\n item: T,\n items: AllowDeny<T> | undefined\n): boolean => {\n if (items?.allow?.length) {\n return items.allow.includes(item)\n }\n return !items?.deny?.includes(item)\n}\n\n// Use for a O(1) set lookup of multiple items check\nexport const isItemAllowedForSets = <T>(\n item: T,\n items: AllowDenySet | undefined,\n getKey?: (item: T) => AllowDenySetItem\n): boolean => {\n if (items?.allow?.size) {\n return items.allow.has(getKey?.(item) ?? (item as AllowDenySetItem))\n }\n return !items?.deny?.has(getKey?.(item) ?? (item as AllowDenySetItem))\n}\n\nexport const getConfigItemSets = <T>(\n items: AllowDenyItems<T> | undefined,\n getSet: (items: T[]) => Set<AllowDenySetItem>,\n formType?: FormType\n): AllowDenySets | undefined => {\n if (!items) {\n return undefined\n }\n return {\n allow: getSet(items.allow ?? []),\n deny: getSet(items.deny ?? []),\n ...(formType && {\n [formType]: {\n allow: getSet(items[formType]?.allow ?? []),\n deny: getSet(items[formType]?.deny ?? []),\n },\n }),\n }\n}\n\nexport const isFormItemAllowed = <T>(\n item: T,\n configTokens: AllowDenySets | undefined,\n formType?: FormType,\n getKey?: (item: T) => AllowDenySetItem\n): boolean => {\n return (\n isItemAllowedForSets(item, configTokens, getKey) &&\n (formType\n ? isItemAllowedForSets(item, configTokens?.[formType], getKey)\n : true)\n )\n}\n"],"mappings":";AAUA,MAAa,iBACX,MACA,UACY;AACZ,KAAI,OAAO,OAAO,OAChB,QAAO,MAAM,MAAM,SAAS,KAAK;AAEnC,QAAO,CAAC,OAAO,MAAM,SAAS,KAAK;;AAIrC,MAAa,wBACX,MACA,OACA,WACY;AACZ,KAAI,OAAO,OAAO,KAChB,QAAO,MAAM,MAAM,IAAI,SAAS,KAAK,IAAK,KAA0B;AAEtE,QAAO,CAAC,OAAO,MAAM,IAAI,SAAS,KAAK,IAAK,KAA0B;;AAGxE,MAAa,qBACX,OACA,QACA,aAC8B;AAC9B,KAAI,CAAC,MACH;AAEF,QAAO;EACL,OAAO,OAAO,MAAM,SAAS,EAAE,CAAC;EAChC,MAAM,OAAO,MAAM,QAAQ,EAAE,CAAC;EAC9B,GAAI,YAAY,GACb,WAAW;GACV,OAAO,OAAO,MAAM,WAAW,SAAS,EAAE,CAAC;GAC3C,MAAM,OAAO,MAAM,WAAW,QAAQ,EAAE,CAAC;GAC1C,EACF;EACF;;AAGH,MAAa,qBACX,MACA,cACA,UACA,WACY;AACZ,QACE,qBAAqB,MAAM,cAAc,OAAO,KAC/C,WACG,qBAAqB,MAAM,eAAe,WAAW,OAAO,GAC5D"}
1
+ {"version":3,"file":"item.js","names":[],"sources":["../../../src/utils/item.ts"],"sourcesContent":["import type { FormType } from '../stores/form/types.js'\nimport type {\n AllowDeny,\n AllowDenyItems,\n AllowDenySet,\n AllowDenySetItem,\n AllowDenySets,\n} from '../types/widget.js'\n\n// Use for a single item check\nexport const isItemAllowed = <T>(\n item: T,\n items: AllowDeny<T> | undefined\n): boolean => {\n if (items?.allow?.length) {\n return items.allow.includes(item)\n }\n return !items?.deny?.includes(item)\n}\n\n// Use for a O(1) set lookup of multiple items check\nexport const isItemAllowedForSets = <T>(\n item: T,\n items: AllowDenySet | undefined,\n getKey?: (item: T) => AllowDenySetItem\n): boolean => {\n if (items?.allow?.size) {\n return items.allow.has(getKey?.(item) ?? (item as AllowDenySetItem))\n }\n return !items?.deny?.has(getKey?.(item) ?? (item as AllowDenySetItem))\n}\n\nexport const getConfigItemSets = <T>(\n items: AllowDenyItems<T> | undefined,\n getSet: (items: T[]) => Set<AllowDenySetItem>,\n formType?: FormType\n): AllowDenySets | undefined => {\n if (!items) {\n return undefined\n }\n return {\n allow: getSet(items.allow ?? []),\n deny: getSet(items.deny ?? []),\n ...(formType && {\n [formType]: {\n allow: getSet(items[formType]?.allow ?? []),\n deny: getSet(items[formType]?.deny ?? []),\n },\n }),\n }\n}\n\nexport const isFormItemAllowed = <T>(\n item: T,\n configTokens: AllowDenySets | undefined,\n formType?: FormType,\n getKey?: (item: T) => AllowDenySetItem\n): boolean => {\n return (\n isItemAllowedForSets(item, configTokens, getKey) &&\n (formType\n ? isItemAllowedForSets(item, configTokens?.[formType], getKey)\n : true)\n )\n}\n"],"mappings":";AAUA,MAAa,iBACX,MACA,UACY;CACZ,IAAI,OAAO,OAAO,QAChB,OAAO,MAAM,MAAM,SAAS,KAAK;CAEnC,OAAO,CAAC,OAAO,MAAM,SAAS,KAAK;;AAIrC,MAAa,wBACX,MACA,OACA,WACY;CACZ,IAAI,OAAO,OAAO,MAChB,OAAO,MAAM,MAAM,IAAI,SAAS,KAAK,IAAK,KAA0B;CAEtE,OAAO,CAAC,OAAO,MAAM,IAAI,SAAS,KAAK,IAAK,KAA0B;;AAGxE,MAAa,qBACX,OACA,QACA,aAC8B;CAC9B,IAAI,CAAC,OACH;CAEF,OAAO;EACL,OAAO,OAAO,MAAM,SAAS,EAAE,CAAC;EAChC,MAAM,OAAO,MAAM,QAAQ,EAAE,CAAC;EAC9B,GAAI,YAAY,GACb,WAAW;GACV,OAAO,OAAO,MAAM,WAAW,SAAS,EAAE,CAAC;GAC3C,MAAM,OAAO,MAAM,WAAW,QAAQ,EAAE,CAAC;GAC1C,EACF;EACF;;AAGH,MAAa,qBACX,MACA,cACA,UACA,WACY;CACZ,OACE,qBAAqB,MAAM,cAAc,OAAO,KAC/C,WACG,qBAAqB,MAAM,eAAe,WAAW,OAAO,GAC5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"percentFormatter.js","names":[],"sources":["../../../src/utils/percentFormatter.ts"],"sourcesContent":["/**\n * We use <0.01% for both small positive and negative changes to keep it simple and clear, focusing on minimal impact rather than direction.\n * Examples:\n * +0.007% -> <0.01%\n * -0.003% -> <0.01%\n */\nexport const percentFormatter = (\n lng: string | undefined,\n options: any\n): ((value: any) => string) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...options,\n style: 'percent',\n })\n return (value: any) => {\n if ((value > 0 && value < 0.0001) || (value < 0 && value > -0.0001)) {\n return `<${formatter.format(0.0001)}`\n }\n\n const formattedValue = formatter.format(value)\n\n if (options?.usePlusSign && value > 0) {\n return `+${formattedValue}`\n }\n\n return formattedValue\n }\n}\n"],"mappings":";;;;;;;AAMA,MAAa,oBACX,KACA,YAC6B;CAC7B,MAAM,YAAY,IAAI,KAAK,aAAa,KAAK;EAC3C,GAAG;EACH,OAAO;EACR,CAAC;AACF,SAAQ,UAAe;AACrB,MAAK,QAAQ,KAAK,QAAQ,QAAY,QAAQ,KAAK,QAAQ,MACzD,QAAO,IAAI,UAAU,OAAO,KAAO;EAGrC,MAAM,iBAAiB,UAAU,OAAO,MAAM;AAE9C,MAAI,SAAS,eAAe,QAAQ,EAClC,QAAO,IAAI;AAGb,SAAO"}
1
+ {"version":3,"file":"percentFormatter.js","names":[],"sources":["../../../src/utils/percentFormatter.ts"],"sourcesContent":["/**\n * We use <0.01% for both small positive and negative changes to keep it simple and clear, focusing on minimal impact rather than direction.\n * Examples:\n * +0.007% -> <0.01%\n * -0.003% -> <0.01%\n */\nexport const percentFormatter = (\n lng: string | undefined,\n options: any\n): ((value: any) => string) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...options,\n style: 'percent',\n })\n return (value: any) => {\n if ((value > 0 && value < 0.0001) || (value < 0 && value > -0.0001)) {\n return `<${formatter.format(0.0001)}`\n }\n\n const formattedValue = formatter.format(value)\n\n if (options?.usePlusSign && value > 0) {\n return `+${formattedValue}`\n }\n\n return formattedValue\n }\n}\n"],"mappings":";;;;;;;AAMA,MAAa,oBACX,KACA,YAC6B;CAC7B,MAAM,YAAY,IAAI,KAAK,aAAa,KAAK;EAC3C,GAAG;EACH,OAAO;EACR,CAAC;CACF,QAAQ,UAAe;EACrB,IAAK,QAAQ,KAAK,QAAQ,QAAY,QAAQ,KAAK,QAAQ,OACzD,OAAO,IAAI,UAAU,OAAO,KAAO;EAGrC,MAAM,iBAAiB,UAAU,OAAO,MAAM;EAE9C,IAAI,SAAS,eAAe,QAAQ,GAClC,OAAO,IAAI;EAGb,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepareActions.js","names":[],"sources":["../../../src/utils/prepareActions.ts"],"sourcesContent":["import type { ExecutionAction } from '@lifi/sdk'\n\n// NB: New SDK adds new actions - merge them into old TOKEN_ALLOWANCE before UI changes\nconst allowanceTypes = new Set([\n 'NATIVE_PERMIT',\n 'CHECK_ALLOWANCE',\n 'RESET_ALLOWANCE',\n 'SET_ALLOWANCE',\n])\n\nexport function prepareActions(\n actions: ExecutionAction[]\n): ExecutionAction[][] {\n const groups = new Map<string | number, ExecutionAction[]>()\n for (const action of actions) {\n const key = allowanceTypes.has(action.type)\n ? 'TOKEN_ALLOWANCE'\n : action.type\n const group = groups.get(key)\n if (group) {\n group.push(action)\n } else {\n groups.set(key, [action])\n }\n }\n return [...groups.values()]\n}\n"],"mappings":";AAGA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,eACd,SACqB;CACrB,MAAM,yBAAS,IAAI,KAAyC;AAC5D,MAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,MAAM,eAAe,IAAI,OAAO,KAAK,GACvC,oBACA,OAAO;EACX,MAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,MAAI,MACF,OAAM,KAAK,OAAO;MAElB,QAAO,IAAI,KAAK,CAAC,OAAO,CAAC;;AAG7B,QAAO,CAAC,GAAG,OAAO,QAAQ,CAAC"}
1
+ {"version":3,"file":"prepareActions.js","names":[],"sources":["../../../src/utils/prepareActions.ts"],"sourcesContent":["import type { ExecutionAction } from '@lifi/sdk'\n\n// NB: New SDK adds new actions - merge them into old TOKEN_ALLOWANCE before UI changes\nconst allowanceTypes = new Set([\n 'NATIVE_PERMIT',\n 'CHECK_ALLOWANCE',\n 'RESET_ALLOWANCE',\n 'SET_ALLOWANCE',\n])\n\nexport function prepareActions(\n actions: ExecutionAction[]\n): ExecutionAction[][] {\n const groups = new Map<string | number, ExecutionAction[]>()\n for (const action of actions) {\n const key = allowanceTypes.has(action.type)\n ? 'TOKEN_ALLOWANCE'\n : action.type\n const group = groups.get(key)\n if (group) {\n group.push(action)\n } else {\n groups.set(key, [action])\n }\n }\n return [...groups.values()]\n}\n"],"mappings":";AAGA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,eACd,SACqB;CACrB,MAAM,yBAAS,IAAI,KAAyC;CAC5D,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,MAAM,eAAe,IAAI,OAAO,KAAK,GACvC,oBACA,OAAO;EACX,MAAM,QAAQ,OAAO,IAAI,IAAI;EAC7B,IAAI,OACF,MAAM,KAAK,OAAO;OAElB,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;;CAG7B,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","names":[],"sources":["../../../src/utils/timer.ts"],"sourcesContent":["export const formatTimer = ({\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n locale = 'en',\n}: {\n days?: number\n hours?: number\n minutes?: number\n seconds?: number\n locale?: string\n}): string => {\n if (typeof (Intl as any).DurationFormat === 'function') {\n const time = new (Intl as any).DurationFormat(locale, {\n style: 'digital',\n hours: '2-digit',\n hoursDisplay: 'auto',\n }).format({\n days,\n hours,\n minutes,\n seconds,\n })\n // This handles a fixed bug with Webkit, and Safari\n // https://github.com/WebKit/WebKit/pull/38357\n // https://developer.apple.com/documentation/safari-release-notes/safari-18_4-release-notes#JavaScript\n //\n // Since most users haven't updated their browsers yet, they would have this issue\n // it should be safe to remove the check after a while.\n return time.replace(/^:, /, '')\n }\n\n return ''\n}\n"],"mappings":";AAAA,MAAa,eAAe,EAC1B,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,WAOG;AACZ,KAAI,OAAQ,KAAa,mBAAmB,WAiB1C,QAhBa,IAAK,KAAa,eAAe,QAAQ;EACpD,OAAO;EACP,OAAO;EACP,cAAc;EACf,CAAC,CAAC,OAAO;EACR;EACA;EACA;EACA;EACD,CAAC,CAOU,QAAQ,QAAQ,GAAG;AAGjC,QAAO"}
1
+ {"version":3,"file":"timer.js","names":[],"sources":["../../../src/utils/timer.ts"],"sourcesContent":["export const formatTimer = ({\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n locale = 'en',\n}: {\n days?: number\n hours?: number\n minutes?: number\n seconds?: number\n locale?: string\n}): string => {\n if (typeof (Intl as any).DurationFormat === 'function') {\n const time = new (Intl as any).DurationFormat(locale, {\n style: 'digital',\n hours: '2-digit',\n hoursDisplay: 'auto',\n }).format({\n days,\n hours,\n minutes,\n seconds,\n })\n // This handles a fixed bug with Webkit, and Safari\n // https://github.com/WebKit/WebKit/pull/38357\n // https://developer.apple.com/documentation/safari-release-notes/safari-18_4-release-notes#JavaScript\n //\n // Since most users haven't updated their browsers yet, they would have this issue\n // it should be safe to remove the check after a while.\n return time.replace(/^:, /, '')\n }\n\n return ''\n}\n"],"mappings":";AAAA,MAAa,eAAe,EAC1B,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,WAOG;CACZ,IAAI,OAAQ,KAAa,mBAAmB,YAiB1C,OAhBa,IAAK,KAAa,eAAe,QAAQ;EACpD,OAAO;EACP,OAAO;EACP,cAAc;EACf,CAAC,CAAC,OAAO;EACR;EACA;EACA;EACA;EACD,CAOU,CAAC,QAAQ,QAAQ,GAAG;CAGjC,OAAO"}