@embarkai/ui-kit 0.4.59 → 0.4.61
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 +1101 -989
- package/dist/index.d.cts +14 -40
- package/dist/index.d.ts +14 -40
- package/dist/index.js +664 -556
- package/dist/styles.css +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -842,8 +842,8 @@ var init_constants = __esm({
|
|
|
842
842
|
MAX_CONTENT_HEIGHT = 640;
|
|
843
843
|
MAIN_DIALOG_ANIMATION_SPEED = 375;
|
|
844
844
|
Y_ANIMATION_SETUP = { duration: 0.15, ease: "easeInOut", height: { duration: 0.375 } };
|
|
845
|
-
BLOCKSCOUT_QUERY_STALE_TIME =
|
|
846
|
-
BLOCKSCOUT_QUERY_GC_TIME =
|
|
845
|
+
BLOCKSCOUT_QUERY_STALE_TIME = 3e4;
|
|
846
|
+
BLOCKSCOUT_QUERY_GC_TIME = 3e5;
|
|
847
847
|
BLOCKSCOUT_REFRESH_DEBOUNCE = 2e3;
|
|
848
848
|
IPFS_GATEWAY = "https://ipfs.io/ipfs/";
|
|
849
849
|
PROVIDERS_META = {
|
|
@@ -867,31 +867,31 @@ var PageKey, useLayoutDataStore;
|
|
|
867
867
|
var init_useLayoutDataStore = __esm({
|
|
868
868
|
"src/internal/hooks/useLayoutDataStore.ts"() {
|
|
869
869
|
init_constants();
|
|
870
|
-
PageKey = /* @__PURE__ */ ((
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
return
|
|
870
|
+
PageKey = /* @__PURE__ */ ((PageKey3) => {
|
|
871
|
+
PageKey3["AUTH"] = "auth";
|
|
872
|
+
PageKey3["LANGUAGES"] = "languages";
|
|
873
|
+
PageKey3["TERMS_OF_SERVICE"] = "terms-of-service";
|
|
874
|
+
PageKey3["MAIN_MENU"] = "main-menu";
|
|
875
|
+
PageKey3["SETTINGS"] = "settings";
|
|
876
|
+
PageKey3["SEND"] = "send";
|
|
877
|
+
PageKey3["RECEIVE"] = "receive";
|
|
878
|
+
PageKey3["BUY"] = "buy";
|
|
879
|
+
PageKey3["KYC"] = "kyc";
|
|
880
|
+
PageKey3["TRANSACTIONS"] = "transactions";
|
|
881
|
+
PageKey3["ASSETS"] = "assets";
|
|
882
|
+
PageKey3["MANAGE_WALLET"] = "manage-wallet";
|
|
883
|
+
PageKey3["UNLINK_PROVIDER"] = "unlink-provider";
|
|
884
|
+
PageKey3["SECURITY"] = "security";
|
|
885
|
+
PageKey3["KEYSARE_BACKUP"] = "keysare-backup";
|
|
886
|
+
PageKey3["KEYSHARE_RESTORE"] = "keyshare-restore";
|
|
887
|
+
PageKey3["CHAIN"] = "chain";
|
|
888
|
+
PageKey3["CHAIN_SWITCH_REQUEST"] = "chain-switch-request";
|
|
889
|
+
PageKey3["NICKNAME_SETTINGS"] = "nickname-settings";
|
|
890
|
+
PageKey3["DEVICES"] = "devices";
|
|
891
|
+
PageKey3["DEVICE_LINK"] = "device-link";
|
|
892
|
+
PageKey3["DEVICE_MANAGE"] = "device-manage";
|
|
893
|
+
PageKey3["DEVICE_RESTORE"] = "device-restore";
|
|
894
|
+
return PageKey3;
|
|
895
895
|
})(PageKey || {});
|
|
896
896
|
useLayoutDataStore = create((set) => ({
|
|
897
897
|
page: null,
|
|
@@ -934,92 +934,88 @@ var init_useLayoutDataStore = __esm({
|
|
|
934
934
|
});
|
|
935
935
|
|
|
936
936
|
// src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
|
|
937
|
+
import { NON_BLOCKSCOUT_CORE_TOKENS } from "@embarkai/core/read";
|
|
937
938
|
import { useQuery } from "@tanstack/react-query";
|
|
938
939
|
import { useEffect, useState } from "react";
|
|
939
|
-
import { formatUnits } from "viem";
|
|
940
|
+
import { erc20Abi, formatUnits } from "viem";
|
|
940
941
|
async function getAssetRate(symbol = "LUMIA", fiat = "USDT") {
|
|
941
942
|
if (SKIP_SYMBOLS.includes(symbol) || symbol === fiat) return { symbol, price: "1" };
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
943
|
+
try {
|
|
944
|
+
const assetURL = `https://api.binance.com/api/v3/ticker/price?symbol=${symbol.toUpperCase()}${fiat.toUpperCase()}`;
|
|
945
|
+
const response = await fetch(assetURL);
|
|
946
|
+
return await response.json();
|
|
947
|
+
} catch (err) {
|
|
948
|
+
console.warn("[BALANCE FEED] Failed to fetch asset rate:", { symbol, fiat, error: err });
|
|
949
|
+
return { symbol, price: "1" };
|
|
950
|
+
}
|
|
945
951
|
}
|
|
946
952
|
function BalanceFeedProvider() {
|
|
947
953
|
const config = useProviderConfig().config;
|
|
948
954
|
const address = useSession((st) => st.address);
|
|
949
955
|
const chainConfig = useSession((st) => st.chainConfig);
|
|
950
956
|
const publicClient = useSession((st) => st.publicClient);
|
|
951
|
-
const { setCryptoRate, setFiatBalance, setBalance, setCryptoSymbol, setFiatSymbol } = useLayoutDataStore();
|
|
952
957
|
const [balanceSymbol, setBalanceSymbol] = useState(null);
|
|
953
|
-
useEffect(
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
const { data:
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
958
|
+
useEffect(
|
|
959
|
+
() => setBalanceSymbol(config?.current?.showBalanceAs || chainConfig.nativeCurrency.symbol),
|
|
960
|
+
[config, address, chainConfig]
|
|
961
|
+
);
|
|
962
|
+
useEffect(
|
|
963
|
+
() => useLayoutDataStore.getState().setCryptoSymbol(chainConfig?.nativeCurrency?.symbol || "LUMIA"),
|
|
964
|
+
[chainConfig]
|
|
965
|
+
);
|
|
966
|
+
const { data: cryptoRate } = useQuery({
|
|
967
|
+
queryKey: [LUMIA_RATE_QUERY_KEY, address, balanceSymbol],
|
|
968
|
+
enabled: !!address && !!balanceSymbol,
|
|
969
|
+
refetchInterval: BALANCE_POLLING_INTERVAL * 2,
|
|
970
|
+
queryFn: async () => await getAssetRate(balanceSymbol, "USDT")
|
|
971
|
+
});
|
|
972
|
+
const isNativeBalanceFeedEnabled = !!balanceSymbol && !!chainConfig?.nativeCurrency.symbol && balanceSymbol === chainConfig?.nativeCurrency.symbol;
|
|
973
|
+
const { data: nativeBalance } = useQuery({
|
|
974
|
+
enabled: !!isNativeBalanceFeedEnabled && !!address && !!publicClient,
|
|
975
|
+
retry: false,
|
|
965
976
|
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
977
|
+
queryKey: [NATIVE_BALANCE_QUERY_KEY, address, chainConfig?.nativeCurrency?.symbol],
|
|
978
|
+
// Include chainId in query key to refetch when chain changes
|
|
966
979
|
queryFn: async () => {
|
|
967
|
-
if (!address || !publicClient) return null;
|
|
968
980
|
const balanceValue = await publicClient.getBalance({ address });
|
|
969
981
|
return {
|
|
970
982
|
decimals: chainConfig?.nativeCurrency?.decimals || 18,
|
|
971
983
|
formatted: formatUnits(balanceValue, chainConfig?.nativeCurrency?.decimals || 18),
|
|
972
|
-
symbol:
|
|
984
|
+
symbol: chainConfig?.nativeCurrency?.symbol || "LUMIA",
|
|
973
985
|
value: balanceValue
|
|
974
986
|
};
|
|
975
987
|
}
|
|
976
988
|
});
|
|
977
989
|
useEffect(() => {
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
984
|
-
queryFn: async () => getAssetRate(nativeSymbol, "USDT")
|
|
985
|
-
});
|
|
986
|
-
useEffect(() => {
|
|
987
|
-
const rate = cryptoRate ? Number(cryptoRate.price) : null;
|
|
988
|
-
if (!isNativeBalanceFeedEnabled || !balance || !rate) return;
|
|
989
|
-
const fiatBalanceValue = Number(formatUnits(BigInt(balance.value || "0"), balance.decimals || 18));
|
|
990
|
+
if (!isNativeBalanceFeedEnabled) return;
|
|
991
|
+
const nativeSymbol = chainConfig?.nativeCurrency?.symbol || "LUMIA";
|
|
992
|
+
const rate = Number(cryptoRate?.price || "1");
|
|
993
|
+
const formattedBalance = Number(formatUnits(BigInt(nativeBalance?.value || "0"), nativeBalance?.decimals || 18));
|
|
994
|
+
const { setCryptoRate, setFiatBalance, setBalance, setCryptoSymbol, setFiatSymbol } = useLayoutDataStore.getState();
|
|
990
995
|
setCryptoRate(rate);
|
|
991
996
|
setCryptoSymbol(nativeSymbol);
|
|
992
997
|
setFiatSymbol("USD");
|
|
993
|
-
setFiatBalance(
|
|
994
|
-
setBalance(
|
|
995
|
-
}, [
|
|
996
|
-
isNativeBalanceFeedEnabled,
|
|
997
|
-
balance,
|
|
998
|
-
cryptoRate,
|
|
999
|
-
nativeSymbol,
|
|
1000
|
-
setFiatBalance,
|
|
1001
|
-
setCryptoRate,
|
|
1002
|
-
setBalance,
|
|
1003
|
-
setCryptoSymbol,
|
|
1004
|
-
setFiatSymbol
|
|
1005
|
-
]);
|
|
998
|
+
setFiatBalance(formattedBalance * rate);
|
|
999
|
+
setBalance(nativeBalance || { decimals: 18, formatted: "0", symbol: nativeSymbol, value: BigInt(0) });
|
|
1000
|
+
}, [isNativeBalanceFeedEnabled, nativeBalance, cryptoRate, chainConfig]);
|
|
1006
1001
|
const {
|
|
1007
|
-
balanceQuery:
|
|
1008
|
-
balanceQueryKey:
|
|
1009
|
-
symbol:
|
|
1010
|
-
} = config.current?.projectAssets?.assets?.find((a) => a.symbol === config.current?.
|
|
1011
|
-
const
|
|
1012
|
-
const { data:
|
|
1002
|
+
balanceQuery: projectAssetBalanceQueryFn,
|
|
1003
|
+
balanceQueryKey: PROJECT_ASSET_BALANCE_QUERY_KEY,
|
|
1004
|
+
symbol: projectAssetAssetSymbol
|
|
1005
|
+
} = config.current?.projectAssets?.assets?.find((a) => a.symbol === config.current?.showBalanceAs) || {};
|
|
1006
|
+
const isProjectAssetBalanceEnabled = !!balanceSymbol && !!projectAssetAssetSymbol && balanceSymbol === projectAssetAssetSymbol;
|
|
1007
|
+
const { data: projectAssetBalance } = useQuery({
|
|
1013
1008
|
retry: false,
|
|
1014
1009
|
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
1015
|
-
enabled: !!address && !!
|
|
1016
|
-
queryKey:
|
|
1010
|
+
enabled: !!address && !!isProjectAssetBalanceEnabled,
|
|
1011
|
+
queryKey: PROJECT_ASSET_BALANCE_QUERY_KEY,
|
|
1017
1012
|
// should be invalidated by host app via provided queryKey
|
|
1018
|
-
queryFn: async () => await
|
|
1013
|
+
queryFn: async () => await projectAssetBalanceQueryFn?.()
|
|
1019
1014
|
});
|
|
1020
1015
|
useEffect(() => {
|
|
1021
|
-
if (!
|
|
1022
|
-
const { cryptoFiatRate, fiatFormatted, cryptoFormatted, cryptoSymbol, fiatSymbol } =
|
|
1016
|
+
if (!isProjectAssetBalanceEnabled || !projectAssetBalance) return;
|
|
1017
|
+
const { cryptoFiatRate, fiatFormatted, cryptoFormatted, cryptoSymbol, fiatSymbol } = projectAssetBalance;
|
|
1018
|
+
const { setCryptoRate, setFiatBalance, setBalance, setCryptoSymbol, setFiatSymbol } = useLayoutDataStore.getState();
|
|
1023
1019
|
if (!!cryptoSymbol) setCryptoSymbol(cryptoSymbol?.toUpperCase());
|
|
1024
1020
|
if (!!fiatSymbol) setFiatSymbol(fiatSymbol?.toUpperCase());
|
|
1025
1021
|
setCryptoRate(cryptoFiatRate || 1);
|
|
@@ -1027,31 +1023,70 @@ function BalanceFeedProvider() {
|
|
|
1027
1023
|
setBalance({
|
|
1028
1024
|
decimals: 18,
|
|
1029
1025
|
formatted: cryptoFormatted?.toString() || "0",
|
|
1030
|
-
symbol: cryptoSymbol?.toUpperCase()
|
|
1026
|
+
symbol: cryptoSymbol?.toUpperCase(),
|
|
1031
1027
|
value: BigInt(Math.floor((cryptoFormatted || 0) * 10 ** 18))
|
|
1032
1028
|
});
|
|
1033
|
-
}, [
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1029
|
+
}, [isProjectAssetBalanceEnabled, projectAssetBalance]);
|
|
1030
|
+
const isCustomAssetBalanceEnabled = !isNativeBalanceFeedEnabled && !isProjectAssetBalanceEnabled;
|
|
1031
|
+
const { data: customBalance } = useQuery({
|
|
1032
|
+
enabled: !!isCustomAssetBalanceEnabled && !!balanceSymbol && !!chainConfig?.id && !!address && !!publicClient,
|
|
1033
|
+
retry: false,
|
|
1034
|
+
refetchInterval: BALANCE_POLLING_INTERVAL,
|
|
1035
|
+
// staleTime: 0,
|
|
1036
|
+
queryKey: [CUSTOM_BALANCE_QUERY_KEY, chainConfig?.id, address, balanceSymbol],
|
|
1037
|
+
// Include chainId in query key to refetch when chain changes
|
|
1038
|
+
queryFn: async () => {
|
|
1039
|
+
const coreTokenList = NON_BLOCKSCOUT_CORE_TOKENS[chainConfig?.id] || [];
|
|
1040
|
+
const watchTokensList = (config?.current?.watchTokens?.[chainConfig?.id] || []).map((el) => ({
|
|
1041
|
+
address: el.address,
|
|
1042
|
+
decimals: el.decimals,
|
|
1043
|
+
symbol: el.symbol
|
|
1044
|
+
}));
|
|
1045
|
+
const customAssetList = [...watchTokensList, ...coreTokenList];
|
|
1046
|
+
const { address: customAssetAddress, decimals: customAssetADecimals } = customAssetList.find((el) => el.symbol === balanceSymbol) || {};
|
|
1047
|
+
if (!customAssetAddress) {
|
|
1048
|
+
console.warn(`[BALANCE FEED] No token address found for symbol ${balanceSymbol} on chain ${chainConfig?.name}`);
|
|
1049
|
+
return { decimals: 18, formatted: "0", symbol: balanceSymbol, value: BigInt(0) };
|
|
1050
|
+
}
|
|
1051
|
+
const balanceValue = await await publicClient.readContract({
|
|
1052
|
+
address: customAssetAddress,
|
|
1053
|
+
abi: erc20Abi,
|
|
1054
|
+
functionName: "balanceOf",
|
|
1055
|
+
args: [address],
|
|
1056
|
+
authorizationList: void 0
|
|
1057
|
+
});
|
|
1058
|
+
return {
|
|
1059
|
+
decimals: customAssetADecimals || 18,
|
|
1060
|
+
formatted: formatUnits(balanceValue, customAssetADecimals || 18),
|
|
1061
|
+
symbol: balanceSymbol,
|
|
1062
|
+
value: balanceValue
|
|
1063
|
+
};
|
|
1064
|
+
}
|
|
1065
|
+
});
|
|
1066
|
+
useEffect(() => {
|
|
1067
|
+
if (!isCustomAssetBalanceEnabled || !customBalance) return;
|
|
1068
|
+
const rate = Number(cryptoRate?.price || "1");
|
|
1069
|
+
const formattedBalance = Number(formatUnits(BigInt(customBalance?.value || "0"), customBalance?.decimals || 18));
|
|
1070
|
+
const { setCryptoRate, setFiatBalance, setBalance, setCryptoSymbol, setFiatSymbol } = useLayoutDataStore.getState();
|
|
1071
|
+
setCryptoRate(rate);
|
|
1072
|
+
setCryptoSymbol(customBalance.symbol);
|
|
1073
|
+
setFiatSymbol("USD");
|
|
1074
|
+
setFiatBalance(formattedBalance * rate);
|
|
1075
|
+
setBalance(customBalance);
|
|
1076
|
+
}, [isCustomAssetBalanceEnabled, customBalance, cryptoRate]);
|
|
1043
1077
|
return null;
|
|
1044
1078
|
}
|
|
1045
|
-
var BALANCE_POLLING_INTERVAL,
|
|
1079
|
+
var BALANCE_POLLING_INTERVAL, NATIVE_BALANCE_QUERY_KEY, CUSTOM_BALANCE_QUERY_KEY, LUMIA_RATE_QUERY_KEY, SKIP_SYMBOLS;
|
|
1046
1080
|
var init_BalanceFeedProvider = __esm({
|
|
1047
1081
|
"src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx"() {
|
|
1048
1082
|
init_ProviderContext();
|
|
1049
1083
|
init_SessionContext();
|
|
1050
1084
|
init_useLayoutDataStore();
|
|
1051
1085
|
BALANCE_POLLING_INTERVAL = 3e4;
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
LUMIA_RATE_QUERY_KEY = "
|
|
1086
|
+
NATIVE_BALANCE_QUERY_KEY = "embarkai-native-balance-query-key";
|
|
1087
|
+
CUSTOM_BALANCE_QUERY_KEY = "embarkai-custom-balance-query-key";
|
|
1088
|
+
LUMIA_RATE_QUERY_KEY = "lembarkai-root-balance-rate-query-key";
|
|
1089
|
+
SKIP_SYMBOLS = ["TEST", "USDT", "P"];
|
|
1055
1090
|
}
|
|
1056
1091
|
});
|
|
1057
1092
|
|
|
@@ -8816,19 +8851,15 @@ function useBuyMenuParams() {
|
|
|
8816
8851
|
useEffect12(() => {
|
|
8817
8852
|
const { pageParams, setPageParams } = useLayoutDataStore.getState();
|
|
8818
8853
|
if (!pageParams || !keys(pageParams).length) return;
|
|
8819
|
-
const { amount, crypto: crypto2,
|
|
8854
|
+
const { amount, crypto: crypto2, onRampWidgetRedirected } = pageParams || {};
|
|
8820
8855
|
switch (true) {
|
|
8821
8856
|
case !!amount:
|
|
8822
8857
|
useBuyMenuStore.getState().setSrcInputAmount(amount);
|
|
8823
8858
|
useBuyMenuStore.getState().setSrcQueryAmount(amount);
|
|
8824
8859
|
case !!crypto2:
|
|
8825
8860
|
useBuyMenuStore.getState().setSelectedCrypto(crypto2);
|
|
8826
|
-
case !!toWalletAddress:
|
|
8827
|
-
useBuyMenuStore.getState().setToWalletAddress(toWalletAddress);
|
|
8828
8861
|
case !!onRampWidgetRedirected:
|
|
8829
8862
|
useBuyMenuStore.getState().setOnRampWidgetRedirectedFn(onRampWidgetRedirected);
|
|
8830
|
-
case !!confirmationMessage:
|
|
8831
|
-
useBuyMenuStore.getState().setConfirmationMessage(confirmationMessage);
|
|
8832
8863
|
}
|
|
8833
8864
|
setPageParams(null);
|
|
8834
8865
|
}, []);
|
|
@@ -8851,8 +8882,8 @@ var init_useBuyMenuStore = __esm({
|
|
|
8851
8882
|
(set) => ({
|
|
8852
8883
|
renderKey: "default-initial-buy-menu-render-key",
|
|
8853
8884
|
setRenderKey: (key) => set({ renderKey: key }),
|
|
8854
|
-
toWalletAddress: null,
|
|
8855
|
-
setToWalletAddress: (toWalletAddress) => set({ toWalletAddress }),
|
|
8885
|
+
// toWalletAddress: null,
|
|
8886
|
+
// setToWalletAddress: (toWalletAddress) => set({ toWalletAddress }),
|
|
8856
8887
|
/** boolean flags */
|
|
8857
8888
|
isTransactionHistory: false,
|
|
8858
8889
|
setIsTransactionHistory: (isTransactionHistory) => {
|
|
@@ -8904,8 +8935,6 @@ var init_useBuyMenuStore = __esm({
|
|
|
8904
8935
|
/** */
|
|
8905
8936
|
onRampWidgetRedirected: noop,
|
|
8906
8937
|
setOnRampWidgetRedirectedFn: (cb) => set({ onRampWidgetRedirected: cb }),
|
|
8907
|
-
confirmationMessage: null,
|
|
8908
|
-
setConfirmationMessage: (message) => set({ confirmationMessage: message }),
|
|
8909
8938
|
error: null,
|
|
8910
8939
|
setError: (error) => set({ error })
|
|
8911
8940
|
}),
|
|
@@ -9486,61 +9515,6 @@ var init_api = __esm({
|
|
|
9486
9515
|
}
|
|
9487
9516
|
});
|
|
9488
9517
|
|
|
9489
|
-
// src/internal/utils/cn.ts
|
|
9490
|
-
import { clsx as clsx2 } from "clsx";
|
|
9491
|
-
function cn2(...inputs) {
|
|
9492
|
-
return twMerge(clsx2(inputs));
|
|
9493
|
-
}
|
|
9494
|
-
var init_cn = __esm({
|
|
9495
|
-
"src/internal/utils/cn.ts"() {
|
|
9496
|
-
init_bundle_mjs();
|
|
9497
|
-
}
|
|
9498
|
-
});
|
|
9499
|
-
|
|
9500
|
-
// src/internal/components/ui/badge.tsx
|
|
9501
|
-
import { cva as cva2 } from "class-variance-authority";
|
|
9502
|
-
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
9503
|
-
function Badge(props) {
|
|
9504
|
-
const { className, variant = "secondary", size = "default", ...rest } = props;
|
|
9505
|
-
return /* @__PURE__ */ jsx36("span", { ...rest, className: cn2(badgeVariants({ variant, size }), className) });
|
|
9506
|
-
}
|
|
9507
|
-
var badgeVariants;
|
|
9508
|
-
var init_badge = __esm({
|
|
9509
|
-
"src/internal/components/ui/badge.tsx"() {
|
|
9510
|
-
init_cn();
|
|
9511
|
-
badgeVariants = cva2(
|
|
9512
|
-
cn2(
|
|
9513
|
-
//
|
|
9514
|
-
"inline-flex items-center",
|
|
9515
|
-
"border font-semibold",
|
|
9516
|
-
"select-none"
|
|
9517
|
-
),
|
|
9518
|
-
{
|
|
9519
|
-
variants: {
|
|
9520
|
-
variant: {
|
|
9521
|
-
outline: "border-[var(--ui-kit-bd)] bg-transparent text-[var(--ui-kit-fg)]",
|
|
9522
|
-
secondary: "border-[var(--ui-kit-secondary)] bg-[var(--ui-kit-secondary)] text-[var(--ui-kit-fg)]",
|
|
9523
|
-
destructive: "border-[var(--ui-kit-bg-error)] bg-[var(--ui-kit-bg-error)] text-[var(--ui-kit-error)]",
|
|
9524
|
-
success: "border-[var(--ui-kit-bg-success)] bg-[var(--ui-kit-bg-success)] text-[var(--ui-kit-success)]",
|
|
9525
|
-
warning: "border-[var(--ui-kit-bg-warning)] bg-[var(--ui-kit-bg-warning)] text-[var(--ui-kit-warning)]"
|
|
9526
|
-
},
|
|
9527
|
-
size: {
|
|
9528
|
-
default: "h-5 px-2 rounded-full text-[10px] gap-[var(--ui-kit-gap)]",
|
|
9529
|
-
medium: "h-8 px-[var(--ui-kit-pd)] rounded-[var(--ui-kit-el-bdrs)] text-sm gap-[var(--ui-kit-gap)]",
|
|
9530
|
-
large: cn2(
|
|
9531
|
-
"whitespace-nowrap text-sm font-semibold font-sans",
|
|
9532
|
-
"h-12 px-[var(--ui-kit-pd)] rounded-[var(--ui-kit-el-bdrs)]"
|
|
9533
|
-
)
|
|
9534
|
-
}
|
|
9535
|
-
},
|
|
9536
|
-
defaultVariants: {
|
|
9537
|
-
variant: "secondary"
|
|
9538
|
-
}
|
|
9539
|
-
}
|
|
9540
|
-
);
|
|
9541
|
-
}
|
|
9542
|
-
});
|
|
9543
|
-
|
|
9544
9518
|
// src/internal/components/BuyMenu/binance/config.ts
|
|
9545
9519
|
import { BSC_MAINNET_CHAIN_ID, LUMIA_MAINNET_CHAIN_ID } from "@embarkai/core/read";
|
|
9546
9520
|
var CHAIN_ID_TO_BINANCE_NETWORK_TICKER;
|
|
@@ -9556,29 +9530,21 @@ var init_config = __esm({
|
|
|
9556
9530
|
// src/internal/components/BuyMenu/binance/BinanceSummary.tsx
|
|
9557
9531
|
import { useMutation as useMutation5, useQueryClient as useQueryClient3 } from "@tanstack/react-query";
|
|
9558
9532
|
import { InfoIcon as InfoIcon3, LoaderIcon } from "lucide-react";
|
|
9559
|
-
import { jsx as
|
|
9533
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
9560
9534
|
function BinanceSummary(props) {
|
|
9561
9535
|
const { payment } = props;
|
|
9562
9536
|
const qc = useQueryClient3();
|
|
9563
9537
|
const { t } = useT();
|
|
9564
9538
|
const embarkaiAddress = useSession((st) => st.address);
|
|
9565
9539
|
const chainConfig = useSession((st) => st.chainConfig);
|
|
9566
|
-
const {
|
|
9567
|
-
toWalletAddress,
|
|
9568
|
-
selectedFiat,
|
|
9569
|
-
selectedCrypto,
|
|
9570
|
-
srcQueryAmount,
|
|
9571
|
-
redirecting,
|
|
9572
|
-
confirmationMessage,
|
|
9573
|
-
setRedirecting
|
|
9574
|
-
} = useBuyMenuStore();
|
|
9540
|
+
const { selectedFiat, selectedCrypto, srcQueryAmount, redirecting, setRedirecting } = useBuyMenuStore();
|
|
9575
9541
|
const quoteData = useBinanceStore((st) => st.quoteData);
|
|
9576
9542
|
const cryptoToRecieve = Number(quoteData?.totalAmount || "0");
|
|
9577
9543
|
const { mutate: checkoutFundWalletOrder, isPending: isFundWalletOrderCheckouting } = useMutation5({
|
|
9578
9544
|
mutationFn: async () => {
|
|
9579
9545
|
setRedirecting(true);
|
|
9580
9546
|
return await createPreorderMutation({
|
|
9581
|
-
address:
|
|
9547
|
+
address: embarkaiAddress,
|
|
9582
9548
|
amountType: 1,
|
|
9583
9549
|
requestedAmount: String(srcQueryAmount),
|
|
9584
9550
|
fiatCurrency: selectedFiat,
|
|
@@ -9618,14 +9584,14 @@ function BinanceSummary(props) {
|
|
|
9618
9584
|
});
|
|
9619
9585
|
const isContinueDisabled = !!redirecting || !!isFundWalletOrderCheckouting || !quoteData;
|
|
9620
9586
|
if (!quoteData) {
|
|
9621
|
-
return /* @__PURE__ */
|
|
9622
|
-
/* @__PURE__ */
|
|
9623
|
-
/* @__PURE__ */
|
|
9587
|
+
return /* @__PURE__ */ jsx36("div", { className: "w-full flex flex-col gap-[var(--ui-kit-gap)]", children: /* @__PURE__ */ jsxs31(Highlight, { type: "warning", className: "flex gap-[var(--ui-kit-gap)]", children: [
|
|
9588
|
+
/* @__PURE__ */ jsx36(InfoIcon3, { className: "w-4 h-4" }),
|
|
9589
|
+
/* @__PURE__ */ jsx36("span", { children: t("passport:common.errors.oops") })
|
|
9624
9590
|
] }) });
|
|
9625
9591
|
}
|
|
9626
9592
|
return /* @__PURE__ */ jsxs31("div", { className: "w-full flex flex-col gap-[var(--ui-kit-gap)]", children: [
|
|
9627
9593
|
/* @__PURE__ */ jsxs31("div", { className: "flex justify-between text-xs leading-5", children: [
|
|
9628
|
-
/* @__PURE__ */
|
|
9594
|
+
/* @__PURE__ */ jsx36("span", { className: "", children: t("passport:common.amount") }),
|
|
9629
9595
|
/* @__PURE__ */ jsxs31("span", { className: "font-bold", children: [
|
|
9630
9596
|
formatPrice(srcQueryAmount),
|
|
9631
9597
|
" ",
|
|
@@ -9633,7 +9599,7 @@ function BinanceSummary(props) {
|
|
|
9633
9599
|
] })
|
|
9634
9600
|
] }),
|
|
9635
9601
|
/* @__PURE__ */ jsxs31("div", { className: "flex justify-between text-xs leading-5", children: [
|
|
9636
|
-
/* @__PURE__ */
|
|
9602
|
+
/* @__PURE__ */ jsx36("span", { className: "", children: t("passport:buyMenu.summary.youReceive") }),
|
|
9637
9603
|
/* @__PURE__ */ jsxs31("span", { className: "font-bold", children: [
|
|
9638
9604
|
formatPrice(cryptoToRecieve),
|
|
9639
9605
|
" ",
|
|
@@ -9642,7 +9608,7 @@ function BinanceSummary(props) {
|
|
|
9642
9608
|
] }),
|
|
9643
9609
|
/* @__PURE__ */ jsxs31(Highlight, { type: "info", className: "", children: [
|
|
9644
9610
|
/* @__PURE__ */ jsxs31("p", { className: "flex justify-between gap-[var(--ui-kit-gap)] leading-5", children: [
|
|
9645
|
-
/* @__PURE__ */
|
|
9611
|
+
/* @__PURE__ */ jsx36("span", { children: t("passport:buyMenu.summary.networkFee") }),
|
|
9646
9612
|
/* @__PURE__ */ jsxs31("strong", { children: [
|
|
9647
9613
|
formatPrice(Number(quoteData?.networkFee || "0")),
|
|
9648
9614
|
" ",
|
|
@@ -9650,7 +9616,7 @@ function BinanceSummary(props) {
|
|
|
9650
9616
|
] })
|
|
9651
9617
|
] }),
|
|
9652
9618
|
/* @__PURE__ */ jsxs31("p", { className: "flex justify-between gap-[var(--ui-kit-gap)] leading-5", children: [
|
|
9653
|
-
/* @__PURE__ */
|
|
9619
|
+
/* @__PURE__ */ jsx36("span", { children: t("passport:buyMenu.summary.serviceFee") }),
|
|
9654
9620
|
/* @__PURE__ */ jsxs31("strong", { children: [
|
|
9655
9621
|
formatPrice(Number(quoteData?.feeAmount || "0")),
|
|
9656
9622
|
" ",
|
|
@@ -9658,16 +9624,8 @@ function BinanceSummary(props) {
|
|
|
9658
9624
|
] })
|
|
9659
9625
|
] }),
|
|
9660
9626
|
/* @__PURE__ */ jsxs31("p", { className: "flex justify-between gap-[var(--ui-kit-gap)] leading-5", children: [
|
|
9661
|
-
/* @__PURE__ */
|
|
9662
|
-
/* @__PURE__ */
|
|
9663
|
-
] })
|
|
9664
|
-
] }),
|
|
9665
|
-
toWalletAddress && /* @__PURE__ */ jsxs31(Highlight, { type: "warning", children: [
|
|
9666
|
-
/* @__PURE__ */ jsx37("p", { className: "font-bold leading-6", children: t("passport:buyMenu.summary.toAddress.receiver") }),
|
|
9667
|
-
/* @__PURE__ */ jsx37(Badge, { variant: "secondary", size: "medium", className: "w-full text-center justify-center text-[10px]", children: /* @__PURE__ */ jsx37("span", { className: "truncate leading-4", children: toWalletAddress }) }),
|
|
9668
|
-
!!confirmationMessage ? /* @__PURE__ */ jsx37("p", { className: "leading-5", children: confirmationMessage }) : /* @__PURE__ */ jsxs31("p", { className: "leading-4", children: [
|
|
9669
|
-
/* @__PURE__ */ jsx37("span", { children: t("passport:buyMenu.summary.toAddress.message") }),
|
|
9670
|
-
/* @__PURE__ */ jsx37("span", { children: t("passport:buyMenu.summary.toAddress.suggestion") })
|
|
9627
|
+
/* @__PURE__ */ jsx36("span", { children: t("passport:buyMenu.selectPaymentMode") }),
|
|
9628
|
+
/* @__PURE__ */ jsx36("strong", { children: payment?.paymentMethod?.toUpperCase() })
|
|
9671
9629
|
] })
|
|
9672
9630
|
] }),
|
|
9673
9631
|
/* @__PURE__ */ jsxs31(
|
|
@@ -9679,8 +9637,8 @@ function BinanceSummary(props) {
|
|
|
9679
9637
|
variant: "default",
|
|
9680
9638
|
onClick: () => checkoutFundWalletOrder(),
|
|
9681
9639
|
children: [
|
|
9682
|
-
redirecting && /* @__PURE__ */
|
|
9683
|
-
/* @__PURE__ */
|
|
9640
|
+
redirecting && /* @__PURE__ */ jsx36(LoaderIcon, { size: 16, className: "animate-spin" }),
|
|
9641
|
+
/* @__PURE__ */ jsx36("span", { children: redirecting ? "REDIRECTING..." : String(t("passport:buyMenu.actions.confirmPurchase")).toUpperCase() }),
|
|
9684
9642
|
!!quoteData?.totalAmount && /* @__PURE__ */ jsxs31("strong", { children: [
|
|
9685
9643
|
formatPrice(Number(quoteData.totalAmount)),
|
|
9686
9644
|
" ",
|
|
@@ -9697,7 +9655,6 @@ var init_BinanceSummary = __esm({
|
|
|
9697
9655
|
init_SessionContext();
|
|
9698
9656
|
init_i18n();
|
|
9699
9657
|
init_priceFormatter();
|
|
9700
|
-
init_badge();
|
|
9701
9658
|
init_button();
|
|
9702
9659
|
init_highlight();
|
|
9703
9660
|
init_contants();
|
|
@@ -9709,6 +9666,61 @@ var init_BinanceSummary = __esm({
|
|
|
9709
9666
|
}
|
|
9710
9667
|
});
|
|
9711
9668
|
|
|
9669
|
+
// src/internal/utils/cn.ts
|
|
9670
|
+
import { clsx as clsx2 } from "clsx";
|
|
9671
|
+
function cn2(...inputs) {
|
|
9672
|
+
return twMerge(clsx2(inputs));
|
|
9673
|
+
}
|
|
9674
|
+
var init_cn = __esm({
|
|
9675
|
+
"src/internal/utils/cn.ts"() {
|
|
9676
|
+
init_bundle_mjs();
|
|
9677
|
+
}
|
|
9678
|
+
});
|
|
9679
|
+
|
|
9680
|
+
// src/internal/components/ui/badge.tsx
|
|
9681
|
+
import { cva as cva2 } from "class-variance-authority";
|
|
9682
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
9683
|
+
function Badge(props) {
|
|
9684
|
+
const { className, variant = "secondary", size = "default", ...rest } = props;
|
|
9685
|
+
return /* @__PURE__ */ jsx37("span", { ...rest, className: cn2(badgeVariants({ variant, size }), className) });
|
|
9686
|
+
}
|
|
9687
|
+
var badgeVariants;
|
|
9688
|
+
var init_badge = __esm({
|
|
9689
|
+
"src/internal/components/ui/badge.tsx"() {
|
|
9690
|
+
init_cn();
|
|
9691
|
+
badgeVariants = cva2(
|
|
9692
|
+
cn2(
|
|
9693
|
+
//
|
|
9694
|
+
"inline-flex items-center",
|
|
9695
|
+
"border font-semibold",
|
|
9696
|
+
"select-none"
|
|
9697
|
+
),
|
|
9698
|
+
{
|
|
9699
|
+
variants: {
|
|
9700
|
+
variant: {
|
|
9701
|
+
outline: "border-[var(--ui-kit-bd)] bg-transparent text-[var(--ui-kit-fg)]",
|
|
9702
|
+
secondary: "border-[var(--ui-kit-secondary)] bg-[var(--ui-kit-secondary)] text-[var(--ui-kit-fg)]",
|
|
9703
|
+
destructive: "border-[var(--ui-kit-bg-error)] bg-[var(--ui-kit-bg-error)] text-[var(--ui-kit-error)]",
|
|
9704
|
+
success: "border-[var(--ui-kit-bg-success)] bg-[var(--ui-kit-bg-success)] text-[var(--ui-kit-success)]",
|
|
9705
|
+
warning: "border-[var(--ui-kit-bg-warning)] bg-[var(--ui-kit-bg-warning)] text-[var(--ui-kit-warning)]"
|
|
9706
|
+
},
|
|
9707
|
+
size: {
|
|
9708
|
+
default: "h-5 px-2 rounded-full text-[10px] gap-[var(--ui-kit-gap)]",
|
|
9709
|
+
medium: "h-8 px-[var(--ui-kit-pd)] rounded-[var(--ui-kit-el-bdrs)] text-sm gap-[var(--ui-kit-gap)]",
|
|
9710
|
+
large: cn2(
|
|
9711
|
+
"whitespace-nowrap text-sm font-semibold font-sans",
|
|
9712
|
+
"h-12 px-[var(--ui-kit-pd)] rounded-[var(--ui-kit-el-bdrs)]"
|
|
9713
|
+
)
|
|
9714
|
+
}
|
|
9715
|
+
},
|
|
9716
|
+
defaultVariants: {
|
|
9717
|
+
variant: "secondary"
|
|
9718
|
+
}
|
|
9719
|
+
}
|
|
9720
|
+
);
|
|
9721
|
+
}
|
|
9722
|
+
});
|
|
9723
|
+
|
|
9712
9724
|
// src/internal/components/BuyMenu/binance/statuses.ts
|
|
9713
9725
|
import { values } from "lodash-es";
|
|
9714
9726
|
var STATUS_CODE_TO_MESSAGE, STATUSES_FILTERS;
|
|
@@ -10017,10 +10029,10 @@ var init_BinanceTxHistory = __esm({
|
|
|
10017
10029
|
|
|
10018
10030
|
// src/internal/components/BuyMenu/binance/useBinanceSseTracing.ts
|
|
10019
10031
|
import { useQueryClient as useQueryClient4 } from "@tanstack/react-query";
|
|
10020
|
-
import { useEffect as useEffect14, useRef as
|
|
10032
|
+
import { useEffect as useEffect14, useRef as useRef9 } from "react";
|
|
10021
10033
|
function useBinanceSseTxTracing(walletAddress) {
|
|
10022
10034
|
const qc = useQueryClient4();
|
|
10023
|
-
const debounceRef =
|
|
10035
|
+
const debounceRef = useRef9(null);
|
|
10024
10036
|
useEffect14(() => {
|
|
10025
10037
|
if (!walletAddress) return;
|
|
10026
10038
|
const iframeManager = getIframeManager();
|
|
@@ -10674,10 +10686,10 @@ var init_networks = __esm({
|
|
|
10674
10686
|
|
|
10675
10687
|
// src/internal/components/BuyMenu/finchpay/useFinchpaySseTxTracing.ts
|
|
10676
10688
|
import { useQueryClient as useQueryClient6 } from "@tanstack/react-query";
|
|
10677
|
-
import { useEffect as useEffect16, useRef as
|
|
10689
|
+
import { useEffect as useEffect16, useRef as useRef10 } from "react";
|
|
10678
10690
|
function useFinchpaySseTxTracing(walletAddress) {
|
|
10679
10691
|
const qc = useQueryClient6();
|
|
10680
|
-
const debounceRef =
|
|
10692
|
+
const debounceRef = useRef10(null);
|
|
10681
10693
|
useEffect16(() => {
|
|
10682
10694
|
if (!walletAddress) return;
|
|
10683
10695
|
const iframeManager = getIframeManager();
|
|
@@ -11105,7 +11117,7 @@ var init_ProviderSelector = __esm({
|
|
|
11105
11117
|
});
|
|
11106
11118
|
|
|
11107
11119
|
// src/internal/components/BuyMenu/useHandleInputAmount.ts
|
|
11108
|
-
import { useEffect as useEffect18, useRef as
|
|
11120
|
+
import { useEffect as useEffect18, useRef as useRef11 } from "react";
|
|
11109
11121
|
var ON_INPUT_QUERY_DELAY, useHandleInputAmount;
|
|
11110
11122
|
var init_useHandleInputAmount = __esm({
|
|
11111
11123
|
"src/internal/components/BuyMenu/useHandleInputAmount.ts"() {
|
|
@@ -11113,11 +11125,11 @@ var init_useHandleInputAmount = __esm({
|
|
|
11113
11125
|
init_useBuyMenuStore();
|
|
11114
11126
|
ON_INPUT_QUERY_DELAY = 1500;
|
|
11115
11127
|
useHandleInputAmount = () => {
|
|
11116
|
-
const lastRampProviderRef =
|
|
11128
|
+
const lastRampProviderRef = useRef11(DEFAULT_PROVIDER2);
|
|
11117
11129
|
const rampProvider = useBuyMenuStore((st) => st.rampProvider);
|
|
11118
11130
|
const srcInputAmount = useBuyMenuStore((st) => st.srcInputAmount);
|
|
11119
11131
|
const minAmount = useBuyMenuStore((st) => st.minAmount);
|
|
11120
|
-
const queryAmountTimer =
|
|
11132
|
+
const queryAmountTimer = useRef11(null);
|
|
11121
11133
|
useEffect18(() => {
|
|
11122
11134
|
if (queryAmountTimer.current) clearTimeout(queryAmountTimer.current);
|
|
11123
11135
|
queryAmountTimer.current = setTimeout(() => {
|
|
@@ -11498,8 +11510,7 @@ var init_truncateMiddle = __esm({
|
|
|
11498
11510
|
|
|
11499
11511
|
// src/internal/components/ChainsMenu/ChainItem.tsx
|
|
11500
11512
|
import { getChainConfig as getChainConfig7 } from "@embarkai/core/read";
|
|
11501
|
-
import {
|
|
11502
|
-
import { useRef as useRef13, useState as useState9 } from "react";
|
|
11513
|
+
import { ExternalLink, Loader as Loader6 } from "lucide-react";
|
|
11503
11514
|
import { jsx as jsx51, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
11504
11515
|
function getPaymasterExplorerUrl(chainId, paymasterAddress) {
|
|
11505
11516
|
const chainConfig = getChainConfig7(chainId);
|
|
@@ -11519,10 +11530,9 @@ function ChainItem(props) {
|
|
|
11519
11530
|
setNextChainId
|
|
11520
11531
|
} = props;
|
|
11521
11532
|
const { t } = useT();
|
|
11533
|
+
const address = useSession((st) => st.address);
|
|
11522
11534
|
const isSessionLoading = useSession((st) => st.isLoading);
|
|
11523
11535
|
const activeChainId = useSession((st) => st.activeChainId);
|
|
11524
|
-
const [copiedChainId, setCopiedChainId] = useState9(null);
|
|
11525
|
-
const copiedResetTimerRef = useRef13(null);
|
|
11526
11536
|
const isActiveChain = activeChainId === chainId;
|
|
11527
11537
|
const paymasterAddress = isActiveChain ? activePaymasterData?.address : null;
|
|
11528
11538
|
const paymasterExplorerUrl = paymasterAddress ? getPaymasterExplorerUrl(chainId, paymasterAddress) : null;
|
|
@@ -11562,55 +11572,58 @@ function ChainItem(props) {
|
|
|
11562
11572
|
},
|
|
11563
11573
|
children: [
|
|
11564
11574
|
isLoading && chainId === nextChainId ? /* @__PURE__ */ jsx51("div", { className: "w-7 h-7 flex items-center justify-center", children: /* @__PURE__ */ jsx51(Loader6, { className: "h-4 w-4 animate-spin" }) }) : /* @__PURE__ */ jsx51(Icon2, { className: "w-7 h-7" }),
|
|
11565
|
-
/* @__PURE__ */ jsxs45("div", { className: "min-w-0 flex-1 flex flex-col
|
|
11575
|
+
/* @__PURE__ */ jsxs45("div", { className: "min-w-0 flex-1 flex flex-col", children: [
|
|
11566
11576
|
/* @__PURE__ */ jsxs45("div", { className: "flex items-center gap-2", children: [
|
|
11567
11577
|
/* @__PURE__ */ jsx51(
|
|
11568
11578
|
"span",
|
|
11569
11579
|
{
|
|
11570
|
-
className: cn2("block flex-1 uppercase text-left text-sm truncate", {
|
|
11571
|
-
"font-bold": isActiveChain
|
|
11580
|
+
className: cn2("block flex-1 uppercase text-left text-sm truncate leading-6", {
|
|
11581
|
+
"font-bold leading-7": isActiveChain
|
|
11572
11582
|
}),
|
|
11573
11583
|
children: name
|
|
11574
11584
|
}
|
|
11575
11585
|
),
|
|
11576
11586
|
/* @__PURE__ */ jsx51(Badge, { variant: badge.toLowerCase() === "mainnet" ? "success" : "secondary", children: badge })
|
|
11577
11587
|
] }),
|
|
11578
|
-
isActiveChain &&
|
|
11579
|
-
/* @__PURE__ */ jsx51("span", { className: "flex-none uppercase", children: "
|
|
11588
|
+
isActiveChain && /* @__PURE__ */ jsxs45("div", { className: "flex items-center gap-[var(--ui-kit-gap)] text-xs leading-5", children: [
|
|
11589
|
+
/* @__PURE__ */ jsx51("span", { className: "flex-none uppercase", children: "Explorer" }),
|
|
11580
11590
|
/* @__PURE__ */ jsxs45(
|
|
11581
11591
|
Button,
|
|
11582
11592
|
{
|
|
11583
11593
|
type: "button",
|
|
11584
11594
|
size: "small",
|
|
11585
11595
|
variant: "ghost",
|
|
11586
|
-
className: "text-[var(--ui-kit-fg-inverted)]",
|
|
11596
|
+
className: "text-[var(--ui-kit-fg-inverted)] h-5",
|
|
11587
11597
|
title: `${paymasterAddress} (SOURCE: ${paymasterSource})`,
|
|
11588
11598
|
onClick: (e) => {
|
|
11589
11599
|
e.stopPropagation();
|
|
11590
|
-
window.open(
|
|
11600
|
+
address && window.open(`${getExplorerUrl()}/address/${address}`, "_blank");
|
|
11591
11601
|
},
|
|
11592
11602
|
children: [
|
|
11593
|
-
/* @__PURE__ */ jsx51("span", { className: "text-xs", children: truncateMiddle(
|
|
11603
|
+
/* @__PURE__ */ jsx51("span", { className: "text-xs", children: truncateMiddle(address) }),
|
|
11594
11604
|
/* @__PURE__ */ jsx51(ExternalLink, { className: "w-4 h-4 flex-none" })
|
|
11595
11605
|
]
|
|
11596
11606
|
}
|
|
11597
|
-
)
|
|
11598
|
-
|
|
11607
|
+
)
|
|
11608
|
+
] }),
|
|
11609
|
+
isActiveChain && paymasterAddress && /* @__PURE__ */ jsxs45("div", { className: "flex items-center gap-[var(--ui-kit-gap)] text-xs leading-5", children: [
|
|
11610
|
+
/* @__PURE__ */ jsx51("span", { className: "flex-none uppercase", children: "Paymaster" }),
|
|
11611
|
+
/* @__PURE__ */ jsxs45(
|
|
11599
11612
|
Button,
|
|
11600
11613
|
{
|
|
11601
11614
|
type: "button",
|
|
11602
11615
|
size: "small",
|
|
11603
11616
|
variant: "ghost",
|
|
11604
|
-
|
|
11605
|
-
|
|
11606
|
-
onClick: (
|
|
11607
|
-
|
|
11608
|
-
|
|
11609
|
-
setCopiedChainId(chainId);
|
|
11610
|
-
if (copiedResetTimerRef.current) clearTimeout(copiedResetTimerRef.current);
|
|
11611
|
-
copiedResetTimerRef.current = setTimeout(() => setCopiedChainId(null), 1500);
|
|
11617
|
+
className: "text-[var(--ui-kit-fg-inverted)] h-5",
|
|
11618
|
+
title: `${paymasterAddress} (SOURCE: ${paymasterSource})`,
|
|
11619
|
+
onClick: (e) => {
|
|
11620
|
+
e.stopPropagation();
|
|
11621
|
+
window.open(paymasterExplorerUrl || paymasterAddress, "_blank", "noopener,noreferrer");
|
|
11612
11622
|
},
|
|
11613
|
-
children:
|
|
11623
|
+
children: [
|
|
11624
|
+
/* @__PURE__ */ jsx51("span", { className: "text-xs", children: truncateMiddle(paymasterAddress) }),
|
|
11625
|
+
/* @__PURE__ */ jsx51(ExternalLink, { className: "w-4 h-4 flex-none" })
|
|
11626
|
+
]
|
|
11614
11627
|
}
|
|
11615
11628
|
)
|
|
11616
11629
|
] })
|
|
@@ -11623,9 +11636,9 @@ var init_ChainItem = __esm({
|
|
|
11623
11636
|
"src/internal/components/ChainsMenu/ChainItem.tsx"() {
|
|
11624
11637
|
init_SessionContext();
|
|
11625
11638
|
init_useT();
|
|
11626
|
-
init_icons();
|
|
11627
11639
|
init_cn();
|
|
11628
11640
|
init_truncateMiddle();
|
|
11641
|
+
init_base2();
|
|
11629
11642
|
init_badge();
|
|
11630
11643
|
init_button();
|
|
11631
11644
|
}
|
|
@@ -11636,13 +11649,13 @@ import { PAYMASTER_CACHE_TTL_MS } from "@embarkai/core";
|
|
|
11636
11649
|
import { getChainConfig as getChainConfig8, SUPPORTED_MAINNETS as SUPPORTED_MAINNETS2 } from "@embarkai/core/read";
|
|
11637
11650
|
import { useQuery as useQuery4 } from "@tanstack/react-query";
|
|
11638
11651
|
import { ArrowLeft as ArrowLeft4 } from "lucide-react";
|
|
11639
|
-
import { useMemo as useMemo5, useState as
|
|
11652
|
+
import { useMemo as useMemo5, useState as useState9 } from "react";
|
|
11640
11653
|
import { jsx as jsx52, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
11641
11654
|
function ChainsMenu() {
|
|
11642
11655
|
const config = useProviderConfig().config;
|
|
11643
11656
|
const activeChainId = useSession((st) => st.activeChainId);
|
|
11644
|
-
const [isTestnets, setIsTestnets] =
|
|
11645
|
-
const [nextChainId, setNextChainId] =
|
|
11657
|
+
const [isTestnets, setIsTestnets] = useState9(false);
|
|
11658
|
+
const [nextChainId, setNextChainId] = useState9(null);
|
|
11646
11659
|
const { t } = useT();
|
|
11647
11660
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
11648
11661
|
const visibleNetworks = useMemo5(() => {
|
|
@@ -11891,7 +11904,7 @@ var init_devices = __esm({
|
|
|
11891
11904
|
});
|
|
11892
11905
|
|
|
11893
11906
|
// src/internal/components/DevicesMenu/DeviceLinkScreen.tsx
|
|
11894
|
-
import { useState as
|
|
11907
|
+
import { useState as useState10 } from "react";
|
|
11895
11908
|
import { ArrowLeft as ArrowLeft6, Loader2 as Loader22 } from "lucide-react";
|
|
11896
11909
|
import { jsx as jsx54, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
11897
11910
|
function getErrorMessage(err) {
|
|
@@ -11913,8 +11926,8 @@ function DeviceLinkScreen() {
|
|
|
11913
11926
|
const setPage = useLayoutDataStore((s) => s.setPage);
|
|
11914
11927
|
const maxScrollHeight = useLayoutStore((s) => s.maxScrollHeight);
|
|
11915
11928
|
const { mutate: link, isPending } = useLinkDevice();
|
|
11916
|
-
const [code, setCode] =
|
|
11917
|
-
const [error, setError] =
|
|
11929
|
+
const [code, setCode] = useState10("");
|
|
11930
|
+
const [error, setError] = useState10(null);
|
|
11918
11931
|
const isValid = code.length === 6 && VALID_CHARS.test(code);
|
|
11919
11932
|
function handleCodeChange(value) {
|
|
11920
11933
|
const upper = value.toUpperCase().slice(0, 6);
|
|
@@ -12494,7 +12507,7 @@ var init_guardian_backup = __esm({
|
|
|
12494
12507
|
});
|
|
12495
12508
|
|
|
12496
12509
|
// src/internal/components/DevicesMenu/DeviceManageScreen.tsx
|
|
12497
|
-
import { useCallback as useCallback14, useEffect as useEffect19, useRef as
|
|
12510
|
+
import { useCallback as useCallback14, useEffect as useEffect19, useRef as useRef12, useState as useState11 } from "react";
|
|
12498
12511
|
import { ArrowLeft as ArrowLeft7, Cpu, Download, HardDrive, Loader2 as Loader23, Trash2, Upload } from "lucide-react";
|
|
12499
12512
|
import { Fragment as Fragment15, jsx as jsx55, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
12500
12513
|
function formatSize(bytes) {
|
|
@@ -12509,13 +12522,13 @@ function DeviceManageScreen() {
|
|
|
12509
12522
|
const userId = session?.mpcUserId || "";
|
|
12510
12523
|
const deviceId = pageParams?.deviceId;
|
|
12511
12524
|
const deviceName = pageParams?.deviceName;
|
|
12512
|
-
const guardianRef =
|
|
12513
|
-
const [screen, setScreen] =
|
|
12514
|
-
const [actionState, setActionState] =
|
|
12515
|
-
const [password, setPassword] =
|
|
12516
|
-
const [statusMessage, setStatusMessage] =
|
|
12517
|
-
const [errorMessage, setErrorMessage] =
|
|
12518
|
-
const [waitingConfirm, setWaitingConfirm] =
|
|
12525
|
+
const guardianRef = useRef12(null);
|
|
12526
|
+
const [screen, setScreen] = useState11({ step: "connecting" });
|
|
12527
|
+
const [actionState, setActionState] = useState11(null);
|
|
12528
|
+
const [password, setPassword] = useState11("");
|
|
12529
|
+
const [statusMessage, setStatusMessage] = useState11(null);
|
|
12530
|
+
const [errorMessage, setErrorMessage] = useState11(null);
|
|
12531
|
+
const [waitingConfirm, setWaitingConfirm] = useState11(false);
|
|
12519
12532
|
useEffect19(() => {
|
|
12520
12533
|
if (!statusMessage) return;
|
|
12521
12534
|
const t = setTimeout(() => setStatusMessage(null), 3e3);
|
|
@@ -12786,7 +12799,7 @@ var init_DeviceManageScreen = __esm({
|
|
|
12786
12799
|
});
|
|
12787
12800
|
|
|
12788
12801
|
// src/internal/components/DevicesMenu/DeviceRestoreScreen.tsx
|
|
12789
|
-
import { useCallback as useCallback15, useState as
|
|
12802
|
+
import { useCallback as useCallback15, useState as useState12 } from "react";
|
|
12790
12803
|
import { AlertTriangle as AlertTriangle3, ArrowLeft as ArrowLeft8, Download as Download2, Loader2 as Loader24 } from "lucide-react";
|
|
12791
12804
|
import { Fragment as Fragment16, jsx as jsx56, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
12792
12805
|
function DeviceRestoreScreen() {
|
|
@@ -12798,10 +12811,10 @@ function DeviceRestoreScreen() {
|
|
|
12798
12811
|
const keyshareId = pageParams?.keyshareId;
|
|
12799
12812
|
const deviceId = pageParams?.deviceId;
|
|
12800
12813
|
const deviceName = pageParams?.deviceName;
|
|
12801
|
-
const [password, setPassword] =
|
|
12802
|
-
const [isWorking, setIsWorking] =
|
|
12803
|
-
const [statusMessage, setStatusMessage] =
|
|
12804
|
-
const [errorMessage, setErrorMessage] =
|
|
12814
|
+
const [password, setPassword] = useState12("");
|
|
12815
|
+
const [isWorking, setIsWorking] = useState12(false);
|
|
12816
|
+
const [statusMessage, setStatusMessage] = useState12(null);
|
|
12817
|
+
const [errorMessage, setErrorMessage] = useState12(null);
|
|
12805
12818
|
const handleRestore = useCallback15(async () => {
|
|
12806
12819
|
if (!password || !keyshareId || !userId) return;
|
|
12807
12820
|
const iframe4 = getIframeManager();
|
|
@@ -12902,7 +12915,7 @@ var init_DeviceRestoreScreen = __esm({
|
|
|
12902
12915
|
});
|
|
12903
12916
|
|
|
12904
12917
|
// src/internal/components/DevicesMenu/DevicesMenu.tsx
|
|
12905
|
-
import { useState as
|
|
12918
|
+
import { useState as useState13 } from "react";
|
|
12906
12919
|
import { ArrowLeft as ArrowLeft9, Cpu as Cpu2, Monitor, CheckCircle, Trash2 as Trash22, Loader2 as Loader25, RefreshCw, HardDrive as HardDrive2 } from "lucide-react";
|
|
12907
12920
|
import { jsx as jsx57, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
12908
12921
|
function DeviceIcon({ deviceType }) {
|
|
@@ -12914,8 +12927,8 @@ function truncateAddress(address) {
|
|
|
12914
12927
|
return `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
12915
12928
|
}
|
|
12916
12929
|
function DeviceRow({ device }) {
|
|
12917
|
-
const [confirmingUnlink, setConfirmingUnlink] =
|
|
12918
|
-
const [unlinkError, setUnlinkError] =
|
|
12930
|
+
const [confirmingUnlink, setConfirmingUnlink] = useState13(false);
|
|
12931
|
+
const [unlinkError, setUnlinkError] = useState13(null);
|
|
12919
12932
|
const { mutate: unlink, isPending } = useUnlinkDevice();
|
|
12920
12933
|
if (confirmingUnlink) {
|
|
12921
12934
|
return /* @__PURE__ */ jsxs51("div", { className: "flex flex-col gap-2 p-3 rounded-lg bg-[var(--ui-kit-bg)]", children: [
|
|
@@ -14089,7 +14102,7 @@ var init_MethodSelector = __esm({
|
|
|
14089
14102
|
|
|
14090
14103
|
// src/internal/components/KeyshareRestoreMenu/components/PasswordPasskey.tsx
|
|
14091
14104
|
import { ChevronRight as ChevronRight2, Eye, EyeOff, Info as Info3, Key as Key4, Loader as Loader8, Plus } from "lucide-react";
|
|
14092
|
-
import { useEffect as useEffect22, useRef as
|
|
14105
|
+
import { useEffect as useEffect22, useRef as useRef13 } from "react";
|
|
14093
14106
|
import { Fragment as Fragment18, jsx as jsx59, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
14094
14107
|
function PasswordPasskey(props) {
|
|
14095
14108
|
const { t } = useT();
|
|
@@ -14104,7 +14117,7 @@ function PasswordPasskey(props) {
|
|
|
14104
14117
|
onCreatePasskey
|
|
14105
14118
|
} = props;
|
|
14106
14119
|
const hasServerVault = useSession((st) => st.hasServerVault);
|
|
14107
|
-
const actionRef =
|
|
14120
|
+
const actionRef = useRef13(null);
|
|
14108
14121
|
const {
|
|
14109
14122
|
showPassword,
|
|
14110
14123
|
restorePassword,
|
|
@@ -14736,7 +14749,7 @@ var init_Cloud = __esm({
|
|
|
14736
14749
|
});
|
|
14737
14750
|
|
|
14738
14751
|
// src/internal/components/KeyshareRestoreMenu/methods/Guardian.tsx
|
|
14739
|
-
import { useState as
|
|
14752
|
+
import { useState as useState15 } from "react";
|
|
14740
14753
|
import { Cpu as Cpu4, Loader2 as Loader26 } from "lucide-react";
|
|
14741
14754
|
import { Fragment as Fragment23, jsx as jsx65, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
14742
14755
|
function Guardian(props) {
|
|
@@ -14745,8 +14758,8 @@ function Guardian(props) {
|
|
|
14745
14758
|
const session = useSession((st) => st.session);
|
|
14746
14759
|
const recoveryUserId = useSession((st) => st.recoveryUserId);
|
|
14747
14760
|
const { onRestoreSuccess } = useOnRestoreSuccess();
|
|
14748
|
-
const [isWorking, setIsWorking] =
|
|
14749
|
-
const [step, setStep] =
|
|
14761
|
+
const [isWorking, setIsWorking] = useState15(false);
|
|
14762
|
+
const [step, setStep] = useState15("idle");
|
|
14750
14763
|
const handleGuardianBackup = async () => {
|
|
14751
14764
|
if (!restorePassword) {
|
|
14752
14765
|
setError("Please enter a password");
|
|
@@ -15437,15 +15450,15 @@ var init_SumsubIframeManager = __esm({
|
|
|
15437
15450
|
});
|
|
15438
15451
|
|
|
15439
15452
|
// src/internal/components/KYC/useSumsubIframe.ts
|
|
15440
|
-
import { useEffect as useEffect28, useRef as
|
|
15453
|
+
import { useEffect as useEffect28, useRef as useRef14, useState as useState16 } from "react";
|
|
15441
15454
|
function useSumsubIframe({ iframeUrl }) {
|
|
15442
15455
|
const config = useProviderConfig().config;
|
|
15443
15456
|
const { colorMode } = useColorMode();
|
|
15444
|
-
const iframeRef =
|
|
15445
|
-
const [isLoading, setIsLoading] =
|
|
15446
|
-
const [error, setError] =
|
|
15447
|
-
const [height, setHeight] =
|
|
15448
|
-
const [status, setStatus] =
|
|
15457
|
+
const iframeRef = useRef14(null);
|
|
15458
|
+
const [isLoading, setIsLoading] = useState16(true);
|
|
15459
|
+
const [error, setError] = useState16(null);
|
|
15460
|
+
const [height, setHeight] = useState16(0);
|
|
15461
|
+
const [status, setStatus] = useState16("");
|
|
15449
15462
|
const levelName = config.current?.kyc?.options?.levelName;
|
|
15450
15463
|
useEffect28(() => {
|
|
15451
15464
|
setError(null);
|
|
@@ -16480,7 +16493,7 @@ var init_telegram2 = __esm({
|
|
|
16480
16493
|
|
|
16481
16494
|
// src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
|
|
16482
16495
|
import { useQueryClient as useQueryClient16 } from "@tanstack/react-query";
|
|
16483
|
-
import { useCallback as useCallback20, useEffect as useEffect31, useState as
|
|
16496
|
+
import { useCallback as useCallback20, useEffect as useEffect31, useState as useState17 } from "react";
|
|
16484
16497
|
function useLinkTelegram() {
|
|
16485
16498
|
const {
|
|
16486
16499
|
config: { current: config },
|
|
@@ -16538,7 +16551,7 @@ function useLinkTelegram() {
|
|
|
16538
16551
|
setLinkIsLoading(false);
|
|
16539
16552
|
}
|
|
16540
16553
|
}, [config.social?.providers]);
|
|
16541
|
-
const [telegramLinkStarted, setTelegramLinkStarted] =
|
|
16554
|
+
const [telegramLinkStarted, setTelegramLinkStarted] = useState17(false);
|
|
16542
16555
|
useEffect31(() => {
|
|
16543
16556
|
console.log("[useLinkTelegram] Effect triggered:", {
|
|
16544
16557
|
providerType,
|
|
@@ -16859,7 +16872,7 @@ var init_ManageWallet = __esm({
|
|
|
16859
16872
|
// src/internal/components/ManageWalletMenu/UnlinkProviderMenu.tsx
|
|
16860
16873
|
import { useMutation as useMutation15, useQueryClient as useQueryClient17 } from "@tanstack/react-query";
|
|
16861
16874
|
import { Key as Key6, Loader as Loader14 } from "lucide-react";
|
|
16862
|
-
import { useState as
|
|
16875
|
+
import { useState as useState18 } from "react";
|
|
16863
16876
|
import { useDisconnect as useDisconnect2 } from "wagmi";
|
|
16864
16877
|
import { jsx as jsx78, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
16865
16878
|
function UnlinkProviderMenu() {
|
|
@@ -16871,7 +16884,7 @@ function UnlinkProviderMenu() {
|
|
|
16871
16884
|
const { t } = useT();
|
|
16872
16885
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
16873
16886
|
const { confirmUnlink, setConfirmUnlink, setAlert } = useManageWalletStore();
|
|
16874
|
-
const [confirmInput, setConfirmInput] =
|
|
16887
|
+
const [confirmInput, setConfirmInput] = useState18("");
|
|
16875
16888
|
const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = useMutation15({
|
|
16876
16889
|
mutationFn: async () => {
|
|
16877
16890
|
if (!confirmUnlink) {
|
|
@@ -17132,7 +17145,7 @@ var init_useNicknameAvailability = __esm({
|
|
|
17132
17145
|
// src/internal/components/NicknameMenu/NicknameEditForm.tsx
|
|
17133
17146
|
import { useMutation as useMutation17, useQueryClient as useQueryClient18 } from "@tanstack/react-query";
|
|
17134
17147
|
import { AtSignIcon, CheckIcon as CheckIcon2, CopyIcon, LoaderIcon as LoaderIcon7, SaveIcon } from "lucide-react";
|
|
17135
|
-
import { useCallback as useCallback22, useState as
|
|
17148
|
+
import { useCallback as useCallback22, useState as useState19 } from "react";
|
|
17136
17149
|
import { Fragment as Fragment29, jsx as jsx79, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
17137
17150
|
function NicknameEditForm(props) {
|
|
17138
17151
|
const { isInitialUser, nicknameInfo } = props;
|
|
@@ -17145,7 +17158,7 @@ function NicknameEditForm(props) {
|
|
|
17145
17158
|
const nicknameValue = useNicknameStore((st) => st.nicknameValue);
|
|
17146
17159
|
const nicknameAvailability = useNicknameStore((st) => st.availability);
|
|
17147
17160
|
const { isCheckingAvailability } = useNicknameAvailability(nicknameInfo ? nicknameInfo.handle : "");
|
|
17148
|
-
const [isNicknameCopied, setIsNicknameCopied] =
|
|
17161
|
+
const [isNicknameCopied, setIsNicknameCopied] = useState19(false);
|
|
17149
17162
|
const {
|
|
17150
17163
|
mutate: changeNickname2,
|
|
17151
17164
|
isError: isNicknameChangeError,
|
|
@@ -17459,27 +17472,76 @@ var init_useResolvedPublicClient = __esm({
|
|
|
17459
17472
|
}
|
|
17460
17473
|
});
|
|
17461
17474
|
|
|
17462
|
-
// src/internal/hooks/
|
|
17475
|
+
// src/internal/hooks/useBlockscoutAssets/constants.ts
|
|
17476
|
+
var NATIVE_BALANCE_QUERY_KEY2, WATCH_TOKENS_QUERY_KEY, BLOCKSCOUT_QUERY_KEY, ERC3643_DETECTION_QUERY_KEY, BALANCE_DEFAULT_QUERY_CFG, ERC3643_ABI;
|
|
17477
|
+
var init_constants5 = __esm({
|
|
17478
|
+
"src/internal/hooks/useBlockscoutAssets/constants.ts"() {
|
|
17479
|
+
init_constants();
|
|
17480
|
+
NATIVE_BALANCE_QUERY_KEY2 = "chain-native-coin-balance-query";
|
|
17481
|
+
WATCH_TOKENS_QUERY_KEY = "chain-watch-coin-balance-query";
|
|
17482
|
+
BLOCKSCOUT_QUERY_KEY = "blockscout-token-balances";
|
|
17483
|
+
ERC3643_DETECTION_QUERY_KEY = "erc3643-detection";
|
|
17484
|
+
BALANCE_DEFAULT_QUERY_CFG = {
|
|
17485
|
+
staleTime: BLOCKSCOUT_QUERY_STALE_TIME,
|
|
17486
|
+
gcTime: BLOCKSCOUT_QUERY_GC_TIME,
|
|
17487
|
+
refetchOnMount: "always",
|
|
17488
|
+
retry: 2,
|
|
17489
|
+
retryDelay: 2e3
|
|
17490
|
+
};
|
|
17491
|
+
ERC3643_ABI = [
|
|
17492
|
+
{
|
|
17493
|
+
name: "identityRegistry",
|
|
17494
|
+
type: "function",
|
|
17495
|
+
stateMutability: "view",
|
|
17496
|
+
inputs: [],
|
|
17497
|
+
outputs: [{ name: "", type: "address" }]
|
|
17498
|
+
}
|
|
17499
|
+
];
|
|
17500
|
+
}
|
|
17501
|
+
});
|
|
17502
|
+
|
|
17503
|
+
// src/internal/hooks/useBlockscoutAssets/useNativeBalance.ts
|
|
17463
17504
|
import { useQuery as useQuery13 } from "@tanstack/react-query";
|
|
17505
|
+
import { formatUnits as formatUnits2 } from "viem";
|
|
17506
|
+
function useNativeBalance(options) {
|
|
17507
|
+
const { enabled, address, chainId, publicClient, nativeCurrency } = options;
|
|
17508
|
+
return useQuery13({
|
|
17509
|
+
enabled: enabled && !!address && !!publicClient && !!nativeCurrency?.symbol,
|
|
17510
|
+
...BALANCE_DEFAULT_QUERY_CFG,
|
|
17511
|
+
queryKey: [NATIVE_BALANCE_QUERY_KEY2, chainId, address],
|
|
17512
|
+
queryFn: async () => {
|
|
17513
|
+
const balance = await publicClient.getBalance({ address });
|
|
17514
|
+
return {
|
|
17515
|
+
value: balance,
|
|
17516
|
+
formatted: formatUnits2(balance, nativeCurrency?.decimals || 18),
|
|
17517
|
+
symbol: nativeCurrency?.symbol || "ETH",
|
|
17518
|
+
decimals: nativeCurrency?.decimals || 18
|
|
17519
|
+
};
|
|
17520
|
+
}
|
|
17521
|
+
});
|
|
17522
|
+
}
|
|
17523
|
+
var init_useNativeBalance = __esm({
|
|
17524
|
+
"src/internal/hooks/useBlockscoutAssets/useNativeBalance.ts"() {
|
|
17525
|
+
init_constants5();
|
|
17526
|
+
}
|
|
17527
|
+
});
|
|
17528
|
+
|
|
17529
|
+
// src/internal/hooks/useBlockscoutAssets/useWatchTokens.ts
|
|
17530
|
+
import { useQuery as useQuery14 } from "@tanstack/react-query";
|
|
17464
17531
|
import { useMemo as useMemo9 } from "react";
|
|
17465
|
-
import { erc20Abi, formatUnits as
|
|
17532
|
+
import { erc20Abi as erc20Abi2, formatUnits as formatUnits3 } from "viem";
|
|
17466
17533
|
function useWatchTokens(options) {
|
|
17467
|
-
const { address, chainId, enabled
|
|
17534
|
+
const { address, chainId, enabled, publicClient } = options;
|
|
17468
17535
|
const { config } = useProviderConfig();
|
|
17469
|
-
const { publicClient, resolvedChainId } = useResolvedPublicClient(chainId, "useWatchTokens");
|
|
17470
17536
|
const watchTokens = useMemo9(() => {
|
|
17471
17537
|
const allWatchTokens = config.current.watchTokens;
|
|
17472
|
-
const tokensForChain =
|
|
17538
|
+
const tokensForChain = chainId ? allWatchTokens?.[chainId] || [] : [];
|
|
17473
17539
|
return tokensForChain;
|
|
17474
|
-
}, [config,
|
|
17475
|
-
|
|
17476
|
-
|
|
17477
|
-
|
|
17478
|
-
|
|
17479
|
-
error,
|
|
17480
|
-
refetch
|
|
17481
|
-
} = useQuery13({
|
|
17482
|
-
queryKey: [WATCH_TOKENS_QUERY_KEY, resolvedChainId, address, watchTokens.map((t) => t.address).join(",")],
|
|
17540
|
+
}, [config, chainId]);
|
|
17541
|
+
return useQuery14({
|
|
17542
|
+
enabled: !!publicClient && !!address && enabled && watchTokens.length > 0,
|
|
17543
|
+
...BALANCE_DEFAULT_QUERY_CFG,
|
|
17544
|
+
queryKey: [WATCH_TOKENS_QUERY_KEY, chainId, address, watchTokens.map((t) => t.address).join(",")],
|
|
17483
17545
|
queryFn: async () => {
|
|
17484
17546
|
if (!publicClient || !address || watchTokens.length === 0) {
|
|
17485
17547
|
return [];
|
|
@@ -17489,17 +17551,19 @@ function useWatchTokens(options) {
|
|
|
17489
17551
|
try {
|
|
17490
17552
|
const balance = await publicClient.readContract({
|
|
17491
17553
|
address: token.address,
|
|
17492
|
-
abi:
|
|
17554
|
+
abi: erc20Abi2,
|
|
17493
17555
|
functionName: "balanceOf",
|
|
17494
|
-
args: [address]
|
|
17556
|
+
args: [address],
|
|
17557
|
+
authorizationList: void 0
|
|
17495
17558
|
});
|
|
17496
17559
|
let name = token.name;
|
|
17497
17560
|
if (!name) {
|
|
17498
17561
|
try {
|
|
17499
17562
|
name = await publicClient.readContract({
|
|
17500
17563
|
address: token.address,
|
|
17501
|
-
abi:
|
|
17502
|
-
functionName: "name"
|
|
17564
|
+
abi: erc20Abi2,
|
|
17565
|
+
functionName: "name",
|
|
17566
|
+
authorizationList: void 0
|
|
17503
17567
|
});
|
|
17504
17568
|
} catch {
|
|
17505
17569
|
name = token.symbol;
|
|
@@ -17510,14 +17574,15 @@ function useWatchTokens(options) {
|
|
|
17510
17574
|
try {
|
|
17511
17575
|
decimals = await publicClient.readContract({
|
|
17512
17576
|
address: token.address,
|
|
17513
|
-
abi:
|
|
17514
|
-
functionName: "decimals"
|
|
17577
|
+
abi: erc20Abi2,
|
|
17578
|
+
functionName: "decimals",
|
|
17579
|
+
authorizationList: void 0
|
|
17515
17580
|
});
|
|
17516
17581
|
} catch {
|
|
17517
17582
|
decimals = 18;
|
|
17518
17583
|
}
|
|
17519
17584
|
}
|
|
17520
|
-
const formattedBalance =
|
|
17585
|
+
const formattedBalance = formatUnits3(balance, decimals);
|
|
17521
17586
|
results.push({
|
|
17522
17587
|
type: "erc20",
|
|
17523
17588
|
address: token.address,
|
|
@@ -17533,38 +17598,18 @@ function useWatchTokens(options) {
|
|
|
17533
17598
|
}
|
|
17534
17599
|
}
|
|
17535
17600
|
return results;
|
|
17536
|
-
}
|
|
17537
|
-
enabled: !!publicClient && !!address && enabled && watchTokens.length > 0,
|
|
17538
|
-
staleTime: 30 * 1e3,
|
|
17539
|
-
// 30 seconds
|
|
17540
|
-
gcTime: 5 * 60 * 1e3,
|
|
17541
|
-
// 5 minutes
|
|
17542
|
-
refetchOnMount: "always",
|
|
17543
|
-
retry: 2,
|
|
17544
|
-
retryDelay: 1e3
|
|
17601
|
+
}
|
|
17545
17602
|
});
|
|
17546
|
-
return {
|
|
17547
|
-
assets: assets || [],
|
|
17548
|
-
isLoading,
|
|
17549
|
-
isFetching,
|
|
17550
|
-
error: error || null,
|
|
17551
|
-
refetch
|
|
17552
|
-
};
|
|
17553
17603
|
}
|
|
17554
|
-
var WATCH_TOKENS_QUERY_KEY;
|
|
17555
17604
|
var init_useWatchTokens = __esm({
|
|
17556
|
-
"src/internal/hooks/useWatchTokens.ts"() {
|
|
17605
|
+
"src/internal/hooks/useBlockscoutAssets/useWatchTokens.ts"() {
|
|
17557
17606
|
init_ProviderContext();
|
|
17558
|
-
|
|
17559
|
-
WATCH_TOKENS_QUERY_KEY = "watch-tokens";
|
|
17607
|
+
init_constants5();
|
|
17560
17608
|
}
|
|
17561
17609
|
});
|
|
17562
17610
|
|
|
17563
|
-
// src/internal/hooks/useBlockscoutAssets.ts
|
|
17564
|
-
import {
|
|
17565
|
-
import { useQuery as useQuery14, useQueryClient as useQueryClient19 } from "@tanstack/react-query";
|
|
17566
|
-
import { useCallback as useCallback23, useMemo as useMemo10, useRef as useRef17 } from "react";
|
|
17567
|
-
import { formatEther, formatUnits as formatUnits3 } from "viem";
|
|
17611
|
+
// src/internal/hooks/useBlockscoutAssets/utils.ts
|
|
17612
|
+
import { formatUnits as formatUnits4 } from "viem";
|
|
17568
17613
|
function resolveIpfsUri(uri) {
|
|
17569
17614
|
if (!uri) return "";
|
|
17570
17615
|
if (uri.startsWith("ipfs://")) {
|
|
@@ -17595,7 +17640,7 @@ function mapBlockscoutToAsset(balance) {
|
|
|
17595
17640
|
if (type === "erc721") {
|
|
17596
17641
|
formattedBalance = "1";
|
|
17597
17642
|
} else if (decimals !== void 0) {
|
|
17598
|
-
formattedBalance =
|
|
17643
|
+
formattedBalance = formatUnits4(BigInt(value), decimals);
|
|
17599
17644
|
} else {
|
|
17600
17645
|
formattedBalance = value;
|
|
17601
17646
|
}
|
|
@@ -17688,96 +17733,107 @@ function createError(error) {
|
|
|
17688
17733
|
retryable: true
|
|
17689
17734
|
};
|
|
17690
17735
|
}
|
|
17736
|
+
var init_utils8 = __esm({
|
|
17737
|
+
"src/internal/hooks/useBlockscoutAssets/utils.ts"() {
|
|
17738
|
+
init_constants();
|
|
17739
|
+
}
|
|
17740
|
+
});
|
|
17741
|
+
|
|
17742
|
+
// src/internal/hooks/useBlockscoutAssets/useBlockscoutAssets.ts
|
|
17743
|
+
import { createBlockscoutClient, nonBlockscoutClient } from "@embarkai/core/clients";
|
|
17744
|
+
import { useQuery as useQuery15, useQueryClient as useQueryClient19 } from "@tanstack/react-query";
|
|
17745
|
+
import { useCallback as useCallback23, useMemo as useMemo10, useRef as useRef15 } from "react";
|
|
17691
17746
|
function useBlockscoutAssets(options) {
|
|
17692
17747
|
const { address, chainId, enabled = true, detectSecurityTokens = true } = options;
|
|
17693
17748
|
const qc = useQueryClient19();
|
|
17694
17749
|
const { chainConfig, publicClient, resolvedChainId } = useResolvedPublicClient(chainId, "useBlockscoutAssets");
|
|
17695
|
-
const
|
|
17696
|
-
|
|
17697
|
-
|
|
17750
|
+
const {
|
|
17751
|
+
//
|
|
17752
|
+
tokenBalancesQuery: customTokenBalancesQuery,
|
|
17753
|
+
tokenBalancesQueryKey: customTokenBalancesQueryKey
|
|
17754
|
+
} = useProviderConfig().config?.current?.portfolio || {};
|
|
17698
17755
|
const blockscoutApiUrl = getBlockscoutApiUrl(chainConfig);
|
|
17699
17756
|
const blockscoutClient = useMemo10(
|
|
17700
17757
|
() => blockscoutApiUrl ? createBlockscoutClient({ baseUrl: blockscoutApiUrl }) : null,
|
|
17701
17758
|
[blockscoutApiUrl]
|
|
17702
17759
|
);
|
|
17703
|
-
const lastRefreshRef =
|
|
17760
|
+
const lastRefreshRef = useRef15(0);
|
|
17704
17761
|
const {
|
|
17705
|
-
|
|
17762
|
+
data: watchTokenAssets = [],
|
|
17706
17763
|
isLoading: watchTokensLoading,
|
|
17707
17764
|
isFetching: watchTokensFetching
|
|
17708
|
-
|
|
17709
|
-
|
|
17765
|
+
} = useWatchTokens({
|
|
17766
|
+
enabled,
|
|
17767
|
+
address,
|
|
17768
|
+
chainId: resolvedChainId,
|
|
17769
|
+
publicClient
|
|
17770
|
+
});
|
|
17710
17771
|
const {
|
|
17711
17772
|
data: nativeBalanceData,
|
|
17712
17773
|
isLoading: nativeLoading,
|
|
17713
17774
|
isFetching: nativeFetching
|
|
17714
|
-
|
|
17715
|
-
|
|
17716
|
-
|
|
17775
|
+
} = useNativeBalance({
|
|
17776
|
+
enabled,
|
|
17777
|
+
address,
|
|
17778
|
+
chainId: resolvedChainId,
|
|
17779
|
+
publicClient,
|
|
17780
|
+
nativeCurrency: chainConfig?.nativeCurrency || null
|
|
17781
|
+
});
|
|
17782
|
+
const {
|
|
17783
|
+
data: coreTokenBalances = [],
|
|
17784
|
+
isLoading: coreTokensLoading,
|
|
17785
|
+
isFetching: coreTokensFetching
|
|
17786
|
+
} = useQuery15({
|
|
17787
|
+
enabled: !!address && enabled && !blockscoutClient && !customTokenBalancesQuery && !customTokenBalancesQueryKey,
|
|
17788
|
+
...BALANCE_DEFAULT_QUERY_CFG,
|
|
17789
|
+
queryKey: [`NON-${BLOCKSCOUT_QUERY_KEY}`, resolvedChainId, address],
|
|
17717
17790
|
queryFn: async () => {
|
|
17718
|
-
|
|
17719
|
-
|
|
17720
|
-
|
|
17721
|
-
|
|
17722
|
-
|
|
17723
|
-
|
|
17724
|
-
decimals: chainConfig?.nativeCurrency?.decimals || 18
|
|
17725
|
-
};
|
|
17726
|
-
},
|
|
17727
|
-
enabled: !!publicClient && !!address && enabled,
|
|
17728
|
-
staleTime: 30 * 1e3,
|
|
17729
|
-
// 30 seconds
|
|
17730
|
-
gcTime: 5 * 60 * 1e3,
|
|
17731
|
-
// 5 minutes
|
|
17732
|
-
refetchOnMount: "always"
|
|
17791
|
+
const assetList = await nonBlockscoutClient.getTokenBalances({
|
|
17792
|
+
walletAddress: address,
|
|
17793
|
+
chainId: resolvedChainId
|
|
17794
|
+
});
|
|
17795
|
+
return assetList.filter((item) => BigInt(item.value) > BigInt(0));
|
|
17796
|
+
}
|
|
17733
17797
|
});
|
|
17734
17798
|
const {
|
|
17735
|
-
data:
|
|
17736
|
-
isLoading:
|
|
17737
|
-
isFetching:
|
|
17738
|
-
|
|
17739
|
-
|
|
17799
|
+
data: customItems = [],
|
|
17800
|
+
isLoading: customLoading,
|
|
17801
|
+
isFetching: customFetching
|
|
17802
|
+
} = useQuery15({
|
|
17803
|
+
enabled: !!address && enabled && !blockscoutClient && !!customTokenBalancesQuery && !!customTokenBalancesQueryKey,
|
|
17804
|
+
...BALANCE_DEFAULT_QUERY_CFG,
|
|
17805
|
+
queryKey: customTokenBalancesQueryKey,
|
|
17806
|
+
// query is invalidated by this key
|
|
17807
|
+
queryFn: async () => await customTokenBalancesQuery(address)
|
|
17808
|
+
});
|
|
17809
|
+
const {
|
|
17810
|
+
data: blockscoutItems = [],
|
|
17811
|
+
isLoading: blockscoutLoading,
|
|
17812
|
+
isFetching: blockscoutFetching,
|
|
17813
|
+
error: blockscoutError,
|
|
17740
17814
|
dataUpdatedAt
|
|
17741
|
-
} =
|
|
17742
|
-
|
|
17743
|
-
|
|
17744
|
-
|
|
17745
|
-
|
|
17746
|
-
|
|
17747
|
-
} catch (error2) {
|
|
17748
|
-
console.warn("[useBlockscoutAssets] Custom token balances query failed:", error2);
|
|
17749
|
-
if (!blockscoutClient) throw error2;
|
|
17750
|
-
}
|
|
17751
|
-
}
|
|
17752
|
-
return await blockscoutClient.getTokenBalances(address);
|
|
17753
|
-
},
|
|
17754
|
-
enabled: !!address && enabled && (!!customTokenBalancesQuery || !!blockscoutClient),
|
|
17755
|
-
staleTime: 0,
|
|
17756
|
-
gcTime: BLOCKSCOUT_QUERY_GC_TIME,
|
|
17757
|
-
refetchOnMount: "always",
|
|
17758
|
-
retry: 2,
|
|
17759
|
-
retryDelay: 1e3
|
|
17815
|
+
} = useQuery15({
|
|
17816
|
+
enabled: !!address && enabled && !!blockscoutClient && !customTokenBalancesQuery && !customTokenBalancesQueryKey,
|
|
17817
|
+
...BALANCE_DEFAULT_QUERY_CFG,
|
|
17818
|
+
queryKey: [BLOCKSCOUT_QUERY_KEY, resolvedChainId, blockscoutApiUrl, address],
|
|
17819
|
+
//
|
|
17820
|
+
queryFn: async () => await blockscoutClient.getTokenBalances(address)
|
|
17760
17821
|
});
|
|
17761
17822
|
const {
|
|
17762
17823
|
data: nftItems,
|
|
17763
17824
|
isLoading: nftsLoading,
|
|
17764
17825
|
isFetching: nftsFetching
|
|
17765
|
-
|
|
17766
|
-
} = useQuery14({
|
|
17767
|
-
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", resolvedChainId, address, blockscoutApiUrl],
|
|
17768
|
-
queryFn: () => blockscoutClient.getNfts(address),
|
|
17826
|
+
} = useQuery15({
|
|
17769
17827
|
enabled: !!address && enabled && !!blockscoutClient,
|
|
17770
|
-
|
|
17771
|
-
|
|
17772
|
-
|
|
17773
|
-
retry: 2,
|
|
17774
|
-
retryDelay: 1e3
|
|
17828
|
+
...BALANCE_DEFAULT_QUERY_CFG,
|
|
17829
|
+
queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", resolvedChainId, blockscoutApiUrl, address],
|
|
17830
|
+
queryFn: () => blockscoutClient.getNfts(address)
|
|
17775
17831
|
});
|
|
17776
17832
|
const erc20TokenAddresses = useMemo10(() => {
|
|
17777
|
-
if (!
|
|
17778
|
-
return
|
|
17779
|
-
}, [
|
|
17780
|
-
const { data: erc3643Results } =
|
|
17833
|
+
if (!blockscoutItems) return [];
|
|
17834
|
+
return blockscoutItems.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address_hash);
|
|
17835
|
+
}, [blockscoutItems]);
|
|
17836
|
+
const { data: erc3643Results } = useQuery15({
|
|
17781
17837
|
queryKey: [ERC3643_DETECTION_QUERY_KEY, resolvedChainId, address, erc20TokenAddresses],
|
|
17782
17838
|
queryFn: async () => {
|
|
17783
17839
|
if (!publicClient || erc20TokenAddresses.length === 0) {
|
|
@@ -17812,10 +17868,11 @@ function useBlockscoutAssets(options) {
|
|
|
17812
17868
|
}
|
|
17813
17869
|
return results;
|
|
17814
17870
|
},
|
|
17871
|
+
retry: false,
|
|
17815
17872
|
enabled: !!address && enabled && detectSecurityTokens && erc20TokenAddresses.length > 0 && !!publicClient,
|
|
17816
|
-
staleTime:
|
|
17817
|
-
|
|
17818
|
-
|
|
17873
|
+
staleTime: 6e4
|
|
17874
|
+
// 1 minute
|
|
17875
|
+
// gcTime: BLOCKSCOUT_QUERY_GC_TIME,
|
|
17819
17876
|
});
|
|
17820
17877
|
const assets = useMemo10(() => {
|
|
17821
17878
|
const result = [];
|
|
@@ -17830,8 +17887,47 @@ function useBlockscoutAssets(options) {
|
|
|
17830
17887
|
decimals: nativeBalanceData.decimals
|
|
17831
17888
|
});
|
|
17832
17889
|
}
|
|
17833
|
-
if (
|
|
17834
|
-
const
|
|
17890
|
+
if (!!customItems?.length) {
|
|
17891
|
+
const customErc20Tokens = customItems.filter((item) => item.token.type === "ERC-20");
|
|
17892
|
+
customErc20Tokens.forEach((item) => {
|
|
17893
|
+
const asset = mapBlockscoutToAsset(item);
|
|
17894
|
+
if (asset.address) {
|
|
17895
|
+
addedAddresses.add(asset.address.toLowerCase());
|
|
17896
|
+
}
|
|
17897
|
+
if (asset.type === "erc20" && asset.address && erc3643Results) {
|
|
17898
|
+
const registryAddress = erc3643Results.get(asset.address.toLowerCase());
|
|
17899
|
+
if (registryAddress) {
|
|
17900
|
+
asset.type = "erc3643";
|
|
17901
|
+
asset.complianceStatus = {
|
|
17902
|
+
isSecurityToken: true,
|
|
17903
|
+
identityRegistry: registryAddress
|
|
17904
|
+
};
|
|
17905
|
+
}
|
|
17906
|
+
}
|
|
17907
|
+
result.push(asset);
|
|
17908
|
+
});
|
|
17909
|
+
}
|
|
17910
|
+
if (!!coreTokenBalances?.length) {
|
|
17911
|
+
coreTokenBalances.forEach((item) => {
|
|
17912
|
+
const asset = mapBlockscoutToAsset(item);
|
|
17913
|
+
if (asset.address) {
|
|
17914
|
+
addedAddresses.add(asset.address.toLowerCase());
|
|
17915
|
+
}
|
|
17916
|
+
if (asset.type === "erc20" && asset.address && erc3643Results) {
|
|
17917
|
+
const registryAddress = erc3643Results.get(asset.address.toLowerCase());
|
|
17918
|
+
if (registryAddress) {
|
|
17919
|
+
asset.type = "erc3643";
|
|
17920
|
+
asset.complianceStatus = {
|
|
17921
|
+
isSecurityToken: true,
|
|
17922
|
+
identityRegistry: registryAddress
|
|
17923
|
+
};
|
|
17924
|
+
}
|
|
17925
|
+
}
|
|
17926
|
+
result.push(asset);
|
|
17927
|
+
});
|
|
17928
|
+
}
|
|
17929
|
+
if (!!blockscoutItems?.length) {
|
|
17930
|
+
const erc20Tokens = blockscoutItems.filter((balance) => balance.token.type === "ERC-20");
|
|
17835
17931
|
const mappedTokens = erc20Tokens.map((balance) => {
|
|
17836
17932
|
const asset = mapBlockscoutToAsset(balance);
|
|
17837
17933
|
if (asset.address) {
|
|
@@ -17862,7 +17958,16 @@ function useBlockscoutAssets(options) {
|
|
|
17862
17958
|
result.push(...mappedNfts);
|
|
17863
17959
|
}
|
|
17864
17960
|
return result;
|
|
17865
|
-
}, [
|
|
17961
|
+
}, [
|
|
17962
|
+
nativeBalanceData,
|
|
17963
|
+
blockscoutItems,
|
|
17964
|
+
coreTokenBalances,
|
|
17965
|
+
customItems,
|
|
17966
|
+
nftItems,
|
|
17967
|
+
erc3643Results,
|
|
17968
|
+
watchTokenAssets,
|
|
17969
|
+
chainConfig
|
|
17970
|
+
]);
|
|
17866
17971
|
const nativeBalance = useMemo10(() => {
|
|
17867
17972
|
if (!nativeBalanceData) return null;
|
|
17868
17973
|
return {
|
|
@@ -17872,9 +17977,9 @@ function useBlockscoutAssets(options) {
|
|
|
17872
17977
|
};
|
|
17873
17978
|
}, [nativeBalanceData]);
|
|
17874
17979
|
const error = useMemo10(() => {
|
|
17875
|
-
if (!
|
|
17876
|
-
return createError(
|
|
17877
|
-
}, [
|
|
17980
|
+
if (!blockscoutError) return null;
|
|
17981
|
+
return createError(blockscoutError);
|
|
17982
|
+
}, [blockscoutError]);
|
|
17878
17983
|
const refreshBalances = useCallback23(async () => {
|
|
17879
17984
|
const now = Date.now();
|
|
17880
17985
|
if (now - lastRefreshRef.current < BLOCKSCOUT_REFRESH_DEBOUNCE) {
|
|
@@ -17882,16 +17987,15 @@ function useBlockscoutAssets(options) {
|
|
|
17882
17987
|
}
|
|
17883
17988
|
lastRefreshRef.current = now;
|
|
17884
17989
|
await Promise.all([
|
|
17885
|
-
|
|
17886
|
-
qc.invalidateQueries({ queryKey:
|
|
17887
|
-
|
|
17888
|
-
//
|
|
17990
|
+
qc.invalidateQueries({ queryKey: [NATIVE_BALANCE_QUERY_KEY2] }),
|
|
17991
|
+
qc.invalidateQueries({ queryKey: customTokenBalancesQueryKey }),
|
|
17992
|
+
qc.invalidateQueries({ queryKey: [`NON-${BLOCKSCOUT_QUERY_KEY}`] }),
|
|
17993
|
+
// invalidate non-blockscout core token list
|
|
17889
17994
|
qc.invalidateQueries({ queryKey: [BLOCKSCOUT_QUERY_KEY] }),
|
|
17890
17995
|
// invalidates both - token-balances and nfts queries
|
|
17891
|
-
// refetchWatchTokens()
|
|
17892
17996
|
qc.invalidateQueries({ queryKey: [WATCH_TOKENS_QUERY_KEY] })
|
|
17893
17997
|
]);
|
|
17894
|
-
}, [qc]);
|
|
17998
|
+
}, [qc, customTokenBalancesQueryKey]);
|
|
17895
17999
|
const getTokenBalance = useCallback23(
|
|
17896
18000
|
(tokenAddress) => {
|
|
17897
18001
|
return assets.find((a) => a.address?.toLowerCase() === tokenAddress.toLowerCase()) || null;
|
|
@@ -17901,36 +18005,35 @@ function useBlockscoutAssets(options) {
|
|
|
17901
18005
|
return {
|
|
17902
18006
|
nativeBalance,
|
|
17903
18007
|
assets,
|
|
17904
|
-
isLoading: nativeLoading ||
|
|
17905
|
-
isFetching: nativeFetching ||
|
|
18008
|
+
isLoading: nativeLoading || blockscoutLoading || customLoading || coreTokensLoading || nftsLoading || watchTokensLoading,
|
|
18009
|
+
isFetching: nativeFetching || blockscoutFetching || customFetching || coreTokensFetching || nftsFetching || watchTokensFetching,
|
|
17906
18010
|
isInitialLoading: nativeLoading && !nativeBalanceData,
|
|
17907
18011
|
error,
|
|
17908
|
-
isBlockscoutAvailable: !!blockscoutClient && !
|
|
18012
|
+
isBlockscoutAvailable: !!blockscoutClient && !blockscoutError,
|
|
17909
18013
|
refreshBalances,
|
|
17910
18014
|
getTokenBalance,
|
|
17911
18015
|
lastUpdated: dataUpdatedAt || null
|
|
17912
18016
|
};
|
|
17913
18017
|
}
|
|
17914
|
-
var NATIVE_BALANCE_QUERY_KEY, BLOCKSCOUT_QUERY_KEY, ERC3643_DETECTION_QUERY_KEY, ERC3643_ABI;
|
|
17915
18018
|
var init_useBlockscoutAssets = __esm({
|
|
17916
|
-
"src/internal/hooks/useBlockscoutAssets.ts"() {
|
|
18019
|
+
"src/internal/hooks/useBlockscoutAssets/useBlockscoutAssets.ts"() {
|
|
17917
18020
|
init_ProviderContext();
|
|
17918
18021
|
init_initial();
|
|
17919
18022
|
init_constants();
|
|
17920
18023
|
init_useResolvedPublicClient();
|
|
18024
|
+
init_constants5();
|
|
18025
|
+
init_useNativeBalance();
|
|
18026
|
+
init_useWatchTokens();
|
|
18027
|
+
init_utils8();
|
|
18028
|
+
}
|
|
18029
|
+
});
|
|
18030
|
+
|
|
18031
|
+
// src/internal/hooks/useBlockscoutAssets/index.ts
|
|
18032
|
+
var init_useBlockscoutAssets2 = __esm({
|
|
18033
|
+
"src/internal/hooks/useBlockscoutAssets/index.ts"() {
|
|
18034
|
+
init_useBlockscoutAssets();
|
|
18035
|
+
init_useNativeBalance();
|
|
17921
18036
|
init_useWatchTokens();
|
|
17922
|
-
NATIVE_BALANCE_QUERY_KEY = "blockscouts-native-balance-query";
|
|
17923
|
-
BLOCKSCOUT_QUERY_KEY = "blockscout-token-balances";
|
|
17924
|
-
ERC3643_DETECTION_QUERY_KEY = "erc3643-detection";
|
|
17925
|
-
ERC3643_ABI = [
|
|
17926
|
-
{
|
|
17927
|
-
name: "identityRegistry",
|
|
17928
|
-
type: "function",
|
|
17929
|
-
stateMutability: "view",
|
|
17930
|
-
inputs: [],
|
|
17931
|
-
outputs: [{ name: "", type: "address" }]
|
|
17932
|
-
}
|
|
17933
|
-
];
|
|
17934
18037
|
}
|
|
17935
18038
|
});
|
|
17936
18039
|
|
|
@@ -17943,7 +18046,7 @@ var init_no_image = __esm({
|
|
|
17943
18046
|
});
|
|
17944
18047
|
|
|
17945
18048
|
// src/internal/components/BalanceView/BalanceView.tsx
|
|
17946
|
-
import { formatUnits as
|
|
18049
|
+
import { formatUnits as formatUnits5 } from "viem";
|
|
17947
18050
|
import { jsx as jsx81, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
17948
18051
|
function BalanceView(props) {
|
|
17949
18052
|
const { className } = props;
|
|
@@ -17951,22 +18054,35 @@ function BalanceView(props) {
|
|
|
17951
18054
|
const showFiatBalance = config.current?.features?.showActiveBalanceAsFiat;
|
|
17952
18055
|
const balance = useLayoutDataStore((st) => st.balance);
|
|
17953
18056
|
const cryptoSymbol = useLayoutDataStore((st) => st.cryptoSymbol);
|
|
17954
|
-
const cryptoBalance = Number(
|
|
18057
|
+
const cryptoBalance = Number(formatUnits5(balance?.value || BigInt(0), balance?.decimals || 18));
|
|
17955
18058
|
const fiatBalance = useLayoutDataStore((st) => st.fiatBalance);
|
|
17956
18059
|
const fiatSymbol = useLayoutDataStore((st) => st.fiatSymbol);
|
|
17957
|
-
const
|
|
17958
|
-
return /* @__PURE__ */ jsxs75(
|
|
17959
|
-
|
|
17960
|
-
|
|
17961
|
-
|
|
17962
|
-
|
|
17963
|
-
|
|
17964
|
-
|
|
17965
|
-
|
|
18060
|
+
const BalanceIcon = showFiatBalance && !!fiatBalance ? TOKENS_ICONS[cryptoSymbol] : null;
|
|
18061
|
+
return /* @__PURE__ */ jsxs75(
|
|
18062
|
+
"p",
|
|
18063
|
+
{
|
|
18064
|
+
className: cn(
|
|
18065
|
+
//
|
|
18066
|
+
"flex items-center gap-1",
|
|
18067
|
+
"text-lg leading-5 font-bold",
|
|
18068
|
+
className
|
|
18069
|
+
),
|
|
18070
|
+
children: [
|
|
18071
|
+
!!BalanceIcon && /* @__PURE__ */ jsx81(BalanceIcon, { className: "w-5 h-5" }),
|
|
18072
|
+
/* @__PURE__ */ jsxs75("span", { children: [
|
|
18073
|
+
showFiatBalance && !!fiatBalance && BALANCE_PREFIXES[fiatSymbol],
|
|
18074
|
+
formatPrice(showFiatBalance ? fiatBalance : cryptoBalance)
|
|
18075
|
+
] }),
|
|
18076
|
+
showFiatBalance && !!fiatBalance && !BALANCE_PREFIXES[fiatSymbol] && /* @__PURE__ */ jsx81("span", { children: fiatSymbol }),
|
|
18077
|
+
!showFiatBalance && /* @__PURE__ */ jsx81("span", { children: cryptoSymbol })
|
|
18078
|
+
]
|
|
18079
|
+
}
|
|
18080
|
+
);
|
|
17966
18081
|
}
|
|
17967
18082
|
var BALANCE_PREFIXES;
|
|
17968
18083
|
var init_BalanceView = __esm({
|
|
17969
18084
|
"src/internal/components/BalanceView/BalanceView.tsx"() {
|
|
18085
|
+
init_tokens();
|
|
17970
18086
|
init_useLayoutDataStore();
|
|
17971
18087
|
init_priceFormatter();
|
|
17972
18088
|
init_utils2();
|
|
@@ -17989,9 +18105,9 @@ var init_BalanceView2 = __esm({
|
|
|
17989
18105
|
});
|
|
17990
18106
|
|
|
17991
18107
|
// src/internal/components/PortfolioMenu/PortfolioItem.tsx
|
|
17992
|
-
import { useQuery as
|
|
18108
|
+
import { useQuery as useQuery16 } from "@tanstack/react-query";
|
|
17993
18109
|
import { LoaderIcon as LoaderIcon8, ShieldAlertIcon, SparklesIcon } from "lucide-react";
|
|
17994
|
-
import { formatUnits as
|
|
18110
|
+
import { formatUnits as formatUnits6 } from "viem";
|
|
17995
18111
|
import { Fragment as Fragment30, jsx as jsx82, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
17996
18112
|
function openInExplorer(address) {
|
|
17997
18113
|
window.open(`${getExplorerUrl()}/address/${address}`, "_blank");
|
|
@@ -18099,7 +18215,7 @@ function PortfolioItem(props) {
|
|
|
18099
18215
|
queryKey: asset.balanceQueryKey,
|
|
18100
18216
|
queryFn: asset.balanceQuery
|
|
18101
18217
|
} : void 0;
|
|
18102
|
-
const { data: projectAssetBalance } =
|
|
18218
|
+
const { data: projectAssetBalance } = useQuery16({
|
|
18103
18219
|
enabled: !!projectAssetQuery,
|
|
18104
18220
|
retry: false,
|
|
18105
18221
|
queryKey: projectAssetQuery?.queryKey ?? ["project-asset-balance-disabled", asset.symbol],
|
|
@@ -18109,7 +18225,7 @@ function PortfolioItem(props) {
|
|
|
18109
18225
|
const isSecurity = isSecurityToken(asset);
|
|
18110
18226
|
const embeddedRate = Number(asset.exchangeRateUsd || 0);
|
|
18111
18227
|
const hasEmbeddedRate = Number.isFinite(embeddedRate) && embeddedRate > 0;
|
|
18112
|
-
const { data: assetRate, isLoading: isRateLoading } =
|
|
18228
|
+
const { data: assetRate, isLoading: isRateLoading } = useQuery16({
|
|
18113
18229
|
enabled: !!address && !hasEmbeddedRate && !isProjectAsset && !isNft && !isSecurity && (!!customAssetRateQuery || !!isAssetRateAvailable(asset.symbol)),
|
|
18114
18230
|
retry: false,
|
|
18115
18231
|
staleTime: 4 * 60 * 1e3,
|
|
@@ -18118,7 +18234,7 @@ function PortfolioItem(props) {
|
|
|
18118
18234
|
queryFn: async () => await resolveAssetRate(asset.symbol, asset.address, customAssetRateQuery)
|
|
18119
18235
|
});
|
|
18120
18236
|
const hasProjectAssetBalance = isProjectAsset && projectAssetBalance != null;
|
|
18121
|
-
const renderBalance = hasProjectAssetBalance ? projectAssetBalance.cryptoFormatted : Number(
|
|
18237
|
+
const renderBalance = hasProjectAssetBalance ? projectAssetBalance.cryptoFormatted : Number(formatUnits6(BigInt(asset?.balance || "0"), asset?.decimals || 18));
|
|
18122
18238
|
const resolvedRate = hasEmbeddedRate ? embeddedRate : Number(assetRate?.price || 0);
|
|
18123
18239
|
const usdRenderBalance = resolvedRate > 0 ? renderBalance * resolvedRate : 0;
|
|
18124
18240
|
const shortContractAddress = asset.address ? truncateMiddle(asset.address, 6, 4) : null;
|
|
@@ -18208,15 +18324,14 @@ function PortfolioMenu() {
|
|
|
18208
18324
|
const { t } = useT();
|
|
18209
18325
|
const qc = useQueryClient20();
|
|
18210
18326
|
const address = useSession((st) => st.address);
|
|
18211
|
-
const chainConfig = useSession((st) => st.chainConfig);
|
|
18212
18327
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
18213
18328
|
const {
|
|
18214
18329
|
assets: blockscoutAssets,
|
|
18215
18330
|
refreshBalances: refreshBlockscoutBalances,
|
|
18216
18331
|
isLoading: isBlockscoutLoading,
|
|
18217
18332
|
isFetching: isBlockscoutFetching,
|
|
18218
|
-
error: blockscoutError
|
|
18219
|
-
isBlockscoutAvailable
|
|
18333
|
+
error: blockscoutError
|
|
18334
|
+
// isBlockscoutAvailable
|
|
18220
18335
|
} = useBlockscoutAssets({
|
|
18221
18336
|
address,
|
|
18222
18337
|
enabled: !!address
|
|
@@ -18273,11 +18388,6 @@ function PortfolioMenu() {
|
|
|
18273
18388
|
},
|
|
18274
18389
|
`${asset.type}-${asset.address || "native"}-${asset.tokenId || index}`
|
|
18275
18390
|
)),
|
|
18276
|
-
!isBlockscoutAvailable && /* @__PURE__ */ jsx83(Highlight, {
|
|
18277
|
-
type: "warning",
|
|
18278
|
-
//@ts-expect-error i18n typings
|
|
18279
|
-
children: t("passport:portfolioMenu.noBlockscout", { chain: chainConfig?.name?.toUpperCase() || "UNKNOWN" })
|
|
18280
|
-
}),
|
|
18281
18391
|
blockscoutError && /* @__PURE__ */ jsx83(Highlight, { type: "error", children: blockscoutError?.message })
|
|
18282
18392
|
] })
|
|
18283
18393
|
}
|
|
@@ -18288,7 +18398,7 @@ var init_PortfolioMenu = __esm({
|
|
|
18288
18398
|
init_ProviderContext();
|
|
18289
18399
|
init_SessionContext();
|
|
18290
18400
|
init_i18n();
|
|
18291
|
-
|
|
18401
|
+
init_useBlockscoutAssets2();
|
|
18292
18402
|
init_useLayoutDataStore();
|
|
18293
18403
|
init_useLayoutStore();
|
|
18294
18404
|
init_Expandable2();
|
|
@@ -18388,7 +18498,7 @@ var init_nickname_fingerprint = __esm({
|
|
|
18388
18498
|
// src/internal/components/ReceiveMenu/ReceiveMenu.tsx
|
|
18389
18499
|
import { ArrowLeft as ArrowLeft17, CheckCircle2 as CheckCircle23, Copy as Copy2, Info as Info5, Loader as Loader17, Shield } from "lucide-react";
|
|
18390
18500
|
import QRCode from "qrcode";
|
|
18391
|
-
import { useCallback as useCallback25, useEffect as useEffect33, useMemo as useMemo11, useState as
|
|
18501
|
+
import { useCallback as useCallback25, useEffect as useEffect33, useMemo as useMemo11, useState as useState20 } from "react";
|
|
18392
18502
|
import { Fragment as Fragment31, jsx as jsx84, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
18393
18503
|
function ReceiveMenu() {
|
|
18394
18504
|
const session = useSession((st) => st.session);
|
|
@@ -18399,9 +18509,9 @@ function ReceiveMenu() {
|
|
|
18399
18509
|
const { t } = useT();
|
|
18400
18510
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
18401
18511
|
const open = page === "receive";
|
|
18402
|
-
const [qrCodeUrl, setQrCodeUrl] =
|
|
18403
|
-
const [copied, setCopied] =
|
|
18404
|
-
const [fingerprintCopied, setFingerprintCopied] =
|
|
18512
|
+
const [qrCodeUrl, setQrCodeUrl] = useState20("");
|
|
18513
|
+
const [copied, setCopied] = useState20(false);
|
|
18514
|
+
const [fingerprintCopied, setFingerprintCopied] = useState20(false);
|
|
18405
18515
|
const fingerprint = useMemo11(() => {
|
|
18406
18516
|
if (!session?.ownerAddress) return null;
|
|
18407
18517
|
try {
|
|
@@ -18533,7 +18643,7 @@ var init_useSecurityStore = __esm({
|
|
|
18533
18643
|
|
|
18534
18644
|
// src/internal/components/SecurityMenu/constants.ts
|
|
18535
18645
|
var KEYSHARE_RECOVERY_STATS_QUERY, CONNECTED_TRUSTED_APPS_QUERY;
|
|
18536
|
-
var
|
|
18646
|
+
var init_constants6 = __esm({
|
|
18537
18647
|
"src/internal/components/SecurityMenu/constants.ts"() {
|
|
18538
18648
|
KEYSHARE_RECOVERY_STATS_QUERY = "keyshare-recovery-stats-query";
|
|
18539
18649
|
CONNECTED_TRUSTED_APPS_QUERY = "connected-trusted-apps-query";
|
|
@@ -18541,11 +18651,11 @@ var init_constants5 = __esm({
|
|
|
18541
18651
|
});
|
|
18542
18652
|
|
|
18543
18653
|
// src/internal/components/SecurityMenu/ConnectedApps/useConnectedApps.ts
|
|
18544
|
-
import { useQuery as
|
|
18654
|
+
import { useQuery as useQuery17 } from "@tanstack/react-query";
|
|
18545
18655
|
function useConnectedApps() {
|
|
18546
18656
|
const session = useSession((st) => st.session);
|
|
18547
18657
|
const userId = session?.mpcUserId || null;
|
|
18548
|
-
return
|
|
18658
|
+
return useQuery17({
|
|
18549
18659
|
retry: false,
|
|
18550
18660
|
enabled: !!userId,
|
|
18551
18661
|
queryKey: [CONNECTED_TRUSTED_APPS_QUERY, userId],
|
|
@@ -18562,7 +18672,7 @@ var init_useConnectedApps = __esm({
|
|
|
18562
18672
|
"src/internal/components/SecurityMenu/ConnectedApps/useConnectedApps.ts"() {
|
|
18563
18673
|
init_SessionContext();
|
|
18564
18674
|
init_httpClient();
|
|
18565
|
-
|
|
18675
|
+
init_constants6();
|
|
18566
18676
|
}
|
|
18567
18677
|
});
|
|
18568
18678
|
|
|
@@ -18789,7 +18899,7 @@ var init_UntrustApplication = __esm({
|
|
|
18789
18899
|
init_iframe_manager();
|
|
18790
18900
|
init_button();
|
|
18791
18901
|
init_highlight();
|
|
18792
|
-
|
|
18902
|
+
init_constants6();
|
|
18793
18903
|
init_useSecurityStore();
|
|
18794
18904
|
}
|
|
18795
18905
|
});
|
|
@@ -18900,11 +19010,11 @@ var init_LastBackup = __esm({
|
|
|
18900
19010
|
});
|
|
18901
19011
|
|
|
18902
19012
|
// src/internal/components/SecurityMenu/Keyshare/useKeyshareRecoveryStats.ts
|
|
18903
|
-
import { useQuery as
|
|
19013
|
+
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
18904
19014
|
function useKeyshareRecoveryStats() {
|
|
18905
19015
|
const session = useSession((st) => st.session);
|
|
18906
19016
|
const userId = session?.mpcUserId || null;
|
|
18907
|
-
return
|
|
19017
|
+
return useQuery18({
|
|
18908
19018
|
enabled: !!userId,
|
|
18909
19019
|
queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId],
|
|
18910
19020
|
queryFn: async () => {
|
|
@@ -18927,7 +19037,7 @@ var init_useKeyshareRecoveryStats = __esm({
|
|
|
18927
19037
|
init_keyshare();
|
|
18928
19038
|
init_iframe_manager();
|
|
18929
19039
|
init_vaultClient();
|
|
18930
|
-
|
|
19040
|
+
init_constants6();
|
|
18931
19041
|
}
|
|
18932
19042
|
});
|
|
18933
19043
|
|
|
@@ -19346,7 +19456,7 @@ var init_useBridgeStore = __esm({
|
|
|
19346
19456
|
// src/internal/components/SendMenu/hyperbridge/components/SenderSelector.tsx
|
|
19347
19457
|
import { useConnectModal } from "@rainbow-me/rainbowkit";
|
|
19348
19458
|
import { useMutation as useMutation19 } from "@tanstack/react-query";
|
|
19349
|
-
import { useEffect as useEffect36, useRef as
|
|
19459
|
+
import { useEffect as useEffect36, useRef as useRef16, useState as useState21 } from "react";
|
|
19350
19460
|
import { useSignMessage } from "wagmi";
|
|
19351
19461
|
import { jsx as jsx91, jsxs as jsxs85 } from "react/jsx-runtime";
|
|
19352
19462
|
function SenderSelector(props) {
|
|
@@ -19357,11 +19467,11 @@ function SenderSelector(props) {
|
|
|
19357
19467
|
const { openConnectModal } = useConnectModal();
|
|
19358
19468
|
const directWalletAddress = useExternalWalletStore((st) => st.externalAddress);
|
|
19359
19469
|
const directWalletIsConnected = useExternalWalletStore((st) => st.isExternalConnected);
|
|
19360
|
-
const pendingWalletRef =
|
|
19470
|
+
const pendingWalletRef = useRef16(null);
|
|
19361
19471
|
const originChain = useBridgeStore((st) => st.originChain);
|
|
19362
19472
|
const bridgeSender = useBridgeStore((st) => st.bridgeSender);
|
|
19363
19473
|
const bridgeSenders = useBridgeStore((st) => st.bridgeSenders);
|
|
19364
|
-
const [walletMessage, setWalletMessage] =
|
|
19474
|
+
const [walletMessage, setWalletMessage] = useState21(null);
|
|
19365
19475
|
useEffect36(() => {
|
|
19366
19476
|
useFlowSelectorStore.getState().setRenderKey(`sender-selected-${Date.now()}`);
|
|
19367
19477
|
}, [walletMessage]);
|
|
@@ -19591,11 +19701,11 @@ var init_wallets = __esm({
|
|
|
19591
19701
|
});
|
|
19592
19702
|
|
|
19593
19703
|
// src/internal/components/SendMenu/hyperbridge/hooks/useAvailableSenders.ts
|
|
19594
|
-
import { useEffect as useEffect37, useRef as
|
|
19704
|
+
import { useEffect as useEffect37, useRef as useRef17 } from "react";
|
|
19595
19705
|
function useAvailableSenders() {
|
|
19596
19706
|
const address = useSession((st) => st.address);
|
|
19597
19707
|
const { profiles } = useLinkedProfiles();
|
|
19598
|
-
const lastCalcedSenders =
|
|
19708
|
+
const lastCalcedSenders = useRef17([]);
|
|
19599
19709
|
useEffect37(() => {
|
|
19600
19710
|
const sendersAccumulator = [
|
|
19601
19711
|
{
|
|
@@ -19935,7 +20045,7 @@ var init_executeWarpTxs = __esm({
|
|
|
19935
20045
|
|
|
19936
20046
|
// src/internal/components/SendMenu/hyperbridge/utils.ts
|
|
19937
20047
|
import { SUPPORTED_CHAINS as SUPPORTED_CHAINS2 } from "@embarkai/core/read";
|
|
19938
|
-
import { formatUnits as
|
|
20048
|
+
import { formatUnits as formatUnits7 } from "viem";
|
|
19939
20049
|
function isNftAsset2(asset) {
|
|
19940
20050
|
if (!asset) return false;
|
|
19941
20051
|
return asset.type === "erc721" || asset.type === "erc1155";
|
|
@@ -19943,13 +20053,13 @@ function isNftAsset2(asset) {
|
|
|
19943
20053
|
function getAssetBalance(asset) {
|
|
19944
20054
|
if (!asset) return 0;
|
|
19945
20055
|
if (isNftAsset2(asset)) return 1;
|
|
19946
|
-
return Number(
|
|
20056
|
+
return Number(formatUnits7(BigInt(asset.balance || "0"), asset.decimals || 18));
|
|
19947
20057
|
}
|
|
19948
20058
|
function isOririnChainEmbarkSupported(originChain) {
|
|
19949
20059
|
const supportedChain = [...SUPPORTED_CHAINS2].map(([chainId]) => chainId);
|
|
19950
20060
|
return supportedChain.includes(CHAINS_UI_META[originChain].chainID);
|
|
19951
20061
|
}
|
|
19952
|
-
var
|
|
20062
|
+
var init_utils9 = __esm({
|
|
19953
20063
|
"src/internal/components/SendMenu/hyperbridge/utils.ts"() {
|
|
19954
20064
|
init_chains();
|
|
19955
20065
|
}
|
|
@@ -20216,14 +20326,14 @@ var init_useBridge = __esm({
|
|
|
20216
20326
|
init_chains();
|
|
20217
20327
|
init_executeWarpTxs();
|
|
20218
20328
|
init_useBridgeStore();
|
|
20219
|
-
|
|
20329
|
+
init_utils9();
|
|
20220
20330
|
init_useHyperlaneHistory();
|
|
20221
20331
|
init_useOperationHashesStore();
|
|
20222
20332
|
}
|
|
20223
20333
|
});
|
|
20224
20334
|
|
|
20225
20335
|
// src/internal/components/SendMenu/hyperbridge/hooks/useHyperlaneRoutes.ts
|
|
20226
|
-
import { useQuery as
|
|
20336
|
+
import { useQuery as useQuery19 } from "@tanstack/react-query";
|
|
20227
20337
|
import { useEffect as useEffect39 } from "react";
|
|
20228
20338
|
function useHyperlaneRoutes() {
|
|
20229
20339
|
const address = useSession((st) => st.address);
|
|
@@ -20234,7 +20344,7 @@ function useHyperlaneRoutes() {
|
|
|
20234
20344
|
data: hyperlaneWarpRoutes = [],
|
|
20235
20345
|
isLoading: isLoadingWarpRoutes,
|
|
20236
20346
|
error: errorWarpRoutes
|
|
20237
|
-
} =
|
|
20347
|
+
} = useQuery19({
|
|
20238
20348
|
retry: false,
|
|
20239
20349
|
enabled: !!address && page === "send" /* SEND */ && flow === "bridge",
|
|
20240
20350
|
queryKey: [HYPERLANE_WARP_ROUTES_QUERY_KEY, address],
|
|
@@ -20280,7 +20390,7 @@ var init_useHyperlaneRoutes = __esm({
|
|
|
20280
20390
|
init_useFlowSelector();
|
|
20281
20391
|
init_api3();
|
|
20282
20392
|
init_useBridgeStore();
|
|
20283
|
-
|
|
20393
|
+
init_utils9();
|
|
20284
20394
|
HYPERLANE_WARP_ROUTES_QUERY_KEY = "hyperlane-available-warp-routes";
|
|
20285
20395
|
}
|
|
20286
20396
|
});
|
|
@@ -20343,9 +20453,9 @@ var init_ResolveChainIcon = __esm({
|
|
|
20343
20453
|
|
|
20344
20454
|
// src/internal/components/SendMenu/hyperbridge/hooks/useBridgeBalance.ts
|
|
20345
20455
|
import { CHAINS_BROWSERS_TRANSPORTS as CHAINS_BROWSERS_TRANSPORTS2 } from "@embarkai/core";
|
|
20346
|
-
import { useQuery as
|
|
20456
|
+
import { useQuery as useQuery20, useQueryClient as useQueryClient23 } from "@tanstack/react-query";
|
|
20347
20457
|
import { useCallback as useCallback28, useEffect as useEffect41 } from "react";
|
|
20348
|
-
import { createPublicClient as createPublicClient2, erc20Abi as
|
|
20458
|
+
import { createPublicClient as createPublicClient2, erc20Abi as erc20Abi3, formatUnits as formatUnits8, http as http3 } from "viem";
|
|
20349
20459
|
import { useSwitchChain as useSwitchChain2 } from "wagmi";
|
|
20350
20460
|
function checkWrapedTokenSymbol2(symbol) {
|
|
20351
20461
|
if (WRAPPED_TOKENS.includes(symbol)) {
|
|
@@ -20381,7 +20491,7 @@ function useBridgeBalance(hyperlaneWarpRoutes) {
|
|
|
20381
20491
|
const embarkTokenBalanace = assets.find((a) => selectedWarpRoute?.symbol === checkWrapedTokenSymbol2(a.symbol));
|
|
20382
20492
|
const originChainMeta = CHAINS_UI_META[originChain];
|
|
20383
20493
|
const isSelectedTokenNative = selectedWarpRoute?.symbol?.toUpperCase() === originChainMeta?.chain?.nativeCurrency?.symbol?.toUpperCase();
|
|
20384
|
-
const { data: externalBalanceData, isLoading: isExternalBalanceLoading } =
|
|
20494
|
+
const { data: externalBalanceData, isLoading: isExternalBalanceLoading } = useQuery20({
|
|
20385
20495
|
retry: false,
|
|
20386
20496
|
enabled: bridgeSender === "direct-wallet" && !isSelectedTokenNative && !!directWalletAddress && !!routeTokenAddress && !!originChain,
|
|
20387
20497
|
queryKey: [EXTERNAL_WALLET_BRIDGING_BALANCE_QUERY, originChain, directWalletAddress, routeTokenAddress],
|
|
@@ -20394,20 +20504,20 @@ function useBridgeBalance(hyperlaneWarpRoutes) {
|
|
|
20394
20504
|
const [value, decimals, symbol] = await Promise.all([
|
|
20395
20505
|
client.readContract({
|
|
20396
20506
|
address: routeTokenAddress,
|
|
20397
|
-
abi:
|
|
20507
|
+
abi: erc20Abi3,
|
|
20398
20508
|
functionName: "balanceOf",
|
|
20399
20509
|
args: [directWalletAddress],
|
|
20400
20510
|
authorizationList: void 0
|
|
20401
20511
|
}),
|
|
20402
20512
|
client.readContract({
|
|
20403
20513
|
address: routeTokenAddress,
|
|
20404
|
-
abi:
|
|
20514
|
+
abi: erc20Abi3,
|
|
20405
20515
|
functionName: "decimals",
|
|
20406
20516
|
authorizationList: void 0
|
|
20407
20517
|
}),
|
|
20408
20518
|
client.readContract({
|
|
20409
20519
|
address: routeTokenAddress,
|
|
20410
|
-
abi:
|
|
20520
|
+
abi: erc20Abi3,
|
|
20411
20521
|
functionName: "symbol",
|
|
20412
20522
|
authorizationList: void 0
|
|
20413
20523
|
})
|
|
@@ -20420,11 +20530,11 @@ function useBridgeBalance(hyperlaneWarpRoutes) {
|
|
|
20420
20530
|
});
|
|
20421
20531
|
return [BigInt(0), 18, selectedWarpRoute.symbol];
|
|
20422
20532
|
});
|
|
20423
|
-
const formatted = Number(
|
|
20533
|
+
const formatted = Number(formatUnits8(value, decimals));
|
|
20424
20534
|
return { value, decimals, symbol, formatted };
|
|
20425
20535
|
}
|
|
20426
20536
|
});
|
|
20427
|
-
const { data: externalNativeBalanceData, isLoading: isExternalNativeBalanceLoading } =
|
|
20537
|
+
const { data: externalNativeBalanceData, isLoading: isExternalNativeBalanceLoading } = useQuery20({
|
|
20428
20538
|
retry: false,
|
|
20429
20539
|
enabled: bridgeSender === "direct-wallet" && isSelectedTokenNative && !!directWalletAddress && !!originChain,
|
|
20430
20540
|
queryKey: [EXTERNAL_WALLET_BRIDGING_NATIVE_BALANCE_QUERY, originChain, directWalletAddress],
|
|
@@ -20480,7 +20590,7 @@ function useBridgeBalance(hyperlaneWarpRoutes) {
|
|
|
20480
20590
|
}
|
|
20481
20591
|
}, [bridgeSender, originChain, directWalletChainId, switchChainAsync]);
|
|
20482
20592
|
const embarkBalance = embarkTokenBalanace ? getAssetBalance(embarkTokenBalanace) : 0;
|
|
20483
|
-
const externalWalletBalance = isSelectedTokenNative ?
|
|
20593
|
+
const externalWalletBalance = isSelectedTokenNative ? formatUnits8(externalNativeBalanceData?.value || BigInt(0), externalNativeBalanceData?.decimals || 18) : formatUnits8(externalBalanceData?.value || BigInt(0), externalBalanceData?.decimals || 18);
|
|
20484
20594
|
return {
|
|
20485
20595
|
routeTokenBalance: isEmbarkSender ? embarkBalance : externalWalletBalance,
|
|
20486
20596
|
isRouteTokenBalanceLoading: isAssetsLoading || isExternalBalanceLoading || isExternalNativeBalanceLoading
|
|
@@ -20492,12 +20602,12 @@ var init_useBridgeBalance = __esm({
|
|
|
20492
20602
|
init_constants();
|
|
20493
20603
|
init_SessionContext();
|
|
20494
20604
|
init_i18n();
|
|
20495
|
-
|
|
20605
|
+
init_useBlockscoutAssets2();
|
|
20496
20606
|
init_useExternalWalletStore();
|
|
20497
20607
|
init_useFlowSelector();
|
|
20498
20608
|
init_chains();
|
|
20499
20609
|
init_useBridgeStore();
|
|
20500
|
-
|
|
20610
|
+
init_utils9();
|
|
20501
20611
|
EXTERNAL_WALLET_BRIDGING_BALANCE_QUERY = "external-wallet-bridging-balance-query";
|
|
20502
20612
|
EXTERNAL_WALLET_BRIDGING_NATIVE_BALANCE_QUERY = "external-wallet-bridging-native-balance-query";
|
|
20503
20613
|
}
|
|
@@ -20794,11 +20904,11 @@ var init_checkbox = __esm({
|
|
|
20794
20904
|
|
|
20795
20905
|
// src/internal/components/SendMenu/hyperbridge/steps/ConfirmStep.tsx
|
|
20796
20906
|
import { LoaderIcon as LoaderIcon12 } from "lucide-react";
|
|
20797
|
-
import { useState as
|
|
20907
|
+
import { useState as useState22 } from "react";
|
|
20798
20908
|
import { jsx as jsx97, jsxs as jsxs89 } from "react/jsx-runtime";
|
|
20799
20909
|
function ConfirmStep(props) {
|
|
20800
20910
|
const { isAssetBridging, bridgeAsset, hyperlaneWarpRoutes } = props;
|
|
20801
|
-
const [userConsent, setUserConsent] =
|
|
20911
|
+
const [userConsent, setUserConsent] = useState22(false);
|
|
20802
20912
|
const { t } = useT();
|
|
20803
20913
|
const address = useSession((st) => st.address);
|
|
20804
20914
|
const bridgeSender = useBridgeStore((st) => st.bridgeSenders.find((s) => s.type === st.bridgeSender));
|
|
@@ -21283,12 +21393,12 @@ var init_HistoryStep = __esm({
|
|
|
21283
21393
|
|
|
21284
21394
|
// src/internal/components/SendMenu/hyperbridge/steps/SelectAssetRoute.tsx
|
|
21285
21395
|
import { ArrowLeftRightIcon as ArrowLeftRightIcon2 } from "lucide-react";
|
|
21286
|
-
import { useMemo as useMemo13, useState as
|
|
21396
|
+
import { useMemo as useMemo13, useState as useState23 } from "react";
|
|
21287
21397
|
import { Fragment as Fragment38, jsx as jsx100, jsxs as jsxs92 } from "react/jsx-runtime";
|
|
21288
21398
|
function SelectAssetRoute(props) {
|
|
21289
21399
|
const { hyperlaneWarpRoutes } = props;
|
|
21290
21400
|
const { t } = useT();
|
|
21291
|
-
const [isTokenSymbolSelector, setIsTokenSymbolSelector] =
|
|
21401
|
+
const [isTokenSymbolSelector, setIsTokenSymbolSelector] = useState23(false);
|
|
21292
21402
|
const selectedAssetSymbol = useBridgeStore((st) => st.bridgeAssetSymbol);
|
|
21293
21403
|
const tokenList = useMemo13(() => {
|
|
21294
21404
|
const tokens = hyperlaneWarpRoutes.map((route) => route.symbol);
|
|
@@ -21395,7 +21505,7 @@ var init_SelectAssetRoute = __esm({
|
|
|
21395
21505
|
init_useFlowSelector();
|
|
21396
21506
|
init_ResolveChainIcon();
|
|
21397
21507
|
init_useBridgeStore();
|
|
21398
|
-
|
|
21508
|
+
init_utils9();
|
|
21399
21509
|
}
|
|
21400
21510
|
});
|
|
21401
21511
|
|
|
@@ -21465,14 +21575,14 @@ var init_HyperlaneBridge = __esm({
|
|
|
21465
21575
|
});
|
|
21466
21576
|
|
|
21467
21577
|
// src/internal/components/SendMenu/hyperbridge/components/HistorySwitch.tsx
|
|
21468
|
-
import { useRef as
|
|
21578
|
+
import { useRef as useRef18 } from "react";
|
|
21469
21579
|
import { jsx as jsx102 } from "react/jsx-runtime";
|
|
21470
21580
|
function BridgeHistorySwitch(props) {
|
|
21471
21581
|
const { disabled } = props;
|
|
21472
21582
|
const selectorFlow = useFlowSelectorStore((st) => st.flow);
|
|
21473
21583
|
const isUiLocked = useFlowSelectorStore((st) => st.isUiLocked);
|
|
21474
21584
|
const bridgeStep = useBridgeStore((st) => st.bridgeStep);
|
|
21475
|
-
const lastBridgeStepRef =
|
|
21585
|
+
const lastBridgeStepRef = useRef18(null);
|
|
21476
21586
|
if (selectorFlow !== "bridge" || bridgeStep === "confirm" || bridgeStep === "success" || bridgeStep === "sender-selector" || bridgeStep === "select-token" || bridgeStep === "tx-history-details") {
|
|
21477
21587
|
return null;
|
|
21478
21588
|
}
|
|
@@ -21573,8 +21683,8 @@ var init_useErc3643Compliance = __esm({
|
|
|
21573
21683
|
});
|
|
21574
21684
|
|
|
21575
21685
|
// src/hooks/useNicknameResolve.ts
|
|
21576
|
-
import { useQuery as
|
|
21577
|
-
import { useEffect as useEffect43, useMemo as useMemo14, useState as
|
|
21686
|
+
import { useQuery as useQuery21 } from "@tanstack/react-query";
|
|
21687
|
+
import { useEffect as useEffect43, useMemo as useMemo14, useState as useState24 } from "react";
|
|
21578
21688
|
function looksLikeNickname(input) {
|
|
21579
21689
|
if (!input) return false;
|
|
21580
21690
|
if (input.startsWith("0x")) return false;
|
|
@@ -21584,8 +21694,8 @@ function looksLikeNickname(input) {
|
|
|
21584
21694
|
}
|
|
21585
21695
|
function useNicknameResolve(input, options) {
|
|
21586
21696
|
const { enabled = true, chainId } = options;
|
|
21587
|
-
const [debouncedInput, setDebouncedInput] =
|
|
21588
|
-
const [isDebouncing, setIsDebouncing] =
|
|
21697
|
+
const [debouncedInput, setDebouncedInput] = useState24("");
|
|
21698
|
+
const [isDebouncing, setIsDebouncing] = useState24(false);
|
|
21589
21699
|
const normalized = normalizeNickname(input);
|
|
21590
21700
|
const isNicknameInput = looksLikeNickname(input) && normalized.length >= 3;
|
|
21591
21701
|
useEffect43(() => {
|
|
@@ -21603,7 +21713,7 @@ function useNicknameResolve(input, options) {
|
|
|
21603
21713
|
clearTimeout(timer);
|
|
21604
21714
|
};
|
|
21605
21715
|
}, [normalized, isNicknameInput, enabled]);
|
|
21606
|
-
const query =
|
|
21716
|
+
const query = useQuery21({
|
|
21607
21717
|
queryKey: [...QUERY_KEYS.nicknameResolve(debouncedInput), chainId],
|
|
21608
21718
|
queryFn: async () => await resolveNickname(debouncedInput, chainId),
|
|
21609
21719
|
enabled: enabled && isNicknameInput && debouncedInput.length > 0,
|
|
@@ -21648,14 +21758,14 @@ var init_useNicknameResolve = __esm({
|
|
|
21648
21758
|
});
|
|
21649
21759
|
|
|
21650
21760
|
// src/hooks/useSendTransaction.ts
|
|
21651
|
-
import { useCallback as useCallback29, useState as
|
|
21761
|
+
import { useCallback as useCallback29, useState as useState25 } from "react";
|
|
21652
21762
|
import { encodeFunctionData as encodeFunctionData2, isAddress, parseEther as parseEther2, parseUnits } from "viem";
|
|
21653
21763
|
function useSendTransaction() {
|
|
21654
21764
|
const session = useSession((st) => st.session);
|
|
21655
21765
|
const address = useSession((st) => st.address);
|
|
21656
|
-
const [isLoading, setIsLoading] =
|
|
21657
|
-
const [error, setError] =
|
|
21658
|
-
const [userOpHash, setUserOpHash] =
|
|
21766
|
+
const [isLoading, setIsLoading] = useState25(false);
|
|
21767
|
+
const [error, setError] = useState25(null);
|
|
21768
|
+
const [userOpHash, setUserOpHash] = useState25(null);
|
|
21659
21769
|
const sendTransaction = useCallback29(
|
|
21660
21770
|
async (params) => {
|
|
21661
21771
|
if (!session || !address) {
|
|
@@ -21812,7 +21922,7 @@ var init_useSendTransaction = __esm({
|
|
|
21812
21922
|
});
|
|
21813
21923
|
|
|
21814
21924
|
// src/internal/components/SendMenu/send/utils.ts
|
|
21815
|
-
import { formatUnits as
|
|
21925
|
+
import { formatUnits as formatUnits9 } from "viem";
|
|
21816
21926
|
function isNftAsset3(asset) {
|
|
21817
21927
|
if (!asset) return false;
|
|
21818
21928
|
return asset.type === "erc721" || asset.type === "erc1155";
|
|
@@ -21824,12 +21934,12 @@ function isSecurityToken2(asset) {
|
|
|
21824
21934
|
function getAssetBalance2(asset) {
|
|
21825
21935
|
if (!asset) return 0;
|
|
21826
21936
|
if (isNftAsset3(asset)) return 1;
|
|
21827
|
-
return Number(
|
|
21937
|
+
return Number(formatUnits9(BigInt(asset.balance || "0"), asset.decimals || 18));
|
|
21828
21938
|
}
|
|
21829
21939
|
function isBalance(asset) {
|
|
21830
21940
|
return asset?.balance && BigInt(asset.balance || 0) > 0n;
|
|
21831
21941
|
}
|
|
21832
|
-
var
|
|
21942
|
+
var init_utils10 = __esm({
|
|
21833
21943
|
"src/internal/components/SendMenu/send/utils.ts"() {
|
|
21834
21944
|
}
|
|
21835
21945
|
});
|
|
@@ -21902,16 +22012,16 @@ var init_AssetInputIcon = __esm({
|
|
|
21902
22012
|
init_tokens();
|
|
21903
22013
|
init_no_image();
|
|
21904
22014
|
init_utils2();
|
|
21905
|
-
|
|
22015
|
+
init_utils10();
|
|
21906
22016
|
}
|
|
21907
22017
|
});
|
|
21908
22018
|
|
|
21909
22019
|
// src/internal/components/SendMenu/send/components/NftDisplayCard.tsx
|
|
21910
22020
|
import { Image as ImageIcon2, Sparkles as Sparkles2 } from "lucide-react";
|
|
21911
|
-
import { useState as
|
|
22021
|
+
import { useState as useState26 } from "react";
|
|
21912
22022
|
import { jsx as jsx104, jsxs as jsxs95 } from "react/jsx-runtime";
|
|
21913
22023
|
function NftDisplayCard({ asset }) {
|
|
21914
|
-
const [imageError, setImageError] =
|
|
22024
|
+
const [imageError, setImageError] = useState26(false);
|
|
21915
22025
|
const nftImage = asset.image || asset.nftMetadata?.image;
|
|
21916
22026
|
return /* @__PURE__ */ jsxs95("div", { className: "flex items-center gap-3 p-3 rounded-[var(--ui-kit-el-bdrs)] bg-[var(--ui-kit-bg-secondary)]", children: [
|
|
21917
22027
|
nftImage && !imageError ? /* @__PURE__ */ jsx104(
|
|
@@ -21984,11 +22094,11 @@ var init_useSendStore = __esm({
|
|
|
21984
22094
|
});
|
|
21985
22095
|
|
|
21986
22096
|
// src/internal/components/SendMenu/send/components/AssetList.tsx
|
|
21987
|
-
import { formatUnits as
|
|
22097
|
+
import { formatUnits as formatUnits10 } from "viem";
|
|
21988
22098
|
import { Fragment as Fragment40, jsx as jsx105, jsxs as jsxs96 } from "react/jsx-runtime";
|
|
21989
22099
|
function getAssetBalance3(asset) {
|
|
21990
22100
|
if (isNftAsset3(asset)) return "1";
|
|
21991
|
-
const balance = Number(
|
|
22101
|
+
const balance = Number(formatUnits10(BigInt(asset?.balance || "0"), asset?.decimals || 18));
|
|
21992
22102
|
return formatPrice(balance);
|
|
21993
22103
|
}
|
|
21994
22104
|
function AssetListItem(props) {
|
|
@@ -22080,7 +22190,7 @@ var init_AssetList = __esm({
|
|
|
22080
22190
|
init_truncateMiddle();
|
|
22081
22191
|
init_BalanceView2();
|
|
22082
22192
|
init_useSendStore();
|
|
22083
|
-
|
|
22193
|
+
init_utils10();
|
|
22084
22194
|
init_AssetInputIcon();
|
|
22085
22195
|
}
|
|
22086
22196
|
});
|
|
@@ -22179,11 +22289,11 @@ var init_components3 = __esm({
|
|
|
22179
22289
|
|
|
22180
22290
|
// src/internal/components/SendMenu/send/useTokenBalance.ts
|
|
22181
22291
|
import {
|
|
22182
|
-
useQuery as
|
|
22292
|
+
useQuery as useQuery22
|
|
22183
22293
|
} from "@tanstack/react-query";
|
|
22184
22294
|
import {
|
|
22185
|
-
erc20Abi as
|
|
22186
|
-
formatUnits as
|
|
22295
|
+
erc20Abi as erc20Abi4,
|
|
22296
|
+
formatUnits as formatUnits11
|
|
22187
22297
|
} from "viem";
|
|
22188
22298
|
function isNftAsset4(asset) {
|
|
22189
22299
|
if (!asset) return false;
|
|
@@ -22192,7 +22302,7 @@ function isNftAsset4(asset) {
|
|
|
22192
22302
|
function useTokenBalance(asset) {
|
|
22193
22303
|
const address = useSession((st) => st.address);
|
|
22194
22304
|
const chainConfig = useSession((st) => st.chainConfig);
|
|
22195
|
-
return
|
|
22305
|
+
return useQuery22({
|
|
22196
22306
|
retry: false,
|
|
22197
22307
|
enabled: !!address && !!chainConfig?.id && !!asset?.symbol,
|
|
22198
22308
|
refetchInterval: 5e3,
|
|
@@ -22216,7 +22326,7 @@ function useTokenBalance(asset) {
|
|
|
22216
22326
|
const balanceValue = await client.getBalance({ address });
|
|
22217
22327
|
return {
|
|
22218
22328
|
decimals: chainConfig?.nativeCurrency?.decimals || 18,
|
|
22219
|
-
formatted: Number(
|
|
22329
|
+
formatted: Number(formatUnits11(balanceValue, chainConfig?.nativeCurrency?.decimals || 18)),
|
|
22220
22330
|
symbol: asset.symbol,
|
|
22221
22331
|
value: balanceValue
|
|
22222
22332
|
};
|
|
@@ -22225,20 +22335,20 @@ function useTokenBalance(asset) {
|
|
|
22225
22335
|
client.readContract({
|
|
22226
22336
|
// address: routeTokenAddress as `0x${string}`,
|
|
22227
22337
|
address: asset.address,
|
|
22228
|
-
abi:
|
|
22338
|
+
abi: erc20Abi4,
|
|
22229
22339
|
functionName: "balanceOf",
|
|
22230
22340
|
args: [address],
|
|
22231
22341
|
authorizationList: void 0
|
|
22232
22342
|
}),
|
|
22233
22343
|
client.readContract({
|
|
22234
22344
|
address: asset.address,
|
|
22235
|
-
abi:
|
|
22345
|
+
abi: erc20Abi4,
|
|
22236
22346
|
functionName: "decimals",
|
|
22237
22347
|
authorizationList: void 0
|
|
22238
22348
|
}),
|
|
22239
22349
|
client.readContract({
|
|
22240
22350
|
address: asset.address,
|
|
22241
|
-
abi:
|
|
22351
|
+
abi: erc20Abi4,
|
|
22242
22352
|
functionName: "symbol",
|
|
22243
22353
|
authorizationList: void 0
|
|
22244
22354
|
})
|
|
@@ -22251,7 +22361,7 @@ function useTokenBalance(asset) {
|
|
|
22251
22361
|
});
|
|
22252
22362
|
return [BigInt(0), 18, asset.symbol];
|
|
22253
22363
|
});
|
|
22254
|
-
return { decimals, formatted: Number(
|
|
22364
|
+
return { decimals, formatted: Number(formatUnits11(value, decimals)), symbol, value };
|
|
22255
22365
|
}
|
|
22256
22366
|
}
|
|
22257
22367
|
});
|
|
@@ -22266,7 +22376,7 @@ var init_useTokenBalance = __esm({
|
|
|
22266
22376
|
|
|
22267
22377
|
// src/internal/components/SendMenu/send/sendSteps/InputSendStep.tsx
|
|
22268
22378
|
import { AlertCircle as AlertCircle4, AtSign as AtSign2, CheckCircle2 as CheckCircle25, Loader as Loader20, Wallet2 as Wallet24 } from "lucide-react";
|
|
22269
|
-
import { formatUnits as
|
|
22379
|
+
import { formatUnits as formatUnits12, isAddress as isAddress2 } from "viem";
|
|
22270
22380
|
import { Fragment as Fragment41, jsx as jsx107, jsxs as jsxs98 } from "react/jsx-runtime";
|
|
22271
22381
|
function InputSendStep(props) {
|
|
22272
22382
|
const { erc3643Compliance, isNicknameInput, resolvedNicknameData, isAssetsLoading } = props;
|
|
@@ -22297,7 +22407,7 @@ function InputSendStep(props) {
|
|
|
22297
22407
|
const maxAmount = Math.max(0, balanceData.formatted - 1e-3);
|
|
22298
22408
|
setAmount(maxAmount.toFixed(6));
|
|
22299
22409
|
} else {
|
|
22300
|
-
setAmount(
|
|
22410
|
+
setAmount(formatUnits12(BigInt(selectedAsset.balance || "0"), selectedAsset.decimals || 18));
|
|
22301
22411
|
}
|
|
22302
22412
|
};
|
|
22303
22413
|
const validateInput = () => {
|
|
@@ -22469,7 +22579,7 @@ var init_InputSendStep = __esm({
|
|
|
22469
22579
|
init_components3();
|
|
22470
22580
|
init_useSendStore();
|
|
22471
22581
|
init_useTokenBalance();
|
|
22472
|
-
|
|
22582
|
+
init_utils10();
|
|
22473
22583
|
}
|
|
22474
22584
|
});
|
|
22475
22585
|
|
|
@@ -22652,7 +22762,7 @@ var init_ConfirmSendStep = __esm({
|
|
|
22652
22762
|
init_highlight();
|
|
22653
22763
|
init_useFlowSelector();
|
|
22654
22764
|
init_useSendStore();
|
|
22655
|
-
|
|
22765
|
+
init_utils10();
|
|
22656
22766
|
}
|
|
22657
22767
|
});
|
|
22658
22768
|
|
|
@@ -22820,7 +22930,7 @@ var init_SendMenu = __esm({
|
|
|
22820
22930
|
init_useNicknameResolve();
|
|
22821
22931
|
init_useSendTransaction();
|
|
22822
22932
|
init_useT();
|
|
22823
|
-
|
|
22933
|
+
init_useBlockscoutAssets2();
|
|
22824
22934
|
init_useLayoutDataStore();
|
|
22825
22935
|
init_button();
|
|
22826
22936
|
init_highlight();
|
|
@@ -22828,7 +22938,7 @@ var init_SendMenu = __esm({
|
|
|
22828
22938
|
init_components3();
|
|
22829
22939
|
init_sendSteps();
|
|
22830
22940
|
init_useSendStore();
|
|
22831
|
-
|
|
22941
|
+
init_utils10();
|
|
22832
22942
|
}
|
|
22833
22943
|
});
|
|
22834
22944
|
|
|
@@ -23053,7 +23163,7 @@ var init_pro_mode = __esm({
|
|
|
23053
23163
|
// src/internal/components/SettingsMenu/constants.ts
|
|
23054
23164
|
import { ArrowLeftRight, AtSign as AtSign4, DatabaseBackup as DatabaseBackup2, Link2, LockKeyhole, UsersRound } from "lucide-react";
|
|
23055
23165
|
var NAV_BUTTONS;
|
|
23056
|
-
var
|
|
23166
|
+
var init_constants7 = __esm({
|
|
23057
23167
|
"src/internal/components/SettingsMenu/constants.ts"() {
|
|
23058
23168
|
init_icons();
|
|
23059
23169
|
NAV_BUTTONS = [
|
|
@@ -23069,7 +23179,7 @@ var init_constants6 = __esm({
|
|
|
23069
23179
|
});
|
|
23070
23180
|
|
|
23071
23181
|
// src/internal/components/SettingsMenu/SettingsMenu.tsx
|
|
23072
|
-
import { useQuery as
|
|
23182
|
+
import { useQuery as useQuery23 } from "@tanstack/react-query";
|
|
23073
23183
|
import { ArrowLeft as ArrowLeft20, HardDrive as HardDrive3 } from "lucide-react";
|
|
23074
23184
|
import { useEffect as useEffect47 } from "react";
|
|
23075
23185
|
import { jsx as jsx111, jsxs as jsxs102 } from "react/jsx-runtime";
|
|
@@ -23112,7 +23222,7 @@ function SettingsMenu() {
|
|
|
23112
23222
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
23113
23223
|
const settingsButtons = useSettingsButtons();
|
|
23114
23224
|
useProvidersList();
|
|
23115
|
-
|
|
23225
|
+
useQuery23({
|
|
23116
23226
|
retry: 1,
|
|
23117
23227
|
enabled: !!address,
|
|
23118
23228
|
queryKey: [QUERY_KEYS.nicknameInfo, address],
|
|
@@ -23167,7 +23277,7 @@ var init_SettingsMenu = __esm({
|
|
|
23167
23277
|
init_utils2();
|
|
23168
23278
|
init_useProvidersList();
|
|
23169
23279
|
init_button();
|
|
23170
|
-
|
|
23280
|
+
init_constants7();
|
|
23171
23281
|
}
|
|
23172
23282
|
});
|
|
23173
23283
|
|
|
@@ -23846,7 +23956,7 @@ function formatIntl(price, fractionDigits) {
|
|
|
23846
23956
|
return formatter.format(price);
|
|
23847
23957
|
}
|
|
23848
23958
|
var formatAddress, parseValue, formatValue2, openInExplorer2, formatTimestamp;
|
|
23849
|
-
var
|
|
23959
|
+
var init_utils11 = __esm({
|
|
23850
23960
|
"src/internal/components/TransactionsMenu/utils.ts"() {
|
|
23851
23961
|
init_base2();
|
|
23852
23962
|
formatAddress = (addr) => {
|
|
@@ -24022,14 +24132,14 @@ var init_TransactionsGroup = __esm({
|
|
|
24022
24132
|
init_icons();
|
|
24023
24133
|
init_utils2();
|
|
24024
24134
|
init_button();
|
|
24025
|
-
|
|
24135
|
+
init_utils11();
|
|
24026
24136
|
}
|
|
24027
24137
|
});
|
|
24028
24138
|
|
|
24029
24139
|
// src/internal/components/TransactionsMenu/TransactionsMenu.tsx
|
|
24030
|
-
import { useQuery as
|
|
24140
|
+
import { useQuery as useQuery24, useQueryClient as useQueryClient25 } from "@tanstack/react-query";
|
|
24031
24141
|
import { ArrowLeft as ArrowLeft22, Loader as Loader28, RefreshCw as RefreshCw3, XCircle } from "lucide-react";
|
|
24032
|
-
import { useCallback as useCallback30, useState as
|
|
24142
|
+
import { useCallback as useCallback30, useState as useState27 } from "react";
|
|
24033
24143
|
import { jsx as jsx114, jsxs as jsxs105 } from "react/jsx-runtime";
|
|
24034
24144
|
function TransactionsMenu() {
|
|
24035
24145
|
const qc = useQueryClient25();
|
|
@@ -24038,14 +24148,14 @@ function TransactionsMenu() {
|
|
|
24038
24148
|
const { t } = useT();
|
|
24039
24149
|
const setPage = useLayoutDataStore((st) => st.setPage);
|
|
24040
24150
|
const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
|
|
24041
|
-
const [expandedGroups, setExpandedGroups] =
|
|
24151
|
+
const [expandedGroups, setExpandedGroups] = useState27({});
|
|
24042
24152
|
const historySupported = isTransactionHistorySupported(chainConfig?.id);
|
|
24043
24153
|
const {
|
|
24044
24154
|
data: txHistoryGroups = [],
|
|
24045
24155
|
isLoading: isTxHistoryLoading,
|
|
24046
24156
|
isFetching: isTxHistoryFetching,
|
|
24047
24157
|
error: txHistoryError
|
|
24048
|
-
} =
|
|
24158
|
+
} = useQuery24({
|
|
24049
24159
|
retry: false,
|
|
24050
24160
|
enabled: !!address && !!chainConfig?.id && historySupported,
|
|
24051
24161
|
queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, chainConfig.id, address],
|
|
@@ -24391,7 +24501,7 @@ var init_package = __esm({
|
|
|
24391
24501
|
"package.json"() {
|
|
24392
24502
|
package_default = {
|
|
24393
24503
|
name: "@embarkai/ui-kit",
|
|
24394
|
-
version: "0.4.
|
|
24504
|
+
version: "0.4.61",
|
|
24395
24505
|
description: "React UI components and hooks for EmbarkAI authentication and Account Abstraction",
|
|
24396
24506
|
type: "module",
|
|
24397
24507
|
main: "./dist/index.cjs",
|
|
@@ -24564,7 +24674,7 @@ function Footer() {
|
|
|
24564
24674
|
size: "small",
|
|
24565
24675
|
variant: "ghost",
|
|
24566
24676
|
disabled: isDisconnecting,
|
|
24567
|
-
onClick: () =>
|
|
24677
|
+
onClick: () => useLayoutDataStore.getState().setPage("chain" /* CHAIN */),
|
|
24568
24678
|
children: [
|
|
24569
24679
|
/* @__PURE__ */ jsx116(ChainIcon, { className: "flex-none w-6 h-6" }),
|
|
24570
24680
|
/* @__PURE__ */ jsx116("span", { className: "text-xs font-bold", children: chainConfig.name || "EmbarkAI Wallet" })
|
|
@@ -24608,7 +24718,6 @@ var init_Footer = __esm({
|
|
|
24608
24718
|
init_SessionContext();
|
|
24609
24719
|
init_i18n();
|
|
24610
24720
|
init_auth();
|
|
24611
|
-
init_base2();
|
|
24612
24721
|
init_useLayoutDataStore();
|
|
24613
24722
|
init_useLayoutStore();
|
|
24614
24723
|
init_utils2();
|
|
@@ -24627,7 +24736,7 @@ var init_Footer2 = __esm({
|
|
|
24627
24736
|
|
|
24628
24737
|
// src/internal/components/Header/Header.tsx
|
|
24629
24738
|
import { Copy as Copy4, Loader as Loader30 } from "lucide-react";
|
|
24630
|
-
import { useCallback as useCallback32, useRef as
|
|
24739
|
+
import { useCallback as useCallback32, useRef as useRef19, useState as useState28 } from "react";
|
|
24631
24740
|
import { Fragment as Fragment45, jsx as jsx117, jsxs as jsxs107 } from "react/jsx-runtime";
|
|
24632
24741
|
function formatAddress2(addr) {
|
|
24633
24742
|
if (!addr) return "";
|
|
@@ -24639,10 +24748,10 @@ function Header() {
|
|
|
24639
24748
|
const chainConfig = useSession((st) => st.chainConfig);
|
|
24640
24749
|
const { t } = useT();
|
|
24641
24750
|
const proMode = useProMode();
|
|
24642
|
-
const [proToast, setProToast] =
|
|
24643
|
-
const [copied, setCopied] =
|
|
24644
|
-
const clickCountRef =
|
|
24645
|
-
const clickTimerRef =
|
|
24751
|
+
const [proToast, setProToast] = useState28(false);
|
|
24752
|
+
const [copied, setCopied] = useState28(false);
|
|
24753
|
+
const clickCountRef = useRef19(0);
|
|
24754
|
+
const clickTimerRef = useRef19(null);
|
|
24646
24755
|
const handleAvatarClick = useCallback32(() => {
|
|
24647
24756
|
clickCountRef.current += 1;
|
|
24648
24757
|
if (clickTimerRef.current) {
|
|
@@ -28196,7 +28305,7 @@ function notifyNoProjetctId(projectId) {
|
|
|
28196
28305
|
'\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551 \u26A0\uFE0F EmbarkAI WARNING \u26A0\uFE0F \u2551\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n\u2551 \u2551\n\u2551 projectId is NOT configured! \u2551\n\u2551 \u2551\n\u2551 Your integration will NOT work without a valid projectId. \u2551\n\u2551 Most features will be disabled and errors will occur. \u2551\n\u2551 \u2551\n\u2551 To fix this: \u2551\n\u2551 1. Get your projectId from: https://dashboard.embarkai.io/ \u2551\n\u2551 2. Add it to your Provider: \u2551\n\u2551 \u2551\n\u2551 <Provider projectId="your-project-id"> \u2551\n\u2551 {children} \u2551\n\u2551 </Provider> \u2551\n\u2551 \u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n'
|
|
28197
28306
|
);
|
|
28198
28307
|
}
|
|
28199
|
-
var
|
|
28308
|
+
var init_utils12 = __esm({
|
|
28200
28309
|
"src/context/utils.ts"() {
|
|
28201
28310
|
}
|
|
28202
28311
|
});
|
|
@@ -28223,7 +28332,7 @@ import {
|
|
|
28223
28332
|
useContext,
|
|
28224
28333
|
useEffect as useEffect53,
|
|
28225
28334
|
useMemo as useMemo17,
|
|
28226
|
-
useRef as
|
|
28335
|
+
useRef as useRef20
|
|
28227
28336
|
} from "react";
|
|
28228
28337
|
import { jsx as jsx124 } from "react/jsx-runtime";
|
|
28229
28338
|
function clearLegacyWagmiStorage() {
|
|
@@ -28243,9 +28352,9 @@ function clearLegacyWagmiStorage() {
|
|
|
28243
28352
|
}
|
|
28244
28353
|
function Provider(props) {
|
|
28245
28354
|
const { children, projectId, initialConfig = {}, callbacks } = props;
|
|
28246
|
-
const callbacksRef =
|
|
28355
|
+
const callbacksRef = useRef20(callbacks);
|
|
28247
28356
|
useEffect53(() => notifyNoProjetctId(projectId), [projectId]);
|
|
28248
|
-
const config =
|
|
28357
|
+
const config = useRef20(merge3({}, DEFAULT_PROVIDER_CONFIG, { projectId }, initialConfig));
|
|
28249
28358
|
const updateConfig = useCallback35((updates) => {
|
|
28250
28359
|
const prev = config.current;
|
|
28251
28360
|
const next = { ...prev };
|
|
@@ -28362,7 +28471,7 @@ var init_ProviderContext = __esm({
|
|
|
28362
28471
|
init_iframe_manager();
|
|
28363
28472
|
init_RainbowKitContext();
|
|
28364
28473
|
init_SessionContext();
|
|
28365
|
-
|
|
28474
|
+
init_utils12();
|
|
28366
28475
|
init_WagmiContext();
|
|
28367
28476
|
UIContext = createContext(void 0);
|
|
28368
28477
|
useProviderConfig = () => {
|
|
@@ -28374,7 +28483,7 @@ var init_ProviderContext = __esm({
|
|
|
28374
28483
|
});
|
|
28375
28484
|
|
|
28376
28485
|
// src/styles/built.css
|
|
28377
|
-
var built_default = `.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.embarkai-ui-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.embarkai-ui-scope .pointer-events-none{pointer-events:none}.embarkai-ui-scope .pointer-events-auto{pointer-events:auto}.embarkai-ui-scope .visible{visibility:visible}.embarkai-ui-scope .invisible{visibility:hidden}.embarkai-ui-scope .static{position:static}.embarkai-ui-scope .fixed{position:fixed}.embarkai-ui-scope .absolute{position:absolute}.embarkai-ui-scope .relative{position:relative}.embarkai-ui-scope .inset-0{inset:0}.embarkai-ui-scope .-right-1{right:-.25rem}.embarkai-ui-scope .-right-2{right:-.5rem}.embarkai-ui-scope .-top-1{top:-.25rem}.embarkai-ui-scope .-top-2{top:-.5rem}.embarkai-ui-scope .bottom-0{bottom:0}.embarkai-ui-scope .bottom-full{bottom:100%}.embarkai-ui-scope .left-0{left:0}.embarkai-ui-scope .left-1\\/2{left:50%}.embarkai-ui-scope .left-4{left:1rem}.embarkai-ui-scope .right-0{right:0}.embarkai-ui-scope .right-2{right:.5rem}.embarkai-ui-scope .right-3{right:.75rem}.embarkai-ui-scope .right-4{right:1rem}.embarkai-ui-scope .right-\\[var\\(--ui-kit-pd\\)\\]{right:var(--ui-kit-pd)}.embarkai-ui-scope .right-full{right:100%}.embarkai-ui-scope .top-0{top:0}.embarkai-ui-scope .top-1\\/2{top:50%}.embarkai-ui-scope .top-2{top:.5rem}.embarkai-ui-scope .top-4{top:1rem}.embarkai-ui-scope .top-\\[var\\(--ui-kit-pd\\)\\]{top:var(--ui-kit-pd)}.embarkai-ui-scope .z-10{z-index:10}.embarkai-ui-scope .z-50{z-index:50}.embarkai-ui-scope .z-\\[9998\\]{z-index:9998}.embarkai-ui-scope .z-\\[9999\\]{z-index:9999}.embarkai-ui-scope .-m-px{margin:-1px}.embarkai-ui-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.embarkai-ui-scope .mx-auto{margin-left:auto;margin-right:auto}.embarkai-ui-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.embarkai-ui-scope .mb-1{margin-bottom:.25rem}.embarkai-ui-scope .mb-2{margin-bottom:.5rem}.embarkai-ui-scope .mb-3{margin-bottom:.75rem}.embarkai-ui-scope .mb-4{margin-bottom:1rem}.embarkai-ui-scope .ml-1{margin-left:.25rem}.embarkai-ui-scope .ml-2{margin-left:.5rem}.embarkai-ui-scope .ml-auto{margin-left:auto}.embarkai-ui-scope .mr-1{margin-right:.25rem}.embarkai-ui-scope .mt-0\\.5{margin-top:.125rem}.embarkai-ui-scope .mt-1{margin-top:.25rem}.embarkai-ui-scope .mt-2{margin-top:.5rem}.embarkai-ui-scope .mt-4{margin-top:1rem}.embarkai-ui-scope .block{display:block}.embarkai-ui-scope .inline-block{display:inline-block}.embarkai-ui-scope .inline{display:inline}.embarkai-ui-scope .flex{display:flex}.embarkai-ui-scope .inline-flex{display:inline-flex}.embarkai-ui-scope .table{display:table}.embarkai-ui-scope .grid{display:grid}.embarkai-ui-scope .hidden{display:none}.embarkai-ui-scope .aspect-square{aspect-ratio:1/1}.embarkai-ui-scope .size-4{width:1rem;height:1rem}.embarkai-ui-scope .size-8{width:2rem;height:2rem}.embarkai-ui-scope .size-auto{width:auto;height:auto}.embarkai-ui-scope .h-0{height:0}.embarkai-ui-scope .h-1{height:.25rem}.embarkai-ui-scope .h-10{height:2.5rem}.embarkai-ui-scope .h-12{height:3rem}.embarkai-ui-scope .h-16{height:4rem}.embarkai-ui-scope .h-3{height:.75rem}.embarkai-ui-scope .h-3\\.5{height:.875rem}.embarkai-ui-scope .h-4{height:1rem}.embarkai-ui-scope .h-48{height:12rem}.embarkai-ui-scope .h-5{height:1.25rem}.embarkai-ui-scope .h-6{height:1.5rem}.embarkai-ui-scope .h-7{height:1.75rem}.embarkai-ui-scope .h-8{height:2rem}.embarkai-ui-scope .h-\\[100dvh\\]{height:100dvh}.embarkai-ui-scope .h-\\[48px\\]{height:48px}.embarkai-ui-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.embarkai-ui-scope .h-auto{height:auto}.embarkai-ui-scope .h-fit{height:-moz-fit-content;height:fit-content}.embarkai-ui-scope .h-full{height:100%}.embarkai-ui-scope .h-px{height:1px}.embarkai-ui-scope .max-h-96{max-height:24rem}.embarkai-ui-scope .max-h-\\[95dvh\\]{max-height:95dvh}.embarkai-ui-scope .min-h-10{min-height:2.5rem}.embarkai-ui-scope .min-h-12{min-height:3rem}.embarkai-ui-scope .w-1{width:.25rem}.embarkai-ui-scope .w-1\\/2{width:50%}.embarkai-ui-scope .w-10{width:2.5rem}.embarkai-ui-scope .w-12{width:3rem}.embarkai-ui-scope .w-16{width:4rem}.embarkai-ui-scope .w-3{width:.75rem}.embarkai-ui-scope .w-3\\.5{width:.875rem}.embarkai-ui-scope .w-4{width:1rem}.embarkai-ui-scope .w-48{width:12rem}.embarkai-ui-scope .w-5{width:1.25rem}.embarkai-ui-scope .w-6{width:1.5rem}.embarkai-ui-scope .w-7{width:1.75rem}.embarkai-ui-scope .w-8{width:2rem}.embarkai-ui-scope .w-\\[100dvw\\]{width:100dvw}.embarkai-ui-scope .w-\\[40px\\]{width:40px}.embarkai-ui-scope .w-\\[var\\(--ui-kit-maw\\)\\]{width:var(--ui-kit-maw)}.embarkai-ui-scope .w-fit{width:-moz-fit-content;width:fit-content}.embarkai-ui-scope .w-full{width:100%}.embarkai-ui-scope .w-px{width:1px}.embarkai-ui-scope .min-w-0{min-width:0}.embarkai-ui-scope .min-w-10{min-width:2.5rem}.embarkai-ui-scope .min-w-16{min-width:4rem}.embarkai-ui-scope .min-w-\\[256px\\]{min-width:256px}.embarkai-ui-scope .min-w-\\[8rem\\]{min-width:8rem}.embarkai-ui-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.embarkai-ui-scope .max-w-\\[100px\\]{max-width:100px}.embarkai-ui-scope .max-w-\\[144px\\]{max-width:144px}.embarkai-ui-scope .max-w-\\[150px\\]{max-width:150px}.embarkai-ui-scope .max-w-\\[160px\\]{max-width:160px}.embarkai-ui-scope .max-w-\\[256px\\]{max-width:256px}.embarkai-ui-scope .max-w-\\[680px\\]{max-width:680px}.embarkai-ui-scope .max-w-\\[calc\\(50\\%-8px\\)\\]{max-width:calc(50% - 8px)}.embarkai-ui-scope .max-w-full{max-width:100%}.embarkai-ui-scope .max-w-sm{max-width:24rem}.embarkai-ui-scope .flex-1{flex:1 1 0%}.embarkai-ui-scope .flex-none{flex:none}.embarkai-ui-scope .flex-shrink-0,.embarkai-ui-scope .shrink-0{flex-shrink:0}.embarkai-ui-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.embarkai-ui-scope .-translate-x-1\\/2,.embarkai-ui-scope .-translate-x-\\[var\\(--ui-kit-gap\\)\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .-translate-x-\\[var\\(--ui-kit-gap\\)\\]{--tw-translate-x:calc(var(--ui-kit-gap)*-1)}.embarkai-ui-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.embarkai-ui-scope .-translate-y-1\\/2,.embarkai-ui-scope .-translate-y-1\\/3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .-translate-y-1\\/3{--tw-translate-y:-33.333333%}.embarkai-ui-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--ui-kit-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--ui-kit-bg-warning)}}.embarkai-ui-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse{50%{opacity:.5}}.embarkai-ui-scope .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.embarkai-ui-scope .animate-spin{animation:spin 1s linear infinite}.embarkai-ui-scope .cursor-default{cursor:default}.embarkai-ui-scope .cursor-help{cursor:help}.embarkai-ui-scope .cursor-pointer{cursor:pointer}.embarkai-ui-scope .cursor-text{cursor:text}.embarkai-ui-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.embarkai-ui-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.embarkai-ui-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.embarkai-ui-scope .list-inside{list-style-position:inside}.embarkai-ui-scope .list-disc{list-style-type:disc}.embarkai-ui-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.embarkai-ui-scope .flex-col{flex-direction:column}.embarkai-ui-scope .flex-col-reverse{flex-direction:column-reverse}.embarkai-ui-scope .flex-wrap{flex-wrap:wrap}.embarkai-ui-scope .place-content-center{place-content:center}.embarkai-ui-scope .items-start{align-items:flex-start}.embarkai-ui-scope .items-end{align-items:flex-end}.embarkai-ui-scope .items-center{align-items:center}.embarkai-ui-scope .justify-start{justify-content:flex-start}.embarkai-ui-scope .justify-end{justify-content:flex-end}.embarkai-ui-scope .justify-center{justify-content:center}.embarkai-ui-scope .justify-between{justify-content:space-between}.embarkai-ui-scope .gap-0{gap:0}.embarkai-ui-scope .gap-1{gap:.25rem}.embarkai-ui-scope .gap-2{gap:.5rem}.embarkai-ui-scope .gap-3{gap:.75rem}.embarkai-ui-scope .gap-4{gap:1rem}.embarkai-ui-scope .gap-\\[10px\\]{gap:10px}.embarkai-ui-scope .gap-\\[var\\(--ui-kit-gap\\)\\]{gap:var(--ui-kit-gap)}.embarkai-ui-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.embarkai-ui-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.embarkai-ui-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.embarkai-ui-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.embarkai-ui-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.embarkai-ui-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.embarkai-ui-scope .overflow-hidden{overflow:hidden}.embarkai-ui-scope .overflow-y-auto{overflow-y:auto}.embarkai-ui-scope .overflow-x-hidden{overflow-x:hidden}.embarkai-ui-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.embarkai-ui-scope .text-ellipsis{text-overflow:ellipsis}.embarkai-ui-scope .whitespace-nowrap{white-space:nowrap}.embarkai-ui-scope .whitespace-pre-line{white-space:pre-line}.embarkai-ui-scope .whitespace-pre-wrap{white-space:pre-wrap}.embarkai-ui-scope .break-normal{overflow-wrap:normal;word-break:normal}.embarkai-ui-scope .break-words{overflow-wrap:break-word}.embarkai-ui-scope .break-all{word-break:break-all}.embarkai-ui-scope .rounded{border-radius:.25rem}.embarkai-ui-scope .rounded-\\[10px\\]{border-radius:10px}.embarkai-ui-scope .rounded-\\[8px\\]{border-radius:8px}.embarkai-ui-scope .rounded-\\[calc\\(var\\(--ui-kit-el-bdrs\\)_\\/_2\\)\\]{border-radius:calc(var(--ui-kit-el-bdrs)/2)}.embarkai-ui-scope .rounded-\\[var\\(--ui-kit-bdrs\\)\\]{border-radius:var(--ui-kit-bdrs)}.embarkai-ui-scope .rounded-\\[var\\(--ui-kit-el-bdrs\\)\\]{border-radius:var(--ui-kit-el-bdrs)}.embarkai-ui-scope .rounded-full{border-radius:9999px}.embarkai-ui-scope .rounded-lg{border-radius:.5rem}.embarkai-ui-scope .rounded-md{border-radius:.375rem}.embarkai-ui-scope .rounded-xl{border-radius:.75rem}.embarkai-ui-scope .border{border-width:1px}.embarkai-ui-scope .border-0{border-width:0}.embarkai-ui-scope .border-2{border-width:2px}.embarkai-ui-scope .border-b{border-bottom-width:1px}.embarkai-ui-scope .border-t{border-top-width:1px}.embarkai-ui-scope .border-dashed{border-style:dashed}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bd\\)\\]{border-color:var(--ui-kit-bd)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bg-error\\)\\]{border-color:var(--ui-kit-bg-error)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bg-success\\)\\]{border-color:var(--ui-kit-bg-success)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bg-warning\\)\\]{border-color:var(--ui-kit-bg-warning)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-error\\)\\]{border-color:var(--ui-kit-error)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-secondary\\)\\]{border-color:var(--ui-kit-secondary)}.embarkai-ui-scope .border-current{border-color:currentColor}.embarkai-ui-scope .border-transparent{border-color:transparent}.embarkai-ui-scope .border-t-transparent{border-top-color:transparent}.embarkai-ui-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[\\#f0f6f8\\]{--tw-bg-opacity:1;background-color:rgb(240 246 248/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg\\)\\]{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-error\\)\\]{background-color:var(--ui-kit-bg-error)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-info\\)\\]{background-color:var(--ui-kit-bg-info)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-secondary\\)\\]{background-color:var(--ui-kit-bg-secondary)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-success\\)\\]{background-color:var(--ui-kit-bg-success)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-warning\\)\\]{background-color:var(--ui-kit-bg-warning)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-fg\\)\\]{background-color:var(--ui-kit-fg)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-overlay\\)\\]{background-color:var(--ui-kit-overlay)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-primary\\)\\]{background-color:var(--ui-kit-primary)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-secondary\\)\\]{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-secondary-h\\)\\]{background-color:var(--ui-kit-secondary-h)}.embarkai-ui-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-transparent{background-color:transparent}.embarkai-ui-scope .fill-\\[var\\(--ui-kit-bg-warning\\)\\]{fill:var(--ui-kit-bg-warning)}.embarkai-ui-scope .object-contain{-o-object-fit:contain;object-fit:contain}.embarkai-ui-scope .object-cover{-o-object-fit:cover;object-fit:cover}.embarkai-ui-scope .p-0{padding:0}.embarkai-ui-scope .p-1{padding:.25rem}.embarkai-ui-scope .p-2{padding:.5rem}.embarkai-ui-scope .p-3{padding:.75rem}.embarkai-ui-scope .p-4{padding:1rem}.embarkai-ui-scope .p-5{padding:1.25rem}.embarkai-ui-scope .p-6{padding:1.5rem}.embarkai-ui-scope .p-8{padding:2rem}.embarkai-ui-scope .p-\\[2px\\]{padding:2px}.embarkai-ui-scope .p-\\[var\\(--ui-kit-gap\\)\\]{padding:var(--ui-kit-gap)}.embarkai-ui-scope .p-\\[var\\(--ui-kit-pd\\)\\]{padding:var(--ui-kit-pd)}.embarkai-ui-scope .px-0{padding-left:0;padding-right:0}.embarkai-ui-scope .px-1{padding-left:.25rem;padding-right:.25rem}.embarkai-ui-scope .px-2{padding-left:.5rem;padding-right:.5rem}.embarkai-ui-scope .px-3{padding-left:.75rem;padding-right:.75rem}.embarkai-ui-scope .px-4{padding-left:1rem;padding-right:1rem}.embarkai-ui-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.embarkai-ui-scope .px-8{padding-left:2rem;padding-right:2rem}.embarkai-ui-scope .px-\\[var\\(--ui-kit-gap\\)\\]{padding-left:var(--ui-kit-gap);padding-right:var(--ui-kit-gap)}.embarkai-ui-scope .px-\\[var\\(--ui-kit-pd\\)\\]{padding-left:var(--ui-kit-pd);padding-right:var(--ui-kit-pd)}.embarkai-ui-scope .py-0{padding-top:0;padding-bottom:0}.embarkai-ui-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.embarkai-ui-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.embarkai-ui-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.embarkai-ui-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.embarkai-ui-scope .py-4{padding-top:1rem;padding-bottom:1rem}.embarkai-ui-scope .py-8{padding-top:2rem;padding-bottom:2rem}.embarkai-ui-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.embarkai-ui-scope .py-\\[var\\(--ui-kit-gap\\)\\]{padding-top:var(--ui-kit-gap);padding-bottom:var(--ui-kit-gap)}.embarkai-ui-scope .py-\\[var\\(--ui-kit-pd\\)\\]{padding-top:var(--ui-kit-pd);padding-bottom:var(--ui-kit-pd)}.embarkai-ui-scope .pb-2{padding-bottom:.5rem}.embarkai-ui-scope .pb-5{padding-bottom:1.25rem}.embarkai-ui-scope .pb-6{padding-bottom:1.5rem}.embarkai-ui-scope .pb-\\[var\\(--ui-kit-pd\\)\\]{padding-bottom:var(--ui-kit-pd)}.embarkai-ui-scope .pl-\\[var\\(--ui-kit-pd\\)\\]{padding-left:var(--ui-kit-pd)}.embarkai-ui-scope .pr-8{padding-right:2rem}.embarkai-ui-scope .pt-3{padding-top:.75rem}.embarkai-ui-scope .pt-4{padding-top:1rem}.embarkai-ui-scope .pt-5{padding-top:1.25rem}.embarkai-ui-scope .text-left{text-align:left}.embarkai-ui-scope .text-center{text-align:center}.embarkai-ui-scope .text-right{text-align:right}.embarkai-ui-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.embarkai-ui-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.embarkai-ui-scope .text-2xl{font-size:1.5rem;line-height:2rem}.embarkai-ui-scope .text-\\[10px\\]{font-size:10px}.embarkai-ui-scope .text-\\[14px\\]{font-size:14px}.embarkai-ui-scope .text-\\[16px\\]{font-size:16px}.embarkai-ui-scope .text-\\[8px\\]{font-size:8px}.embarkai-ui-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.embarkai-ui-scope .text-sm{font-size:.875rem;line-height:1.25rem}.embarkai-ui-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.embarkai-ui-scope .text-xs{font-size:.75rem;line-height:1rem}.embarkai-ui-scope .font-bold{font-weight:700}.embarkai-ui-scope .font-medium{font-weight:500}.embarkai-ui-scope .font-normal{font-weight:400}.embarkai-ui-scope .font-semibold{font-weight:600}.embarkai-ui-scope .uppercase{text-transform:uppercase}.embarkai-ui-scope .lowercase{text-transform:lowercase}.embarkai-ui-scope .leading-3{line-height:.75rem}.embarkai-ui-scope .leading-4{line-height:1rem}.embarkai-ui-scope .leading-5{line-height:1.25rem}.embarkai-ui-scope .leading-6{line-height:1.5rem}.embarkai-ui-scope .leading-8{line-height:2rem}.embarkai-ui-scope .leading-\\[8px\\]{line-height:8px}.embarkai-ui-scope .leading-none{line-height:1}.embarkai-ui-scope .leading-tight{line-height:1.25}.embarkai-ui-scope .tracking-\\[0\\.3em\\]{letter-spacing:.3em}.embarkai-ui-scope .tracking-tight{letter-spacing:-.025em}.embarkai-ui-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-\\[var\\(--ui-kit-bg-error\\)\\]{color:var(--ui-kit-bg-error)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-bg-success\\)\\]{color:var(--ui-kit-bg-success)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-bg-warning\\)\\]{color:var(--ui-kit-bg-warning)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-error\\)\\]{color:var(--ui-kit-error)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-fg\\)\\]{color:var(--ui-kit-fg)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-fg-inverted\\)\\]{color:var(--ui-kit-fg-inverted)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-fg-muted\\)\\]{color:var(--ui-kit-fg-muted)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-info\\)\\]{color:var(--ui-kit-info)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-primary\\)\\]{color:var(--ui-kit-primary)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-success\\)\\]{color:var(--ui-kit-success)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-text-secondary\\)\\]{color:var(--ui-kit-text-secondary)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-warning\\)\\]{color:var(--ui-kit-warning)}.embarkai-ui-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.embarkai-ui-scope .underline{text-decoration-line:underline}.embarkai-ui-scope .underline-offset-2{text-underline-offset:2px}.embarkai-ui-scope .underline-offset-4{text-underline-offset:4px}.embarkai-ui-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.embarkai-ui-scope .opacity-0{opacity:0}.embarkai-ui-scope .opacity-100{opacity:1}.embarkai-ui-scope .opacity-50{opacity:.5}.embarkai-ui-scope .opacity-60{opacity:.6}.embarkai-ui-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.embarkai-ui-scope .shadow,.embarkai-ui-scope .shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.embarkai-ui-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.embarkai-ui-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .outline{outline-style:solid}.embarkai-ui-scope .blur{--tw-blur:blur(8px)}.embarkai-ui-scope .blur,.embarkai-ui-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.embarkai-ui-scope .grayscale{--tw-grayscale:grayscale(100%)}.embarkai-ui-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.embarkai-ui-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-none{transition-property:none}.embarkai-ui-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .duration-200{transition-duration:.2s}.embarkai-ui-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.embarkai-ui-scope{--ui-kit-ff:var(--embark-ui-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--ui-kit-maw:var(--embark-ui-maw,384px);--ui-kit-pd:var(--embark-ui-pd,12px);--ui-kit-gap:var(--embark-ui-gap,10px);--ui-kit-bdrs:var(--embark-ui-bdrs,20px);--ui-kit-el-bdrs:var(--embark-ui-element-bdrs,10px);--ui-kit-backdrop-blur:var(--embark-ui-backdrop-blur,10px)}.embarkai-ui-scope[data-current-theme-mode=light]{--ui-kit-overlay:var(--embark-ui-overlay,hsla(0,0%,100%,.8));--ui-kit-bg:var(--embark-ui-bg,#fff);--ui-kit-fg:var(--embark-ui-fg,#000);--ui-kit-fg-inverted:var(--embark-ui-fg-inverted,#fff);--ui-kit-fg-muted:var(--embark-ui-fg-muted,rgba(0,0,0,.6));--ui-kit-primary:var(--embark-ui-primary,#000);--ui-kit-primary-h:var(--embark-ui-primary-h,rgba(0,0,0,.8));--ui-kit-primary-a:var(--embark-ui-primary-a,rgba(0,0,0,.6));--ui-kit-secondary:var(--embark-ui-secondary,#e4e4e4);--ui-kit-secondary-h:var(--embark-ui-secondary-h,hsla(0,0%,89%,.8));--ui-kit-secondary-a:var(--embark-ui-secondary-a,hsla(0,0%,89%,.6));--ui-kit-bd:var(--embark-ui-bd,#ebebeb);--ui-kit-bd-intense:var(--embark-ui-bd-intense,#a9a9a9);--ui-kit-shadow:var(--embark-ui-shadow,0 0 0 0 transparent);--ui-kit-shadow-c:var(--embark-ui-shadow-c,rgba(0,0,0,.1));--ui-kit-info:var(--embark-ui-info,var(--ui-kit-fg));--ui-kit-bg-info:var(--embark-ui-bg-info,var(--ui-kit-secondary));--ui-kit-success:var(--embark-ui-success,#000);--ui-kit-bg-success:var(--embark-ui-bg-success,#21ff51);--ui-kit-warning:var(--embark-ui-warning,#000);--ui-kit-bg-warning:var(--embark-ui-bg-warning,#e9fa00);--ui-kit-error:var(--embark-ui-error,#fff);--ui-kit-bg-error:var(--embark-ui-bg-error,#d6204e)}.embarkai-ui-scope[data-current-theme-mode=dark]{--ui-kit-overlay:var(--embark-ui-overlay,rgba(0,0,0,.8));--ui-kit-bg:var(--embark-ui-bg,#1a1a1a);--ui-kit-fg:var(--embark-ui-fg,#fff);--ui-kit-fg-inverted:var(--embark-ui-fg-inverted,#000);--ui-kit-fg-muted:var(--embark-ui-fg-muted,hsla(0,0%,100%,.6));--ui-kit-primary:var(--embark-ui-primary,#fff);--ui-kit-primary-h:var(--embark-ui-primary-h,hsla(0,0%,100%,.8));--ui-kit-primary-a:var(--embark-ui-primary-a,hsla(0,0%,100%,.6));--ui-kit-secondary:var(--embark-ui-secondary,#2a2a2a);--ui-kit-secondary-h:var(--embark-ui-secondary-h,rgba(42,42,42,.6));--ui-kit-secondary-a:var(--embark-ui-secondary-a,rgba(42,42,42,.4));--ui-kit-bd:var(--embark-ui-bd,#3a3a3a);--ui-kit-bd-intense:var(--embark-ui-bd-intense,#4a4a4a);--ui-kit-shadow:var(--embark-ui-shadow,0 0 0 0 transparent);--ui-kit-shadow-c:var(--embark-ui-shadow-c,rgba(0,0,0,.1));--ui-kit-info:var(--embark-ui-info,var(--ui-kit-fg));--ui-kit-bg-info:var(--embark-ui-bg-info,var(--ui-kit-secondary));--ui-kit-success:var(--embark-ui-success,#000);--ui-kit-bg-success:var(--embark-ui-bg-success,#21ff51);--ui-kit-warning:var(--embark-ui-warning,#000);--ui-kit-bg-warning:var(--embark-ui-bg-warning,#e9fa00);--ui-kit-error:var(--embark-ui-error,#fff);--ui-kit-bg-error:var(--embark-ui-bg-error,#d6204e)}.embarkai-ui-scope,.embarkai-ui-scope *{margin:0;box-sizing:border-box;font-family:var(--ui-kit-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.embarkai-ui-scope button,.embarkai-ui-scope h1,.embarkai-ui-scope h2,.embarkai-ui-scope h3,.embarkai-ui-scope h4,.embarkai-ui-scope h5,.embarkai-ui-scope h6,.embarkai-ui-scope input,.embarkai-ui-scope p,.embarkai-ui-scope select,.embarkai-ui-scope textarea{font-family:var(--ui-kit-ff)!important;margin:0}.embarkai-ui-scope button,.embarkai-ui-scope input,.embarkai-ui-scope select,.embarkai-ui-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.embarkai-ui-scope input,.embarkai-ui-scope textarea{font-size:16px!important}.embarkai-ui-scope .account-connect-button{box-shadow:0 4px 20px var(--ui-kit-shadow-c),inset 0 0 0 1px var(--ui-kit-bd);transition:transform .25s ease}.embarkai-ui-scope .account-connect-button:hover{transform:scale(1.02)}.embarkai-ui-scope .account-connect-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.embarkai-ui-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.embarkai-ui-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.embarkai-ui-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.embarkai-ui-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.embarkai-ui-scope .list-scrollbar-y{width:100%;padding-right:var(--ui-kit-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--ui-kit-scrollbar-mah,300px)}.embarkai-ui-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.embarkai-ui-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--ui-kit-bd)}.embarkai-ui-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.embarkai-ui-scope .noScrollbars::-webkit-scrollbar{display:none}.embarkai-ui-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}@keyframes rotateShine{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}.embarkai-ui-scope .button-shine-outline{position:absolute;top:0;left:0;width:100%;height:100%;padding:1px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0) border-box;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0) border-box;-webkit-mask-composite:xor;mask-composite:exclude}.embarkai-ui-scope .button-shine-outline-shiner{position:absolute;top:50%;left:50%;width:500px;height:500px;transform:translate(-50%,-50%);background:conic-gradient(from 0deg,transparent 0,var(--ui-kit-fg) 8%,transparent 24%);animation:rotateShine 3s linear infinite}.embarkai-ui-scope .file\\:mr-\\[var\\(--ui-kit-gap\\)\\]::file-selector-button{margin-right:var(--ui-kit-gap)}.embarkai-ui-scope .file\\:h-12::file-selector-button{height:3rem}.embarkai-ui-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.embarkai-ui-scope .file\\:rounded-\\[var\\(--ui-kit-el-bdrs\\)\\]::file-selector-button{border-radius:var(--ui-kit-el-bdrs)}.embarkai-ui-scope .file\\:border-0::file-selector-button{border-width:0}.embarkai-ui-scope .file\\:bg-\\[var\\(--ui-kit-primary\\)\\]::file-selector-button{background-color:var(--ui-kit-primary)}.embarkai-ui-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.embarkai-ui-scope .file\\:px-\\[var\\(--ui-kit-pd\\)\\]::file-selector-button{padding-left:var(--ui-kit-pd);padding-right:var(--ui-kit-pd)}.embarkai-ui-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.embarkai-ui-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.embarkai-ui-scope .file\\:font-medium::file-selector-button{font-weight:500}.embarkai-ui-scope .file\\:text-\\[var\\(--ui-kit-fg-inverted\\)\\]::file-selector-button{color:var(--ui-kit-fg-inverted)}.embarkai-ui-scope .placeholder\\:text-\\[var\\(--ui-kit-fg-muted\\)\\]::-moz-placeholder{color:var(--ui-kit-fg-muted)}.embarkai-ui-scope .placeholder\\:text-\\[var\\(--ui-kit-fg-muted\\)\\]::placeholder{color:var(--ui-kit-fg-muted)}.embarkai-ui-scope .focus-within\\:bg-\\[var\\(--ui-kit-secondary-a\\)\\]:focus-within{background-color:var(--ui-kit-secondary-a)}.embarkai-ui-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .hover\\:bg-\\[\\#002c15\\]:hover{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[\\#081f2c\\]:hover{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[\\#f0f6f8\\]:hover{--tw-bg-opacity:1;background-color:rgb(240 246 248/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[\\#f3ba2f\\]:hover{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[var\\(--ui-kit-bg\\)\\]:hover{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .hover\\:bg-\\[var\\(--ui-kit-secondary\\)\\]:hover{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .hover\\:bg-\\[var\\(--ui-kit-secondary-h\\)\\]:hover{background-color:var(--ui-kit-secondary-h)}.embarkai-ui-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.embarkai-ui-scope .hover\\:text-\\[var\\(--ui-kit-fg\\)\\]:hover{color:var(--ui-kit-fg)}.embarkai-ui-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.embarkai-ui-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.embarkai-ui-scope .hover\\:underline:hover{text-decoration-line:underline}.embarkai-ui-scope .hover\\:opacity-80:hover{opacity:.8}.embarkai-ui-scope .hover\\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.embarkai-ui-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.embarkai-ui-scope .focus\\:border-\\[var\\(--ui-kit-primary\\)\\]:focus{border-color:var(--ui-kit-primary)}.embarkai-ui-scope .focus\\:bg-\\[var\\(--ui-kit-secondary-a\\)\\]:focus{background-color:var(--ui-kit-secondary-a)}.embarkai-ui-scope .focus\\:bg-transparent:focus{background-color:transparent}.embarkai-ui-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.embarkai-ui-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.embarkai-ui-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.embarkai-ui-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.embarkai-ui-scope .active\\:bg-\\[\\#f3ba2f\\]:active{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.embarkai-ui-scope .active\\:bg-\\[var\\(--ui-kit-bg\\)\\]:active{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .active\\:bg-\\[var\\(--ui-kit-secondary-a\\)\\]:active{background-color:var(--ui-kit-secondary-a)}.embarkai-ui-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.embarkai-ui-scope .active\\:opacity-60:active{opacity:.6}.embarkai-ui-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.embarkai-ui-scope .disabled\\:cursor-default:disabled{cursor:default}.embarkai-ui-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.embarkai-ui-scope .disabled\\:opacity-50:disabled{opacity:.5}.embarkai-ui-scope .disabled\\:hover\\:bg-\\[var\\(--ui-kit-bg\\)\\]:hover:disabled{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .disabled\\:hover\\:bg-\\[var\\(--ui-kit-secondary\\)\\]:hover:disabled{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .disabled\\:hover\\:text-\\[var\\(--ui-kit-bg-error\\)\\]:hover:disabled{color:var(--ui-kit-bg-error)}.embarkai-ui-scope .disabled\\:hover\\:opacity-50:hover:disabled{opacity:.5}.embarkai-ui-scope .disabled\\:active\\:bg-\\[var\\(--ui-kit-bg\\)\\]:active:disabled{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .disabled\\:active\\:text-\\[var\\(--ui-kit-bg-error\\)\\]:active:disabled{color:var(--ui-kit-bg-error)}.embarkai-ui-scope .disabled\\:active\\:opacity-50:active:disabled{opacity:.5}.embarkai-ui-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.embarkai-ui-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.embarkai-ui-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.embarkai-ui-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.embarkai-ui-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.embarkai-ui-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.embarkai-ui-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.embarkai-ui-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.embarkai-ui-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.embarkai-ui-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.embarkai-ui-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--ui-kit-bd-intense\\)\\][data-state=checked]{border-color:var(--ui-kit-bd-intense)}.embarkai-ui-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--ui-kit-secondary\\)\\][data-state=checked]{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--ui-kit-fg\\)\\][data-state=checked]{color:var(--ui-kit-fg)}.embarkai-ui-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--ui-kit-gap\\)\\][data-slot=select-value]>*){gap:var(--ui-kit-gap)}@media (min-width:640px){.embarkai-ui-scope .sm\\:flex-row{flex-direction:row}.embarkai-ui-scope .sm\\:justify-end{justify-content:flex-end}.embarkai-ui-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.embarkai-ui-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.embarkai-ui-scope .md\\:h-8{height:2rem}.embarkai-ui-scope .md\\:w-8{width:2rem}.embarkai-ui-scope .md\\:gap-\\[var\\(--ui-kit-gap\\)\\]{gap:var(--ui-kit-gap)}.embarkai-ui-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}.embarkai-ui-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.embarkai-ui-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.embarkai-ui-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}`;
|
|
28486
|
+
var built_default = `.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.embarkai-ui-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.embarkai-ui-scope .pointer-events-none{pointer-events:none}.embarkai-ui-scope .pointer-events-auto{pointer-events:auto}.embarkai-ui-scope .visible{visibility:visible}.embarkai-ui-scope .invisible{visibility:hidden}.embarkai-ui-scope .static{position:static}.embarkai-ui-scope .fixed{position:fixed}.embarkai-ui-scope .absolute{position:absolute}.embarkai-ui-scope .relative{position:relative}.embarkai-ui-scope .inset-0{inset:0}.embarkai-ui-scope .-right-1{right:-.25rem}.embarkai-ui-scope .-right-2{right:-.5rem}.embarkai-ui-scope .-top-1{top:-.25rem}.embarkai-ui-scope .-top-2{top:-.5rem}.embarkai-ui-scope .bottom-0{bottom:0}.embarkai-ui-scope .bottom-full{bottom:100%}.embarkai-ui-scope .left-0{left:0}.embarkai-ui-scope .left-1\\/2{left:50%}.embarkai-ui-scope .left-4{left:1rem}.embarkai-ui-scope .right-0{right:0}.embarkai-ui-scope .right-2{right:.5rem}.embarkai-ui-scope .right-3{right:.75rem}.embarkai-ui-scope .right-4{right:1rem}.embarkai-ui-scope .right-\\[var\\(--ui-kit-pd\\)\\]{right:var(--ui-kit-pd)}.embarkai-ui-scope .right-full{right:100%}.embarkai-ui-scope .top-0{top:0}.embarkai-ui-scope .top-1\\/2{top:50%}.embarkai-ui-scope .top-2{top:.5rem}.embarkai-ui-scope .top-4{top:1rem}.embarkai-ui-scope .top-\\[var\\(--ui-kit-pd\\)\\]{top:var(--ui-kit-pd)}.embarkai-ui-scope .z-10{z-index:10}.embarkai-ui-scope .z-50{z-index:50}.embarkai-ui-scope .z-\\[9998\\]{z-index:9998}.embarkai-ui-scope .z-\\[9999\\]{z-index:9999}.embarkai-ui-scope .-m-px{margin:-1px}.embarkai-ui-scope .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.embarkai-ui-scope .mx-auto{margin-left:auto;margin-right:auto}.embarkai-ui-scope .my-1{margin-top:.25rem;margin-bottom:.25rem}.embarkai-ui-scope .mb-1{margin-bottom:.25rem}.embarkai-ui-scope .mb-2{margin-bottom:.5rem}.embarkai-ui-scope .mb-3{margin-bottom:.75rem}.embarkai-ui-scope .mb-4{margin-bottom:1rem}.embarkai-ui-scope .ml-1{margin-left:.25rem}.embarkai-ui-scope .ml-2{margin-left:.5rem}.embarkai-ui-scope .ml-auto{margin-left:auto}.embarkai-ui-scope .mr-1{margin-right:.25rem}.embarkai-ui-scope .mt-0\\.5{margin-top:.125rem}.embarkai-ui-scope .mt-1{margin-top:.25rem}.embarkai-ui-scope .mt-2{margin-top:.5rem}.embarkai-ui-scope .mt-4{margin-top:1rem}.embarkai-ui-scope .block{display:block}.embarkai-ui-scope .inline-block{display:inline-block}.embarkai-ui-scope .inline{display:inline}.embarkai-ui-scope .flex{display:flex}.embarkai-ui-scope .inline-flex{display:inline-flex}.embarkai-ui-scope .table{display:table}.embarkai-ui-scope .grid{display:grid}.embarkai-ui-scope .hidden{display:none}.embarkai-ui-scope .aspect-square{aspect-ratio:1/1}.embarkai-ui-scope .size-4{width:1rem;height:1rem}.embarkai-ui-scope .size-8{width:2rem;height:2rem}.embarkai-ui-scope .size-auto{width:auto;height:auto}.embarkai-ui-scope .h-0{height:0}.embarkai-ui-scope .h-1{height:.25rem}.embarkai-ui-scope .h-10{height:2.5rem}.embarkai-ui-scope .h-12{height:3rem}.embarkai-ui-scope .h-16{height:4rem}.embarkai-ui-scope .h-3{height:.75rem}.embarkai-ui-scope .h-3\\.5{height:.875rem}.embarkai-ui-scope .h-4{height:1rem}.embarkai-ui-scope .h-48{height:12rem}.embarkai-ui-scope .h-5{height:1.25rem}.embarkai-ui-scope .h-6{height:1.5rem}.embarkai-ui-scope .h-7{height:1.75rem}.embarkai-ui-scope .h-8{height:2rem}.embarkai-ui-scope .h-\\[100dvh\\]{height:100dvh}.embarkai-ui-scope .h-\\[48px\\]{height:48px}.embarkai-ui-scope .h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.embarkai-ui-scope .h-auto{height:auto}.embarkai-ui-scope .h-fit{height:-moz-fit-content;height:fit-content}.embarkai-ui-scope .h-full{height:100%}.embarkai-ui-scope .h-px{height:1px}.embarkai-ui-scope .max-h-96{max-height:24rem}.embarkai-ui-scope .max-h-\\[95dvh\\]{max-height:95dvh}.embarkai-ui-scope .min-h-10{min-height:2.5rem}.embarkai-ui-scope .min-h-12{min-height:3rem}.embarkai-ui-scope .w-1{width:.25rem}.embarkai-ui-scope .w-1\\/2{width:50%}.embarkai-ui-scope .w-10{width:2.5rem}.embarkai-ui-scope .w-12{width:3rem}.embarkai-ui-scope .w-16{width:4rem}.embarkai-ui-scope .w-3{width:.75rem}.embarkai-ui-scope .w-3\\.5{width:.875rem}.embarkai-ui-scope .w-4{width:1rem}.embarkai-ui-scope .w-48{width:12rem}.embarkai-ui-scope .w-5{width:1.25rem}.embarkai-ui-scope .w-6{width:1.5rem}.embarkai-ui-scope .w-7{width:1.75rem}.embarkai-ui-scope .w-8{width:2rem}.embarkai-ui-scope .w-\\[100dvw\\]{width:100dvw}.embarkai-ui-scope .w-\\[40px\\]{width:40px}.embarkai-ui-scope .w-\\[var\\(--ui-kit-maw\\)\\]{width:var(--ui-kit-maw)}.embarkai-ui-scope .w-fit{width:-moz-fit-content;width:fit-content}.embarkai-ui-scope .w-full{width:100%}.embarkai-ui-scope .w-px{width:1px}.embarkai-ui-scope .min-w-0{min-width:0}.embarkai-ui-scope .min-w-10{min-width:2.5rem}.embarkai-ui-scope .min-w-16{min-width:4rem}.embarkai-ui-scope .min-w-\\[256px\\]{min-width:256px}.embarkai-ui-scope .min-w-\\[8rem\\]{min-width:8rem}.embarkai-ui-scope .min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.embarkai-ui-scope .max-w-\\[100px\\]{max-width:100px}.embarkai-ui-scope .max-w-\\[144px\\]{max-width:144px}.embarkai-ui-scope .max-w-\\[150px\\]{max-width:150px}.embarkai-ui-scope .max-w-\\[160px\\]{max-width:160px}.embarkai-ui-scope .max-w-\\[256px\\]{max-width:256px}.embarkai-ui-scope .max-w-\\[680px\\]{max-width:680px}.embarkai-ui-scope .max-w-\\[calc\\(50\\%-8px\\)\\]{max-width:calc(50% - 8px)}.embarkai-ui-scope .max-w-full{max-width:100%}.embarkai-ui-scope .max-w-sm{max-width:24rem}.embarkai-ui-scope .flex-1{flex:1 1 0%}.embarkai-ui-scope .flex-none{flex:none}.embarkai-ui-scope .flex-shrink-0,.embarkai-ui-scope .shrink-0{flex-shrink:0}.embarkai-ui-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.embarkai-ui-scope .-translate-x-1\\/2,.embarkai-ui-scope .-translate-x-\\[var\\(--ui-kit-gap\\)\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .-translate-x-\\[var\\(--ui-kit-gap\\)\\]{--tw-translate-x:calc(var(--ui-kit-gap)*-1)}.embarkai-ui-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.embarkai-ui-scope .-translate-y-1\\/2,.embarkai-ui-scope .-translate-y-1\\/3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .-translate-y-1\\/3{--tw-translate-y:-33.333333%}.embarkai-ui-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes glow-warning{0%,to{transform:scale(1);box-shadow:0 0 16px var(--ui-kit-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--ui-kit-bg-warning)}}.embarkai-ui-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse{50%{opacity:.5}}.embarkai-ui-scope .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.embarkai-ui-scope .animate-spin{animation:spin 1s linear infinite}.embarkai-ui-scope .cursor-default{cursor:default}.embarkai-ui-scope .cursor-help{cursor:help}.embarkai-ui-scope .cursor-pointer{cursor:pointer}.embarkai-ui-scope .cursor-text{cursor:text}.embarkai-ui-scope .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.embarkai-ui-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.embarkai-ui-scope .scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.embarkai-ui-scope .list-inside{list-style-position:inside}.embarkai-ui-scope .list-disc{list-style-type:disc}.embarkai-ui-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.embarkai-ui-scope .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.embarkai-ui-scope .flex-col{flex-direction:column}.embarkai-ui-scope .flex-col-reverse{flex-direction:column-reverse}.embarkai-ui-scope .flex-wrap{flex-wrap:wrap}.embarkai-ui-scope .place-content-center{place-content:center}.embarkai-ui-scope .items-start{align-items:flex-start}.embarkai-ui-scope .items-end{align-items:flex-end}.embarkai-ui-scope .items-center{align-items:center}.embarkai-ui-scope .justify-start{justify-content:flex-start}.embarkai-ui-scope .justify-end{justify-content:flex-end}.embarkai-ui-scope .justify-center{justify-content:center}.embarkai-ui-scope .justify-between{justify-content:space-between}.embarkai-ui-scope .gap-0{gap:0}.embarkai-ui-scope .gap-1{gap:.25rem}.embarkai-ui-scope .gap-2{gap:.5rem}.embarkai-ui-scope .gap-3{gap:.75rem}.embarkai-ui-scope .gap-4{gap:1rem}.embarkai-ui-scope .gap-\\[10px\\]{gap:10px}.embarkai-ui-scope .gap-\\[var\\(--ui-kit-gap\\)\\]{gap:var(--ui-kit-gap)}.embarkai-ui-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.embarkai-ui-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.embarkai-ui-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.embarkai-ui-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.embarkai-ui-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.embarkai-ui-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.embarkai-ui-scope .overflow-hidden{overflow:hidden}.embarkai-ui-scope .overflow-y-auto{overflow-y:auto}.embarkai-ui-scope .overflow-x-hidden{overflow-x:hidden}.embarkai-ui-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.embarkai-ui-scope .text-ellipsis{text-overflow:ellipsis}.embarkai-ui-scope .whitespace-nowrap{white-space:nowrap}.embarkai-ui-scope .whitespace-pre-line{white-space:pre-line}.embarkai-ui-scope .whitespace-pre-wrap{white-space:pre-wrap}.embarkai-ui-scope .break-normal{overflow-wrap:normal;word-break:normal}.embarkai-ui-scope .break-words{overflow-wrap:break-word}.embarkai-ui-scope .break-all{word-break:break-all}.embarkai-ui-scope .rounded{border-radius:.25rem}.embarkai-ui-scope .rounded-\\[10px\\]{border-radius:10px}.embarkai-ui-scope .rounded-\\[8px\\]{border-radius:8px}.embarkai-ui-scope .rounded-\\[calc\\(var\\(--ui-kit-el-bdrs\\)_\\/_2\\)\\]{border-radius:calc(var(--ui-kit-el-bdrs)/2)}.embarkai-ui-scope .rounded-\\[var\\(--ui-kit-bdrs\\)\\]{border-radius:var(--ui-kit-bdrs)}.embarkai-ui-scope .rounded-\\[var\\(--ui-kit-el-bdrs\\)\\]{border-radius:var(--ui-kit-el-bdrs)}.embarkai-ui-scope .rounded-full{border-radius:9999px}.embarkai-ui-scope .rounded-lg{border-radius:.5rem}.embarkai-ui-scope .rounded-md{border-radius:.375rem}.embarkai-ui-scope .rounded-xl{border-radius:.75rem}.embarkai-ui-scope .border{border-width:1px}.embarkai-ui-scope .border-0{border-width:0}.embarkai-ui-scope .border-2{border-width:2px}.embarkai-ui-scope .border-b{border-bottom-width:1px}.embarkai-ui-scope .border-t{border-top-width:1px}.embarkai-ui-scope .border-dashed{border-style:dashed}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bd\\)\\]{border-color:var(--ui-kit-bd)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bg-error\\)\\]{border-color:var(--ui-kit-bg-error)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bg-success\\)\\]{border-color:var(--ui-kit-bg-success)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-bg-warning\\)\\]{border-color:var(--ui-kit-bg-warning)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-error\\)\\]{border-color:var(--ui-kit-error)}.embarkai-ui-scope .border-\\[var\\(--ui-kit-secondary\\)\\]{border-color:var(--ui-kit-secondary)}.embarkai-ui-scope .border-current{border-color:currentColor}.embarkai-ui-scope .border-transparent{border-color:transparent}.embarkai-ui-scope .border-t-transparent{border-top-color:transparent}.embarkai-ui-scope .bg-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[\\#f0f6f8\\]{--tw-bg-opacity:1;background-color:rgb(240 246 248/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg\\)\\]{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-error\\)\\]{background-color:var(--ui-kit-bg-error)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-info\\)\\]{background-color:var(--ui-kit-bg-info)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-secondary\\)\\]{background-color:var(--ui-kit-bg-secondary)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-success\\)\\]{background-color:var(--ui-kit-bg-success)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-bg-warning\\)\\]{background-color:var(--ui-kit-bg-warning)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-fg\\)\\]{background-color:var(--ui-kit-fg)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-overlay\\)\\]{background-color:var(--ui-kit-overlay)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-primary\\)\\]{background-color:var(--ui-kit-primary)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-secondary\\)\\]{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .bg-\\[var\\(--ui-kit-secondary-h\\)\\]{background-color:var(--ui-kit-secondary-h)}.embarkai-ui-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.embarkai-ui-scope .bg-transparent{background-color:transparent}.embarkai-ui-scope .fill-\\[var\\(--ui-kit-bg-warning\\)\\]{fill:var(--ui-kit-bg-warning)}.embarkai-ui-scope .object-contain{-o-object-fit:contain;object-fit:contain}.embarkai-ui-scope .object-cover{-o-object-fit:cover;object-fit:cover}.embarkai-ui-scope .p-0{padding:0}.embarkai-ui-scope .p-1{padding:.25rem}.embarkai-ui-scope .p-2{padding:.5rem}.embarkai-ui-scope .p-3{padding:.75rem}.embarkai-ui-scope .p-4{padding:1rem}.embarkai-ui-scope .p-5{padding:1.25rem}.embarkai-ui-scope .p-6{padding:1.5rem}.embarkai-ui-scope .p-8{padding:2rem}.embarkai-ui-scope .p-\\[2px\\]{padding:2px}.embarkai-ui-scope .p-\\[var\\(--ui-kit-gap\\)\\]{padding:var(--ui-kit-gap)}.embarkai-ui-scope .p-\\[var\\(--ui-kit-pd\\)\\]{padding:var(--ui-kit-pd)}.embarkai-ui-scope .px-0{padding-left:0;padding-right:0}.embarkai-ui-scope .px-1{padding-left:.25rem;padding-right:.25rem}.embarkai-ui-scope .px-2{padding-left:.5rem;padding-right:.5rem}.embarkai-ui-scope .px-3{padding-left:.75rem;padding-right:.75rem}.embarkai-ui-scope .px-4{padding-left:1rem;padding-right:1rem}.embarkai-ui-scope .px-5{padding-left:1.25rem;padding-right:1.25rem}.embarkai-ui-scope .px-8{padding-left:2rem;padding-right:2rem}.embarkai-ui-scope .px-\\[var\\(--ui-kit-gap\\)\\]{padding-left:var(--ui-kit-gap);padding-right:var(--ui-kit-gap)}.embarkai-ui-scope .px-\\[var\\(--ui-kit-pd\\)\\]{padding-left:var(--ui-kit-pd);padding-right:var(--ui-kit-pd)}.embarkai-ui-scope .py-0{padding-top:0;padding-bottom:0}.embarkai-ui-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.embarkai-ui-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.embarkai-ui-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.embarkai-ui-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.embarkai-ui-scope .py-4{padding-top:1rem;padding-bottom:1rem}.embarkai-ui-scope .py-8{padding-top:2rem;padding-bottom:2rem}.embarkai-ui-scope .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.embarkai-ui-scope .py-\\[var\\(--ui-kit-gap\\)\\]{padding-top:var(--ui-kit-gap);padding-bottom:var(--ui-kit-gap)}.embarkai-ui-scope .py-\\[var\\(--ui-kit-pd\\)\\]{padding-top:var(--ui-kit-pd);padding-bottom:var(--ui-kit-pd)}.embarkai-ui-scope .pb-2{padding-bottom:.5rem}.embarkai-ui-scope .pb-5{padding-bottom:1.25rem}.embarkai-ui-scope .pb-6{padding-bottom:1.5rem}.embarkai-ui-scope .pb-\\[var\\(--ui-kit-pd\\)\\]{padding-bottom:var(--ui-kit-pd)}.embarkai-ui-scope .pl-\\[var\\(--ui-kit-pd\\)\\]{padding-left:var(--ui-kit-pd)}.embarkai-ui-scope .pr-8{padding-right:2rem}.embarkai-ui-scope .pt-3{padding-top:.75rem}.embarkai-ui-scope .pt-4{padding-top:1rem}.embarkai-ui-scope .pt-5{padding-top:1.25rem}.embarkai-ui-scope .text-left{text-align:left}.embarkai-ui-scope .text-center{text-align:center}.embarkai-ui-scope .text-right{text-align:right}.embarkai-ui-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.embarkai-ui-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.embarkai-ui-scope .text-2xl{font-size:1.5rem;line-height:2rem}.embarkai-ui-scope .text-\\[10px\\]{font-size:10px}.embarkai-ui-scope .text-\\[14px\\]{font-size:14px}.embarkai-ui-scope .text-\\[16px\\]{font-size:16px}.embarkai-ui-scope .text-\\[8px\\]{font-size:8px}.embarkai-ui-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.embarkai-ui-scope .text-sm{font-size:.875rem;line-height:1.25rem}.embarkai-ui-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.embarkai-ui-scope .text-xs{font-size:.75rem;line-height:1rem}.embarkai-ui-scope .font-bold{font-weight:700}.embarkai-ui-scope .font-medium{font-weight:500}.embarkai-ui-scope .font-normal{font-weight:400}.embarkai-ui-scope .font-semibold{font-weight:600}.embarkai-ui-scope .uppercase{text-transform:uppercase}.embarkai-ui-scope .lowercase{text-transform:lowercase}.embarkai-ui-scope .leading-3{line-height:.75rem}.embarkai-ui-scope .leading-4{line-height:1rem}.embarkai-ui-scope .leading-5{line-height:1.25rem}.embarkai-ui-scope .leading-6{line-height:1.5rem}.embarkai-ui-scope .leading-7{line-height:1.75rem}.embarkai-ui-scope .leading-8{line-height:2rem}.embarkai-ui-scope .leading-\\[8px\\]{line-height:8px}.embarkai-ui-scope .leading-none{line-height:1}.embarkai-ui-scope .leading-tight{line-height:1.25}.embarkai-ui-scope .tracking-\\[0\\.3em\\]{letter-spacing:.3em}.embarkai-ui-scope .tracking-tight{letter-spacing:-.025em}.embarkai-ui-scope .text-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-\\[var\\(--ui-kit-bg-error\\)\\]{color:var(--ui-kit-bg-error)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-bg-success\\)\\]{color:var(--ui-kit-bg-success)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-bg-warning\\)\\]{color:var(--ui-kit-bg-warning)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-error\\)\\]{color:var(--ui-kit-error)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-fg\\)\\]{color:var(--ui-kit-fg)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-fg-inverted\\)\\]{color:var(--ui-kit-fg-inverted)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-fg-muted\\)\\]{color:var(--ui-kit-fg-muted)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-info\\)\\]{color:var(--ui-kit-info)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-primary\\)\\]{color:var(--ui-kit-primary)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-success\\)\\]{color:var(--ui-kit-success)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-text-secondary\\)\\]{color:var(--ui-kit-text-secondary)}.embarkai-ui-scope .text-\\[var\\(--ui-kit-warning\\)\\]{color:var(--ui-kit-warning)}.embarkai-ui-scope .text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.embarkai-ui-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.embarkai-ui-scope .underline{text-decoration-line:underline}.embarkai-ui-scope .underline-offset-2{text-underline-offset:2px}.embarkai-ui-scope .underline-offset-4{text-underline-offset:4px}.embarkai-ui-scope .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.embarkai-ui-scope .opacity-0{opacity:0}.embarkai-ui-scope .opacity-100{opacity:1}.embarkai-ui-scope .opacity-50{opacity:.5}.embarkai-ui-scope .opacity-60{opacity:.6}.embarkai-ui-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.embarkai-ui-scope .shadow,.embarkai-ui-scope .shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.embarkai-ui-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.embarkai-ui-scope .outline-none{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .outline{outline-style:solid}.embarkai-ui-scope .blur{--tw-blur:blur(8px)}.embarkai-ui-scope .blur,.embarkai-ui-scope .grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.embarkai-ui-scope .grayscale{--tw-grayscale:grayscale(100%)}.embarkai-ui-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.embarkai-ui-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-\\[color\\2c box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .transition-none{transition-property:none}.embarkai-ui-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.embarkai-ui-scope .duration-200{transition-duration:.2s}.embarkai-ui-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.embarkai-ui-scope{--ui-kit-ff:var(--embark-ui-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--ui-kit-maw:var(--embark-ui-maw,384px);--ui-kit-pd:var(--embark-ui-pd,12px);--ui-kit-gap:var(--embark-ui-gap,10px);--ui-kit-bdrs:var(--embark-ui-bdrs,20px);--ui-kit-el-bdrs:var(--embark-ui-element-bdrs,10px);--ui-kit-backdrop-blur:var(--embark-ui-backdrop-blur,10px)}.embarkai-ui-scope[data-current-theme-mode=light]{--ui-kit-overlay:var(--embark-ui-overlay,hsla(0,0%,100%,.8));--ui-kit-bg:var(--embark-ui-bg,#fff);--ui-kit-fg:var(--embark-ui-fg,#000);--ui-kit-fg-inverted:var(--embark-ui-fg-inverted,#fff);--ui-kit-fg-muted:var(--embark-ui-fg-muted,rgba(0,0,0,.6));--ui-kit-primary:var(--embark-ui-primary,#000);--ui-kit-primary-h:var(--embark-ui-primary-h,rgba(0,0,0,.8));--ui-kit-primary-a:var(--embark-ui-primary-a,rgba(0,0,0,.6));--ui-kit-secondary:var(--embark-ui-secondary,#e4e4e4);--ui-kit-secondary-h:var(--embark-ui-secondary-h,hsla(0,0%,89%,.8));--ui-kit-secondary-a:var(--embark-ui-secondary-a,hsla(0,0%,89%,.6));--ui-kit-bd:var(--embark-ui-bd,#ebebeb);--ui-kit-bd-intense:var(--embark-ui-bd-intense,#a9a9a9);--ui-kit-shadow:var(--embark-ui-shadow,0 0 0 0 transparent);--ui-kit-shadow-c:var(--embark-ui-shadow-c,rgba(0,0,0,.1));--ui-kit-info:var(--embark-ui-info,var(--ui-kit-fg));--ui-kit-bg-info:var(--embark-ui-bg-info,var(--ui-kit-secondary));--ui-kit-success:var(--embark-ui-success,#000);--ui-kit-bg-success:var(--embark-ui-bg-success,#21ff51);--ui-kit-warning:var(--embark-ui-warning,#000);--ui-kit-bg-warning:var(--embark-ui-bg-warning,#e9fa00);--ui-kit-error:var(--embark-ui-error,#fff);--ui-kit-bg-error:var(--embark-ui-bg-error,#d6204e)}.embarkai-ui-scope[data-current-theme-mode=dark]{--ui-kit-overlay:var(--embark-ui-overlay,rgba(0,0,0,.8));--ui-kit-bg:var(--embark-ui-bg,#1a1a1a);--ui-kit-fg:var(--embark-ui-fg,#fff);--ui-kit-fg-inverted:var(--embark-ui-fg-inverted,#000);--ui-kit-fg-muted:var(--embark-ui-fg-muted,hsla(0,0%,100%,.6));--ui-kit-primary:var(--embark-ui-primary,#fff);--ui-kit-primary-h:var(--embark-ui-primary-h,hsla(0,0%,100%,.8));--ui-kit-primary-a:var(--embark-ui-primary-a,hsla(0,0%,100%,.6));--ui-kit-secondary:var(--embark-ui-secondary,#2a2a2a);--ui-kit-secondary-h:var(--embark-ui-secondary-h,rgba(42,42,42,.6));--ui-kit-secondary-a:var(--embark-ui-secondary-a,rgba(42,42,42,.4));--ui-kit-bd:var(--embark-ui-bd,#3a3a3a);--ui-kit-bd-intense:var(--embark-ui-bd-intense,#4a4a4a);--ui-kit-shadow:var(--embark-ui-shadow,0 0 0 0 transparent);--ui-kit-shadow-c:var(--embark-ui-shadow-c,rgba(0,0,0,.1));--ui-kit-info:var(--embark-ui-info,var(--ui-kit-fg));--ui-kit-bg-info:var(--embark-ui-bg-info,var(--ui-kit-secondary));--ui-kit-success:var(--embark-ui-success,#000);--ui-kit-bg-success:var(--embark-ui-bg-success,#21ff51);--ui-kit-warning:var(--embark-ui-warning,#000);--ui-kit-bg-warning:var(--embark-ui-bg-warning,#e9fa00);--ui-kit-error:var(--embark-ui-error,#fff);--ui-kit-bg-error:var(--embark-ui-bg-error,#d6204e)}.embarkai-ui-scope,.embarkai-ui-scope *{margin:0;box-sizing:border-box;font-family:var(--ui-kit-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.embarkai-ui-scope button,.embarkai-ui-scope h1,.embarkai-ui-scope h2,.embarkai-ui-scope h3,.embarkai-ui-scope h4,.embarkai-ui-scope h5,.embarkai-ui-scope h6,.embarkai-ui-scope input,.embarkai-ui-scope p,.embarkai-ui-scope select,.embarkai-ui-scope textarea{font-family:var(--ui-kit-ff)!important;margin:0}.embarkai-ui-scope button,.embarkai-ui-scope input,.embarkai-ui-scope select,.embarkai-ui-scope textarea{border-style:solid;outline:none!important;appearance:none!important;-webkit-appearance:none;-moz-appearance:none}.embarkai-ui-scope input,.embarkai-ui-scope textarea{font-size:16px!important}.embarkai-ui-scope .account-connect-button{box-shadow:0 4px 20px var(--ui-kit-shadow-c),inset 0 0 0 1px var(--ui-kit-bd);transition:transform .25s ease}.embarkai-ui-scope .account-connect-button:hover{transform:scale(1.02)}.embarkai-ui-scope .account-connect-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.embarkai-ui-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.embarkai-ui-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.embarkai-ui-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.embarkai-ui-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.embarkai-ui-scope .list-scrollbar-y{width:100%;padding-right:var(--ui-kit-list-scrollbar-pd-r,0);overflow-y:auto;overflow-x:hidden;max-height:var(--ui-kit-scrollbar-mah,300px)}.embarkai-ui-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.embarkai-ui-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--ui-kit-bd)}.embarkai-ui-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.embarkai-ui-scope .noScrollbars::-webkit-scrollbar{display:none}.embarkai-ui-scope div[data-radix-popper-content-wrapper]{z-index:10000!important}@keyframes rotateShine{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}.embarkai-ui-scope .button-shine-outline{position:absolute;top:0;left:0;width:100%;height:100%;padding:1px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0) border-box;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0) border-box;-webkit-mask-composite:xor;mask-composite:exclude}.embarkai-ui-scope .button-shine-outline-shiner{position:absolute;top:50%;left:50%;width:500px;height:500px;transform:translate(-50%,-50%);background:conic-gradient(from 0deg,transparent 0,var(--ui-kit-fg) 8%,transparent 24%);animation:rotateShine 3s linear infinite}.embarkai-ui-scope .file\\:mr-\\[var\\(--ui-kit-gap\\)\\]::file-selector-button{margin-right:var(--ui-kit-gap)}.embarkai-ui-scope .file\\:h-12::file-selector-button{height:3rem}.embarkai-ui-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.embarkai-ui-scope .file\\:rounded-\\[var\\(--ui-kit-el-bdrs\\)\\]::file-selector-button{border-radius:var(--ui-kit-el-bdrs)}.embarkai-ui-scope .file\\:border-0::file-selector-button{border-width:0}.embarkai-ui-scope .file\\:bg-\\[var\\(--ui-kit-primary\\)\\]::file-selector-button{background-color:var(--ui-kit-primary)}.embarkai-ui-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.embarkai-ui-scope .file\\:px-\\[var\\(--ui-kit-pd\\)\\]::file-selector-button{padding-left:var(--ui-kit-pd);padding-right:var(--ui-kit-pd)}.embarkai-ui-scope .file\\:text-\\[16px\\]::file-selector-button{font-size:16px}.embarkai-ui-scope .file\\:text-base::file-selector-button{font-size:1rem;line-height:1.5rem}.embarkai-ui-scope .file\\:font-medium::file-selector-button{font-weight:500}.embarkai-ui-scope .file\\:text-\\[var\\(--ui-kit-fg-inverted\\)\\]::file-selector-button{color:var(--ui-kit-fg-inverted)}.embarkai-ui-scope .placeholder\\:text-\\[var\\(--ui-kit-fg-muted\\)\\]::-moz-placeholder{color:var(--ui-kit-fg-muted)}.embarkai-ui-scope .placeholder\\:text-\\[var\\(--ui-kit-fg-muted\\)\\]::placeholder{color:var(--ui-kit-fg-muted)}.embarkai-ui-scope .focus-within\\:bg-\\[var\\(--ui-kit-secondary-a\\)\\]:focus-within{background-color:var(--ui-kit-secondary-a)}.embarkai-ui-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .hover\\:bg-\\[\\#002c15\\]:hover{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[\\#081f2c\\]:hover{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[\\#f0f6f8\\]:hover{--tw-bg-opacity:1;background-color:rgb(240 246 248/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[\\#f3ba2f\\]:hover{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:bg-\\[var\\(--ui-kit-bg\\)\\]:hover{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .hover\\:bg-\\[var\\(--ui-kit-secondary\\)\\]:hover{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .hover\\:bg-\\[var\\(--ui-kit-secondary-h\\)\\]:hover{background-color:var(--ui-kit-secondary-h)}.embarkai-ui-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.embarkai-ui-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.embarkai-ui-scope .hover\\:text-\\[var\\(--ui-kit-fg\\)\\]:hover{color:var(--ui-kit-fg)}.embarkai-ui-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.embarkai-ui-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.embarkai-ui-scope .hover\\:underline:hover{text-decoration-line:underline}.embarkai-ui-scope .hover\\:opacity-80:hover{opacity:.8}.embarkai-ui-scope .hover\\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.embarkai-ui-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.embarkai-ui-scope .focus\\:border-\\[var\\(--ui-kit-primary\\)\\]:focus{border-color:var(--ui-kit-primary)}.embarkai-ui-scope .focus\\:bg-\\[var\\(--ui-kit-secondary-a\\)\\]:focus{background-color:var(--ui-kit-secondary-a)}.embarkai-ui-scope .focus\\:bg-transparent:focus{background-color:transparent}.embarkai-ui-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.embarkai-ui-scope .focus-visible\\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.embarkai-ui-scope .focus-visible\\:ring-\\[2px\\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.embarkai-ui-scope .focus-visible\\:ring-transparent:focus-visible{--tw-ring-color:transparent}.embarkai-ui-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.embarkai-ui-scope .active\\:bg-\\[\\#f3ba2f\\]:active{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.embarkai-ui-scope .active\\:bg-\\[var\\(--ui-kit-bg\\)\\]:active{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .active\\:bg-\\[var\\(--ui-kit-secondary-a\\)\\]:active{background-color:var(--ui-kit-secondary-a)}.embarkai-ui-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.embarkai-ui-scope .active\\:opacity-60:active{opacity:.6}.embarkai-ui-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.embarkai-ui-scope .disabled\\:cursor-default:disabled{cursor:default}.embarkai-ui-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.embarkai-ui-scope .disabled\\:opacity-50:disabled{opacity:.5}.embarkai-ui-scope .disabled\\:hover\\:bg-\\[var\\(--ui-kit-bg\\)\\]:hover:disabled{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .disabled\\:hover\\:bg-\\[var\\(--ui-kit-secondary\\)\\]:hover:disabled{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .disabled\\:hover\\:text-\\[var\\(--ui-kit-bg-error\\)\\]:hover:disabled{color:var(--ui-kit-bg-error)}.embarkai-ui-scope .disabled\\:hover\\:opacity-50:hover:disabled{opacity:.5}.embarkai-ui-scope .disabled\\:active\\:bg-\\[var\\(--ui-kit-bg\\)\\]:active:disabled{background-color:var(--ui-kit-bg)}.embarkai-ui-scope .disabled\\:active\\:text-\\[var\\(--ui-kit-bg-error\\)\\]:active:disabled{color:var(--ui-kit-bg-error)}.embarkai-ui-scope .disabled\\:active\\:opacity-50:active:disabled{opacity:.5}.embarkai-ui-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.embarkai-ui-scope .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.embarkai-ui-scope .data-\\[size\\=default\\]\\:h-12[data-size=default]{height:3rem}.embarkai-ui-scope .data-\\[size\\=sm\\]\\:h-10[data-size=sm]{height:2.5rem}.embarkai-ui-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.embarkai-ui-scope .data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom],.embarkai-ui-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.embarkai-ui-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.embarkai-ui-scope .data-\\[side\\=right\\]\\:translate-x-1[data-side=right],.embarkai-ui-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.embarkai-ui-scope .data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.embarkai-ui-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--ui-kit-bd-intense\\)\\][data-state=checked]{border-color:var(--ui-kit-bd-intense)}.embarkai-ui-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--ui-kit-secondary\\)\\][data-state=checked]{background-color:var(--ui-kit-secondary)}.embarkai-ui-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--ui-kit-fg\\)\\][data-state=checked]{color:var(--ui-kit-fg)}.embarkai-ui-scope .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1[data-slot=select-value]>*){overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex[data-slot=select-value]>*){display:flex}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center[data-slot=select-value]>*){align-items:center}.embarkai-ui-scope :is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-\\[var\\(--ui-kit-gap\\)\\][data-slot=select-value]>*){gap:var(--ui-kit-gap)}@media (min-width:640px){.embarkai-ui-scope .sm\\:flex-row{flex-direction:row}.embarkai-ui-scope .sm\\:justify-end{justify-content:flex-end}.embarkai-ui-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.embarkai-ui-scope .sm\\:text-left{text-align:left}}@media (min-width:768px){.embarkai-ui-scope .md\\:h-8{height:2rem}.embarkai-ui-scope .md\\:w-8{width:2rem}.embarkai-ui-scope .md\\:gap-\\[var\\(--ui-kit-gap\\)\\]{gap:var(--ui-kit-gap)}.embarkai-ui-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}.embarkai-ui-scope :is(.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-])){width:1rem;height:1rem}.embarkai-ui-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.embarkai-ui-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}`;
|
|
28378
28487
|
|
|
28379
28488
|
// src/index.ts
|
|
28380
28489
|
init_ProviderContext();
|
|
@@ -29060,12 +29169,12 @@ var Hash = ({
|
|
|
29060
29169
|
|
|
29061
29170
|
// src/internal/components/TransactionsMenu/TransactionsList.tsx
|
|
29062
29171
|
init_base2();
|
|
29063
|
-
import { useEffect as useEffect56, useState as
|
|
29172
|
+
import { useEffect as useEffect56, useState as useState32 } from "react";
|
|
29064
29173
|
import { jsx as jsx131, jsxs as jsxs115 } from "react/jsx-runtime";
|
|
29065
29174
|
var TransactionsList = ({ address, itemsCount = 10 }) => {
|
|
29066
|
-
const [transactions, setTransactions] =
|
|
29067
|
-
const [loading, setLoading] =
|
|
29068
|
-
const [error, setError] =
|
|
29175
|
+
const [transactions, setTransactions] = useState32([]);
|
|
29176
|
+
const [loading, setLoading] = useState32(true);
|
|
29177
|
+
const [error, setError] = useState32(null);
|
|
29069
29178
|
useEffect56(() => {
|
|
29070
29179
|
const fetchTransactions2 = async () => {
|
|
29071
29180
|
try {
|
|
@@ -29416,7 +29525,7 @@ function useDirectWallet() {
|
|
|
29416
29525
|
|
|
29417
29526
|
// src/hooks/useSendDirectTransaction.ts
|
|
29418
29527
|
init_useExternalWalletStore();
|
|
29419
|
-
import { useCallback as useCallback40, useState as
|
|
29528
|
+
import { useCallback as useCallback40, useState as useState34 } from "react";
|
|
29420
29529
|
import { isAddress as isAddress3, parseEther as parseEther3 } from "viem";
|
|
29421
29530
|
import { useSendTransaction as useWagmiSendTransaction, useSwitchChain as useSwitchChain3 } from "wagmi";
|
|
29422
29531
|
function useSendDirectTransaction() {
|
|
@@ -29424,9 +29533,9 @@ function useSendDirectTransaction() {
|
|
|
29424
29533
|
const externalChainId = useExternalWalletStore((st) => st.externalChainId);
|
|
29425
29534
|
const { sendTransactionAsync } = useWagmiSendTransaction();
|
|
29426
29535
|
const { switchChainAsync } = useSwitchChain3();
|
|
29427
|
-
const [isPending, setIsPending] =
|
|
29428
|
-
const [error, setError] =
|
|
29429
|
-
const [txHash, setTxHash] =
|
|
29536
|
+
const [isPending, setIsPending] = useState34(false);
|
|
29537
|
+
const [error, setError] = useState34(null);
|
|
29538
|
+
const [txHash, setTxHash] = useState34(null);
|
|
29430
29539
|
const sendTransaction = useCallback40(
|
|
29431
29540
|
async (params) => {
|
|
29432
29541
|
if (!isConnected) {
|
|
@@ -29473,7 +29582,7 @@ function useSendDirectTransaction() {
|
|
|
29473
29582
|
init_SessionContext();
|
|
29474
29583
|
init_account2();
|
|
29475
29584
|
init_linkedProfiles();
|
|
29476
|
-
import { useCallback as useCallback41, useMemo as useMemo19, useState as
|
|
29585
|
+
import { useCallback as useCallback41, useMemo as useMemo19, useState as useState35 } from "react";
|
|
29477
29586
|
import { encodeFunctionData as encodeFunctionData3, isAddress as isAddress4, parseEther as parseEther4, parseUnits as parseUnits3 } from "viem";
|
|
29478
29587
|
var ERC20_TRANSFER_ABI2 = [
|
|
29479
29588
|
{
|
|
@@ -29489,9 +29598,9 @@ var ERC20_TRANSFER_ABI2 = [
|
|
|
29489
29598
|
function useTransferToLinkedWallet() {
|
|
29490
29599
|
const session = useSession((st) => st.session);
|
|
29491
29600
|
const { profiles } = useLinkedProfiles();
|
|
29492
|
-
const [isPending, setIsPending] =
|
|
29493
|
-
const [error, setError] =
|
|
29494
|
-
const [userOpHash, setUserOpHash] =
|
|
29601
|
+
const [isPending, setIsPending] = useState35(false);
|
|
29602
|
+
const [error, setError] = useState35(null);
|
|
29603
|
+
const [userOpHash, setUserOpHash] = useState35(null);
|
|
29495
29604
|
const linkedWallets = useMemo19(
|
|
29496
29605
|
() => (profiles || []).filter((p) => p.provider === "wallet" && p.externalId).map((p) => p.externalId),
|
|
29497
29606
|
[profiles]
|
|
@@ -29639,7 +29748,7 @@ init_linkedProfiles();
|
|
|
29639
29748
|
init_nickname_fingerprint();
|
|
29640
29749
|
init_errors();
|
|
29641
29750
|
init_base2();
|
|
29642
|
-
|
|
29751
|
+
init_useBlockscoutAssets2();
|
|
29643
29752
|
|
|
29644
29753
|
// src/modules/transactions.ts
|
|
29645
29754
|
init_SessionContext();
|
|
@@ -29710,7 +29819,7 @@ function useTransactions() {
|
|
|
29710
29819
|
// src/modules/assets.ts
|
|
29711
29820
|
init_SessionContext();
|
|
29712
29821
|
import React33 from "react";
|
|
29713
|
-
import { erc20Abi as
|
|
29822
|
+
import { erc20Abi as erc20Abi5, formatUnits as formatUnits13 } from "viem";
|
|
29714
29823
|
import { useBalance as useBalance2, useReadContract as useReadContract2, useReadContracts } from "wagmi";
|
|
29715
29824
|
var COMMON_TOKENS = [
|
|
29716
29825
|
// Add real token addresses here when available
|
|
@@ -29737,22 +29846,21 @@ function useAssets(address) {
|
|
|
29737
29846
|
});
|
|
29738
29847
|
const tokenContracts = COMMON_TOKENS.map((token) => ({
|
|
29739
29848
|
address: token.address,
|
|
29740
|
-
abi:
|
|
29849
|
+
abi: erc20Abi5,
|
|
29741
29850
|
functionName: "balanceOf",
|
|
29742
29851
|
args: [address],
|
|
29743
29852
|
chainId
|
|
29744
29853
|
}));
|
|
29745
|
-
const
|
|
29854
|
+
const {
|
|
29855
|
+
data: tokenBalances,
|
|
29856
|
+
isLoading: tokenBalancesLoading,
|
|
29857
|
+
refetch: refetchTokenBalances
|
|
29858
|
+
} = useReadContracts({
|
|
29746
29859
|
contracts: tokenContracts,
|
|
29747
29860
|
query: {
|
|
29748
29861
|
enabled: !!address && COMMON_TOKENS.length > 0
|
|
29749
29862
|
}
|
|
29750
29863
|
});
|
|
29751
|
-
const {
|
|
29752
|
-
data: tokenBalances,
|
|
29753
|
-
isLoading: tokenBalancesLoading,
|
|
29754
|
-
refetch: refetchTokenBalances
|
|
29755
|
-
} = readContractsResult;
|
|
29756
29864
|
const getAllAssets = () => {
|
|
29757
29865
|
const assets = [];
|
|
29758
29866
|
if (nativeBalance) {
|
|
@@ -29761,7 +29869,7 @@ function useAssets(address) {
|
|
|
29761
29869
|
name: "Lumia",
|
|
29762
29870
|
symbol: "LUMIA",
|
|
29763
29871
|
balance: nativeBalance.value.toString(),
|
|
29764
|
-
formattedBalance: parseFloat(
|
|
29872
|
+
formattedBalance: parseFloat(formatUnits13(nativeBalance.value, nativeBalance.decimals)).toFixed(4),
|
|
29765
29873
|
decimals: 18
|
|
29766
29874
|
});
|
|
29767
29875
|
}
|
|
@@ -29770,7 +29878,7 @@ function useAssets(address) {
|
|
|
29770
29878
|
const token = COMMON_TOKENS[index];
|
|
29771
29879
|
if (balance.status === "success" && balance.result) {
|
|
29772
29880
|
const balanceValue = balance.result;
|
|
29773
|
-
const formattedBalance =
|
|
29881
|
+
const formattedBalance = formatUnits13(balanceValue, token.decimals);
|
|
29774
29882
|
assets.push({
|
|
29775
29883
|
type: "erc20",
|
|
29776
29884
|
address: token.address,
|
|
@@ -29795,7 +29903,7 @@ function useAssets(address) {
|
|
|
29795
29903
|
const token = COMMON_TOKENS[tokenIndex];
|
|
29796
29904
|
if (balance.status === "success" && balance.result) {
|
|
29797
29905
|
const balanceValue = balance.result;
|
|
29798
|
-
const formattedBalance =
|
|
29906
|
+
const formattedBalance = formatUnits13(balanceValue, token.decimals);
|
|
29799
29907
|
return {
|
|
29800
29908
|
address: token.address,
|
|
29801
29909
|
name: token.name,
|
|
@@ -29825,9 +29933,9 @@ function useTokenInfo(tokenAddress) {
|
|
|
29825
29933
|
const chainId = requireActiveChainId();
|
|
29826
29934
|
const readContractsResult = useReadContracts({
|
|
29827
29935
|
contracts: [
|
|
29828
|
-
{ address: tokenAddress, abi:
|
|
29829
|
-
{ address: tokenAddress, abi:
|
|
29830
|
-
{ address: tokenAddress, abi:
|
|
29936
|
+
{ address: tokenAddress, abi: erc20Abi5, functionName: "name", chainId },
|
|
29937
|
+
{ address: tokenAddress, abi: erc20Abi5, functionName: "symbol", chainId },
|
|
29938
|
+
{ address: tokenAddress, abi: erc20Abi5, functionName: "decimals", chainId }
|
|
29831
29939
|
]
|
|
29832
29940
|
});
|
|
29833
29941
|
const { data: tokenData, isLoading } = readContractsResult;
|
|
@@ -29856,7 +29964,7 @@ function useTokenBalance2(tokenAddress, userAddress) {
|
|
|
29856
29964
|
refetch
|
|
29857
29965
|
} = useReadContract2({
|
|
29858
29966
|
address: tokenAddress,
|
|
29859
|
-
abi:
|
|
29967
|
+
abi: erc20Abi5,
|
|
29860
29968
|
functionName: "balanceOf",
|
|
29861
29969
|
args: userAddress ? [userAddress] : void 0,
|
|
29862
29970
|
chainId,
|
|
@@ -29867,7 +29975,7 @@ function useTokenBalance2(tokenAddress, userAddress) {
|
|
|
29867
29975
|
const { tokenInfo } = useTokenInfo(tokenAddress);
|
|
29868
29976
|
const formattedBalance = React33.useMemo(() => {
|
|
29869
29977
|
if (!balance || !tokenInfo) return "0";
|
|
29870
|
-
return
|
|
29978
|
+
return formatUnits13(balance, tokenInfo.decimals);
|
|
29871
29979
|
}, [balance, tokenInfo]);
|
|
29872
29980
|
return {
|
|
29873
29981
|
balance,
|