@lifi/widget 3.21.4-alpha.0 → 3.22.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 (132) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/esm/AppProvider.js +2 -3
  3. package/dist/esm/AppProvider.js.map +1 -1
  4. package/dist/esm/components/AppContainer.js +23 -22
  5. package/dist/esm/components/AppContainer.js.map +1 -1
  6. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js +12 -7
  7. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
  8. package/dist/esm/components/BaseTransactionButton/types.d.ts +2 -0
  9. package/dist/esm/components/ChainSelect/ChainSelect.js +3 -1
  10. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  11. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts +3 -1
  12. package/dist/esm/components/ChainSelect/ChainSelect.style.js +23 -9
  13. package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
  14. package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.d.ts +8 -0
  15. package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js +20 -0
  16. package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js.map +1 -0
  17. package/dist/esm/components/Messages/WarningMessages.js +3 -0
  18. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  19. package/dist/esm/components/Messages/useMessageQueue.js +15 -4
  20. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
  21. package/dist/esm/components/RouteCard/RouteCard.js +3 -3
  22. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  23. package/dist/esm/components/TokenList/TokenListItem.js +2 -2
  24. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  25. package/dist/esm/config/version.d.ts +1 -1
  26. package/dist/esm/config/version.js +1 -1
  27. package/dist/esm/config/version.js.map +1 -1
  28. package/dist/esm/hooks/useAvailableChains.js +3 -2
  29. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  30. package/dist/esm/hooks/useExplorer.d.ts +0 -1
  31. package/dist/esm/hooks/useExplorer.js +26 -31
  32. package/dist/esm/hooks/useExplorer.js.map +1 -1
  33. package/dist/esm/hooks/useFromTokenSufficiency.js +4 -1
  34. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  35. package/dist/esm/hooks/useGasRecommendation.js +9 -1
  36. package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
  37. package/dist/esm/hooks/useGasSufficiency.js +50 -16
  38. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  39. package/dist/esm/hooks/useIsBatchingSupported.js +8 -1
  40. package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -1
  41. package/dist/esm/hooks/useIsContractAddress.js +1 -1
  42. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  43. package/dist/esm/hooks/useRouteExecution.js +10 -4
  44. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  45. package/dist/esm/hooks/useRouteRequiredAccountConnection.d.ts +10 -0
  46. package/dist/esm/hooks/useRouteRequiredAccountConnection.js +45 -0
  47. package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -0
  48. package/dist/esm/hooks/useRoutes.d.ts +1 -1
  49. package/dist/esm/hooks/useRoutes.js +13 -4
  50. package/dist/esm/hooks/useRoutes.js.map +1 -1
  51. package/dist/esm/hooks/useTokenBalance.js +12 -3
  52. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  53. package/dist/esm/hooks/useTokenBalances.js +4 -1
  54. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  55. package/dist/esm/hooks/useTokenSearch.js +5 -2
  56. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  57. package/dist/esm/hooks/useTokens.js +3 -2
  58. package/dist/esm/hooks/useTokens.js.map +1 -1
  59. package/dist/esm/hooks/useTools.js +3 -2
  60. package/dist/esm/hooks/useTools.js.map +1 -1
  61. package/dist/esm/hooks/useTransactionDetails.js +9 -4
  62. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  63. package/dist/esm/hooks/useTransactionHistory.js +7 -1
  64. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  65. package/dist/esm/i18n/en.json +6 -4
  66. package/dist/esm/pages/MainPage/ReviewButton.js +1 -1
  67. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  68. package/dist/esm/pages/TransactionPage/StartTransactionButton.js +1 -1
  69. package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
  70. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +26 -43
  71. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  72. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.d.ts +0 -1
  73. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js +4 -11
  74. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
  75. package/dist/esm/providers/QueryClientProvider.d.ts +2 -0
  76. package/dist/esm/providers/QueryClientProvider.js +9 -0
  77. package/dist/esm/providers/QueryClientProvider.js.map +1 -0
  78. package/dist/esm/providers/WalletProvider/SuiBaseProvider.js +3 -8
  79. package/dist/esm/providers/WalletProvider/SuiBaseProvider.js.map +1 -1
  80. package/dist/esm/stores/form/FormStore.js +5 -12
  81. package/dist/esm/stores/form/FormStore.js.map +1 -1
  82. package/dist/esm/stores/form/useFormRef.js +1 -7
  83. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  84. package/dist/esm/types/widget.d.ts +6 -1
  85. package/dist/esm/utils/queries.d.ts +1 -0
  86. package/dist/esm/utils/queries.js +2 -0
  87. package/dist/esm/utils/queries.js.map +1 -0
  88. package/dist/esm/utils/timer.js +8 -1
  89. package/dist/esm/utils/timer.js.map +1 -1
  90. package/package.json +11 -11
  91. package/package.json.tmp +10 -10
  92. package/src/AppProvider.tsx +2 -3
  93. package/src/components/AppContainer.tsx +24 -23
  94. package/src/components/BaseTransactionButton/BaseTransactionButton.tsx +15 -6
  95. package/src/components/BaseTransactionButton/types.ts +3 -0
  96. package/src/components/ChainSelect/ChainSelect.style.tsx +25 -9
  97. package/src/components/ChainSelect/ChainSelect.tsx +4 -1
  98. package/src/components/Messages/MissingRouteRequiredAccountMessage.tsx +44 -0
  99. package/src/components/Messages/WarningMessages.tsx +9 -0
  100. package/src/components/Messages/useMessageQueue.ts +17 -4
  101. package/src/components/RouteCard/RouteCard.tsx +3 -3
  102. package/src/components/TokenList/TokenListItem.tsx +2 -2
  103. package/src/config/version.ts +1 -1
  104. package/src/hooks/useAvailableChains.ts +4 -2
  105. package/src/hooks/useExplorer.ts +35 -36
  106. package/src/hooks/useFromTokenSufficiency.ts +4 -1
  107. package/src/hooks/useGasRecommendation.ts +9 -1
  108. package/src/hooks/useGasSufficiency.ts +76 -22
  109. package/src/hooks/useIsBatchingSupported.ts +9 -1
  110. package/src/hooks/useIsContractAddress.ts +1 -1
  111. package/src/hooks/useRouteExecution.ts +10 -4
  112. package/src/hooks/useRouteRequiredAccountConnection.ts +58 -0
  113. package/src/hooks/useRoutes.ts +13 -7
  114. package/src/hooks/useTokenBalance.ts +12 -3
  115. package/src/hooks/useTokenBalances.ts +4 -1
  116. package/src/hooks/useTokenSearch.ts +5 -2
  117. package/src/hooks/useTokens.ts +3 -2
  118. package/src/hooks/useTools.ts +3 -2
  119. package/src/hooks/useTransactionDetails.ts +13 -4
  120. package/src/hooks/useTransactionHistory.ts +7 -1
  121. package/src/i18n/en.json +6 -4
  122. package/src/pages/MainPage/ReviewButton.tsx +1 -0
  123. package/src/pages/TransactionPage/StartTransactionButton.tsx +1 -0
  124. package/src/pages/TransactionPage/StatusBottomSheet.style.tsx +4 -12
  125. package/src/pages/TransactionPage/StatusBottomSheet.tsx +47 -77
  126. package/src/providers/QueryClientProvider.tsx +20 -0
  127. package/src/providers/WalletProvider/SuiBaseProvider.tsx +3 -9
  128. package/src/stores/form/FormStore.tsx +4 -15
  129. package/src/stores/form/useFormRef.ts +1 -8
  130. package/src/types/widget.ts +10 -2
  131. package/src/utils/queries.ts +2 -0
  132. package/src/utils/timer.ts +8 -1
