@rango-dev/widget-embedded 0.23.1-next.21 → 0.23.1-next.23

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.
@@ -1 +1 @@
1
- {"version":3,"file":"LanguagePage.d.ts","sourceRoot":"","sources":["../../src/pages/LanguagePage.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,wBAAgB,YAAY,sBAwC3B"}
1
+ {"version":3,"file":"LanguagePage.d.ts","sourceRoot":"","sources":["../../src/pages/LanguagePage.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,wBAAgB,YAAY,sBA8C3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAcxC,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,qBAqGnD"}
1
+ {"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAaxC,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,qBAiGnD"}
@@ -8,7 +8,7 @@ export declare const AppStoreContext: React.Context<import("zustand").UseBoundSt
8
8
  persist: {
9
9
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<import("./app").AppStoreState, {
10
10
  theme: import("./slices/settings").ThemeMode;
11
- language: "en" | "es" | "ja" | "fr" | "pt" | null;
11
+ language: "en" | "es" | "ja" | "fr" | "pt" | "zh" | "ru" | "de" | "uk" | "sv" | "fi" | "nl" | "el" | "it" | "pl" | null;
12
12
  affiliatePercent: number | null;
13
13
  affiliateRef: string | null;
14
14
  affiliateWallets: {
@@ -27,7 +27,7 @@ export declare const AppStoreContext: React.Context<import("zustand").UseBoundSt
27
27
  onFinishHydration: (fn: (state: import("./app").AppStoreState) => void) => () => void;
28
28
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<import("./app").AppStoreState, {
29
29
  theme: import("./slices/settings").ThemeMode;
30
- language: "en" | "es" | "ja" | "fr" | "pt" | null;
30
+ language: "en" | "es" | "ja" | "fr" | "pt" | "zh" | "ru" | "de" | "uk" | "sv" | "fi" | "nl" | "el" | "it" | "pl" | null;
31
31
  affiliatePercent: number | null;
32
32
  affiliateRef: string | null;
33
33
  affiliateWallets: {
@@ -9,7 +9,7 @@ export declare function createAppStore(initialData?: WidgetConfig): import("zust
9
9
  persist: {
10
10
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<AppStoreState, {
11
11
  theme: import("./slices/settings").ThemeMode;
12
- language: "en" | "es" | "ja" | "fr" | "pt" | null;
12
+ language: "en" | "es" | "ja" | "fr" | "pt" | "zh" | "ru" | "de" | "uk" | "sv" | "fi" | "nl" | "el" | "it" | "pl" | null;
13
13
  affiliatePercent: number | null;
14
14
  affiliateRef: string | null;
15
15
  affiliateWallets: {
@@ -28,7 +28,7 @@ export declare function createAppStore(initialData?: WidgetConfig): import("zust
28
28
  onFinishHydration: (fn: (state: AppStoreState) => void) => () => void;
29
29
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<AppStoreState, {
30
30
  theme: import("./slices/settings").ThemeMode;
31
- language: "en" | "es" | "ja" | "fr" | "pt" | null;
31
+ language: "en" | "es" | "ja" | "fr" | "pt" | "zh" | "ru" | "de" | "uk" | "sv" | "fi" | "nl" | "el" | "it" | "pl" | null;
32
32
  affiliatePercent: number | null;
33
33
  affiliateRef: string | null;
34
34
  affiliateWallets: {
@@ -1,4 +1,5 @@
1
1
  import type { ConfigSlice } from './config';
2
+ import type { Balance } from '../../types';
2
3
  import type { BlockchainMeta, SwapperMeta, Token } from 'rango-sdk';
3
4
  import type { StateCreator } from 'zustand';
4
5
  type BlockchainOptions = {
@@ -8,10 +9,11 @@ type TokenOptions = {
8
9
  type: 'source' | 'destination';
9
10
  blockchain?: string;
10
11
  searchFor?: string;
12
+ getBalanceFor?: (token: Token) => Balance | null;
11
13
  };
12
14
  export type FetchStatus = 'loading' | 'success' | 'failed';
13
15
  export interface DataSlice {
14
- _blockchains: BlockchainMeta[];
16
+ _blockchainsMapByName: Map<string, BlockchainMeta>;
15
17
  _tokens: Token[];
16
18
  _popularTokens: Token[];
17
19
  _swappers: SwapperMeta[];
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/store/slices/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAE/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,cAAc,EAAE,CAAC;IAC/D,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,KAAK,OAAO,CAAC;IAEzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CACxC,SAAS,GAAG,WAAW,EACvB;CAAE,EACF;CAAE,EACF,SAAS,CAkNT,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/store/slices/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS5C,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAE/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,SAAS;IACxB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,cAAc,EAAE,CAAC;IAC/D,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,KAAK,OAAO,CAAC;IACzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CACxC,SAAS,GAAG,WAAW,EACvB;CAAE,EACF;CAAE,EACF,SAAS,CA4PT,CAAC"}
@@ -1,7 +1,11 @@
1
+ import type { Token } from 'rango-sdk';
1
2
  export declare function removeDuplicateFrom<T>(array: T[]): T[];
2
3
  export declare function areEqual(array1: (number | string)[], array2: (number | string)[]): boolean;
3
4
  export declare function debounce(fn: Function, time: number): (...args: any) => void;
4
5
  export declare function containsText(text: string, searchText: string): boolean;
6
+ export declare function exactText(text: string, searchText: string): boolean;
7
+ export declare function startWithText(text: string, searchText: string): boolean;
5
8
  export declare const getContainer: () => HTMLElement;
6
9
  export declare const getExpanded: () => HTMLElement;
10
+ export declare function compareWithSearchFor(tokenA: Token, tokenB: Token, searchFor?: string): number;
7
11
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,WAK5B;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAGvB,GAAG,UAS9B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED,eAAO,MAAM,YAAY,mBACyC,CAAC;AAEnE,eAAO,MAAM,WAAW,mBAC8C,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAWvC,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,WAK5B;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAGvB,GAAG,UAS9B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,eAAO,MAAM,YAAY,mBACyC,CAAC;AAEnE,eAAO,MAAM,WAAW,mBAC8C,CAAC;AAsDvE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,KAAK,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CA0GR"}
@@ -4,4 +4,5 @@ export declare function getBlockchainShortNameFor(blockchainName: string, blockc
4
4
  export declare function getSwapperDisplayName(swapperId: string, swappers: SwapperMeta[]): string | undefined;
5
5
  export declare function findToken(t: Asset, tokens: Token[]): Token | null;
6
6
  export declare function findBlockchain(name: string, blockchains: BlockchainMeta[]): BlockchainMeta | null;
7
+ export declare function isTokenNative(token: Token, blockchain: BlockchainMeta | undefined): boolean;
7
8
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/utils/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAI3E,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AACD,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,sBAGxB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAElD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,yBAEzE"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/utils/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAI3E,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AACD,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,sBAGxB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAElD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,yBAEzE;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,cAAc,GAAG,SAAS,WAiBvC"}
@@ -17,7 +17,7 @@ export declare const getUsdPrice: (blockchain: string, symbol: string, address:
17
17
  export declare const isExperimentalChain: (blockchains: BlockchainMeta[], wallet: string) => boolean;
18
18
  export declare const getKeplrCompatibleConnectedWallets: (selectableWallets: Wallet[]) => WalletType[];
19
19
  export declare function formatBalance(balance: Balance | null): Balance | null;
20
- export declare function sortTokens(tokens: Token[], getBalanceFor: (token: Token) => Balance | null, isTokenPinned: (token: Token) => boolean): Token[];
20
+ export declare function compareTokenBalance(token1Balance: Balance | null, token2Balance: Balance | null): number;
21
21
  export declare function areTokensEqual(tokenA: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null, tokenB: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null): boolean;
22
22
  export declare function sortWalletsBasedOnConnectionState(wallets: ModalWalletInfo[]): ModalWalletInfo[];
23
23
  export declare function getConciseAddress(address: string, maxChars?: number, ellipsisLength?: number): string;
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/utils/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,MAAM,EACP,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,UAAU,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AAuB5D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAWvE;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,WAAW,EAC3C,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,EAC/C,IAAI,EAAE,UAAU,EAAE,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,EAAE,CA6BnB;AAED,wBAAgB,6BAA6B,CAC3C,oBAAoB,EAAE,cAAc,EAAE,GACrC,OAAO,EAAE,GAAG,IAAI,CAUlB;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,EACxB,mBAAmB,EAAE,OAAO,EAAE,GAAG,IAAI,EACrC,gBAAgB,EAAE,OAAO,GACxB,MAAM,EAAE,CAkFV;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,YA4B5D;AAID,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,WAOjC;AAED,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,YAAY,EAC9B,MAAM,EAAE,KAAK,EAAE,GACd,YAAY,EAAE,CAuBhB;AAED,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,eAAe,GAC/B,eAAe,CAEjB;AAED,eAAO,MAAM,uBAAuB,oBAAqB,eAAe,EAAE,WAwCzE,CAAC;AAQF,eAAO,MAAM,WAAW,eACV,MAAM,UACV,MAAM,WACL,MAAM,GAAG,IAAI,aACX,KAAK,EAAE,KACjB,MAAM,GAAG,IAQX,CAAC;AACF,eAAO,MAAM,mBAAmB,gBACjB,cAAc,EAAE,UACrB,MAAM,KACb,OAUF,CAAC;AAEF,eAAO,MAAM,kCAAkC,sBAC1B,MAAM,EAAE,KAC1B,UAAU,EAUZ,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAkBrE;AA8CD,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,EAC/C,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,WAczC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,IAAI,EAC/D,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,IAAI,WAOhE;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,eAAe,EAAE,GACzB,eAAe,EAAE,CAcnB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EAEf,QAAQ,SAAI,EAEZ,cAAc,SAAI,GACjB,MAAM,CAOR;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,gBAAgB,EAChB,UAAU,GACX,EAAE;IACD,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,GAAG,SAAS,CAMrB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAmCpE;AAED,eAAO,MAAM,iBAAiB,qBACV,eAAe,EAAE,cACvB,MAAM,YAIjB,CAAC;AAEJ,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,UAE9D"}
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/utils/wallets.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/widget-embedded",
3
- "version": "0.23.1-next.21",
3
+ "version": "0.23.1-next.23",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/index.ts",
@@ -25,7 +25,7 @@
25
25
  "@rango-dev/queue-manager-core": "^0.26.0",
26
26
  "@rango-dev/queue-manager-rango-preset": "^0.28.1-next.3",
27
27
  "@rango-dev/queue-manager-react": "^0.26.0",
28
- "@rango-dev/ui": "^0.29.1-next.16",
28
+ "@rango-dev/ui": "^0.29.1-next.17",
29
29
  "@rango-dev/wallets-react": "^0.14.1-next.1",
30
30
  "@rango-dev/wallets-shared": "^0.28.1-next.1",
31
31
  "bignumber.js": "^9.1.1",
@@ -1,6 +1,22 @@
1
1
  import type { FlagPropTypes, Language } from '@rango-dev/ui';
2
2
 
3
- import { English, French, Japanese, Portuguese, Spanish } from '@rango-dev/ui';
3
+ import {
4
+ Chinese,
5
+ English,
6
+ Finland,
7
+ French,
8
+ German,
9
+ Greece,
10
+ Italian,
11
+ Japanese,
12
+ Netherlands,
13
+ Poland,
14
+ Portuguese,
15
+ Russian,
16
+ Spanish,
17
+ Swedish,
18
+ Ukrainian,
19
+ } from '@rango-dev/ui';
4
20
 
5
21
  export type LanguageItem = {
6
22
  title: string;
@@ -15,6 +31,16 @@ export const LANGUAGES: LanguageItem[] = [
15
31
  { title: 'French', label: 'Français', local: 'fr', SVGFlag: French },
16
32
  { title: 'Japanese', label: '日本語', local: 'ja', SVGFlag: Japanese },
17
33
  { title: 'Portuguese', label: 'Português', local: 'pt', SVGFlag: Portuguese },
34
+ { title: 'Chinese', label: '中国人', local: 'zh', SVGFlag: Chinese },
35
+ { title: 'Russian', label: 'Русский', local: 'ru', SVGFlag: Russian },
36
+ { title: 'German', label: 'Deutsch', local: 'de', SVGFlag: German },
37
+ { title: 'Ukrainian', label: 'Україні', local: 'uk', SVGFlag: Ukrainian },
38
+ { title: 'Swedish', label: 'svenska', local: 'sv', SVGFlag: Swedish },
39
+ { title: 'Finnish', label: 'Suomalainen', local: 'fi', SVGFlag: Finland },
40
+ { title: 'Dutch', label: 'Nederlands', local: 'nl', SVGFlag: Netherlands },
41
+ { title: 'Greek', label: 'Grieks', local: 'el', SVGFlag: Greece },
42
+ { title: 'Italian', label: 'Italiana', local: 'it', SVGFlag: Italian },
43
+ { title: 'Polish', label: 'Polski', local: 'pl', SVGFlag: Poland },
18
44
  ];
19
45
 
20
46
  export const DEFAULT_LANGUAGE = 'en';
@@ -0,0 +1,6 @@
1
+ export const MIN_LENGTH_SYMBOL_EXACT_MATCH = 1;
2
+ export const MIN_LENGTH_SYMBOL_START_WITH = 2;
3
+ export const MIN_LENGTH_SYMBOL_CONTAINS = 3;
4
+ export const MIN_LENGTH_TOKEN_NAME_EXACT_MATCH = 3;
5
+ export const MIN_LENGTH_TOKEN_NAME_CONTAINS = 3;
6
+ export const MIN_LENGTH_TOKEN_ADDRESS_CONTAINS = 4;
@@ -1,5 +1,7 @@
1
1
  import { i18n } from '@lingui/core';
2
2
  import {
3
+ Alert,
4
+ Divider,
3
5
  List,
4
6
  ListItemButton,
5
7
  Radio,
@@ -36,6 +38,12 @@ export function LanguagePage() {
36
38
  title: i18n.t('Language'),
37
39
  }}>
38
40
  <PageContainer>
41
+ <Alert
42
+ type="warning"
43
+ variant="alarm"
44
+ title="Important Notice: Machine translations are in use"
45
+ />
46
+ <Divider size={'8'} />
39
47
  <RadioRoot value={activeLanguage}>
40
48
  <List
41
49
  type={
@@ -14,7 +14,6 @@ import { useNavigateBack } from '../hooks/useNavigateBack';
14
14
  import { useAppStore } from '../store/AppStore';
15
15
  import { useQuoteStore } from '../store/quote';
16
16
  import { useWalletsStore } from '../store/wallets';
17
- import { sortTokens } from '../utils/wallets';
18
17
 
19
18
  interface PropTypes {
20
19
  type: 'source' | 'destination';
@@ -34,7 +33,6 @@ export function SelectSwapItemsPage(props: PropTypes) {
34
33
  } = useQuoteStore();
35
34
  const getBalanceFor = useWalletsStore.use.getBalanceFor();
36
35
  const [searchedFor, setSearchedFor] = useState<string>('');
37
- const { isTokenPinned } = useAppStore();
38
36
 
39
37
  const selectedBlockchain = type === 'source' ? fromBlockchain : toBlockchain;
40
38
  const selectedBlockchainName = selectedBlockchain?.name ?? '';
@@ -47,12 +45,9 @@ export function SelectSwapItemsPage(props: PropTypes) {
47
45
  type,
48
46
  blockchain: selectedBlockchainName,
49
47
  searchFor: searchedFor,
48
+ getBalanceFor: getBalanceFor,
50
49
  });
51
50
 
52
- const checkIsTokenPinned = (token: Token) => isTokenPinned(token, type);
53
-
54
- const tokensList = sortTokens(tokens, getBalanceFor, checkIsTokenPinned);
55
-
56
51
  const updateBlockchain = (blockchain: BlockchainMeta) => {
57
52
  if (type === 'source') {
58
53
  setFromBlockchain(blockchain);
@@ -101,7 +96,7 @@ export function SelectSwapItemsPage(props: PropTypes) {
101
96
  />
102
97
  <Divider size={16} />
103
98
  <TokenList
104
- list={tokensList}
99
+ list={tokens}
105
100
  selectedBlockchain={selectedBlockchainName}
106
101
  searchedFor={searchedFor}
107
102
  type={type}
@@ -1,14 +1,16 @@
1
1
  // We keep all the received data from server in this slice
2
2
 
3
3
  import type { ConfigSlice } from './config';
4
+ import type { Balance } from '../../types';
4
5
  import type { BlockchainMeta, SwapperMeta, Token } from 'rango-sdk';
5
6
  import type { StateCreator } from 'zustand';
6
7
 
7
8
  import { httpService as sdk } from '../../services/httpService';
8
- import { containsText } from '../../utils/common';
9
+ import { compareWithSearchFor, containsText } from '../../utils/common';
9
10
  import { isTokenExcludedInConfig } from '../../utils/configs';
11
+ import { isTokenNative } from '../../utils/meta';
10
12
  import { sortLiquiditySourcesByGroupTitle } from '../../utils/settings';
11
- import { areTokensEqual } from '../../utils/wallets';
13
+ import { areTokensEqual, compareTokenBalance } from '../../utils/wallets';
12
14
 
13
15
  type BlockchainOptions = {
14
16
  type?: 'source' | 'destination';
@@ -19,10 +21,12 @@ type TokenOptions = {
19
21
  // filter by an specific blockchain
20
22
  blockchain?: string;
21
23
  searchFor?: string;
24
+ getBalanceFor?: (token: Token) => Balance | null;
22
25
  };
26
+
23
27
  export type FetchStatus = 'loading' | 'success' | 'failed';
24
28
  export interface DataSlice {
25
- _blockchains: BlockchainMeta[];
29
+ _blockchainsMapByName: Map<string, BlockchainMeta>;
26
30
  _tokens: Token[];
27
31
  _popularTokens: Token[];
28
32
  _swappers: SwapperMeta[];
@@ -31,7 +35,6 @@ export interface DataSlice {
31
35
  tokens: (options?: TokenOptions) => Token[];
32
36
  swappers: () => SwapperMeta[];
33
37
  isTokenPinned: (token: Token, type: 'source' | 'destination') => boolean;
34
-
35
38
  fetch: () => Promise<void>;
36
39
  }
37
40
 
@@ -42,14 +45,17 @@ export const createDataSlice: StateCreator<
42
45
  DataSlice
43
46
  > = (set, get) => ({
44
47
  // State
45
- _blockchains: [],
48
+ _blockchainsMapByName: new Map<string, BlockchainMeta>(),
46
49
  _tokens: [],
47
50
  _popularTokens: [],
48
51
  _swappers: [],
49
52
  fetchStatus: 'loading',
50
53
  // Selectors
51
54
  blockchains: (options) => {
52
- const blockchainsFromState = get()._blockchains;
55
+ const blockchainsMapByName = get()._blockchainsMapByName;
56
+ const blockchainsFromState = Array.from(
57
+ blockchainsMapByName?.values() || []
58
+ );
53
59
 
54
60
  if (!options || !options?.type) {
55
61
  return blockchainsFromState;
@@ -76,6 +82,7 @@ export const createDataSlice: StateCreator<
76
82
  },
77
83
  tokens: (options) => {
78
84
  const tokensFromState = get()._tokens;
85
+ const blockchainsMapByName = get()._blockchainsMapByName;
79
86
 
80
87
  if (!options || !options?.type) {
81
88
  return tokensFromState;
@@ -127,29 +134,62 @@ export const createDataSlice: StateCreator<
127
134
 
128
135
  return true;
129
136
  })
130
- .sort((a, b) => {
131
- // Check pinned tokens
132
- if (get().isTokenPinned(a, options.type)) {
133
- return -1;
137
+ .sort((tokenA, tokenB) => {
138
+ //1. sort by pinned tokens
139
+ const isToken1Pinned = get().isTokenPinned(tokenA, options.type);
140
+ const isToken2Pinned = get().isTokenPinned(tokenB, options.type);
141
+ if (isToken1Pinned !== isToken2Pinned) {
142
+ return isToken1Pinned ? -1 : 1;
143
+ }
144
+
145
+ //2. sort by balance
146
+ if (options.getBalanceFor) {
147
+ const token1Balance = options.getBalanceFor(tokenA);
148
+ const token2Balance = options.getBalanceFor(tokenB);
149
+ const balanceCompare = compareTokenBalance(
150
+ token1Balance,
151
+ token2Balance
152
+ );
153
+ if (balanceCompare !== 0) {
154
+ return balanceCompare;
155
+ }
134
156
  }
135
- if (get().isTokenPinned(b, options.type)) {
136
- return 1;
157
+
158
+ //3. sort by token popularity
159
+ if (tokenA.isPopular !== tokenB.isPopular) {
160
+ return tokenA.isPopular ? -1 : 1;
137
161
  }
138
162
 
139
- // Check secondary coins
140
- if (a.isSecondaryCoin) {
141
- return 1;
163
+ //4. sort by search phrase
164
+ if (options.searchFor) {
165
+ const symbolSearchForCompare = compareWithSearchFor(
166
+ tokenA,
167
+ tokenB,
168
+ options.searchFor
169
+ );
170
+ if (symbolSearchForCompare) {
171
+ return symbolSearchForCompare;
172
+ }
142
173
  }
143
- if (b.isSecondaryCoin) {
144
- return -1;
174
+
175
+ const blockChainA = blockchainsMapByName.get(tokenA.blockchain);
176
+ const blockChainB = blockchainsMapByName.get(tokenB.blockchain);
177
+
178
+ //5. sort by native token
179
+ const isNativeTokenA = isTokenNative(tokenA, blockChainA);
180
+ const isNativeTokenB = isTokenNative(tokenB, blockChainB);
181
+ if (isNativeTokenA !== isNativeTokenB) {
182
+ return isNativeTokenA ? -1 : 1;
145
183
  }
146
184
 
147
- // Check it has an address or not.
148
- if (!a.address && b.address) {
149
- return -1;
185
+ //6. sort by token isSecondary
186
+ if (tokenA.isSecondaryCoin !== tokenB.isSecondaryCoin) {
187
+ return tokenA.isSecondaryCoin ? 1 : -1;
150
188
  }
151
- if (a.address && !b.address) {
152
- return 1;
189
+
190
+ //7. sort by blockchain order
191
+ if (!!blockChainA && !!blockChainB) {
192
+ return blockChainA.sort - blockChainB.sort;
153
193
  }
154
194
 
155
195
  return 0;
@@ -213,7 +253,11 @@ export const createDataSlice: StateCreator<
213
253
  });
214
254
 
215
255
  set({ fetchStatus: 'success' });
216
- const blockchains: BlockchainMeta[] = [];
256
+ const blockchainsMapByName: Map<string, BlockchainMeta> = new Map<
257
+ string,
258
+ BlockchainMeta
259
+ >();
260
+
217
261
  const tokens: Token[] = [];
218
262
  const popularTokens: Token[] = response.popularTokens;
219
263
  const swappers: SwapperMeta[] = response.swappers;
@@ -226,20 +270,21 @@ export const createDataSlice: StateCreator<
226
270
  tokens.push(token);
227
271
  });
228
272
 
229
- response.blockchains.forEach((blockchain) => {
273
+ const sortedBlockchain = response.blockchains.sort(
274
+ (a, b) => a.sort - b.sort
275
+ );
276
+
277
+ sortedBlockchain.forEach((blockchain) => {
230
278
  if (
231
279
  blockchain.enabled &&
232
280
  blockchainsWithAtLeastOneToken.has(blockchain.name)
233
281
  ) {
234
- blockchains.push(blockchain);
282
+ blockchainsMapByName.set(blockchain.name, blockchain);
235
283
  }
236
284
  });
237
285
 
238
- // Sort
239
- blockchains.sort((a, b) => a.sort - b.sort);
240
-
241
286
  set({
242
- _blockchains: blockchains,
287
+ _blockchainsMapByName: blockchainsMapByName,
243
288
  _tokens: tokens,
244
289
  _popularTokens: popularTokens,
245
290
  _swappers: swappers,
@@ -1,4 +1,13 @@
1
+ import type { Token } from 'rango-sdk';
2
+
1
3
  import { WIDGET_UI_ID } from '../constants';
4
+ import {
5
+ MIN_LENGTH_SYMBOL_CONTAINS,
6
+ MIN_LENGTH_SYMBOL_START_WITH,
7
+ MIN_LENGTH_TOKEN_ADDRESS_CONTAINS,
8
+ MIN_LENGTH_TOKEN_NAME_CONTAINS,
9
+ MIN_LENGTH_TOKEN_NAME_EXACT_MATCH,
10
+ } from '../constants/searchFor';
2
11
 
3
12
  export function removeDuplicateFrom<T>(array: T[]): T[] {
4
13
  return Array.from(new Set(array));
@@ -32,8 +41,180 @@ export function containsText(text: string, searchText: string): boolean {
32
41
  return text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;
33
42
  }
34
43
 
44
+ export function exactText(text: string, searchText: string): boolean {
45
+ return text.toLowerCase() === searchText.toLowerCase();
46
+ }
47
+
48
+ export function startWithText(text: string, searchText: string): boolean {
49
+ return text.toLowerCase().startsWith(searchText.toLowerCase());
50
+ }
51
+
35
52
  export const getContainer = () =>
36
53
  document.getElementById(WIDGET_UI_ID.SWAP_BOX_ID) as HTMLElement;
37
54
 
38
55
  export const getExpanded = () =>
39
56
  document.getElementById(WIDGET_UI_ID.EXPANDED_BOX_ID) as HTMLElement;
57
+
58
+ function compareExactMatchText(
59
+ searchFor: string,
60
+ textA: string | null,
61
+ textB: string | null
62
+ ) {
63
+ const exactMatchA = !!textA && exactText(textA, searchFor);
64
+ const exactMatchB = !!textB && exactText(textB, searchFor);
65
+ if (exactMatchA !== exactMatchB) {
66
+ return exactMatchA ? -1 : 1;
67
+ }
68
+
69
+ return 0;
70
+ }
71
+
72
+ function compareContainsText(
73
+ searchFor: string,
74
+ textA: string | null,
75
+ textB: string | null
76
+ ) {
77
+ const textContainsA = !!textA && containsText(textA, searchFor);
78
+ const textContainsB = !!textB && containsText(textB, searchFor);
79
+ if (textContainsA !== textContainsB) {
80
+ return textContainsA ? -1 : 1;
81
+ }
82
+
83
+ // If both texts contains the searched term, The shorter one has priority
84
+ if (textContainsA && textContainsB && textA?.length !== textB?.length) {
85
+ return textA?.length - textB?.length;
86
+ }
87
+
88
+ return 0;
89
+ }
90
+
91
+ function compareStartWithText(
92
+ searchFor: string,
93
+ textA: string | null,
94
+ textB: string | null
95
+ ) {
96
+ const textStartWithA = !!textA && startWithText(textA, searchFor);
97
+ const textStartWithB = !!textB && startWithText(textB, searchFor);
98
+ if (textStartWithA !== textStartWithB) {
99
+ return textStartWithA ? -1 : 1;
100
+ }
101
+
102
+ // If both texts start with the searched term, The shorter one has priority
103
+ if (textStartWithA && textStartWithB && textA?.length !== textB?.length) {
104
+ return textA?.length - textB?.length;
105
+ }
106
+
107
+ return 0;
108
+ }
109
+
110
+ export function compareWithSearchFor(
111
+ tokenA: Token,
112
+ tokenB: Token,
113
+ searchFor?: string
114
+ ): number {
115
+ if (!searchFor) {
116
+ return 0;
117
+ }
118
+
119
+ // 1: Check the order to exact match the symbol
120
+ const symbolExactMatchCompare = compareExactMatchText(
121
+ searchFor,
122
+ tokenA.symbol,
123
+ tokenB.symbol
124
+ );
125
+ if (symbolExactMatchCompare) {
126
+ return symbolExactMatchCompare;
127
+ }
128
+
129
+ // 2: Check the order to exact match the token name
130
+ if (searchFor.length >= MIN_LENGTH_TOKEN_NAME_EXACT_MATCH) {
131
+ const tokenNameExactMatchCompare = compareExactMatchText(
132
+ searchFor,
133
+ tokenA.name,
134
+ tokenB.name
135
+ );
136
+ if (tokenNameExactMatchCompare) {
137
+ return tokenNameExactMatchCompare;
138
+ }
139
+ }
140
+
141
+ // 3: Check symbol start with searchFor
142
+ if (searchFor.length >= MIN_LENGTH_SYMBOL_START_WITH) {
143
+ const symbolStartWithCompare = compareStartWithText(
144
+ searchFor,
145
+ tokenA.symbol,
146
+ tokenB.symbol
147
+ );
148
+
149
+ if (symbolStartWithCompare) {
150
+ return symbolStartWithCompare;
151
+ }
152
+ }
153
+
154
+ // 4: Check symbol Contains searchFor
155
+ if (searchFor.length >= MIN_LENGTH_SYMBOL_CONTAINS) {
156
+ const symbolContainsCompare = compareContainsText(
157
+ searchFor,
158
+ tokenA.symbol,
159
+ tokenB.symbol
160
+ );
161
+
162
+ if (symbolContainsCompare) {
163
+ return symbolContainsCompare;
164
+ }
165
+ }
166
+
167
+ // 5: Check token name start with searchFor
168
+ if (searchFor.length >= MIN_LENGTH_TOKEN_NAME_CONTAINS) {
169
+ const tokenNameStartWithCompare = compareStartWithText(
170
+ searchFor,
171
+ tokenA.name,
172
+ tokenB.name
173
+ );
174
+
175
+ if (tokenNameStartWithCompare) {
176
+ return tokenNameStartWithCompare;
177
+ }
178
+ }
179
+
180
+ // 6: Check token name Contains searchFor
181
+ if (searchFor.length >= MIN_LENGTH_TOKEN_NAME_CONTAINS) {
182
+ const tokenNameContainsCompare = compareContainsText(
183
+ searchFor,
184
+ tokenA.name,
185
+ tokenB.name
186
+ );
187
+
188
+ if (tokenNameContainsCompare !== 0) {
189
+ return tokenNameContainsCompare;
190
+ }
191
+ }
192
+
193
+ // 7: Check address start with searchFor
194
+ if (searchFor.length >= MIN_LENGTH_TOKEN_ADDRESS_CONTAINS) {
195
+ const addressStartWithCompare = compareStartWithText(
196
+ searchFor,
197
+ tokenA.address,
198
+ tokenB.address
199
+ );
200
+
201
+ if (addressStartWithCompare) {
202
+ return addressStartWithCompare;
203
+ }
204
+ }
205
+
206
+ // 8: Check address Contains searchFor
207
+ if (searchFor.length >= MIN_LENGTH_TOKEN_ADDRESS_CONTAINS) {
208
+ const addressContainCompare = compareContainsText(
209
+ searchFor,
210
+ tokenA.address,
211
+ tokenB.address
212
+ );
213
+
214
+ if (addressContainCompare !== 0) {
215
+ return addressContainCompare;
216
+ }
217
+ }
218
+
219
+ return 0;
220
+ }