@lifi/widget 4.0.0-beta.14 → 4.0.0-beta.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/AppDefault.js +31 -29
- package/dist/esm/AppDefault.js.map +1 -1
- package/dist/esm/AppLayout.js +2 -2
- package/dist/esm/AppLayout.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.js +2 -2
- package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputStartAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
- package/dist/esm/components/AppContainer.js +3 -3
- package/dist/esm/components/AppContainer.js.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
- package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js +7 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
- package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
- package/dist/esm/components/ContractComponent/ItemPrice.js +1 -1
- package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFTBase.js +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Expansion/Expansion.js +4 -4
- package/dist/esm/components/Expansion/Expansion.js.map +1 -1
- package/dist/esm/components/Header/ActivitiesButton.js +1 -1
- package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
- package/dist/esm/components/Header/Header.js +2 -2
- package/dist/esm/components/Header/Header.js.map +1 -1
- package/dist/esm/components/Header/NavigationHeader.js +3 -3
- package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
- package/dist/esm/components/Header/WalletHeader.js +3 -3
- package/dist/esm/components/Header/WalletHeader.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
- package/dist/esm/components/IconTypography.js.map +1 -1
- package/dist/esm/components/Messages/AlertMessage.js +1 -1
- package/dist/esm/components/Messages/AlertMessage.js.map +1 -1
- package/dist/esm/components/PageEntered.js +2 -2
- package/dist/esm/components/PageEntered.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCard.js +2 -2
- package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardEssentials.js +10 -4
- package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteToken.js +2 -2
- package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.js +3 -3
- package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
- package/dist/esm/components/SelectChainAndToken.js +8 -5
- package/dist/esm/components/SelectChainAndToken.js.map +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js +1 -2
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js +4 -4
- package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js +3 -3
- package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
- package/dist/esm/components/Step/Step.js +20 -9
- package/dist/esm/components/Step/Step.js.map +1 -1
- package/dist/esm/components/Step/StepActions.js +2 -2
- package/dist/esm/components/Step/StepActions.js.map +1 -1
- package/dist/esm/components/StepActions/StepActions.js +2 -2
- package/dist/esm/components/StepActions/StepActions.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
- package/dist/esm/components/Timer/StepTimer.js.map +1 -1
- package/dist/esm/components/Timer/TimerContent.js +1 -0
- package/dist/esm/components/Timer/TimerContent.js.map +1 -1
- package/dist/esm/components/Token/Token.js +2 -2
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +6 -4
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
- package/dist/esm/components/TokenList/TokenList.js +2 -2
- package/dist/esm/components/TokenList/TokenList.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.js +2 -2
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +2 -3
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js +5 -2
- package/dist/esm/components/TransactionDetails.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/config/version.js.map +1 -1
- package/dist/esm/hooks/timer/time.js.map +1 -1
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
- package/dist/esm/hooks/useActionMessage.js +2 -2
- package/dist/esm/hooks/useActionMessage.js.map +1 -1
- package/dist/esm/hooks/useAddressActivity.js.map +1 -1
- package/dist/esm/hooks/useAddressValidation.js +3 -8
- package/dist/esm/hooks/useAddressValidation.js.map +1 -1
- package/dist/esm/hooks/useAvailableChains.js +2 -1
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useChain.js.map +1 -1
- package/dist/esm/hooks/useChains.js.map +1 -1
- package/dist/esm/hooks/useContactSupport.js +3 -3
- package/dist/esm/hooks/useContactSupport.js.map +1 -1
- package/dist/esm/hooks/useDebouncedWatch.js.map +1 -1
- package/dist/esm/hooks/useExplorer.js +15 -4
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
- package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
- package/dist/esm/hooks/useGasRecommendation.js +2 -2
- package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
- package/dist/esm/hooks/useGasRefuel.js +2 -2
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js +2 -2
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useHasChainExpansion.js +3 -3
- package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
- package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
- package/dist/esm/hooks/useListHeight.js +2 -2
- package/dist/esm/hooks/useListHeight.js.map +1 -1
- package/dist/esm/hooks/useLongPress.js.map +1 -1
- package/dist/esm/hooks/useNavigateBack.js.map +1 -1
- package/dist/esm/hooks/useRouteExecution.js +5 -7
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js +4 -4
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useScrollableContainer.js.map +1 -1
- package/dist/esm/hooks/useSwapOnly.js.map +1 -1
- package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js +2 -2
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToAddressReset.js +2 -2
- package/dist/esm/hooks/useToAddressReset.js.map +1 -1
- package/dist/esm/hooks/useTokenBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalances.js +2 -2
- package/dist/esm/hooks/useTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.js +4 -2
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
- package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
- package/dist/esm/hooks/useTransactionList.js +2 -3
- package/dist/esm/hooks/useTransactionList.js.map +1 -1
- package/dist/esm/hooks/useWidgetEvents.js.map +1 -1
- package/dist/esm/i18n/bn.json +3 -0
- package/dist/esm/i18n/de.json +3 -0
- package/dist/esm/i18n/en.json +3 -0
- package/dist/esm/i18n/es.json +3 -0
- package/dist/esm/i18n/fr.json +3 -0
- package/dist/esm/i18n/hi.json +3 -0
- package/dist/esm/i18n/id.json +3 -0
- package/dist/esm/i18n/it.json +3 -0
- package/dist/esm/i18n/ja.json +3 -0
- package/dist/esm/i18n/ko.json +3 -0
- package/dist/esm/i18n/pl.json +3 -0
- package/dist/esm/i18n/pt.json +3 -0
- package/dist/esm/i18n/th.json +3 -0
- package/dist/esm/i18n/tr.json +3 -0
- package/dist/esm/i18n/uk.json +3 -0
- package/dist/esm/i18n/vi.json +3 -0
- package/dist/esm/i18n/zh.json +3 -0
- package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -2
- package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js +1 -1
- package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
- package/dist/esm/pages/MainPage/MainPage.js +6 -6
- package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
- package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
- package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.js +3 -3
- package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
- package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +3 -3
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js +6 -6
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +2 -2
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/LanguageSetting.js +2 -2
- package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsPage.js +2 -2
- package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/ThemeSettings.js +2 -2
- package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js +2 -2
- package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js +11 -5
- package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js +2 -2
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +2 -2
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +20 -21
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js +5 -6
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +14 -4
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionPage.js +15 -19
- package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
- package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
- package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
- package/dist/esm/providers/QueryClientProvider.js.map +1 -1
- package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +7 -3
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js +2 -2
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/createChainOrderStore.js +2 -2
- package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
- package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
- package/dist/esm/stores/form/createFormStore.js.map +1 -1
- package/dist/esm/stores/form/useFieldActions.js +3 -3
- package/dist/esm/stores/form/useFieldActions.js.map +1 -1
- package/dist/esm/stores/form/useFieldValues.js.map +1 -1
- package/dist/esm/stores/form/useFormRef.js +2 -2
- package/dist/esm/stores/form/useFormRef.js.map +1 -1
- package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/createRouteExecutionStore.js +8 -9
- package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/useRouteExecutionIndicator.js +2 -3
- package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
- package/dist/esm/stores/routes/utils.js.map +1 -1
- package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/createSettingsStore.js +1 -5
- package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsActions.js +2 -2
- package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
- package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
- package/dist/esm/themes/createTheme.js +4 -4
- package/dist/esm/themes/createTheme.js.map +1 -1
- package/dist/esm/types/events.d.ts +0 -5
- package/dist/esm/types/events.d.ts.map +1 -1
- package/dist/esm/types/events.js +0 -4
- package/dist/esm/types/events.js.map +1 -1
- package/dist/esm/types/widget.d.ts +1 -5
- package/dist/esm/types/widget.d.ts.map +1 -1
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/converters.js.map +1 -1
- package/dist/esm/utils/elements.js +5 -12
- package/dist/esm/utils/elements.js.map +1 -1
- package/dist/esm/utils/format.js.map +1 -1
- package/dist/esm/utils/timer.js.map +1 -1
- package/dist/esm/utils/token.js.map +1 -1
- package/package.json +11 -11
- package/src/AppDefault.tsx +9 -11
- package/src/components/Chains/AllChainsAvatar.tsx +7 -1
- package/src/components/ContractComponent/ItemPrice.tsx +1 -1
- package/src/components/ContractComponent/NFT/NFTBase.tsx +1 -1
- package/src/components/Header/ActivitiesButton.tsx +1 -1
- package/src/components/IconTypography.ts +8 -8
- package/src/components/Messages/AlertMessage.tsx +1 -1
- package/src/components/RouteCard/RouteCardEssentials.tsx +2 -2
- package/src/components/SelectChainAndToken.tsx +1 -1
- package/src/components/SendToWallet/SendToWalletButton.tsx +1 -1
- package/src/components/Step/Step.tsx +6 -7
- package/src/components/Timer/TimerContent.tsx +1 -0
- package/src/components/Token/Token.tsx +2 -2
- package/src/components/TokenList/TokenDetailsSheetContent.tsx +6 -4
- package/src/components/TransactionCard/ActiveTransactionCard.tsx +1 -1
- package/src/components/TransactionDetails.tsx +1 -1
- package/src/config/version.ts +1 -1
- package/src/hooks/useActionMessage.ts +4 -3
- package/src/hooks/useAvailableChains.ts +1 -0
- package/src/hooks/useExplorer.ts +16 -5
- package/src/hooks/useRouteExecution.ts +0 -2
- package/src/hooks/useTokens.ts +2 -0
- package/src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx +1 -1
- package/src/pages/MainPage/MainPage.tsx +3 -3
- package/src/pages/RoutesPage/RoutesPage.tsx +6 -1
- package/src/pages/SendToWallet/BookmarksPage.tsx +1 -1
- package/src/pages/SendToWallet/RecentWalletsPage.tsx +1 -1
- package/src/pages/TransactionDetailsPage/StepActionRow.tsx +3 -2
- package/src/pages/TransactionDetailsPage/StepActionsList.tsx +19 -12
- package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +1 -1
- package/src/pages/TransactionPage/StatusBottomSheet.tsx +1 -1
- package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +27 -5
- package/src/pages/TransactionPage/TransactionPage.tsx +2 -9
- package/src/providers/WalletProvider/useExternalWalletProvider.ts +9 -1
- package/src/stores/settings/createSettingsStore.ts +1 -9
- package/src/themes/createTheme.ts +4 -6
- package/src/types/events.ts +0 -5
- package/src/types/widget.ts +1 -4
- package/dist/esm/stores/routes/types.js +0 -14
- package/dist/esm/stores/routes/types.js.map +0 -1
|
@@ -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,17 +1,10 @@
|
|
|
1
1
|
//#region src/utils/elements.ts
|
|
2
|
-
let ElementId = /* @__PURE__ */ function(ElementId) {
|
|
3
|
-
ElementId["AppExpandedContainer"] = "widget-app-expanded-container";
|
|
4
|
-
ElementId["Header"] = "widget-header";
|
|
5
|
-
ElementId["RelativeContainer"] = "widget-relative-container";
|
|
6
|
-
ElementId["ScrollableContainer"] = "widget-scrollable-container";
|
|
7
|
-
return ElementId;
|
|
8
|
-
}({});
|
|
9
2
|
const createElementId = (ElementId, elementId) => elementId ? `${ElementId}-${elementId}` : ElementId;
|
|
10
|
-
const getAppContainer = (elementId) => document.getElementById(createElementId(
|
|
11
|
-
const getRelativeContainer = (elementId) => document.getElementById(createElementId(
|
|
12
|
-
const getScrollableContainer = (elementId) => document.getElementById(createElementId(
|
|
13
|
-
const getHeaderElement = (elementId) => document.getElementById(createElementId(
|
|
3
|
+
const getAppContainer = (elementId) => document.getElementById(createElementId("widget-app-expanded-container", elementId));
|
|
4
|
+
const getRelativeContainer = (elementId) => document.getElementById(createElementId("widget-relative-container", elementId));
|
|
5
|
+
const getScrollableContainer = (elementId) => document.getElementById(createElementId("widget-scrollable-container", elementId));
|
|
6
|
+
const getHeaderElement = (elementId) => document.getElementById(createElementId("widget-header", elementId));
|
|
14
7
|
//#endregion
|
|
15
|
-
export {
|
|
8
|
+
export { createElementId, getAppContainer, getHeaderElement, getRelativeContainer, getScrollableContainer };
|
|
16
9
|
|
|
17
10
|
//# sourceMappingURL=elements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements.js","names":[],"sources":["../../../src/utils/elements.ts"],"sourcesContent":["export enum ElementId {\n AppExpandedContainer = 'widget-app-expanded-container',\n Header = 'widget-header',\n RelativeContainer = 'widget-relative-container',\n ScrollableContainer = 'widget-scrollable-container',\n}\n\nexport const createElementId = (\n ElementId: ElementId,\n elementId: string\n): string => (elementId ? `${ElementId}-${elementId}` : ElementId)\n\n// NOTE: The getter functions here are often used with code that can be effected by css changes in the\n// AppExpandedContainer, RelativeContainer and CssBaselineContainer components as defined in AppContainer.ts\n\nexport const getAppContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.AppExpandedContainer, elementId)\n )\n\nexport const getRelativeContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.RelativeContainer, elementId)\n )\n\nexport const getScrollableContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.ScrollableContainer, elementId)\n )\n\nexport const getHeaderElement = (elementId: string): HTMLElement | null =>\n document.getElementById(createElementId(ElementId.Header, elementId))\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"elements.js","names":[],"sources":["../../../src/utils/elements.ts"],"sourcesContent":["export enum ElementId {\n AppExpandedContainer = 'widget-app-expanded-container',\n Header = 'widget-header',\n RelativeContainer = 'widget-relative-container',\n ScrollableContainer = 'widget-scrollable-container',\n}\n\nexport const createElementId = (\n ElementId: ElementId,\n elementId: string\n): string => (elementId ? `${ElementId}-${elementId}` : ElementId)\n\n// NOTE: The getter functions here are often used with code that can be effected by css changes in the\n// AppExpandedContainer, RelativeContainer and CssBaselineContainer components as defined in AppContainer.ts\n\nexport const getAppContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.AppExpandedContainer, elementId)\n )\n\nexport const getRelativeContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.RelativeContainer, elementId)\n )\n\nexport const getScrollableContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.ScrollableContainer, elementId)\n )\n\nexport const getHeaderElement = (elementId: string): HTMLElement | null =>\n document.getElementById(createElementId(ElementId.Header, elementId))\n"],"mappings":";AAOA,MAAa,mBACX,WACA,cACY,YAAY,GAAG,UAAU,GAAG,cAAc;AAKxD,MAAa,mBAAmB,cAC9B,SAAS,eACP,gBAAA,iCAAgD,UAAU,CAC3D;AAEH,MAAa,wBAAwB,cACnC,SAAS,eACP,gBAAA,6BAA6C,UAAU,CACxD;AAEH,MAAa,0BAA0B,cACrC,SAAS,eACP,gBAAA,+BAA+C,UAAU,CAC1D;AAEH,MAAa,oBAAoB,cAC/B,SAAS,eAAe,gBAAA,iBAAkC,UAAU,CAAC"}
|
|
@@ -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":";;AAEA,MAAa,cAAc;;;;;;AAO3B,SAAgB,kBACd,QACA,UACQ;CACR,MAAM,kBAAkB,SAAS,YAAY,QAAQ,SAAS,GAAG;AAEjE,KAAI,CADiB,OAAO,WAAW,
|
|
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 +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,
|
|
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,CAOU,CAAC,QAAQ,QAAQ,GAAG;AAGjC,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","names":[],"sources":["../../../src/utils/token.ts"],"sourcesContent":["import type { BaseToken, Token, TokenExtended } from '@lifi/sdk'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport type { WidgetChains, WidgetTokens } from '../types/widget.js'\nimport { getConfigItemSets, isFormItemAllowed } from './item.js'\n\n/**\n * Merges verified tokens with search tokens.\n * Verified tokens take priority - search tokens are only added if they don't already exist.\n */\nexport const mergeVerifiedWithSearchTokens = (\n verifiedTokens?: TokensByChain,\n searchTokens?: TokensByChain\n): TokensByChain | undefined => {\n if (!verifiedTokens) {\n return searchTokens\n }\n if (!searchTokens) {\n return verifiedTokens\n }\n\n const result = { ...verifiedTokens }\n\n for (const [chainId, tokens] of Object.entries(searchTokens)) {\n const chainIdNum = Number(chainId)\n const existingTokens = result[chainIdNum] || []\n const existingAddresses = new Set(\n existingTokens.map((t) => t.address.toLowerCase())\n )\n\n const newTokens = tokens.filter(\n (t) => !existingAddresses.has(t.address.toLowerCase())\n )\n\n if (newTokens.length) {\n result[chainIdNum] = [...existingTokens, ...newTokens]\n }\n }\n\n return result\n}\n\n/**\n * Updates a token in the cache by chainId and address.\n * Returns a new cache object with the token updated, or the original if not found.\n */\nexport const updateTokenInCache = (\n data: TokensByChain | undefined,\n token: Token\n): TokensByChain | undefined => {\n if (!data) {\n return data\n }\n const chainTokens = data[token.chainId]\n if (!chainTokens) {\n return data\n }\n const index = chainTokens.findIndex((t) => t.address === token.address)\n if (index < 0) {\n return data\n }\n return {\n ...data,\n [token.chainId]: chainTokens.map((t, i) =>\n i === index ? { ...t, ...token } : t\n ),\n }\n}\n\nexport const filterAllowedTokens = (\n dataTokens: { [chainId: number]: TokenExtended[] } | undefined,\n configTokens?: WidgetTokens,\n chainsConfig?: WidgetChains,\n formType?: FormType\n): { [chainId: number]: TokenExtended[] } | undefined => {\n if (!dataTokens) {\n return\n }\n\n const includedTokens = configTokens?.include || []\n const allChainIds = Array.from(\n new Set([\n ...includedTokens.map((t) => t.chainId),\n ...Object.keys(dataTokens),\n ])\n ).map((chainId) => Number(chainId))\n\n const configChainIdsSet = getConfigItemSets(\n chainsConfig,\n (chainIds: number[]) => new Set(chainIds),\n formType\n )\n\n const allowedChainIds = configChainIdsSet\n ? allChainIds.filter((chainId) =>\n isFormItemAllowed(chainId, configChainIdsSet, formType)\n )\n : allChainIds\n\n const allowedTokensByChain: { [chainId: number]: TokenExtended[] } = {}\n for (const chainId of allowedChainIds) {\n const chainTokens = [\n ...dataTokens[chainId],\n ...includedTokens.filter((t) => Number(t.chainId) === chainId),\n ]\n\n const allowedAddresses = getConfigItemSets(\n configTokens,\n (tokens: BaseToken[]) =>\n new Set(\n tokens\n .filter((t) => Number(t.chainId) === chainId)\n .map((t) => t.address.toLowerCase())\n ),\n formType\n )\n\n const filtered = chainTokens.filter((token) =>\n isFormItemAllowed(token, allowedAddresses, formType, (t) =>\n t.address.toLowerCase()\n )\n )\n\n allowedTokensByChain[chainId] = filtered\n }\n\n return allowedTokensByChain\n}\n"],"mappings":";;;;;;AAUA,MAAa,iCACX,gBACA,iBAC8B;AAC9B,KAAI,CAAC,eACH,QAAO;AAET,KAAI,CAAC,aACH,QAAO;CAGT,MAAM,SAAS,EAAE,GAAG,gBAAgB;AAEpC,MAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,aAAa,EAAE;EAC5D,MAAM,aAAa,OAAO,QAAQ;EAClC,MAAM,iBAAiB,OAAO,eAAe,EAAE;EAC/C,MAAM,oBAAoB,IAAI,IAC5B,eAAe,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACnD;EAED,MAAM,YAAY,OAAO,QACtB,MAAM,CAAC,kBAAkB,IAAI,EAAE,QAAQ,aAAa,CAAC,CACvD;AAED,MAAI,UAAU,OACZ,QAAO,cAAc,CAAC,GAAG,gBAAgB,GAAG,UAAU;;AAI1D,QAAO;;;;;;AAOT,MAAa,sBACX,MACA,UAC8B;AAC9B,KAAI,CAAC,KACH,QAAO;CAET,MAAM,cAAc,KAAK,MAAM;AAC/B,KAAI,CAAC,YACH,QAAO;CAET,MAAM,QAAQ,YAAY,WAAW,MAAM,EAAE,YAAY,MAAM,QAAQ;AACvE,KAAI,QAAQ,EACV,QAAO;AAET,QAAO;EACL,GAAG;GACF,MAAM,UAAU,YAAY,KAAK,GAAG,MACnC,MAAM,QAAQ;GAAE,GAAG;GAAG,GAAG;GAAO,GAAG,EACpC;EACF;;AAGH,MAAa,uBACX,YACA,cACA,cACA,aACuD;AACvD,KAAI,CAAC,WACH;CAGF,MAAM,iBAAiB,cAAc,WAAW,EAAE;CAClD,MAAM,cAAc,MAAM,KACxB,IAAI,IAAI,CACN,GAAG,eAAe,KAAK,MAAM,EAAE,QAAQ,EACvC,GAAG,OAAO,KAAK,WAAW,CAC3B,CAAC,CACH,CAAC,KAAK,YAAY,OAAO,QAAQ,CAAC;CAEnC,MAAM,oBAAoB,kBACxB,eACC,aAAuB,IAAI,IAAI,SAAS,EACzC,SACD;CAED,MAAM,kBAAkB,oBACpB,YAAY,QAAQ,YAClB,kBAAkB,SAAS,mBAAmB,SAAS,CACxD,GACD;CAEJ,MAAM,uBAA+D,EAAE;AACvE,MAAK,MAAM,WAAW,iBAAiB;EACrC,MAAM,cAAc,CAClB,GAAG,WAAW,UACd,GAAG,eAAe,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC/D;EAED,MAAM,mBAAmB,kBACvB,eACC,WACC,IAAI,IACF,OACG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC5C,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACvC,EACH,SACD;AAQD,uBAAqB,WANJ,YAAY,QAAQ,UACnC,kBAAkB,OAAO,kBAAkB,WAAW,MACpD,EAAE,QAAQ,aAAa,CACxB,
|
|
1
|
+
{"version":3,"file":"token.js","names":[],"sources":["../../../src/utils/token.ts"],"sourcesContent":["import type { BaseToken, Token, TokenExtended } from '@lifi/sdk'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport type { WidgetChains, WidgetTokens } from '../types/widget.js'\nimport { getConfigItemSets, isFormItemAllowed } from './item.js'\n\n/**\n * Merges verified tokens with search tokens.\n * Verified tokens take priority - search tokens are only added if they don't already exist.\n */\nexport const mergeVerifiedWithSearchTokens = (\n verifiedTokens?: TokensByChain,\n searchTokens?: TokensByChain\n): TokensByChain | undefined => {\n if (!verifiedTokens) {\n return searchTokens\n }\n if (!searchTokens) {\n return verifiedTokens\n }\n\n const result = { ...verifiedTokens }\n\n for (const [chainId, tokens] of Object.entries(searchTokens)) {\n const chainIdNum = Number(chainId)\n const existingTokens = result[chainIdNum] || []\n const existingAddresses = new Set(\n existingTokens.map((t) => t.address.toLowerCase())\n )\n\n const newTokens = tokens.filter(\n (t) => !existingAddresses.has(t.address.toLowerCase())\n )\n\n if (newTokens.length) {\n result[chainIdNum] = [...existingTokens, ...newTokens]\n }\n }\n\n return result\n}\n\n/**\n * Updates a token in the cache by chainId and address.\n * Returns a new cache object with the token updated, or the original if not found.\n */\nexport const updateTokenInCache = (\n data: TokensByChain | undefined,\n token: Token\n): TokensByChain | undefined => {\n if (!data) {\n return data\n }\n const chainTokens = data[token.chainId]\n if (!chainTokens) {\n return data\n }\n const index = chainTokens.findIndex((t) => t.address === token.address)\n if (index < 0) {\n return data\n }\n return {\n ...data,\n [token.chainId]: chainTokens.map((t, i) =>\n i === index ? { ...t, ...token } : t\n ),\n }\n}\n\nexport const filterAllowedTokens = (\n dataTokens: { [chainId: number]: TokenExtended[] } | undefined,\n configTokens?: WidgetTokens,\n chainsConfig?: WidgetChains,\n formType?: FormType\n): { [chainId: number]: TokenExtended[] } | undefined => {\n if (!dataTokens) {\n return\n }\n\n const includedTokens = configTokens?.include || []\n const allChainIds = Array.from(\n new Set([\n ...includedTokens.map((t) => t.chainId),\n ...Object.keys(dataTokens),\n ])\n ).map((chainId) => Number(chainId))\n\n const configChainIdsSet = getConfigItemSets(\n chainsConfig,\n (chainIds: number[]) => new Set(chainIds),\n formType\n )\n\n const allowedChainIds = configChainIdsSet\n ? allChainIds.filter((chainId) =>\n isFormItemAllowed(chainId, configChainIdsSet, formType)\n )\n : allChainIds\n\n const allowedTokensByChain: { [chainId: number]: TokenExtended[] } = {}\n for (const chainId of allowedChainIds) {\n const chainTokens = [\n ...dataTokens[chainId],\n ...includedTokens.filter((t) => Number(t.chainId) === chainId),\n ]\n\n const allowedAddresses = getConfigItemSets(\n configTokens,\n (tokens: BaseToken[]) =>\n new Set(\n tokens\n .filter((t) => Number(t.chainId) === chainId)\n .map((t) => t.address.toLowerCase())\n ),\n formType\n )\n\n const filtered = chainTokens.filter((token) =>\n isFormItemAllowed(token, allowedAddresses, formType, (t) =>\n t.address.toLowerCase()\n )\n )\n\n allowedTokensByChain[chainId] = filtered\n }\n\n return allowedTokensByChain\n}\n"],"mappings":";;;;;;AAUA,MAAa,iCACX,gBACA,iBAC8B;AAC9B,KAAI,CAAC,eACH,QAAO;AAET,KAAI,CAAC,aACH,QAAO;CAGT,MAAM,SAAS,EAAE,GAAG,gBAAgB;AAEpC,MAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,aAAa,EAAE;EAC5D,MAAM,aAAa,OAAO,QAAQ;EAClC,MAAM,iBAAiB,OAAO,eAAe,EAAE;EAC/C,MAAM,oBAAoB,IAAI,IAC5B,eAAe,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACnD;EAED,MAAM,YAAY,OAAO,QACtB,MAAM,CAAC,kBAAkB,IAAI,EAAE,QAAQ,aAAa,CAAC,CACvD;AAED,MAAI,UAAU,OACZ,QAAO,cAAc,CAAC,GAAG,gBAAgB,GAAG,UAAU;;AAI1D,QAAO;;;;;;AAOT,MAAa,sBACX,MACA,UAC8B;AAC9B,KAAI,CAAC,KACH,QAAO;CAET,MAAM,cAAc,KAAK,MAAM;AAC/B,KAAI,CAAC,YACH,QAAO;CAET,MAAM,QAAQ,YAAY,WAAW,MAAM,EAAE,YAAY,MAAM,QAAQ;AACvE,KAAI,QAAQ,EACV,QAAO;AAET,QAAO;EACL,GAAG;GACF,MAAM,UAAU,YAAY,KAAK,GAAG,MACnC,MAAM,QAAQ;GAAE,GAAG;GAAG,GAAG;GAAO,GAAG,EACpC;EACF;;AAGH,MAAa,uBACX,YACA,cACA,cACA,aACuD;AACvD,KAAI,CAAC,WACH;CAGF,MAAM,iBAAiB,cAAc,WAAW,EAAE;CAClD,MAAM,cAAc,MAAM,KACxB,IAAI,IAAI,CACN,GAAG,eAAe,KAAK,MAAM,EAAE,QAAQ,EACvC,GAAG,OAAO,KAAK,WAAW,CAC3B,CAAC,CACH,CAAC,KAAK,YAAY,OAAO,QAAQ,CAAC;CAEnC,MAAM,oBAAoB,kBACxB,eACC,aAAuB,IAAI,IAAI,SAAS,EACzC,SACD;CAED,MAAM,kBAAkB,oBACpB,YAAY,QAAQ,YAClB,kBAAkB,SAAS,mBAAmB,SAAS,CACxD,GACD;CAEJ,MAAM,uBAA+D,EAAE;AACvE,MAAK,MAAM,WAAW,iBAAiB;EACrC,MAAM,cAAc,CAClB,GAAG,WAAW,UACd,GAAG,eAAe,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC/D;EAED,MAAM,mBAAmB,kBACvB,eACC,WACC,IAAI,IACF,OACG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC5C,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACvC,EACH,SACD;AAQD,uBAAqB,WANJ,YAAY,QAAQ,UACnC,kBAAkB,OAAO,kBAAkB,WAAW,MACpD,EAAE,QAAQ,aAAa,CACxB,CAGqC;;AAG1C,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/widget",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.18",
|
|
4
4
|
"description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/esm/index.js",
|
|
@@ -34,21 +34,21 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@emotion/react": "^11.14.0",
|
|
36
36
|
"@emotion/styled": "^11.14.1",
|
|
37
|
-
"@lifi/sdk": "4.0.0-beta.
|
|
38
|
-
"@mui/icons-material": "^
|
|
39
|
-
"@mui/material": "^
|
|
40
|
-
"@mui/system": "^
|
|
41
|
-
"@tanstack/react-router": "^1.168.
|
|
42
|
-
"@tanstack/react-virtual": "^3.13.
|
|
43
|
-
"i18next": "^26.0.
|
|
37
|
+
"@lifi/sdk": "^4.0.0-beta.8",
|
|
38
|
+
"@mui/icons-material": "^9.0.0",
|
|
39
|
+
"@mui/material": "^9.0.0",
|
|
40
|
+
"@mui/system": "^9.0.0",
|
|
41
|
+
"@tanstack/react-router": "^1.168.26",
|
|
42
|
+
"@tanstack/react-virtual": "^3.13.24",
|
|
43
|
+
"i18next": "^26.0.8",
|
|
44
44
|
"microdiff": "^1.5.0",
|
|
45
45
|
"mitt": "^3.0.1",
|
|
46
|
-
"react-i18next": "^17.0.
|
|
46
|
+
"react-i18next": "^17.0.6",
|
|
47
47
|
"react-intersection-observer": "^10.0.3",
|
|
48
48
|
"react-transition-group": "^4.4.5",
|
|
49
49
|
"zustand": "^5.0.12",
|
|
50
|
-
"@lifi/wallet-management": "4.0.0-beta.
|
|
51
|
-
"@lifi/widget-provider": "4.0.0-beta.
|
|
50
|
+
"@lifi/wallet-management": "4.0.0-beta.18",
|
|
51
|
+
"@lifi/widget-provider": "4.0.0-beta.18"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"@tanstack/react-query": ">=5.90.0",
|
package/src/AppDefault.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
RouterProvider,
|
|
7
7
|
} from '@tanstack/react-router'
|
|
8
8
|
import type { JSX } from 'react'
|
|
9
|
+
import { useState } from 'react'
|
|
9
10
|
import { AppLayout } from './AppLayout.js'
|
|
10
11
|
import { NotFound } from './components/NotFound.js'
|
|
11
12
|
import { ActivitiesPage } from './pages/ActivitiesPage/ActivitiesPage.js'
|
|
@@ -247,22 +248,19 @@ const routeTree = rootRoute.addChildren([
|
|
|
247
248
|
configuredWalletsRoute,
|
|
248
249
|
])
|
|
249
250
|
|
|
250
|
-
const history = createMemoryHistory({
|
|
251
|
-
initialEntries: ['/'],
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
const router: ReturnType<typeof createRouter> = createRouter({
|
|
255
|
-
routeTree,
|
|
256
|
-
history,
|
|
257
|
-
defaultPreload: 'intent',
|
|
258
|
-
})
|
|
259
|
-
|
|
260
251
|
declare module '@tanstack/react-router' {
|
|
261
252
|
interface Register {
|
|
262
|
-
router: typeof
|
|
253
|
+
router: ReturnType<typeof createRouter>
|
|
263
254
|
}
|
|
264
255
|
}
|
|
265
256
|
|
|
266
257
|
export const AppDefault = (): JSX.Element => {
|
|
258
|
+
const [router] = useState(() =>
|
|
259
|
+
createRouter({
|
|
260
|
+
routeTree,
|
|
261
|
+
history: createMemoryHistory({ initialEntries: ['/'] }),
|
|
262
|
+
defaultPreload: 'intent',
|
|
263
|
+
})
|
|
264
|
+
)
|
|
267
265
|
return <RouterProvider router={router} />
|
|
268
266
|
}
|
|
@@ -38,9 +38,15 @@ const chainTypeIcons = [
|
|
|
38
38
|
icon: 'https://lifinance.github.io/types/src/assets/icons/chains/sui.svg',
|
|
39
39
|
defaultChainId: ChainId.SUI,
|
|
40
40
|
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Tron',
|
|
43
|
+
chainType: ChainType.TVM,
|
|
44
|
+
icon: 'https://lifinance.github.io/types/src/assets/icons/chains/tron.svg',
|
|
45
|
+
defaultChainId: ChainId.TRN,
|
|
46
|
+
},
|
|
41
47
|
]
|
|
42
48
|
|
|
43
|
-
const maxChainAvatarsCount =
|
|
49
|
+
const maxChainAvatarsCount = 4
|
|
44
50
|
|
|
45
51
|
export const AllChainsAvatar: React.NamedExoticComponent<AllChainsAvatarProps> =
|
|
46
52
|
memo(({ chains, size }: AllChainsAvatarProps): JSX.Element => {
|
|
@@ -25,7 +25,7 @@ export const ActivitiesButton = (): JSX.Element => {
|
|
|
25
25
|
active={indicator.active || indicator.failed}
|
|
26
26
|
size="medium"
|
|
27
27
|
onClick={() => navigate({ to: navigationRoutes.activities })}
|
|
28
|
-
disableRipple
|
|
28
|
+
disableRipple={indicator.active || indicator.failed}
|
|
29
29
|
>
|
|
30
30
|
<ErrorBadge
|
|
31
31
|
invisible={!indicator.failed}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import type { BoxProps } from '@mui/material'
|
|
1
2
|
import { Box, styled } from '@mui/material'
|
|
2
3
|
import type React from 'react'
|
|
3
4
|
|
|
4
|
-
export const IconTypography: React.FC<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}))
|
|
5
|
+
export const IconTypography: React.FC<BoxProps> = styled(Box)(({ theme }) => ({
|
|
6
|
+
color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 40%, transparent)`,
|
|
7
|
+
lineHeight: 0,
|
|
8
|
+
...theme.applyStyles('dark', {
|
|
9
|
+
color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 32%, transparent)`,
|
|
10
|
+
}),
|
|
11
|
+
}))
|
|
@@ -51,7 +51,7 @@ export const RouteCardEssentials: React.FC<RouteCardEssentialsProps> = ({
|
|
|
51
51
|
alignItems: 'center',
|
|
52
52
|
}}
|
|
53
53
|
>
|
|
54
|
-
<IconTypography
|
|
54
|
+
<IconTypography component="span" sx={{ mr: 0.5, fontSize: 16 }}>
|
|
55
55
|
<LocalGasStationRounded fontSize="inherit" />
|
|
56
56
|
</IconTypography>
|
|
57
57
|
<Typography
|
|
@@ -78,7 +78,7 @@ export const RouteCardEssentials: React.FC<RouteCardEssentialsProps> = ({
|
|
|
78
78
|
alignItems: 'center',
|
|
79
79
|
}}
|
|
80
80
|
>
|
|
81
|
-
<IconTypography
|
|
81
|
+
<IconTypography component="span" sx={{ mr: 0.5, fontSize: 16 }}>
|
|
82
82
|
<AccessTimeFilled fontSize="inherit" />
|
|
83
83
|
</IconTypography>
|
|
84
84
|
<Typography
|
|
@@ -24,7 +24,7 @@ export const SelectChainAndToken: React.FC<BoxProps> = (props) => {
|
|
|
24
24
|
const showReverseButton = !hiddenToToken && !hiddenFromToken
|
|
25
25
|
|
|
26
26
|
return (
|
|
27
|
-
<Box sx={{ display: 'flex'
|
|
27
|
+
<Box {...props} sx={{ display: 'flex', ...props.sx }}>
|
|
28
28
|
{!hiddenFromToken ? (
|
|
29
29
|
<SelectTokenButton formType="from" hiddenReverse={hiddenReverse} />
|
|
30
30
|
) : null}
|
|
@@ -172,7 +172,7 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
|
|
|
172
172
|
subheader={headerSubheader}
|
|
173
173
|
selected={!!toAddressFieldValue || disabledToAddress}
|
|
174
174
|
action={
|
|
175
|
-
|
|
175
|
+
toAddressFieldValue && !disabledForChanges ? (
|
|
176
176
|
<CardIconButton onClick={clearSelectedBookmark} size="small">
|
|
177
177
|
<CloseRounded fontSize="inherit" />
|
|
178
178
|
</CardIconButton>
|
|
@@ -87,18 +87,18 @@ export const Step: React.FC<{
|
|
|
87
87
|
flex: 1,
|
|
88
88
|
}}
|
|
89
89
|
>
|
|
90
|
-
<CardTitle
|
|
91
|
-
<
|
|
90
|
+
<CardTitle sx={{ flex: 1 }}>{getCardTitle()}</CardTitle>
|
|
91
|
+
<Box sx={{ p: 2, pb: 0, fontSize: 14, fontWeight: 600 }}>
|
|
92
92
|
<StepTimer step={step} />
|
|
93
|
-
</
|
|
93
|
+
</Box>
|
|
94
94
|
</Box>
|
|
95
95
|
<Box
|
|
96
96
|
sx={{
|
|
97
97
|
py: 1,
|
|
98
98
|
}}
|
|
99
99
|
>
|
|
100
|
-
{fromToken ? <Token token={fromToken}
|
|
101
|
-
<StepActions step={step}
|
|
100
|
+
{fromToken ? <Token token={fromToken} sx={{ px: 2, py: 1 }} /> : null}
|
|
101
|
+
<StepActions step={step} sx={{ px: 2, py: 1 }} dense />
|
|
102
102
|
{prepareActions(step.execution?.actions ?? []).map(
|
|
103
103
|
(actionsGroup, index) => (
|
|
104
104
|
<StepAction key={index} step={step} actionsGroup={actionsGroup} />
|
|
@@ -128,8 +128,7 @@ export const Step: React.FC<{
|
|
|
128
128
|
token={toToken}
|
|
129
129
|
impactToken={impactToken}
|
|
130
130
|
enableImpactTokenTooltip
|
|
131
|
-
|
|
132
|
-
py={1}
|
|
131
|
+
sx={{ px: 2, py: 1 }}
|
|
133
132
|
/>
|
|
134
133
|
) : null}
|
|
135
134
|
</Box>
|
|
@@ -151,7 +151,7 @@ const TokenBase: FC<TokenProps & BoxProps> = ({
|
|
|
151
151
|
})}
|
|
152
152
|
</TextSecondary>
|
|
153
153
|
{impactToken ? (
|
|
154
|
-
<TextSecondary
|
|
154
|
+
<TextSecondary sx={{ px: 0.5 }} dot>
|
|
155
155
|
•
|
|
156
156
|
</TextSecondary>
|
|
157
157
|
) : null}
|
|
@@ -176,7 +176,7 @@ const TokenBase: FC<TokenProps & BoxProps> = ({
|
|
|
176
176
|
)
|
|
177
177
|
) : null}
|
|
178
178
|
{!disableDescription ? (
|
|
179
|
-
<TextSecondary
|
|
179
|
+
<TextSecondary sx={{ px: 0.5 }} dot>
|
|
180
180
|
•
|
|
181
181
|
</TextSecondary>
|
|
182
182
|
) : null}
|
|
@@ -75,10 +75,12 @@ export const TokenDetailsSheetContent: React.ForwardRefExoticComponent<
|
|
|
75
75
|
) : (
|
|
76
76
|
<>
|
|
77
77
|
<Typography
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
sx={{
|
|
79
|
+
fontWeight: 700,
|
|
80
|
+
fontSize: '24px',
|
|
81
|
+
lineHeight: '24px',
|
|
82
|
+
color: 'text.primary',
|
|
83
|
+
}}
|
|
82
84
|
>
|
|
83
85
|
{token?.symbol || noDataLabel}
|
|
84
86
|
</Typography>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RouteExtended } from '@lifi/sdk'
|
|
2
|
-
import DeleteOutline from '@mui/icons-material/
|
|
2
|
+
import DeleteOutline from '@mui/icons-material/DeleteOutlined'
|
|
3
3
|
import { Box, Tooltip, Typography } from '@mui/material'
|
|
4
4
|
import type { JSX, MouseEvent } from 'react'
|
|
5
5
|
import { useTranslation } from 'react-i18next'
|
|
@@ -113,7 +113,7 @@ export const TransactionDetails: React.FC<TransactionDetailsProps> = ({
|
|
|
113
113
|
cursor: 'pointer',
|
|
114
114
|
}}
|
|
115
115
|
>
|
|
116
|
-
<IconTypography
|
|
116
|
+
<IconTypography component="span" sx={{ mr: 0.5, fontSize: 16 }}>
|
|
117
117
|
<LocalGasStationRounded fontSize="inherit" />
|
|
118
118
|
</IconTypography>
|
|
119
119
|
<Typography
|
package/src/config/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = '@lifi/widget'
|
|
2
|
-
export const version = '4.0.0-beta.
|
|
2
|
+
export const version = '4.0.0-beta.18'
|
|
@@ -7,7 +7,8 @@ import { useAvailableChains } from './useAvailableChains.js'
|
|
|
7
7
|
|
|
8
8
|
export const useActionMessage = (
|
|
9
9
|
step?: LiFiStepExtended,
|
|
10
|
-
action?: ExecutionAction
|
|
10
|
+
action?: ExecutionAction,
|
|
11
|
+
defaultLabelsOnly?: boolean
|
|
11
12
|
): { title?: string; message?: string } => {
|
|
12
13
|
const { subvariant, subvariantOptions } = useWidgetConfig()
|
|
13
14
|
const { t } = useTranslation()
|
|
@@ -27,7 +28,7 @@ export const useActionMessage = (
|
|
|
27
28
|
action.type,
|
|
28
29
|
action.status,
|
|
29
30
|
action.substatus,
|
|
30
|
-
subvariant,
|
|
31
|
-
subvariantOptions
|
|
31
|
+
defaultLabelsOnly ? undefined : subvariant,
|
|
32
|
+
defaultLabelsOnly ? undefined : subvariantOptions
|
|
32
33
|
)
|
|
33
34
|
}
|
package/src/hooks/useExplorer.ts
CHANGED
|
@@ -6,6 +6,13 @@ import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
|
|
|
6
6
|
|
|
7
7
|
const sanitiseBaseUrl = (baseUrl: string) => baseUrl.trim().replace(/\/+$/, '')
|
|
8
8
|
|
|
9
|
+
const explorerPathOverrides: Partial<
|
|
10
|
+
Record<ChainType | ChainId, { txPath: string; addressPath: string }>
|
|
11
|
+
> = {
|
|
12
|
+
[ChainId.SUI]: { txPath: 'txblock', addressPath: 'coin' },
|
|
13
|
+
[ChainType.TVM]: { txPath: '#/transaction', addressPath: '#/address' },
|
|
14
|
+
}
|
|
15
|
+
|
|
9
16
|
type TransactionLinkProps = { chain?: Chain | number } & (
|
|
10
17
|
| {
|
|
11
18
|
txHash: string
|
|
@@ -35,11 +42,15 @@ export const useExplorer = (): {
|
|
|
35
42
|
resolvedChain.metamask.blockExplorerUrls[0])
|
|
36
43
|
: explorerUrls?.internal?.[0]) || internalExplorerUrl
|
|
37
44
|
|
|
38
|
-
const
|
|
45
|
+
const baseUrl =
|
|
46
|
+
typeof explorerUrl === 'string' ? explorerUrl : explorerUrl.url
|
|
47
|
+
|
|
48
|
+
const overrides =
|
|
49
|
+
explorerPathOverrides[resolvedChain?.id as ChainId] ??
|
|
50
|
+
explorerPathOverrides[resolvedChain?.chainType as ChainType]
|
|
39
51
|
|
|
40
|
-
const defaultTxPath =
|
|
41
|
-
const defaultAddressPath =
|
|
42
|
-
resolvedChain?.id === ChainId.SUI ? 'coin' : 'address'
|
|
52
|
+
const defaultTxPath = overrides?.txPath ?? 'tx'
|
|
53
|
+
const defaultAddressPath = overrides?.addressPath ?? 'address'
|
|
43
54
|
const txPath =
|
|
44
55
|
typeof explorerUrl === 'string'
|
|
45
56
|
? defaultTxPath
|
|
@@ -50,7 +61,7 @@ export const useExplorer = (): {
|
|
|
50
61
|
: explorerUrl.addressPath || defaultAddressPath
|
|
51
62
|
|
|
52
63
|
return {
|
|
53
|
-
url: sanitiseBaseUrl(
|
|
64
|
+
url: sanitiseBaseUrl(baseUrl),
|
|
54
65
|
txPath,
|
|
55
66
|
addressPath,
|
|
56
67
|
resolvedChain,
|
|
@@ -139,7 +139,6 @@ export const useRouteExecution = ({
|
|
|
139
139
|
return executeRoute(sdkClient, routeExecution.route, {
|
|
140
140
|
updateRouteHook,
|
|
141
141
|
acceptExchangeRateUpdateHook,
|
|
142
|
-
infiniteApproval: false,
|
|
143
142
|
executeInBackground,
|
|
144
143
|
...sdkClient.config?.executionOptions,
|
|
145
144
|
})
|
|
@@ -164,7 +163,6 @@ export const useRouteExecution = ({
|
|
|
164
163
|
return resumeRoute(sdkClient, resumedRoute ?? routeExecution.route, {
|
|
165
164
|
updateRouteHook,
|
|
166
165
|
acceptExchangeRateUpdateHook,
|
|
167
|
-
infiniteApproval: false,
|
|
168
166
|
executeInBackground,
|
|
169
167
|
})
|
|
170
168
|
},
|
package/src/hooks/useTokens.ts
CHANGED
|
@@ -48,6 +48,7 @@ export const useTokens = (
|
|
|
48
48
|
ChainType.SVM,
|
|
49
49
|
ChainType.UTXO,
|
|
50
50
|
ChainType.MVM,
|
|
51
|
+
ChainType.TVM,
|
|
51
52
|
].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))
|
|
52
53
|
|
|
53
54
|
const tokensResponse: TokensExtendedResponse = await getTokens(
|
|
@@ -90,6 +91,7 @@ export const useTokens = (
|
|
|
90
91
|
ChainType.SVM,
|
|
91
92
|
ChainType.UTXO,
|
|
92
93
|
ChainType.MVM,
|
|
94
|
+
ChainType.TVM,
|
|
93
95
|
].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))
|
|
94
96
|
|
|
95
97
|
const tokensResponse: TokensExtendedResponse = await getTokens(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useAccount } from '@lifi/wallet-management'
|
|
2
|
-
import DeleteOutlineIcon from '@mui/icons-material/
|
|
2
|
+
import DeleteOutlineIcon from '@mui/icons-material/DeleteOutlined'
|
|
3
3
|
import { Button } from '@mui/material'
|
|
4
4
|
import { useMemo, useState } from 'react'
|
|
5
5
|
import { useTranslation } from 'react-i18next'
|
|
@@ -49,14 +49,14 @@ export const MainPage: React.FC = () => {
|
|
|
49
49
|
{custom ? (
|
|
50
50
|
<ContractComponent sx={marginSx}>{contractComponent}</ContractComponent>
|
|
51
51
|
) : null}
|
|
52
|
-
<SelectChainAndToken
|
|
52
|
+
<SelectChainAndToken sx={marginSx} />
|
|
53
53
|
{!custom || subvariantOptions?.custom === 'deposit' ? (
|
|
54
54
|
<AmountInput formType="from" sx={marginSx} />
|
|
55
55
|
) : null}
|
|
56
56
|
{!wideVariant ? <Routes sx={marginSx} /> : null}
|
|
57
57
|
<SendToWalletButton sx={marginSx} />
|
|
58
|
-
{showGasRefuelMessage ? <GasRefuelMessage
|
|
59
|
-
<MainWarningMessages
|
|
58
|
+
{showGasRefuelMessage ? <GasRefuelMessage sx={marginSx} /> : null}
|
|
59
|
+
<MainWarningMessages sx={marginSx} />
|
|
60
60
|
<Box
|
|
61
61
|
sx={{
|
|
62
62
|
display: 'flex',
|
|
@@ -69,7 +69,12 @@ export const RoutesPage = (): JSX.Element => {
|
|
|
69
69
|
const allowInteraction = account.isConnected && !toAddressUnsatisfied
|
|
70
70
|
|
|
71
71
|
return (
|
|
72
|
-
<Stack
|
|
72
|
+
<Stack
|
|
73
|
+
className="long-list"
|
|
74
|
+
direction="column"
|
|
75
|
+
spacing={2}
|
|
76
|
+
sx={{ flex: 1 }}
|
|
77
|
+
>
|
|
73
78
|
{routeNotFound ? (
|
|
74
79
|
<RouteNotFoundCard />
|
|
75
80
|
) : isLoading && !routes?.length ? (
|