@embarkai/ui-kit 0.4.87 → 0.4.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/iframe/index.html +1 -1
- package/dist/iframe/main.js +1 -1
- package/dist/index.cjs +136 -41
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +192 -97
- package/package.json +1 -1
package/dist/iframe/index.html
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<meta http-equiv="X-Content-Type-Options" content="nosniff" />
|
|
16
16
|
<meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin" />
|
|
17
17
|
|
|
18
|
-
<title>EmbarkAI Secure Wallet - iframe version 0.4.
|
|
18
|
+
<title>EmbarkAI Secure Wallet - iframe version 0.4.89</title>
|
|
19
19
|
|
|
20
20
|
<!-- Styles will be injected by build process -->
|
|
21
21
|
<style>
|
package/dist/iframe/main.js
CHANGED
|
@@ -6414,7 +6414,7 @@ var SigningManager = class extends TokenRefreshApiClient {
|
|
|
6414
6414
|
};
|
|
6415
6415
|
|
|
6416
6416
|
// src/iframe/main.ts
|
|
6417
|
-
var IFRAME_VERSION = "0.4.
|
|
6417
|
+
var IFRAME_VERSION = "0.4.89";
|
|
6418
6418
|
var IframeWallet = class {
|
|
6419
6419
|
constructor() {
|
|
6420
6420
|
__publicField(this, "messenger");
|
package/dist/index.cjs
CHANGED
|
@@ -5453,6 +5453,7 @@ var init_useLayoutDataStore = __esm({
|
|
|
5453
5453
|
useLayoutDataStore = (0, import_zustand3.create)((set) => ({
|
|
5454
5454
|
page: null,
|
|
5455
5455
|
pageParams: null,
|
|
5456
|
+
postAuthNavigation: null,
|
|
5456
5457
|
langOpenedFromMenu: null,
|
|
5457
5458
|
walletMenuOpenedFrom: null,
|
|
5458
5459
|
chainMenuOpenedFrom: null,
|
|
@@ -5466,6 +5467,20 @@ var init_useLayoutDataStore = __esm({
|
|
|
5466
5467
|
pendingWalletLogin: null,
|
|
5467
5468
|
isOnboarding: false,
|
|
5468
5469
|
setPageParams: (pageOptions) => set({ pageParams: pageOptions }),
|
|
5470
|
+
setPostAuthNavigation: (postAuthNavigation) => set({ postAuthNavigation }),
|
|
5471
|
+
openPostAuthNavigation: () => {
|
|
5472
|
+
let navigation = null;
|
|
5473
|
+
set((state) => {
|
|
5474
|
+
navigation = state.postAuthNavigation;
|
|
5475
|
+
if (!navigation) return state;
|
|
5476
|
+
return {
|
|
5477
|
+
page: navigation.page,
|
|
5478
|
+
pageParams: navigation.params ?? null,
|
|
5479
|
+
postAuthNavigation: null
|
|
5480
|
+
};
|
|
5481
|
+
});
|
|
5482
|
+
return !!navigation;
|
|
5483
|
+
},
|
|
5469
5484
|
setPage: (page) => set((prev) => ({
|
|
5470
5485
|
page,
|
|
5471
5486
|
// Save the page from which specific menus were opened
|
|
@@ -5496,11 +5511,12 @@ var init_useLayoutDataStore = __esm({
|
|
|
5496
5511
|
});
|
|
5497
5512
|
|
|
5498
5513
|
// src/internal/components/BalanceFeedProvider/constants.ts
|
|
5499
|
-
var BALANCE_POLLING_INTERVAL, NATIVE_BALANCE_QUERY_KEY, CUSTOM_BALANCE_QUERY_KEY, ASSET_RATE_QUERY_KEY, SKIP_SYMBOLS, WRAPPED_TOKENS;
|
|
5514
|
+
var BALANCE_POLLING_INTERVAL, NATIVE_BALANCE_QUERY_KEY, BLOCKSCOUTS_BALANCE_QUERY_KEY, CUSTOM_BALANCE_QUERY_KEY, ASSET_RATE_QUERY_KEY, SKIP_SYMBOLS, WRAPPED_TOKENS;
|
|
5500
5515
|
var init_constants2 = __esm({
|
|
5501
5516
|
"src/internal/components/BalanceFeedProvider/constants.ts"() {
|
|
5502
5517
|
BALANCE_POLLING_INTERVAL = 3e4;
|
|
5503
5518
|
NATIVE_BALANCE_QUERY_KEY = "embarkai-native-balance-query-key";
|
|
5519
|
+
BLOCKSCOUTS_BALANCE_QUERY_KEY = "embarkai-blockscouts-balance-query-key";
|
|
5504
5520
|
CUSTOM_BALANCE_QUERY_KEY = "embarkai-custom-balance-query-key";
|
|
5505
5521
|
ASSET_RATE_QUERY_KEY = "embarkai-asset-rate-query-key";
|
|
5506
5522
|
SKIP_SYMBOLS = ["TEST", "USDT", "P", "$P USDT"];
|
|
@@ -5547,27 +5563,69 @@ var init_useAssetRate = __esm({
|
|
|
5547
5563
|
});
|
|
5548
5564
|
|
|
5549
5565
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
5566
|
+
function isAddress(value) {
|
|
5567
|
+
if (!value) return false;
|
|
5568
|
+
return /^0x[a-fA-F0-9]*/.test(value);
|
|
5569
|
+
}
|
|
5570
|
+
async function getBlockscoutsAssets(embarkaiAddress, blockscoutApiUrl) {
|
|
5571
|
+
const blockscoutClient = (0, import_core.createBlockscoutClient)({ baseUrl: blockscoutApiUrl });
|
|
5572
|
+
const blockscoutTokens = await blockscoutClient.getTokenBalances(embarkaiAddress);
|
|
5573
|
+
return blockscoutTokens.map((el) => ({
|
|
5574
|
+
address: el.token.address_hash,
|
|
5575
|
+
decimals: Number(el.token.decimals),
|
|
5576
|
+
symbol: el.token.symbol
|
|
5577
|
+
}));
|
|
5578
|
+
}
|
|
5579
|
+
function getShowBalanceAsValue(showBalanceAs, chainId) {
|
|
5580
|
+
if (!showBalanceAs || !chainId) return null;
|
|
5581
|
+
if (typeof showBalanceAs === "string") return showBalanceAs;
|
|
5582
|
+
return showBalanceAs[chainId] || null;
|
|
5583
|
+
}
|
|
5550
5584
|
function BalanceFeedProvider() {
|
|
5551
5585
|
const config = useProviderConfig().config;
|
|
5552
5586
|
const embarkaiAddress = useSession((st) => st.address);
|
|
5553
5587
|
const chainConfig = useSession((st) => st.chainConfig);
|
|
5554
5588
|
const publicClient = useSession((st) => st.publicClient);
|
|
5555
5589
|
const [balanceSymbol, setBalanceSymbol] = (0, import_react5.useState)(null);
|
|
5556
|
-
(0, import_react5.
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5560
|
-
|
|
5561
|
-
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5590
|
+
const blockscoutApiUrl = (0, import_react5.useMemo)(() => getBlockscoutApiUrl(chainConfig), [chainConfig]);
|
|
5591
|
+
(0, import_react5.useEffect)(() => {
|
|
5592
|
+
useLayoutDataStore.getState().setCryptoSymbol(chainConfig?.nativeCurrency?.symbol || "LUMIA");
|
|
5593
|
+
const showBalanceAsSymbol = getShowBalanceAsValue(config?.current?.showBalanceAs || null, chainConfig?.id || 0);
|
|
5594
|
+
setBalanceSymbol(showBalanceAsSymbol || chainConfig.nativeCurrency.symbol);
|
|
5595
|
+
}, [config, embarkaiAddress, chainConfig]);
|
|
5596
|
+
const {
|
|
5597
|
+
data: assets,
|
|
5598
|
+
refetch: getBlockscoutsAndWatchAssetList
|
|
5599
|
+
// hack to get updated data inside another useQuery & revalidate the query
|
|
5600
|
+
} = (0, import_react_query2.useQuery)({
|
|
5601
|
+
retry: false,
|
|
5602
|
+
enabled: !!embarkaiAddress && !!blockscoutApiUrl,
|
|
5603
|
+
queryKey: [BLOCKSCOUTS_BALANCE_QUERY_KEY, embarkaiAddress, blockscoutApiUrl],
|
|
5604
|
+
queryFn: async () => {
|
|
5605
|
+
if (!embarkaiAddress || !blockscoutApiUrl) return;
|
|
5606
|
+
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
5607
|
+
address: el.address,
|
|
5608
|
+
decimals: el.decimals,
|
|
5609
|
+
symbol: el.symbol
|
|
5610
|
+
}));
|
|
5611
|
+
const blockscoutAssets = await getBlockscoutsAssets(embarkaiAddress, blockscoutApiUrl);
|
|
5612
|
+
return [...watchTokensList, ...blockscoutAssets];
|
|
5613
|
+
}
|
|
5614
|
+
});
|
|
5615
|
+
const assetUsdtRateSymbol = (0, import_react5.useMemo)(() => {
|
|
5616
|
+
if (!balanceSymbol) return null;
|
|
5617
|
+
if (isAddress(balanceSymbol)) {
|
|
5618
|
+
return assets?.find((el) => el.address === balanceSymbol)?.symbol || null;
|
|
5619
|
+
}
|
|
5620
|
+
return balanceSymbol;
|
|
5621
|
+
}, [assets, balanceSymbol]);
|
|
5622
|
+
const { data: cryptoRate } = useAssetUsdtRate(assetUsdtRateSymbol);
|
|
5565
5623
|
const isNativeBalanceFeedEnabled = !!balanceSymbol && !!chainConfig?.nativeCurrency.symbol && balanceSymbol === chainConfig?.nativeCurrency.symbol;
|
|
5566
5624
|
const { data: nativeBalance } = (0, import_react_query2.useQuery)({
|
|
5567
5625
|
enabled: !!isNativeBalanceFeedEnabled && !!embarkaiAddress && !!publicClient,
|
|
5568
5626
|
retry: false,
|
|
5569
5627
|
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
5570
|
-
queryKey: [NATIVE_BALANCE_QUERY_KEY, embarkaiAddress,
|
|
5628
|
+
queryKey: [NATIVE_BALANCE_QUERY_KEY, embarkaiAddress, balanceSymbol],
|
|
5571
5629
|
// Include chainId in query key to refetch when chain changes
|
|
5572
5630
|
queryFn: async () => {
|
|
5573
5631
|
const balanceValue = await publicClient.getBalance({ address: embarkaiAddress });
|
|
@@ -5621,38 +5679,42 @@ function BalanceFeedProvider() {
|
|
|
5621
5679
|
});
|
|
5622
5680
|
}, [isProjectAssetBalanceEnabled, projectAssetBalance]);
|
|
5623
5681
|
const isCustomAssetBalanceEnabled = !isNativeBalanceFeedEnabled && !isProjectAssetBalanceEnabled;
|
|
5624
|
-
const {
|
|
5682
|
+
const {
|
|
5683
|
+
data: customBalance,
|
|
5684
|
+
isLoading: isCustomBalanceLoading,
|
|
5685
|
+
isError: isCustomBalanceError
|
|
5686
|
+
} = (0, import_react_query2.useQuery)({
|
|
5625
5687
|
enabled: !!isCustomAssetBalanceEnabled && !!balanceSymbol && !!chainConfig?.id && !!embarkaiAddress && !!publicClient,
|
|
5626
5688
|
retry: false,
|
|
5627
5689
|
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
5628
|
-
// staleTime: 0,
|
|
5629
5690
|
queryKey: [CUSTOM_BALANCE_QUERY_KEY, chainConfig?.id, embarkaiAddress, balanceSymbol],
|
|
5630
5691
|
// Include chainId in query key to refetch when chain changes
|
|
5631
5692
|
queryFn: async () => {
|
|
5632
|
-
const blockscoutApiUrl = getBlockscoutApiUrl(chainConfig);
|
|
5633
|
-
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
5634
|
-
address: el.address,
|
|
5635
|
-
decimals: el.decimals,
|
|
5636
|
-
symbol: el.symbol
|
|
5637
|
-
}));
|
|
5638
5693
|
const customAssetList = [];
|
|
5639
5694
|
if (blockscoutApiUrl) {
|
|
5640
|
-
const
|
|
5641
|
-
|
|
5642
|
-
const blockscoutAssets = blockscoutTokens.map((el) => ({
|
|
5643
|
-
address: el.token.address_hash,
|
|
5644
|
-
decimals: Number(el.token.decimals),
|
|
5645
|
-
symbol: el.token.symbol
|
|
5646
|
-
}));
|
|
5647
|
-
customAssetList.push(...watchTokensList, ...blockscoutAssets);
|
|
5695
|
+
const blockscoutAssets = await getBlockscoutsAndWatchAssetList().then((res) => res.data || []);
|
|
5696
|
+
customAssetList.push(...blockscoutAssets);
|
|
5648
5697
|
} else {
|
|
5698
|
+
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
5699
|
+
address: el.address,
|
|
5700
|
+
decimals: el.decimals,
|
|
5701
|
+
symbol: el.symbol
|
|
5702
|
+
}));
|
|
5649
5703
|
const coreTokenList = import_read2.NON_BLOCKSCOUT_CORE_TOKENS[chainConfig?.id] || [];
|
|
5650
5704
|
customAssetList.push(...watchTokensList, ...coreTokenList);
|
|
5651
5705
|
}
|
|
5652
|
-
const {
|
|
5706
|
+
const {
|
|
5707
|
+
address: customAssetAddress,
|
|
5708
|
+
decimals: customAssetDecimals,
|
|
5709
|
+
symbol: customAssetSymbol
|
|
5710
|
+
} = customAssetList.find((el) => {
|
|
5711
|
+
return (isAddress(balanceSymbol) ? el.address : el.symbol) === balanceSymbol;
|
|
5712
|
+
}) || {};
|
|
5653
5713
|
if (!customAssetAddress) {
|
|
5654
5714
|
console.warn(`[BALANCE FEED] No token address found for symbol ${balanceSymbol} on chain ${chainConfig?.name}`);
|
|
5655
|
-
|
|
5715
|
+
throw new Error(
|
|
5716
|
+
`[BALANCE FEED] No token address found for symbol ${balanceSymbol} on chain ${chainConfig?.name}`
|
|
5717
|
+
);
|
|
5656
5718
|
}
|
|
5657
5719
|
const balanceValue = await await publicClient.readContract({
|
|
5658
5720
|
address: customAssetAddress,
|
|
@@ -5662,15 +5724,24 @@ function BalanceFeedProvider() {
|
|
|
5662
5724
|
authorizationList: void 0
|
|
5663
5725
|
});
|
|
5664
5726
|
return {
|
|
5665
|
-
decimals:
|
|
5666
|
-
formatted: (0, import_viem2.formatUnits)(balanceValue,
|
|
5667
|
-
symbol:
|
|
5727
|
+
decimals: customAssetDecimals || 18,
|
|
5728
|
+
formatted: (0, import_viem2.formatUnits)(balanceValue, customAssetDecimals || 18),
|
|
5729
|
+
symbol: customAssetSymbol,
|
|
5668
5730
|
value: balanceValue
|
|
5669
5731
|
};
|
|
5670
5732
|
}
|
|
5671
5733
|
});
|
|
5734
|
+
(0, import_react5.useEffect)(() => {
|
|
5735
|
+
if (!isCustomAssetBalanceEnabled || !!isCustomBalanceLoading) return;
|
|
5736
|
+
if (!!isCustomAssetBalanceEnabled && !isCustomBalanceLoading && !!isCustomBalanceError && !!chainConfig?.id) {
|
|
5737
|
+
setTimeout(() => {
|
|
5738
|
+
setBalanceSymbol(chainConfig.nativeCurrency.symbol);
|
|
5739
|
+
}, 0);
|
|
5740
|
+
}
|
|
5741
|
+
}, [isCustomAssetBalanceEnabled, isCustomBalanceLoading, isCustomBalanceError, chainConfig]);
|
|
5672
5742
|
(0, import_react5.useEffect)(() => {
|
|
5673
5743
|
if (!isCustomAssetBalanceEnabled || !customBalance) return;
|
|
5744
|
+
if (!!isCustomAssetBalanceEnabled && isCustomBalanceLoading) return;
|
|
5674
5745
|
const rate = Number(cryptoRate?.price || "1");
|
|
5675
5746
|
const formattedBalance = Number((0, import_viem2.formatUnits)(BigInt(customBalance?.value || "0"), customBalance?.decimals || 18));
|
|
5676
5747
|
const { setCryptoRate, setFiatBalance, setBalance, setCryptoSymbol, setFiatSymbol } = useLayoutDataStore.getState();
|
|
@@ -5679,7 +5750,14 @@ function BalanceFeedProvider() {
|
|
|
5679
5750
|
setFiatSymbol("USD");
|
|
5680
5751
|
setFiatBalance(formattedBalance * rate);
|
|
5681
5752
|
setBalance(customBalance);
|
|
5682
|
-
}, [
|
|
5753
|
+
}, [
|
|
5754
|
+
isCustomAssetBalanceEnabled,
|
|
5755
|
+
customBalance,
|
|
5756
|
+
cryptoRate,
|
|
5757
|
+
chainConfig,
|
|
5758
|
+
isCustomBalanceError,
|
|
5759
|
+
isCustomBalanceLoading
|
|
5760
|
+
]);
|
|
5683
5761
|
return null;
|
|
5684
5762
|
}
|
|
5685
5763
|
var import_core, import_read2, import_react_query2, import_react5, import_viem2;
|
|
@@ -7062,6 +7140,7 @@ function useAutoConnect() {
|
|
|
7062
7140
|
const stats = await getShareRecoveryStats2();
|
|
7063
7141
|
const hasRecoveryData = stats && (stats.created || stats.devices && stats.devices.length > 0);
|
|
7064
7142
|
setHasServerVault(!!hasRecoveryData);
|
|
7143
|
+
useLayoutDataStore.getState().openPostAuthNavigation();
|
|
7065
7144
|
} catch (e) {
|
|
7066
7145
|
console.warn("[UI-KIT][AutoConnect] Vault status check failed:", e);
|
|
7067
7146
|
}
|
|
@@ -7102,20 +7181,27 @@ function useOpenPage() {
|
|
|
7102
7181
|
const page = useLayoutDataStore((st) => st.page);
|
|
7103
7182
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7104
7183
|
const setPageParams = useLayoutDataStore((st) => st.setPageParams);
|
|
7184
|
+
const setPostAuthNavigation = useLayoutDataStore((st) => st.setPostAuthNavigation);
|
|
7105
7185
|
const address = useSession((st) => st.address);
|
|
7106
7186
|
const open = (0, import_react8.useCallback)(
|
|
7107
7187
|
(passportPage, params) => {
|
|
7108
|
-
if (!address)
|
|
7188
|
+
if (!address) {
|
|
7189
|
+
if (passportPage !== "auth" /* AUTH */) {
|
|
7190
|
+
setPostAuthNavigation({ page: passportPage, params });
|
|
7191
|
+
}
|
|
7192
|
+
return setPage("auth" /* AUTH */);
|
|
7193
|
+
}
|
|
7109
7194
|
if (!!address && passportPage === "auth" /* AUTH */) return setPage("manage-wallet" /* MANAGE_WALLET */);
|
|
7110
7195
|
setPage(passportPage);
|
|
7111
7196
|
if (!!params) setPageParams(params);
|
|
7112
7197
|
},
|
|
7113
|
-
[setPage, setPageParams, address]
|
|
7198
|
+
[setPage, setPageParams, setPostAuthNavigation, address]
|
|
7114
7199
|
);
|
|
7115
7200
|
const close = (0, import_react8.useCallback)(() => {
|
|
7116
7201
|
setPageParams(null);
|
|
7202
|
+
setPostAuthNavigation(null);
|
|
7117
7203
|
setPage(null);
|
|
7118
|
-
}, [setPage, setPageParams]);
|
|
7204
|
+
}, [setPage, setPageParams, setPostAuthNavigation]);
|
|
7119
7205
|
return { open, close, isOpen: page !== null };
|
|
7120
7206
|
}
|
|
7121
7207
|
function usePageParams() {
|
|
@@ -10599,7 +10685,8 @@ function useAuthMenuHandlers() {
|
|
|
10599
10685
|
useLayoutDataStore.getState().setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
10600
10686
|
} else {
|
|
10601
10687
|
useLayoutStore.getState().setIsDialogForced(false);
|
|
10602
|
-
useLayoutDataStore.getState().
|
|
10688
|
+
const didOpenPostAuthNavigation = useLayoutDataStore.getState().openPostAuthNavigation();
|
|
10689
|
+
if (!didOpenPostAuthNavigation) useLayoutDataStore.getState().setPage(null);
|
|
10603
10690
|
}
|
|
10604
10691
|
}, 100);
|
|
10605
10692
|
} catch (error) {
|
|
@@ -11920,6 +12007,7 @@ var init_tokens = __esm({
|
|
|
11920
12007
|
//
|
|
11921
12008
|
"$P USDT": parlayToken_default,
|
|
11922
12009
|
"P": parlayToken_default,
|
|
12010
|
+
"$P": parlayToken_default,
|
|
11923
12011
|
//
|
|
11924
12012
|
"EMBARKAI": embarkAI_default
|
|
11925
12013
|
};
|
|
@@ -18519,7 +18607,8 @@ function useOnRestoreSuccess() {
|
|
|
18519
18607
|
} catch (error) {
|
|
18520
18608
|
console.warn("[UI-KIT][Restore] Error due onAccount callback:", error);
|
|
18521
18609
|
}
|
|
18522
|
-
|
|
18610
|
+
const didOpenPostAuthNavigation = useLayoutDataStore.getState().openPostAuthNavigation();
|
|
18611
|
+
if (!didOpenPostAuthNavigation) setPage(null);
|
|
18523
18612
|
setTimeout(() => {
|
|
18524
18613
|
setIsDialogForced(false);
|
|
18525
18614
|
}, 375);
|
|
@@ -18817,6 +18906,7 @@ function useCreateBackup() {
|
|
|
18817
18906
|
setError(response.error || "Server backup failed");
|
|
18818
18907
|
}
|
|
18819
18908
|
useLayoutStore.getState().setIsDialogForced(false);
|
|
18909
|
+
useLayoutDataStore.getState().openPostAuthNavigation();
|
|
18820
18910
|
},
|
|
18821
18911
|
onError: async (error) => {
|
|
18822
18912
|
const { setError, setSuccess } = useRestoreStore.getState();
|
|
@@ -18948,6 +19038,7 @@ var init_useCreateBackup = __esm({
|
|
|
18948
19038
|
import_react_query27 = require("@tanstack/react-query");
|
|
18949
19039
|
import_react51 = require("react");
|
|
18950
19040
|
init_auth();
|
|
19041
|
+
init_useLayoutDataStore();
|
|
18951
19042
|
init_useLayoutStore();
|
|
18952
19043
|
init_iframe_manager();
|
|
18953
19044
|
init_constants5();
|
|
@@ -22123,7 +22214,7 @@ function BalanceView(props) {
|
|
|
22123
22214
|
const cryptoBalance = Number((0, import_viem9.formatUnits)(balance?.value || BigInt(0), balance?.decimals || 18));
|
|
22124
22215
|
const fiatBalance = useLayoutDataStore((st) => st.fiatBalance);
|
|
22125
22216
|
const fiatSymbol = useLayoutDataStore((st) => st.fiatSymbol);
|
|
22126
|
-
const BalanceIcon = showFiatBalance
|
|
22217
|
+
const BalanceIcon = showFiatBalance ? TOKENS_ICONS[cryptoSymbol] : null;
|
|
22127
22218
|
return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(
|
|
22128
22219
|
"p",
|
|
22129
22220
|
{
|
|
@@ -28707,7 +28798,7 @@ var init_package = __esm({
|
|
|
28707
28798
|
"package.json"() {
|
|
28708
28799
|
package_default = {
|
|
28709
28800
|
name: "@embarkai/ui-kit",
|
|
28710
|
-
version: "0.4.
|
|
28801
|
+
version: "0.4.89",
|
|
28711
28802
|
description: "React UI components and hooks for EmbarkAI authentication and Account Abstraction",
|
|
28712
28803
|
type: "module",
|
|
28713
28804
|
main: "./dist/index.cjs",
|
|
@@ -29372,6 +29463,7 @@ function Dialog2() {
|
|
|
29372
29463
|
const page = useLayoutDataStore((st) => st.page);
|
|
29373
29464
|
const transitionPageHeight = useLayoutDataStore((st) => st.transitionPageHeight);
|
|
29374
29465
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
29466
|
+
const setPostAuthNavigation = useLayoutDataStore((st) => st.setPostAuthNavigation);
|
|
29375
29467
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
29376
29468
|
(0, import_react96.useEffect)(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
29377
29469
|
usePageMapper();
|
|
@@ -29387,7 +29479,10 @@ function Dialog2() {
|
|
|
29387
29479
|
open: isDialogOpen,
|
|
29388
29480
|
onOpenChange: (open) => {
|
|
29389
29481
|
if (isDialogForced) return;
|
|
29390
|
-
if (!open)
|
|
29482
|
+
if (!open) {
|
|
29483
|
+
setPostAuthNavigation(null);
|
|
29484
|
+
setPage(null);
|
|
29485
|
+
}
|
|
29391
29486
|
},
|
|
29392
29487
|
children: /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
29393
29488
|
DialogContent,
|
package/dist/index.d.cts
CHANGED
|
@@ -238,7 +238,7 @@ interface ProviderConfig {
|
|
|
238
238
|
* Display header balance as asset supposed to be used by projects' dApp.
|
|
239
239
|
* Unprovided means 'native' for selected chain.
|
|
240
240
|
*/
|
|
241
|
-
showBalanceAs?: Asset['symbol']
|
|
241
|
+
showBalanceAs?: Asset['symbol'] | Record<number, Asset['symbol']>;
|
|
242
242
|
projectAssets?: {
|
|
243
243
|
assets: ProjectAsset[];
|
|
244
244
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -238,7 +238,7 @@ interface ProviderConfig {
|
|
|
238
238
|
* Display header balance as asset supposed to be used by projects' dApp.
|
|
239
239
|
* Unprovided means 'native' for selected chain.
|
|
240
240
|
*/
|
|
241
|
-
showBalanceAs?: Asset['symbol']
|
|
241
|
+
showBalanceAs?: Asset['symbol'] | Record<number, Asset['symbol']>;
|
|
242
242
|
projectAssets?: {
|
|
243
243
|
assets: ProjectAsset[];
|
|
244
244
|
};
|
package/dist/index.js
CHANGED
|
@@ -5438,6 +5438,7 @@ var init_useLayoutDataStore = __esm({
|
|
|
5438
5438
|
useLayoutDataStore = create3((set) => ({
|
|
5439
5439
|
page: null,
|
|
5440
5440
|
pageParams: null,
|
|
5441
|
+
postAuthNavigation: null,
|
|
5441
5442
|
langOpenedFromMenu: null,
|
|
5442
5443
|
walletMenuOpenedFrom: null,
|
|
5443
5444
|
chainMenuOpenedFrom: null,
|
|
@@ -5451,6 +5452,20 @@ var init_useLayoutDataStore = __esm({
|
|
|
5451
5452
|
pendingWalletLogin: null,
|
|
5452
5453
|
isOnboarding: false,
|
|
5453
5454
|
setPageParams: (pageOptions) => set({ pageParams: pageOptions }),
|
|
5455
|
+
setPostAuthNavigation: (postAuthNavigation) => set({ postAuthNavigation }),
|
|
5456
|
+
openPostAuthNavigation: () => {
|
|
5457
|
+
let navigation = null;
|
|
5458
|
+
set((state) => {
|
|
5459
|
+
navigation = state.postAuthNavigation;
|
|
5460
|
+
if (!navigation) return state;
|
|
5461
|
+
return {
|
|
5462
|
+
page: navigation.page,
|
|
5463
|
+
pageParams: navigation.params ?? null,
|
|
5464
|
+
postAuthNavigation: null
|
|
5465
|
+
};
|
|
5466
|
+
});
|
|
5467
|
+
return !!navigation;
|
|
5468
|
+
},
|
|
5454
5469
|
setPage: (page) => set((prev) => ({
|
|
5455
5470
|
page,
|
|
5456
5471
|
// Save the page from which specific menus were opened
|
|
@@ -5481,11 +5496,12 @@ var init_useLayoutDataStore = __esm({
|
|
|
5481
5496
|
});
|
|
5482
5497
|
|
|
5483
5498
|
// src/internal/components/BalanceFeedProvider/constants.ts
|
|
5484
|
-
var BALANCE_POLLING_INTERVAL, NATIVE_BALANCE_QUERY_KEY, CUSTOM_BALANCE_QUERY_KEY, ASSET_RATE_QUERY_KEY, SKIP_SYMBOLS, WRAPPED_TOKENS;
|
|
5499
|
+
var BALANCE_POLLING_INTERVAL, NATIVE_BALANCE_QUERY_KEY, BLOCKSCOUTS_BALANCE_QUERY_KEY, CUSTOM_BALANCE_QUERY_KEY, ASSET_RATE_QUERY_KEY, SKIP_SYMBOLS, WRAPPED_TOKENS;
|
|
5485
5500
|
var init_constants2 = __esm({
|
|
5486
5501
|
"src/internal/components/BalanceFeedProvider/constants.ts"() {
|
|
5487
5502
|
BALANCE_POLLING_INTERVAL = 3e4;
|
|
5488
5503
|
NATIVE_BALANCE_QUERY_KEY = "embarkai-native-balance-query-key";
|
|
5504
|
+
BLOCKSCOUTS_BALANCE_QUERY_KEY = "embarkai-blockscouts-balance-query-key";
|
|
5489
5505
|
CUSTOM_BALANCE_QUERY_KEY = "embarkai-custom-balance-query-key";
|
|
5490
5506
|
ASSET_RATE_QUERY_KEY = "embarkai-asset-rate-query-key";
|
|
5491
5507
|
SKIP_SYMBOLS = ["TEST", "USDT", "P", "$P USDT"];
|
|
@@ -5537,29 +5553,71 @@ import {
|
|
|
5537
5553
|
} from "@embarkai/core";
|
|
5538
5554
|
import { NON_BLOCKSCOUT_CORE_TOKENS } from "@embarkai/core/read";
|
|
5539
5555
|
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
5540
|
-
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
5556
|
+
import { useEffect as useEffect2, useMemo, useState as useState2 } from "react";
|
|
5541
5557
|
import { erc20Abi, formatUnits } from "viem";
|
|
5558
|
+
function isAddress(value) {
|
|
5559
|
+
if (!value) return false;
|
|
5560
|
+
return /^0x[a-fA-F0-9]*/.test(value);
|
|
5561
|
+
}
|
|
5562
|
+
async function getBlockscoutsAssets(embarkaiAddress, blockscoutApiUrl) {
|
|
5563
|
+
const blockscoutClient = createBlockscoutClient({ baseUrl: blockscoutApiUrl });
|
|
5564
|
+
const blockscoutTokens = await blockscoutClient.getTokenBalances(embarkaiAddress);
|
|
5565
|
+
return blockscoutTokens.map((el) => ({
|
|
5566
|
+
address: el.token.address_hash,
|
|
5567
|
+
decimals: Number(el.token.decimals),
|
|
5568
|
+
symbol: el.token.symbol
|
|
5569
|
+
}));
|
|
5570
|
+
}
|
|
5571
|
+
function getShowBalanceAsValue(showBalanceAs, chainId) {
|
|
5572
|
+
if (!showBalanceAs || !chainId) return null;
|
|
5573
|
+
if (typeof showBalanceAs === "string") return showBalanceAs;
|
|
5574
|
+
return showBalanceAs[chainId] || null;
|
|
5575
|
+
}
|
|
5542
5576
|
function BalanceFeedProvider() {
|
|
5543
5577
|
const config = useProviderConfig().config;
|
|
5544
5578
|
const embarkaiAddress = useSession((st) => st.address);
|
|
5545
5579
|
const chainConfig = useSession((st) => st.chainConfig);
|
|
5546
5580
|
const publicClient = useSession((st) => st.publicClient);
|
|
5547
5581
|
const [balanceSymbol, setBalanceSymbol] = useState2(null);
|
|
5548
|
-
|
|
5549
|
-
|
|
5550
|
-
|
|
5551
|
-
|
|
5552
|
-
|
|
5553
|
-
|
|
5554
|
-
|
|
5555
|
-
|
|
5556
|
-
|
|
5582
|
+
const blockscoutApiUrl = useMemo(() => getBlockscoutApiUrl(chainConfig), [chainConfig]);
|
|
5583
|
+
useEffect2(() => {
|
|
5584
|
+
useLayoutDataStore.getState().setCryptoSymbol(chainConfig?.nativeCurrency?.symbol || "LUMIA");
|
|
5585
|
+
const showBalanceAsSymbol = getShowBalanceAsValue(config?.current?.showBalanceAs || null, chainConfig?.id || 0);
|
|
5586
|
+
setBalanceSymbol(showBalanceAsSymbol || chainConfig.nativeCurrency.symbol);
|
|
5587
|
+
}, [config, embarkaiAddress, chainConfig]);
|
|
5588
|
+
const {
|
|
5589
|
+
data: assets,
|
|
5590
|
+
refetch: getBlockscoutsAndWatchAssetList
|
|
5591
|
+
// hack to get updated data inside another useQuery & revalidate the query
|
|
5592
|
+
} = useQuery2({
|
|
5593
|
+
retry: false,
|
|
5594
|
+
enabled: !!embarkaiAddress && !!blockscoutApiUrl,
|
|
5595
|
+
queryKey: [BLOCKSCOUTS_BALANCE_QUERY_KEY, embarkaiAddress, blockscoutApiUrl],
|
|
5596
|
+
queryFn: async () => {
|
|
5597
|
+
if (!embarkaiAddress || !blockscoutApiUrl) return;
|
|
5598
|
+
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
5599
|
+
address: el.address,
|
|
5600
|
+
decimals: el.decimals,
|
|
5601
|
+
symbol: el.symbol
|
|
5602
|
+
}));
|
|
5603
|
+
const blockscoutAssets = await getBlockscoutsAssets(embarkaiAddress, blockscoutApiUrl);
|
|
5604
|
+
return [...watchTokensList, ...blockscoutAssets];
|
|
5605
|
+
}
|
|
5606
|
+
});
|
|
5607
|
+
const assetUsdtRateSymbol = useMemo(() => {
|
|
5608
|
+
if (!balanceSymbol) return null;
|
|
5609
|
+
if (isAddress(balanceSymbol)) {
|
|
5610
|
+
return assets?.find((el) => el.address === balanceSymbol)?.symbol || null;
|
|
5611
|
+
}
|
|
5612
|
+
return balanceSymbol;
|
|
5613
|
+
}, [assets, balanceSymbol]);
|
|
5614
|
+
const { data: cryptoRate } = useAssetUsdtRate(assetUsdtRateSymbol);
|
|
5557
5615
|
const isNativeBalanceFeedEnabled = !!balanceSymbol && !!chainConfig?.nativeCurrency.symbol && balanceSymbol === chainConfig?.nativeCurrency.symbol;
|
|
5558
5616
|
const { data: nativeBalance } = useQuery2({
|
|
5559
5617
|
enabled: !!isNativeBalanceFeedEnabled && !!embarkaiAddress && !!publicClient,
|
|
5560
5618
|
retry: false,
|
|
5561
5619
|
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
5562
|
-
queryKey: [NATIVE_BALANCE_QUERY_KEY, embarkaiAddress,
|
|
5620
|
+
queryKey: [NATIVE_BALANCE_QUERY_KEY, embarkaiAddress, balanceSymbol],
|
|
5563
5621
|
// Include chainId in query key to refetch when chain changes
|
|
5564
5622
|
queryFn: async () => {
|
|
5565
5623
|
const balanceValue = await publicClient.getBalance({ address: embarkaiAddress });
|
|
@@ -5613,38 +5671,42 @@ function BalanceFeedProvider() {
|
|
|
5613
5671
|
});
|
|
5614
5672
|
}, [isProjectAssetBalanceEnabled, projectAssetBalance]);
|
|
5615
5673
|
const isCustomAssetBalanceEnabled = !isNativeBalanceFeedEnabled && !isProjectAssetBalanceEnabled;
|
|
5616
|
-
const {
|
|
5674
|
+
const {
|
|
5675
|
+
data: customBalance,
|
|
5676
|
+
isLoading: isCustomBalanceLoading,
|
|
5677
|
+
isError: isCustomBalanceError
|
|
5678
|
+
} = useQuery2({
|
|
5617
5679
|
enabled: !!isCustomAssetBalanceEnabled && !!balanceSymbol && !!chainConfig?.id && !!embarkaiAddress && !!publicClient,
|
|
5618
5680
|
retry: false,
|
|
5619
5681
|
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
5620
|
-
// staleTime: 0,
|
|
5621
5682
|
queryKey: [CUSTOM_BALANCE_QUERY_KEY, chainConfig?.id, embarkaiAddress, balanceSymbol],
|
|
5622
5683
|
// Include chainId in query key to refetch when chain changes
|
|
5623
5684
|
queryFn: async () => {
|
|
5624
|
-
const blockscoutApiUrl = getBlockscoutApiUrl(chainConfig);
|
|
5625
|
-
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
5626
|
-
address: el.address,
|
|
5627
|
-
decimals: el.decimals,
|
|
5628
|
-
symbol: el.symbol
|
|
5629
|
-
}));
|
|
5630
5685
|
const customAssetList = [];
|
|
5631
5686
|
if (blockscoutApiUrl) {
|
|
5632
|
-
const
|
|
5633
|
-
|
|
5634
|
-
const blockscoutAssets = blockscoutTokens.map((el) => ({
|
|
5635
|
-
address: el.token.address_hash,
|
|
5636
|
-
decimals: Number(el.token.decimals),
|
|
5637
|
-
symbol: el.token.symbol
|
|
5638
|
-
}));
|
|
5639
|
-
customAssetList.push(...watchTokensList, ...blockscoutAssets);
|
|
5687
|
+
const blockscoutAssets = await getBlockscoutsAndWatchAssetList().then((res) => res.data || []);
|
|
5688
|
+
customAssetList.push(...blockscoutAssets);
|
|
5640
5689
|
} else {
|
|
5690
|
+
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
5691
|
+
address: el.address,
|
|
5692
|
+
decimals: el.decimals,
|
|
5693
|
+
symbol: el.symbol
|
|
5694
|
+
}));
|
|
5641
5695
|
const coreTokenList = NON_BLOCKSCOUT_CORE_TOKENS[chainConfig?.id] || [];
|
|
5642
5696
|
customAssetList.push(...watchTokensList, ...coreTokenList);
|
|
5643
5697
|
}
|
|
5644
|
-
const {
|
|
5698
|
+
const {
|
|
5699
|
+
address: customAssetAddress,
|
|
5700
|
+
decimals: customAssetDecimals,
|
|
5701
|
+
symbol: customAssetSymbol
|
|
5702
|
+
} = customAssetList.find((el) => {
|
|
5703
|
+
return (isAddress(balanceSymbol) ? el.address : el.symbol) === balanceSymbol;
|
|
5704
|
+
}) || {};
|
|
5645
5705
|
if (!customAssetAddress) {
|
|
5646
5706
|
console.warn(`[BALANCE FEED] No token address found for symbol ${balanceSymbol} on chain ${chainConfig?.name}`);
|
|
5647
|
-
|
|
5707
|
+
throw new Error(
|
|
5708
|
+
`[BALANCE FEED] No token address found for symbol ${balanceSymbol} on chain ${chainConfig?.name}`
|
|
5709
|
+
);
|
|
5648
5710
|
}
|
|
5649
5711
|
const balanceValue = await await publicClient.readContract({
|
|
5650
5712
|
address: customAssetAddress,
|
|
@@ -5654,15 +5716,24 @@ function BalanceFeedProvider() {
|
|
|
5654
5716
|
authorizationList: void 0
|
|
5655
5717
|
});
|
|
5656
5718
|
return {
|
|
5657
|
-
decimals:
|
|
5658
|
-
formatted: formatUnits(balanceValue,
|
|
5659
|
-
symbol:
|
|
5719
|
+
decimals: customAssetDecimals || 18,
|
|
5720
|
+
formatted: formatUnits(balanceValue, customAssetDecimals || 18),
|
|
5721
|
+
symbol: customAssetSymbol,
|
|
5660
5722
|
value: balanceValue
|
|
5661
5723
|
};
|
|
5662
5724
|
}
|
|
5663
5725
|
});
|
|
5726
|
+
useEffect2(() => {
|
|
5727
|
+
if (!isCustomAssetBalanceEnabled || !!isCustomBalanceLoading) return;
|
|
5728
|
+
if (!!isCustomAssetBalanceEnabled && !isCustomBalanceLoading && !!isCustomBalanceError && !!chainConfig?.id) {
|
|
5729
|
+
setTimeout(() => {
|
|
5730
|
+
setBalanceSymbol(chainConfig.nativeCurrency.symbol);
|
|
5731
|
+
}, 0);
|
|
5732
|
+
}
|
|
5733
|
+
}, [isCustomAssetBalanceEnabled, isCustomBalanceLoading, isCustomBalanceError, chainConfig]);
|
|
5664
5734
|
useEffect2(() => {
|
|
5665
5735
|
if (!isCustomAssetBalanceEnabled || !customBalance) return;
|
|
5736
|
+
if (!!isCustomAssetBalanceEnabled && isCustomBalanceLoading) return;
|
|
5666
5737
|
const rate = Number(cryptoRate?.price || "1");
|
|
5667
5738
|
const formattedBalance = Number(formatUnits(BigInt(customBalance?.value || "0"), customBalance?.decimals || 18));
|
|
5668
5739
|
const { setCryptoRate, setFiatBalance, setBalance, setCryptoSymbol, setFiatSymbol } = useLayoutDataStore.getState();
|
|
@@ -5671,7 +5742,14 @@ function BalanceFeedProvider() {
|
|
|
5671
5742
|
setFiatSymbol("USD");
|
|
5672
5743
|
setFiatBalance(formattedBalance * rate);
|
|
5673
5744
|
setBalance(customBalance);
|
|
5674
|
-
}, [
|
|
5745
|
+
}, [
|
|
5746
|
+
isCustomAssetBalanceEnabled,
|
|
5747
|
+
customBalance,
|
|
5748
|
+
cryptoRate,
|
|
5749
|
+
chainConfig,
|
|
5750
|
+
isCustomBalanceError,
|
|
5751
|
+
isCustomBalanceLoading
|
|
5752
|
+
]);
|
|
5675
5753
|
return null;
|
|
5676
5754
|
}
|
|
5677
5755
|
var init_BalanceFeedProvider = __esm({
|
|
@@ -7046,6 +7124,7 @@ function useAutoConnect() {
|
|
|
7046
7124
|
const stats = await getShareRecoveryStats2();
|
|
7047
7125
|
const hasRecoveryData = stats && (stats.created || stats.devices && stats.devices.length > 0);
|
|
7048
7126
|
setHasServerVault(!!hasRecoveryData);
|
|
7127
|
+
useLayoutDataStore.getState().openPostAuthNavigation();
|
|
7049
7128
|
} catch (e) {
|
|
7050
7129
|
console.warn("[UI-KIT][AutoConnect] Vault status check failed:", e);
|
|
7051
7130
|
}
|
|
@@ -7085,20 +7164,27 @@ function useOpenPage() {
|
|
|
7085
7164
|
const page = useLayoutDataStore((st) => st.page);
|
|
7086
7165
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
7087
7166
|
const setPageParams = useLayoutDataStore((st) => st.setPageParams);
|
|
7167
|
+
const setPostAuthNavigation = useLayoutDataStore((st) => st.setPostAuthNavigation);
|
|
7088
7168
|
const address = useSession((st) => st.address);
|
|
7089
7169
|
const open = useCallback4(
|
|
7090
7170
|
(passportPage, params) => {
|
|
7091
|
-
if (!address)
|
|
7171
|
+
if (!address) {
|
|
7172
|
+
if (passportPage !== "auth" /* AUTH */) {
|
|
7173
|
+
setPostAuthNavigation({ page: passportPage, params });
|
|
7174
|
+
}
|
|
7175
|
+
return setPage("auth" /* AUTH */);
|
|
7176
|
+
}
|
|
7092
7177
|
if (!!address && passportPage === "auth" /* AUTH */) return setPage("manage-wallet" /* MANAGE_WALLET */);
|
|
7093
7178
|
setPage(passportPage);
|
|
7094
7179
|
if (!!params) setPageParams(params);
|
|
7095
7180
|
},
|
|
7096
|
-
[setPage, setPageParams, address]
|
|
7181
|
+
[setPage, setPageParams, setPostAuthNavigation, address]
|
|
7097
7182
|
);
|
|
7098
7183
|
const close = useCallback4(() => {
|
|
7099
7184
|
setPageParams(null);
|
|
7185
|
+
setPostAuthNavigation(null);
|
|
7100
7186
|
setPage(null);
|
|
7101
|
-
}, [setPage, setPageParams]);
|
|
7187
|
+
}, [setPage, setPageParams, setPostAuthNavigation]);
|
|
7102
7188
|
return { open, close, isOpen: page !== null };
|
|
7103
7189
|
}
|
|
7104
7190
|
function usePageParams() {
|
|
@@ -10571,7 +10657,8 @@ function useAuthMenuHandlers() {
|
|
|
10571
10657
|
useLayoutDataStore.getState().setPage("keysare-backup" /* KEYSARE_BACKUP */);
|
|
10572
10658
|
} else {
|
|
10573
10659
|
useLayoutStore.getState().setIsDialogForced(false);
|
|
10574
|
-
useLayoutDataStore.getState().
|
|
10660
|
+
const didOpenPostAuthNavigation = useLayoutDataStore.getState().openPostAuthNavigation();
|
|
10661
|
+
if (!didOpenPostAuthNavigation) useLayoutDataStore.getState().setPage(null);
|
|
10575
10662
|
}
|
|
10576
10663
|
}, 100);
|
|
10577
10664
|
} catch (error) {
|
|
@@ -10978,7 +11065,7 @@ var init_VerifyStep2 = __esm({
|
|
|
10978
11065
|
|
|
10979
11066
|
// src/internal/components/AuthMenu/AuthMenu.tsx
|
|
10980
11067
|
import { Loader as Loader4 } from "lucide-react";
|
|
10981
|
-
import { useEffect as useEffect12, useMemo } from "react";
|
|
11068
|
+
import { useEffect as useEffect12, useMemo as useMemo2 } from "react";
|
|
10982
11069
|
import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
10983
11070
|
var AuthMenu;
|
|
10984
11071
|
var init_AuthMenu = __esm({
|
|
@@ -11034,7 +11121,7 @@ var init_AuthMenu = __esm({
|
|
|
11034
11121
|
/* @__PURE__ */ jsx23("span", { className: "text-sm text-[var(--ui-kit-fg-muted)]", children: "Initializing wallet..." })
|
|
11035
11122
|
] });
|
|
11036
11123
|
}
|
|
11037
|
-
const stepContent =
|
|
11124
|
+
const stepContent = useMemo2(
|
|
11038
11125
|
() => ({
|
|
11039
11126
|
"loading": /* @__PURE__ */ jsx23(LoadingStep, {}),
|
|
11040
11127
|
"failed": /* @__PURE__ */ jsx23(AuthFailedStep, {}),
|
|
@@ -11211,7 +11298,7 @@ var init_onboarder = __esm({
|
|
|
11211
11298
|
|
|
11212
11299
|
// src/internal/components/Onboarding/OnboardingOverlay.tsx
|
|
11213
11300
|
import { ChevronRightIcon, LoaderIcon, XIcon } from "lucide-react";
|
|
11214
|
-
import { useEffect as useEffect13, useMemo as
|
|
11301
|
+
import { useEffect as useEffect13, useMemo as useMemo3, useState as useState6 } from "react";
|
|
11215
11302
|
import { createPortal as createPortal2 } from "react-dom";
|
|
11216
11303
|
import { jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
11217
11304
|
function getTooltipXPos(params) {
|
|
@@ -11263,7 +11350,7 @@ function OnboardingOverlay() {
|
|
|
11263
11350
|
description,
|
|
11264
11351
|
forced = false
|
|
11265
11352
|
} = onboarder.getCurrentStep() || {};
|
|
11266
|
-
const position =
|
|
11353
|
+
const position = useMemo3(() => {
|
|
11267
11354
|
const posParams = {
|
|
11268
11355
|
x: elRect.x,
|
|
11269
11356
|
y: elRect.y,
|
|
@@ -11885,6 +11972,7 @@ var init_tokens = __esm({
|
|
|
11885
11972
|
//
|
|
11886
11973
|
"$P USDT": parlayToken_default,
|
|
11887
11974
|
"P": parlayToken_default,
|
|
11975
|
+
"$P": parlayToken_default,
|
|
11888
11976
|
//
|
|
11889
11977
|
"EMBARKAI": embarkAI_default
|
|
11890
11978
|
};
|
|
@@ -12040,7 +12128,7 @@ var init_useBuyMenuStore = __esm({
|
|
|
12040
12128
|
// src/internal/components/BuyMenu/components/CryptoSelector.tsx
|
|
12041
12129
|
import { debounce as debounce2, toPairs } from "lodash-es";
|
|
12042
12130
|
import { InfoIcon, PointerIcon, SearchIcon } from "lucide-react";
|
|
12043
|
-
import { useCallback as useCallback11, useMemo as
|
|
12131
|
+
import { useCallback as useCallback11, useMemo as useMemo4, useState as useState8 } from "react";
|
|
12044
12132
|
import { jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
12045
12133
|
function CryptoItem(props) {
|
|
12046
12134
|
const { symbol, network } = props;
|
|
@@ -12084,7 +12172,7 @@ function CryptoSelector(props) {
|
|
|
12084
12172
|
debounce2((value) => setTarget(value), 1e3),
|
|
12085
12173
|
[]
|
|
12086
12174
|
);
|
|
12087
|
-
const filteredCoins =
|
|
12175
|
+
const filteredCoins = useMemo4(() => {
|
|
12088
12176
|
const sorted = [...coins].sort((a, b) => {
|
|
12089
12177
|
const aIdx = POPULAR_CRYPTOS.indexOf(a.symbol.toUpperCase());
|
|
12090
12178
|
const bIdx = POPULAR_CRYPTOS.indexOf(b.symbol.toUpperCase());
|
|
@@ -12262,7 +12350,7 @@ var init_ResolvedFiatIcon = __esm({
|
|
|
12262
12350
|
// src/internal/components/BuyMenu/components/FiatSelector.tsx
|
|
12263
12351
|
import { debounce as debounce3 } from "lodash-es";
|
|
12264
12352
|
import { PointerIcon as PointerIcon2, SearchIcon as SearchIcon2 } from "lucide-react";
|
|
12265
|
-
import { useCallback as useCallback12, useMemo as
|
|
12353
|
+
import { useCallback as useCallback12, useMemo as useMemo5, useState as useState9 } from "react";
|
|
12266
12354
|
import { Fragment as Fragment9, jsx as jsx39, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
12267
12355
|
function getCurrencyName(ticker, locale = "en") {
|
|
12268
12356
|
try {
|
|
@@ -12306,7 +12394,7 @@ function FiatSelector(props) {
|
|
|
12306
12394
|
debounce3((value) => setTarget(value), 1e3),
|
|
12307
12395
|
[]
|
|
12308
12396
|
);
|
|
12309
|
-
const filteredFiats =
|
|
12397
|
+
const filteredFiats = useMemo5(() => {
|
|
12310
12398
|
const sorted = [...fiats].sort((a, b) => {
|
|
12311
12399
|
const aIdx = POPULAR_FIATS.indexOf(a.ticker.toUpperCase());
|
|
12312
12400
|
const bIdx = POPULAR_FIATS.indexOf(b.ticker.toUpperCase());
|
|
@@ -12980,7 +13068,7 @@ var init_statuses = __esm({
|
|
|
12980
13068
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
12981
13069
|
import dayjs from "dayjs";
|
|
12982
13070
|
import { DownloadIcon, ExternalLinkIcon, LoaderIcon as LoaderIcon3 } from "lucide-react";
|
|
12983
|
-
import { useMemo as
|
|
13071
|
+
import { useMemo as useMemo6 } from "react";
|
|
12984
13072
|
import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
12985
13073
|
function getStatusVariant(status) {
|
|
12986
13074
|
switch (status) {
|
|
@@ -13111,7 +13199,7 @@ function BinanceTxHistory() {
|
|
|
13111
13199
|
txStatuses: SHOW_STATUSES
|
|
13112
13200
|
})
|
|
13113
13201
|
});
|
|
13114
|
-
const txList =
|
|
13202
|
+
const txList = useMemo6(
|
|
13115
13203
|
() => historyData?.pages?.map((p) => p.data).flat(Infinity) || [],
|
|
13116
13204
|
[historyData]
|
|
13117
13205
|
);
|
|
@@ -14794,7 +14882,7 @@ import { PAYMASTER_CACHE_TTL_MS } from "@embarkai/core";
|
|
|
14794
14882
|
import { getChainConfig as getChainConfig8, SUPPORTED_MAINNETS as SUPPORTED_MAINNETS2 } from "@embarkai/core/read";
|
|
14795
14883
|
import { useQuery as useQuery5 } from "@tanstack/react-query";
|
|
14796
14884
|
import { ArrowLeft as ArrowLeft4 } from "lucide-react";
|
|
14797
|
-
import { useMemo as
|
|
14885
|
+
import { useMemo as useMemo7, useState as useState11 } from "react";
|
|
14798
14886
|
import { jsx as jsx57, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
14799
14887
|
function ChainsMenu() {
|
|
14800
14888
|
const { t } = useT();
|
|
@@ -14804,7 +14892,7 @@ function ChainsMenu() {
|
|
|
14804
14892
|
const [isTestnets, setIsTestnets] = useState11(false);
|
|
14805
14893
|
const [nextChainId, setNextChainId] = useState11(null);
|
|
14806
14894
|
useOnboardingTourAvailable(true);
|
|
14807
|
-
const visibleNetworks =
|
|
14895
|
+
const visibleNetworks = useMemo7(() => {
|
|
14808
14896
|
return NETWORK_OPTIONS.filter(
|
|
14809
14897
|
(option) => option.isActive && (isTestnets ? true : SUPPORTED_MAINNETS2.includes(option.chainId))
|
|
14810
14898
|
);
|
|
@@ -16361,7 +16449,7 @@ var init_ProviderCard = __esm({
|
|
|
16361
16449
|
// src/internal/components/ManageWalletMenu/ManageWallet.tsx
|
|
16362
16450
|
import { fromPairs } from "lodash-es";
|
|
16363
16451
|
import { ArrowLeft as ArrowLeft6, Loader as Loader9, LoaderIcon as LoaderIcon8 } from "lucide-react";
|
|
16364
|
-
import { useMemo as
|
|
16452
|
+
import { useMemo as useMemo8 } from "react";
|
|
16365
16453
|
import { Fragment as Fragment17, jsx as jsx68, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
16366
16454
|
function getProviderName(provider) {
|
|
16367
16455
|
return PROVIDERS_META[provider].name || provider;
|
|
@@ -16402,7 +16490,7 @@ function ManageWalletMenu() {
|
|
|
16402
16490
|
} = useManageWalletStore();
|
|
16403
16491
|
const configuredProviders = getConfiguredProviders(config.current);
|
|
16404
16492
|
const { data: providers = [], isLoading: isProvidersLoading, error: providersError } = useProvidersList();
|
|
16405
|
-
const renderProviders =
|
|
16493
|
+
const renderProviders = useMemo8(() => {
|
|
16406
16494
|
const normalizeProviderName = (name) => {
|
|
16407
16495
|
if (name === "x") return "twitter";
|
|
16408
16496
|
return name;
|
|
@@ -16718,7 +16806,7 @@ var init_useConnectExternalWalletMenuParams = __esm({
|
|
|
16718
16806
|
// src/internal/components/ConnectExternalWalletMenu/ConnectExternalWalletMenu.tsx
|
|
16719
16807
|
import { useMutation as useMutation11, useQuery as useQuery8, useQueryClient as useQueryClient14 } from "@tanstack/react-query";
|
|
16720
16808
|
import { ArrowLeft as ArrowLeft7, Loader as Loader11, Wallet2Icon as Wallet2Icon2 } from "lucide-react";
|
|
16721
|
-
import { useCallback as useCallback17, useMemo as
|
|
16809
|
+
import { useCallback as useCallback17, useMemo as useMemo9 } from "react";
|
|
16722
16810
|
import { useConnect, useConnection, useConnectors, useDisconnect as useDisconnect2, useSignMessage } from "wagmi";
|
|
16723
16811
|
import { jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
16724
16812
|
function getConnectFlowType(params) {
|
|
@@ -16928,7 +17016,7 @@ function ConnectExternalWalletMenu() {
|
|
|
16928
17016
|
}
|
|
16929
17017
|
}
|
|
16930
17018
|
});
|
|
16931
|
-
const visibleConnectors =
|
|
17019
|
+
const visibleConnectors = useMemo9(() => {
|
|
16932
17020
|
const seen = /* @__PURE__ */ new Set();
|
|
16933
17021
|
const unique = connectors.filter((connector) => {
|
|
16934
17022
|
const skipConnector = seen.has(connector.uid);
|
|
@@ -18466,7 +18554,8 @@ function useOnRestoreSuccess() {
|
|
|
18466
18554
|
} catch (error) {
|
|
18467
18555
|
console.warn("[UI-KIT][Restore] Error due onAccount callback:", error);
|
|
18468
18556
|
}
|
|
18469
|
-
|
|
18557
|
+
const didOpenPostAuthNavigation = useLayoutDataStore.getState().openPostAuthNavigation();
|
|
18558
|
+
if (!didOpenPostAuthNavigation) setPage(null);
|
|
18470
18559
|
setTimeout(() => {
|
|
18471
18560
|
setIsDialogForced(false);
|
|
18472
18561
|
}, 375);
|
|
@@ -18764,6 +18853,7 @@ function useCreateBackup() {
|
|
|
18764
18853
|
setError(response.error || "Server backup failed");
|
|
18765
18854
|
}
|
|
18766
18855
|
useLayoutStore.getState().setIsDialogForced(false);
|
|
18856
|
+
useLayoutDataStore.getState().openPostAuthNavigation();
|
|
18767
18857
|
},
|
|
18768
18858
|
onError: async (error) => {
|
|
18769
18859
|
const { setError, setSuccess } = useRestoreStore.getState();
|
|
@@ -18892,6 +18982,7 @@ var init_useCreateBackup = __esm({
|
|
|
18892
18982
|
"src/internal/components/KeyshareRestoreMenu/hooks/useCreateBackup.ts"() {
|
|
18893
18983
|
init_SessionContext();
|
|
18894
18984
|
init_auth();
|
|
18985
|
+
init_useLayoutDataStore();
|
|
18895
18986
|
init_useLayoutStore();
|
|
18896
18987
|
init_iframe_manager();
|
|
18897
18988
|
init_constants5();
|
|
@@ -19064,7 +19155,7 @@ var init_hooks = __esm({
|
|
|
19064
19155
|
|
|
19065
19156
|
// src/internal/components/KeyshareRestoreMenu/components/MethodSelector.tsx
|
|
19066
19157
|
import { Cloud, Cpu as Cpu3, FileDown, FileUp } from "lucide-react";
|
|
19067
|
-
import { Fragment as Fragment20, useMemo as
|
|
19158
|
+
import { Fragment as Fragment20, useMemo as useMemo10 } from "react";
|
|
19068
19159
|
import { jsx as jsx75, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
19069
19160
|
function MethodSelector(props) {
|
|
19070
19161
|
const { mode = "restore", serverRecoveryStatus } = props;
|
|
@@ -19078,7 +19169,7 @@ function MethodSelector(props) {
|
|
|
19078
19169
|
setError,
|
|
19079
19170
|
setSuccess
|
|
19080
19171
|
} = useRestoreStore();
|
|
19081
|
-
const recoveryRenderMethods =
|
|
19172
|
+
const recoveryRenderMethods = useMemo10(() => {
|
|
19082
19173
|
const methodsWithBackupData = getRecoveryRenderMethods(mode).map((mt) => {
|
|
19083
19174
|
let data = null;
|
|
19084
19175
|
switch (true) {
|
|
@@ -21422,7 +21513,7 @@ var init_NicknameMenu2 = __esm({
|
|
|
21422
21513
|
|
|
21423
21514
|
// src/internal/hooks/useResolvedPublicClient.ts
|
|
21424
21515
|
import { createPublicClientForChain as createPublicClientForChain5, getChainConfig as getChainConfig9 } from "@embarkai/core/read";
|
|
21425
|
-
import { useMemo as
|
|
21516
|
+
import { useMemo as useMemo11 } from "react";
|
|
21426
21517
|
function getCachedPublicClient(chainId) {
|
|
21427
21518
|
const cachedClient = publicClientByChainId.get(chainId);
|
|
21428
21519
|
if (cachedClient) return cachedClient;
|
|
@@ -21436,11 +21527,11 @@ function useResolvedPublicClient(chainId, logScope = "useResolvedPublicClient")
|
|
|
21436
21527
|
const activeChainConfig = useSession((st) => st.chainConfig);
|
|
21437
21528
|
const resolvedChainId = chainId ?? activeChainId;
|
|
21438
21529
|
const shouldUseActiveClient = !chainId || chainId === activeChainId;
|
|
21439
|
-
const chainConfig =
|
|
21530
|
+
const chainConfig = useMemo11(() => {
|
|
21440
21531
|
if (shouldUseActiveClient) return activeChainConfig;
|
|
21441
21532
|
return getChainConfig9(chainId);
|
|
21442
21533
|
}, [activeChainConfig, chainId, shouldUseActiveClient]);
|
|
21443
|
-
const publicClient =
|
|
21534
|
+
const publicClient = useMemo11(() => {
|
|
21444
21535
|
if (shouldUseActiveClient) return activePublicClient;
|
|
21445
21536
|
if (!chainId) return activePublicClient;
|
|
21446
21537
|
try {
|
|
@@ -21521,12 +21612,12 @@ var init_useNativeBalance = __esm({
|
|
|
21521
21612
|
|
|
21522
21613
|
// src/internal/hooks/useBlockscoutAssets/useWatchTokens.ts
|
|
21523
21614
|
import { useQuery as useQuery16 } from "@tanstack/react-query";
|
|
21524
|
-
import { useMemo as
|
|
21615
|
+
import { useMemo as useMemo12 } from "react";
|
|
21525
21616
|
import { erc20Abi as erc20Abi2, formatUnits as formatUnits3 } from "viem";
|
|
21526
21617
|
function useWatchTokens(options) {
|
|
21527
21618
|
const { address, chainId, enabled, publicClient } = options;
|
|
21528
21619
|
const { config } = useProviderConfig();
|
|
21529
|
-
const watchTokens =
|
|
21620
|
+
const watchTokens = useMemo12(() => {
|
|
21530
21621
|
const allWatchTokens = config.current.watchTokens;
|
|
21531
21622
|
const tokensForChain = chainId ? allWatchTokens?.[chainId] || [] : [];
|
|
21532
21623
|
return tokensForChain;
|
|
@@ -21735,7 +21826,7 @@ var init_utils8 = __esm({
|
|
|
21735
21826
|
// src/internal/hooks/useBlockscoutAssets/useBlockscoutAssets.ts
|
|
21736
21827
|
import { createBlockscoutClient as createBlockscoutClient2, nonBlockscoutClient } from "@embarkai/core";
|
|
21737
21828
|
import { useQuery as useQuery17, useQueryClient as useQueryClient20 } from "@tanstack/react-query";
|
|
21738
|
-
import { useCallback as useCallback25, useMemo as
|
|
21829
|
+
import { useCallback as useCallback25, useMemo as useMemo13, useRef as useRef16 } from "react";
|
|
21739
21830
|
function useBlockscoutAssets(options) {
|
|
21740
21831
|
const { address, chainId, enabled = true, detectSecurityTokens = true } = options;
|
|
21741
21832
|
const qc = useQueryClient20();
|
|
@@ -21746,7 +21837,7 @@ function useBlockscoutAssets(options) {
|
|
|
21746
21837
|
tokenBalancesQueryKey: customTokenBalancesQueryKey
|
|
21747
21838
|
} = useProviderConfig().config?.current?.portfolio || {};
|
|
21748
21839
|
const blockscoutApiUrl = getBlockscoutApiUrl(chainConfig);
|
|
21749
|
-
const blockscoutClient =
|
|
21840
|
+
const blockscoutClient = useMemo13(
|
|
21750
21841
|
() => blockscoutApiUrl ? createBlockscoutClient2({ baseUrl: blockscoutApiUrl }) : null,
|
|
21751
21842
|
[blockscoutApiUrl]
|
|
21752
21843
|
);
|
|
@@ -21822,7 +21913,7 @@ function useBlockscoutAssets(options) {
|
|
|
21822
21913
|
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", resolvedChainId, blockscoutApiUrl, address],
|
|
21823
21914
|
queryFn: () => blockscoutClient.getNfts(address)
|
|
21824
21915
|
});
|
|
21825
|
-
const erc20TokenAddresses =
|
|
21916
|
+
const erc20TokenAddresses = useMemo13(() => {
|
|
21826
21917
|
if (!blockscoutItems) return [];
|
|
21827
21918
|
return blockscoutItems.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address_hash);
|
|
21828
21919
|
}, [blockscoutItems]);
|
|
@@ -21867,7 +21958,7 @@ function useBlockscoutAssets(options) {
|
|
|
21867
21958
|
// 1 minute
|
|
21868
21959
|
// gcTime: BLOCKSCOUT_QUERY_GC_TIME,
|
|
21869
21960
|
});
|
|
21870
|
-
const assets =
|
|
21961
|
+
const assets = useMemo13(() => {
|
|
21871
21962
|
const result = [];
|
|
21872
21963
|
const addedAddresses = /* @__PURE__ */ new Set();
|
|
21873
21964
|
if (nativeBalanceData) {
|
|
@@ -21961,7 +22052,7 @@ function useBlockscoutAssets(options) {
|
|
|
21961
22052
|
watchTokenAssets,
|
|
21962
22053
|
chainConfig
|
|
21963
22054
|
]);
|
|
21964
|
-
const nativeBalance =
|
|
22055
|
+
const nativeBalance = useMemo13(() => {
|
|
21965
22056
|
if (!nativeBalanceData) return null;
|
|
21966
22057
|
return {
|
|
21967
22058
|
value: nativeBalanceData.value,
|
|
@@ -21969,7 +22060,7 @@ function useBlockscoutAssets(options) {
|
|
|
21969
22060
|
symbol: nativeBalanceData.symbol
|
|
21970
22061
|
};
|
|
21971
22062
|
}, [nativeBalanceData]);
|
|
21972
|
-
const error =
|
|
22063
|
+
const error = useMemo13(() => {
|
|
21973
22064
|
if (!blockscoutError) return null;
|
|
21974
22065
|
return createError(blockscoutError);
|
|
21975
22066
|
}, [blockscoutError]);
|
|
@@ -22050,7 +22141,7 @@ function BalanceView(props) {
|
|
|
22050
22141
|
const cryptoBalance = Number(formatUnits5(balance?.value || BigInt(0), balance?.decimals || 18));
|
|
22051
22142
|
const fiatBalance = useLayoutDataStore((st) => st.fiatBalance);
|
|
22052
22143
|
const fiatSymbol = useLayoutDataStore((st) => st.fiatSymbol);
|
|
22053
|
-
const BalanceIcon = showFiatBalance
|
|
22144
|
+
const BalanceIcon = showFiatBalance ? TOKENS_ICONS[cryptoSymbol] : null;
|
|
22054
22145
|
return /* @__PURE__ */ jsxs84(
|
|
22055
22146
|
"p",
|
|
22056
22147
|
{
|
|
@@ -22482,7 +22573,7 @@ var init_onboarding_setup7 = __esm({
|
|
|
22482
22573
|
import { useQuery as useQuery19 } from "@tanstack/react-query";
|
|
22483
22574
|
import { ArrowLeft as ArrowLeft18, AtSignIcon as AtSignIcon2, CheckCircle2 as CheckCircle23, Copy as Copy2, FingerprintIcon, LoaderIcon as LoaderIcon12, Wallet2Icon as Wallet2Icon3 } from "lucide-react";
|
|
22484
22575
|
import QRCode from "qrcode";
|
|
22485
|
-
import { useEffect as useEffect37, useMemo as
|
|
22576
|
+
import { useEffect as useEffect37, useMemo as useMemo14, useState as useState22 } from "react";
|
|
22486
22577
|
import { Fragment as Fragment32, jsx as jsx95, jsxs as jsxs87 } from "react/jsx-runtime";
|
|
22487
22578
|
function ReceiveMenu() {
|
|
22488
22579
|
const { t } = useT();
|
|
@@ -22501,7 +22592,7 @@ function ReceiveMenu() {
|
|
|
22501
22592
|
const [isNicknameCopied, setNicknameCopied] = useState22(false);
|
|
22502
22593
|
const [fingerprintCopied, setFingerprintCopied] = useState22(false);
|
|
22503
22594
|
useOnboardingTourAvailable(true);
|
|
22504
|
-
const fingerprint =
|
|
22595
|
+
const fingerprint = useMemo14(() => {
|
|
22505
22596
|
if (!session?.ownerAddress) return null;
|
|
22506
22597
|
try {
|
|
22507
22598
|
return generateFingerprint(session.ownerAddress);
|
|
@@ -23946,7 +24037,7 @@ var init_utils9 = __esm({
|
|
|
23946
24037
|
// src/internal/components/SendMenu/hyperbridge/hooks/useHyperlaneHistory.ts
|
|
23947
24038
|
import { useInfiniteQuery as useInfiniteQuery3 } from "@tanstack/react-query";
|
|
23948
24039
|
import {
|
|
23949
|
-
useMemo as
|
|
24040
|
+
useMemo as useMemo15
|
|
23950
24041
|
} from "react";
|
|
23951
24042
|
function useHyperlaneHistory() {
|
|
23952
24043
|
const address = useSession((st) => st.address);
|
|
@@ -23962,7 +24053,7 @@ function useHyperlaneHistory() {
|
|
|
23962
24053
|
getNextPageParam: (lastPage) => lastPage.page < lastPage.pageCount ? lastPage.page + 1 : void 0,
|
|
23963
24054
|
queryFn: async ({ pageParam }) => await getHyperlaneBridgeHistory({ page: pageParam, pageSize: TX_HISTORY_PAGE_SIZE })
|
|
23964
24055
|
});
|
|
23965
|
-
const txList =
|
|
24056
|
+
const txList = useMemo15(
|
|
23966
24057
|
() => query?.data?.pages?.map((p) => p.data).flat(Infinity) || [],
|
|
23967
24058
|
[query?.data]
|
|
23968
24059
|
);
|
|
@@ -25437,13 +25528,13 @@ var init_HistoryStep = __esm({
|
|
|
25437
25528
|
|
|
25438
25529
|
// src/internal/components/SendMenu/hyperbridge/steps/SelectAssetRoute.tsx
|
|
25439
25530
|
import { ArrowLeftRightIcon as ArrowLeftRightIcon2 } from "lucide-react";
|
|
25440
|
-
import { useMemo as
|
|
25531
|
+
import { useMemo as useMemo16 } from "react";
|
|
25441
25532
|
import { jsx as jsx109, jsxs as jsxs99 } from "react/jsx-runtime";
|
|
25442
25533
|
function SelectAssetRoute(props) {
|
|
25443
25534
|
const { hyperlaneWarpRoutes } = props;
|
|
25444
25535
|
const { t } = useT();
|
|
25445
25536
|
const selectedAssetSymbol = useBridgeStore((st) => st.bridgeAssetSymbol);
|
|
25446
|
-
const tokenList =
|
|
25537
|
+
const tokenList = useMemo16(() => {
|
|
25447
25538
|
const tokens = hyperlaneWarpRoutes.map((route) => route.symbol);
|
|
25448
25539
|
const uniqueTokens = Array.from(new Set(tokens));
|
|
25449
25540
|
return uniqueTokens.map((symbol) => ({
|
|
@@ -25706,7 +25797,7 @@ var init_useErc3643Compliance = __esm({
|
|
|
25706
25797
|
|
|
25707
25798
|
// src/hooks/useNicknameResolve.ts
|
|
25708
25799
|
import { useQuery as useQuery24 } from "@tanstack/react-query";
|
|
25709
|
-
import { useEffect as useEffect43, useMemo as
|
|
25800
|
+
import { useEffect as useEffect43, useMemo as useMemo17, useState as useState24 } from "react";
|
|
25710
25801
|
function looksLikeNickname(input) {
|
|
25711
25802
|
if (!input) return false;
|
|
25712
25803
|
if (input.startsWith("0x")) return false;
|
|
@@ -25746,7 +25837,7 @@ function useNicknameResolve(input, options) {
|
|
|
25746
25837
|
const isNotFound = query.isError && query.error?.code === "NICKNAME_NOT_FOUND";
|
|
25747
25838
|
const isWalletNotSetup = !!query.data && query.data.resolvedTarget === null;
|
|
25748
25839
|
const isFrozen = query.data?.isFrozen ?? false;
|
|
25749
|
-
const fingerprintVerification =
|
|
25840
|
+
const fingerprintVerification = useMemo17(() => {
|
|
25750
25841
|
if (!query.data?.owner || !query.data?.fingerprint) {
|
|
25751
25842
|
return null;
|
|
25752
25843
|
}
|
|
@@ -25781,7 +25872,7 @@ var init_useNicknameResolve = __esm({
|
|
|
25781
25872
|
|
|
25782
25873
|
// src/hooks/useSendTransaction.ts
|
|
25783
25874
|
import { useCallback as useCallback29, useState as useState25 } from "react";
|
|
25784
|
-
import { encodeFunctionData as encodeFunctionData2, isAddress, parseEther as parseEther2, parseUnits } from "viem";
|
|
25875
|
+
import { encodeFunctionData as encodeFunctionData2, isAddress as isAddress2, parseEther as parseEther2, parseUnits } from "viem";
|
|
25785
25876
|
function useSendTransaction() {
|
|
25786
25877
|
const session = useSession((st) => st.session);
|
|
25787
25878
|
const address = useSession((st) => st.address);
|
|
@@ -25794,7 +25885,7 @@ function useSendTransaction() {
|
|
|
25794
25885
|
setError("No active session");
|
|
25795
25886
|
return null;
|
|
25796
25887
|
}
|
|
25797
|
-
if (!
|
|
25888
|
+
if (!isAddress2(params.to)) {
|
|
25798
25889
|
setError("Invalid recipient address");
|
|
25799
25890
|
return null;
|
|
25800
25891
|
}
|
|
@@ -26350,7 +26441,7 @@ var init_useTokenBalance = __esm({
|
|
|
26350
26441
|
|
|
26351
26442
|
// src/internal/components/SendMenu/send/sendSteps/InputSendStep.tsx
|
|
26352
26443
|
import { AlertCircle as AlertCircle4, AtSign as AtSign2, CheckCircle2 as CheckCircle25, Loader as Loader20, Wallet2 as Wallet24 } from "lucide-react";
|
|
26353
|
-
import { formatUnits as formatUnits12, isAddress as
|
|
26444
|
+
import { formatUnits as formatUnits12, isAddress as isAddress3 } from "viem";
|
|
26354
26445
|
import { Fragment as Fragment40, jsx as jsx116, jsxs as jsxs105 } from "react/jsx-runtime";
|
|
26355
26446
|
function InputSendStep(props) {
|
|
26356
26447
|
const { erc3643Compliance, isNicknameInput, resolvedNicknameData, isAssetsLoading } = props;
|
|
@@ -26414,7 +26505,7 @@ function InputSendStep(props) {
|
|
|
26414
26505
|
setError(isNicknameInput ? "Could not resolve nickname" : "Please enter a recipient address");
|
|
26415
26506
|
return false;
|
|
26416
26507
|
}
|
|
26417
|
-
if (!
|
|
26508
|
+
if (!isAddress3(addressToValidate)) {
|
|
26418
26509
|
setError("Invalid recipient address");
|
|
26419
26510
|
return false;
|
|
26420
26511
|
}
|
|
@@ -26762,7 +26853,7 @@ var init_sendSteps = __esm({
|
|
|
26762
26853
|
|
|
26763
26854
|
// src/internal/components/SendMenu/send/SendMenu.tsx
|
|
26764
26855
|
import { CheckCircle2 as CheckCircle26, Loader as Loader27 } from "lucide-react";
|
|
26765
|
-
import { useEffect as useEffect45, useMemo as
|
|
26856
|
+
import { useEffect as useEffect45, useMemo as useMemo18 } from "react";
|
|
26766
26857
|
import { parseUnits as parseUnits2 } from "viem";
|
|
26767
26858
|
import { Fragment as Fragment42, jsx as jsx118, jsxs as jsxs107 } from "react/jsx-runtime";
|
|
26768
26859
|
function SendMenu() {
|
|
@@ -26812,7 +26903,7 @@ function SendMenu() {
|
|
|
26812
26903
|
const isNicknameInput = looksLikeNickname(recipient);
|
|
26813
26904
|
const resolvedNicknameData = useNicknameResolve(recipient, { enabled: isNicknameInput, chainId: activeChainId });
|
|
26814
26905
|
const effectiveAddress = isNicknameInput ? resolvedNicknameData?.resolvedAddress : recipient;
|
|
26815
|
-
const complianceAmount =
|
|
26906
|
+
const complianceAmount = useMemo18(() => {
|
|
26816
26907
|
if (!isSecurity || !amount || !selectedAsset) return void 0;
|
|
26817
26908
|
try {
|
|
26818
26909
|
return parseUnits2(amount, selectedAsset.decimals || 18);
|
|
@@ -26994,7 +27085,7 @@ var init_useSendMenuParams = __esm({
|
|
|
26994
27085
|
|
|
26995
27086
|
// src/internal/components/SendMenu/SendFlowSelector.tsx
|
|
26996
27087
|
import { ArrowLeft as ArrowLeft20, ArrowRightIcon as ArrowRightIcon2, ArrowRightLeftIcon as ArrowRightLeftIcon2 } from "lucide-react";
|
|
26997
|
-
import { useEffect as useEffect47, useMemo as
|
|
27088
|
+
import { useEffect as useEffect47, useMemo as useMemo19 } from "react";
|
|
26998
27089
|
import { jsx as jsx119, jsxs as jsxs108 } from "react/jsx-runtime";
|
|
26999
27090
|
function SelectorFlowButtons() {
|
|
27000
27091
|
const { t } = useT();
|
|
@@ -27066,7 +27157,7 @@ function SendFlowSelector() {
|
|
|
27066
27157
|
if (!!config?.current?.features?.showAssetBridge) return;
|
|
27067
27158
|
if (selectorFlow === "bridge") useFlowSelectorStore.getState().setFlow("send");
|
|
27068
27159
|
}, [selectorFlow]);
|
|
27069
|
-
const availableFlows =
|
|
27160
|
+
const availableFlows = useMemo19(() => {
|
|
27070
27161
|
const selectorFlows = { send: /* @__PURE__ */ jsx119(SendMenu, {}) };
|
|
27071
27162
|
if (!!config?.current?.features?.showAssetBridge) selectorFlows.bridge = /* @__PURE__ */ jsx119(HyperlaneBridge, {});
|
|
27072
27163
|
return selectorFlows;
|
|
@@ -28605,7 +28696,7 @@ var init_package = __esm({
|
|
|
28605
28696
|
"package.json"() {
|
|
28606
28697
|
package_default = {
|
|
28607
28698
|
name: "@embarkai/ui-kit",
|
|
28608
|
-
version: "0.4.
|
|
28699
|
+
version: "0.4.89",
|
|
28609
28700
|
description: "React UI components and hooks for EmbarkAI authentication and Account Abstraction",
|
|
28610
28701
|
type: "module",
|
|
28611
28702
|
main: "./dist/index.cjs",
|
|
@@ -29272,6 +29363,7 @@ function Dialog2() {
|
|
|
29272
29363
|
const page = useLayoutDataStore((st) => st.page);
|
|
29273
29364
|
const transitionPageHeight = useLayoutDataStore((st) => st.transitionPageHeight);
|
|
29274
29365
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
29366
|
+
const setPostAuthNavigation = useLayoutDataStore((st) => st.setPostAuthNavigation);
|
|
29275
29367
|
const { colorMode, isDialogOpen, dialogTitle, dialogDescription, dialogContent, isDialogForced, setIsSettings } = useLayoutStore();
|
|
29276
29368
|
useEffect51(() => setIsSettings(!!session), [session, setIsSettings]);
|
|
29277
29369
|
usePageMapper();
|
|
@@ -29287,7 +29379,10 @@ function Dialog2() {
|
|
|
29287
29379
|
open: isDialogOpen,
|
|
29288
29380
|
onOpenChange: (open) => {
|
|
29289
29381
|
if (isDialogForced) return;
|
|
29290
|
-
if (!open)
|
|
29382
|
+
if (!open) {
|
|
29383
|
+
setPostAuthNavigation(null);
|
|
29384
|
+
setPage(null);
|
|
29385
|
+
}
|
|
29291
29386
|
},
|
|
29292
29387
|
children: /* @__PURE__ */ jsxs116(
|
|
29293
29388
|
DialogContent,
|
|
@@ -31946,7 +32041,7 @@ import {
|
|
|
31946
32041
|
useCallback as useCallback34,
|
|
31947
32042
|
useContext,
|
|
31948
32043
|
useEffect as useEffect53,
|
|
31949
|
-
useMemo as
|
|
32044
|
+
useMemo as useMemo20,
|
|
31950
32045
|
useRef as useRef20
|
|
31951
32046
|
} from "react";
|
|
31952
32047
|
import { WagmiProvider as NativeWagmiProvider } from "wagmi";
|
|
@@ -32059,7 +32154,7 @@ function Provider(props) {
|
|
|
32059
32154
|
console.error("[PROVIDER] Error setting up iframe manager:", error);
|
|
32060
32155
|
}
|
|
32061
32156
|
}, [projectId]);
|
|
32062
|
-
const contextValue =
|
|
32157
|
+
const contextValue = useMemo20(
|
|
32063
32158
|
() => ({
|
|
32064
32159
|
config,
|
|
32065
32160
|
updateConfig,
|
|
@@ -32113,7 +32208,7 @@ init_useUserProfile();
|
|
|
32113
32208
|
init_pro_mode();
|
|
32114
32209
|
init_utils();
|
|
32115
32210
|
import { Cloud as Cloud4, Laptop as Laptop2, Loader as Loader31, Shield as Shield2 } from "lucide-react";
|
|
32116
|
-
import { useEffect as useEffect54, useMemo as
|
|
32211
|
+
import { useEffect as useEffect54, useMemo as useMemo21 } from "react";
|
|
32117
32212
|
import { Fragment as Fragment46, jsx as jsx132, jsxs as jsxs118 } from "react/jsx-runtime";
|
|
32118
32213
|
function getFormattedStatus(label, status, showStatus) {
|
|
32119
32214
|
const isStatus = showStatus && status && status !== "idle" && status !== "ready";
|
|
@@ -32136,7 +32231,7 @@ function ConnectWalletButton(props) {
|
|
|
32136
32231
|
useEffect54(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
|
|
32137
32232
|
const { data: profile, isLoading: isProfileLoading } = useUserProfile();
|
|
32138
32233
|
const displayName = profile?.nicknameDisplay || profile?.displayName || jwtTokenManager2.getDisplayName();
|
|
32139
|
-
const indicators =
|
|
32234
|
+
const indicators = useMemo21(() => {
|
|
32140
32235
|
const userId = session?.mpcUserId;
|
|
32141
32236
|
if (!userId) return { server: false, local: false, backup: false };
|
|
32142
32237
|
const server = jwtTokenManager2.getHasKeyshare() ?? false;
|
|
@@ -33130,7 +33225,7 @@ function useDirectWallet() {
|
|
|
33130
33225
|
// src/hooks/useSendDirectTransaction.ts
|
|
33131
33226
|
init_useExternalWalletStore();
|
|
33132
33227
|
import { useCallback as useCallback39, useState as useState34 } from "react";
|
|
33133
|
-
import { isAddress as
|
|
33228
|
+
import { isAddress as isAddress4, parseEther as parseEther3 } from "viem";
|
|
33134
33229
|
import { useSendTransaction as useWagmiSendTransaction, useSwitchChain as useSwitchChain3 } from "wagmi";
|
|
33135
33230
|
function useSendDirectTransaction() {
|
|
33136
33231
|
const isConnected = useExternalWalletStore((st) => st.isExternalConnected);
|
|
@@ -33146,7 +33241,7 @@ function useSendDirectTransaction() {
|
|
|
33146
33241
|
setError("No external wallet connected");
|
|
33147
33242
|
return null;
|
|
33148
33243
|
}
|
|
33149
|
-
if (!
|
|
33244
|
+
if (!isAddress4(params.to)) {
|
|
33150
33245
|
setError("Invalid recipient address");
|
|
33151
33246
|
return null;
|
|
33152
33247
|
}
|
|
@@ -33186,8 +33281,8 @@ function useSendDirectTransaction() {
|
|
|
33186
33281
|
init_SessionContext();
|
|
33187
33282
|
init_account2();
|
|
33188
33283
|
init_linkedProfiles();
|
|
33189
|
-
import { useCallback as useCallback40, useMemo as
|
|
33190
|
-
import { encodeFunctionData as encodeFunctionData3, isAddress as
|
|
33284
|
+
import { useCallback as useCallback40, useMemo as useMemo22, useState as useState35 } from "react";
|
|
33285
|
+
import { encodeFunctionData as encodeFunctionData3, isAddress as isAddress5, parseEther as parseEther4, parseUnits as parseUnits3 } from "viem";
|
|
33191
33286
|
var ERC20_TRANSFER_ABI2 = [
|
|
33192
33287
|
{
|
|
33193
33288
|
type: "function",
|
|
@@ -33205,7 +33300,7 @@ function useTransferToLinkedWallet() {
|
|
|
33205
33300
|
const [isPending, setIsPending] = useState35(false);
|
|
33206
33301
|
const [error, setError] = useState35(null);
|
|
33207
33302
|
const [userOpHash, setUserOpHash] = useState35(null);
|
|
33208
|
-
const linkedWallets =
|
|
33303
|
+
const linkedWallets = useMemo22(
|
|
33209
33304
|
() => (profiles || []).filter((p) => p.provider === "wallet" && p.externalId).map((p) => p.externalId),
|
|
33210
33305
|
[profiles]
|
|
33211
33306
|
);
|
|
@@ -33216,7 +33311,7 @@ function useTransferToLinkedWallet() {
|
|
|
33216
33311
|
return null;
|
|
33217
33312
|
}
|
|
33218
33313
|
const toAddress = params.toAddress || linkedWallets[0];
|
|
33219
|
-
if (!toAddress || !
|
|
33314
|
+
if (!toAddress || !isAddress5(toAddress)) {
|
|
33220
33315
|
setError("No linked wallet address available");
|
|
33221
33316
|
return null;
|
|
33222
33317
|
}
|