@@ -0,0 +1,20 @@
1
+ import {
2
+ QueryClientContext as TanstackQueryClientContext,
3
+ QueryClientProvider as TanstackQueryClientProvider,
4
+ } from '@tanstack/react-query'
5
+ import { useContext } from 'react'
6
+ import type { PropsWithChildren } from 'react'
7
+ import { queryClient } from '../config/queryClient'
8
+
9
+ export const QueryClientProvider: React.FC<PropsWithChildren> = ({
10
+ children,
11
+ }) => {
12
+ const existingQueryClient = useContext(TanstackQueryClientContext)
13
+ return existingQueryClient ? (
14
+ children
15
+ ) : (
16
+ <TanstackQueryClientProvider client={queryClient}>
17
+ {children}
18
+ </TanstackQueryClientProvider>
19
+ )
20
+ }
@@ -13,17 +13,11 @@ export const SuiBaseProvider: FC<PropsWithChildren> = ({ children }) => {
13
13
 
14
14
  const config = useMemo(() => {
15
15
  const sui = chains?.find((chain) => chain.id === ChainId.SUI)
16
- if (sui) {
17
- return createNetworkConfig({
18
- mainnet: { url: sui.metamask?.rpcUrls[0] ?? getFullnodeUrl('mainnet') },
19
- })
20
- }
16
+ return createNetworkConfig({
17
+ mainnet: { url: sui?.metamask?.rpcUrls[0] ?? getFullnodeUrl('mainnet') },
18
+ })
21
19
  }, [chains])
22
20
 
23
- if (!config?.networkConfig) {
24
- return null
25
- }
26
-
27
21
  return (
28
22
  <SuiClientProvider networks={config.networkConfig} defaultNetwork="mainnet">
29
23
  <WalletProvider
@@ -2,7 +2,6 @@ import type { PropsWithChildren } from 'react'
2
2
  import { useMemo, useRef } from 'react'
3
3
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
4
4
  import type { FormRef, ToAddress } from '../../types/widget.js'
5
- import { HiddenUI } from '../../types/widget.js'
6
5
  import { FormStoreContext } from './FormStoreContext.js'
7
6
  import { FormUpdater } from './FormUpdater.js'
8
7
  import { createFormStore, formDefaultValues } from './createFormStore.js'
@@ -14,8 +13,7 @@ const initialiseDefaultValues = (
14
13
  defaultValues: Partial<DefaultValues>,
15
14
  fromAmount?: number | string,
16
15
  toAmount?: number | string,
17
- toAddress?: ToAddress,
18
- hiddenToAddress?: boolean
16
+ toAddress?: ToAddress
19
17
  ) => ({
20
18
  ...formDefaultValues,
21
19
  ...defaultValues,
@@ -26,9 +24,7 @@ const initialiseDefaultValues = (
26
24
  (typeof toAmount === 'number' ? toAmount?.toPrecision() : toAmount) ||
27
25
  formDefaultValues.toAmount,
28
26
  // Prevent setting address when the field is hidden
29
- toAddress: hiddenToAddress
30
- ? formDefaultValues.toAddress
31
- : toAddress?.address || formDefaultValues.toAddress,
27
+ toAddress: toAddress?.address || formDefaultValues.toAddress,
32
28
  })
33
29
 
34
30
  interface FormStoreProviderProps extends PropsWithChildren {
@@ -49,14 +45,11 @@ export const FormStoreProvider: React.FC<FormStoreProviderProps> = ({
49
45
  fromAmount,
50
46
  toAmount,
51
47
  toAddress,
52
- hiddenUI,
53
48
  formUpdateKey,
54
49
  } = widgetConfig
55
50
 
56
51
  const storeRef = useRef<FormStoreStore>(null)
57
52
 
58
- const hiddenToAddress = hiddenUI?.includes(HiddenUI.ToAddress)
59
-
60
53
  const configHasFromChain = Object.hasOwn(widgetConfig, 'fromChain')
61
54
  const configHasFromToken = Object.hasOwn(widgetConfig, 'fromToken')
62
55
  const configHasFromAmount = Object.hasOwn(widgetConfig, 'fromAmount')
@@ -93,9 +86,7 @@ export const FormStoreProvider: React.FC<FormStoreProviderProps> = ({
93
86
  ...(configHasToToken ? { toToken } : undefined),
94
87
  ...(configHasToAddress
95
88
  ? {
96
- toAddress: hiddenToAddress
97
- ? formDefaultValues.toAddress
98
- : toAddress?.address || formDefaultValues.toAddress,
89
+ toAddress: toAddress?.address || formDefaultValues.toAddress,
99
90
  }
100
91
  : undefined),
101
92
  }),
@@ -104,7 +95,6 @@ export const FormStoreProvider: React.FC<FormStoreProviderProps> = ({
104
95
  toAmount,
105
96
  fromChain,
106
97
  fromToken,
107
- hiddenToAddress,
108
98
  toAddress,
109
99
  toChain,
110
100
  toToken,
@@ -126,8 +116,7 @@ export const FormStoreProvider: React.FC<FormStoreProviderProps> = ({
126
116
  reactiveFormValues,
127
117
  fromAmount,
128
118
  toAmount,
129
- toAddress,
130
- hiddenToAddress
119
+ toAddress
131
120
  )
132
121
  )
133
122
  }
@@ -1,16 +1,13 @@
1
1
  import { useImperativeHandle } from 'react'
2
- import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
3
2
  import { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'
4
3
  import { formDefaultValues } from '../../stores/form/createFormStore.js'
5
4
  import { useSendToWalletActions } from '../../stores/settings/useSendToWalletStore.js'
6
5
  import type { FormRef } from '../../types/widget.js'
7
- import { HiddenUI } from '../../types/widget.js'
8
6
  import type { FormStoreStore, GenericFormValue } from './types.js'
9
7
 
10
8
  export const useFormRef = (formStore: FormStoreStore, formRef?: FormRef) => {
11
9
  const { setSendToWallet } = useSendToWalletActions()
12
10
  const { setSelectedBookmark } = useBookmarkActions()
13
- const { hiddenUI } = useWidgetConfig()
14
11
 
15
12
  useImperativeHandle(
16
13
  formRef,
@@ -25,10 +22,6 @@ export const useFormRef = (formStore: FormStoreStore, formRef?: FormRef) => {
25
22
  (typeof value === 'number' ? value?.toPrecision() : value) ||
26
23
  formDefaultValues.toAmount,
27
24
  toAddress: (value) => {
28
- if (hiddenUI?.includes(HiddenUI.ToAddress)) {
29
- return formDefaultValues.toAddress
30
- }
31
-
32
25
  const isToAddressObj = typeof value !== 'string'
33
26
 
34
27
  const address =
@@ -68,6 +61,6 @@ export const useFormRef = (formStore: FormStoreStore, formRef?: FormRef) => {
68
61
  },
69
62
  }
70
63
  },
71
- [formStore, hiddenUI, setSendToWallet, setSelectedBookmark]
64
+ [formStore, setSendToWallet, setSelectedBookmark]
72
65
  )
73
66
  }
@@ -240,6 +240,14 @@ export interface RouteLabelRule {
240
240
  toTokenAddress?: string[]
241
241
  }
242
242
 
243
+ export type ExplorerUrl =
244
+ | string
245
+ | {
246
+ url: string
247
+ txPath?: string
248
+ addressPath?: string
249
+ }
250
+
243
251
  export interface WidgetConfig {
244
252
  fromChain?: number
245
253
  toChain?: number
@@ -291,8 +299,8 @@ export interface WidgetConfig {
291
299
  tokens?: WidgetTokens
292
300
  languages?: WidgetLanguages
293
301
  languageResources?: LanguageResources
294
- explorerUrls?: Record<number, string[]> &
295
- Partial<Record<'internal', string[]>>
302
+ explorerUrls?: Record<number, ExplorerUrl[]> &
303
+ Partial<Record<'internal', ExplorerUrl[]>>
296
304
  poweredBy?: PoweredByType
297
305
 
298
306
  /**
@@ -0,0 +1,2 @@
1
+ export const getQueryKey = (key: string, prefix?: string) =>
2
+ `${prefix || 'li.fi'}-widget-${key}`
@@ -12,7 +12,7 @@ export const formatTimer = ({
12
12
  locale?: string
13
13
  }): string => {
14
14
  if (typeof (Intl as any).DurationFormat === 'function') {
15
- return new (Intl as any).DurationFormat(locale, {
15
+ const time = new (Intl as any).DurationFormat(locale, {
16
16
  style: 'digital',
17
17
  hours: '2-digit',
18
18
  hoursDisplay: 'auto',
@@ -22,6 +22,13 @@ export const formatTimer = ({
22
22
  minutes,
23
23
  seconds,
24
24
  })
25
+ // This handles a fixed bug with Webkit, and Safari
26
+ // https://github.com/WebKit/WebKit/pull/38357
27
+ // https://developer.apple.com/documentation/safari-release-notes/safari-18_4-release-notes#JavaScript
28
+ //
29
+ // Since most users haven't updated their browsers yet, they would have this issue
30
+ // it should be safe to remove the check after a while.
31
+ return time.replace(/^:, /, '')
25
32
  }
26
33
 
27
34
  return ''