@lifi/widget 3.14.1 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/esm/AppDrawer.style.d.ts +1 -1
  3. package/dist/esm/components/ActiveTransactions/ActiveTransactions.style.d.ts +3 -3
  4. package/dist/esm/components/AmountInput/AmountInput.style.d.ts +1 -1
  5. package/dist/esm/components/AmountInput/AmountInputAdornment.style.d.ts +2 -2
  6. package/dist/esm/components/AppContainer.d.ts +1 -1
  7. package/dist/esm/components/Avatar/Avatar.style.d.ts +1 -1
  8. package/dist/esm/components/Avatar/SmallAvatar.d.ts +1 -1
  9. package/dist/esm/components/ButtonTertiary.d.ts +1 -1
  10. package/dist/esm/components/Card/Card.d.ts +1 -1
  11. package/dist/esm/components/Card/CardButton.style.d.ts +2 -2
  12. package/dist/esm/components/Card/CardHeader.d.ts +1 -1
  13. package/dist/esm/components/Card/CardIconButton.d.ts +1 -1
  14. package/dist/esm/components/Card/CardLabel.d.ts +1 -1
  15. package/dist/esm/components/Card/CardTitle.d.ts +1 -1
  16. package/dist/esm/components/Card/InputCard.d.ts +1 -1
  17. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts +1 -1
  18. package/dist/esm/components/ContractComponent/NFT/NFT.style.d.ts +1 -1
  19. package/dist/esm/components/Header/Header.style.d.ts +3 -3
  20. package/dist/esm/components/Header/SettingsButton.style.d.ts +2 -2
  21. package/dist/esm/components/ListItem/ListItem.d.ts +1 -1
  22. package/dist/esm/components/ListItem/ListItemButton.d.ts +1 -1
  23. package/dist/esm/components/ListItemButton.d.ts +1 -1
  24. package/dist/esm/components/Messages/AccountNotDeployedMessage.d.ts +2 -0
  25. package/dist/esm/components/Messages/AccountNotDeployedMessage.js +10 -0
  26. package/dist/esm/components/Messages/AccountNotDeployedMessage.js.map +1 -0
  27. package/dist/esm/components/Messages/AlertMessage.js.map +1 -0
  28. package/dist/esm/components/Messages/AlertMessage.style.js.map +1 -0
  29. package/dist/esm/components/Messages/FundsSufficiencyMessage.d.ts +2 -0
  30. package/dist/esm/components/{GasMessage → Messages}/FundsSufficiencyMessage.js +3 -4
  31. package/dist/esm/components/Messages/FundsSufficiencyMessage.js.map +1 -0
  32. package/dist/esm/components/Messages/GasMessage.js.map +1 -0
  33. package/dist/esm/components/{GasMessage → Messages}/GasRefuelMessage.js +2 -2
  34. package/dist/esm/components/Messages/GasRefuelMessage.js.map +1 -0
  35. package/dist/esm/components/{GasMessage/GasMessage.style.js → Messages/GasRefuelMessage.style.js} +1 -1
  36. package/dist/esm/components/Messages/GasRefuelMessage.style.js.map +1 -0
  37. package/dist/esm/components/{GasMessage → Messages}/GasSufficiencyMessage.js +1 -1
  38. package/dist/esm/components/Messages/GasSufficiencyMessage.js.map +1 -0
  39. package/dist/esm/components/Messages/MainMessages.js +29 -0
  40. package/dist/esm/components/Messages/MainMessages.js.map +1 -0
  41. package/dist/esm/components/Messages/ToAddressRequiredMessage.d.ts +2 -0
  42. package/dist/esm/components/Messages/ToAddressRequiredMessage.js +13 -0
  43. package/dist/esm/components/Messages/ToAddressRequiredMessage.js.map +1 -0
  44. package/dist/esm/components/Messages/types.js.map +1 -0
  45. package/dist/esm/components/Messages/useMessageQueue.d.ts +11 -0
  46. package/dist/esm/components/Messages/useMessageQueue.js +48 -0
  47. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -0
  48. package/dist/esm/components/PageContainer.d.ts +1 -1
  49. package/dist/esm/components/PoweredBy/PoweredBy.style.d.ts +1 -1
  50. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.d.ts +1 -1
  51. package/dist/esm/components/Routes/RoutesExpanded.style.d.ts +1 -1
  52. package/dist/esm/components/Search/SearchInput.style.d.ts +1 -1
  53. package/dist/esm/components/Search/SearchNotFound.style.d.ts +2 -2
  54. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.d.ts +3 -3
  55. package/dist/esm/components/SendToWallet/SendToWallet.style.d.ts +1 -1
  56. package/dist/esm/components/SettingsListItemButton.d.ts +1 -1
  57. package/dist/esm/components/Skeleton/WidgetSkeleton.style.d.ts +4 -4
  58. package/dist/esm/components/StepActions/StepActions.style.d.ts +2 -2
  59. package/dist/esm/components/StepDivider/StepDivider.style.d.ts +1 -1
  60. package/dist/esm/components/Tabs/Tabs.style.d.ts +3 -3
  61. package/dist/esm/components/Token/Token.style.d.ts +1 -1
  62. package/dist/esm/components/TokenList/TokenList.style.d.ts +2 -2
  63. package/dist/esm/components/TokenRate/TokenRate.style.d.ts +1 -1
  64. package/dist/esm/config/version.d.ts +1 -1
  65. package/dist/esm/config/version.js +1 -1
  66. package/dist/esm/hooks/useGasRefuel.js +1 -1
  67. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  68. package/dist/esm/hooks/useGasSufficiency.js +1 -1
  69. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  70. package/dist/esm/hooks/useIsContractAddress.d.ts +4 -1
  71. package/dist/esm/hooks/useIsContractAddress.js +1 -2
  72. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  73. package/dist/esm/hooks/useToAddressRequirements.d.ts +1 -0
  74. package/dist/esm/hooks/useToAddressRequirements.js +11 -2
  75. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  76. package/dist/esm/i18n/en.json +2 -1
  77. package/dist/esm/pages/MainPage/MainPage.js +2 -2
  78. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  79. package/dist/esm/pages/MainPage/MainPage.style.d.ts +1 -1
  80. package/dist/esm/pages/MainPage/ReviewButton.js +3 -2
  81. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  82. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts +1 -1
  83. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +1 -1
  84. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  85. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js +2 -2
  86. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  87. package/dist/esm/pages/SendToWallet/SendToWalletPage.style.d.ts +8 -8
  88. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCard.style.d.ts +1 -1
  89. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.d.ts +1 -1
  90. package/dist/esm/pages/TransactionPage/TransactionPage.js +1 -1
  91. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  92. package/dist/esm/stores/form/FormUpdater.js +3 -1
  93. package/dist/esm/stores/form/FormUpdater.js.map +1 -1
  94. package/dist/esm/stores/form/URLSearchParamsBuilder.js +40 -5
  95. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  96. package/dist/esm/utils/eip7702.d.ts +22 -0
  97. package/dist/esm/utils/eip7702.js +23 -0
  98. package/dist/esm/utils/eip7702.js.map +1 -0
  99. package/package.json +7 -7
  100. package/src/components/Messages/AccountNotDeployedMessage.tsx +22 -0
  101. package/src/components/{GasMessage → Messages}/FundsSufficiencyMessage.tsx +4 -4
  102. package/src/components/{GasMessage → Messages}/GasRefuelMessage.tsx +2 -2
  103. package/src/components/{GasMessage → Messages}/GasSufficiencyMessage.tsx +1 -1
  104. package/src/components/Messages/MainMessages.tsx +40 -0
  105. package/src/components/Messages/ToAddressRequiredMessage.tsx +27 -0
  106. package/src/components/Messages/useMessageQueue.ts +63 -0
  107. package/src/config/version.ts +1 -1
  108. package/src/hooks/useGasRefuel.ts +1 -1
  109. package/src/hooks/useGasSufficiency.ts +1 -1
  110. package/src/hooks/useIsContractAddress.ts +1 -2
  111. package/src/hooks/useToAddressRequirements.ts +23 -5
  112. package/src/i18n/en.json +2 -1
  113. package/src/pages/MainPage/MainPage.tsx +2 -2
  114. package/src/pages/MainPage/ReviewButton.tsx +6 -2
  115. package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +1 -1
  116. package/src/pages/SendToWallet/ConfirmAddressSheet.tsx +2 -2
  117. package/src/pages/TransactionPage/TransactionPage.tsx +1 -1
  118. package/src/stores/form/FormUpdater.tsx +3 -2
  119. package/src/stores/form/URLSearchParamsBuilder.tsx +38 -4
  120. package/src/utils/eip7702.ts +23 -0
  121. package/dist/esm/components/AlertMessage/AlertMessage.js.map +0 -1
  122. package/dist/esm/components/AlertMessage/AlertMessage.style.js.map +0 -1
  123. package/dist/esm/components/AlertMessage/types.js.map +0 -1
  124. package/dist/esm/components/GasMessage/FundsSufficiencyMessage.d.ts +0 -1
  125. package/dist/esm/components/GasMessage/FundsSufficiencyMessage.js.map +0 -1
  126. package/dist/esm/components/GasMessage/GasMessage.js.map +0 -1
  127. package/dist/esm/components/GasMessage/GasMessage.style.js.map +0 -1
  128. package/dist/esm/components/GasMessage/GasRefuelMessage.js.map +0 -1
  129. package/dist/esm/components/GasMessage/GasSufficiencyMessage.js.map +0 -1
  130. package/dist/esm/components/ToAddressRequiredMessage.d.ts +0 -7
  131. package/dist/esm/components/ToAddressRequiredMessage.js +0 -18
  132. package/dist/esm/components/ToAddressRequiredMessage.js.map +0 -1
  133. package/dist/esm/pages/MainPage/MainMessages.js +0 -10
  134. package/dist/esm/pages/MainPage/MainMessages.js.map +0 -1
  135. package/src/components/ToAddressRequiredMessage.tsx +0 -44
  136. package/src/pages/MainPage/MainMessages.tsx +0 -17
  137. /package/dist/esm/components/{AlertMessage → Messages}/AlertMessage.d.ts +0 -0
  138. /package/dist/esm/components/{AlertMessage → Messages}/AlertMessage.js +0 -0
  139. /package/dist/esm/components/{AlertMessage → Messages}/AlertMessage.style.d.ts +0 -0
  140. /package/dist/esm/components/{AlertMessage → Messages}/AlertMessage.style.js +0 -0
  141. /package/dist/esm/components/{GasMessage → Messages}/GasMessage.d.ts +0 -0
  142. /package/dist/esm/components/{GasMessage → Messages}/GasMessage.js +0 -0
  143. /package/dist/esm/components/{GasMessage → Messages}/GasRefuelMessage.d.ts +0 -0
  144. /package/dist/esm/components/{GasMessage/GasMessage.style.d.ts → Messages/GasRefuelMessage.style.d.ts} +0 -0
  145. /package/dist/esm/components/{GasMessage → Messages}/GasSufficiencyMessage.d.ts +0 -0
  146. /package/dist/esm/{pages/MainPage → components/Messages}/MainMessages.d.ts +0 -0
  147. /package/dist/esm/components/{AlertMessage → Messages}/types.d.ts +0 -0
  148. /package/dist/esm/components/{AlertMessage → Messages}/types.js +0 -0
  149. /package/src/components/{AlertMessage → Messages}/AlertMessage.style.tsx +0 -0
  150. /package/src/components/{AlertMessage → Messages}/AlertMessage.tsx +0 -0
  151. /package/src/components/{GasMessage → Messages}/GasMessage.tsx +0 -0
  152. /package/src/components/{GasMessage/GasMessage.style.ts → Messages/GasRefuelMessage.style.ts} +0 -0
  153. /package/src/components/{AlertMessage → Messages}/types.ts +0 -0
