@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.
@@ -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.87</title>
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>
@@ -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.87";
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.useEffect)(
5557
- () => setBalanceSymbol(config?.current?.showBalanceAs || chainConfig.nativeCurrency.symbol),
5558
- [config, embarkaiAddress, chainConfig]
5559
- );
5560
- (0, import_react5.useEffect)(
5561
- () => useLayoutDataStore.getState().setCryptoSymbol(chainConfig?.nativeCurrency?.symbol || "LUMIA"),
5562
- [embarkaiAddress, chainConfig]
5563
- );
5564
- const { data: cryptoRate } = useAssetUsdtRate(balanceSymbol);
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, chainConfig?.nativeCurrency?.symbol],
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 { data: customBalance } = (0, import_react_query2.useQuery)({
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 blockscoutClient = (0, import_core.createBlockscoutClient)({ baseUrl: blockscoutApiUrl });
5641
- const blockscoutTokens = await blockscoutClient.getTokenBalances(embarkaiAddress);
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 { address: customAssetAddress, decimals: customAssetADecimals } = customAssetList.find((el) => el.symbol === balanceSymbol) || {};
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
- return { decimals: 18, formatted: "0", symbol: balanceSymbol, value: BigInt(0) };
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: customAssetADecimals || 18,
5666
- formatted: (0, import_viem2.formatUnits)(balanceValue, customAssetADecimals || 18),
5667
- symbol: balanceSymbol,
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
- }, [isCustomAssetBalanceEnabled, customBalance, cryptoRate]);
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) return setPage("auth" /* AUTH */);
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().setPage(null);
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
- setPage(null);
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 && !!fiatBalance ? TOKENS_ICONS[cryptoSymbol] : null;
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.87",
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) setPage(null);
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
- useEffect2(
5549
- () => setBalanceSymbol(config?.current?.showBalanceAs || chainConfig.nativeCurrency.symbol),
5550
- [config, embarkaiAddress, chainConfig]
5551
- );
5552
- useEffect2(
5553
- () => useLayoutDataStore.getState().setCryptoSymbol(chainConfig?.nativeCurrency?.symbol || "LUMIA"),
5554
- [embarkaiAddress, chainConfig]
5555
- );
5556
- const { data: cryptoRate } = useAssetUsdtRate(balanceSymbol);
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, chainConfig?.nativeCurrency?.symbol],
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 { data: customBalance } = useQuery2({
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 blockscoutClient = createBlockscoutClient({ baseUrl: blockscoutApiUrl });
5633
- const blockscoutTokens = await blockscoutClient.getTokenBalances(embarkaiAddress);
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 { address: customAssetAddress, decimals: customAssetADecimals } = customAssetList.find((el) => el.symbol === balanceSymbol) || {};
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
- return { decimals: 18, formatted: "0", symbol: balanceSymbol, value: BigInt(0) };
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: customAssetADecimals || 18,
5658
- formatted: formatUnits(balanceValue, customAssetADecimals || 18),
5659
- symbol: balanceSymbol,
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
- }, [isCustomAssetBalanceEnabled, customBalance, cryptoRate]);
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) return setPage("auth" /* AUTH */);
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().setPage(null);
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 = useMemo(
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 useMemo2, useState as useState6 } from "react";
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 = useMemo2(() => {
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 useMemo3, useState as useState8 } from "react";
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 = useMemo3(() => {
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 useMemo4, useState as useState9 } from "react";
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 = useMemo4(() => {
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 useMemo5 } from "react";
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 = useMemo5(
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 useMemo6, useState as useState11 } from "react";
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 = useMemo6(() => {
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 useMemo7 } from "react";
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 = useMemo7(() => {
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 useMemo8 } from "react";
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 = useMemo8(() => {
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
- setPage(null);
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 useMemo9 } from "react";
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 = useMemo9(() => {
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 useMemo10 } from "react";
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 = useMemo10(() => {
21530
+ const chainConfig = useMemo11(() => {
21440
21531
  if (shouldUseActiveClient) return activeChainConfig;
21441
21532
  return getChainConfig9(chainId);
21442
21533
  }, [activeChainConfig, chainId, shouldUseActiveClient]);
21443
- const publicClient = useMemo10(() => {
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 useMemo11 } from "react";
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 = useMemo11(() => {
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 useMemo12, useRef as useRef16 } from "react";
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 = useMemo12(
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 = useMemo12(() => {
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 = useMemo12(() => {
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 = useMemo12(() => {
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 = useMemo12(() => {
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 && !!fiatBalance ? TOKENS_ICONS[cryptoSymbol] : null;
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 useMemo13, useState as useState22 } from "react";
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 = useMemo13(() => {
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 useMemo14
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 = useMemo14(
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 useMemo15 } from "react";
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 = useMemo15(() => {
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 useMemo16, useState as useState24 } from "react";
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 = useMemo16(() => {
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 (!isAddress(params.to)) {
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 isAddress2 } from "viem";
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 (!isAddress2(addressToValidate)) {
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 useMemo17 } from "react";
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 = useMemo17(() => {
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 useMemo18 } from "react";
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 = useMemo18(() => {
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.87",
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) setPage(null);
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 useMemo19,
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 = useMemo19(
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 useMemo20 } from "react";
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 = useMemo20(() => {
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 isAddress3, parseEther as parseEther3 } from "viem";
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 (!isAddress3(params.to)) {
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 useMemo21, useState as useState35 } from "react";
33190
- import { encodeFunctionData as encodeFunctionData3, isAddress as isAddress4, parseEther as parseEther4, parseUnits as parseUnits3 } from "viem";
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 = useMemo21(
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 || !isAddress4(toAddress)) {
33314
+ if (!toAddress || !isAddress5(toAddress)) {
33220
33315
  setError("No linked wallet address available");
33221
33316
  return null;
33222
33317
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embarkai/ui-kit",
3
- "version": "0.4.87",
3
+ "version": "0.4.89",
4
4
  "description": "React UI components and hooks for EmbarkAI authentication and Account Abstraction",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",