@lifi/widget 3.36.1 → 3.38.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 (90) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js +3 -0
  3. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js.map +1 -1
  4. package/dist/esm/components/AppContainer.js +1 -0
  5. package/dist/esm/components/AppContainer.js.map +1 -1
  6. package/dist/esm/components/Avatar/AccountAvatar.js +3 -3
  7. package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
  8. package/dist/esm/components/Avatar/Avatar.d.ts +2 -0
  9. package/dist/esm/components/Avatar/Avatar.js +4 -3
  10. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  11. package/dist/esm/components/Avatar/ChainBadgeContent.d.ts +7 -0
  12. package/dist/esm/components/Avatar/ChainBadgeContent.js +10 -0
  13. package/dist/esm/components/Avatar/ChainBadgeContent.js.map +1 -0
  14. package/dist/esm/components/Avatar/TokenAvatar.js +3 -3
  15. package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
  16. package/dist/esm/components/Chains/AllChainsAvatar.js +31 -5
  17. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  18. package/dist/esm/components/Chains/ChainSearchInput.js +7 -1
  19. package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
  20. package/dist/esm/components/Header/NavigationHeader.js +5 -1
  21. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  22. package/dist/esm/components/RouteCard/RouteCard.js +2 -1
  23. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  24. package/dist/esm/components/SelectTokenButton/SelectTokenButton.js +3 -1
  25. package/dist/esm/components/SelectTokenButton/SelectTokenButton.js.map +1 -1
  26. package/dist/esm/components/TokenList/TokenListItem.js +8 -2
  27. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  28. package/dist/esm/config/version.d.ts +1 -1
  29. package/dist/esm/config/version.js +1 -1
  30. package/dist/esm/hooks/useFilteredByTokenBalances.js +8 -2
  31. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  32. package/dist/esm/hooks/useRoutes.js +10 -19
  33. package/dist/esm/hooks/useRoutes.js.map +1 -1
  34. package/dist/esm/hooks/useTokenSearch.js +15 -8
  35. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  36. package/dist/esm/hooks/useTokens.js +33 -53
  37. package/dist/esm/hooks/useTokens.js.map +1 -1
  38. package/dist/esm/i18n/en.json +1 -0
  39. package/dist/esm/providers/I18nProvider/I18nProvider.js +27 -3
  40. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  41. package/dist/esm/stores/StoreProvider.js +2 -1
  42. package/dist/esm/stores/StoreProvider.js.map +1 -1
  43. package/dist/esm/stores/chains/ChainOrderStore.js +15 -2
  44. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  45. package/dist/esm/stores/settings/createSettingsStore.d.ts +2 -0
  46. package/dist/esm/stores/settings/types.d.ts +1 -0
  47. package/dist/esm/stores/settings/utils/getStateValues.js +1 -0
  48. package/dist/esm/stores/settings/utils/getStateValues.js.map +1 -1
  49. package/dist/esm/types/token.d.ts +6 -1
  50. package/dist/esm/types/widget.d.ts +12 -2
  51. package/dist/esm/types/widget.js +2 -0
  52. package/dist/esm/types/widget.js.map +1 -1
  53. package/dist/esm/utils/token.d.ts +12 -1
  54. package/dist/esm/utils/token.js +44 -0
  55. package/dist/esm/utils/token.js.map +1 -1
  56. package/dist/esm/utils/tokenList.js +2 -0
  57. package/dist/esm/utils/tokenList.js.map +1 -1
  58. package/dist/esm/utils/variant.d.ts +2 -0
  59. package/dist/esm/utils/variant.js +10 -0
  60. package/dist/esm/utils/variant.js.map +1 -0
  61. package/package.json +7 -7
  62. package/package.json.tmp +9 -9
  63. package/src/components/AmountInput/PriceFormHelperText.style.tsx +3 -0
  64. package/src/components/AppContainer.tsx +1 -0
  65. package/src/components/Avatar/AccountAvatar.tsx +3 -15
  66. package/src/components/Avatar/Avatar.tsx +6 -7
  67. package/src/components/Avatar/ChainBadgeContent.tsx +22 -0
  68. package/src/components/Avatar/TokenAvatar.tsx +3 -11
  69. package/src/components/Chains/AllChainsAvatar.tsx +56 -8
  70. package/src/components/Chains/ChainSearchInput.tsx +9 -1
  71. package/src/components/Header/NavigationHeader.tsx +5 -1
  72. package/src/components/RouteCard/RouteCard.tsx +2 -1
  73. package/src/components/SelectTokenButton/SelectTokenButton.tsx +9 -1
  74. package/src/components/TokenList/TokenListItem.tsx +23 -1
  75. package/src/config/version.ts +1 -1
  76. package/src/hooks/useFilteredByTokenBalances.ts +8 -4
  77. package/src/hooks/useRoutes.ts +17 -23
  78. package/src/hooks/useTokenSearch.ts +17 -10
  79. package/src/hooks/useTokens.ts +51 -83
  80. package/src/i18n/en.json +1 -0
  81. package/src/providers/I18nProvider/I18nProvider.tsx +39 -2
  82. package/src/stores/StoreProvider.tsx +2 -1
  83. package/src/stores/chains/ChainOrderStore.tsx +18 -2
  84. package/src/stores/settings/types.ts +1 -0
  85. package/src/stores/settings/utils/getStateValues.ts +1 -0
  86. package/src/types/token.ts +5 -0
  87. package/src/types/widget.ts +11 -1
  88. package/src/utils/token.ts +65 -1
  89. package/src/utils/tokenList.ts +2 -0
  90. package/src/utils/variant.ts +16 -0
