@lifi/widget 4.0.0-beta.17 → 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/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/ChainSelect/ChainSelect.js.map +1 -1
- package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js +1 -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/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Expansion/Expansion.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
- package/dist/esm/components/Step/Step.js.map +1 -1
- package/dist/esm/components/Step/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/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.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/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/useDebouncedWatch.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.map +1 -1
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
- 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 +0 -2
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- 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/useToAddressReset.js.map +1 -1
- package/dist/esm/hooks/useTokenBalance.js.map +1 -1
- 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.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.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/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/SelectChainPage/SelectChainPage.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.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/TransactionPage/StartTransactionButton.js.map +1 -1
- 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.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.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.map +1 -1
- package/dist/esm/stores/form/useFieldValues.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.map +1 -1
- 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/useSettingsActions.js.map +1 -1
- package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
- package/dist/esm/utils/converters.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 +8 -8
- package/src/components/Chains/AllChainsAvatar.tsx +1 -1
- package/src/components/SendToWallet/SendToWalletButton.tsx +1 -1
- package/src/config/version.ts +1 -1
- package/src/hooks/useActionMessage.ts +4 -3
- package/src/hooks/useRouteExecution.ts +0 -2
- package/src/pages/TransactionDetailsPage/StepActionRow.tsx +3 -2
- package/src/pages/TransactionDetailsPage/StepActionsList.tsx +19 -12
package/dist/esm/i18n/it.json
CHANGED
package/dist/esm/i18n/ja.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "スリッページ許容度が高すぎると、フロントランニングによる不利なトレードをひき起こす可能性があります。",
|
|
133
133
|
"slippageUnderRecommendedLimits": ""
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "高価値損失",
|
package/dist/esm/i18n/ko.json
CHANGED
package/dist/esm/i18n/pl.json
CHANGED
package/dist/esm/i18n/pt.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "Alta tolerância na derrapagem pode resultar em negociação desfavorável causada pelo front-running.",
|
|
133
133
|
"slippageUnderRecommendedLimits": "Baixa tolerância à diferença na cotação pode causar atrasos e falhas na transação."
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "Alta perda de valor",
|
package/dist/esm/i18n/th.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "การยอมรับความผิดปกติในการสลิปเพจสูงอาจส่งผลให้เกิดการซื้อขายที่ไม่คุ้มค่า ซึ่งเกิดจากการดำเนินการขายก่อน",
|
|
133
133
|
"slippageUnderRecommendedLimits": ""
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "สูญเสียมูลค่าสูง",
|
package/dist/esm/i18n/tr.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "Yüksek slipaj, ani fiyat hareketleri nedeniyle zarara yol açabilir.",
|
|
133
133
|
"slippageUnderRecommendedLimits": "Düşük kayma toleransı işlem gecikmelerine veya hatalarına neden olabilir."
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "Yüksek değer kaybı",
|
package/dist/esm/i18n/uk.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "Високий допуск до прослизання може призвести до несприятливої торгівлі через фронт-біг.",
|
|
133
133
|
"slippageUnderRecommendedLimits": "Низький допуск до прослизання може призвести до затримок або невдачі транзакції."
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "Висока втрата вартості",
|
package/dist/esm/i18n/vi.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "Khả năng trượt giá cao có thể dẫn đến giao dịch không thành công do front-running.",
|
|
133
133
|
"slippageUnderRecommendedLimits": ""
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "Tổn thất lớn",
|
package/dist/esm/i18n/zh.json
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
"slippageOutsideRecommendedLimits": "过高的滑点可能会导致交易被抢跑,造成财产损失",
|
|
133
133
|
"slippageUnderRecommendedLimits": "低幻灯片宽度可能会导致交易延迟或失败。"
|
|
134
134
|
},
|
|
135
|
+
"checkbox": {
|
|
136
|
+
"highValueLoss": ""
|
|
137
|
+
},
|
|
135
138
|
"title": {
|
|
136
139
|
"clearFailedTransactions": "",
|
|
137
140
|
"highValueLoss": "大额资金损失",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectChainPage.js","names":[],"sources":["../../../../src/pages/SelectChainPage/SelectChainPage.tsx"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useChainSelect } from '../../components/ChainSelect/useChainSelect.js'\nimport { SelectChainContent } from '../../components/Chains/SelectChainContent.js'\nimport { useTokenSelect } from '../../components/TokenList/useTokenSelect.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport type { SelectChainPageProps } from './types.js'\n\nexport const SelectChainPage: React.FC<SelectChainPageProps> = ({\n formType,\n selectNativeToken,\n}) => {\n const navigateBack = useNavigateBack()\n const { setCurrentChain } = useChainSelect(formType)\n const selectToken = useTokenSelect(formType, navigateBack)\n\n const { t } = useTranslation()\n\n useHeader(t('header.selectChain'))\n\n const handleClick = useCallback(\n async (chain: ExtendedChain) => {\n if (selectNativeToken) {\n selectToken(chain.nativeToken.address, chain.id)\n } else {\n setCurrentChain(chain.id)\n navigateBack()\n }\n },\n [navigateBack, selectNativeToken, selectToken, setCurrentChain]\n )\n\n return (\n <SelectChainContent\n inExpansion={false}\n formType={formType}\n onSelect={handleClick}\n />\n )\n}\n"],"mappings":";;;;;;;;;AAUA,MAAa,mBAAmD,EAC9D,UACA,wBACI;CACJ,MAAM,eAAe,iBAAiB;CACtC,MAAM,EAAE,oBAAoB,eAAe,SAAS;CACpD,MAAM,cAAc,eAAe,UAAU,aAAa;CAE1D,MAAM,EAAE,MAAM,gBAAgB;AAE9B,WAAU,EAAE,qBAAqB,CAAC;AAclC,QACE,oBAAC,oBAAD;EACE,aAAa;EACH;EACV,UAhBgB,YAClB,OAAO,UAAyB;AAC9B,OAAI,kBACF,aAAY,MAAM,YAAY,SAAS,MAAM,GAAG;QAC3C;AACL,oBAAgB,MAAM,GAAG;AACzB,kBAAc;;KAGlB;GAAC;GAAc;GAAmB;GAAa;GAAgB,
|
|
1
|
+
{"version":3,"file":"SelectChainPage.js","names":[],"sources":["../../../../src/pages/SelectChainPage/SelectChainPage.tsx"],"sourcesContent":["import type { ExtendedChain } from '@lifi/sdk'\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useChainSelect } from '../../components/ChainSelect/useChainSelect.js'\nimport { SelectChainContent } from '../../components/Chains/SelectChainContent.js'\nimport { useTokenSelect } from '../../components/TokenList/useTokenSelect.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport type { SelectChainPageProps } from './types.js'\n\nexport const SelectChainPage: React.FC<SelectChainPageProps> = ({\n formType,\n selectNativeToken,\n}) => {\n const navigateBack = useNavigateBack()\n const { setCurrentChain } = useChainSelect(formType)\n const selectToken = useTokenSelect(formType, navigateBack)\n\n const { t } = useTranslation()\n\n useHeader(t('header.selectChain'))\n\n const handleClick = useCallback(\n async (chain: ExtendedChain) => {\n if (selectNativeToken) {\n selectToken(chain.nativeToken.address, chain.id)\n } else {\n setCurrentChain(chain.id)\n navigateBack()\n }\n },\n [navigateBack, selectNativeToken, selectToken, setCurrentChain]\n )\n\n return (\n <SelectChainContent\n inExpansion={false}\n formType={formType}\n onSelect={handleClick}\n />\n )\n}\n"],"mappings":";;;;;;;;;AAUA,MAAa,mBAAmD,EAC9D,UACA,wBACI;CACJ,MAAM,eAAe,iBAAiB;CACtC,MAAM,EAAE,oBAAoB,eAAe,SAAS;CACpD,MAAM,cAAc,eAAe,UAAU,aAAa;CAE1D,MAAM,EAAE,MAAM,gBAAgB;AAE9B,WAAU,EAAE,qBAAqB,CAAC;AAclC,QACE,oBAAC,oBAAD;EACE,aAAa;EACH;EACV,UAhBgB,YAClB,OAAO,UAAyB;AAC9B,OAAI,kBACF,aAAY,MAAM,YAAY,SAAS,MAAM,GAAG;QAC3C;AACL,oBAAgB,MAAM,GAAG;AACzB,kBAAc;;KAGlB;GAAC;GAAc;GAAmB;GAAa;GAAgB,CAOxC;EACrB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectEnabledToolsPage.js","names":[],"sources":["../../../src/pages/SelectEnabledToolsPage.tsx"],"sourcesContent":["import { Checkbox, debounce, Tooltip } from '@mui/material'\nimport type { ChangeEvent } from 'react'\nimport {\n type FormEventHandler,\n memo,\n useCallback,\n useMemo,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { FullPageContainer } from '../components/FullPageContainer.js'\nimport { StickySearchInput } from '../components/Search/SearchInput.js'\nimport { type ToolCollectionTypes, Tools } from '../components/Tools/Tools.js'\nimport { useDefaultElementId } from '../hooks/useDefaultElementId.js'\nimport { useHeader } from '../hooks/useHeader.js'\nimport { useScrollableContainer } from '../hooks/useScrollableContainer.js'\nimport { useTools } from '../hooks/useTools.js'\nimport { useSettingsStore } from '../stores/settings/SettingsStore.js'\nimport { useSettingsActions } from '../stores/settings/useSettingsActions.js'\n\ninterface SelectAllCheckboxProps {\n allCheckboxesSelected: boolean\n onClick: (event: ChangeEvent<HTMLInputElement>, checked: boolean) => void\n anyCheckboxesSelected: boolean\n noCheckboxesAvailable: boolean\n}\n\nconst SelectAllCheckbox = memo<SelectAllCheckboxProps>(\n ({\n allCheckboxesSelected,\n anyCheckboxesSelected,\n noCheckboxesAvailable,\n onClick,\n }) => {\n const { t } = useTranslation()\n const tooltipTitle = noCheckboxesAvailable\n ? undefined\n : allCheckboxesSelected\n ? t('tooltip.deselectAll')\n : t('tooltip.selectAll')\n\n return (\n <Tooltip title={tooltipTitle}>\n <Checkbox\n id=\"select-all\"\n checked={allCheckboxesSelected}\n indeterminate={anyCheckboxesSelected && !allCheckboxesSelected}\n onChange={onClick}\n disabled={noCheckboxesAvailable}\n sx={{ mr: -1.5 }}\n />\n </Tooltip>\n )\n }\n)\n\nexport const SelectEnabledToolsPage: React.FC<{\n type: 'Bridges' | 'Exchanges'\n}> = ({ type }) => {\n const typeKey = type.toLowerCase() as 'bridges' | 'exchanges'\n const { tools } = useTools()\n const { toggleToolKeys } = useSettingsActions()\n\n const disabledTools = useSettingsStore((state) => state[`disabled${type}`])\n\n const { t } = useTranslation()\n const elementId = useDefaultElementId()\n const scrollableContainer = useScrollableContainer(elementId ?? '')\n const [searchValue, setSearchValue] = useState('')\n\n const filteredTools = useMemo(() => {\n const toolsList = tools?.[typeKey] ?? []\n\n if (!searchValue) {\n return toolsList\n }\n\n const lowerSearchValue = searchValue.toLowerCase()\n return toolsList.filter((tool) =>\n tool.name.toLowerCase().includes(lowerSearchValue)\n ) as ToolCollectionTypes\n }, [tools, typeKey, searchValue])\n\n const handleSelectAll = useCallback(() => {\n toggleToolKeys(\n type,\n filteredTools.map((tool) => tool.key)\n )\n }, [toggleToolKeys, type, filteredTools])\n\n const headerAction = useMemo(\n () => (\n <SelectAllCheckbox\n allCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.every((tool) => !disabledTools.includes(tool.key))\n }\n anyCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.some((tool) => disabledTools.includes(tool.key))\n }\n noCheckboxesAvailable={!filteredTools.length}\n onClick={handleSelectAll}\n />\n ),\n [disabledTools, handleSelectAll, filteredTools]\n )\n\n useHeader(t(`settings.enabled${type}`), headerAction)\n\n const handleSearchInputChange: FormEventHandler<HTMLInputElement> =\n useCallback(\n (e) => {\n const value = (e.target as HTMLInputElement).value\n setSearchValue(value)\n\n if (scrollableContainer) {\n scrollableContainer.scrollTop = 0\n }\n },\n [scrollableContainer]\n )\n\n const debouncedSearchInputChange = debounce(handleSearchInputChange, 250)\n\n return (\n <FullPageContainer disableGutters>\n <StickySearchInput\n onChange={debouncedSearchInputChange}\n placeholder={t(`main.search${type}`)}\n />\n <Tools filteredTools={filteredTools} type={type} />\n </FullPageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AA2BA,MAAM,oBAAoB,MACvB,EACC,uBACA,uBACA,uBACA,cACI;CACJ,MAAM,EAAE,MAAM,gBAAgB;AAO9B,QACE,oBAAC,SAAD;EAAS,OAPU,wBACjB,KAAA,IACA,wBACE,EAAE,sBAAsB,GACxB,EAAE,oBAAoB;YAIxB,oBAAC,UAAD;GACE,IAAG;GACH,SAAS;GACT,eAAe,yBAAyB,CAAC;GACzC,UAAU;GACV,UAAU;GACV,IAAI,EAAE,IAAI,MAAM;GAChB,CAAA;EACM,CAAA;EAGf;AAED,MAAa,0BAEP,EAAE,WAAW;CACjB,MAAM,UAAU,KAAK,aAAa;CAClC,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,EAAE,mBAAmB,oBAAoB;CAE/C,MAAM,gBAAgB,kBAAkB,UAAU,MAAM,WAAW,QAAQ;CAE3E,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,sBAAsB,uBADV,
|
|
1
|
+
{"version":3,"file":"SelectEnabledToolsPage.js","names":[],"sources":["../../../src/pages/SelectEnabledToolsPage.tsx"],"sourcesContent":["import { Checkbox, debounce, Tooltip } from '@mui/material'\nimport type { ChangeEvent } from 'react'\nimport {\n type FormEventHandler,\n memo,\n useCallback,\n useMemo,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { FullPageContainer } from '../components/FullPageContainer.js'\nimport { StickySearchInput } from '../components/Search/SearchInput.js'\nimport { type ToolCollectionTypes, Tools } from '../components/Tools/Tools.js'\nimport { useDefaultElementId } from '../hooks/useDefaultElementId.js'\nimport { useHeader } from '../hooks/useHeader.js'\nimport { useScrollableContainer } from '../hooks/useScrollableContainer.js'\nimport { useTools } from '../hooks/useTools.js'\nimport { useSettingsStore } from '../stores/settings/SettingsStore.js'\nimport { useSettingsActions } from '../stores/settings/useSettingsActions.js'\n\ninterface SelectAllCheckboxProps {\n allCheckboxesSelected: boolean\n onClick: (event: ChangeEvent<HTMLInputElement>, checked: boolean) => void\n anyCheckboxesSelected: boolean\n noCheckboxesAvailable: boolean\n}\n\nconst SelectAllCheckbox = memo<SelectAllCheckboxProps>(\n ({\n allCheckboxesSelected,\n anyCheckboxesSelected,\n noCheckboxesAvailable,\n onClick,\n }) => {\n const { t } = useTranslation()\n const tooltipTitle = noCheckboxesAvailable\n ? undefined\n : allCheckboxesSelected\n ? t('tooltip.deselectAll')\n : t('tooltip.selectAll')\n\n return (\n <Tooltip title={tooltipTitle}>\n <Checkbox\n id=\"select-all\"\n checked={allCheckboxesSelected}\n indeterminate={anyCheckboxesSelected && !allCheckboxesSelected}\n onChange={onClick}\n disabled={noCheckboxesAvailable}\n sx={{ mr: -1.5 }}\n />\n </Tooltip>\n )\n }\n)\n\nexport const SelectEnabledToolsPage: React.FC<{\n type: 'Bridges' | 'Exchanges'\n}> = ({ type }) => {\n const typeKey = type.toLowerCase() as 'bridges' | 'exchanges'\n const { tools } = useTools()\n const { toggleToolKeys } = useSettingsActions()\n\n const disabledTools = useSettingsStore((state) => state[`disabled${type}`])\n\n const { t } = useTranslation()\n const elementId = useDefaultElementId()\n const scrollableContainer = useScrollableContainer(elementId ?? '')\n const [searchValue, setSearchValue] = useState('')\n\n const filteredTools = useMemo(() => {\n const toolsList = tools?.[typeKey] ?? []\n\n if (!searchValue) {\n return toolsList\n }\n\n const lowerSearchValue = searchValue.toLowerCase()\n return toolsList.filter((tool) =>\n tool.name.toLowerCase().includes(lowerSearchValue)\n ) as ToolCollectionTypes\n }, [tools, typeKey, searchValue])\n\n const handleSelectAll = useCallback(() => {\n toggleToolKeys(\n type,\n filteredTools.map((tool) => tool.key)\n )\n }, [toggleToolKeys, type, filteredTools])\n\n const headerAction = useMemo(\n () => (\n <SelectAllCheckbox\n allCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.every((tool) => !disabledTools.includes(tool.key))\n }\n anyCheckboxesSelected={\n !!filteredTools.length &&\n filteredTools.some((tool) => disabledTools.includes(tool.key))\n }\n noCheckboxesAvailable={!filteredTools.length}\n onClick={handleSelectAll}\n />\n ),\n [disabledTools, handleSelectAll, filteredTools]\n )\n\n useHeader(t(`settings.enabled${type}`), headerAction)\n\n const handleSearchInputChange: FormEventHandler<HTMLInputElement> =\n useCallback(\n (e) => {\n const value = (e.target as HTMLInputElement).value\n setSearchValue(value)\n\n if (scrollableContainer) {\n scrollableContainer.scrollTop = 0\n }\n },\n [scrollableContainer]\n )\n\n const debouncedSearchInputChange = debounce(handleSearchInputChange, 250)\n\n return (\n <FullPageContainer disableGutters>\n <StickySearchInput\n onChange={debouncedSearchInputChange}\n placeholder={t(`main.search${type}`)}\n />\n <Tools filteredTools={filteredTools} type={type} />\n </FullPageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AA2BA,MAAM,oBAAoB,MACvB,EACC,uBACA,uBACA,uBACA,cACI;CACJ,MAAM,EAAE,MAAM,gBAAgB;AAO9B,QACE,oBAAC,SAAD;EAAS,OAPU,wBACjB,KAAA,IACA,wBACE,EAAE,sBAAsB,GACxB,EAAE,oBAAoB;YAIxB,oBAAC,UAAD;GACE,IAAG;GACH,SAAS;GACT,eAAe,yBAAyB,CAAC;GACzC,UAAU;GACV,UAAU;GACV,IAAI,EAAE,IAAI,MAAM;GAChB,CAAA;EACM,CAAA;EAGf;AAED,MAAa,0BAEP,EAAE,WAAW;CACjB,MAAM,UAAU,KAAK,aAAa;CAClC,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,EAAE,mBAAmB,oBAAoB;CAE/C,MAAM,gBAAgB,kBAAkB,UAAU,MAAM,WAAW,QAAQ;CAE3E,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,sBAAsB,uBADV,qBAC0C,IAAI,GAAG;CACnE,MAAM,CAAC,aAAa,kBAAkB,SAAS,GAAG;CAElD,MAAM,gBAAgB,cAAc;EAClC,MAAM,YAAY,QAAQ,YAAY,EAAE;AAExC,MAAI,CAAC,YACH,QAAO;EAGT,MAAM,mBAAmB,YAAY,aAAa;AAClD,SAAO,UAAU,QAAQ,SACvB,KAAK,KAAK,aAAa,CAAC,SAAS,iBAAiB,CACnD;IACA;EAAC;EAAO;EAAS;EAAY,CAAC;CAEjC,MAAM,kBAAkB,kBAAkB;AACxC,iBACE,MACA,cAAc,KAAK,SAAS,KAAK,IAAI,CACtC;IACA;EAAC;EAAgB;EAAM;EAAc,CAAC;CAEzC,MAAM,eAAe,cAEjB,oBAAC,mBAAD;EACE,uBACE,CAAC,CAAC,cAAc,UAChB,cAAc,OAAO,SAAS,CAAC,cAAc,SAAS,KAAK,IAAI,CAAC;EAElE,uBACE,CAAC,CAAC,cAAc,UAChB,cAAc,MAAM,SAAS,cAAc,SAAS,KAAK,IAAI,CAAC;EAEhE,uBAAuB,CAAC,cAAc;EACtC,SAAS;EACT,CAAA,EAEJ;EAAC;EAAe;EAAiB;EAAc,CAChD;AAED,WAAU,EAAE,mBAAmB,OAAO,EAAE,aAAa;AAiBrD,QACE,qBAAC,mBAAD;EAAmB,gBAAA;YAAnB,CACE,oBAAC,mBAAD;GACE,UAL6B,SAZjC,aACG,MAAM;IACL,MAAM,QAAS,EAAE,OAA4B;AAC7C,mBAAe,MAAM;AAErB,QAAI,oBACF,qBAAoB,YAAY;MAGpC,CAAC,oBAAoB,CAG0C,EAAE,IAK3B;GACpC,aAAa,EAAE,cAAc,OAAO;GACpC,CAAA,EACF,oBAAC,OAAD;GAAsB;GAAqB;GAAQ,CAAA,CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmallBalanceFilterSettings.js","names":["Switch"],"sources":["../../../../src/pages/SettingsPage/SmallBalanceFilterSettings.tsx"],"sourcesContent":["import AttachMoney from '@mui/icons-material/AttachMoney'\nimport { Box } from '@mui/material'\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type FocusEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Switch } from '../../components/Switch.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, usdDecimals } from '../../utils/format.js'\nimport {\n SettingCardExpandable,\n type SettingCardExpandableRef,\n} from './SettingsCard/SettingCardExpandable.js'\nimport {\n SettingsCustomInput,\n SettingsFieldSet,\n} from './SlippageSettings/SlippageSettings.style.js'\n\nconst defaultThreshold = '0.01'\n\nexport const SmallBalanceFilterSettings: React.FC = () => {\n const { t } = useTranslation()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n const { setValue } = useSettingsActions()\n const [inputValue, setInputValue] = useState(\n smallBalanceThreshold ?? defaultThreshold\n )\n const buttonRef = useRef<SettingCardExpandableRef>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const formatAndSetThreshold = (inputValue: string, returnInitial = false) => {\n const value = inputValue.replace('$', '')\n const formattedValue = formatInputAmount(value, usdDecimals, returnInitial)\n if (returnInitial) {\n setInputValue(formattedValue)\n } else {\n const formattedOrDefault = formattedValue || defaultThreshold\n setInputValue(formattedOrDefault)\n setValue('smallBalanceThreshold', formattedOrDefault)\n }\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, true)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, false)\n }\n\n const handleHideSmallBalancesChange = (\n event: ChangeEvent<HTMLInputElement>\n ) => {\n setValue(\n 'smallBalanceThreshold',\n event.target.checked ? defaultThreshold : undefined\n )\n if (buttonRef.current) {\n buttonRef.current?.toggleExpanded(event.target.checked)\n }\n }\n\n const handleExpanded = () => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n useEffect(() => {\n setInputValue(smallBalanceThreshold ?? defaultThreshold)\n }, [smallBalanceThreshold])\n\n return (\n <SettingCardExpandable\n ref={buttonRef}\n value={\n <Switch\n checked={!!smallBalanceThreshold}\n onChange={handleHideSmallBalancesChange}\n aria-label={t('settings.hideSmallBalances')}\n />\n }\n icon={<AttachMoney />}\n title={t('settings.hideSmallBalances')}\n disabled={!smallBalanceThreshold}\n keepValueVisible\n onEntered={handleExpanded}\n >\n <Box\n sx={{\n mt: 1.5,\n }}\n >\n <SettingsFieldSet>\n <SettingsCustomInput\n inputRef={inputRef}\n selected\n inputProps={{\n inputMode: 'decimal',\n }}\n onChange={handleInputUpdate}\n onBlur={handleInputBlur}\n value={`$${inputValue}`}\n autoComplete=\"off\"\n />\n </SettingsFieldSet>\n </Box>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AAEzB,MAAa,mCAA6C;CACxD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,0BAA0B,YAAY,CAAC,wBAAwB,CAAC;CACxE,MAAM,EAAE,aAAa,oBAAoB;CACzC,MAAM,CAAC,YAAY,iBAAiB,SAClC,yBAAyB,iBAC1B;CACD,MAAM,YAAY,OAAiC,KAAK;CACxD,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,yBAAyB,YAAoB,gBAAgB,UAAU;EAE3E,MAAM,iBAAiB,kBADT,WAAW,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"SmallBalanceFilterSettings.js","names":["Switch"],"sources":["../../../../src/pages/SettingsPage/SmallBalanceFilterSettings.tsx"],"sourcesContent":["import AttachMoney from '@mui/icons-material/AttachMoney'\nimport { Box } from '@mui/material'\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type FocusEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Switch } from '../../components/Switch.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, usdDecimals } from '../../utils/format.js'\nimport {\n SettingCardExpandable,\n type SettingCardExpandableRef,\n} from './SettingsCard/SettingCardExpandable.js'\nimport {\n SettingsCustomInput,\n SettingsFieldSet,\n} from './SlippageSettings/SlippageSettings.style.js'\n\nconst defaultThreshold = '0.01'\n\nexport const SmallBalanceFilterSettings: React.FC = () => {\n const { t } = useTranslation()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n const { setValue } = useSettingsActions()\n const [inputValue, setInputValue] = useState(\n smallBalanceThreshold ?? defaultThreshold\n )\n const buttonRef = useRef<SettingCardExpandableRef>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const formatAndSetThreshold = (inputValue: string, returnInitial = false) => {\n const value = inputValue.replace('$', '')\n const formattedValue = formatInputAmount(value, usdDecimals, returnInitial)\n if (returnInitial) {\n setInputValue(formattedValue)\n } else {\n const formattedOrDefault = formattedValue || defaultThreshold\n setInputValue(formattedOrDefault)\n setValue('smallBalanceThreshold', formattedOrDefault)\n }\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, true)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, false)\n }\n\n const handleHideSmallBalancesChange = (\n event: ChangeEvent<HTMLInputElement>\n ) => {\n setValue(\n 'smallBalanceThreshold',\n event.target.checked ? defaultThreshold : undefined\n )\n if (buttonRef.current) {\n buttonRef.current?.toggleExpanded(event.target.checked)\n }\n }\n\n const handleExpanded = () => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n useEffect(() => {\n setInputValue(smallBalanceThreshold ?? defaultThreshold)\n }, [smallBalanceThreshold])\n\n return (\n <SettingCardExpandable\n ref={buttonRef}\n value={\n <Switch\n checked={!!smallBalanceThreshold}\n onChange={handleHideSmallBalancesChange}\n aria-label={t('settings.hideSmallBalances')}\n />\n }\n icon={<AttachMoney />}\n title={t('settings.hideSmallBalances')}\n disabled={!smallBalanceThreshold}\n keepValueVisible\n onEntered={handleExpanded}\n >\n <Box\n sx={{\n mt: 1.5,\n }}\n >\n <SettingsFieldSet>\n <SettingsCustomInput\n inputRef={inputRef}\n selected\n inputProps={{\n inputMode: 'decimal',\n }}\n onChange={handleInputUpdate}\n onBlur={handleInputBlur}\n value={`$${inputValue}`}\n autoComplete=\"off\"\n />\n </SettingsFieldSet>\n </Box>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AAEzB,MAAa,mCAA6C;CACxD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,0BAA0B,YAAY,CAAC,wBAAwB,CAAC;CACxE,MAAM,EAAE,aAAa,oBAAoB;CACzC,MAAM,CAAC,YAAY,iBAAiB,SAClC,yBAAyB,iBAC1B;CACD,MAAM,YAAY,OAAiC,KAAK;CACxD,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,yBAAyB,YAAoB,gBAAgB,UAAU;EAE3E,MAAM,iBAAiB,kBADT,WAAW,QAAQ,KAAK,GACQ,EAAA,GAAe,cAAc;AAC3E,MAAI,cACF,eAAc,eAAe;OACxB;GACL,MAAM,qBAAqB,kBAAkB;AAC7C,iBAAc,mBAAmB;AACjC,YAAS,yBAAyB,mBAAmB;;;CAIzD,MAAM,qBAA2D,UAAU;AACzE,wBAAsB,MAAM,OAAO,OAAO,KAAK;;CAGjD,MAAM,mBAAwD,UAAU;AACtE,wBAAsB,MAAM,OAAO,OAAO,MAAM;;CAGlD,MAAM,iCACJ,UACG;AACH,WACE,yBACA,MAAM,OAAO,UAAU,mBAAmB,KAAA,EAC3C;AACD,MAAI,UAAU,QACZ,WAAU,SAAS,eAAe,MAAM,OAAO,QAAQ;;CAI3D,MAAM,uBAAuB;AAC3B,MAAI,SAAS,QACX,UAAS,QAAQ,OAAO;;AAI5B,iBAAgB;AACd,gBAAc,yBAAyB,iBAAiB;IACvD,CAAC,sBAAsB,CAAC;AAE3B,QACE,oBAAC,uBAAD;EACE,KAAK;EACL,OACE,oBAACA,UAAD;GACE,SAAS,CAAC,CAAC;GACX,UAAU;GACV,cAAY,EAAE,6BAA6B;GAC3C,CAAA;EAEJ,MAAM,oBAAC,aAAD,EAAe,CAAA;EACrB,OAAO,EAAE,6BAA6B;EACtC,UAAU,CAAC;EACX,kBAAA;EACA,WAAW;YAEX,oBAAC,KAAD;GACE,IAAI,EACF,IAAI,KACL;aAED,oBAAC,kBAAD,EAAA,UACE,oBAAC,qBAAD;IACY;IACV,UAAA;IACA,YAAY,EACV,WAAW,WACZ;IACD,UAAU;IACV,QAAQ;IACR,OAAO,IAAI;IACX,cAAa;IACb,CAAA,EACe,CAAA;GACf,CAAA;EACgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactSupportButton.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ContactSupportButton.tsx"],"sourcesContent":["import type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useContactSupport } from '../../hooks/useContactSupport.js'\nimport { ButtonChip } from './ContactSupportButton.style.js'\n\ninterface ContactSupportButtonProps {\n supportId?: string\n}\n\nexport const ContactSupportButton = ({\n supportId,\n}: ContactSupportButtonProps): JSX.Element => {\n const { t } = useTranslation()\n const handleContactSupport = useContactSupport(supportId)\n\n return (\n <ButtonChip onClick={handleContactSupport}>\n {t('button.contactSupport')}\n </ButtonChip>\n )\n}\n"],"mappings":";;;;;AASA,MAAa,wBAAwB,EACnC,gBAC4C;CAC5C,MAAM,EAAE,MAAM,gBAAgB;AAG9B,QACE,oBAAC,YAAD;EAAY,SAHe,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ContactSupportButton.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ContactSupportButton.tsx"],"sourcesContent":["import type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useContactSupport } from '../../hooks/useContactSupport.js'\nimport { ButtonChip } from './ContactSupportButton.style.js'\n\ninterface ContactSupportButtonProps {\n supportId?: string\n}\n\nexport const ContactSupportButton = ({\n supportId,\n}: ContactSupportButtonProps): JSX.Element => {\n const { t } = useTranslation()\n const handleContactSupport = useContactSupport(supportId)\n\n return (\n <ButtonChip onClick={handleContactSupport}>\n {t('button.contactSupport')}\n </ButtonChip>\n )\n}\n"],"mappings":";;;;;AASA,MAAa,wBAAwB,EACnC,gBAC4C;CAC5C,MAAM,EAAE,MAAM,gBAAgB;AAG9B,QACE,oBAAC,YAAD;EAAY,SAHe,kBAAkB,UAGJ;YACtC,EAAE,wBAAwB;EAChB,CAAA"}
|
|
@@ -5,8 +5,8 @@ import { ActionRow } from "./ActionRow.js";
|
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
import OpenInNew from "@mui/icons-material/OpenInNew";
|
|
7
7
|
//#region src/pages/TransactionDetailsPage/StepActionRow.tsx
|
|
8
|
-
const StepActionRow = ({ step, action, href }) => {
|
|
9
|
-
const { title } = useActionMessage(step, action);
|
|
8
|
+
const StepActionRow = ({ step, action, href, defaultLabelsOnly }) => {
|
|
9
|
+
const { title } = useActionMessage(step, action, defaultLabelsOnly);
|
|
10
10
|
return /* @__PURE__ */ jsx(ActionRow, {
|
|
11
11
|
startAdornment: /* @__PURE__ */ jsx(IconCircle, {
|
|
12
12
|
status: action?.status === "FAILED" ? "error" : "success",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepActionRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionRow.tsx"],"sourcesContent":["import type { ExecutionAction, LiFiStepExtended } from '@lifi/sdk'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport type React from 'react'\nimport { IconCircle } from '../../components/IconCircle/IconCircle.js'\nimport { useActionMessage } from '../../hooks/useActionMessage.js'\nimport { ActionRow } from './ActionRow.js'\nimport { ExternalLink } from './ReceiptsCard.style.js'\n\nexport const StepActionRow: React.FC<{\n step: LiFiStepExtended\n action: ExecutionAction\n href: string\n}> = ({ step, action, href }) => {\n const { title } = useActionMessage(step, action)\n const isFailed = action?.status === 'FAILED'\n return (\n <ActionRow\n startAdornment={\n <IconCircle status={isFailed ? 'error' : 'success'} size={24} />\n }\n message={title ?? ''}\n endAdornment={\n <ExternalLink href={href} target=\"_blank\" rel=\"nofollow noreferrer\">\n <OpenInNew sx={{ fontSize: 16 }} />\n </ExternalLink>\n }\n />\n )\n}\n"],"mappings":";;;;;;;AAQA,MAAa,
|
|
1
|
+
{"version":3,"file":"StepActionRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionRow.tsx"],"sourcesContent":["import type { ExecutionAction, LiFiStepExtended } from '@lifi/sdk'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport type React from 'react'\nimport { IconCircle } from '../../components/IconCircle/IconCircle.js'\nimport { useActionMessage } from '../../hooks/useActionMessage.js'\nimport { ActionRow } from './ActionRow.js'\nimport { ExternalLink } from './ReceiptsCard.style.js'\n\nexport const StepActionRow: React.FC<{\n step: LiFiStepExtended\n action: ExecutionAction\n href: string\n defaultLabelsOnly?: boolean\n}> = ({ step, action, href, defaultLabelsOnly }) => {\n const { title } = useActionMessage(step, action, defaultLabelsOnly)\n const isFailed = action?.status === 'FAILED'\n return (\n <ActionRow\n startAdornment={\n <IconCircle status={isFailed ? 'error' : 'success'} size={24} />\n }\n message={title ?? ''}\n endAdornment={\n <ExternalLink href={href} target=\"_blank\" rel=\"nofollow noreferrer\">\n <OpenInNew sx={{ fontSize: 16 }} />\n </ExternalLink>\n }\n />\n )\n}\n"],"mappings":";;;;;;;AAQA,MAAa,iBAKP,EAAE,MAAM,QAAQ,MAAM,wBAAwB;CAClD,MAAM,EAAE,UAAU,iBAAiB,MAAM,QAAQ,kBAAkB;AAEnE,QACE,oBAAC,WAAD;EACE,gBACE,oBAAC,YAAD;GAAY,QAJD,QAAQ,WAAW,WAIC,UAAU;GAAW,MAAM;GAAM,CAAA;EAElE,SAAS,SAAS;EAClB,cACE,oBAAC,cAAD;GAAoB;GAAM,QAAO;GAAS,KAAI;aAC5C,oBAAC,WAAD,EAAW,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA;GACtB,CAAA;EAEjB,CAAA"}
|
|
@@ -29,11 +29,17 @@ const StepActionsList = ({ route, toAddress }) => {
|
|
|
29
29
|
};
|
|
30
30
|
}).filter(({ rows }) => rows.length > 0);
|
|
31
31
|
if (!stepRows?.length) return null;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
const lastStepIndex = stepRows.length - 1;
|
|
33
|
+
return /* @__PURE__ */ jsxs(TransactionList, { children: [stepRows.map(({ step, rows }, stepIndex) => {
|
|
34
|
+
const lastRowIndex = rows.length - 1;
|
|
35
|
+
const isLastStep = stepIndex === lastStepIndex;
|
|
36
|
+
return /* @__PURE__ */ jsx(TransactionList, { children: rows.map(({ action, href }, rowIndex) => /* @__PURE__ */ jsx(StepActionRow, {
|
|
37
|
+
step,
|
|
38
|
+
action,
|
|
39
|
+
href,
|
|
40
|
+
defaultLabelsOnly: !(isLastStep && rowIndex === lastRowIndex)
|
|
41
|
+
}, rowIndex)) }, step.id);
|
|
42
|
+
}), toAddress ? /* @__PURE__ */ jsx(SentToWalletRow, {
|
|
37
43
|
toAddress,
|
|
38
44
|
toChainId: route.toChainId
|
|
39
45
|
}) : null] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepActionsList.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionsList.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { prepareActions } from '../../utils/prepareActions.js'\nimport { TransactionList } from './ReceiptsCard.style.js'\nimport { SentToWalletRow } from './SentToWalletRow.js'\nimport { StepActionRow } from './StepActionRow.js'\n\ninterface StepActionsListProps {\n route: RouteExtended\n toAddress?: string\n}\n\nexport const StepActionsList: React.FC<StepActionsListProps> = ({\n route,\n toAddress,\n}) => {\n const { getTransactionLink } = useExplorer()\n const stepRows = route.steps\n .map((step) => {\n const rows = prepareActions(step.execution?.actions ?? [])\n .map((actionsGroup) => {\n const action = actionsGroup.at(-1)\n const href = action?.txHash\n ? getTransactionLink({\n txHash: action.txHash,\n chain: action.chainId,\n })\n : action?.txLink\n ? getTransactionLink({\n txLink: action.txLink,\n chain: action.chainId,\n })\n : undefined\n return { action, href }\n })\n .filter(({ action, href }) => {\n const doneOrFailed =\n action?.status === 'DONE' || action?.status === 'FAILED'\n return Boolean(href && doneOrFailed)\n })\n return { step, rows }\n })\n .filter(({ rows }) => rows.length > 0)\n\n if (!stepRows?.length) {\n return null\n }\n\n return (\n <TransactionList>\n {stepRows.map(({ step, rows }) => (\n
|
|
1
|
+
{"version":3,"file":"StepActionsList.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionsList.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { prepareActions } from '../../utils/prepareActions.js'\nimport { TransactionList } from './ReceiptsCard.style.js'\nimport { SentToWalletRow } from './SentToWalletRow.js'\nimport { StepActionRow } from './StepActionRow.js'\n\ninterface StepActionsListProps {\n route: RouteExtended\n toAddress?: string\n}\n\nexport const StepActionsList: React.FC<StepActionsListProps> = ({\n route,\n toAddress,\n}) => {\n const { getTransactionLink } = useExplorer()\n const stepRows = route.steps\n .map((step) => {\n const rows = prepareActions(step.execution?.actions ?? [])\n .map((actionsGroup) => {\n const action = actionsGroup.at(-1)\n const href = action?.txHash\n ? getTransactionLink({\n txHash: action.txHash,\n chain: action.chainId,\n })\n : action?.txLink\n ? getTransactionLink({\n txLink: action.txLink,\n chain: action.chainId,\n })\n : undefined\n return { action, href }\n })\n .filter(({ action, href }) => {\n const doneOrFailed =\n action?.status === 'DONE' || action?.status === 'FAILED'\n return Boolean(href && doneOrFailed)\n })\n return { step, rows }\n })\n .filter(({ rows }) => rows.length > 0)\n\n if (!stepRows?.length) {\n return null\n }\n\n const lastStepIndex = stepRows.length - 1\n\n return (\n <TransactionList>\n {stepRows.map(({ step, rows }, stepIndex) => {\n const lastRowIndex = rows.length - 1\n const isLastStep = stepIndex === lastStepIndex\n return (\n <TransactionList key={step.id}>\n {rows.map(({ action, href }, rowIndex) => (\n <StepActionRow\n key={rowIndex}\n step={step}\n action={action!}\n href={href!}\n defaultLabelsOnly={!(isLastStep && rowIndex === lastRowIndex)}\n />\n ))}\n </TransactionList>\n )\n })}\n {toAddress ? (\n <SentToWalletRow toAddress={toAddress} toChainId={route.toChainId} />\n ) : null}\n </TransactionList>\n )\n}\n"],"mappings":";;;;;;;AAYA,MAAa,mBAAmD,EAC9D,OACA,gBACI;CACJ,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,WAAW,MAAM,MACpB,KAAK,SAAS;AAsBb,SAAO;GAAE;GAAM,MArBF,eAAe,KAAK,WAAW,WAAW,EAAE,CAAC,CACvD,KAAK,iBAAiB;IACrB,MAAM,SAAS,aAAa,GAAG,GAAG;AAYlC,WAAO;KAAE;KAAQ,MAXJ,QAAQ,SACjB,mBAAmB;MACjB,QAAQ,OAAO;MACf,OAAO,OAAO;MACf,CAAC,GACF,QAAQ,SACN,mBAAmB;MACjB,QAAQ,OAAO;MACf,OAAO,OAAO;MACf,CAAC,GACF,KAAA;KACiB;KACvB,CACD,QAAQ,EAAE,QAAQ,WAAW;IAC5B,MAAM,eACJ,QAAQ,WAAW,UAAU,QAAQ,WAAW;AAClD,WAAO,QAAQ,QAAQ,aAAa;KAErB;GAAE;GACrB,CACD,QAAQ,EAAE,WAAW,KAAK,SAAS,EAAE;AAExC,KAAI,CAAC,UAAU,OACb,QAAO;CAGT,MAAM,gBAAgB,SAAS,SAAS;AAExC,QACE,qBAAC,iBAAD,EAAA,UAAA,CACG,SAAS,KAAK,EAAE,MAAM,QAAQ,cAAc;EAC3C,MAAM,eAAe,KAAK,SAAS;EACnC,MAAM,aAAa,cAAc;AACjC,SACE,oBAAC,iBAAD,EAAA,UACG,KAAK,KAAK,EAAE,QAAQ,QAAQ,aAC3B,oBAAC,eAAD;GAEQ;GACE;GACF;GACN,mBAAmB,EAAE,cAAc,aAAa;GAChD,EALK,SAKL,CACF,EACc,EAVI,KAAK,GAUT;GAEpB,EACD,YACC,oBAAC,iBAAD;EAA4B;EAAW,WAAW,MAAM;EAAa,CAAA,GACnE,KACY,EAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionDetailsPage.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/TransactionDetailsPage.tsx"],"sourcesContent":["import type { FullStatusData } from '@lifi/sdk'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TransactionCard } from '../../components/TransactionCard/TransactionCard.js'\nimport { internalExplorerUrl } from '../../config/constants.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useTools } from '../../hooks/useTools.js'\nimport { useTransactionDetails } from '../../hooks/useTransactionDetails.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\nimport { getSourceTxHash } from '../../stores/routes/utils.js'\nimport { buildRouteFromTxHistory } from '../../utils/converters.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ReceiptsCard } from './ReceiptsCard.js'\nimport { TransactionDetailsSkeleton } from './TransactionDetailsSkeleton.js'\nimport { TransferIdCard } from './TransferIdCard.js'\n\nexport const TransactionDetailsPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n explorerUrls,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const { tools } = useTools()\n const { getTransactionLink } = useExplorer()\n const storedRouteExecution = useRouteExecutionStore((store) =>\n search?.routeId ? store.routes[search.routeId] : undefined\n )\n const { transaction, isLoading } = useTransactionDetails(\n !storedRouteExecution && search?.transactionHash\n )\n\n const title =\n subvariant === 'custom'\n ? t(`header.${subvariantOptions?.custom ?? 'checkout'}Details`)\n : t('header.transactionDetails')\n useHeader(title)\n\n const routeExecution = useMemo(() => {\n if (storedRouteExecution) {\n return storedRouteExecution\n }\n if (isLoading) {\n return\n }\n if (transaction) {\n const routeExecution = buildRouteFromTxHistory(\n transaction as FullStatusData,\n tools\n )\n return routeExecution\n }\n }, [isLoading, storedRouteExecution, tools, transaction])\n\n useEffect(() => {\n if (!isLoading && !routeExecution) {\n navigate({ to: navigationRoutes.home })\n }\n }, [isLoading, navigate, routeExecution])\n\n const explorerUrl = explorerUrls?.internal?.[0]\n const url = typeof explorerUrl === 'string' ? explorerUrl : explorerUrl?.url\n\n const sourceTxHash = getSourceTxHash(routeExecution?.route)\n let supportId = sourceTxHash ?? routeExecution?.route.id ?? ''\n\n const internalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.internalTxLink\n const externalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.externalTxLink\n\n const txLink =\n (url\n ? internalTxLink?.replace(internalExplorerUrl, url)\n : internalTxLink) ||\n externalTxLink ||\n getTransactionLink({ txHash: supportId })\n\n if (process.env.NODE_ENV === 'development') {\n supportId += `_${routeExecution?.route.id}`\n }\n\n const startedAt = new Date(\n routeExecution?.route.steps[0].execution?.startedAt ?? 0\n )\n\n if (isLoading && !storedRouteExecution) {\n return <TransactionDetailsSkeleton />\n }\n\n if (!routeExecution?.route) {\n return null\n }\n\n return (\n <PageContainer\n bottomGutters\n sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}\n >\n <TransactionCard route={routeExecution.route} date={startedAt} />\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent>{contractSecondaryComponent}</ContractComponent>\n ) : null}\n <ReceiptsCard route={routeExecution.route} />\n {supportId ? (\n <TransferIdCard transferId={supportId} txLink={txLink} />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,+BAAyC;CACpD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,EACJ,YACA,mBACA,4BACA,iBACE,iBAAiB;CACrB,MAAM,EAAE,WAAgB,aAAa;CACrC,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,uBAAuB,wBAAwB,UACnD,QAAQ,UAAU,MAAM,OAAO,OAAO,WAAW,KAAA,EAClD;CACD,MAAM,EAAE,aAAa,cAAc,sBACjC,CAAC,wBAAwB,QAAQ,gBAClC;AAMD,WAHE,eAAe,WACX,EAAE,UAAU,mBAAmB,UAAU,WAAW,SAAS,GAC7D,EAAE,4BAA4B,CACpB;CAEhB,MAAM,iBAAiB,cAAc;AACnC,MAAI,qBACF,QAAO;AAET,MAAI,UACF;AAEF,MAAI,YAKF,QAJuB,wBACrB,aACA,
|
|
1
|
+
{"version":3,"file":"TransactionDetailsPage.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/TransactionDetailsPage.tsx"],"sourcesContent":["import type { FullStatusData } from '@lifi/sdk'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TransactionCard } from '../../components/TransactionCard/TransactionCard.js'\nimport { internalExplorerUrl } from '../../config/constants.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useTools } from '../../hooks/useTools.js'\nimport { useTransactionDetails } from '../../hooks/useTransactionDetails.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\nimport { getSourceTxHash } from '../../stores/routes/utils.js'\nimport { buildRouteFromTxHistory } from '../../utils/converters.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ReceiptsCard } from './ReceiptsCard.js'\nimport { TransactionDetailsSkeleton } from './TransactionDetailsSkeleton.js'\nimport { TransferIdCard } from './TransferIdCard.js'\n\nexport const TransactionDetailsPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n explorerUrls,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const { tools } = useTools()\n const { getTransactionLink } = useExplorer()\n const storedRouteExecution = useRouteExecutionStore((store) =>\n search?.routeId ? store.routes[search.routeId] : undefined\n )\n const { transaction, isLoading } = useTransactionDetails(\n !storedRouteExecution && search?.transactionHash\n )\n\n const title =\n subvariant === 'custom'\n ? t(`header.${subvariantOptions?.custom ?? 'checkout'}Details`)\n : t('header.transactionDetails')\n useHeader(title)\n\n const routeExecution = useMemo(() => {\n if (storedRouteExecution) {\n return storedRouteExecution\n }\n if (isLoading) {\n return\n }\n if (transaction) {\n const routeExecution = buildRouteFromTxHistory(\n transaction as FullStatusData,\n tools\n )\n return routeExecution\n }\n }, [isLoading, storedRouteExecution, tools, transaction])\n\n useEffect(() => {\n if (!isLoading && !routeExecution) {\n navigate({ to: navigationRoutes.home })\n }\n }, [isLoading, navigate, routeExecution])\n\n const explorerUrl = explorerUrls?.internal?.[0]\n const url = typeof explorerUrl === 'string' ? explorerUrl : explorerUrl?.url\n\n const sourceTxHash = getSourceTxHash(routeExecution?.route)\n let supportId = sourceTxHash ?? routeExecution?.route.id ?? ''\n\n const internalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.internalTxLink\n const externalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.externalTxLink\n\n const txLink =\n (url\n ? internalTxLink?.replace(internalExplorerUrl, url)\n : internalTxLink) ||\n externalTxLink ||\n getTransactionLink({ txHash: supportId })\n\n if (process.env.NODE_ENV === 'development') {\n supportId += `_${routeExecution?.route.id}`\n }\n\n const startedAt = new Date(\n routeExecution?.route.steps[0].execution?.startedAt ?? 0\n )\n\n if (isLoading && !storedRouteExecution) {\n return <TransactionDetailsSkeleton />\n }\n\n if (!routeExecution?.route) {\n return null\n }\n\n return (\n <PageContainer\n bottomGutters\n sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}\n >\n <TransactionCard route={routeExecution.route} date={startedAt} />\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent>{contractSecondaryComponent}</ContractComponent>\n ) : null}\n <ReceiptsCard route={routeExecution.route} />\n {supportId ? (\n <TransferIdCard transferId={supportId} txLink={txLink} />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,+BAAyC;CACpD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,EACJ,YACA,mBACA,4BACA,iBACE,iBAAiB;CACrB,MAAM,EAAE,WAAgB,aAAa;CACrC,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,uBAAuB,wBAAwB,UACnD,QAAQ,UAAU,MAAM,OAAO,OAAO,WAAW,KAAA,EAClD;CACD,MAAM,EAAE,aAAa,cAAc,sBACjC,CAAC,wBAAwB,QAAQ,gBAClC;AAMD,WAHE,eAAe,WACX,EAAE,UAAU,mBAAmB,UAAU,WAAW,SAAS,GAC7D,EAAE,4BAA4B,CACpB;CAEhB,MAAM,iBAAiB,cAAc;AACnC,MAAI,qBACF,QAAO;AAET,MAAI,UACF;AAEF,MAAI,YAKF,QAJuB,wBACrB,aACA,MAEmB;IAEtB;EAAC;EAAW;EAAsB;EAAO;EAAY,CAAC;AAEzD,iBAAgB;AACd,MAAI,CAAC,aAAa,CAAC,eACjB,UAAS,EAAE,IAAI,iBAAiB,MAAM,CAAC;IAExC;EAAC;EAAW;EAAU;EAAe,CAAC;CAEzC,MAAM,cAAc,cAAc,WAAW;CAC7C,MAAM,MAAM,OAAO,gBAAgB,WAAW,cAAc,aAAa;CAGzE,IAAI,YADiB,gBAAgB,gBAAgB,MACzB,IAAI,gBAAgB,MAAM,MAAM;CAE5D,MAAM,iBACJ,gBAAgB,OAAO,OAAO,GAAG,GAAG,EAAE,WAAW;CACnD,MAAM,iBACJ,gBAAgB,OAAO,OAAO,GAAG,GAAG,EAAE,WAAW;CAEnD,MAAM,UACH,MACG,gBAAgB,QAAA,sBAA6B,IAAI,GACjD,mBACJ,kBACA,mBAAmB,EAAE,QAAQ,WAAW,CAAC;AAE3C,KAAI,QAAQ,IAAI,aAAa,cAC3B,cAAa,IAAI,gBAAgB,MAAM;CAGzC,MAAM,YAAY,IAAI,KACpB,gBAAgB,MAAM,MAAM,GAAG,WAAW,aAAa,EACxD;AAED,KAAI,aAAa,CAAC,qBAChB,QAAO,oBAAC,4BAAD,EAA8B,CAAA;AAGvC,KAAI,CAAC,gBAAgB,MACnB,QAAO;AAGT,QACE,qBAAC,eAAD;EACE,eAAA;EACA,IAAI;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;GAAG;YAF1D;GAIE,oBAAC,iBAAD;IAAiB,OAAO,eAAe;IAAO,MAAM;IAAa,CAAA;GAChE,eAAe,YAAY,6BAC1B,oBAAC,mBAAD,EAAA,UAAoB,4BAA+C,CAAA,GACjE;GACJ,oBAAC,cAAD,EAAc,OAAO,eAAe,OAAS,CAAA;GAC5C,YACC,oBAAC,gBAAD;IAAgB,YAAY;IAAmB;IAAU,CAAA,GACvD;GACU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartTransactionButton.js","names":[],"sources":["../../../../src/pages/TransactionPage/StartTransactionButton.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'\nimport { useMessageQueue } from '../../components/Messages/useMessageQueue.js'\nimport type { StartTransactionButtonProps } from './types.js'\n\nexport const StartTransactionButton: React.FC<StartTransactionButtonProps> = ({\n onClick,\n route,\n text,\n loading,\n}) => {\n const { messages, isLoading } = useMessageQueue(route, true)\n\n const hasNonGasMessages = useMemo(() => {\n return messages.some((message) => message.id !== 'INSUFFICIENT_GAS')\n }, [messages])\n\n return (\n <BaseTransactionButton\n onClick={onClick}\n text={text}\n disabled={hasNonGasMessages}\n loading={isLoading || loading}\n route={route}\n />\n )\n}\n"],"mappings":";;;;;AAKA,MAAa,0BAAiE,EAC5E,SACA,OACA,MACA,cACI;CACJ,MAAM,EAAE,UAAU,cAAc,gBAAgB,OAAO,KAAK;AAM5D,QACE,oBAAC,uBAAD;EACW;EACH;EACN,UARsB,cAAc;AACtC,UAAO,SAAS,MAAM,YAAY,QAAQ,OAAO,mBAAmB;KACnE,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"StartTransactionButton.js","names":[],"sources":["../../../../src/pages/TransactionPage/StartTransactionButton.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'\nimport { useMessageQueue } from '../../components/Messages/useMessageQueue.js'\nimport type { StartTransactionButtonProps } from './types.js'\n\nexport const StartTransactionButton: React.FC<StartTransactionButtonProps> = ({\n onClick,\n route,\n text,\n loading,\n}) => {\n const { messages, isLoading } = useMessageQueue(route, true)\n\n const hasNonGasMessages = useMemo(() => {\n return messages.some((message) => message.id !== 'INSUFFICIENT_GAS')\n }, [messages])\n\n return (\n <BaseTransactionButton\n onClick={onClick}\n text={text}\n disabled={hasNonGasMessages}\n loading={isLoading || loading}\n route={route}\n />\n )\n}\n"],"mappings":";;;;;AAKA,MAAa,0BAAiE,EAC5E,SACA,OACA,MACA,cACI;CACJ,MAAM,EAAE,UAAU,cAAc,gBAAgB,OAAO,KAAK;AAM5D,QACE,oBAAC,uBAAD;EACW;EACH;EACN,UARsB,cAAc;AACtC,UAAO,SAAS,MAAM,YAAY,QAAQ,OAAO,mBAAmB;KACnE,CAAC,SAAS,CAMkB;EAC3B,SAAS,aAAa;EACf;EACP,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPage.js","names":[],"sources":["../../../../src/pages/TransactionPage/TransactionPage.tsx"],"sourcesContent":["import type { ExchangeRateUpdateParams } from '@lifi/sdk'\nimport Delete from '@mui/icons-material/Delete'\nimport { Box, Button, Tooltip } from '@mui/material'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { type JSX, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { WarningMessages } from '../../components/Messages/WarningMessages.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { getStepList } from '../../components/Step/StepList.js'\nimport { TransactionDetails } from '../../components/TransactionDetails.js'\nimport { useAddressActivity } from '../../hooks/useAddressActivity.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useRouteExecution } from '../../hooks/useRouteExecution.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ConfirmToAddressSheet } from './ConfirmToAddressSheet.js'\nimport type { ExchangeRateBottomSheetBase } from './ExchangeRateBottomSheet.js'\nimport { ExchangeRateBottomSheet } from './ExchangeRateBottomSheet.js'\nimport { RouteTracker } from './RouteTracker.js'\nimport { StartTransactionButton } from './StartTransactionButton.js'\nimport { StatusBottomSheet } from './StatusBottomSheet.js'\nimport { TokenValueBottomSheet } from './TokenValueBottomSheet.js'\nimport {\n calculateValueLossPercentage,\n getTokenValueLossThreshold,\n} from './utils.js'\n\nexport const TransactionPage = (): JSX.Element | null => {\n const { t } = useTranslation()\n const { setFieldValue } = useFieldActions()\n const emitter = useWidgetEvents()\n const setBackAction = useHeaderStore((state) => state.setBackAction)\n const navigate = useNavigate()\n const navigateBack = useNavigateBack()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n hiddenUI,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const stateRouteId = search?.routeId\n const [routeId, setRouteId] = useState<string>(stateRouteId)\n const [routeRefreshing, setRouteRefreshing] = useState(false)\n\n const tokenValueBottomSheetRef = useRef<BottomSheetBase>(null)\n const exchangeRateBottomSheetRef = useRef<ExchangeRateBottomSheetBase>(null)\n const confirmToAddressSheetRef = useRef<BottomSheetBase>(null)\n\n const onAcceptExchangeRateUpdate = (\n resolver: (value: boolean) => void,\n data: ExchangeRateUpdateParams\n ) => {\n exchangeRateBottomSheetRef.current?.open(resolver, data)\n }\n\n const { route, status, executeRoute, restartRoute, deleteRoute } =\n useRouteExecution({\n routeId: routeId,\n onAcceptExchangeRateUpdate,\n })\n\n const {\n toAddress,\n hasActivity,\n isLoading: isLoadingAddressActivity,\n isFetched: isActivityAddressFetched,\n } = useAddressActivity(route?.toChainId)\n\n const getHeaderTitle = () => {\n if (subvariant === 'custom') {\n return t(`header.${subvariantOptions?.custom ?? 'checkout'}`)\n }\n if (route) {\n const transactionType =\n route.fromChainId === route.toChainId ? 'swap' : 'bridge'\n return status === RouteExecutionStatus.Idle\n ? t(`button.${transactionType}Review`)\n : t(`header.${transactionType}`)\n }\n\n return t('header.exchange')\n }\n\n const headerAction = useMemo(\n () =>\n status === RouteExecutionStatus.Idle ? (\n <RouteTracker\n observableRouteId={stateRouteId}\n onChange={setRouteId}\n onFetching={setRouteRefreshing}\n />\n ) : undefined,\n [stateRouteId, status]\n )\n\n useHeader(getHeaderTitle(), headerAction)\n\n if (!route) {\n return null\n }\n\n const handleExecuteRoute = () => {\n if (tokenValueBottomSheetRef.current?.isOpen()) {\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n emitter.emit(WidgetEvent.RouteHighValueLoss, {\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD,\n valueLoss: calculateValueLossPercentage(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n ),\n })\n }\n tokenValueBottomSheetRef.current?.close()\n executeRoute()\n setFieldValue('fromAmount', '')\n if (subvariant === 'custom') {\n setFieldValue('fromToken', '')\n setFieldValue('toToken', '')\n }\n // Once transaction is started, set the back action to navigate to the home page\n setBackAction(() => {\n navigate({ to: navigationRoutes.home, replace: true })\n })\n }\n\n const handleStartClick = async () => {\n if (status === RouteExecutionStatus.Idle) {\n if (\n toAddress &&\n !hasActivity &&\n !isLoadingAddressActivity &&\n isActivityAddressFetched &&\n !hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation)\n ) {\n confirmToAddressSheetRef.current?.open()\n return\n }\n\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n const tokenValueLossThresholdExceeded = getTokenValueLossThreshold(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n )\n if (tokenValueLossThresholdExceeded && subvariant !== 'custom') {\n tokenValueBottomSheetRef.current?.open()\n } else {\n handleExecuteRoute()\n }\n }\n if (status === RouteExecutionStatus.Failed) {\n restartRoute()\n }\n }\n\n const handleRemoveRoute = () => {\n navigateBack()\n deleteRoute()\n }\n\n const getButtonText = (): string => {\n switch (status) {\n case RouteExecutionStatus.Idle:\n switch (subvariant) {\n case 'custom':\n return subvariantOptions?.custom === 'deposit'\n ? t('button.deposit')\n : t('button.buy')\n case 'refuel':\n return t('button.startBridging')\n default: {\n const transactionType =\n route.fromChainId === route.toChainId ? 'Swapping' : 'Bridging'\n return t(`button.start${transactionType}`)\n }\n }\n case RouteExecutionStatus.Failed:\n return t('button.tryAgain')\n default:\n return ''\n }\n }\n\n return (\n <PageContainer bottomGutters>\n {getStepList(route, subvariant)}\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent sx={{ marginTop: 2 }}>\n {contractSecondaryComponent}\n </ContractComponent>\n ) : null}\n <TransactionDetails route={route} sx={{ marginTop: 2 }} />\n {status === RouteExecutionStatus.Idle ||\n status === RouteExecutionStatus.Failed ? (\n <>\n <WarningMessages sx={{ mt: 2 }} route={route} allowInteraction />\n <Box\n sx={{\n mt: 2,\n display: 'flex',\n }}\n >\n <StartTransactionButton\n text={getButtonText()}\n onClick={handleStartClick}\n route={route}\n loading={routeRefreshing || isLoadingAddressActivity}\n />\n {status === RouteExecutionStatus.Failed ? (\n <Tooltip\n title={t('button.clearTransaction')}\n placement=\"bottom-end\"\n >\n <Button\n onClick={handleRemoveRoute}\n sx={{\n minWidth: 48,\n marginLeft: 1,\n }}\n >\n <Delete />\n </Button>\n </Tooltip>\n ) : null}\n </Box>\n </>\n ) : null}\n {status ? <StatusBottomSheet status={status} route={route} /> : null}\n {subvariant !== 'custom' ? (\n <TokenValueBottomSheet\n route={route}\n ref={tokenValueBottomSheetRef}\n onContinue={handleExecuteRoute}\n />\n ) : null}\n <ExchangeRateBottomSheet ref={exchangeRateBottomSheetRef} />\n {!hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation) ? (\n <ConfirmToAddressSheet\n ref={confirmToAddressSheetRef}\n onContinue={handleExecuteRoute}\n toAddress={toAddress!}\n toChainId={route.toChainId!}\n />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TransactionPage.js","names":[],"sources":["../../../../src/pages/TransactionPage/TransactionPage.tsx"],"sourcesContent":["import type { ExchangeRateUpdateParams } from '@lifi/sdk'\nimport Delete from '@mui/icons-material/Delete'\nimport { Box, Button, Tooltip } from '@mui/material'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { type JSX, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { WarningMessages } from '../../components/Messages/WarningMessages.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { getStepList } from '../../components/Step/StepList.js'\nimport { TransactionDetails } from '../../components/TransactionDetails.js'\nimport { useAddressActivity } from '../../hooks/useAddressActivity.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useRouteExecution } from '../../hooks/useRouteExecution.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ConfirmToAddressSheet } from './ConfirmToAddressSheet.js'\nimport type { ExchangeRateBottomSheetBase } from './ExchangeRateBottomSheet.js'\nimport { ExchangeRateBottomSheet } from './ExchangeRateBottomSheet.js'\nimport { RouteTracker } from './RouteTracker.js'\nimport { StartTransactionButton } from './StartTransactionButton.js'\nimport { StatusBottomSheet } from './StatusBottomSheet.js'\nimport { TokenValueBottomSheet } from './TokenValueBottomSheet.js'\nimport {\n calculateValueLossPercentage,\n getTokenValueLossThreshold,\n} from './utils.js'\n\nexport const TransactionPage = (): JSX.Element | null => {\n const { t } = useTranslation()\n const { setFieldValue } = useFieldActions()\n const emitter = useWidgetEvents()\n const setBackAction = useHeaderStore((state) => state.setBackAction)\n const navigate = useNavigate()\n const navigateBack = useNavigateBack()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n hiddenUI,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const stateRouteId = search?.routeId\n const [routeId, setRouteId] = useState<string>(stateRouteId)\n const [routeRefreshing, setRouteRefreshing] = useState(false)\n\n const tokenValueBottomSheetRef = useRef<BottomSheetBase>(null)\n const exchangeRateBottomSheetRef = useRef<ExchangeRateBottomSheetBase>(null)\n const confirmToAddressSheetRef = useRef<BottomSheetBase>(null)\n\n const onAcceptExchangeRateUpdate = (\n resolver: (value: boolean) => void,\n data: ExchangeRateUpdateParams\n ) => {\n exchangeRateBottomSheetRef.current?.open(resolver, data)\n }\n\n const { route, status, executeRoute, restartRoute, deleteRoute } =\n useRouteExecution({\n routeId: routeId,\n onAcceptExchangeRateUpdate,\n })\n\n const {\n toAddress,\n hasActivity,\n isLoading: isLoadingAddressActivity,\n isFetched: isActivityAddressFetched,\n } = useAddressActivity(route?.toChainId)\n\n const getHeaderTitle = () => {\n if (subvariant === 'custom') {\n return t(`header.${subvariantOptions?.custom ?? 'checkout'}`)\n }\n if (route) {\n const transactionType =\n route.fromChainId === route.toChainId ? 'swap' : 'bridge'\n return status === RouteExecutionStatus.Idle\n ? t(`button.${transactionType}Review`)\n : t(`header.${transactionType}`)\n }\n\n return t('header.exchange')\n }\n\n const headerAction = useMemo(\n () =>\n status === RouteExecutionStatus.Idle ? (\n <RouteTracker\n observableRouteId={stateRouteId}\n onChange={setRouteId}\n onFetching={setRouteRefreshing}\n />\n ) : undefined,\n [stateRouteId, status]\n )\n\n useHeader(getHeaderTitle(), headerAction)\n\n if (!route) {\n return null\n }\n\n const handleExecuteRoute = () => {\n if (tokenValueBottomSheetRef.current?.isOpen()) {\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n emitter.emit(WidgetEvent.RouteHighValueLoss, {\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD,\n valueLoss: calculateValueLossPercentage(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n ),\n })\n }\n tokenValueBottomSheetRef.current?.close()\n executeRoute()\n setFieldValue('fromAmount', '')\n if (subvariant === 'custom') {\n setFieldValue('fromToken', '')\n setFieldValue('toToken', '')\n }\n // Once transaction is started, set the back action to navigate to the home page\n setBackAction(() => {\n navigate({ to: navigationRoutes.home, replace: true })\n })\n }\n\n const handleStartClick = async () => {\n if (status === RouteExecutionStatus.Idle) {\n if (\n toAddress &&\n !hasActivity &&\n !isLoadingAddressActivity &&\n isActivityAddressFetched &&\n !hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation)\n ) {\n confirmToAddressSheetRef.current?.open()\n return\n }\n\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n const tokenValueLossThresholdExceeded = getTokenValueLossThreshold(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n )\n if (tokenValueLossThresholdExceeded && subvariant !== 'custom') {\n tokenValueBottomSheetRef.current?.open()\n } else {\n handleExecuteRoute()\n }\n }\n if (status === RouteExecutionStatus.Failed) {\n restartRoute()\n }\n }\n\n const handleRemoveRoute = () => {\n navigateBack()\n deleteRoute()\n }\n\n const getButtonText = (): string => {\n switch (status) {\n case RouteExecutionStatus.Idle:\n switch (subvariant) {\n case 'custom':\n return subvariantOptions?.custom === 'deposit'\n ? t('button.deposit')\n : t('button.buy')\n case 'refuel':\n return t('button.startBridging')\n default: {\n const transactionType =\n route.fromChainId === route.toChainId ? 'Swapping' : 'Bridging'\n return t(`button.start${transactionType}`)\n }\n }\n case RouteExecutionStatus.Failed:\n return t('button.tryAgain')\n default:\n return ''\n }\n }\n\n return (\n <PageContainer bottomGutters>\n {getStepList(route, subvariant)}\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent sx={{ marginTop: 2 }}>\n {contractSecondaryComponent}\n </ContractComponent>\n ) : null}\n <TransactionDetails route={route} sx={{ marginTop: 2 }} />\n {status === RouteExecutionStatus.Idle ||\n status === RouteExecutionStatus.Failed ? (\n <>\n <WarningMessages sx={{ mt: 2 }} route={route} allowInteraction />\n <Box\n sx={{\n mt: 2,\n display: 'flex',\n }}\n >\n <StartTransactionButton\n text={getButtonText()}\n onClick={handleStartClick}\n route={route}\n loading={routeRefreshing || isLoadingAddressActivity}\n />\n {status === RouteExecutionStatus.Failed ? (\n <Tooltip\n title={t('button.clearTransaction')}\n placement=\"bottom-end\"\n >\n <Button\n onClick={handleRemoveRoute}\n sx={{\n minWidth: 48,\n marginLeft: 1,\n }}\n >\n <Delete />\n </Button>\n </Tooltip>\n ) : null}\n </Box>\n </>\n ) : null}\n {status ? <StatusBottomSheet status={status} route={route} /> : null}\n {subvariant !== 'custom' ? (\n <TokenValueBottomSheet\n route={route}\n ref={tokenValueBottomSheetRef}\n onContinue={handleExecuteRoute}\n />\n ) : null}\n <ExchangeRateBottomSheet ref={exchangeRateBottomSheetRef} />\n {!hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation) ? (\n <ConfirmToAddressSheet\n ref={confirmToAddressSheetRef}\n onContinue={handleExecuteRoute}\n toAddress={toAddress!}\n toChainId={route.toChainId!}\n />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"I18nProvider.js","names":["enResource"],"sources":["../../../../src/providers/I18nProvider/I18nProvider.tsx"],"sourcesContent":["import { createInstance, type i18n } from 'i18next'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { I18nextProvider } from 'react-i18next'\nimport { useLanguages } from '../../hooks/useLanguages.js'\nimport { useSettingsStore } from '../../stores/settings/SettingsStore.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { compactNumberFormatter } from '../../utils/compactNumberFormatter.js'\nimport { currencyExtendedFormatter } from '../../utils/currencyExtendedFormatter.js'\nimport { percentFormatter } from '../../utils/percentFormatter.js'\nimport { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'\nimport { allLanguages } from './constants.js'\nimport { enResource } from './enResource.js'\nimport { mergeWithLanguageResources } from './i18n.js'\nimport type { LanguageKey, LanguageResource, PartialResource } from './types.js'\n\nexport const I18nProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const { languages, languageResources } = useWidgetConfig()\n const { language, languageCache } = useSettings(['language', 'languageCache'])\n const i18nInstanceRef = useRef<i18n | null>(null)\n\n const i18nInstance = useMemo(() => {\n if (i18nInstanceRef.current) {\n // Update i18n instance with language and language cache updates\n if (language && languageCache && language !== 'en') {\n i18nInstanceRef.current.addResourceBundle(\n language,\n 'translation',\n languageCache,\n true,\n true\n )\n }\n return i18nInstanceRef.current\n }\n\n // Custom language resources (of non-default languages) are added statically.\n // If custom language resources extend existing languages, they are merged with dynamically loaded resources.\n const customLanguageKeys = languageResources\n ? Object.keys(languageResources).filter(\n (key: string) => !allLanguages.includes(key as LanguageKey)\n )\n : []\n const initialLanguage = language || languages?.default\n const i18n = createInstance({\n lng: initialLanguage,\n fallbackLng: 'en',\n lowerCaseLng: true,\n interpolation: { escapeValue: false },\n resources: {\n en: {\n translation: mergeWithLanguageResources(\n enResource,\n languageResources?.en\n ),\n },\n ...(initialLanguage &&\n initialLanguage !== 'en' &&\n languageCache && {\n [initialLanguage]: {\n translation: languageCache,\n },\n }),\n // Add non-existing custom language resources\n ...customLanguageKeys.reduce(\n (acc, key) => {\n const customResource = languageResources?.[key as LanguageKey]\n if (customResource) {\n acc[key] = {\n translation: customResource,\n }\n }\n return acc\n },\n {} as Record<\n string,\n { translation: PartialResource<LanguageResource> }\n >\n ),\n },\n detection: {\n caches: [],\n },\n returnEmptyString: false,\n })\n\n i18n.init()\n\n i18n.services.formatter?.addCached('numberExt', compactNumberFormatter)\n i18n.services.formatter?.addCached('currencyExt', currencyExtendedFormatter)\n i18n.services.formatter?.addCached('percent', percentFormatter)\n i18nInstanceRef.current = i18n\n return i18n\n }, [language, languageResources, languages?.default, languageCache])\n\n return (\n <I18nextProvider i18n={i18nInstance}>\n {children}\n <DefaultLanguageHandler />\n </I18nextProvider>\n )\n}\n\n// Sync language settings internally when config.languages.default changes externally\nconst DefaultLanguageHandler: React.FC = () => {\n const { languages } = useWidgetConfig()\n const [lastDefaultLanguage, setValue] = useSettingsStore((state) => [\n state.lastDefaultLanguage,\n state.setValue,\n ])\n const { setLanguageWithCode: setLanguage } = useLanguages()\n\n useEffect(() => {\n const currentDefaultLanguage = languages?.default\n\n const defaultLanguageChanged =\n currentDefaultLanguage && currentDefaultLanguage !== lastDefaultLanguage\n\n if (!defaultLanguageChanged) {\n return\n }\n\n const updateLanguage = async () => {\n await setLanguage(currentDefaultLanguage)\n setValue('lastDefaultLanguage', currentDefaultLanguage)\n }\n\n updateLanguage()\n }, [languages?.default, setValue, lastDefaultLanguage, setLanguage])\n\n return null\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,gBAAmD,EAC9D,eACI;CACJ,MAAM,EAAE,WAAW,sBAAsB,iBAAiB;CAC1D,MAAM,EAAE,UAAU,kBAAkB,YAAY,CAAC,YAAY,gBAAgB,CAAC;CAC9E,MAAM,kBAAkB,OAAoB,KAAK;AA4EjD,QACE,qBAAC,iBAAD;EAAiB,MA3EE,cAAc;AACjC,OAAI,gBAAgB,SAAS;AAE3B,QAAI,YAAY,iBAAiB,aAAa,KAC5C,iBAAgB,QAAQ,kBACtB,UACA,eACA,eACA,MACA,KACD;AAEH,WAAO,gBAAgB;;GAKzB,MAAM,qBAAqB,oBACvB,OAAO,KAAK,kBAAkB,CAAC,QAC5B,QAAgB,CAAC,aAAa,SAAS,IAAmB,CAC5D,GACD,EAAE;GACN,MAAM,kBAAkB,YAAY,WAAW;GAC/C,MAAM,OAAO,eAAe;IAC1B,KAAK;IACL,aAAa;IACb,cAAc;IACd,eAAe,EAAE,aAAa,OAAO;IACrC,WAAW;KACT,IAAI,EACF,aAAa,2BACXA,IACA,mBAAmB,GACpB,EACF;KACD,GAAI,mBACF,oBAAoB,QACpB,iBAAiB,GACd,kBAAkB,EACjB,aAAa,eACd,EACF;KAEH,GAAG,mBAAmB,QACnB,KAAK,QAAQ;MACZ,MAAM,iBAAiB,oBAAoB;AAC3C,UAAI,eACF,KAAI,OAAO,EACT,aAAa,gBACd;AAEH,aAAO;QAET,EAAE,CAIH;KACF;IACD,WAAW,EACT,QAAQ,EAAE,EACX;IACD,mBAAmB;IACpB,CAAC;AAEF,QAAK,MAAM;AAEX,QAAK,SAAS,WAAW,UAAU,aAAa,uBAAuB;AACvE,QAAK,SAAS,WAAW,UAAU,eAAe,0BAA0B;AAC5E,QAAK,SAAS,WAAW,UAAU,WAAW,iBAAiB;AAC/D,mBAAgB,UAAU;AAC1B,UAAO;KACN;GAAC;GAAU;GAAmB,WAAW;GAAS;GAAc,
|
|
1
|
+
{"version":3,"file":"I18nProvider.js","names":["enResource"],"sources":["../../../../src/providers/I18nProvider/I18nProvider.tsx"],"sourcesContent":["import { createInstance, type i18n } from 'i18next'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { I18nextProvider } from 'react-i18next'\nimport { useLanguages } from '../../hooks/useLanguages.js'\nimport { useSettingsStore } from '../../stores/settings/SettingsStore.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { compactNumberFormatter } from '../../utils/compactNumberFormatter.js'\nimport { currencyExtendedFormatter } from '../../utils/currencyExtendedFormatter.js'\nimport { percentFormatter } from '../../utils/percentFormatter.js'\nimport { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'\nimport { allLanguages } from './constants.js'\nimport { enResource } from './enResource.js'\nimport { mergeWithLanguageResources } from './i18n.js'\nimport type { LanguageKey, LanguageResource, PartialResource } from './types.js'\n\nexport const I18nProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const { languages, languageResources } = useWidgetConfig()\n const { language, languageCache } = useSettings(['language', 'languageCache'])\n const i18nInstanceRef = useRef<i18n | null>(null)\n\n const i18nInstance = useMemo(() => {\n if (i18nInstanceRef.current) {\n // Update i18n instance with language and language cache updates\n if (language && languageCache && language !== 'en') {\n i18nInstanceRef.current.addResourceBundle(\n language,\n 'translation',\n languageCache,\n true,\n true\n )\n }\n return i18nInstanceRef.current\n }\n\n // Custom language resources (of non-default languages) are added statically.\n // If custom language resources extend existing languages, they are merged with dynamically loaded resources.\n const customLanguageKeys = languageResources\n ? Object.keys(languageResources).filter(\n (key: string) => !allLanguages.includes(key as LanguageKey)\n )\n : []\n const initialLanguage = language || languages?.default\n const i18n = createInstance({\n lng: initialLanguage,\n fallbackLng: 'en',\n lowerCaseLng: true,\n interpolation: { escapeValue: false },\n resources: {\n en: {\n translation: mergeWithLanguageResources(\n enResource,\n languageResources?.en\n ),\n },\n ...(initialLanguage &&\n initialLanguage !== 'en' &&\n languageCache && {\n [initialLanguage]: {\n translation: languageCache,\n },\n }),\n // Add non-existing custom language resources\n ...customLanguageKeys.reduce(\n (acc, key) => {\n const customResource = languageResources?.[key as LanguageKey]\n if (customResource) {\n acc[key] = {\n translation: customResource,\n }\n }\n return acc\n },\n {} as Record<\n string,\n { translation: PartialResource<LanguageResource> }\n >\n ),\n },\n detection: {\n caches: [],\n },\n returnEmptyString: false,\n })\n\n i18n.init()\n\n i18n.services.formatter?.addCached('numberExt', compactNumberFormatter)\n i18n.services.formatter?.addCached('currencyExt', currencyExtendedFormatter)\n i18n.services.formatter?.addCached('percent', percentFormatter)\n i18nInstanceRef.current = i18n\n return i18n\n }, [language, languageResources, languages?.default, languageCache])\n\n return (\n <I18nextProvider i18n={i18nInstance}>\n {children}\n <DefaultLanguageHandler />\n </I18nextProvider>\n )\n}\n\n// Sync language settings internally when config.languages.default changes externally\nconst DefaultLanguageHandler: React.FC = () => {\n const { languages } = useWidgetConfig()\n const [lastDefaultLanguage, setValue] = useSettingsStore((state) => [\n state.lastDefaultLanguage,\n state.setValue,\n ])\n const { setLanguageWithCode: setLanguage } = useLanguages()\n\n useEffect(() => {\n const currentDefaultLanguage = languages?.default\n\n const defaultLanguageChanged =\n currentDefaultLanguage && currentDefaultLanguage !== lastDefaultLanguage\n\n if (!defaultLanguageChanged) {\n return\n }\n\n const updateLanguage = async () => {\n await setLanguage(currentDefaultLanguage)\n setValue('lastDefaultLanguage', currentDefaultLanguage)\n }\n\n updateLanguage()\n }, [languages?.default, setValue, lastDefaultLanguage, setLanguage])\n\n return null\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,gBAAmD,EAC9D,eACI;CACJ,MAAM,EAAE,WAAW,sBAAsB,iBAAiB;CAC1D,MAAM,EAAE,UAAU,kBAAkB,YAAY,CAAC,YAAY,gBAAgB,CAAC;CAC9E,MAAM,kBAAkB,OAAoB,KAAK;AA4EjD,QACE,qBAAC,iBAAD;EAAiB,MA3EE,cAAc;AACjC,OAAI,gBAAgB,SAAS;AAE3B,QAAI,YAAY,iBAAiB,aAAa,KAC5C,iBAAgB,QAAQ,kBACtB,UACA,eACA,eACA,MACA,KACD;AAEH,WAAO,gBAAgB;;GAKzB,MAAM,qBAAqB,oBACvB,OAAO,KAAK,kBAAkB,CAAC,QAC5B,QAAgB,CAAC,aAAa,SAAS,IAAmB,CAC5D,GACD,EAAE;GACN,MAAM,kBAAkB,YAAY,WAAW;GAC/C,MAAM,OAAO,eAAe;IAC1B,KAAK;IACL,aAAa;IACb,cAAc;IACd,eAAe,EAAE,aAAa,OAAO;IACrC,WAAW;KACT,IAAI,EACF,aAAa,2BACXA,IACA,mBAAmB,GACpB,EACF;KACD,GAAI,mBACF,oBAAoB,QACpB,iBAAiB,GACd,kBAAkB,EACjB,aAAa,eACd,EACF;KAEH,GAAG,mBAAmB,QACnB,KAAK,QAAQ;MACZ,MAAM,iBAAiB,oBAAoB;AAC3C,UAAI,eACF,KAAI,OAAO,EACT,aAAa,gBACd;AAEH,aAAO;QAET,EAAE,CAIH;KACF;IACD,WAAW,EACT,QAAQ,EAAE,EACX;IACD,mBAAmB;IACpB,CAAC;AAEF,QAAK,MAAM;AAEX,QAAK,SAAS,WAAW,UAAU,aAAa,uBAAuB;AACvE,QAAK,SAAS,WAAW,UAAU,eAAe,0BAA0B;AAC5E,QAAK,SAAS,WAAW,UAAU,WAAW,iBAAiB;AAC/D,mBAAgB,UAAU;AAC1B,UAAO;KACN;GAAC;GAAU;GAAmB,WAAW;GAAS;GAAc,CAG9B;YAAnC,CACG,UACD,oBAAC,wBAAD,EAA0B,CAAA,CACV;;;AAKtB,MAAM,+BAAyC;CAC7C,MAAM,EAAE,cAAc,iBAAiB;CACvC,MAAM,CAAC,qBAAqB,YAAY,kBAAkB,UAAU,CAClE,MAAM,qBACN,MAAM,SACP,CAAC;CACF,MAAM,EAAE,qBAAqB,gBAAgB,cAAc;AAE3D,iBAAgB;EACd,MAAM,yBAAyB,WAAW;AAK1C,MAAI,EAFF,0BAA0B,2BAA2B,qBAGrD;EAGF,MAAM,iBAAiB,YAAY;AACjC,SAAM,YAAY,uBAAuB;AACzC,YAAS,uBAAuB,uBAAuB;;AAGzD,kBAAgB;IACf;EAAC,WAAW;EAAS;EAAU;EAAqB;EAAY,CAAC;AAEpE,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","names":[],"sources":["../../../../src/providers/I18nProvider/i18n.ts"],"sourcesContent":["import { deepMerge } from '../../utils/deepMerge.js'\nimport type { LanguageKey, LanguageResource, PartialResource } from './types.js'\n\n// Dynamically import the JSON file for the specified language\nexport async function loadLocale(\n lng: LanguageKey,\n customLanguageResource?: PartialResource<LanguageResource>\n): Promise<LanguageResource> {\n let languageResource: LanguageResource\n try {\n const languageResourceModule = await import(`../../i18n/${lng}.json`)\n languageResource = languageResourceModule.default as LanguageResource\n } catch {\n languageResource = {} as LanguageResource\n }\n return mergeWithLanguageResources(languageResource, customLanguageResource)\n}\n\nexport function mergeWithLanguageResources(\n languageResource: LanguageResource,\n customLanguageResource?: PartialResource<LanguageResource>\n): LanguageResource {\n return customLanguageResource\n ? deepMerge(languageResource, customLanguageResource)\n : languageResource\n}\n"],"mappings":";;AAIA,eAAsB,WACpB,KACA,wBAC2B;CAC3B,IAAI;AACJ,KAAI;AAEF,
|
|
1
|
+
{"version":3,"file":"i18n.js","names":[],"sources":["../../../../src/providers/I18nProvider/i18n.ts"],"sourcesContent":["import { deepMerge } from '../../utils/deepMerge.js'\nimport type { LanguageKey, LanguageResource, PartialResource } from './types.js'\n\n// Dynamically import the JSON file for the specified language\nexport async function loadLocale(\n lng: LanguageKey,\n customLanguageResource?: PartialResource<LanguageResource>\n): Promise<LanguageResource> {\n let languageResource: LanguageResource\n try {\n const languageResourceModule = await import(`../../i18n/${lng}.json`)\n languageResource = languageResourceModule.default as LanguageResource\n } catch {\n languageResource = {} as LanguageResource\n }\n return mergeWithLanguageResources(languageResource, customLanguageResource)\n}\n\nexport function mergeWithLanguageResources(\n languageResource: LanguageResource,\n customLanguageResource?: PartialResource<LanguageResource>\n): LanguageResource {\n return customLanguageResource\n ? deepMerge(languageResource, customLanguageResource)\n : languageResource\n}\n"],"mappings":";;AAIA,eAAsB,WACpB,KACA,wBAC2B;CAC3B,IAAI;AACJ,KAAI;AAEF,sBAAmB,MADkB,OAAO,cAAc,IAAI,SACpB;SACpC;AACN,qBAAmB,EAAE;;AAEvB,QAAO,2BAA2B,kBAAkB,uBAAuB;;AAG7E,SAAgB,2BACd,kBACA,wBACkB;AAClB,QAAO,yBACH,UAAU,kBAAkB,uBAAuB,GACnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryClientProvider.js","names":["QueryClientProvider","TanstackQueryClientContext","TanstackQueryClientProvider"],"sources":["../../../src/providers/QueryClientProvider.tsx"],"sourcesContent":["import {\n QueryClientContext as TanstackQueryClientContext,\n QueryClientProvider as TanstackQueryClientProvider,\n} from '@tanstack/react-query'\nimport type { PropsWithChildren } from 'react'\nimport { useContext } from 'react'\nimport { queryClient } from '../config/queryClient.js'\n\nexport const QueryClientProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const existingQueryClient = useContext(TanstackQueryClientContext)\n return existingQueryClient ? (\n children\n ) : (\n <TanstackQueryClientProvider client={queryClient}>\n {children}\n </TanstackQueryClientProvider>\n )\n}\n"],"mappings":";;;;;AAQA,MAAaA,yBAAoD,EAC/D,eACI;AAEJ,QAD4B,WAAWC,
|
|
1
|
+
{"version":3,"file":"QueryClientProvider.js","names":["QueryClientProvider","TanstackQueryClientContext","TanstackQueryClientProvider"],"sources":["../../../src/providers/QueryClientProvider.tsx"],"sourcesContent":["import {\n QueryClientContext as TanstackQueryClientContext,\n QueryClientProvider as TanstackQueryClientProvider,\n} from '@tanstack/react-query'\nimport type { PropsWithChildren } from 'react'\nimport { useContext } from 'react'\nimport { queryClient } from '../config/queryClient.js'\n\nexport const QueryClientProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const existingQueryClient = useContext(TanstackQueryClientContext)\n return existingQueryClient ? (\n children\n ) : (\n <TanstackQueryClientProvider client={queryClient}>\n {children}\n </TanstackQueryClientProvider>\n )\n}\n"],"mappings":";;;;;AAQA,MAAaA,yBAAoD,EAC/D,eACI;AAEJ,QAD4B,WAAWC,mBACb,GACxB,WAEA,oBAACC,qBAAD;EAA6B,QAAQ;EAClC;EAC2B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.js","names":["ThemeProvider","MuiThemeProvider","createTheme"],"sources":["../../../../src/providers/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["import {\n ThemeProvider as MuiThemeProvider,\n useColorScheme,\n} from '@mui/material'\nimport { useEffect, useMemo } from 'react'\nimport { createTheme } from '../../themes/createTheme.js'\nimport { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'\n\nexport const ThemeProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const { appearance: colorSchemeMode, theme: themeConfig } = useWidgetConfig()\n const { setMode } = useColorScheme()\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: setMode is stable\n useEffect(() => {\n if (colorSchemeMode) {\n setMode(colorSchemeMode)\n }\n }, [colorSchemeMode])\n\n const theme = useMemo(() => createTheme(themeConfig), [themeConfig])\n\n return (\n <MuiThemeProvider\n theme={theme}\n defaultMode={colorSchemeMode ?? 'system'}\n modeStorageKey=\"li.fi-widget-mode\"\n colorSchemeStorageKey=\"li.fi-widget-color-scheme\"\n disableTransitionOnChange\n >\n {children}\n </MuiThemeProvider>\n )\n}\n"],"mappings":";;;;;;AAQA,MAAaA,mBAAoD,EAC/D,eACI;CACJ,MAAM,EAAE,YAAY,iBAAiB,OAAO,gBAAgB,iBAAiB;CAC7E,MAAM,EAAE,YAAY,gBAAgB;AAGpC,iBAAgB;AACd,MAAI,gBACF,SAAQ,gBAAgB;IAEzB,CAAC,gBAAgB,CAAC;AAIrB,QACE,oBAACC,eAAD;EACE,OAJU,cAAcC,cAAY,YAAY,EAAE,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"ThemeProvider.js","names":["ThemeProvider","MuiThemeProvider","createTheme"],"sources":["../../../../src/providers/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["import {\n ThemeProvider as MuiThemeProvider,\n useColorScheme,\n} from '@mui/material'\nimport { useEffect, useMemo } from 'react'\nimport { createTheme } from '../../themes/createTheme.js'\nimport { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'\n\nexport const ThemeProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const { appearance: colorSchemeMode, theme: themeConfig } = useWidgetConfig()\n const { setMode } = useColorScheme()\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: setMode is stable\n useEffect(() => {\n if (colorSchemeMode) {\n setMode(colorSchemeMode)\n }\n }, [colorSchemeMode])\n\n const theme = useMemo(() => createTheme(themeConfig), [themeConfig])\n\n return (\n <MuiThemeProvider\n theme={theme}\n defaultMode={colorSchemeMode ?? 'system'}\n modeStorageKey=\"li.fi-widget-mode\"\n colorSchemeStorageKey=\"li.fi-widget-color-scheme\"\n disableTransitionOnChange\n >\n {children}\n </MuiThemeProvider>\n )\n}\n"],"mappings":";;;;;;AAQA,MAAaA,mBAAoD,EAC/D,eACI;CACJ,MAAM,EAAE,YAAY,iBAAiB,OAAO,gBAAgB,iBAAiB;CAC7E,MAAM,EAAE,YAAY,gBAAgB;AAGpC,iBAAgB;AACd,MAAI,gBACF,SAAQ,gBAAgB;IAEzB,CAAC,gBAAgB,CAAC;AAIrB,QACE,oBAACC,eAAD;EACE,OAJU,cAAcC,cAAY,YAAY,EAAE,CAAC,YAAY,CAInD;EACZ,aAAa,mBAAmB;EAChC,gBAAe;EACf,uBAAsB;EACtB,2BAAA;EAEC;EACgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletProvider.js","names":[],"sources":["../../../../src/providers/WalletProvider/WalletProvider.tsx"],"sourcesContent":["import { WalletManagementProviders } from '@lifi/wallet-management'\nimport type { WidgetProviderProps } 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 { useWidgetConfig } 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 } = useWidgetConfig()\n const { chains } = useAvailableChains()\n const { i18n } = useTranslation()\n const { useExternalWalletProvidersOnly, internalChainTypes } =\n useExternalWalletProvider()\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: internalChainTypes,\n walletEcosystemsOrder: walletConfig?.walletEcosystemsOrder,\n }),\n [\n i18n.resolvedLanguage,\n internalChainTypes,\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 return children\n}\n"],"mappings":";;;;;;;;;AAmBA,MAAa,kBAAkB,EAC7B,UACA,gBACyD;CACzD,MAAM,EAAE,iBAAiB,iBAAiB;CAC1C,MAAM,EAAE,WAAW,oBAAoB;CACvC,MAAM,EAAE,SAAS,gBAAgB;CACjC,MAAM,EAAE,gCAAgC,uBACtC,2BAA2B;AAE7B,KACE,CAAC,UAAU,UACX,CAAC,kCACD,QAAQ,IAAI,aAAa,cAEzB,SAAQ,KAAK,gCAAgC;CAG/C,MAAM,qBAAqB,iCAAiC,EAAE,GAAG;AAejE,QACE,oBAAC,2BAAD;EACE,QAf2B,eACtB;GACL,QAAQ,KAAK;GACb,mBAAmB;GACnB,uBAAuB,cAAc;GACtC,GACD;GACE,KAAK;GACL;GACA,cAAc;GACf,
|
|
1
|
+
{"version":3,"file":"WalletProvider.js","names":[],"sources":["../../../../src/providers/WalletProvider/WalletProvider.tsx"],"sourcesContent":["import { WalletManagementProviders } from '@lifi/wallet-management'\nimport type { WidgetProviderProps } 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 { useWidgetConfig } 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 } = useWidgetConfig()\n const { chains } = useAvailableChains()\n const { i18n } = useTranslation()\n const { useExternalWalletProvidersOnly, internalChainTypes } =\n useExternalWalletProvider()\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: internalChainTypes,\n walletEcosystemsOrder: walletConfig?.walletEcosystemsOrder,\n }),\n [\n i18n.resolvedLanguage,\n internalChainTypes,\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 return children\n}\n"],"mappings":";;;;;;;;;AAmBA,MAAa,kBAAkB,EAC7B,UACA,gBACyD;CACzD,MAAM,EAAE,iBAAiB,iBAAiB;CAC1C,MAAM,EAAE,WAAW,oBAAoB;CACvC,MAAM,EAAE,SAAS,gBAAgB;CACjC,MAAM,EAAE,gCAAgC,uBACtC,2BAA2B;AAE7B,KACE,CAAC,UAAU,UACX,CAAC,kCACD,QAAQ,IAAI,aAAa,cAEzB,SAAQ,KAAK,gCAAgC;CAG/C,MAAM,qBAAqB,iCAAiC,EAAE,GAAG;AAejE,QACE,oBAAC,2BAAD;EACE,QAf2B,eACtB;GACL,QAAQ,KAAK;GACb,mBAAmB;GACnB,uBAAuB,cAAc;GACtC,GACD;GACE,KAAK;GACL;GACA,cAAc;GACf,CAK+B;EAC9B,WAAW;EACH;EACR,+BACE,cAAc;YAGhB,oBAAC,wBAAD,EAAyB,UAAkC,CAAA;EACjC,CAAA;;AAIhC,MAAM,0BAAiD,EAAE,eAAe;AACtE,4BAA2B;AAC3B,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalWalletProvider.js","names":[],"sources":["../../../../src/providers/WalletProvider/useExternalWalletProvider.ts"],"sourcesContent":["import { ChainType } from '@lifi/sdk'\nimport {\n useBitcoinContext,\n useEthereumContext,\n useSolanaContext,\n useSuiContext,\n useTronContext,\n} from '@lifi/widget-provider'\nimport { useMemo } from 'react'\nimport { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'\n\ninterface ExternalWalletProvider {\n useExternalWalletProvidersOnly: boolean\n externalChainTypes: ChainType[]\n internalChainTypes: ChainType[]\n}\n\nconst internalChainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n]\n\nexport function useExternalWalletProvider(): ExternalWalletProvider {\n const { walletConfig } = useWidgetConfig()\n const { isExternalContext: hasExternalEthereumContext } = useEthereumContext()\n const { isExternalContext: hasExternalSolanaContext } = useSolanaContext()\n const { isExternalContext: hasExternalBitcoinContext } = useBitcoinContext()\n const { isExternalContext: hasExternalSuiContext } = useSuiContext()\n const { isExternalContext: hasExternalTronContext } = useTronContext()\n const data = useMemo(() => {\n const providers: ChainType[] = []\n if (hasExternalEthereumContext) {\n providers.push(ChainType.EVM)\n }\n if (hasExternalSolanaContext) {\n providers.push(ChainType.SVM)\n }\n if (hasExternalBitcoinContext) {\n providers.push(ChainType.UTXO)\n }\n if (hasExternalSuiContext) {\n providers.push(ChainType.MVM)\n }\n if (hasExternalTronContext) {\n providers.push(ChainType.TVM)\n }\n const hasExternalProvider =\n hasExternalEthereumContext ||\n hasExternalSolanaContext ||\n hasExternalBitcoinContext ||\n hasExternalSuiContext ||\n hasExternalTronContext\n\n const useExternalWalletProvidersOnly =\n hasExternalProvider &&\n !walletConfig?.usePartialWalletManagement &&\n !walletConfig?.forceInternalWalletManagement\n return {\n useExternalWalletProvidersOnly,\n externalChainTypes: providers,\n internalChainTypes: internalChainTypes.filter(\n (chainType) => !providers.includes(chainType)\n ),\n }\n }, [\n hasExternalEthereumContext,\n hasExternalSolanaContext,\n hasExternalBitcoinContext,\n hasExternalSuiContext,\n hasExternalTronContext,\n walletConfig?.usePartialWalletManagement,\n walletConfig?.forceInternalWalletManagement,\n ])\n\n return data\n}\n"],"mappings":";;;;;AAiBA,MAAM,qBAAqB;CACzB,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACX;AAED,SAAgB,4BAAoD;CAClE,MAAM,EAAE,iBAAiB,iBAAiB;CAC1C,MAAM,EAAE,mBAAmB,+BAA+B,oBAAoB;CAC9E,MAAM,EAAE,mBAAmB,6BAA6B,kBAAkB;CAC1E,MAAM,EAAE,mBAAmB,8BAA8B,mBAAmB;CAC5E,MAAM,EAAE,mBAAmB,0BAA0B,eAAe;CACpE,MAAM,EAAE,mBAAmB,2BAA2B,gBAAgB;AA8CtE,QA7Ca,cAAc;EACzB,MAAM,YAAyB,EAAE;AACjC,MAAI,2BACF,WAAU,KAAK,UAAU,IAAI;AAE/B,MAAI,yBACF,WAAU,KAAK,UAAU,IAAI;AAE/B,MAAI,0BACF,WAAU,KAAK,UAAU,KAAK;AAEhC,MAAI,sBACF,WAAU,KAAK,UAAU,IAAI;AAE/B,MAAI,uBACF,WAAU,KAAK,UAAU,IAAI;AAa/B,SAAO;GACL,iCAXA,8BACA,4BACA,6BACA,yBACA,2BAIA,CAAC,cAAc,8BACf,CAAC,cAAc;GAGf,oBAAoB;GACpB,oBAAoB,mBAAmB,QACpC,cAAc,CAAC,UAAU,SAAS,UAAU,CAC9C;GACF;IACA;EACD;EACA;EACA;EACA;EACA;EACA,cAAc;EACd,cAAc;EACf,
|
|
1
|
+
{"version":3,"file":"useExternalWalletProvider.js","names":[],"sources":["../../../../src/providers/WalletProvider/useExternalWalletProvider.ts"],"sourcesContent":["import { ChainType } from '@lifi/sdk'\nimport {\n useBitcoinContext,\n useEthereumContext,\n useSolanaContext,\n useSuiContext,\n useTronContext,\n} from '@lifi/widget-provider'\nimport { useMemo } from 'react'\nimport { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'\n\ninterface ExternalWalletProvider {\n useExternalWalletProvidersOnly: boolean\n externalChainTypes: ChainType[]\n internalChainTypes: ChainType[]\n}\n\nconst internalChainTypes = [\n ChainType.EVM,\n ChainType.SVM,\n ChainType.UTXO,\n ChainType.MVM,\n ChainType.TVM,\n]\n\nexport function useExternalWalletProvider(): ExternalWalletProvider {\n const { walletConfig } = useWidgetConfig()\n const { isExternalContext: hasExternalEthereumContext } = useEthereumContext()\n const { isExternalContext: hasExternalSolanaContext } = useSolanaContext()\n const { isExternalContext: hasExternalBitcoinContext } = useBitcoinContext()\n const { isExternalContext: hasExternalSuiContext } = useSuiContext()\n const { isExternalContext: hasExternalTronContext } = useTronContext()\n const data = useMemo(() => {\n const providers: ChainType[] = []\n if (hasExternalEthereumContext) {\n providers.push(ChainType.EVM)\n }\n if (hasExternalSolanaContext) {\n providers.push(ChainType.SVM)\n }\n if (hasExternalBitcoinContext) {\n providers.push(ChainType.UTXO)\n }\n if (hasExternalSuiContext) {\n providers.push(ChainType.MVM)\n }\n if (hasExternalTronContext) {\n providers.push(ChainType.TVM)\n }\n const hasExternalProvider =\n hasExternalEthereumContext ||\n hasExternalSolanaContext ||\n hasExternalBitcoinContext ||\n hasExternalSuiContext ||\n hasExternalTronContext\n\n const useExternalWalletProvidersOnly =\n hasExternalProvider &&\n !walletConfig?.usePartialWalletManagement &&\n !walletConfig?.forceInternalWalletManagement\n return {\n useExternalWalletProvidersOnly,\n externalChainTypes: providers,\n internalChainTypes: internalChainTypes.filter(\n (chainType) => !providers.includes(chainType)\n ),\n }\n }, [\n hasExternalEthereumContext,\n hasExternalSolanaContext,\n hasExternalBitcoinContext,\n hasExternalSuiContext,\n hasExternalTronContext,\n walletConfig?.usePartialWalletManagement,\n walletConfig?.forceInternalWalletManagement,\n ])\n\n return data\n}\n"],"mappings":";;;;;AAiBA,MAAM,qBAAqB;CACzB,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACX;AAED,SAAgB,4BAAoD;CAClE,MAAM,EAAE,iBAAiB,iBAAiB;CAC1C,MAAM,EAAE,mBAAmB,+BAA+B,oBAAoB;CAC9E,MAAM,EAAE,mBAAmB,6BAA6B,kBAAkB;CAC1E,MAAM,EAAE,mBAAmB,8BAA8B,mBAAmB;CAC5E,MAAM,EAAE,mBAAmB,0BAA0B,eAAe;CACpE,MAAM,EAAE,mBAAmB,2BAA2B,gBAAgB;AA8CtE,QA7Ca,cAAc;EACzB,MAAM,YAAyB,EAAE;AACjC,MAAI,2BACF,WAAU,KAAK,UAAU,IAAI;AAE/B,MAAI,yBACF,WAAU,KAAK,UAAU,IAAI;AAE/B,MAAI,0BACF,WAAU,KAAK,UAAU,KAAK;AAEhC,MAAI,sBACF,WAAU,KAAK,UAAU,IAAI;AAE/B,MAAI,uBACF,WAAU,KAAK,UAAU,IAAI;AAa/B,SAAO;GACL,iCAXA,8BACA,4BACA,6BACA,yBACA,2BAIA,CAAC,cAAc,8BACf,CAAC,cAAc;GAGf,oBAAoB;GACpB,oBAAoB,mBAAmB,QACpC,cAAc,CAAC,UAAU,SAAS,UAAU,CAC9C;GACF;IACA;EACD;EACA;EACA;EACA;EACA;EACA,cAAc;EACd,cAAc;EACf,CAEU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetProvider.js","names":[],"sources":["../../../../src/providers/WidgetProvider/WidgetProvider.tsx"],"sourcesContent":["import { createContext, useContext, 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\nconst WidgetContext = createContext<WidgetContextProps>(initialContext)\n\nexport const useWidgetConfig = (): WidgetContextProps =>\n useContext(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 try {\n // Create widget configuration object\n const value = {\n ...widgetConfig,\n elementId,\n } as WidgetContextProps\n\n // Set default settings for widget settings store\n setDefaultSettings(value)\n\n return value\n } catch (e) {\n console.warn(e)\n return {\n ...widgetConfig,\n elementId,\n integrator: widgetConfig.integrator,\n }\n }\n }, [elementId, widgetConfig, setDefaultSettings])\n return (\n <WidgetContext.Provider value={value}>{children}</WidgetContext.Provider>\n )\n}\n"],"mappings":";;;;AASA,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"WidgetProvider.js","names":[],"sources":["../../../../src/providers/WidgetProvider/WidgetProvider.tsx"],"sourcesContent":["import { createContext, useContext, 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\nconst WidgetContext = createContext<WidgetContextProps>(initialContext)\n\nexport const useWidgetConfig = (): WidgetContextProps =>\n useContext(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 try {\n // Create widget configuration object\n const value = {\n ...widgetConfig,\n elementId,\n } as WidgetContextProps\n\n // Set default settings for widget settings store\n setDefaultSettings(value)\n\n return value\n } catch (e) {\n console.warn(e)\n return {\n ...widgetConfig,\n elementId,\n integrator: widgetConfig.integrator,\n }\n }\n }, [elementId, widgetConfig, setDefaultSettings])\n return (\n <WidgetContext.Provider value={value}>{children}</WidgetContext.Provider>\n )\n}\n"],"mappings":";;;;AASA,MAAM,gBAAgB,cAAkC;CAJtD,WAAW;CACX,YAAY;CAGwD,CAAC;AAEvE,MAAa,wBACX,WAAW,cAAc;AAE3B,MAAa,kBAER,EAAE,UAAU,QAAQ,mBAAmB;CAC1C,MAAM,YAAY,OAAO;CACzB,MAAM,EAAE,uBAAuB,oBAAoB;AAEnD,KAAI,CAAC,cAAc,WACjB,OAAM,IAAI,MAAM,+CAA6C;CAG/D,MAAM,QAAQ,cAAkC;AAC9C,MAAI;GAEF,MAAM,QAAQ;IACZ,GAAG;IACH;IACD;AAGD,sBAAmB,MAAM;AAEzB,UAAO;WACA,GAAG;AACV,WAAQ,KAAK,EAAE;AACf,UAAO;IACL,GAAG;IACH;IACA,YAAY,aAAa;IAC1B;;IAEF;EAAC;EAAW;EAAc;EAAmB,CAAC;AACjD,QACE,oBAAC,cAAc,UAAf;EAA+B;EAAQ;EAAkC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBookmarkActions.js","names":[],"sources":["../../../../src/stores/bookmarks/useBookmarkActions.ts"],"sourcesContent":["import { useBookmarkStore } from './BookmarkStore.js'\nimport type { BookmarkActions } from './types.js'\n\nexport const useBookmarkActions = (): BookmarkActions => {\n const actions = useBookmarkStore<BookmarkActions>((store) => ({\n getBookmark: store.getBookmark,\n addBookmark: store.addBookmark,\n removeBookmark: store.removeBookmark,\n setSelectedBookmark: store.setSelectedBookmark,\n getSelectedBookmark: store.getSelectedBookmark,\n addRecentWallet: store.addRecentWallet,\n removeRecentWallet: store.removeRecentWallet,\n }))\n\n return actions\n}\n"],"mappings":";;AAGA,MAAa,2BAA4C;AAWvD,QAVgB,kBAAmC,WAAW;EAC5D,aAAa,MAAM;EACnB,aAAa,MAAM;EACnB,gBAAgB,MAAM;EACtB,qBAAqB,MAAM;EAC3B,qBAAqB,MAAM;EAC3B,iBAAiB,MAAM;EACvB,oBAAoB,MAAM;EAC3B,
|
|
1
|
+
{"version":3,"file":"useBookmarkActions.js","names":[],"sources":["../../../../src/stores/bookmarks/useBookmarkActions.ts"],"sourcesContent":["import { useBookmarkStore } from './BookmarkStore.js'\nimport type { BookmarkActions } from './types.js'\n\nexport const useBookmarkActions = (): BookmarkActions => {\n const actions = useBookmarkStore<BookmarkActions>((store) => ({\n getBookmark: store.getBookmark,\n addBookmark: store.addBookmark,\n removeBookmark: store.removeBookmark,\n setSelectedBookmark: store.setSelectedBookmark,\n getSelectedBookmark: store.getSelectedBookmark,\n addRecentWallet: store.addRecentWallet,\n removeRecentWallet: store.removeRecentWallet,\n }))\n\n return actions\n}\n"],"mappings":";;AAGA,MAAa,2BAA4C;AAWvD,QAVgB,kBAAmC,WAAW;EAC5D,aAAa,MAAM;EACnB,aAAa,MAAM;EACnB,gBAAgB,MAAM;EACtB,qBAAqB,MAAM;EAC3B,qBAAqB,MAAM;EAC3B,iBAAiB,MAAM;EACvB,oBAAoB,MAAM;EAC3B,EAEa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainOrderStore.js","names":[],"sources":["../../../../src/stores/chains/ChainOrderStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useEffect, useRef } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { useChains } from '../../hooks/useChains.js'\nimport { useSwapOnly } from '../../hooks/useSwapOnly.js'\nimport { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { getConfigItemSets, isItemAllowedForSets } from '../../utils/item.js'\nimport { getDefaultValuesFromQueryString } from '../form/getDefaultValuesFromQueryString.js'\nimport type { FormType } from '../form/types.js'\nimport { useFieldActions } from '../form/useFieldActions.js'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createChainOrderStore } from './createChainOrderStore.js'\nimport type { ChainOrderState } from './types.js'\n\ntype ChainOrderStore = UseBoundStore<StoreApi<ChainOrderState>>\n\nconst ChainOrderStoreContext = createContext<ChainOrderStore | null>(null)\n\nexport function ChainOrderStoreProvider({\n children,\n ...props\n}: PersistStoreProviderProps): JSX.Element {\n const {\n chains: chainsConfig,\n hiddenUI,\n fromChain: fromChainConfig,\n toChain: toChainConfig,\n buildUrl,\n } = useWidgetConfig()\n const storeRef = useRef<ChainOrderStore>(null)\n const { chains } = useChains()\n const { setFieldValue, getFieldValues } = useFieldActions()\n const swapOnly = useSwapOnly()\n const { variant, subvariantOptions } = useWidgetConfig()\n const { externalChainTypes, useExternalWalletProvidersOnly } =\n useExternalWalletProvider()\n\n if (!storeRef.current) {\n storeRef.current = createChainOrderStore({\n ...props,\n })\n }\n\n useEffect(() => {\n if (chains) {\n ;(['from', 'to'] as FormType[]).forEach((key) => {\n const configChainIds = chainsConfig?.[key]\n const isFromKey = key === 'from'\n\n // Convert configChainIds to Sets for O(1) lookup\n const configChainIdsSet = getConfigItemSets(\n configChainIds,\n (chainIds) => new Set(chainIds)\n )\n const filteredChains = chains.filter((chain) => {\n const passesChainsConfigFilter = configChainIdsSet\n ? isItemAllowedForSets(chain.id, configChainIdsSet)\n : true\n // If the integrator uses external wallet management and has not opted in for partial wallet management,\n // restrict the displayed chains to those compatible with external wallet management.\n // This ensures users only see chains for which they can sign transactions.\n const passesWalletConfigFilter = isFromKey\n ? !useExternalWalletProvidersOnly ||\n externalChainTypes.includes(chain.chainType)\n : true\n return passesChainsConfigFilter && passesWalletConfigFilter\n })\n\n const chainOrder = storeRef.current?.getState().initializeChains(\n filteredChains.map((chain) => chain.id),\n key\n )\n\n const isSwapTo = swapOnly && key === 'to'\n\n // Show \"All networks\" button if there are multiple networks\n const showAllNetworks =\n filteredChains.length > 1 &&\n !hiddenUI?.includes(HiddenUI.AllNetworks) &&\n !isSwapTo\n\n // Initialize the isAllNetworks with true if the tab is shown,\n // there is no config chain value and no url chain value\n const urlValues = getDefaultValuesFromQueryString({ buildUrl })\n const urlChainValue =\n key === 'from' ? urlValues.fromChain : urlValues.toChain\n const configChainValue =\n key === 'from' ? fromChainConfig : toChainConfig\n const initialIsAllNetworks =\n showAllNetworks && !configChainValue && !urlChainValue\n storeRef.current?.getState().setIsAllNetworks(initialIsAllNetworks, key)\n storeRef.current?.getState().setShowAllNetworks(showAllNetworks, key)\n\n // If swap only, set the to chain to the from chain\n if (isSwapTo) {\n const [fromChainValue] = getFieldValues('fromChain')\n setFieldValue('toChain', fromChainValue)\n }\n\n // When \"All Networks\" is active, don't auto-select a chain from the\n // persisted chain order. This prevents stale cross-ecosystem selections\n // (e.g. EVM from + Solana to) from triggering the \"destination wallet\n // address required\" message after a page refresh.\n if (initialIsAllNetworks) {\n return\n }\n\n const [chainValue] = getFieldValues(`${key}Chain`)\n if (chainValue) {\n return\n }\n\n const firstAllowedPinnedChain = storeRef.current\n ?.getState()\n .pinnedChains?.find((chainId) =>\n filteredChains.some((chain) => chain.id === chainId)\n )\n if (\n variant === 'wide' &&\n !subvariantOptions?.wide?.disableChainSidebar &&\n firstAllowedPinnedChain\n ) {\n setFieldValue(`${key}Chain`, firstAllowedPinnedChain)\n } else if (chainOrder?.length) {\n setFieldValue(`${key}Chain`, chainOrder[0])\n }\n })\n }\n }, [\n chains,\n chainsConfig,\n externalChainTypes,\n getFieldValues,\n setFieldValue,\n useExternalWalletProvidersOnly,\n variant,\n subvariantOptions?.wide?.disableChainSidebar,\n hiddenUI,\n swapOnly,\n fromChainConfig,\n toChainConfig,\n buildUrl,\n ])\n\n return (\n <ChainOrderStoreContext.Provider value={storeRef.current}>\n {children}\n </ChainOrderStoreContext.Provider>\n )\n}\n\nfunction useChainOrderStoreContext() {\n const useStore = useContext(ChainOrderStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${ChainOrderStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useChainOrderStore<T>(\n selector: (state: ChainOrderState) => T\n): T {\n const useStore = useChainOrderStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,yBAAyB,cAAsC,KAAK;AAE1E,SAAgB,wBAAwB,EACtC,UACA,GAAG,SACsC;CACzC,MAAM,EACJ,QAAQ,cACR,UACA,WAAW,iBACX,SAAS,eACT,aACE,iBAAiB;CACrB,MAAM,WAAW,OAAwB,KAAK;CAC9C,MAAM,EAAE,WAAW,WAAW;CAC9B,MAAM,EAAE,eAAe,mBAAmB,iBAAiB;CAC3D,MAAM,WAAW,aAAa;CAC9B,MAAM,EAAE,SAAS,sBAAsB,iBAAiB;CACxD,MAAM,EAAE,oBAAoB,mCAC1B,2BAA2B;AAE7B,KAAI,CAAC,SAAS,QACZ,UAAS,UAAU,sBAAsB,EACvC,GAAG,OACJ,CAAC;AAGJ,iBAAgB;AACd,MAAI,OACA,EAAC,QAAQ,KAAK,CAAgB,SAAS,QAAQ;GAC/C,MAAM,iBAAiB,eAAe;GACtC,MAAM,YAAY,QAAQ;GAG1B,MAAM,oBAAoB,kBACxB,iBACC,aAAa,IAAI,IAAI,SAAS,CAChC;GACD,MAAM,iBAAiB,OAAO,QAAQ,UAAU;IAC9C,MAAM,2BAA2B,oBAC7B,qBAAqB,MAAM,IAAI,kBAAkB,GACjD;IAIJ,MAAM,2BAA2B,YAC7B,CAAC,kCACD,mBAAmB,SAAS,MAAM,UAAU,GAC5C;AACJ,WAAO,4BAA4B;KACnC;GAEF,MAAM,aAAa,SAAS,SAAS,UAAU,CAAC,iBAC9C,eAAe,KAAK,UAAU,MAAM,GAAG,EACvC,IACD;GAED,MAAM,WAAW,YAAY,QAAQ;GAGrC,MAAM,kBACJ,eAAe,SAAS,KACxB,CAAC,UAAU,SAAA,cAA8B,IACzC,CAAC;GAIH,MAAM,YAAY,gCAAgC,EAAE,UAAU,CAAC;GAC/D,MAAM,gBACJ,QAAQ,SAAS,UAAU,YAAY,UAAU;GAGnD,MAAM,uBACJ,mBAAmB,EAFnB,QAAQ,SAAS,kBAAkB,kBAEK,CAAC;AAC3C,YAAS,SAAS,UAAU,CAAC,iBAAiB,sBAAsB,IAAI;AACxE,YAAS,SAAS,UAAU,CAAC,mBAAmB,iBAAiB,IAAI;AAGrE,OAAI,UAAU;IACZ,MAAM,CAAC,kBAAkB,eAAe,YAAY;AACpD,kBAAc,WAAW,eAAe;;AAO1C,OAAI,qBACF;GAGF,MAAM,CAAC,cAAc,eAAe,GAAG,IAAI,OAAO;AAClD,OAAI,WACF;GAGF,MAAM,0BAA0B,SAAS,SACrC,UAAU,CACX,cAAc,MAAM,YACnB,eAAe,MAAM,UAAU,MAAM,OAAO,QAAQ,CACrD;AACH,OACE,YAAY,UACZ,CAAC,mBAAmB,MAAM,uBAC1B,wBAEA,eAAc,GAAG,IAAI,QAAQ,wBAAwB;YAC5C,YAAY,OACrB,eAAc,GAAG,IAAI,QAAQ,WAAW,GAAG;IAE7C;IAEH;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAmB,MAAM;EACzB;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC,uBAAuB,UAAxB;EAAiC,OAAO,SAAS;EAC9C;EAC+B,CAAA;;AAItC,SAAS,4BAA4B;CACnC,MAAM,WAAW,WAAW,uBAAuB;AACnD,KAAI,CAAC,SACH,OAAM,IAAI,MACR,yCAAyC,wBAAwB,KAAK,IACvE;AAEH,QAAO;;AAGT,SAAgB,mBACd,UACG;AAEH,QADiB,
|
|
1
|
+
{"version":3,"file":"ChainOrderStore.js","names":[],"sources":["../../../../src/stores/chains/ChainOrderStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useEffect, useRef } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { useChains } from '../../hooks/useChains.js'\nimport { useSwapOnly } from '../../hooks/useSwapOnly.js'\nimport { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { getConfigItemSets, isItemAllowedForSets } from '../../utils/item.js'\nimport { getDefaultValuesFromQueryString } from '../form/getDefaultValuesFromQueryString.js'\nimport type { FormType } from '../form/types.js'\nimport { useFieldActions } from '../form/useFieldActions.js'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createChainOrderStore } from './createChainOrderStore.js'\nimport type { ChainOrderState } from './types.js'\n\ntype ChainOrderStore = UseBoundStore<StoreApi<ChainOrderState>>\n\nconst ChainOrderStoreContext = createContext<ChainOrderStore | null>(null)\n\nexport function ChainOrderStoreProvider({\n children,\n ...props\n}: PersistStoreProviderProps): JSX.Element {\n const {\n chains: chainsConfig,\n hiddenUI,\n fromChain: fromChainConfig,\n toChain: toChainConfig,\n buildUrl,\n } = useWidgetConfig()\n const storeRef = useRef<ChainOrderStore>(null)\n const { chains } = useChains()\n const { setFieldValue, getFieldValues } = useFieldActions()\n const swapOnly = useSwapOnly()\n const { variant, subvariantOptions } = useWidgetConfig()\n const { externalChainTypes, useExternalWalletProvidersOnly } =\n useExternalWalletProvider()\n\n if (!storeRef.current) {\n storeRef.current = createChainOrderStore({\n ...props,\n })\n }\n\n useEffect(() => {\n if (chains) {\n ;(['from', 'to'] as FormType[]).forEach((key) => {\n const configChainIds = chainsConfig?.[key]\n const isFromKey = key === 'from'\n\n // Convert configChainIds to Sets for O(1) lookup\n const configChainIdsSet = getConfigItemSets(\n configChainIds,\n (chainIds) => new Set(chainIds)\n )\n const filteredChains = chains.filter((chain) => {\n const passesChainsConfigFilter = configChainIdsSet\n ? isItemAllowedForSets(chain.id, configChainIdsSet)\n : true\n // If the integrator uses external wallet management and has not opted in for partial wallet management,\n // restrict the displayed chains to those compatible with external wallet management.\n // This ensures users only see chains for which they can sign transactions.\n const passesWalletConfigFilter = isFromKey\n ? !useExternalWalletProvidersOnly ||\n externalChainTypes.includes(chain.chainType)\n : true\n return passesChainsConfigFilter && passesWalletConfigFilter\n })\n\n const chainOrder = storeRef.current?.getState().initializeChains(\n filteredChains.map((chain) => chain.id),\n key\n )\n\n const isSwapTo = swapOnly && key === 'to'\n\n // Show \"All networks\" button if there are multiple networks\n const showAllNetworks =\n filteredChains.length > 1 &&\n !hiddenUI?.includes(HiddenUI.AllNetworks) &&\n !isSwapTo\n\n // Initialize the isAllNetworks with true if the tab is shown,\n // there is no config chain value and no url chain value\n const urlValues = getDefaultValuesFromQueryString({ buildUrl })\n const urlChainValue =\n key === 'from' ? urlValues.fromChain : urlValues.toChain\n const configChainValue =\n key === 'from' ? fromChainConfig : toChainConfig\n const initialIsAllNetworks =\n showAllNetworks && !configChainValue && !urlChainValue\n storeRef.current?.getState().setIsAllNetworks(initialIsAllNetworks, key)\n storeRef.current?.getState().setShowAllNetworks(showAllNetworks, key)\n\n // If swap only, set the to chain to the from chain\n if (isSwapTo) {\n const [fromChainValue] = getFieldValues('fromChain')\n setFieldValue('toChain', fromChainValue)\n }\n\n // When \"All Networks\" is active, don't auto-select a chain from the\n // persisted chain order. This prevents stale cross-ecosystem selections\n // (e.g. EVM from + Solana to) from triggering the \"destination wallet\n // address required\" message after a page refresh.\n if (initialIsAllNetworks) {\n return\n }\n\n const [chainValue] = getFieldValues(`${key}Chain`)\n if (chainValue) {\n return\n }\n\n const firstAllowedPinnedChain = storeRef.current\n ?.getState()\n .pinnedChains?.find((chainId) =>\n filteredChains.some((chain) => chain.id === chainId)\n )\n if (\n variant === 'wide' &&\n !subvariantOptions?.wide?.disableChainSidebar &&\n firstAllowedPinnedChain\n ) {\n setFieldValue(`${key}Chain`, firstAllowedPinnedChain)\n } else if (chainOrder?.length) {\n setFieldValue(`${key}Chain`, chainOrder[0])\n }\n })\n }\n }, [\n chains,\n chainsConfig,\n externalChainTypes,\n getFieldValues,\n setFieldValue,\n useExternalWalletProvidersOnly,\n variant,\n subvariantOptions?.wide?.disableChainSidebar,\n hiddenUI,\n swapOnly,\n fromChainConfig,\n toChainConfig,\n buildUrl,\n ])\n\n return (\n <ChainOrderStoreContext.Provider value={storeRef.current}>\n {children}\n </ChainOrderStoreContext.Provider>\n )\n}\n\nfunction useChainOrderStoreContext() {\n const useStore = useContext(ChainOrderStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${ChainOrderStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useChainOrderStore<T>(\n selector: (state: ChainOrderState) => T\n): T {\n const useStore = useChainOrderStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,yBAAyB,cAAsC,KAAK;AAE1E,SAAgB,wBAAwB,EACtC,UACA,GAAG,SACsC;CACzC,MAAM,EACJ,QAAQ,cACR,UACA,WAAW,iBACX,SAAS,eACT,aACE,iBAAiB;CACrB,MAAM,WAAW,OAAwB,KAAK;CAC9C,MAAM,EAAE,WAAW,WAAW;CAC9B,MAAM,EAAE,eAAe,mBAAmB,iBAAiB;CAC3D,MAAM,WAAW,aAAa;CAC9B,MAAM,EAAE,SAAS,sBAAsB,iBAAiB;CACxD,MAAM,EAAE,oBAAoB,mCAC1B,2BAA2B;AAE7B,KAAI,CAAC,SAAS,QACZ,UAAS,UAAU,sBAAsB,EACvC,GAAG,OACJ,CAAC;AAGJ,iBAAgB;AACd,MAAI,OACA,EAAC,QAAQ,KAAK,CAAgB,SAAS,QAAQ;GAC/C,MAAM,iBAAiB,eAAe;GACtC,MAAM,YAAY,QAAQ;GAG1B,MAAM,oBAAoB,kBACxB,iBACC,aAAa,IAAI,IAAI,SAAS,CAChC;GACD,MAAM,iBAAiB,OAAO,QAAQ,UAAU;IAC9C,MAAM,2BAA2B,oBAC7B,qBAAqB,MAAM,IAAI,kBAAkB,GACjD;IAIJ,MAAM,2BAA2B,YAC7B,CAAC,kCACD,mBAAmB,SAAS,MAAM,UAAU,GAC5C;AACJ,WAAO,4BAA4B;KACnC;GAEF,MAAM,aAAa,SAAS,SAAS,UAAU,CAAC,iBAC9C,eAAe,KAAK,UAAU,MAAM,GAAG,EACvC,IACD;GAED,MAAM,WAAW,YAAY,QAAQ;GAGrC,MAAM,kBACJ,eAAe,SAAS,KACxB,CAAC,UAAU,SAAA,cAA8B,IACzC,CAAC;GAIH,MAAM,YAAY,gCAAgC,EAAE,UAAU,CAAC;GAC/D,MAAM,gBACJ,QAAQ,SAAS,UAAU,YAAY,UAAU;GAGnD,MAAM,uBACJ,mBAAmB,EAFnB,QAAQ,SAAS,kBAAkB,kBAEK,CAAC;AAC3C,YAAS,SAAS,UAAU,CAAC,iBAAiB,sBAAsB,IAAI;AACxE,YAAS,SAAS,UAAU,CAAC,mBAAmB,iBAAiB,IAAI;AAGrE,OAAI,UAAU;IACZ,MAAM,CAAC,kBAAkB,eAAe,YAAY;AACpD,kBAAc,WAAW,eAAe;;AAO1C,OAAI,qBACF;GAGF,MAAM,CAAC,cAAc,eAAe,GAAG,IAAI,OAAO;AAClD,OAAI,WACF;GAGF,MAAM,0BAA0B,SAAS,SACrC,UAAU,CACX,cAAc,MAAM,YACnB,eAAe,MAAM,UAAU,MAAM,OAAO,QAAQ,CACrD;AACH,OACE,YAAY,UACZ,CAAC,mBAAmB,MAAM,uBAC1B,wBAEA,eAAc,GAAG,IAAI,QAAQ,wBAAwB;YAC5C,YAAY,OACrB,eAAc,GAAG,IAAI,QAAQ,WAAW,GAAG;IAE7C;IAEH;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAmB,MAAM;EACzB;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC,uBAAuB,UAAxB;EAAiC,OAAO,SAAS;EAC9C;EAC+B,CAAA;;AAItC,SAAS,4BAA4B;CACnC,MAAM,WAAW,WAAW,uBAAuB;AACnD,KAAI,CAAC,SACH,OAAM,IAAI,MACR,yCAAyC,wBAAwB,KAAK,IACvE;AAEH,QAAO;;AAGT,SAAgB,mBACd,UACG;AAEH,QADiB,2BACF,CAAC,WAAW,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChainOrder.js","names":[],"sources":["../../../../src/stores/chains/useChainOrder.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { FormType } from '../form/types.js'\nimport { useChainOrderStore } from './ChainOrderStore.js'\nimport { maxChainsToOrder } from './createChainOrderStore.js'\n\nexport const useChainOrder = (\n type: FormType\n): [number[], (chainId: number, type: FormType) => void] => {\n const [chainOrder, setChain] = useChainOrderStore((state) => [\n state.chainOrder[type],\n state.setChain,\n ])\n\n const limitedChainOrder = useMemo(\n () => chainOrder.slice(0, maxChainsToOrder),\n [chainOrder]\n )\n\n return [limitedChainOrder, setChain]\n}\n"],"mappings":";;;AAKA,MAAa,iBACX,SAC0D;CAC1D,MAAM,CAAC,YAAY,YAAY,oBAAoB,UAAU,CAC3D,MAAM,WAAW,OACjB,MAAM,SACP,CAAC;AAOF,QAAO,CALmB,cAClB,WAAW,MAAM,GAAA,EAAoB,EAC3C,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"useChainOrder.js","names":[],"sources":["../../../../src/stores/chains/useChainOrder.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { FormType } from '../form/types.js'\nimport { useChainOrderStore } from './ChainOrderStore.js'\nimport { maxChainsToOrder } from './createChainOrderStore.js'\n\nexport const useChainOrder = (\n type: FormType\n): [number[], (chainId: number, type: FormType) => void] => {\n const [chainOrder, setChain] = useChainOrderStore((state) => [\n state.chainOrder[type],\n state.setChain,\n ])\n\n const limitedChainOrder = useMemo(\n () => chainOrder.slice(0, maxChainsToOrder),\n [chainOrder]\n )\n\n return [limitedChainOrder, setChain]\n}\n"],"mappings":";;;AAKA,MAAa,iBACX,SAC0D;CAC1D,MAAM,CAAC,YAAY,YAAY,oBAAoB,UAAU,CAC3D,MAAM,WAAW,OACjB,MAAM,SACP,CAAC;AAOF,QAAO,CALmB,cAClB,WAAW,MAAM,GAAA,EAAoB,EAC3C,CAAC,WAAW,CAGW,EAAE,SAAS"}
|