@lifi/widget 4.7.1 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/AmountInput/AmountInput.style.d.ts.map +1 -1
- package/dist/esm/components/AmountInputCard/AmountInputCardPair.js +5 -2
- package/dist/esm/components/AmountInputCard/AmountInputCardPair.js.map +1 -1
- package/dist/esm/components/Card/Card.d.ts.map +1 -1
- package/dist/esm/components/Card/CardIconButton.d.ts.map +1 -1
- package/dist/esm/components/ContractComponent/ItemPrice.d.ts.map +1 -1
- package/dist/esm/components/ListItem/ListItemButton.d.ts.map +1 -1
- package/dist/esm/components/ListItemButton.d.ts.map +1 -1
- package/dist/esm/components/SelectChainAndToken.js +5 -2
- package/dist/esm/components/SelectChainAndToken.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js +5 -4
- package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/Token/Token.d.ts.map +1 -1
- package/dist/esm/components/TokenList/types.d.ts.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.js +10 -0
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/config/constants.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/useAccountsBalancesData.js +5 -2
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
- package/dist/esm/hooks/useAddressValidation.d.ts +3 -2
- package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -1
- package/dist/esm/hooks/useAddressValidation.js +48 -21
- package/dist/esm/hooks/useAddressValidation.js.map +1 -1
- package/dist/esm/hooks/useAvailableChains.d.ts.map +1 -1
- package/dist/esm/hooks/useAvailableChains.js +21 -38
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useFromTokenSufficiency.js +3 -3
- package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
- package/dist/esm/hooks/useGasRecommendation.js +3 -3
- package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
- package/dist/esm/hooks/useGasRefuel.js +4 -1
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js +3 -3
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useIsBatchingSupported.js +2 -2
- package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -1
- package/dist/esm/hooks/useRouteExecution.js +6 -6
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRoutes.d.ts.map +1 -1
- package/dist/esm/hooks/useRoutes.js +18 -13
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useToAddressAutoPopulate.js +6 -8
- package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.d.ts +3 -2
- package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js +8 -7
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToAddressReset.js +6 -3
- package/dist/esm/hooks/useToAddressReset.js.map +1 -1
- package/dist/esm/hooks/useTokenBalance.js +6 -5
- package/dist/esm/hooks/useTokenBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalancesQueries.js +3 -3
- package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
- package/dist/esm/hooks/useTokenSearch.js +3 -3
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.js +15 -15
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useTools.d.ts.map +1 -1
- package/dist/esm/hooks/useTools.js +26 -27
- package/dist/esm/hooks/useTools.js.map +1 -1
- package/dist/esm/hooks/useTransactionDetails.js +2 -2
- package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
- package/dist/esm/hooks/useTransactionHistory.js +3 -3
- package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
- package/dist/esm/i18n/bn.json +2 -1
- package/dist/esm/i18n/de.json +2 -1
- package/dist/esm/i18n/en.json +2 -1
- package/dist/esm/i18n/es.json +2 -1
- package/dist/esm/i18n/fr.json +2 -1
- package/dist/esm/i18n/hi.json +2 -1
- package/dist/esm/i18n/id.json +2 -1
- package/dist/esm/i18n/it.json +2 -1
- package/dist/esm/i18n/ja.json +2 -1
- package/dist/esm/i18n/ko.json +2 -1
- package/dist/esm/i18n/pl.json +2 -1
- package/dist/esm/i18n/pt.json +2 -1
- package/dist/esm/i18n/th.json +2 -1
- package/dist/esm/i18n/tr.json +2 -1
- package/dist/esm/i18n/uk.json +2 -1
- package/dist/esm/i18n/vi.json +2 -1
- package/dist/esm/i18n/zh.json +2 -1
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +7 -4
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js +35 -31
- package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js +4 -3
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +43 -39
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js +32 -26
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js +5 -10
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
- package/dist/esm/providers/I18nProvider/types.d.ts.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js +14 -2
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js +15 -11
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/types.d.ts +2 -0
- package/dist/esm/providers/WidgetProvider/types.d.ts.map +1 -1
- package/dist/esm/queries/getChains.d.ts +38 -0
- package/dist/esm/queries/getChains.d.ts.map +1 -0
- package/dist/esm/queries/getChains.js +51 -0
- package/dist/esm/queries/getChains.js.map +1 -0
- package/dist/esm/queries/getTools.d.ts +26 -0
- package/dist/esm/queries/getTools.d.ts.map +1 -0
- package/dist/esm/queries/getTools.js +30 -0
- package/dist/esm/queries/getTools.js.map +1 -0
- package/dist/esm/queries/index.d.ts +4 -0
- package/dist/esm/queries/index.js +3 -0
- package/dist/esm/queries/types.d.ts +25 -0
- package/dist/esm/queries/types.d.ts.map +1 -0
- package/dist/esm/shared.d.ts +2 -1
- package/dist/esm/shared.js +2 -1
- package/dist/esm/stores/StoreProvider.d.ts.map +1 -1
- package/dist/esm/stores/StoreProvider.js +16 -17
- package/dist/esm/stores/StoreProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/types.d.ts +3 -0
- package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js +4 -1
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/form/FormStore.js +3 -2
- package/dist/esm/stores/form/FormStore.js.map +1 -1
- package/dist/esm/stores/form/URLSearchParamsBuilder.js +7 -3
- package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
- package/dist/esm/stores/form/getDefaultValuesFromQueryString.js +4 -1
- package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.d.ts +1 -1
- package/dist/esm/stores/header/useHeaderStore.d.ts.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/themes/createTheme.d.ts.map +1 -1
- package/dist/esm/types/events.d.ts.map +1 -1
- package/dist/esm/types/token.d.ts.map +1 -1
- package/dist/esm/types/widget.d.ts +30 -0
- package/dist/esm/types/widget.d.ts.map +1 -1
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/chainType.js +32 -1
- package/dist/esm/utils/chainType.js.map +1 -1
- package/dist/esm/utils/customReceiver.js +6 -1
- package/dist/esm/utils/customReceiver.js.map +1 -1
- package/dist/esm/utils/queries.js.map +1 -1
- package/dist/esm/utils/scopeKeys.d.ts +6 -0
- package/dist/esm/utils/scopeKeys.d.ts.map +1 -0
- package/dist/esm/utils/scopeKeys.js +8 -0
- package/dist/esm/utils/scopeKeys.js.map +1 -0
- package/package.json +15 -7
- package/src/components/AmountInputCard/AmountInputCardPair.tsx +6 -2
- package/src/components/SelectChainAndToken.tsx +5 -1
- package/src/components/SendToWallet/SendToWalletButton.tsx +13 -8
- package/src/components/TokenList/useTokenSelect.ts +15 -0
- package/src/config/constants.ts +3 -0
- package/src/config/version.ts +1 -1
- package/src/hooks/useAccountsBalancesData.ts +6 -2
- package/src/hooks/useAddressValidation.ts +87 -32
- package/src/hooks/useAvailableChains.test.tsx +170 -0
- package/src/hooks/useAvailableChains.ts +29 -47
- package/src/hooks/useFromTokenSufficiency.ts +2 -2
- package/src/hooks/useGasRecommendation.ts +2 -2
- package/src/hooks/useGasRefuel.ts +11 -1
- package/src/hooks/useGasSufficiency.ts +2 -2
- package/src/hooks/useIsBatchingSupported.ts +2 -2
- package/src/hooks/useRouteExecution.ts +5 -5
- package/src/hooks/useRoutes.ts +28 -23
- package/src/hooks/useToAddressAutoPopulate.ts +13 -17
- package/src/hooks/useToAddressRequirements.ts +19 -4
- package/src/hooks/useToAddressReset.ts +13 -4
- package/src/hooks/useTokenBalance.ts +10 -5
- package/src/hooks/useTokenBalancesQueries.ts +3 -3
- package/src/hooks/useTokenSearch.ts +7 -3
- package/src/hooks/useTokens.ts +13 -14
- package/src/hooks/useTools.sharedEntry.test.tsx +155 -0
- package/src/hooks/useTools.ts +42 -37
- package/src/hooks/useTransactionDetails.ts +3 -3
- package/src/hooks/useTransactionHistory.ts +2 -2
- package/src/index.ts +2 -1
- package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +5 -1
- package/src/pages/SendToWallet/BookmarksPage.tsx +42 -52
- package/src/pages/SendToWallet/ConnectedWalletsPage.tsx +4 -14
- package/src/pages/SendToWallet/RecentWalletsPage.tsx +59 -66
- package/src/pages/SendToWallet/SendToConfiguredWalletPage.tsx +45 -50
- package/src/pages/SendToWallet/SendToWalletPage.tsx +4 -16
- package/src/providers/WalletProvider/WalletProvider.tsx +28 -3
- package/src/providers/WidgetProvider/WidgetProvider.test.tsx +73 -0
- package/src/providers/WidgetProvider/WidgetProvider.tsx +28 -14
- package/src/providers/WidgetProvider/types.ts +2 -0
- package/src/queries/getChains.ts +93 -0
- package/src/queries/getTools.ts +62 -0
- package/src/queries/index.ts +30 -0
- package/src/queries/sharedCache.test.tsx +223 -0
- package/src/queries/types.ts +38 -0
- package/src/shared.ts +1 -0
- package/src/stores/StoreProvider.test.tsx +107 -0
- package/src/stores/StoreProvider.tsx +8 -6
- package/src/stores/bookmarks/types.ts +3 -0
- package/src/stores/chains/ChainOrderStore.tsx +4 -1
- package/src/stores/form/FormStore.tsx +2 -0
- package/src/stores/form/URLSearchParamsBuilder.tsx +4 -2
- package/src/stores/form/getDefaultValuesFromQueryString.ts +19 -0
- package/src/stores/header/useHeaderStore.tsx +3 -4
- package/src/types/widget.ts +30 -0
- package/src/utils/chainType.ts +73 -1
- package/src/utils/customReceiver.ts +36 -0
- package/src/utils/queries.ts +1 -0
- package/src/utils/scopeKeys.ts +18 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SendToWalletPage.js","names":[],"sources":["../../../../src/pages/SendToWallet/SendToWalletPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet'\nimport ErrorIcon from '@mui/icons-material/Error'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Box, Tooltip, Typography } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { ChangeEvent } from 'react'\nimport { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ButtonTertiary } from '../../components/ButtonTertiary.js'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { AccountDeployedMessage } from '../../components/Messages/AccountDeployedMessage.js'\nimport {\n AddressType,\n useAddressValidation,\n} from '../../hooks/useAddressValidation.js'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BookmarkAddressSheet } from './BookmarkAddressSheet.js'\nimport { ConfirmAddressSheet } from './ConfirmAddressSheet.js'\nimport {\n AddressInput,\n FullHeightAdjustablePageContainer,\n SendToWalletButtonRow,\n SendToWalletCard,\n SendToWalletIconButton,\n ValidationAlert,\n} from './SendToWalletPage.style.js'\n\nexport const SendToWalletPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const bookmarkAddressSheetRef = useRef<BottomSheetBase>(null)\n const confirmAddressSheetRef = useRef<BottomSheetBase>(null)\n const { bookmarks, recentWallets } = useBookmarks()\n const {\n addBookmark,\n getBookmark,\n setSelectedBookmark,\n getSelectedBookmark,\n addRecentWallet,\n } = useBookmarkActions()\n const { setFieldValue } = useFieldActions()\n const [inputAddressValue, setInputAddressValue] = useState(\n () => getSelectedBookmark()?.address ?? ''\n )\n const [validatedWallet, setValidatedWallet] = useState<Bookmark>()\n const [errorMessage, setErrorMessage] = useState('')\n const { validateAddress, isValidating } = useAddressValidation()\n const { requiredToChainType } = useToAddressRequirements()\n const [toChainId] = useFieldValues('toChain')\n const { chain: toChain } = useChain(toChainId)\n const [isDoneButtonLoading, setIsDoneButtonLoading] = useState(false)\n const [isBookmarkButtonLoading, setIsBookmarkButtonLoading] = useState(false)\n const { variant, hiddenUI, requiredUI } = useWidgetConfig()\n\n const { accounts } = useAccount()\n const connectedWallets = accounts.filter((account) => account.isConnected)\n\n useHeader(t('header.sendToWallet'))\n\n const handleInputChange = (e: ChangeEvent) => {\n if (errorMessage) {\n setErrorMessage('')\n }\n if (getSelectedBookmark()) {\n setFieldValue('toAddress', '', { isTouched: true })\n setSelectedBookmark()\n }\n setInputAddressValue((e.target as HTMLInputElement).value.trim())\n }\n\n const handleDone = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n setIsDoneButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n chainType: requiredToChainType,\n chain: toChain,\n })\n setIsDoneButtonLoading(false)\n if (!validationResult.isValid) {\n setErrorMessage(validationResult.error)\n return\n }\n\n if (\n requiredToChainType &&\n requiredToChainType !== validationResult.chainType\n ) {\n setErrorMessage(\n t('error.title.walletChainTypeInvalid', {\n chainName: toChain?.name,\n })\n )\n return\n }\n\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n })\n confirmAddressSheetRef.current?.open()\n }\n\n const handleBookmarkAddress = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n\n const existingBookmarkWallet = getBookmark(inputAddressValue)\n if (existingBookmarkWallet) {\n setErrorMessage(\n t('error.title.bookmarkAlreadyExists', {\n name: existingBookmarkWallet.name,\n })\n )\n return\n }\n setIsBookmarkButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n })\n setIsBookmarkButtonLoading(false)\n\n if (validationResult.isValid) {\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n })\n bookmarkAddressSheetRef.current?.open()\n } else {\n setErrorMessage(validationResult.error)\n }\n }\n\n const handleRecentWalletsClick = () => {\n navigate({ to: navigationRoutes.recentWallets })\n }\n\n const handleConnectedWalletsClick = () => {\n navigate({ to: navigationRoutes.connectedWallets })\n }\n const handleBookmarkedWalletsClick = () => {\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleAddBookmark = (bookmark: Bookmark) => {\n addBookmark(bookmark)\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleOnConfirm = (confirmedWallet: Bookmark) => {\n setSelectedBookmark(confirmedWallet)\n addRecentWallet(confirmedWallet)\n }\n\n const placeholder = t('sendToWallet.enterAddress', {\n context: 'long',\n })\n\n return (\n <FullHeightAdjustablePageContainer\n topGutters\n bottomGutters\n enableFullHeight={variant !== 'drawer'}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginBottom: 6,\n }}\n >\n <SendToWalletCard type={errorMessage ? 'error' : 'default'}>\n <AddressInput\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleInputChange}\n value={inputAddressValue}\n placeholder={placeholder}\n aria-label={placeholder}\n maxRows={2}\n inputProps={{ maxLength: 128 }}\n multiline\n />\n {errorMessage ? (\n <ValidationAlert icon={<ErrorIcon />} sx={{ pb: 2, paddingX: 2 }}>\n {errorMessage}\n </ValidationAlert>\n ) : null}\n <SendToWalletButtonRow sx={{ paddingX: 2, paddingBottom: 2 }}>\n <ButtonTertiary\n variant=\"text\"\n onClick={handleDone}\n loading={isDoneButtonLoading}\n loadingPosition=\"center\"\n sx={{ flexGrow: 1 }}\n >\n {t('button.done')}\n </ButtonTertiary>\n <Tooltip title={t('button.bookmark')}>\n <SendToWalletIconButton\n onClick={handleBookmarkAddress}\n loading={isBookmarkButtonLoading}\n loadingPosition=\"center\"\n >\n <TurnedIn fontSize=\"small\" />\n </SendToWalletIconButton>\n </Tooltip>\n </SendToWalletButtonRow>\n <ConfirmAddressSheet\n ref={confirmAddressSheetRef}\n validatedBookmark={validatedWallet}\n onConfirm={handleOnConfirm}\n />\n <BookmarkAddressSheet\n ref={bookmarkAddressSheetRef}\n validatedWallet={validatedWallet}\n onAddBookmark={handleAddBookmark}\n />\n </SendToWalletCard>\n {requiredUI?.accountDeployedMessage && <AccountDeployedMessage />}\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <CardButton\n title={t('header.recentWallets')}\n icon={<AccountBalanceWalletIcon />}\n onClick={handleRecentWalletsClick}\n >\n {!!recentWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {recentWallets.length}\n </Typography>\n )}\n </CardButton>\n {!hiddenUI?.addressBookConnectedWallets && (\n <CardButton\n title={t('sendToWallet.connectedWallets')}\n icon={<Wallet />}\n onClick={handleConnectedWalletsClick}\n >\n {!!connectedWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {connectedWallets.length}\n </Typography>\n )}\n </CardButton>\n )}\n <CardButton\n title={t('header.bookmarkedWallets')}\n icon={<TurnedIn />}\n onClick={handleBookmarkedWalletsClick}\n >\n {!!bookmarks.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {bookmarks.length}\n </Typography>\n )}\n </CardButton>\n </Box>\n </FullHeightAdjustablePageContainer>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SendToWalletPage.js","names":[],"sources":["../../../../src/pages/SendToWallet/SendToWalletPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet'\nimport ErrorIcon from '@mui/icons-material/Error'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Box, Tooltip, Typography } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { ChangeEvent } from 'react'\nimport { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ButtonTertiary } from '../../components/ButtonTertiary.js'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { AccountDeployedMessage } from '../../components/Messages/AccountDeployedMessage.js'\nimport { addressInputMaxLength } from '../../config/constants.js'\nimport {\n AddressType,\n useAddressValidation,\n} from '../../hooks/useAddressValidation.js'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BookmarkAddressSheet } from './BookmarkAddressSheet.js'\nimport { ConfirmAddressSheet } from './ConfirmAddressSheet.js'\nimport {\n AddressInput,\n FullHeightAdjustablePageContainer,\n SendToWalletButtonRow,\n SendToWalletCard,\n SendToWalletIconButton,\n ValidationAlert,\n} from './SendToWalletPage.style.js'\n\nexport const SendToWalletPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const bookmarkAddressSheetRef = useRef<BottomSheetBase>(null)\n const confirmAddressSheetRef = useRef<BottomSheetBase>(null)\n const { bookmarks, recentWallets } = useBookmarks()\n const {\n addBookmark,\n getBookmark,\n setSelectedBookmark,\n getSelectedBookmark,\n addRecentWallet,\n } = useBookmarkActions()\n const { setFieldValue } = useFieldActions()\n const [inputAddressValue, setInputAddressValue] = useState(\n () => getSelectedBookmark()?.address ?? ''\n )\n const [validatedWallet, setValidatedWallet] = useState<Bookmark>()\n const [errorMessage, setErrorMessage] = useState('')\n const { validateAddress, isValidating } = useAddressValidation()\n const [toChainId] = useFieldValues('toChain')\n const { chain: toChain } = useChain(toChainId)\n const [isDoneButtonLoading, setIsDoneButtonLoading] = useState(false)\n const [isBookmarkButtonLoading, setIsBookmarkButtonLoading] = useState(false)\n const { variant, hiddenUI, requiredUI } = useWidgetConfig()\n\n const { accounts } = useAccount()\n const connectedWallets = accounts.filter((account) => account.isConnected)\n\n useHeader(t('header.sendToWallet'))\n\n const handleInputChange = (e: ChangeEvent) => {\n if (errorMessage) {\n setErrorMessage('')\n }\n if (getSelectedBookmark()) {\n setFieldValue('toAddress', '', { isTouched: true })\n setSelectedBookmark()\n }\n setInputAddressValue((e.target as HTMLInputElement).value.trim())\n }\n\n const handleDone = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n setIsDoneButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n chain: toChain,\n })\n setIsDoneButtonLoading(false)\n if (!validationResult.isValid) {\n setErrorMessage(validationResult.error)\n return\n }\n\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n chainId: validationResult.chainId,\n })\n confirmAddressSheetRef.current?.open()\n }\n\n const handleBookmarkAddress = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n\n const existingBookmarkWallet = getBookmark(inputAddressValue)\n if (existingBookmarkWallet) {\n setErrorMessage(\n t('error.title.bookmarkAlreadyExists', {\n name: existingBookmarkWallet.name,\n })\n )\n return\n }\n setIsBookmarkButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n })\n setIsBookmarkButtonLoading(false)\n\n if (validationResult.isValid) {\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n chainId: validationResult.chainId,\n })\n bookmarkAddressSheetRef.current?.open()\n } else {\n setErrorMessage(validationResult.error)\n }\n }\n\n const handleRecentWalletsClick = () => {\n navigate({ to: navigationRoutes.recentWallets })\n }\n\n const handleConnectedWalletsClick = () => {\n navigate({ to: navigationRoutes.connectedWallets })\n }\n const handleBookmarkedWalletsClick = () => {\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleAddBookmark = (bookmark: Bookmark) => {\n addBookmark(bookmark)\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleOnConfirm = (confirmedWallet: Bookmark) => {\n setSelectedBookmark(confirmedWallet)\n addRecentWallet(confirmedWallet)\n }\n\n const placeholder = t('sendToWallet.enterAddress', {\n context: 'long',\n })\n\n return (\n <FullHeightAdjustablePageContainer\n topGutters\n bottomGutters\n enableFullHeight={variant !== 'drawer'}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginBottom: 6,\n }}\n >\n <SendToWalletCard type={errorMessage ? 'error' : 'default'}>\n <AddressInput\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleInputChange}\n value={inputAddressValue}\n placeholder={placeholder}\n aria-label={placeholder}\n maxRows={2}\n inputProps={{ maxLength: addressInputMaxLength }}\n multiline\n />\n {errorMessage ? (\n <ValidationAlert icon={<ErrorIcon />} sx={{ pb: 2, paddingX: 2 }}>\n {errorMessage}\n </ValidationAlert>\n ) : null}\n <SendToWalletButtonRow sx={{ paddingX: 2, paddingBottom: 2 }}>\n <ButtonTertiary\n variant=\"text\"\n onClick={handleDone}\n loading={isDoneButtonLoading}\n loadingPosition=\"center\"\n sx={{ flexGrow: 1 }}\n >\n {t('button.done')}\n </ButtonTertiary>\n <Tooltip title={t('button.bookmark')}>\n <SendToWalletIconButton\n onClick={handleBookmarkAddress}\n loading={isBookmarkButtonLoading}\n loadingPosition=\"center\"\n >\n <TurnedIn fontSize=\"small\" />\n </SendToWalletIconButton>\n </Tooltip>\n </SendToWalletButtonRow>\n <ConfirmAddressSheet\n ref={confirmAddressSheetRef}\n validatedBookmark={validatedWallet}\n onConfirm={handleOnConfirm}\n />\n <BookmarkAddressSheet\n ref={bookmarkAddressSheetRef}\n validatedWallet={validatedWallet}\n onAddBookmark={handleAddBookmark}\n />\n </SendToWalletCard>\n {requiredUI?.accountDeployedMessage && <AccountDeployedMessage />}\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <CardButton\n title={t('header.recentWallets')}\n icon={<AccountBalanceWalletIcon />}\n onClick={handleRecentWalletsClick}\n >\n {!!recentWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {recentWallets.length}\n </Typography>\n )}\n </CardButton>\n {!hiddenUI?.addressBookConnectedWallets && (\n <CardButton\n title={t('sendToWallet.connectedWallets')}\n icon={<Wallet />}\n onClick={handleConnectedWalletsClick}\n >\n {!!connectedWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {connectedWallets.length}\n </Typography>\n )}\n </CardButton>\n )}\n <CardButton\n title={t('header.bookmarkedWallets')}\n icon={<TurnedIn />}\n onClick={handleBookmarkedWalletsClick}\n >\n {!!bookmarks.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {bookmarks.length}\n </Typography>\n )}\n </CardButton>\n </Box>\n </FullHeightAdjustablePageContainer>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/providers/I18nProvider/types.ts"],"mappings":";;YAEY,gBAAgB,KAAK,sBAE1B,WAAW,KAAK,gBAAgB,EAAE,SAErC;YAEQ;YAmBA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":["enResource"],"sources":["../../../../src/providers/I18nProvider/types.ts"],"mappings":";;YAEY,gBAAgB,KAAK,sBAE1B,WAAW,KAAK,gBAAgB,EAAE,SAErC;YAEQ;YAmBA,0BAA0BA;YAE1B,uBAEL,KAAK,eAAe,gBAAgB;GAGjB,mBAAA,gBAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletProvider.d.ts","names":[],"sources":["../../../../src/providers/WalletProvider/WalletProvider.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"WalletProvider.d.ts","names":[],"sources":["../../../../src/providers/WalletProvider/WalletProvider.tsx"],"mappings":";;;UA0BU,4BAA4B;EACpC,aAAa,OAAO,kBAAkB,yBAAyB;;qBAGpD,mBACX,UACA,aACC,kBAAkB,yBAAuB,IAAI"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { getConfigItemSets, isItemAllowedForSets } from "../../utils/item.js";
|
|
2
|
-
import {
|
|
2
|
+
import { withServedDestinationChains, withoutUnservedToChain } from "../../utils/chainType.js";
|
|
3
|
+
import { WidgetContext, useWidgetConfig } from "../WidgetProvider/WidgetProvider.js";
|
|
3
4
|
import { useAvailableChains } from "../../hooks/useAvailableChains.js";
|
|
4
5
|
import { useExternalWalletProvider } from "./useExternalWalletProvider.js";
|
|
5
6
|
import { useInitializeSDKProviders } from "../../hooks/useInitializeSDKProviders.js";
|
|
6
7
|
import { useMemo } from "react";
|
|
7
8
|
import { jsx } from "react/jsx-runtime";
|
|
8
9
|
import { useTranslation } from "react-i18next";
|
|
10
|
+
import { useSDKProviders } from "@lifi/widget-provider";
|
|
9
11
|
import { WalletManagementProviders } from "@lifi/wallet-management";
|
|
10
12
|
//#region src/providers/WalletProvider/WalletProvider.tsx
|
|
11
13
|
const WalletProvider = ({ children, providers }) => {
|
|
@@ -38,7 +40,17 @@ const WalletProvider = ({ children, providers }) => {
|
|
|
38
40
|
};
|
|
39
41
|
const SDKProviderInitializer = ({ children }) => {
|
|
40
42
|
useInitializeSDKProviders();
|
|
41
|
-
|
|
43
|
+
const config = useWidgetConfig();
|
|
44
|
+
const sdkProviders = useSDKProviders();
|
|
45
|
+
const chains = useMemo(() => withServedDestinationChains(config.chains, sdkProviders), [config.chains, sdkProviders]);
|
|
46
|
+
const value = useMemo(() => withoutUnservedToChain(chains === config.chains ? config : {
|
|
47
|
+
...config,
|
|
48
|
+
chains
|
|
49
|
+
}), [config, chains]);
|
|
50
|
+
return /* @__PURE__ */ jsx(WidgetContext, {
|
|
51
|
+
value,
|
|
52
|
+
children
|
|
53
|
+
});
|
|
42
54
|
};
|
|
43
55
|
//#endregion
|
|
44
56
|
export { WalletProvider };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletProvider.js","names":[],"sources":["../../../../src/providers/WalletProvider/WalletProvider.tsx"],"sourcesContent":["import { WalletManagementProviders } from '@lifi/wallet-management'\nimport type
|
|
1
|
+
{"version":3,"file":"WalletProvider.js","names":[],"sources":["../../../../src/providers/WalletProvider/WalletProvider.tsx"],"sourcesContent":["import { WalletManagementProviders } from '@lifi/wallet-management'\nimport {\n useSDKProviders,\n type WidgetProviderProps,\n} from '@lifi/widget-provider'\nimport {\n type FC,\n type JSX,\n type PropsWithChildren,\n type ReactNode,\n useMemo,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAvailableChains } from '../../hooks/useAvailableChains.js'\nimport { useInitializeSDKProviders } from '../../hooks/useInitializeSDKProviders.js'\nimport {\n withoutUnservedToChain,\n withServedDestinationChains,\n} from '../../utils/chainType.js'\nimport { getConfigItemSets, isItemAllowedForSets } from '../../utils/item.js'\nimport {\n useWidgetConfig,\n WidgetContext,\n} from '../WidgetProvider/WidgetProvider.js'\nimport { useExternalWalletProvider } from './useExternalWalletProvider.js'\n\ninterface WalletProviderProps extends PropsWithChildren {\n providers: ((props: PropsWithChildren<WidgetProviderProps>) => ReactNode)[]\n}\n\nexport const WalletProvider = ({\n children,\n providers,\n}: PropsWithChildren<WalletProviderProps>): JSX.Element => {\n const { walletConfig, chains: chainsConfig } = useWidgetConfig()\n const { chains } = useAvailableChains()\n const { i18n } = useTranslation()\n const { useExternalWalletProvidersOnly, internalChainTypes } =\n useExternalWalletProvider()\n\n // Restrict offered wallets to the ecosystems allowed by chains.types config.\n const enabledChainTypes = useMemo(() => {\n const chainTypeSets = getConfigItemSets(\n chainsConfig?.types,\n (items) => new Set(items)\n )\n return internalChainTypes.filter((chainType) =>\n isItemAllowedForSets(chainType, chainTypeSets)\n )\n }, [internalChainTypes, chainsConfig?.types])\n\n if (\n !providers.length &&\n !useExternalWalletProvidersOnly &&\n process.env.NODE_ENV === 'development'\n ) {\n console.warn('No widget providers specified')\n }\n\n const effectiveProviders = useExternalWalletProvidersOnly ? [] : providers\n\n const walletManagementConfig = useMemo(\n () => ({\n locale: i18n.resolvedLanguage as never,\n enabledChainTypes,\n walletEcosystemsOrder: walletConfig?.walletEcosystemsOrder,\n }),\n [\n i18n.resolvedLanguage,\n enabledChainTypes,\n walletConfig?.walletEcosystemsOrder,\n ]\n )\n\n return (\n <WalletManagementProviders\n config={walletManagementConfig}\n providers={effectiveProviders}\n chains={chains}\n forceInternalWalletManagement={\n walletConfig?.forceInternalWalletManagement\n }\n >\n <SDKProviderInitializer>{children}</SDKProviderInitializer>\n </WalletManagementProviders>\n )\n}\n\nconst SDKProviderInitializer: FC<PropsWithChildren> = ({ children }) => {\n useInitializeSDKProviders()\n const config = useWidgetConfig()\n const sdkProviders = useSDKProviders()\n // Only below the provider components is it known which chains are served.\n // Keyed on `config.chains`: the config object is new on every render.\n const chains = useMemo(\n () => withServedDestinationChains(config.chains, sdkProviders),\n [config.chains, sdkProviders]\n )\n const value = useMemo(\n () =>\n withoutUnservedToChain(\n chains === config.chains ? config : { ...config, chains }\n ),\n [config, chains]\n )\n return <WidgetContext value={value}>{children}</WidgetContext>\n}\n"],"mappings":";;;;;;;;;;;;AA8BA,MAAa,kBAAkB,EAC7B,UACA,gBACyD;CACzD,MAAM,EAAE,cAAc,QAAQ,iBAAiB,gBAAgB;CAC/D,MAAM,EAAE,WAAW,mBAAmB;CACtC,MAAM,EAAE,SAAS,eAAe;CAChC,MAAM,EAAE,gCAAgC,uBACtC,0BAA0B;CAG5B,MAAM,oBAAoB,cAAc;EACtC,MAAM,gBAAgB,kBACpB,cAAc,QACb,UAAU,IAAI,IAAI,KAAK,CAC1B;EACA,OAAO,mBAAmB,QAAQ,cAChC,qBAAqB,WAAW,aAAa,CAC/C;CACF,GAAG,CAAC,oBAAoB,cAAc,KAAK,CAAC;CAE5C,IACE,CAAC,UAAU,UACX,CAAC,kCACD,QAAQ,IAAI,aAAa,eAEzB,QAAQ,KAAK,+BAA+B;CAG9C,MAAM,qBAAqB,iCAAiC,CAAC,IAAI;CAEjE,MAAM,yBAAyB,eACtB;EACL,QAAQ,KAAK;EACb;EACA,uBAAuB,cAAc;CACvC,IACA;EACE,KAAK;EACL;EACA,cAAc;CAChB,CACF;CAEA,OACE,oBAAC,2BAAD;EACE,QAAQ;EACR,WAAW;EACH;EACR,+BACE,cAAc;EAGhB,UAAA,oBAAC,wBAAD,EAAyB,SAAiC,CAAA;CACjC,CAAA;AAE/B;AAEA,MAAM,0BAAiD,EAAE,eAAe;CACtE,0BAA0B;CAC1B,MAAM,SAAS,gBAAgB;CAC/B,MAAM,eAAe,gBAAgB;CAGrC,MAAM,SAAS,cACP,4BAA4B,OAAO,QAAQ,YAAY,GAC7D,CAAC,OAAO,QAAQ,YAAY,CAC9B;CACA,MAAM,QAAQ,cAEV,uBACE,WAAW,OAAO,SAAS,SAAS;EAAE,GAAG;EAAQ;CAAO,CAC1D,GACF,CAAC,QAAQ,MAAM,CACjB;CACA,OAAO,oBAAC,eAAD;EAAsB;EAAQ;CAAwB,CAAA;AAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetProvider.d.ts","names":[],"sources":["../../../../src/providers/WidgetProvider/WidgetProvider.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"WidgetProvider.d.ts","names":[],"sources":["../../../../src/providers/WidgetProvider/WidgetProvider.tsx"],"mappings":";;;qBAuBa,uBAAsB;qBAEtB,gBAAgB,MAAM,GACjC,MAAM,kBAAkB"}
|
|
@@ -1,34 +1,38 @@
|
|
|
1
1
|
import { useSettingsActions } from "../../stores/settings/useSettingsActions.js";
|
|
2
|
+
import { isDestinationOnlyChain, withDestinationOnlyChains } from "../../utils/chainType.js";
|
|
3
|
+
import { defaultQueryScopeKey, resolveQueryScopeKey, resolveStorageScopeKey } from "../../utils/scopeKeys.js";
|
|
2
4
|
import { createContext, use, useId, useMemo } from "react";
|
|
3
5
|
import { jsx } from "react/jsx-runtime";
|
|
4
6
|
const WidgetContext = createContext({
|
|
5
7
|
elementId: "",
|
|
6
|
-
integrator: ""
|
|
8
|
+
integrator: "",
|
|
9
|
+
queryScopeKey: defaultQueryScopeKey
|
|
7
10
|
});
|
|
8
11
|
const useWidgetConfig = () => use(WidgetContext);
|
|
9
12
|
const WidgetProvider = ({ children, config: widgetConfig }) => {
|
|
10
13
|
const elementId = useId();
|
|
11
14
|
const { setDefaultSettings } = useSettingsActions();
|
|
12
15
|
if (!widgetConfig?.integrator) throw new Error("Required property \"integrator\" is missing.");
|
|
16
|
+
const chains = useMemo(() => withDestinationOnlyChains(widgetConfig.chains), [widgetConfig.chains]);
|
|
13
17
|
const value = useMemo(() => {
|
|
18
|
+
const { fromChain, fromToken, ...config } = widgetConfig;
|
|
19
|
+
const value = {
|
|
20
|
+
...isDestinationOnlyChain(fromChain) ? config : widgetConfig,
|
|
21
|
+
chains,
|
|
22
|
+
storageScopeKey: resolveStorageScopeKey(widgetConfig),
|
|
23
|
+
queryScopeKey: resolveQueryScopeKey(widgetConfig),
|
|
24
|
+
elementId
|
|
25
|
+
};
|
|
14
26
|
try {
|
|
15
|
-
const value = {
|
|
16
|
-
...widgetConfig,
|
|
17
|
-
elementId
|
|
18
|
-
};
|
|
19
27
|
setDefaultSettings(value);
|
|
20
|
-
return value;
|
|
21
28
|
} catch (e) {
|
|
22
29
|
console.warn(e);
|
|
23
|
-
return {
|
|
24
|
-
...widgetConfig,
|
|
25
|
-
elementId,
|
|
26
|
-
integrator: widgetConfig.integrator
|
|
27
|
-
};
|
|
28
30
|
}
|
|
31
|
+
return value;
|
|
29
32
|
}, [
|
|
30
33
|
elementId,
|
|
31
34
|
widgetConfig,
|
|
35
|
+
chains,
|
|
32
36
|
setDefaultSettings
|
|
33
37
|
]);
|
|
34
38
|
return /* @__PURE__ */ jsx(WidgetContext, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetProvider.js","names":[],"sources":["../../../../src/providers/WidgetProvider/WidgetProvider.tsx"],"sourcesContent":["import type { Context } from 'react'\nimport { createContext, use, useId, useMemo } from 'react'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport type { WidgetContextProps, WidgetProviderProps } from './types.js'\n\nconst initialContext: WidgetContextProps = {\n elementId: '',\n integrator: '',\n}\n\nexport const WidgetContext: Context<WidgetContextProps> =\n createContext<WidgetContextProps>(initialContext)\n\nexport const useWidgetConfig = (): WidgetContextProps => use(WidgetContext)\n\nexport const WidgetProvider: React.FC<\n React.PropsWithChildren<WidgetProviderProps>\n> = ({ children, config: widgetConfig }) => {\n const elementId = useId()\n const { setDefaultSettings } = useSettingsActions()\n\n if (!widgetConfig?.integrator) {\n throw new Error('Required property \"integrator\" is missing.')\n }\n\n const value = useMemo((): WidgetContextProps => {\n
|
|
1
|
+
{"version":3,"file":"WidgetProvider.js","names":[],"sources":["../../../../src/providers/WidgetProvider/WidgetProvider.tsx"],"sourcesContent":["import type { Context } from 'react'\nimport { createContext, use, useId, useMemo } from 'react'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport {\n isDestinationOnlyChain,\n withDestinationOnlyChains,\n} from '../../utils/chainType.js'\nimport {\n defaultQueryScopeKey,\n resolveQueryScopeKey,\n resolveStorageScopeKey,\n} from '../../utils/scopeKeys.js'\nimport type { WidgetContextProps, WidgetProviderProps } from './types.js'\n\nconst initialContext: WidgetContextProps = {\n elementId: '',\n integrator: '',\n queryScopeKey: defaultQueryScopeKey,\n}\n\nexport const WidgetContext: Context<WidgetContextProps> =\n createContext<WidgetContextProps>(initialContext)\n\nexport const useWidgetConfig = (): WidgetContextProps => use(WidgetContext)\n\nexport const WidgetProvider: React.FC<\n React.PropsWithChildren<WidgetProviderProps>\n> = ({ children, config: widgetConfig }) => {\n const elementId = useId()\n const { setDefaultSettings } = useSettingsActions()\n\n if (!widgetConfig?.integrator) {\n throw new Error('Required property \"integrator\" is missing.')\n }\n\n // Keyed on the integrator's `chains`: the config object is new on every render.\n const chains = useMemo(\n () => withDestinationOnlyChains(widgetConfig.chains),\n [widgetConfig.chains]\n )\n\n const value = useMemo((): WidgetContextProps => {\n // Omitted, not undefined: an own undefined key resets the form field.\n const { fromChain, fromToken, ...config } = widgetConfig\n const value = {\n ...(isDestinationOnlyChain(fromChain) ? config : widgetConfig),\n chains,\n // Resolved once, so nothing below reads the deprecated keyPrefix.\n storageScopeKey: resolveStorageScopeKey(widgetConfig),\n queryScopeKey: resolveQueryScopeKey(widgetConfig),\n elementId,\n } as WidgetContextProps\n try {\n // Set default settings for widget settings store\n setDefaultSettings(value)\n } catch (e) {\n console.warn(e)\n }\n return value\n }, [elementId, widgetConfig, chains, setDefaultSettings])\n return <WidgetContext value={value}>{children}</WidgetContext>\n}\n"],"mappings":";;;;;AAoBA,MAAa,gBACX,cAAkC;CANlC,WAAW;CACX,YAAY;CACZ,eAAe;AAImB,CAAc;AAElD,MAAa,wBAA4C,IAAI,aAAa;AAE1E,MAAa,kBAER,EAAE,UAAU,QAAQ,mBAAmB;CAC1C,MAAM,YAAY,MAAM;CACxB,MAAM,EAAE,uBAAuB,mBAAmB;CAElD,IAAI,CAAC,cAAc,YACjB,MAAM,IAAI,MAAM,8CAA4C;CAI9D,MAAM,SAAS,cACP,0BAA0B,aAAa,MAAM,GACnD,CAAC,aAAa,MAAM,CACtB;CAEA,MAAM,QAAQ,cAAkC;EAE9C,MAAM,EAAE,WAAW,WAAW,GAAG,WAAW;EAC5C,MAAM,QAAQ;GACZ,GAAI,uBAAuB,SAAS,IAAI,SAAS;GACjD;GAEA,iBAAiB,uBAAuB,YAAY;GACpD,eAAe,qBAAqB,YAAY;GAChD;EACF;EACA,IAAI;GAEF,mBAAmB,KAAK;EAC1B,SAAS,GAAG;GACV,QAAQ,KAAK,CAAC;EAChB;EACA,OAAO;CACT,GAAG;EAAC;EAAW;EAAc;EAAQ;CAAkB,CAAC;CACxD,OAAO,oBAAC,eAAD;EAAsB;EAAQ;CAAwB,CAAA;AAC/D"}
|
|
@@ -2,6 +2,8 @@ import { WidgetConfig } from "../../types/widget.js";
|
|
|
2
2
|
//#region src/providers/WidgetProvider/types.d.ts
|
|
3
3
|
export type WidgetContextProps = WidgetConfig & {
|
|
4
4
|
elementId: string;
|
|
5
|
+
/** Always resolved by `WidgetProvider` — see `resolveQueryScopeKey`. */
|
|
6
|
+
queryScopeKey: string;
|
|
5
7
|
};
|
|
6
8
|
export interface WidgetProviderProps {
|
|
7
9
|
config?: WidgetConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/providers/WidgetProvider/types.ts"],"mappings":";;YAEY,qBAAqB;EAC/B;;iBAGe;EACf,SAAS"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/providers/WidgetProvider/types.ts"],"mappings":";;YAEY,qBAAqB;EAC/B;;EAEA;;iBAGe;EACf,SAAS"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { FactoryQueryOptions, QueryParameter, ScopeKeyParameter } from "./types.js";
|
|
2
|
+
import { ChainType, ExtendedChain, SDKClient } from "@lifi/sdk";
|
|
3
|
+
//#region src/queries/getChains.d.ts
|
|
4
|
+
/** Every chain type the widget supports, in the order keys are built in. */
|
|
5
|
+
export declare const supportedChainTypes: readonly ChainType[];
|
|
6
|
+
export type GetChainsQueryFnData = ExtendedChain[];
|
|
7
|
+
export type GetChainsQueryKeyParameters = {
|
|
8
|
+
/** API base the client talks to. Different bases return different chains. */
|
|
9
|
+
apiUrl: string;
|
|
10
|
+
chainTypes: readonly ChainType[];
|
|
11
|
+
} & ScopeKeyParameter;
|
|
12
|
+
export type GetChainsQueryKey = readonly ["chains", {
|
|
13
|
+
apiUrl: string;
|
|
14
|
+
chainTypes: ChainType[];
|
|
15
|
+
scopeKey?: string;
|
|
16
|
+
}];
|
|
17
|
+
/** The key alone — to read, set or invalidate the entry. */
|
|
18
|
+
export declare function getChainsQueryKey(parameters: GetChainsQueryKeyParameters): GetChainsQueryKey;
|
|
19
|
+
export type GetChainsOptions<selectData = GetChainsQueryFnData> = {
|
|
20
|
+
/** Chain types to request, in any order. Defaults to every supported type. */
|
|
21
|
+
chainTypes?: readonly ChainType[] | undefined;
|
|
22
|
+
} & ScopeKeyParameter & QueryParameter<GetChainsQueryFnData, selectData, GetChainsQueryKey>;
|
|
23
|
+
export type GetChainsQueryOptions<selectData = GetChainsQueryFnData> = FactoryQueryOptions<GetChainsQueryFnData, selectData, GetChainsQueryKey>;
|
|
24
|
+
/**
|
|
25
|
+
* Query options for the chain list of one API base.
|
|
26
|
+
*
|
|
27
|
+
* The key is `['chains', { apiUrl, chainTypes, scopeKey }]`: the API base and
|
|
28
|
+
* the requested types decide the response, the scope isolates integrations.
|
|
29
|
+
* The widget and a host app that build their options here, with the same
|
|
30
|
+
* scope, therefore share one cache entry and one request.
|
|
31
|
+
*
|
|
32
|
+
* The query has no side effects. A caller that needs the chains in its SDK
|
|
33
|
+
* client's storage calls `client.setChains` on the data — the entry may have
|
|
34
|
+
* been filled by another caller, so a `queryFn` cannot be relied on to run.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getChainsQueryOptions<selectData = GetChainsQueryFnData>(client: SDKClient, options?: GetChainsOptions<selectData>): GetChainsQueryOptions<selectData>;
|
|
37
|
+
//#endregion
|
|
38
|
+
//# sourceMappingURL=getChains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChains.d.ts","names":[],"sources":["../../../src/queries/getChains.ts"],"mappings":";;;;qBASa,8BAA8B;YAS/B,uBAAuB;YAEvB;;EAEV;EACA,qBAAqB;IACnB;YAEQ;EAER;EAAgB,YAAY;EAAa;;;wBAS7B,kBACd,YAAY,8BACX;YAiBS,iBAAiB,aAAa;;EAExC,sBAAsB;IACpB,oBACF,eAAe,sBAAsB,YAAY;YAEvC,sBAAsB,aAAa,wBAC7C,oBAAoB,sBAAsB,YAAY;;;;;;;;;;;;;wBAcxC,sBAAsB,aAAa,sBACjD,QAAQ,WACR,UAAS,iBAAiB,cACzB,sBAAsB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ChainType, getChains } from "@lifi/sdk";
|
|
2
|
+
//#region src/queries/getChains.ts
|
|
3
|
+
/** Every chain type the widget supports, in the order keys are built in. */
|
|
4
|
+
const supportedChainTypes = [
|
|
5
|
+
ChainType.EVM,
|
|
6
|
+
ChainType.SVM,
|
|
7
|
+
ChainType.UTXO,
|
|
8
|
+
ChainType.MVM,
|
|
9
|
+
ChainType.TVM,
|
|
10
|
+
ChainType.STL
|
|
11
|
+
];
|
|
12
|
+
const rank = (type) => {
|
|
13
|
+
const index = supportedChainTypes.indexOf(type);
|
|
14
|
+
return index === -1 ? supportedChainTypes.length : index;
|
|
15
|
+
};
|
|
16
|
+
/** The key alone — to read, set or invalidate the entry. */
|
|
17
|
+
function getChainsQueryKey(parameters) {
|
|
18
|
+
const chainTypes = [...new Set(parameters.chainTypes)].sort((a, b) => rank(a) - rank(b) || a.localeCompare(b));
|
|
19
|
+
return ["chains", {
|
|
20
|
+
apiUrl: parameters.apiUrl,
|
|
21
|
+
chainTypes,
|
|
22
|
+
...parameters.scopeKey === void 0 ? {} : { scopeKey: parameters.scopeKey }
|
|
23
|
+
}];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Query options for the chain list of one API base.
|
|
27
|
+
*
|
|
28
|
+
* The key is `['chains', { apiUrl, chainTypes, scopeKey }]`: the API base and
|
|
29
|
+
* the requested types decide the response, the scope isolates integrations.
|
|
30
|
+
* The widget and a host app that build their options here, with the same
|
|
31
|
+
* scope, therefore share one cache entry and one request.
|
|
32
|
+
*
|
|
33
|
+
* The query has no side effects. A caller that needs the chains in its SDK
|
|
34
|
+
* client's storage calls `client.setChains` on the data — the entry may have
|
|
35
|
+
* been filled by another caller, so a `queryFn` cannot be relied on to run.
|
|
36
|
+
*/
|
|
37
|
+
function getChainsQueryOptions(client, options = {}) {
|
|
38
|
+
return {
|
|
39
|
+
...options.query,
|
|
40
|
+
queryKey: getChainsQueryKey({
|
|
41
|
+
apiUrl: client.config.apiUrl,
|
|
42
|
+
chainTypes: options.chainTypes ?? supportedChainTypes,
|
|
43
|
+
scopeKey: options.scopeKey
|
|
44
|
+
}),
|
|
45
|
+
queryFn: ({ queryKey: [, { chainTypes }] }) => getChains(client, { chainTypes })
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { getChainsQueryKey, getChainsQueryOptions, supportedChainTypes };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=getChains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChains.js","names":[],"sources":["../../../src/queries/getChains.ts"],"sourcesContent":["import type { ExtendedChain, SDKClient } from '@lifi/sdk'\nimport { ChainType, getChains } from '@lifi/sdk'\nimport type {\n FactoryQueryOptions,\n QueryParameter,\n ScopeKeyParameter,\n} from './types.js'\n\n/** Every chain type the widget supports, in the order keys are built in. */\nexport const supportedChainTypes: readonly ChainType[] = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n ChainType.STL,\n]\n\nexport type GetChainsQueryFnData = ExtendedChain[]\n\nexport type GetChainsQueryKeyParameters = {\n /** API base the client talks to. Different bases return different chains. */\n apiUrl: string\n chainTypes: readonly ChainType[]\n} & ScopeKeyParameter\n\nexport type GetChainsQueryKey = readonly [\n 'chains',\n { apiUrl: string; chainTypes: ChainType[]; scopeKey?: string },\n]\n\nconst rank = (type: ChainType): number => {\n const index = supportedChainTypes.indexOf(type)\n return index === -1 ? supportedChainTypes.length : index\n}\n\n/** The key alone — to read, set or invalidate the entry. */\nexport function getChainsQueryKey(\n parameters: GetChainsQueryKeyParameters\n): GetChainsQueryKey {\n // Array order is part of the query hash, so sort into one canonical order.\n const chainTypes = [...new Set(parameters.chainTypes)].sort(\n (a, b) => rank(a) - rank(b) || a.localeCompare(b)\n )\n return [\n 'chains',\n {\n apiUrl: parameters.apiUrl,\n chainTypes,\n ...(parameters.scopeKey === undefined\n ? {}\n : { scopeKey: parameters.scopeKey }),\n },\n ]\n}\n\nexport type GetChainsOptions<selectData = GetChainsQueryFnData> = {\n /** Chain types to request, in any order. Defaults to every supported type. */\n chainTypes?: readonly ChainType[] | undefined\n} & ScopeKeyParameter &\n QueryParameter<GetChainsQueryFnData, selectData, GetChainsQueryKey>\n\nexport type GetChainsQueryOptions<selectData = GetChainsQueryFnData> =\n FactoryQueryOptions<GetChainsQueryFnData, selectData, GetChainsQueryKey>\n\n/**\n * Query options for the chain list of one API base.\n *\n * The key is `['chains', { apiUrl, chainTypes, scopeKey }]`: the API base and\n * the requested types decide the response, the scope isolates integrations.\n * The widget and a host app that build their options here, with the same\n * scope, therefore share one cache entry and one request.\n *\n * The query has no side effects. A caller that needs the chains in its SDK\n * client's storage calls `client.setChains` on the data — the entry may have\n * been filled by another caller, so a `queryFn` cannot be relied on to run.\n */\nexport function getChainsQueryOptions<selectData = GetChainsQueryFnData>(\n client: SDKClient,\n options: GetChainsOptions<selectData> = {}\n): GetChainsQueryOptions<selectData> {\n return {\n ...options.query,\n queryKey: getChainsQueryKey({\n apiUrl: client.config.apiUrl,\n chainTypes: options.chainTypes ?? supportedChainTypes,\n scopeKey: options.scopeKey,\n }),\n // No signal: the data still fills the cache if all observers leave.\n queryFn: ({ queryKey: [, { chainTypes }] }) =>\n getChains(client, { chainTypes }),\n }\n}\n"],"mappings":";;;AASA,MAAa,sBAA4C;CACvD,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAeA,MAAM,QAAQ,SAA4B;CACxC,MAAM,QAAQ,oBAAoB,QAAQ,IAAI;CAC9C,OAAO,UAAU,KAAK,oBAAoB,SAAS;AACrD;;AAGA,SAAgB,kBACd,YACmB;CAEnB,MAAM,aAAa,CAAC,GAAG,IAAI,IAAI,WAAW,UAAU,CAAC,CAAC,CAAC,MACpD,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAClD;CACA,OAAO,CACL,UACA;EACE,QAAQ,WAAW;EACnB;EACA,GAAI,WAAW,aAAa,KAAA,IACxB,CAAC,IACD,EAAE,UAAU,WAAW,SAAS;CACtC,CACF;AACF;;;;;;;;;;;;;AAuBA,SAAgB,sBACd,QACA,UAAwC,CAAC,GACN;CACnC,OAAO;EACL,GAAG,QAAQ;EACX,UAAU,kBAAkB;GAC1B,QAAQ,OAAO,OAAO;GACtB,YAAY,QAAQ,cAAc;GAClC,UAAU,QAAQ;EACpB,CAAC;EAED,UAAU,EAAE,UAAU,GAAG,EAAE,oBACzB,UAAU,QAAQ,EAAE,WAAW,CAAC;CACpC;AACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FactoryQueryOptions, QueryParameter, ScopeKeyParameter } from "./types.js";
|
|
2
|
+
import { SDKClient, ToolsResponse } from "@lifi/sdk";
|
|
3
|
+
//#region src/queries/getTools.d.ts
|
|
4
|
+
export type GetToolsQueryFnData = ToolsResponse;
|
|
5
|
+
export type GetToolsQueryKeyParameters = {
|
|
6
|
+
/** API base the client talks to. Different bases return different tools. */
|
|
7
|
+
apiUrl: string;
|
|
8
|
+
} & ScopeKeyParameter;
|
|
9
|
+
export type GetToolsQueryKey = readonly ["tools", {
|
|
10
|
+
apiUrl: string;
|
|
11
|
+
scopeKey?: string;
|
|
12
|
+
}];
|
|
13
|
+
/** The key alone — to read, set or invalidate the entry. */
|
|
14
|
+
export declare function getToolsQueryKey(parameters: GetToolsQueryKeyParameters): GetToolsQueryKey;
|
|
15
|
+
export type GetToolsOptions<selectData = GetToolsQueryFnData> = ScopeKeyParameter & QueryParameter<GetToolsQueryFnData, selectData, GetToolsQueryKey>;
|
|
16
|
+
export type GetToolsQueryOptions<selectData = GetToolsQueryFnData> = FactoryQueryOptions<GetToolsQueryFnData, selectData, GetToolsQueryKey>;
|
|
17
|
+
/**
|
|
18
|
+
* Query options for the bridges and exchanges of one API base.
|
|
19
|
+
*
|
|
20
|
+
* The key is `['tools', { apiUrl, scopeKey }]`. The cache holds the raw,
|
|
21
|
+
* unfiltered response so every caller can share it; narrow it per caller with
|
|
22
|
+
* `query.select`, never in the `queryFn`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getToolsQueryOptions<selectData = GetToolsQueryFnData>(client: SDKClient, options?: GetToolsOptions<selectData>): GetToolsQueryOptions<selectData>;
|
|
25
|
+
//#endregion
|
|
26
|
+
//# sourceMappingURL=getTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTools.d.ts","names":[],"sources":["../../../src/queries/getTools.ts"],"mappings":";;;YAQY,sBAAsB;YAEtB;;EAEV;IACE;YAEQ;EAER;EAAgB;;;wBAIJ,iBACd,YAAY,6BACX;YAYS,gBAAgB,aAAa,uBACvC,oBACE,eAAe,qBAAqB,YAAY;YAExC,qBAAqB,aAAa,uBAC5C,oBAAoB,qBAAqB,YAAY;;;;;;;;wBASvC,qBAAqB,aAAa,qBAChD,QAAQ,WACR,UAAS,gBAAgB,cACxB,qBAAqB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { getTools } from "@lifi/sdk";
|
|
2
|
+
//#region src/queries/getTools.ts
|
|
3
|
+
/** The key alone — to read, set or invalidate the entry. */
|
|
4
|
+
function getToolsQueryKey(parameters) {
|
|
5
|
+
return ["tools", {
|
|
6
|
+
apiUrl: parameters.apiUrl,
|
|
7
|
+
...parameters.scopeKey === void 0 ? {} : { scopeKey: parameters.scopeKey }
|
|
8
|
+
}];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Query options for the bridges and exchanges of one API base.
|
|
12
|
+
*
|
|
13
|
+
* The key is `['tools', { apiUrl, scopeKey }]`. The cache holds the raw,
|
|
14
|
+
* unfiltered response so every caller can share it; narrow it per caller with
|
|
15
|
+
* `query.select`, never in the `queryFn`.
|
|
16
|
+
*/
|
|
17
|
+
function getToolsQueryOptions(client, options = {}) {
|
|
18
|
+
return {
|
|
19
|
+
...options.query,
|
|
20
|
+
queryKey: getToolsQueryKey({
|
|
21
|
+
apiUrl: client.config.apiUrl,
|
|
22
|
+
scopeKey: options.scopeKey
|
|
23
|
+
}),
|
|
24
|
+
queryFn: ({ signal }) => getTools(client, void 0, { signal })
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { getToolsQueryKey, getToolsQueryOptions };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=getTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTools.js","names":[],"sources":["../../../src/queries/getTools.ts"],"sourcesContent":["import type { SDKClient, ToolsResponse } from '@lifi/sdk'\nimport { getTools } from '@lifi/sdk'\nimport type {\n FactoryQueryOptions,\n QueryParameter,\n ScopeKeyParameter,\n} from './types.js'\n\nexport type GetToolsQueryFnData = ToolsResponse\n\nexport type GetToolsQueryKeyParameters = {\n /** API base the client talks to. Different bases return different tools. */\n apiUrl: string\n} & ScopeKeyParameter\n\nexport type GetToolsQueryKey = readonly [\n 'tools',\n { apiUrl: string; scopeKey?: string },\n]\n\n/** The key alone — to read, set or invalidate the entry. */\nexport function getToolsQueryKey(\n parameters: GetToolsQueryKeyParameters\n): GetToolsQueryKey {\n return [\n 'tools',\n {\n apiUrl: parameters.apiUrl,\n ...(parameters.scopeKey === undefined\n ? {}\n : { scopeKey: parameters.scopeKey }),\n },\n ]\n}\n\nexport type GetToolsOptions<selectData = GetToolsQueryFnData> =\n ScopeKeyParameter &\n QueryParameter<GetToolsQueryFnData, selectData, GetToolsQueryKey>\n\nexport type GetToolsQueryOptions<selectData = GetToolsQueryFnData> =\n FactoryQueryOptions<GetToolsQueryFnData, selectData, GetToolsQueryKey>\n\n/**\n * Query options for the bridges and exchanges of one API base.\n *\n * The key is `['tools', { apiUrl, scopeKey }]`. The cache holds the raw,\n * unfiltered response so every caller can share it; narrow it per caller with\n * `query.select`, never in the `queryFn`.\n */\nexport function getToolsQueryOptions<selectData = GetToolsQueryFnData>(\n client: SDKClient,\n options: GetToolsOptions<selectData> = {}\n): GetToolsQueryOptions<selectData> {\n return {\n ...options.query,\n queryKey: getToolsQueryKey({\n apiUrl: client.config.apiUrl,\n scopeKey: options.scopeKey,\n }),\n queryFn: ({ signal }) => getTools(client, undefined, { signal }),\n }\n}\n"],"mappings":";;;AAqBA,SAAgB,iBACd,YACkB;CAClB,OAAO,CACL,SACA;EACE,QAAQ,WAAW;EACnB,GAAI,WAAW,aAAa,KAAA,IACxB,CAAC,IACD,EAAE,UAAU,WAAW,SAAS;CACtC,CACF;AACF;;;;;;;;AAgBA,SAAgB,qBACd,QACA,UAAuC,CAAC,GACN;CAClC,OAAO;EACL,GAAG,QAAQ;EACX,UAAU,iBAAiB;GACzB,QAAQ,OAAO,OAAO;GACtB,UAAU,QAAQ;EACpB,CAAC;EACD,UAAU,EAAE,aAAa,SAAS,QAAQ,KAAA,GAAW,EAAE,OAAO,CAAC;CACjE;AACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { QueryParameter, ScopeKeyParameter } from "./types.js";
|
|
2
|
+
import { GetChainsOptions, GetChainsQueryFnData, GetChainsQueryKey, GetChainsQueryKeyParameters, GetChainsQueryOptions, getChainsQueryKey, getChainsQueryOptions, supportedChainTypes } from "./getChains.js";
|
|
3
|
+
import { GetToolsOptions, GetToolsQueryFnData, GetToolsQueryKey, GetToolsQueryKeyParameters, GetToolsQueryOptions, getToolsQueryKey, getToolsQueryOptions } from "./getTools.js";
|
|
4
|
+
export { type GetChainsOptions, type GetChainsQueryFnData, type GetChainsQueryKey, type GetChainsQueryKeyParameters, type GetChainsQueryOptions, type GetToolsOptions, type GetToolsQueryFnData, type GetToolsQueryKey, type GetToolsQueryKeyParameters, type GetToolsQueryOptions, type QueryParameter, type ScopeKeyParameter, getChainsQueryKey, getChainsQueryOptions, getToolsQueryKey, getToolsQueryOptions, supportedChainTypes };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { getChainsQueryKey, getChainsQueryOptions, supportedChainTypes } from "./getChains.js";
|
|
2
|
+
import { getToolsQueryKey, getToolsQueryOptions } from "./getTools.js";
|
|
3
|
+
export { getChainsQueryKey, getChainsQueryOptions, getToolsQueryKey, getToolsQueryOptions, supportedChainTypes };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { QueryFunction, QueryKey, UseQueryOptions } from "@tanstack/react-query";
|
|
2
|
+
//#region src/queries/types.d.ts
|
|
3
|
+
export type ScopeKeyParameter = {
|
|
4
|
+
/**
|
|
5
|
+
* Scopes the entry inside a shared `QueryClient`, like wagmi's `scopeKey`.
|
|
6
|
+
* Callers that pass the same value share the cached data; a widget passes
|
|
7
|
+
* its `queryScopeKey`.
|
|
8
|
+
*/
|
|
9
|
+
scopeKey?: string | undefined;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Behaviour the caller owns — `staleTime`, `refetchInterval`, `select`,
|
|
13
|
+
* `enabled`, … It is spread into the options and never becomes part of the
|
|
14
|
+
* key, so callers with different behaviour still share one entry.
|
|
15
|
+
*/
|
|
16
|
+
export type QueryParameter<queryFnData, data, queryKey extends QueryKey> = {
|
|
17
|
+
query?: Omit<UseQueryOptions<queryFnData, Error, data, queryKey>, "queryKey" | "queryFn"> | undefined;
|
|
18
|
+
};
|
|
19
|
+
/** Options ready for `useQuery`, `fetchQuery` or `prefetchQuery`. */
|
|
20
|
+
export type FactoryQueryOptions<queryFnData, data, queryKey extends QueryKey> = UseQueryOptions<queryFnData, Error, data, queryKey> & {
|
|
21
|
+
queryKey: queryKey;
|
|
22
|
+
queryFn: QueryFunction<queryFnData, queryKey>;
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/queries/types.ts"],"mappings":";;YAMY;;;;;;EAMV;;;;;;;YAQU,eAAe,aAAa,MAAM,iBAAiB;EAC7D,QACI,KACE,gBAAgB,aAAa,OAAO,MAAM;;;YAOtC,oBACV,aACA,MACA,iBAAiB,YACf,gBAAgB,aAAa,OAAO,MAAM;EAC5C,UAAU;EACV,SAAS,cAAc,aAAa"}
|
package/dist/esm/shared.d.ts
CHANGED
|
@@ -103,6 +103,7 @@ import { buildRouteFromTxHistory } from "./utils/converters.js";
|
|
|
103
103
|
import { ElementId, createElementId } from "./utils/elements.js";
|
|
104
104
|
import { hasEnumFlag } from "./utils/enum.js";
|
|
105
105
|
import { fitInputText } from "./utils/input.js";
|
|
106
|
+
import { resolveStorageScopeKey } from "./utils/scopeKeys.js";
|
|
106
107
|
import { isHttpUrl, openInNewTab } from "./utils/url.js";
|
|
107
108
|
import { shortenAddress } from "./utils/wallet.js";
|
|
108
|
-
export { ActionRow, AddressType, AmountInputEndAdornment, AvatarBadgedDefault, BaseTransactionButton, BookmarkStoreProvider, type BottomSheetBase, ButtonTertiary, Card, CardIconButton, CardTitle, ChainAvatar, ChainSelect, ConfirmToAddressSheet, ContactSupportButton, ContractComponent, DateLabelContainer, DateLabelText, DetailInfoIcon, DetailLabel, DetailLabelContainer, DetailRow, DetailValue, ElementId, ExchangeRateBottomSheet, type ExchangeRateBottomSheetBase, ExecutionDoneCard, type ExecutionRow, ExecutionStatusCard, ExternalLink, FeeBreakdownTooltip, FormControl, FormKeyHelper, type FormRef, type FormType, type FormTypeProps, I18nProvider, IconCircle, IconTypography, Input, InputCard, InputPriceButton, ListItemButton, MainWarningMessages, PageContainer, PoweredBy, ProgressToNextUpdate, QueryClientProvider, RouteCard, RouteCardSkeleton, RouteDetails, RouteExecutionStatus, RouteNotFoundCard, RouteTokens, RouteTracker, SDKClientProvider, SearchInput, SearchTokenInput, SelectChainPage, SendToWalletButton, SentToWalletRow, SettingsStoreProvider, Stack, StartTransactionButton, StatusIcon, StepActionsList, StoreProvider, Token, TokenAvatar, TokenNotFound, TokenRate, TokenValueBottomSheet, TransactionDoneButtons, VirtualizedTokenList, WalletProvider, WarningMessages, type WidgetConfig, WidgetEvent, WidgetProvider, type WidgetTheme, buildRouteFromTxHistory, calculateValueLossPercentage, createElementId, createTheme, fitInputText, formatDuration, formatInputAmount, formatTokenAmount, formatTokenPrice, getAccumulatedFeeCostsBreakdown, getPriceImpact, getSourceTxHash, getTokenValueLossThreshold, hasEnumFlag, isHttpUrl, isRouteActive, isRouteDone, isRouteFailed, navigationRoutes, openInNewTab, priceToTokenAmount, shortenAddress, usdDecimals, useAddressActivity, useAddressValidation, useAvailableChains, useChain, useChainOrderStore, useContactSupport, useDebouncedWatch, useExecutionRows, useExplorer, useFieldActions, useFieldValues, useHeader, useHeaderStore, useInputModeStore, useListHeight, useNavigateBack, useRouteExecution, useRouteExecutionMessage, useRouteExecutionStore, useRouteExecutionStoreContext, useRoutes, useSDKClient, useSetHeaderHeight, useSettingsStoreContext, useToAddressRequirements, useToken, useTokenAddressBalance, useTokenBalances, useTokenList, useTokenSelect, useTools, useWidgetConfig, useWidgetEvents };
|
|
109
|
+
export { ActionRow, AddressType, AmountInputEndAdornment, AvatarBadgedDefault, BaseTransactionButton, BookmarkStoreProvider, type BottomSheetBase, ButtonTertiary, Card, CardIconButton, CardTitle, ChainAvatar, ChainSelect, ConfirmToAddressSheet, ContactSupportButton, ContractComponent, DateLabelContainer, DateLabelText, DetailInfoIcon, DetailLabel, DetailLabelContainer, DetailRow, DetailValue, ElementId, ExchangeRateBottomSheet, type ExchangeRateBottomSheetBase, ExecutionDoneCard, type ExecutionRow, ExecutionStatusCard, ExternalLink, FeeBreakdownTooltip, FormControl, FormKeyHelper, type FormRef, type FormType, type FormTypeProps, I18nProvider, IconCircle, IconTypography, Input, InputCard, InputPriceButton, ListItemButton, MainWarningMessages, PageContainer, PoweredBy, ProgressToNextUpdate, QueryClientProvider, RouteCard, RouteCardSkeleton, RouteDetails, RouteExecutionStatus, RouteNotFoundCard, RouteTokens, RouteTracker, SDKClientProvider, SearchInput, SearchTokenInput, SelectChainPage, SendToWalletButton, SentToWalletRow, SettingsStoreProvider, Stack, StartTransactionButton, StatusIcon, StepActionsList, StoreProvider, Token, TokenAvatar, TokenNotFound, TokenRate, TokenValueBottomSheet, TransactionDoneButtons, VirtualizedTokenList, WalletProvider, WarningMessages, type WidgetConfig, WidgetEvent, WidgetProvider, type WidgetTheme, buildRouteFromTxHistory, calculateValueLossPercentage, createElementId, createTheme, fitInputText, formatDuration, formatInputAmount, formatTokenAmount, formatTokenPrice, getAccumulatedFeeCostsBreakdown, getPriceImpact, getSourceTxHash, getTokenValueLossThreshold, hasEnumFlag, isHttpUrl, isRouteActive, isRouteDone, isRouteFailed, navigationRoutes, openInNewTab, priceToTokenAmount, resolveStorageScopeKey, shortenAddress, usdDecimals, useAddressActivity, useAddressValidation, useAvailableChains, useChain, useChainOrderStore, useContactSupport, useDebouncedWatch, useExecutionRows, useExplorer, useFieldActions, useFieldValues, useHeader, useHeaderStore, useInputModeStore, useListHeight, useNavigateBack, useRouteExecution, useRouteExecutionMessage, useRouteExecutionStore, useRouteExecutionStoreContext, useRoutes, useSDKClient, useSetHeaderHeight, useSettingsStoreContext, useToAddressRequirements, useToken, useTokenAddressBalance, useTokenBalances, useTokenList, useTokenSelect, useTools, useWidgetConfig, useWidgetEvents };
|
package/dist/esm/shared.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useWidgetEvents } from "./hooks/useWidgetEvents.js";
|
|
2
2
|
import { WidgetEvent } from "./types/events.js";
|
|
3
3
|
import { SettingsStoreProvider, useSettingsStoreContext } from "./stores/settings/SettingsStore.js";
|
|
4
|
+
import { resolveStorageScopeKey } from "./utils/scopeKeys.js";
|
|
4
5
|
import { WidgetProvider, useWidgetConfig } from "./providers/WidgetProvider/WidgetProvider.js";
|
|
5
6
|
import { useHeaderStore, useSetHeaderHeight } from "./stores/header/useHeaderStore.js";
|
|
6
7
|
import { ElementId, createElementId } from "./utils/elements.js";
|
|
@@ -103,4 +104,4 @@ import { createTheme } from "./themes/createTheme.js";
|
|
|
103
104
|
import { WalletProvider } from "./providers/WalletProvider/WalletProvider.js";
|
|
104
105
|
import { StoreProvider } from "./stores/StoreProvider.js";
|
|
105
106
|
import { useTokenList } from "./hooks/useTokenList.js";
|
|
106
|
-
export { ActionRow, AddressType, AmountInputEndAdornment, AvatarBadgedDefault, BaseTransactionButton, BookmarkStoreProvider, ButtonTertiary, Card, CardIconButton, CardTitle, ChainAvatar, ChainSelect, ConfirmToAddressSheet, ContactSupportButton, ContractComponent, DateLabelContainer, DateLabelText, DetailInfoIcon, DetailLabel, DetailLabelContainer, DetailRow, DetailValue, ElementId, ExchangeRateBottomSheet, ExecutionDoneCard, ExecutionStatusCard, ExternalLink, FeeBreakdownTooltip, FormControl, FormKeyHelper, I18nProvider, IconCircle, IconTypography, Input, InputCard, InputPriceButton, ListItemButton, MainWarningMessages, PageContainer, PoweredBy, ProgressToNextUpdate, QueryClientProvider, RouteCard, RouteCardSkeleton, RouteDetails, RouteExecutionStatus, RouteNotFoundCard, RouteTokens, RouteTracker, SDKClientProvider, SearchInput, SearchTokenInput, SelectChainPage, SendToWalletButton, SentToWalletRow, SettingsStoreProvider, Stack, StartTransactionButton, StatusIcon, StepActionsList, StoreProvider, Token, TokenAvatar, TokenNotFound, TokenRate, TokenValueBottomSheet, TransactionDoneButtons, VirtualizedTokenList, WalletProvider, WarningMessages, WidgetEvent, WidgetProvider, buildRouteFromTxHistory, calculateValueLossPercentage, createElementId, createTheme, fitInputText, formatDuration, formatInputAmount, formatTokenAmount, formatTokenPrice, getAccumulatedFeeCostsBreakdown, getPriceImpact, getSourceTxHash, getTokenValueLossThreshold, hasEnumFlag, isHttpUrl, isRouteActive, isRouteDone, isRouteFailed, navigationRoutes, openInNewTab, priceToTokenAmount, shortenAddress, usdDecimals, useAddressActivity, useAddressValidation, useAvailableChains, useChain, useChainOrderStore, useContactSupport, useDebouncedWatch, useExecutionRows, useExplorer, useFieldActions, useFieldValues, useHeader, useHeaderStore, useInputModeStore, useListHeight, useNavigateBack, useRouteExecution, useRouteExecutionMessage, useRouteExecutionStore, useRouteExecutionStoreContext, useRoutes, useSDKClient, useSetHeaderHeight, useSettingsStoreContext, useToAddressRequirements, useToken, useTokenAddressBalance, useTokenBalances, useTokenList, useTokenSelect, useTools, useWidgetConfig, useWidgetEvents };
|
|
107
|
+
export { ActionRow, AddressType, AmountInputEndAdornment, AvatarBadgedDefault, BaseTransactionButton, BookmarkStoreProvider, ButtonTertiary, Card, CardIconButton, CardTitle, ChainAvatar, ChainSelect, ConfirmToAddressSheet, ContactSupportButton, ContractComponent, DateLabelContainer, DateLabelText, DetailInfoIcon, DetailLabel, DetailLabelContainer, DetailRow, DetailValue, ElementId, ExchangeRateBottomSheet, ExecutionDoneCard, ExecutionStatusCard, ExternalLink, FeeBreakdownTooltip, FormControl, FormKeyHelper, I18nProvider, IconCircle, IconTypography, Input, InputCard, InputPriceButton, ListItemButton, MainWarningMessages, PageContainer, PoweredBy, ProgressToNextUpdate, QueryClientProvider, RouteCard, RouteCardSkeleton, RouteDetails, RouteExecutionStatus, RouteNotFoundCard, RouteTokens, RouteTracker, SDKClientProvider, SearchInput, SearchTokenInput, SelectChainPage, SendToWalletButton, SentToWalletRow, SettingsStoreProvider, Stack, StartTransactionButton, StatusIcon, StepActionsList, StoreProvider, Token, TokenAvatar, TokenNotFound, TokenRate, TokenValueBottomSheet, TransactionDoneButtons, VirtualizedTokenList, WalletProvider, WarningMessages, WidgetEvent, WidgetProvider, buildRouteFromTxHistory, calculateValueLossPercentage, createElementId, createTheme, fitInputText, formatDuration, formatInputAmount, formatTokenAmount, formatTokenPrice, getAccumulatedFeeCostsBreakdown, getPriceImpact, getSourceTxHash, getTokenValueLossThreshold, hasEnumFlag, isHttpUrl, isRouteActive, isRouteDone, isRouteFailed, navigationRoutes, openInNewTab, priceToTokenAmount, resolveStorageScopeKey, shortenAddress, usdDecimals, useAddressActivity, useAddressValidation, useAvailableChains, useChain, useChainOrderStore, useContactSupport, useDebouncedWatch, useExecutionRows, useExplorer, useFieldActions, useFieldValues, useHeader, useHeaderStore, useInputModeStore, useListHeight, useNavigateBack, useRouteExecution, useRouteExecutionMessage, useRouteExecutionStore, useRouteExecutionStoreContext, useRoutes, useSDKClient, useSetHeaderHeight, useSettingsStoreContext, useToAddressRequirements, useToken, useTokenAddressBalance, useTokenBalances, useTokenList, useTokenSelect, useTools, useWidgetConfig, useWidgetEvents };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreProvider.d.ts","names":[],"sources":["../../../src/stores/StoreProvider.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"StoreProvider.d.ts","names":[],"sources":["../../../src/stores/StoreProvider.tsx"],"mappings":";;;qBAYa,eAAe,MAAM,GAAG,kBAAkB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveStorageScopeKey } from "../utils/scopeKeys.js";
|
|
1
2
|
import { HeaderStoreProvider } from "./header/useHeaderStore.js";
|
|
2
3
|
import { NavigationTabsStoreProvider } from "./navigationTabs/useNavigationTabsStore.js";
|
|
3
4
|
import { BookmarkStoreProvider } from "./bookmarks/BookmarkStore.js";
|
|
@@ -9,30 +10,28 @@ import { FormStoreProvider } from "./form/FormStore.js";
|
|
|
9
10
|
import { jsx } from "react/jsx-runtime";
|
|
10
11
|
//#region src/stores/StoreProvider.tsx
|
|
11
12
|
const StoreProvider = ({ children, config, formRef }) => {
|
|
13
|
+
const storageScopeKey = resolveStorageScopeKey(config);
|
|
12
14
|
return /* @__PURE__ */ jsx(NavigationTabsStoreProvider, {
|
|
13
15
|
config,
|
|
14
|
-
children: /* @__PURE__ */ jsx(HeaderStoreProvider, {
|
|
15
|
-
namePrefix:
|
|
16
|
-
children: /* @__PURE__ */ jsx(
|
|
17
|
-
namePrefix:
|
|
18
|
-
children: /* @__PURE__ */ jsx(
|
|
19
|
-
namePrefix:
|
|
20
|
-
children: /* @__PURE__ */ jsx(
|
|
21
|
-
|
|
22
|
-
children: /* @__PURE__ */ jsx(
|
|
23
|
-
|
|
24
|
-
children: /* @__PURE__ */ jsx(
|
|
25
|
-
namePrefix:
|
|
26
|
-
children
|
|
27
|
-
namePrefix: config?.keyPrefix,
|
|
28
|
-
children
|
|
29
|
-
})
|
|
16
|
+
children: /* @__PURE__ */ jsx(HeaderStoreProvider, { children: /* @__PURE__ */ jsx(BookmarkStoreProvider, {
|
|
17
|
+
namePrefix: storageScopeKey,
|
|
18
|
+
children: /* @__PURE__ */ jsx(PinnedTokensStoreProvider, {
|
|
19
|
+
namePrefix: storageScopeKey,
|
|
20
|
+
children: /* @__PURE__ */ jsx(RecentTokensStoreProvider, {
|
|
21
|
+
namePrefix: storageScopeKey,
|
|
22
|
+
children: /* @__PURE__ */ jsx(FormStoreProvider, {
|
|
23
|
+
formRef,
|
|
24
|
+
children: /* @__PURE__ */ jsx(ChainOrderStoreProvider, {
|
|
25
|
+
namePrefix: storageScopeKey,
|
|
26
|
+
children: /* @__PURE__ */ jsx(RouteExecutionStoreProvider, {
|
|
27
|
+
namePrefix: storageScopeKey,
|
|
28
|
+
children
|
|
30
29
|
})
|
|
31
30
|
})
|
|
32
31
|
})
|
|
33
32
|
})
|
|
34
33
|
})
|
|
35
|
-
})
|
|
34
|
+
}) })
|
|
36
35
|
});
|
|
37
36
|
};
|
|
38
37
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreProvider.js","names":[],"sources":["../../../src/stores/StoreProvider.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react'\nimport type { WidgetConfigProps } from '../types/widget.js'\nimport { BookmarkStoreProvider } from './bookmarks/BookmarkStore.js'\nimport { ChainOrderStoreProvider } from './chains/ChainOrderStore.js'\nimport { FormStoreProvider } from './form/FormStore.js'\nimport { HeaderStoreProvider } from './header/useHeaderStore.js'\nimport { NavigationTabsStoreProvider } from './navigationTabs/useNavigationTabsStore.js'\nimport { PinnedTokensStoreProvider } from './pinnedTokens/PinnedTokensStore.js'\nimport { RecentTokensStoreProvider } from './recentTokens/RecentTokensStore.js'\nimport { RouteExecutionStoreProvider } from './routes/RouteExecutionStore.js'\n\nexport const StoreProvider: React.FC<PropsWithChildren<WidgetConfigProps>> = ({\n children,\n config,\n formRef,\n}) => {\n return (\n <NavigationTabsStoreProvider config={config}>\n <HeaderStoreProvider
|
|
1
|
+
{"version":3,"file":"StoreProvider.js","names":[],"sources":["../../../src/stores/StoreProvider.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react'\nimport type { WidgetConfigProps } from '../types/widget.js'\nimport { resolveStorageScopeKey } from '../utils/scopeKeys.js'\nimport { BookmarkStoreProvider } from './bookmarks/BookmarkStore.js'\nimport { ChainOrderStoreProvider } from './chains/ChainOrderStore.js'\nimport { FormStoreProvider } from './form/FormStore.js'\nimport { HeaderStoreProvider } from './header/useHeaderStore.js'\nimport { NavigationTabsStoreProvider } from './navigationTabs/useNavigationTabsStore.js'\nimport { PinnedTokensStoreProvider } from './pinnedTokens/PinnedTokensStore.js'\nimport { RecentTokensStoreProvider } from './recentTokens/RecentTokensStore.js'\nimport { RouteExecutionStoreProvider } from './routes/RouteExecutionStore.js'\n\nexport const StoreProvider: React.FC<PropsWithChildren<WidgetConfigProps>> = ({\n children,\n config,\n formRef,\n}) => {\n const storageScopeKey = resolveStorageScopeKey(config)\n return (\n <NavigationTabsStoreProvider config={config}>\n <HeaderStoreProvider>\n <BookmarkStoreProvider namePrefix={storageScopeKey}>\n <PinnedTokensStoreProvider namePrefix={storageScopeKey}>\n <RecentTokensStoreProvider namePrefix={storageScopeKey}>\n <FormStoreProvider formRef={formRef}>\n <ChainOrderStoreProvider namePrefix={storageScopeKey}>\n <RouteExecutionStoreProvider namePrefix={storageScopeKey}>\n {children}\n </RouteExecutionStoreProvider>\n </ChainOrderStoreProvider>\n </FormStoreProvider>\n </RecentTokensStoreProvider>\n </PinnedTokensStoreProvider>\n </BookmarkStoreProvider>\n </HeaderStoreProvider>\n </NavigationTabsStoreProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,iBAAiE,EAC5E,UACA,QACA,cACI;CACJ,MAAM,kBAAkB,uBAAuB,MAAM;CACrD,OACE,oBAAC,6BAAD;EAAqC;EACnC,UAAA,oBAAC,qBAAD,EAAA,UACE,oBAAC,uBAAD;GAAuB,YAAY;GACjC,UAAA,oBAAC,2BAAD;IAA2B,YAAY;IACrC,UAAA,oBAAC,2BAAD;KAA2B,YAAY;KACrC,UAAA,oBAAC,mBAAD;MAA4B;MAC1B,UAAA,oBAAC,yBAAD;OAAyB,YAAY;OACnC,UAAA,oBAAC,6BAAD;QAA6B,YAAY;QACtC;OAC0B,CAAA;MACN,CAAA;KACR,CAAA;IACM,CAAA;GACF,CAAA;EACN,CAAA,EACJ,CAAA;CACM,CAAA;AAEjC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ToAddress } from "../../types/widget.js";
|
|
2
|
+
import { ChainId } from "@lifi/sdk";
|
|
2
3
|
import { StoreApi, UseBoundStore } from "zustand";
|
|
3
4
|
//#region src/stores/bookmarks/types.d.ts
|
|
4
5
|
export interface Bookmark extends ToAddress {
|
|
5
6
|
isConnectedAccount?: boolean;
|
|
7
|
+
/** Display only: set when the ecosystem's default chain rejects the address. */
|
|
8
|
+
chainId?: ChainId;
|
|
6
9
|
}
|
|
7
10
|
export interface BookmarkProps {
|
|
8
11
|
selectedBookmark?: Bookmark;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/stores/bookmarks/types.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/stores/bookmarks/types.ts"],"mappings":";;;;iBAIiB,iBAAiB;EAChC;;EAEA,UAAU;;iBAGK;EACf,mBAAmB;EACnB,WAAW;EACX,eAAe;;iBAGA;EACf,cAAc,oBAAoB;EAClC,cAAc,UAAU;EACxB,iBAAiB;EACjB,sBAAsB,WAAW;EACjC,2BAA2B;EAC3B,kBAAkB,UAAU;EAC5B,qBAAqB;;YAGX,gBAAgB,gBAAgB;YAEhC,gBAAgB,cAAc,SAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainOrderStore.d.ts","names":[],"sources":["../../../../src/stores/chains/ChainOrderStore.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ChainOrderStore.d.ts","names":[],"sources":["../../../../src/stores/chains/ChainOrderStore.tsx"],"mappings":";;;;wBAqLgB,mBAAmB,GACjC,WAAW,OAAO,oBAAoB,IACrC"}
|
|
@@ -33,7 +33,10 @@ function ChainOrderStoreProvider({ children, ...props }) {
|
|
|
33
33
|
const chainOrder = storeRef.current?.getState().initializeChains(filteredChains.map((chain) => chain.id), key);
|
|
34
34
|
const isSwapTo = swapOnly && key === "to";
|
|
35
35
|
const showAllNetworks = filteredChains.length > 1 && !hiddenUI?.allNetworks && !isSwapTo;
|
|
36
|
-
const urlValues = getDefaultValuesFromQueryString({
|
|
36
|
+
const urlValues = getDefaultValuesFromQueryString({
|
|
37
|
+
buildUrl,
|
|
38
|
+
chains: chainsConfig
|
|
39
|
+
});
|
|
37
40
|
const urlChainValue = key === "from" ? urlValues.fromChain : urlValues.toChain;
|
|
38
41
|
const configChainValue = key === "from" ? fromChainConfig : toChainConfig;
|
|
39
42
|
const [chainValue] = getFieldValues(`${key}Chain`);
|