@@ -1,6 +1,17 @@
1
- import type { TokenExtended } from '@lifi/sdk';
1
+ import type { Token, TokenExtended } from '@lifi/sdk';
2
2
  import type { FormType } from '../stores/form/types.js';
3
+ import type { TokensByChain } from '../types/token.js';
3
4
  import type { WidgetChains, WidgetTokens } from '../types/widget.js';
5
+ /**
6
+ * Merges verified tokens with search tokens.
7
+ * Verified tokens take priority - search tokens are only added if they don't already exist.
8
+ */
9
+ export declare const mergeVerifiedWithSearchTokens: (verifiedTokens?: TokensByChain, searchTokens?: TokensByChain) => TokensByChain | undefined;
10
+ /**
11
+ * Updates a token in the cache by chainId and address.
12
+ * Returns a new cache object with the token updated, or the original if not found.
13
+ */
14
+ export declare const updateTokenInCache: (data: TokensByChain | undefined, token: Token) => TokensByChain | undefined;
4
15
  export declare const filterAllowedTokens: (dataTokens: {
5
16
  [chainId: number]: TokenExtended[];
6
17
  } | undefined, configTokens?: WidgetTokens, chainsConfig?: WidgetChains, formType?: FormType) => {
@@ -1,4 +1,48 @@
1
1
  import { getConfigItemSets, isFormItemAllowed } from './item.js';
2
+ /**
3
+ * Merges verified tokens with search tokens.
4
+ * Verified tokens take priority - search tokens are only added if they don't already exist.
5
+ */
6
+ export const mergeVerifiedWithSearchTokens = (verifiedTokens, searchTokens) => {
7
+ if (!verifiedTokens) {
8
+ return searchTokens;
9
+ }
10
+ if (!searchTokens) {
11
+ return verifiedTokens;
12
+ }
13
+ const result = { ...verifiedTokens };
14
+ for (const [chainId, tokens] of Object.entries(searchTokens)) {
15
+ const chainIdNum = Number(chainId);
16
+ const existingTokens = result[chainIdNum] || [];
17
+ const existingAddresses = new Set(existingTokens.map((t) => t.address.toLowerCase()));
18
+ const newTokens = tokens.filter((t) => !existingAddresses.has(t.address.toLowerCase()));
19
+ if (newTokens.length) {
20
+ result[chainIdNum] = [...existingTokens, ...newTokens];
21
+ }
22
+ }
23
+ return result;
24
+ };
25
+ /**
26
+ * Updates a token in the cache by chainId and address.
27
+ * Returns a new cache object with the token updated, or the original if not found.
28
+ */
29
+ export const updateTokenInCache = (data, token) => {
30
+ if (!data) {
31
+ return data;
32
+ }
33
+ const chainTokens = data[token.chainId];
34
+ if (!chainTokens) {
35
+ return data;
36
+ }
37
+ const index = chainTokens.findIndex((t) => t.address === token.address);
38
+ if (index < 0) {
39
+ return data;
40
+ }
41
+ return {
42
+ ...data,
43
+ [token.chainId]: chainTokens.map((t, i) => i === index ? { ...t, ...token } : t),
44
+ };
45
+ };
2
46
  export const filterAllowedTokens = (dataTokens, configTokens, chainsConfig, formType) => {
3
47
  if (!dataTokens) {
4
48
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/utils/token.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEhE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA8D,EAC9D,YAA2B,EAC3B,YAA2B,EAC3B,QAAmB,EACiC,EAAE;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAM;IACR,CAAC;IAED,MAAM,cAAc,GAAG,YAAY,EAAE,OAAO,IAAI,EAAE,CAAA;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,IAAI,GAAG,CAAC;QACN,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACvC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;KAC3B,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAEnC,MAAM,iBAAiB,GAAG,iBAAiB,CACzC,YAAY,EACZ,CAAC,QAAkB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EACzC,QAAQ,CACT,CAAA;IAED,MAAM,eAAe,GAAG,iBAAiB;QACvC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CACxD;QACH,CAAC,CAAC,WAAW,CAAA;IAEf,MAAM,oBAAoB,GAA2C,EAAE,CAAA;IACvE,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG;YAClB,GAAG,UAAU,CAAC,OAAO,CAAC;YACtB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;SAC/D,CAAA;QAED,MAAM,gBAAgB,GAAG,iBAAiB,CACxC,YAAY,EACZ,CAAC,MAAmB,EAAE,EAAE,CACtB,IAAI,GAAG,CACL,MAAM;aACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACvC,EACH,QAAQ,CACT,CAAA;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5C,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACzD,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CACxB,CACF,CAAA;QAED,oBAAoB,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAA;IAC1C,CAAC;IAED,OAAO,oBAAoB,CAAA;AAC7B,CAAC,CAAA"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/utils/token.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEhE;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,cAA8B,EAC9B,YAA4B,EACD,EAAE;IAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,YAAY,CAAA;IACrB,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAA;IAEpC,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;QAC/C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACnD,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACvD,CAAA;QAED,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAA+B,EAC/B,KAAY,EACe,EAAE;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO;QACL,GAAG,IAAI;QACP,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CACrC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA8D,EAC9D,YAA2B,EAC3B,YAA2B,EAC3B,QAAmB,EACiC,EAAE;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAM;IACR,CAAC;IAED,MAAM,cAAc,GAAG,YAAY,EAAE,OAAO,IAAI,EAAE,CAAA;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,IAAI,GAAG,CAAC;QACN,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACvC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;KAC3B,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAEnC,MAAM,iBAAiB,GAAG,iBAAiB,CACzC,YAAY,EACZ,CAAC,QAAkB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EACzC,QAAQ,CACT,CAAA;IAED,MAAM,eAAe,GAAG,iBAAiB;QACvC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CACxD;QACH,CAAC,CAAC,WAAW,CAAA;IAEf,MAAM,oBAAoB,GAA2C,EAAE,CAAA;IACvE,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG;YAClB,GAAG,UAAU,CAAC,OAAO,CAAC;YACtB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;SAC/D,CAAA;QAED,MAAM,gBAAgB,GAAG,iBAAiB,CACxC,YAAY,EACZ,CAAC,MAAmB,EAAE,EAAE,CACtB,IAAI,GAAG,CACL,MAAM;aACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACvC,EACH,QAAQ,CACT,CAAA;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5C,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACzD,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CACxB,CACF,CAAA;QAED,oBAAoB,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAA;IAC1C,CAAC;IAED,OAAO,oBAAoB,CAAA;AAC7B,CAAC,CAAA"}
@@ -45,6 +45,8 @@ const processedTypedTokens = (tokens, tokensWithBalances, selectedChainId, confi
45
45
  typedTokens?.forEach((token) => {
46
46
  const tokenAmount = { ...token };
47
47
  tokenAmount[tokenType] = true;
48
+ // Config tokens are explicitly set by integrator, mark as verified
49
+ tokenAmount.verified = true;
48
50
  const match = filteredTokensMap.get(token.address);
49
51
  if (match?.priceUSD) {
50
52
  tokenAmount.priceUSD = match.priceUSD;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenList.js","sourceRoot":"","sources":["../../../src/utils/tokenList.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenList.js","sourceRoot":"","sources":["../../../src/utils/tokenList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { SplitSubvariant, SplitSubvariantOptions } from '../types/widget.js';
2
+ export declare const getSplitSubvariant: (split?: SplitSubvariant | SplitSubvariantOptions) => SplitSubvariant;
@@ -0,0 +1,10 @@
1
+ export const getSplitSubvariant = (split) => {
2
+ if (!split) {
3
+ return 'swap';
4
+ }
5
+ if (typeof split === 'string') {
6
+ return split;
7
+ }
8
+ return split.defaultTab;
9
+ };
10
+ //# sourceMappingURL=variant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../../src/utils/variant.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAgD,EAC/B,EAAE;IACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAA;AACzB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "3.36.1",
3
+ "version": "3.38.0",
4
4
  "description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
5
5
  "type": "module",
6
6
  "main": "./dist/esm/index.js",
@@ -34,7 +34,7 @@
34
34
  "@bigmi/core": "^0.6.3",
35
35
  "@emotion/react": "^11.14.0",
36
36
  "@emotion/styled": "^11.14.1",
37
- "@lifi/sdk": "^3.13.7",
37
+ "@lifi/sdk": "^3.14.1",
38
38
  "@mui/icons-material": "^7.3.6",
39
39
  "@mui/material": "^7.3.6",
40
40
  "@mui/system": "^7.3.6",
@@ -42,17 +42,17 @@
42
42
  "@solana/wallet-adapter-base": "^0.9.27",
43
43
  "@solana/wallet-adapter-coinbase": "^0.1.23",
44
44
  "@solana/web3.js": "^1.98.4",
45
- "@tanstack/react-virtual": "^3.13.12",
46
- "i18next": "^25.7.1",
45
+ "@tanstack/react-virtual": "^3.13.13",
46
+ "i18next": "^25.7.3",
47
47
  "microdiff": "^1.5.0",
48
48
  "mitt": "^3.0.1",
49
- "react-i18next": "^16.3.5",
49
+ "react-i18next": "^16.5.0",
50
50
  "react-intersection-observer": "^9.16.0",
51
51
  "react-router-dom": "^6.30.1",
52
52
  "react-transition-group": "^4.4.5",
53
- "viem": "^2.41.2",
53
+ "viem": "^2.42.1",
54
54
  "zustand": "^5.0.9",
55
- "@lifi/wallet-management": "^3.20.1"
55
+ "@lifi/wallet-management": "^3.21.0"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "@bigmi/react": ">=0.6.0",
package/package.json.tmp CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "3.36.1",
3
+ "version": "3.38.0",
4
4
  "description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -53,7 +53,7 @@
53
53
  "@bigmi/core": "^0.6.3",
54
54
  "@emotion/react": "^11.14.0",
55
55
  "@emotion/styled": "^11.14.1",
56
- "@lifi/sdk": "^3.13.7",
56
+ "@lifi/sdk": "^3.14.1",
57
57
  "@lifi/wallet-management": "workspace:^",
58
58
  "@mui/icons-material": "^7.3.6",
59
59
  "@mui/material": "^7.3.6",
@@ -62,25 +62,25 @@
62
62
  "@solana/wallet-adapter-base": "^0.9.27",
63
63
  "@solana/wallet-adapter-coinbase": "^0.1.23",
64
64
  "@solana/web3.js": "^1.98.4",
65
- "@tanstack/react-virtual": "^3.13.12",
66
- "i18next": "^25.7.1",
65
+ "@tanstack/react-virtual": "^3.13.13",
66
+ "i18next": "^25.7.3",
67
67
  "microdiff": "^1.5.0",
68
68
  "mitt": "^3.0.1",
69
- "react-i18next": "^16.3.5",
69
+ "react-i18next": "^16.5.0",
70
70
  "react-intersection-observer": "^9.16.0",
71
71
  "react-router-dom": "^6.30.1",
72
72
  "react-transition-group": "^4.4.5",
73
- "viem": "^2.41.2",
73
+ "viem": "^2.42.1",
74
74
  "zustand": "^5.0.9"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@types/react-transition-group": "^4.4.12",
78
78
  "cpy-cli": "^6.0.0",
79
79
  "madge": "^8.0.0",
80
- "react": "^19.2.1",
81
- "react-dom": "^19.2.1",
80
+ "react": "^19.2.3",
81
+ "react-dom": "^19.2.3",
82
82
  "typescript": "^5.9.3",
83
- "vitest": "^4.0.15"
83
+ "vitest": "^4.0.16"
84
84
  },
85
85
  "peerDependencies": {
86
86
  "@bigmi/react": ">=0.6.0",
@@ -25,5 +25,8 @@ export const InputPriceButton = styled(Button)(({ theme, onClick }) => ({
25
25
  cursor: 'text',
26
26
  userSelect: 'text',
27
27
  pointerEvents: 'none',
28
+ ...theme.applyStyles('dark', {
29
+ backgroundColor: 'transparent',
30
+ }),
28
31
  }),
29
32
  }))
@@ -114,6 +114,7 @@ const CssBaselineContainer = styled(ScopedCssBaseline, {
114
114
  defaultMaxHeight,
115
115
  },
116
116
  '&:has(.long-list)': {
117
+ minHeight: getWidgetMaxHeight(theme),
117
118
  maxHeight: getWidgetMaxHeight(theme),
118
119
  },
119
120
  }
@@ -4,12 +4,8 @@ import Wallet from '@mui/icons-material/Wallet'
4
4
  import { Badge } from '@mui/material'
5
5
  import { useChain } from '../../hooks/useChain.js'
6
6
  import type { ToAddress } from '../../types/widget.js'
7
- import {
8
- AvatarDefault,
9
- AvatarDefaultBadge,
10
- AvatarMasked,
11
- } from './Avatar.style.js'
12
- import { SmallAvatar } from './SmallAvatar.js'
7
+ import { AvatarDefault, AvatarMasked } from './Avatar.style.js'
8
+ import { ChainBadgeContent } from './ChainBadgeContent.js'
13
9
 
14
10
  interface AccountAvatarProps {
15
11
  chainId?: number
@@ -45,15 +41,7 @@ export const AccountAvatar = ({
45
41
  <Badge
46
42
  overlap="circular"
47
43
  anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
48
- badgeContent={
49
- chain ? (
50
- <SmallAvatar src={chain.logoURI} alt={chain.name}>
51
- {chain.name[0]}
52
- </SmallAvatar>
53
- ) : (
54
- <AvatarDefaultBadge />
55
- )
56
- }
44
+ badgeContent={<ChainBadgeContent chain={chain} />}
57
45
  >
58
46
  {avatar}
59
47
  </Badge>
@@ -1,20 +1,19 @@
1
+ import type { ExtendedChain } from '@lifi/sdk'
1
2
  import type { SxProps, Theme } from '@mui/material'
2
3
  import { Badge, Skeleton } from '@mui/material'
3
- import {
4
- AvatarDefault,
5
- AvatarDefaultBadge,
6
- AvatarSkeletonMaskedContainer,
7
- } from './Avatar.style.js'
4
+ import { AvatarDefault, AvatarSkeletonMaskedContainer } from './Avatar.style.js'
5
+ import { ChainBadgeContent } from './ChainBadgeContent.js'
8
6
  import { SmallAvatarSkeleton } from './SmallAvatar.js'
9
7
 
10
8
  export const AvatarBadgedDefault: React.FC<{
11
9
  sx?: SxProps<Theme>
12
- }> = ({ sx }) => {
10
+ chain?: ExtendedChain
11
+ }> = ({ sx, chain }) => {
13
12
  return (
14
13
  <Badge
15
14
  overlap="circular"
16
15
  anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
17
- badgeContent={<AvatarDefaultBadge />}
16
+ badgeContent={<ChainBadgeContent chain={chain} />}
18
17
  sx={sx}
19
18
  >
20
19
  <AvatarDefault />
@@ -0,0 +1,22 @@
1
+ import type { Chain, ExtendedChain } from '@lifi/sdk'
2
+ import { AvatarDefaultBadge } from './Avatar.style.js'
3
+ import { SmallAvatar } from './SmallAvatar.js'
4
+
5
+ interface ChainBadgeContentProps {
6
+ chain?: Chain | ExtendedChain
7
+ size?: number
8
+ }
9
+
10
+ export const ChainBadgeContent: React.FC<ChainBadgeContentProps> = ({
11
+ chain,
12
+ size = 16,
13
+ }) => {
14
+ if (chain?.logoURI) {
15
+ return (
16
+ <SmallAvatar src={chain.logoURI} alt={chain.name} size={size}>
17
+ {chain.name?.[0]}
18
+ </SmallAvatar>
19
+ )
20
+ }
21
+ return <AvatarDefaultBadge size={size} />
22
+ }
@@ -4,8 +4,8 @@ import { Badge } from '@mui/material'
4
4
  import { useChain } from '../../hooks/useChain.js'
5
5
  import { useToken } from '../../hooks/useToken.js'
6
6
  import { AvatarBadgedSkeleton } from './Avatar.js'
7
- import { AvatarDefaultBadge, AvatarMasked } from './Avatar.style.js'
8
- import { SmallAvatar } from './SmallAvatar.js'
7
+ import { AvatarMasked } from './Avatar.style.js'
8
+ import { ChainBadgeContent } from './ChainBadgeContent.js'
9
9
 
10
10
  export const TokenAvatar: React.FC<{
11
11
  token?: StaticToken
@@ -83,15 +83,7 @@ const TokenAvatarBase: React.FC<{
83
83
  <Badge
84
84
  overlap="circular"
85
85
  anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
86
- badgeContent={
87
- chain ? (
88
- <SmallAvatar src={chain.logoURI} alt={chain.name} size={badgeSize}>
89
- {chain.name[0]}
90
- </SmallAvatar>
91
- ) : (
92
- <AvatarDefaultBadge size={badgeSize} />
93
- )
94
- }
86
+ badgeContent={<ChainBadgeContent chain={chain} size={badgeSize} />}
95
87
  sx={sx}
96
88
  >
97
89
  <AvatarMasked
@@ -1,4 +1,9 @@
1
- import { ChainType, type EVMChain, type ExtendedChain } from '@lifi/sdk'
1
+ import {
2
+ ChainId,
3
+ ChainType,
4
+ type EVMChain,
5
+ type ExtendedChain,
6
+ } from '@lifi/sdk'
2
7
  import { Avatar, Box } from '@mui/material'
3
8
  import { memo, useMemo } from 'react'
4
9
 
@@ -12,21 +17,25 @@ const chainTypeIcons = [
12
17
  name: 'Ethereum',
13
18
  chainType: ChainType.EVM,
14
19
  icon: 'https://lifinance.github.io/types/src/assets/icons/chains/ethereum.svg',
20
+ defaultChainId: ChainId.ETH,
15
21
  },
16
22
  {
17
23
  name: 'Solana',
18
24
  chainType: ChainType.SVM,
19
25
  icon: 'https://lifinance.github.io/types/src/assets/icons/chains/solana.svg',
26
+ defaultChainId: ChainId.SOL,
20
27
  },
21
28
  {
22
29
  name: 'Bitcoin',
23
30
  chainType: ChainType.UTXO,
24
31
  icon: 'https://lifinance.github.io/types/src/assets/icons/chains/bitcoin.svg',
32
+ defaultChainId: ChainId.BTC,
25
33
  },
26
34
  {
27
35
  name: 'Sui',
28
36
  chainType: ChainType.MVM,
29
37
  icon: 'https://lifinance.github.io/types/src/assets/icons/chains/sui.svg',
38
+ defaultChainId: ChainId.SUI,
30
39
  },
31
40
  ]
32
41
 
@@ -35,10 +44,48 @@ const maxChainAvatarsCount = chainTypeIcons.length
35
44
  export const AllChainsAvatar = memo(
36
45
  ({ chains, size }: AllChainsAvatarProps) => {
37
46
  const icons = useMemo(() => {
47
+ // Create maps for efficient lookups
48
+ const chainsPerChainType = new Map<ChainType, number>()
49
+ const chainsByChainType = new Map<
50
+ ChainType,
51
+ (ExtendedChain | EVMChain)[]
52
+ >()
53
+
54
+ chains.forEach((chain) => {
55
+ chainsPerChainType.set(
56
+ chain.chainType,
57
+ (chainsPerChainType.get(chain.chainType) || 0) + 1
58
+ )
59
+ const chainsOfType = chainsByChainType.get(chain.chainType) || []
60
+ chainsOfType.push(chain)
61
+ chainsByChainType.set(chain.chainType, chainsOfType)
62
+ })
63
+
38
64
  // Get existing ecosystem icons
39
- const existingChainTypeIcons = chainTypeIcons.filter((predefinedChain) =>
40
- chains.some((chain) => chain.chainType === predefinedChain.chainType)
65
+ const existingChainTypeIcons = chainTypeIcons.filter(
66
+ (predefinedChain) => {
67
+ const numberOfChains =
68
+ chainsPerChainType.get(predefinedChain.chainType) ?? 0
69
+
70
+ // If there's only one chain of this type, check if it's not the default
71
+ if (numberOfChains === 1) {
72
+ const chainsOfType = chainsByChainType.get(
73
+ predefinedChain.chainType
74
+ )
75
+ const singleChain = chainsOfType?.[0]
76
+ // Exclude the predefined icon if the single chain is not the default
77
+ if (
78
+ singleChain &&
79
+ singleChain.id !== predefinedChain.defaultChainId
80
+ ) {
81
+ return false
82
+ }
83
+ }
84
+
85
+ return numberOfChains > 0
86
+ }
41
87
  )
88
+
42
89
  if (existingChainTypeIcons.length === maxChainAvatarsCount) {
43
90
  return existingChainTypeIcons
44
91
  }
@@ -46,13 +93,14 @@ export const AllChainsAvatar = memo(
46
93
  const remainingSlots =
47
94
  maxChainAvatarsCount - existingChainTypeIcons.length
48
95
 
96
+ // Create a Set for O(1) lookup of predefined icon names
97
+ const predefinedIconNames = new Set(
98
+ existingChainTypeIcons.map((icon) => icon.name)
99
+ )
100
+
49
101
  const chainsWithLogos = chains.filter((chain) => {
50
102
  // Filter out chain icons matching ecosystem icons
51
- const hasPredefinedIcon = existingChainTypeIcons.some(
52
- (icon) => icon.name === chain.name
53
- )
54
- const hasLogoURI = Boolean(chain.logoURI)
55
- return !hasPredefinedIcon && hasLogoURI
103
+ return !predefinedIconNames.has(chain.name) && Boolean(chain.logoURI)
56
104
  })
57
105
 
58
106
  const additionalIcons = chainsWithLogos
@@ -29,7 +29,15 @@ export const ChainSearchInput = ({
29
29
 
30
30
  if (inExpansion) {
31
31
  return (
32
- <Box sx={{ pt: 3, pb: 2, px: 2.5, height: searchHeaderHeight }}>
32
+ <Box
33
+ sx={{
34
+ pt: 3,
35
+ pb: 2,
36
+ px: 2.5,
37
+ height: searchHeaderHeight,
38
+ boxSizing: 'border-box',
39
+ }}
40
+ >
33
41
  <SearchInput
34
42
  inputRef={inputRef}
35
43
  onChange={onChange}
@@ -34,8 +34,12 @@ export const NavigationHeader: React.FC = () => {
34
34
  const path = cleanedPathname.substring(cleanedPathname.lastIndexOf('/') + 1)
35
35
  const hasPath = navigationRoutesValues.includes(path)
36
36
 
37
+ // Show tabs when split is undefined (default tabs) or an object with defaultTab
38
+ // Hide tabs when split is a string ('bridge' or 'swap' - single mode)
37
39
  const showSplitOptions =
38
- subvariant === 'split' && !hasPath && !subvariantOptions?.split
40
+ subvariant === 'split' &&
41
+ !hasPath &&
42
+ typeof subvariantOptions?.split !== 'string'
39
43
 
40
44
  return (
41
45
  <HeaderAppBar elevation={0} sx={{ paddingTop: 1, paddingBottom: 0.5 }}>
@@ -44,7 +44,8 @@ export const RouteCard: React.FC<
44
44
  ? { ...route.fromToken, amount: BigInt(route.fromAmount) }
45
45
  : { ...route.toToken, amount: BigInt(route.toAmount) }
46
46
  const impactToken: TokenAmount | undefined =
47
- subvariant !== 'custom'
47
+ subvariant !== 'custom' &&
48
+ !hiddenUI?.includes(HiddenUI.RouteCardPriceImpact)
48
49
  ? { ...route.fromToken, amount: BigInt(route.fromAmount) }
49
50
  : undefined
50
51
 
@@ -5,6 +5,8 @@ import { useChain } from '../../hooks/useChain.js'
5
5
  import { useSwapOnly } from '../../hooks/useSwapOnly.js'
6
6
  import { useToken } from '../../hooks/useToken.js'
7
7
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
8
+ import { useChainOrderStore } from '../../stores/chains/ChainOrderStore.js'
9
+ import type { ChainOrderState } from '../../stores/chains/types.js'
8
10
  import type { FormTypeProps } from '../../stores/form/types.js'
9
11
  import { FormKeyHelper } from '../../stores/form/types.js'
10
12
  import { useFieldValues } from '../../stores/form/useFieldValues.js'
@@ -37,6 +39,10 @@ export const SelectTokenButton: React.FC<
37
39
  const { chain, isLoading: isChainLoading } = useChain(chainId)
38
40
  const { token, isLoading: isTokenLoading } = useToken(chainId, tokenAddress)
39
41
 
42
+ const isAllNetworks = useChainOrderStore(
43
+ (state: ChainOrderState) => state[`${formType}IsAllNetworks`]
44
+ )
45
+
40
46
  const handleClick = () => {
41
47
  navigate(
42
48
  formType === 'from'
@@ -77,7 +83,9 @@ export const SelectTokenButton: React.FC<
77
83
  isSelected ? (
78
84
  <TokenAvatar token={token} chain={chain} />
79
85
  ) : (
80
- <AvatarBadgedDefault />
86
+ <AvatarBadgedDefault
87
+ chain={isAllNetworks ? undefined : chain}
88
+ />
81
89
  )
82
90
  }
83
91
  title={isSelected ? token.symbol : defaultPlaceholder}
@@ -1,6 +1,7 @@
1
1
  import type { StaticToken } from '@lifi/sdk'
2
2
  import { ChainType } from '@lifi/sdk'
3
3
  import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'
4
+ import WarningRounded from '@mui/icons-material/WarningRounded'
4
5
  import {
5
6
  Avatar,
6
7
  Box,
@@ -9,6 +10,7 @@ import {
9
10
  listItemSecondaryActionClasses,
10
11
  Skeleton,
11
12
  Slide,
13
+ Tooltip,
12
14
  Typography,
13
15
  } from '@mui/material'
14
16
  import type { MouseEventHandler } from 'react'
@@ -189,7 +191,27 @@ const TokenListItemButton: React.FC<TokenListItemButtonProps> = memo(
189
191
  )}
190
192
  </ListItemAvatar>
191
193
  <ListItemText
192
- primary={token.symbol}
194
+ primary={
195
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
196
+ {token.symbol}
197
+ {!token.verified && (
198
+ <Tooltip
199
+ title={t('warning.message.unverifiedToken')}
200
+ placement="top"
201
+ arrow
202
+ >
203
+ <WarningRounded
204
+ sx={{
205
+ display: 'flex',
206
+ fontSize: 16,
207
+ color: 'warning.main',
208
+ cursor: 'help',
209
+ }}
210
+ />
211
+ </Tooltip>
212
+ )}
213
+ </Box>
214
+ }
193
215
  slotProps={{
194
216
  secondary: {
195
217
  component: 'div',
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/widget'
2
- export const version = '3.36.1'
2
+ export const version = '3.38.0'
@@ -96,8 +96,8 @@ export const useFilteredTokensByBalance = (
96
96
  formType
97
97
  )
98
98
 
99
- const additionalTokens = balances.filter(
100
- (balance: WalletTokenExtended) => {
99
+ const additionalTokens = balances
100
+ .filter((balance: WalletTokenExtended) => {
101
101
  const balanceKey = balance.address.toLowerCase()
102
102
  return (
103
103
  !chainTokenSet.has(balanceKey) &&
@@ -109,8 +109,12 @@ export const useFilteredTokensByBalance = (
109
109
  (t) => t.address.toLowerCase()
110
110
  )
111
111
  )
112
- }
113
- ) as TokenExtended[]
112
+ })
113
+ // Mark tokens from wallet balances as unverified
114
+ .map((token: WalletTokenExtended) => ({
115
+ ...token,
116
+ verified: false,
117
+ })) as TokenExtended[]
114
118
 
115
119
  // Combine both sets of tokens - convert WalletTokenExtended to TokenAmount
116
120
  const allTokens = [