@@ -3,7 +3,7 @@ import { Typography } from '@mui/material'
3
3
  import { useTranslation } from 'react-i18next'
4
4
  import { formatUnits } from 'viem'
5
5
  import type { GasSufficiency } from '../../hooks/useGasSufficiency.js'
6
- import { AlertMessage } from '../AlertMessage/AlertMessage.js'
6
+ import { AlertMessage } from './AlertMessage.js'
7
7
 
8
8
  interface GasSufficiencyMessageProps {
9
9
  insufficientGas?: GasSufficiency[]
@@ -0,0 +1,40 @@
1
+ import type { BoxProps } from '@mui/material'
2
+ import { Collapse } from '@mui/material'
3
+ import { useRoutes } from '../../hooks/useRoutes.js'
4
+ import { AccountNotDeployedMessage } from './AccountNotDeployedMessage.js'
5
+ import { FundsSufficiencyMessage } from './FundsSufficiencyMessage.js'
6
+ import { GasSufficiencyMessage } from './GasSufficiencyMessage.js'
7
+ import { ToAddressRequiredMessage } from './ToAddressRequiredMessage.js'
8
+ import { useMessageQueue } from './useMessageQueue.js'
9
+
10
+ export const MainMessages: React.FC<BoxProps> = (props) => {
11
+ const { routes } = useRoutes()
12
+ const currentRoute = routes?.[0]
13
+ const { currentMessage, hasMessages } = useMessageQueue(currentRoute)
14
+
15
+ const getMessage = () => {
16
+ switch (currentMessage?.id) {
17
+ case 'INSUFFICIENT_FUNDS':
18
+ return <FundsSufficiencyMessage {...props} />
19
+ case 'INSUFFICIENT_GAS':
20
+ return (
21
+ <GasSufficiencyMessage
22
+ insufficientGas={currentMessage.props?.insufficientGas}
23
+ {...props}
24
+ />
25
+ )
26
+ case 'ACCOUNT_NOT_DEPLOYED':
27
+ return <AccountNotDeployedMessage {...props} />
28
+ case 'TO_ADDRESS_REQUIRED':
29
+ return <ToAddressRequiredMessage {...props} />
30
+ default:
31
+ return null
32
+ }
33
+ }
34
+
35
+ return (
36
+ <Collapse in={hasMessages} timeout={225} unmountOnExit mountOnEnter>
37
+ {getMessage()}
38
+ </Collapse>
39
+ )
40
+ }
@@ -0,0 +1,27 @@
1
+ import { Wallet } from '@mui/icons-material'
2
+ import type { BoxProps } from '@mui/material'
3
+ import { Typography } from '@mui/material'
4
+ import { useTranslation } from 'react-i18next'
5
+ import { AlertMessage } from './AlertMessage.js'
6
+
7
+ export const ToAddressRequiredMessage: React.FC<BoxProps> = ({ ...props }) => {
8
+ const { t } = useTranslation()
9
+ return (
10
+ <AlertMessage
11
+ title={
12
+ <Typography
13
+ variant="body2"
14
+ sx={{
15
+ px: 1,
16
+ color: 'text.primary',
17
+ }}
18
+ >
19
+ {t('info.message.toAddressIsRequired')}
20
+ </Typography>
21
+ }
22
+ icon={<Wallet />}
23
+ multiline
24
+ {...props}
25
+ />
26
+ )
27
+ }
@@ -0,0 +1,63 @@
1
+ import type { Route } from '@lifi/sdk'
2
+ import { useMemo } from 'react'
3
+ import { useFromTokenSufficiency } from '../../hooks/useFromTokenSufficiency.js'
4
+ import { useGasSufficiency } from '../../hooks/useGasSufficiency.js'
5
+ import { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'
6
+
7
+ interface QueuedMessage {
8
+ id: string
9
+ priority: number
10
+ props?: Record<string, any>
11
+ }
12
+
13
+ export const useMessageQueue = (route?: Route) => {
14
+ const { requiredToAddress, accountNotDeployedAtDestination } =
15
+ useToAddressRequirements()
16
+ const { insufficientFromToken } = useFromTokenSufficiency(route)
17
+ const { insufficientGas } = useGasSufficiency(route)
18
+
19
+ const messageQueue = useMemo(() => {
20
+ const queue: QueuedMessage[] = []
21
+
22
+ if (insufficientFromToken) {
23
+ queue.push({
24
+ id: 'INSUFFICIENT_FUNDS',
25
+ priority: 1,
26
+ })
27
+ }
28
+
29
+ if (insufficientGas?.length) {
30
+ queue.push({
31
+ id: 'INSUFFICIENT_GAS',
32
+ priority: 2,
33
+ props: { insufficientGas },
34
+ })
35
+ }
36
+
37
+ if (accountNotDeployedAtDestination) {
38
+ queue.push({
39
+ id: 'ACCOUNT_NOT_DEPLOYED',
40
+ priority: 3,
41
+ })
42
+ }
43
+
44
+ if (requiredToAddress) {
45
+ queue.push({
46
+ id: 'TO_ADDRESS_REQUIRED',
47
+ priority: 4,
48
+ })
49
+ }
50
+
51
+ return queue.sort((a, b) => a.priority - b.priority)
52
+ }, [
53
+ insufficientFromToken,
54
+ insufficientGas,
55
+ accountNotDeployedAtDestination,
56
+ requiredToAddress,
57
+ ])
58
+
59
+ return {
60
+ currentMessage: messageQueue[0],
61
+ hasMessages: messageQueue.length > 0,
62
+ }
63
+ }
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/widget'
2
- export const version = '3.14.1'
2
+ export const version = '3.15.0'
@@ -23,7 +23,7 @@ export const useGasRefuel = () => {
23
23
 
24
24
  const effectiveToAddress = toAddress || toAccount?.address
25
25
 
26
- const isToContractAddress = useIsContractAddress(
26
+ const { isContractAddress: isToContractAddress } = useIsContractAddress(
27
27
  effectiveToAddress,
28
28
  toChainId,
29
29
  toChain?.chainType
@@ -22,7 +22,7 @@ export const useGasSufficiency = (route?: RouteExtended) => {
22
22
  chainType: getChainById(route?.fromChainId)?.chainType,
23
23
  })
24
24
 
25
- const isContractAddress = useIsContractAddress(
25
+ const { isContractAddress } = useIsContractAddress(
26
26
  account.address,
27
27
  route?.fromChainId,
28
28
  account.chainType
@@ -17,6 +17,5 @@ export const useIsContractAddress = (
17
17
  },
18
18
  })
19
19
 
20
- const isContractAddress = !!contractCode
21
- return isContractAddress
20
+ return { isContractAddress: !!contractCode, contractCode }
22
21
  }
@@ -3,20 +3,29 @@ import { useChain } from '../hooks/useChain.js'
3
3
  import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
4
4
  import { useFieldValues } from '../stores/form/useFieldValues.js'
5
5
  import { RequiredUI } from '../types/widget.js'
6
+ import { isDelegationDesignatorCode } from '../utils/eip7702.js'
6
7
  import { useIsContractAddress } from './useIsContractAddress.js'
7
8
 
8
9
  export const useToAddressRequirements = () => {
9
10
  const { requiredUI } = useWidgetConfig()
10
- const [fromChainId, toChainId] = useFieldValues('fromChain', 'toChain')
11
+ const [fromChainId, toChainId, toAddress] = useFieldValues(
12
+ 'fromChain',
13
+ 'toChain',
14
+ 'toAddress'
15
+ )
11
16
  const { chain: fromChain } = useChain(fromChainId)
12
17
  const { chain: toChain } = useChain(toChainId)
13
18
  const { account } = useAccount({
14
19
  chainType: fromChain?.chainType,
15
20
  })
16
- const isFromContractAddress = useIsContractAddress(
17
- account.address,
18
- fromChainId,
19
- account.chainType
21
+ const {
22
+ isContractAddress: isFromContractAddress,
23
+ contractCode: fromContractCode,
24
+ } = useIsContractAddress(account.address, fromChainId, account.chainType)
25
+ const { isContractAddress: isToContractAddress } = useIsContractAddress(
26
+ toAddress,
27
+ toChainId,
28
+ toChain?.chainType
20
29
  )
21
30
 
22
31
  const isDifferentChainType =
@@ -25,6 +34,14 @@ export const useToAddressRequirements = () => {
25
34
  const isCrossChainContractAddress =
26
35
  isFromContractAddress && fromChainId !== toChainId
27
36
 
37
+ const accountNotDeployedAtDestination =
38
+ isFromContractAddress &&
39
+ // We don't want to block transfers for EIP-7702 accounts since they are designed
40
+ // to maintain EOA-like properties while delegating execution.
41
+ !isDelegationDesignatorCode(fromContractCode) &&
42
+ !isToContractAddress &&
43
+ account.address?.toLowerCase() === toAddress?.toLowerCase()
44
+
28
45
  const requiredToAddress =
29
46
  requiredUI?.includes(RequiredUI.ToAddress) ||
30
47
  isDifferentChainType ||
@@ -33,5 +50,6 @@ export const useToAddressRequirements = () => {
33
50
  return {
34
51
  requiredToAddress,
35
52
  requiredToChainType: toChain?.chainType,
53
+ accountNotDeployedAtDestination,
36
54
  }
37
55
  }
package/src/i18n/en.json CHANGED
@@ -126,7 +126,8 @@
126
126
  "insufficientGas": "You don't have enough gas to complete the transaction. You need to add at least:",
127
127
  "rateChanged": "The exchange rate has changed. By continuing the transaction, you'll accept the new rate.",
128
128
  "resetSettings": "This will reset your route priority, slippage, gas price, enabled bridges and exchanges.",
129
- "slippageOutsideRecommendedLimits": "High slippage tolerance may result in unfavorable trade caused by front-running."
129
+ "slippageOutsideRecommendedLimits": "High slippage tolerance may result in unfavorable trade caused by front-running.",
130
+ "accountNotDeployedMessage": "Smart contract account is not deployed on the destination chain. Sending funds to a non-existent contract would result in permanent loss."
130
131
  },
131
132
  "title": {
132
133
  "deleteActiveTransactions": "Delete all active transactions?",
@@ -3,7 +3,8 @@ import { useTranslation } from 'react-i18next'
3
3
  import { ActiveTransactions } from '../../components/ActiveTransactions/ActiveTransactions.js'
4
4
  import { AmountInput } from '../../components/AmountInput/AmountInput.js'
5
5
  import { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'
6
- import { GasRefuelMessage } from '../../components/GasMessage/GasRefuelMessage.js'
6
+ import { GasRefuelMessage } from '../../components/Messages/GasRefuelMessage.js'
7
+ import { MainMessages } from '../../components/Messages/MainMessages.js'
7
8
  import { PageContainer } from '../../components/PageContainer.js'
8
9
  import { PoweredBy } from '../../components/PoweredBy/PoweredBy.js'
9
10
  import { Routes } from '../../components/Routes/Routes.js'
@@ -14,7 +15,6 @@ import { useHeader } from '../../hooks/useHeader.js'
14
15
  import { useWideVariant } from '../../hooks/useWideVariant.js'
15
16
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
16
17
  import { HiddenUI } from '../../types/widget.js'
17
- import { MainMessages } from './MainMessages.js'
18
18
  import { ReviewButton } from './ReviewButton.js'
19
19
 
20
20
  export const MainPage: React.FC = () => {
@@ -17,7 +17,8 @@ export const ReviewButton: React.FC = () => {
17
17
  const { subvariant, subvariantOptions } = useWidgetConfig()
18
18
  const splitState = useSplitSubvariantStore((state) => state.state)
19
19
  const [toAddress] = useFieldValues('toAddress')
20
- const { requiredToAddress } = useToAddressRequirements()
20
+ const { requiredToAddress, accountNotDeployedAtDestination } =
21
+ useToAddressRequirements()
21
22
  const { routes, setReviewableRoute } = useRoutes()
22
23
 
23
24
  const currentRoute = routes?.[0]
@@ -72,7 +73,10 @@ export const ReviewButton: React.FC = () => {
72
73
  <BaseTransactionButton
73
74
  text={getButtonText()}
74
75
  onClick={handleClick}
75
- disabled={currentRoute && requiredToAddress && !toAddress}
76
+ disabled={
77
+ (currentRoute && requiredToAddress && !toAddress) ||
78
+ accountNotDeployedAtDestination
79
+ }
76
80
  />
77
81
  )
78
82
  }
@@ -3,10 +3,10 @@ import { Button, Typography } from '@mui/material'
3
3
  import type { ChangeEvent, MutableRefObject } from 'react'
4
4
  import { forwardRef, useState } from 'react'
5
5
  import { useTranslation } from 'react-i18next'
6
- import { AlertMessage } from '../../components/AlertMessage/AlertMessage.js'
7
6
  import { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'
8
7
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
9
8
  import { Input } from '../../components/Input.js'
9
+ import { AlertMessage } from '../../components/Messages/AlertMessage.js'
10
10
  import { useAddressValidation } from '../../hooks/useAddressValidation.js'
11
11
  import type { Bookmark } from '../../stores/bookmarks/types.js'
12
12
  import { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'
@@ -3,9 +3,9 @@ import { Box, Button, Typography } from '@mui/material'
3
3
  import type { MutableRefObject } from 'react'
4
4
  import { forwardRef, useRef } from 'react'
5
5
  import { useTranslation } from 'react-i18next'
6
- import { AlertMessage } from '../../components/AlertMessage/AlertMessage.js'
7
6
  import { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'
8
7
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
8
+ import { AlertMessage } from '../../components/Messages/AlertMessage.js'
9
9
  import { useIsContractAddress } from '../../hooks/useIsContractAddress.js'
10
10
  import { useNavigateBack } from '../../hooks/useNavigateBack.js'
11
11
  import { useSetContentHeight } from '../../hooks/useSetContentHeight.js'
@@ -55,7 +55,7 @@ const ConfirmAddressSheetContent: React.FC<ConfirmAddressSheetContentProps> = ({
55
55
  const { navigateBack } = useNavigateBack()
56
56
  const { setFieldValue } = useFieldActions()
57
57
  const { setSendToWallet } = useSendToWalletActions()
58
- const isContractAddress = useIsContractAddress(
58
+ const { isContractAddress } = useIsContractAddress(
59
59
  validatedBookmark?.address,
60
60
  chainId,
61
61
  validatedBookmark?.chainType
@@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next'
6
6
  import { useLocation } from 'react-router-dom'
7
7
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
8
8
  import { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'
9
- import { GasMessage } from '../../components/GasMessage/GasMessage.js'
9
+ import { GasMessage } from '../../components/Messages/GasMessage.js'
10
10
  import { PageContainer } from '../../components/PageContainer.js'
11
11
  import { getStepList } from '../../components/Step/StepList.js'
12
12
  import { TransactionDetails } from '../../components/TransactionDetails.js'
@@ -56,8 +56,9 @@ export const FormUpdater: React.FC<{
56
56
  if (reactiveFormValues.toAddress) {
57
57
  setSendToWallet(true)
58
58
  }
59
-
60
- setSelectedBookmark(toAddress)
59
+ if (toAddress) {
60
+ setSelectedBookmark(toAddress)
61
+ }
61
62
 
62
63
  setUserAndDefaultValues(
63
64
  accountForChainId(reactiveFormValues, account.chainId)
@@ -1,7 +1,9 @@
1
1
  import { useEffect } from 'react'
2
2
  import { useLocation } from 'react-router-dom'
3
+ import { useAddressValidation } from '../../hooks/useAddressValidation.js'
3
4
  import { useSendToWalletActions } from '../../stores/settings/useSendToWalletStore.js'
4
5
  import { formatInputAmount } from '../../utils/format.js'
6
+ import { useBookmarkActions } from '../bookmarks/useBookmarkActions.js'
5
7
  import type { DefaultValues, FormFieldNames } from '../form/types.js'
6
8
  import { useFieldActions } from '../form/useFieldActions.js'
7
9
  import { useFieldValues } from '../form/useFieldValues.js'
@@ -49,6 +51,8 @@ export const URLSearchParamsBuilder = () => {
49
51
  const touchedFields = useTouchedFields()
50
52
  const values = useFieldValues(...formValueKeys)
51
53
  const { setSendToWallet } = useSendToWalletActions()
54
+ const { setSelectedBookmark, addRecentWallet } = useBookmarkActions()
55
+ const { validateAddress } = useAddressValidation()
52
56
 
53
57
  // Using these methods as trying to use the touchedFields and values above
54
58
  // often has a lag that can effect the widgets initialisation sequence
@@ -57,15 +61,45 @@ export const URLSearchParamsBuilder = () => {
57
61
  useFieldActions()
58
62
 
59
63
  useEffect(() => {
60
- // get the initial values from the querysting
64
+ // get the initial values from the querystring
61
65
  const formValues = getDefaultValuesFromQueryString()
62
66
 
63
- if (formValues.toAddress) {
64
- setSendToWallet(true)
67
+ /**
68
+ * When URL builder is enabled and user opens a page with toAddress parameter,
69
+ * validate the address and set it up as a bookmark. This allows direct linking
70
+ * to the widget with a pre-filled destination address that will be treated the
71
+ * same way as a manually entered and validated address.
72
+ */
73
+ const initializeFromAddress = async () => {
74
+ if (formValues.toAddress) {
75
+ try {
76
+ const validationResult = await validateAddress({
77
+ value: formValues.toAddress,
78
+ })
79
+ if (validationResult.isValid) {
80
+ const bookmark = {
81
+ address: validationResult.address,
82
+ chainType: validationResult.chainType,
83
+ }
84
+ setSelectedBookmark(bookmark)
85
+ addRecentWallet(bookmark)
86
+ setSendToWallet(true)
87
+ }
88
+ } catch (_) {
89
+ // Address validation failed
90
+ }
91
+ }
65
92
  }
66
93
 
94
+ initializeFromAddress()
67
95
  setUserAndDefaultValues(formValues)
68
- }, [setUserAndDefaultValues, setSendToWallet])
96
+ }, [
97
+ setUserAndDefaultValues,
98
+ setSendToWallet,
99
+ validateAddress,
100
+ setSelectedBookmark,
101
+ addRecentWallet,
102
+ ])
69
103
 
70
104
  // biome-ignore lint/correctness/useExhaustiveDependencies:
71
105
  useEffect(() => {
@@ -0,0 +1,23 @@
1
+ /**
2
+ * EIP-7702 introduces delegation designators that allow EOAs to delegate execution to other contracts.
3
+ * A delegation designator starts with 0xef0100 followed by the target contract address.
4
+ *
5
+ * When an EOA has this code, it means:
6
+ * - The EOA can still send transactions (unlike other contract accounts)
7
+ * - All contract calls are delegated to the target address
8
+ * - The code itself remains as the delegation designator (0xef0100 || address)
9
+ *
10
+ * Delegation Designator Structure:
11
+ *
12
+ * ─────┬───┬──┬───────────────────────────────────────┐
13
+ * │ │ │ │
14
+ * 0x ef 0100 a94f5374fce5edbc8e2a8697c15331677e6ebf0b
15
+ * │ │ └───────────────────────────────────────┘
16
+ * │ │ Target Address
17
+ * │ └── 7702
18
+ * └── 3541
19
+ *
20
+ * @see https://eips.ethereum.org/EIPS/eip-7702
21
+ */
22
+ export const isDelegationDesignatorCode = (code?: string) =>
23
+ code?.startsWith('0xef0100')
@@ -1 +0,0 @@
1
- {"version":3,"file":"AlertMessage.js","sourceRoot":"","sources":["../../../../src/components/AlertMessage/AlertMessage.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,yBAAyB,CAAA;AAUhC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,MAAM,EACjB,GAAG,IAAI,EACW,EAAE,EAAE,CAAC,CACvB,MAAC,gBAAgB,IAAC,QAAQ,EAAE,QAAQ,KAAM,IAAI,aAC5C,MAAC,qBAAqB,IACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,aAEzC,IAAI,EACJ,KAAK,IACgB,EACvB,QAAQ,IACQ,CACpB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AlertMessage.style.js","sourceRoot":"","sources":["../../../../src/components/AlertMessage/AlertMessage.style.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAA;AAO9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,EAAE;IAC1C,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU;CACjD,CAAC,CAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;IACtC,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,MAAM;IACb,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,eAAe,EAAE,sBAAsB,CAAC,KAAK,CAAC;IAC9C,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,QAAQ,EAAE,SAAS;aACpB;YACD,KAAK,EAAE;gBACL,eAAe,EAAE,yBAAyB,CAAC,KAAK,CAAC;aAClD;SACF;KACF;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,EAAE;IAC/C,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU;CACjD,CAAC,CAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7C,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,QAAQ,EAAE,SAAS;aACpB;YACD,KAAK,EAAE;gBACL,KAAK,EACH,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;oBAC5B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;oBAC1C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;aAC3C;SACF;KACF;IACD,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;KAC/B,CAAC;CACH,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/AlertMessage/types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- export declare const FundsSufficiencyMessage: () => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- {"version":3,"file":"FundsSufficiencyMessage.js","sourceRoot":"","sources":["../../../../src/components/GasMessage/FundsSufficiencyMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9B,OAAO,CACL,KAAC,YAAY,IACX,QAAQ,EAAC,SAAS,EAClB,IAAI,EAAE,KAAC,cAAc,KAAG,EACxB,KAAK,EACH,KAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;gBACF,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE,cAAc;aACtB,YAEA,CAAC,CAAC,mCAAmC,CAAC,GAC5B,EAEf,SAAS,SACT,CACH,CAAA;AACH,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GasMessage.js","sourceRoot":"","sources":["../../../../src/components/GasMessage/GasMessage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAMlE,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC3E,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,EAAE,qBAAqB,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;IAEhE,MAAM,oBAAoB,GAAG,eAAe,EAAE,MAAM,CAAA;IAEpD,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,EACZ,EAAE,EAAE,OAAO,CAAC,qBAAqB,IAAI,oBAAoB,CAAC,EAC1D,aAAa,QACb,YAAY,kBAEZ,KAAC,GAAG,OAAK,KAAK,YACX,qBAAqB,CAAC,CAAC,CAAC,CACvB,KAAC,uBAAuB,KAAG,CAC5B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACzB,KAAC,qBAAqB,IAAC,eAAe,EAAE,eAAe,GAAI,CAC5D,CAAC,CAAC,CAAC,IAAI,GACJ,GACG,CACZ,CAAA;AACH,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GasMessage.style.js","sourceRoot":"","sources":["../../../../src/components/GasMessage/GasMessage.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,EAAE;QAChC,CAAC,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE;YAC9B,CAAC,QAAQ,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE;gBAC/B,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;gBACrD,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;oBAC5B,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;iBACzC,CAAC;aACH;SACF;QACD,CAAC,uBAAuB,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE;YAC9C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;YAC3C,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;aAC/B,CAAC;SACH;KACF;CACF,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GasRefuelMessage.js","sourceRoot":"","sources":["../../../../src/components/GasMessage/GasRefuelMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAuB,CAAC,KAAK,EAAE,EAAE;IAC5D,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAA;IAE9B,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACzC,MAAM,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEhE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAAA;IAErE,MAAM,QAAQ,GAAG,CAAC,CAAgC,EAAE,OAAgB,EAAE,EAAE;QACtE,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,KAAK,IAAI,OAAO,IAAI,CAAC,eAAe,CAAA;IAEjE,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,EACZ,EAAE,EAAE,oBAAoB,EACxB,aAAa,QACb,YAAY,kBAEZ,KAAC,YAAY,IACX,IAAI,EAAE,KAAC,SAAS,KAAG,EACnB,KAAK,EACH,MAAC,GAAG,IACF,EAAE,EAAE;oBACF,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,eAAe;oBAC/B,QAAQ,EAAE,CAAC;iBACZ,aAED,KAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;4BACF,UAAU,EAAE,GAAG;yBAChB,YAEA,CAAC,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,GAClD,EACb,KAAC,iBAAiB,IAChB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,QAAQ,GAClB,IACE,KAEJ,KAAK,YAET,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,EACZ,EAAE,EAAE,iBAAiB,EACrB,aAAa,QACb,YAAY,kBAEZ,KAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;wBACF,EAAE,EAAE,CAAC;wBACL,EAAE,EAAE,CAAC;qBACN,YAEA,CAAC,CAAC,yBAAyB,EAAE;wBAC5B,SAAS,EAAE,KAAK,EAAE,IAAI;qBACvB,CAAC,GACS,GACJ,GACE,GACN,CACZ,CAAA;AACH,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GasSufficiencyMessage.js","sourceRoot":"","sources":["../../../../src/components/GasMessage/GasSufficiencyMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAM9D,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,eAAe,GAChB,EAAE,EAAE;IACH,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9B,OAAO,CACL,MAAC,YAAY,IACX,QAAQ,EAAC,SAAS,EAClB,IAAI,EAAE,KAAC,SAAS,KAAG,EACnB,KAAK,EACH,KAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;gBACF,UAAU,EAAE,GAAG;aAChB,YAEA,CAAC,CAAC,+BAA+B,CAAC,GACxB,aAGf,KAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;oBACF,EAAE,EAAE,CAAC;oBACL,EAAE,EAAE,CAAC;iBACN,YAEA,CAAC,CAAC,iCAAiC,CAAC,GAC1B,EACZ,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACrC,KAAC,UAAU,IAET,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;oBACF,EAAE,EAAE,CAAC;oBACL,EAAE,EAAE,GAAG;iBACR,YAEA,CAAC,CAAC,yBAAyB,EAAE;oBAC5B,MAAM,EAAE,WAAW,CACjB,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CACpB;oBACD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;oBAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI;iBAC5B,CAAC,IAdG,KAAK,CAeC,CACd,CAAC,IACW,CAChB,CAAA;AACH,CAAC,CAAA"}
@@ -1,7 +0,0 @@
1
- import type { Route } from '@lifi/sdk';
2
- import type { BoxProps } from '@mui/material';
3
- interface ToAddressRequiredMessageProps extends BoxProps {
4
- route?: Route;
5
- }
6
- export declare const ToAddressRequiredMessage: React.FC<ToAddressRequiredMessageProps>;
7
- export {};
@@ -1,18 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Wallet } from '@mui/icons-material';
3
- import { Box, Collapse, Typography } from '@mui/material';
4
- import { useTranslation } from 'react-i18next';
5
- import { useToAddressRequirements } from '../hooks/useToAddressRequirements.js';
6
- import { useFieldValues } from '../stores/form/useFieldValues.js';
7
- import { AlertMessage } from './AlertMessage/AlertMessage.js';
8
- export const ToAddressRequiredMessage = ({ route, ...props }) => {
9
- const { t } = useTranslation();
10
- const [toAddress] = useFieldValues('toAddress');
11
- const { requiredToAddress } = useToAddressRequirements();
12
- const showMessage = route && requiredToAddress && !toAddress;
13
- return (_jsx(Collapse, { timeout: 225, in: showMessage, unmountOnExit: true, mountOnEnter: true, children: _jsx(Box, { ...props, children: _jsx(AlertMessage, { title: _jsx(Typography, { variant: "body2", sx: {
14
- px: 1,
15
- color: 'text.primary',
16
- }, children: t('info.message.toAddressIsRequired') }), icon: _jsx(Wallet, {}), multiline: true }) }) }));
17
- };
18
- //# sourceMappingURL=ToAddressRequiredMessage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToAddressRequiredMessage.js","sourceRoot":"","sources":["../../../src/components/ToAddressRequiredMessage.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAM7D,MAAM,CAAC,MAAM,wBAAwB,GAEjC,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC1B,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IAC/C,MAAM,EAAE,iBAAiB,EAAE,GAAG,wBAAwB,EAAE,CAAA;IAExD,MAAM,WAAW,GAAG,KAAK,IAAI,iBAAiB,IAAI,CAAC,SAAS,CAAA;IAE5D,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,QAAC,YAAY,kBACjE,KAAC,GAAG,OAAK,KAAK,YACZ,KAAC,YAAY,IACX,KAAK,EACH,KAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,EAAE,EAAE;wBACF,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE,cAAc;qBACtB,YAEA,CAAC,CAAC,kCAAkC,CAAC,GAC3B,EAEf,IAAI,EAAE,KAAC,MAAM,KAAG,EAChB,SAAS,SACT,GACE,GACG,CACZ,CAAA;AACH,CAAC,CAAA"}
@@ -1,10 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { GasMessage } from '../../components/GasMessage/GasMessage.js';
3
- import { ToAddressRequiredMessage } from '../../components/ToAddressRequiredMessage.js';
4
- import { useRoutes } from '../../hooks/useRoutes.js';
5
- export const MainMessages = (props) => {
6
- const { routes } = useRoutes();
7
- const currentRoute = routes?.[0];
8
- return (_jsxs(_Fragment, { children: [_jsx(ToAddressRequiredMessage, { route: currentRoute, ...props }), _jsx(GasMessage, { route: currentRoute, ...props })] }));
9
- };
10
- //# sourceMappingURL=MainMessages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MainMessages.js","sourceRoot":"","sources":["../../../../src/pages/MainPage/MainMessages.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,MAAM,CAAC,MAAM,YAAY,GAAuB,CAAC,KAAK,EAAE,EAAE;IACxD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAA;IAE9B,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAEhC,OAAO,CACL,8BACE,KAAC,wBAAwB,IAAC,KAAK,EAAE,YAAY,KAAM,KAAK,GAAI,EAC5D,KAAC,UAAU,IAAC,KAAK,EAAE,YAAY,KAAM,KAAK,GAAI,IAC7C,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -1,44 +0,0 @@
1
- import type { Route } from '@lifi/sdk'
2
- import { Wallet } from '@mui/icons-material'
3
- import type { BoxProps } from '@mui/material'
4
- import { Box, Collapse, Typography } from '@mui/material'
5
- import { useTranslation } from 'react-i18next'
6
- import { useToAddressRequirements } from '../hooks/useToAddressRequirements.js'
7
- import { useFieldValues } from '../stores/form/useFieldValues.js'
8
- import { AlertMessage } from './AlertMessage/AlertMessage.js'
9
-
10
- interface ToAddressRequiredMessageProps extends BoxProps {
11
- route?: Route
12
- }
13
-
14
- export const ToAddressRequiredMessage: React.FC<
15
- ToAddressRequiredMessageProps
16
- > = ({ route, ...props }) => {
17
- const { t } = useTranslation()
18
- const [toAddress] = useFieldValues('toAddress')
19
- const { requiredToAddress } = useToAddressRequirements()
20
-
21
- const showMessage = route && requiredToAddress && !toAddress
22
-
23
- return (
24
- <Collapse timeout={225} in={showMessage} unmountOnExit mountOnEnter>
25
- <Box {...props}>
26
- <AlertMessage
27
- title={
28
- <Typography
29
- variant="body2"
30
- sx={{
31
- px: 1,
32
- color: 'text.primary',
33
- }}
34
- >
35
- {t('info.message.toAddressIsRequired')}
36
- </Typography>
37
- }
38
- icon={<Wallet />}
39
- multiline
40
- />
41
- </Box>
42
- </Collapse>
43
- )
44
- }
@@ -1,17 +0,0 @@
1
- import type { BoxProps } from '@mui/material'
2
- import { GasMessage } from '../../components/GasMessage/GasMessage.js'
3
- import { ToAddressRequiredMessage } from '../../components/ToAddressRequiredMessage.js'
4
- import { useRoutes } from '../../hooks/useRoutes.js'
5
-
6
- export const MainMessages: React.FC<BoxProps> = (props) => {
7
- const { routes } = useRoutes()
8
-
9
- const currentRoute = routes?.[0]
10
-
11
- return (
12
- <>
13
- <ToAddressRequiredMessage route={currentRoute} {...props} />
14
- <GasMessage route={currentRoute} {...props} />
15
- </>
16
- )
17
- }