@avail-project/widgets 0.0.1 → 2.0.1
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/common/utils/token-pricing.d.ts +1 -1
- package/dist/common/utils/token-pricing.d.ts.map +1 -1
- package/dist/common/utils/token-pricing.js +4 -1
- package/dist/nexus/NexusProvider.d.ts +4 -2
- package/dist/nexus/NexusProvider.d.ts.map +1 -1
- package/dist/nexus/NexusProvider.js +216 -39
- package/dist/nexus-widget/components/deposit-idle-form.d.ts +2 -1
- package/dist/nexus-widget/components/deposit-idle-form.d.ts.map +1 -1
- package/dist/nexus-widget/components/deposit-idle-form.js +26 -10
- package/dist/nexus-widget/components/nexus-widget-progress-screen.d.ts.map +1 -1
- package/dist/nexus-widget/components/nexus-widget-progress-screen.js +21 -5
- package/dist/nexus-widget/components/pay-with-sources.d.ts.map +1 -1
- package/dist/nexus-widget/components/pay-with-sources.js +43 -54
- package/dist/nexus-widget/components/send-idle-form.d.ts +2 -1
- package/dist/nexus-widget/components/send-idle-form.d.ts.map +1 -1
- package/dist/nexus-widget/components/send-idle-form.js +26 -10
- package/dist/nexus-widget/components/swap-asset-selector.d.ts +1 -1
- package/dist/nexus-widget/components/swap-asset-selector.d.ts.map +1 -1
- package/dist/nexus-widget/components/swap-asset-selector.js +198 -140
- package/dist/nexus-widget/components/swap-idle-form.d.ts +2 -1
- package/dist/nexus-widget/components/swap-idle-form.d.ts.map +1 -1
- package/dist/nexus-widget/components/swap-idle-form.js +3 -3
- package/dist/nexus-widget/components/swap-intent-preview.d.ts +5 -1
- package/dist/nexus-widget/components/swap-intent-preview.d.ts.map +1 -1
- package/dist/nexus-widget/components/swap-intent-preview.js +50 -35
- package/dist/nexus-widget/nexus-widget.d.ts.map +1 -1
- package/dist/nexus-widget/nexus-widget.js +1311 -617
- package/dist/nexus-widget/types.d.ts +1 -1
- package/dist/nexus-widget/types.d.ts.map +1 -1
- package/dist/nexus-widget/utils/deposit-source-selection.d.ts.map +1 -1
- package/dist/nexus-widget/utils/deposit-source-selection.js +68 -4
- package/package.json +6 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SupportedChainsAndTokensResult } from "@avail-project/nexus-core";
|
|
2
2
|
export declare const DEFAULT_COINBASE_PRICE_REQUEST_TIMEOUT_MS = 4000;
|
|
3
3
|
export declare const USD_PEGGED_FALLBACK_RATE = 1;
|
|
4
|
-
export declare const DEFAULT_USD_PEGGED_TOKEN_SYMBOLS: readonly ["USDT", "USDC", "USDC.E", "USDT.E", "USDS", "DAI", "CTUSD", "JUSD", "USDM", "FDUSD", "BUSD", "TUSD", "PYUSD", "GUSD", "SVJUSD", "LUSD", "USDE", "USDP"];
|
|
4
|
+
export declare const DEFAULT_USD_PEGGED_TOKEN_SYMBOLS: readonly ["USDT", "USDT0", "USDC", "USDC.E", "USDT.E", "USDS", "DAI", "CTUSD", "JUSD", "USDM", "FDUSD", "BUSD", "TUSD", "PYUSD", "GUSD", "SVJUSD", "LUSD", "USDE", "USDP"];
|
|
5
5
|
/**
|
|
6
6
|
* Wrapped / derivative token → base token pegging map.
|
|
7
7
|
* When Coinbase has no direct price for a token, we resolve the price
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-pricing.d.ts","sourceRoot":"","sources":["../../../.build-src/common/utils/token-pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAShF,eAAO,MAAM,yCAAyC,OAAQ,CAAC;AAC/D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"token-pricing.d.ts","sourceRoot":"","sources":["../../../.build-src/common/utils/token-pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAShF,eAAO,MAAM,yCAAyC,OAAQ,CAAC;AAC/D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,gCAAgC,4KAoBnC,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8CpD,CAAC;AAEX;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,MAAM;CAKhC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAuCD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAgBD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMpE;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBzE;AA8CD,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,8BAA8B,GAAG,IAAI,EACtD,WAAW,GAAE,QAAQ,CAAC,MAAM,CAAoC,GAC/D,GAAG,CAAC,MAAM,CAAC,CAqBb;AAqBD,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,gBAAgB,SAA4C,GAC3D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBxB;AAuBD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,gBAAgB,SAA4C,GAC3D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB"}
|
|
@@ -6,6 +6,7 @@ export const DEFAULT_COINBASE_PRICE_REQUEST_TIMEOUT_MS = 4_000;
|
|
|
6
6
|
export const USD_PEGGED_FALLBACK_RATE = 1;
|
|
7
7
|
export const DEFAULT_USD_PEGGED_TOKEN_SYMBOLS = [
|
|
8
8
|
"USDT",
|
|
9
|
+
"USDT0",
|
|
9
10
|
"USDC",
|
|
10
11
|
"USDC.E",
|
|
11
12
|
"USDT.E",
|
|
@@ -67,6 +68,7 @@ export const TOKEN_PRICE_PEGS = {
|
|
|
67
68
|
// --- Stablecoin variants ---
|
|
68
69
|
"USDC.E": "USDC",
|
|
69
70
|
"USDT.E": "USDT",
|
|
71
|
+
USDT0: "USDT",
|
|
70
72
|
GUSD: "USD",
|
|
71
73
|
JUSD: "USD",
|
|
72
74
|
SVJUSD: "USD",
|
|
@@ -92,7 +94,7 @@ export function resolveBaseSymbol(tokenSymbol) {
|
|
|
92
94
|
return TOKEN_PRICE_PEGS[normalized] ?? null;
|
|
93
95
|
}
|
|
94
96
|
export function normalizeTokenSymbol(tokenSymbol) {
|
|
95
|
-
return tokenSymbol.trim().toUpperCase();
|
|
97
|
+
return tokenSymbol.trim().toUpperCase().replaceAll("\u20ae", "T");
|
|
96
98
|
}
|
|
97
99
|
const USD_RATE_PEG_SYMBOLS = {
|
|
98
100
|
CBTC: "BTC",
|
|
@@ -103,6 +105,7 @@ const USD_RATE_PEG_SYMBOLS = {
|
|
|
103
105
|
SYBTC: "BTC",
|
|
104
106
|
"USDC.E": "USDC",
|
|
105
107
|
"USDT.E": "USDT",
|
|
108
|
+
USDT0: "USDT",
|
|
106
109
|
"WBTC.E": "BTC",
|
|
107
110
|
WCBTC: "BTC",
|
|
108
111
|
};
|
|
@@ -16,13 +16,14 @@ interface NexusContextType {
|
|
|
16
16
|
allowance: RefObject<OnAllowanceHookData | null>;
|
|
17
17
|
attachEventHooks: () => void;
|
|
18
18
|
bridgableBalance: UserAsset[] | null;
|
|
19
|
+
bridgableBalanceLoading: boolean;
|
|
19
20
|
deinitializeNexus: () => Promise<void>;
|
|
20
21
|
exchangeRate: Record<string, number> | null;
|
|
21
22
|
fetchBridgableBalance: () => Promise<void>;
|
|
22
23
|
fetchSwapBalance: () => Promise<UserAsset[] | null>;
|
|
23
24
|
getFiatValue: (amount: number, token: string) => number;
|
|
24
|
-
handleInit: (provider: EthereumProvider) => Promise<void>;
|
|
25
|
-
initializeNexus: (provider: EthereumProvider) => Promise<void>;
|
|
25
|
+
handleInit: (provider: EthereumProvider, accountAddress?: string) => Promise<void>;
|
|
26
|
+
initializeNexus: (provider: EthereumProvider, accountAddress?: string) => Promise<void>;
|
|
26
27
|
intent: RefObject<OnIntentHookData | null>;
|
|
27
28
|
loading: boolean;
|
|
28
29
|
network?: NexusNetwork;
|
|
@@ -32,6 +33,7 @@ interface NexusContextType {
|
|
|
32
33
|
setIntent: (data: OnIntentHookData | null) => void;
|
|
33
34
|
supportedChainsAndTokens: SupportedChainsAndTokensResult | null;
|
|
34
35
|
swapBalance: UserAsset[] | null;
|
|
36
|
+
swapBalanceLoading: boolean;
|
|
35
37
|
swapIntent: RefObject<OnSwapIntentHookData | null>;
|
|
36
38
|
swapSupportedChainsAndTokens: SupportedChainsResult | null;
|
|
37
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NexusProvider.d.ts","sourceRoot":"","sources":["../../.build-src/nexus/NexusProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG;IACrC,SAAS,EAAE,CAAC,YAAY,GAAG;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,EAAE,CAAC;IACL,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,qBAAqB,GAAG,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"NexusProvider.d.ts","sourceRoot":"","sources":["../../.build-src/nexus/NexusProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@ const sumSourceBalances = (sources) => sources.reduce((sum, source) => {
|
|
|
17
17
|
return Number.isFinite(balance) && balance > 0 ? sum + balance : sum;
|
|
18
18
|
}, 0);
|
|
19
19
|
const getSourceBalanceChainId = (source) => source.chain?.id ?? source.chainId;
|
|
20
|
+
const normalizeAccountAddress = (address) => {
|
|
21
|
+
const normalized = address?.trim().toLowerCase();
|
|
22
|
+
return normalized || null;
|
|
23
|
+
};
|
|
20
24
|
const filterUnsupportedSwapSources = (assets, swapSupportedChains) => {
|
|
21
25
|
if (!assets) {
|
|
22
26
|
return null;
|
|
@@ -55,20 +59,71 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
55
59
|
const [supportedChainsAndTokensState, setSupportedChainsAndTokensState] = useState(null);
|
|
56
60
|
const [swapSupportedChainsAndTokensState, setSwapSupportedChainsAndTokensState,] = useState(null);
|
|
57
61
|
const [bridgableBalance, setBridgableBalance] = useState(null);
|
|
62
|
+
const [bridgableBalanceLoading, setBridgableBalanceLoading] = useState(false);
|
|
58
63
|
const [swapBalance, setSwapBalance] = useState(null);
|
|
64
|
+
const [swapBalanceLoading, setSwapBalanceLoading] = useState(false);
|
|
59
65
|
const swapBalanceRef = useRef(null);
|
|
60
66
|
const [exchangeRateState, setExchangeRateState] = useState(null);
|
|
61
67
|
const exchangeRate = useRef(null);
|
|
62
68
|
const coinbaseUsdRateCache = useRef({});
|
|
63
69
|
const coinbaseUsdRateRequests = useRef({});
|
|
64
70
|
const initRequest = useRef(null);
|
|
71
|
+
const initializedAccountAddress = useRef(null);
|
|
65
72
|
const bridgableBalanceRequest = useRef(null);
|
|
66
73
|
const swapBalanceRequest = useRef(null);
|
|
67
74
|
const lastSwapBalanceFetchAt = useRef(0);
|
|
75
|
+
const balanceFetchRunId = useRef(0);
|
|
76
|
+
const latestBalanceFetchRunId = useRef(0);
|
|
68
77
|
const usdPeggedSymbols = useRef(new Set(DEFAULT_USD_PEGGED_TOKEN_SYMBOLS));
|
|
69
78
|
const intent = useRef(null);
|
|
70
79
|
const allowance = useRef(null);
|
|
71
80
|
const swapIntent = useRef(null);
|
|
81
|
+
const initializedRef = useRef(false);
|
|
82
|
+
const startBalanceFetchTiming = useCallback((source) => {
|
|
83
|
+
const runId = balanceFetchRunId.current + 1;
|
|
84
|
+
balanceFetchRunId.current = runId;
|
|
85
|
+
latestBalanceFetchRunId.current = runId;
|
|
86
|
+
const walletAddress = initializedAccountAddress.current;
|
|
87
|
+
const startTimeMs = Date.now();
|
|
88
|
+
const timing = {
|
|
89
|
+
runId,
|
|
90
|
+
source,
|
|
91
|
+
startTimeMs,
|
|
92
|
+
walletAddress,
|
|
93
|
+
};
|
|
94
|
+
console.log("[NexusProvider] balance fetch start", {
|
|
95
|
+
runId,
|
|
96
|
+
walletAddress,
|
|
97
|
+
source,
|
|
98
|
+
dateNow: startTimeMs,
|
|
99
|
+
date: new Date(startTimeMs),
|
|
100
|
+
});
|
|
101
|
+
return timing;
|
|
102
|
+
}, []);
|
|
103
|
+
const finishBalanceFetchTiming = useCallback((timing, status = "resolved") => {
|
|
104
|
+
if (latestBalanceFetchRunId.current !== timing.runId) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const endTimeMs = Date.now();
|
|
108
|
+
const fetchDurationMs = endTimeMs - timing.startTimeMs;
|
|
109
|
+
console.log("[NexusProvider] balance fetch end", {
|
|
110
|
+
runId: timing.runId,
|
|
111
|
+
walletAddress: timing.walletAddress,
|
|
112
|
+
source: timing.source,
|
|
113
|
+
status,
|
|
114
|
+
dateNow: endTimeMs,
|
|
115
|
+
date: new Date(endTimeMs),
|
|
116
|
+
});
|
|
117
|
+
console.log("[NexusProvider] balance fetch total", {
|
|
118
|
+
runId: timing.runId,
|
|
119
|
+
walletAddress: timing.walletAddress,
|
|
120
|
+
source: timing.source,
|
|
121
|
+
status,
|
|
122
|
+
totalTimeSeconds: fetchDurationMs / 1000,
|
|
123
|
+
elapsedMs: fetchDurationMs,
|
|
124
|
+
dateNow: endTimeMs,
|
|
125
|
+
});
|
|
126
|
+
}, []);
|
|
72
127
|
useEffect(() => {
|
|
73
128
|
let cancelled = false;
|
|
74
129
|
console.log("NEXUS CONFIG", stableConfig);
|
|
@@ -82,6 +137,10 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
82
137
|
if (cancelled) {
|
|
83
138
|
return;
|
|
84
139
|
}
|
|
140
|
+
if (initializedRef.current) {
|
|
141
|
+
nextSdk.destroy();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
85
144
|
sdkRef.current = nextSdk;
|
|
86
145
|
setSdk(nextSdk);
|
|
87
146
|
console.log("ChainList", nextSdk.chainList.chains);
|
|
@@ -333,7 +392,6 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
333
392
|
delete coinbaseUsdRateRequests.current[normalizedSymbol];
|
|
334
393
|
}
|
|
335
394
|
}, [cacheUsdRate]);
|
|
336
|
-
const initializedRef = useRef(false);
|
|
337
395
|
const setIntent = useCallback((data) => {
|
|
338
396
|
intent.current = data;
|
|
339
397
|
}, []);
|
|
@@ -345,6 +403,9 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
345
403
|
if (!activeSdk) {
|
|
346
404
|
return;
|
|
347
405
|
}
|
|
406
|
+
const activeAccountAddress = initializedAccountAddress.current;
|
|
407
|
+
const isCurrentSdkRun = () => sdkRef.current === activeSdk &&
|
|
408
|
+
initializedAccountAddress.current === activeAccountAddress;
|
|
348
409
|
const list = activeSdk.getSupportedChains();
|
|
349
410
|
supportedChainsAndTokens.current = list ?? null;
|
|
350
411
|
setSupportedChainsAndTokensState(list ?? null);
|
|
@@ -352,52 +413,86 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
352
413
|
const swapList = activeSdk.getSupportedChains();
|
|
353
414
|
swapSupportedChainsAndTokens.current = swapList ?? null;
|
|
354
415
|
setSwapSupportedChainsAndTokensState(swapList ?? null);
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
416
|
+
setBridgableBalanceLoading(true);
|
|
417
|
+
setSwapBalanceLoading(true);
|
|
418
|
+
const balanceTiming = startBalanceFetchTiming("setup");
|
|
419
|
+
let balanceTimingStatus = "resolved";
|
|
420
|
+
try {
|
|
421
|
+
const [bridgeAbleBalanceResult, swapBalanceResult, rates] = await Promise.allSettled([
|
|
422
|
+
activeSdk.getBalancesForBridge(),
|
|
423
|
+
activeSdk.getBalancesForSwap(),
|
|
424
|
+
getCoinbaseRates(),
|
|
425
|
+
]);
|
|
426
|
+
if (rates?.status === "fulfilled") {
|
|
427
|
+
const usdPerUnit = {};
|
|
428
|
+
for (const [symbol, value] of Object.entries(rates.value)) {
|
|
429
|
+
const normalized = normalizeTokenSymbol(symbol);
|
|
430
|
+
// Skip tokens with an explicit peg (e.g. WCBTC→BTC) — the SDK
|
|
431
|
+
// may return a bogus 1:1 USD rate for these. Our pegging map
|
|
432
|
+
// will resolve them correctly via their base symbol.
|
|
433
|
+
if (TOKEN_PRICE_PEGS[normalized])
|
|
434
|
+
continue;
|
|
435
|
+
const unitsPerUsd = Number.parseFloat(String(value));
|
|
436
|
+
if (Number.isFinite(unitsPerUsd) && unitsPerUsd > 0) {
|
|
437
|
+
usdPerUnit[normalized] = 1 / unitsPerUsd;
|
|
438
|
+
}
|
|
372
439
|
}
|
|
440
|
+
exchangeRate.current = usdPerUnit;
|
|
441
|
+
setExchangeRateState(usdPerUnit);
|
|
442
|
+
}
|
|
443
|
+
if (!isCurrentSdkRun()) {
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
if (bridgeAbleBalanceResult.status === "fulfilled") {
|
|
447
|
+
setBridgableBalance(normalizeUserAssetFiatValues(bridgeAbleBalanceResult.value));
|
|
448
|
+
}
|
|
449
|
+
if (swapBalanceResult.status === "fulfilled") {
|
|
450
|
+
const rawSwapBalance = swapBalanceResult.value;
|
|
451
|
+
const filteredSwapBalance = filterUnsupportedSwapSources(rawSwapBalance, swapList);
|
|
452
|
+
const normalizedSwapBalance = normalizeUserAssetFiatValues(filteredSwapBalance);
|
|
453
|
+
console.log("[NexusProvider] getBalancesForSwap:init raw", rawSwapBalance);
|
|
454
|
+
setSwapBalance(normalizedSwapBalance);
|
|
373
455
|
}
|
|
374
|
-
exchangeRate.current = usdPerUnit;
|
|
375
|
-
setExchangeRateState(usdPerUnit);
|
|
376
456
|
}
|
|
377
|
-
|
|
378
|
-
|
|
457
|
+
catch (error) {
|
|
458
|
+
balanceTimingStatus = "failed";
|
|
459
|
+
throw error;
|
|
379
460
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
461
|
+
finally {
|
|
462
|
+
finishBalanceFetchTiming(balanceTiming, balanceTimingStatus);
|
|
463
|
+
if (isCurrentSdkRun()) {
|
|
464
|
+
setBridgableBalanceLoading(false);
|
|
465
|
+
setSwapBalanceLoading(false);
|
|
466
|
+
}
|
|
386
467
|
}
|
|
387
|
-
}, [
|
|
388
|
-
|
|
468
|
+
}, [
|
|
469
|
+
config?.network,
|
|
470
|
+
finishBalanceFetchTiming,
|
|
471
|
+
normalizeUserAssetFiatValues,
|
|
472
|
+
startBalanceFetchTiming,
|
|
473
|
+
]);
|
|
474
|
+
const initializeNexus = useCallback(async (provider, accountAddress) => {
|
|
389
475
|
setLoading(true);
|
|
390
476
|
try {
|
|
391
477
|
console.log("INITIALIZE NEXUS CONFIG", stableConfig);
|
|
478
|
+
const previousSdk = sdkRef.current;
|
|
479
|
+
const shouldDestroyPreviousSdk = Boolean(previousSdk);
|
|
392
480
|
const nextSdk = createNexusClient({
|
|
393
481
|
network: stableConfig.network,
|
|
394
482
|
debug: stableConfig.debug,
|
|
395
483
|
});
|
|
396
484
|
await nextSdk.initialize();
|
|
397
485
|
await nextSdk.setEVMProvider(provider);
|
|
486
|
+
if (shouldDestroyPreviousSdk &&
|
|
487
|
+
previousSdk &&
|
|
488
|
+
previousSdk !== nextSdk) {
|
|
489
|
+
previousSdk.destroy();
|
|
490
|
+
}
|
|
398
491
|
sdkRef.current = nextSdk;
|
|
399
492
|
setSdk(nextSdk);
|
|
400
493
|
initializedRef.current = true;
|
|
494
|
+
initializedAccountAddress.current =
|
|
495
|
+
normalizeAccountAddress(accountAddress);
|
|
401
496
|
setNexusSDK(nextSdk);
|
|
402
497
|
}
|
|
403
498
|
catch (error) {
|
|
@@ -415,7 +510,12 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
415
510
|
return Promise.resolve();
|
|
416
511
|
}
|
|
417
512
|
activeSdk.destroy();
|
|
513
|
+
if (sdkRef.current === activeSdk) {
|
|
514
|
+
sdkRef.current = null;
|
|
515
|
+
}
|
|
418
516
|
initializedRef.current = false;
|
|
517
|
+
initializedAccountAddress.current = null;
|
|
518
|
+
setSdk(null);
|
|
419
519
|
setNexusSDK(null);
|
|
420
520
|
setBridgableBalance(null);
|
|
421
521
|
swapBalanceRef.current = null;
|
|
@@ -423,7 +523,12 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
423
523
|
intent.current = null;
|
|
424
524
|
swapIntent.current = null;
|
|
425
525
|
allowance.current = null;
|
|
526
|
+
const invalidatedRunId = balanceFetchRunId.current + 1;
|
|
527
|
+
balanceFetchRunId.current = invalidatedRunId;
|
|
528
|
+
latestBalanceFetchRunId.current = invalidatedRunId;
|
|
426
529
|
setLoading(false);
|
|
530
|
+
setBridgableBalanceLoading(false);
|
|
531
|
+
setSwapBalanceLoading(false);
|
|
427
532
|
}
|
|
428
533
|
catch (error) {
|
|
429
534
|
console.error("Error deinitializing Nexus:", error);
|
|
@@ -433,15 +538,39 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
433
538
|
const attachEventHooks = useCallback(() => {
|
|
434
539
|
// Dummy signature for backward compatibility, hooks are now per-call
|
|
435
540
|
}, []);
|
|
436
|
-
const handleInit = useCallback(async (provider) => {
|
|
437
|
-
|
|
541
|
+
const handleInit = useCallback(async (provider, accountAddress) => {
|
|
542
|
+
const nextAccountAddress = normalizeAccountAddress(accountAddress);
|
|
543
|
+
const currentAccountAddress = initializedAccountAddress.current;
|
|
544
|
+
const isAccountChange = Boolean(currentAccountAddress && nextAccountAddress) &&
|
|
545
|
+
currentAccountAddress !== nextAccountAddress;
|
|
546
|
+
if (initializedRef.current &&
|
|
547
|
+
(!nextAccountAddress || currentAccountAddress === nextAccountAddress)) {
|
|
438
548
|
return;
|
|
439
549
|
}
|
|
550
|
+
if (loading && initRequest.current) {
|
|
551
|
+
await initRequest.current;
|
|
552
|
+
if (initializedRef.current &&
|
|
553
|
+
(!nextAccountAddress ||
|
|
554
|
+
initializedAccountAddress.current === nextAccountAddress)) {
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
440
558
|
if (!provider || typeof provider.request !== "function") {
|
|
441
559
|
throw new Error("Invalid EIP-1193 provider");
|
|
442
560
|
}
|
|
443
561
|
const nextInitRequest = (async () => {
|
|
444
|
-
|
|
562
|
+
if (initializedRef.current) {
|
|
563
|
+
if (isAccountChange) {
|
|
564
|
+
console.log("[NexusProvider] wallet address changed; reinitializing Nexus", {
|
|
565
|
+
previousWalletAddress: currentAccountAddress,
|
|
566
|
+
nextWalletAddress: nextAccountAddress,
|
|
567
|
+
dateNow: Date.now(),
|
|
568
|
+
date: new Date(),
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
await deinitializeNexus();
|
|
572
|
+
}
|
|
573
|
+
await initializeNexus(provider, nextAccountAddress ?? undefined);
|
|
445
574
|
await setupNexus();
|
|
446
575
|
attachEventHooks();
|
|
447
576
|
})();
|
|
@@ -458,33 +587,65 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
458
587
|
initRequest.current = null;
|
|
459
588
|
}
|
|
460
589
|
}
|
|
461
|
-
}, [
|
|
590
|
+
}, [
|
|
591
|
+
loading,
|
|
592
|
+
initializeNexus,
|
|
593
|
+
deinitializeNexus,
|
|
594
|
+
setupNexus,
|
|
595
|
+
attachEventHooks,
|
|
596
|
+
]);
|
|
462
597
|
const fetchBridgableBalance = useCallback(async () => {
|
|
463
598
|
let request = bridgableBalanceRequest.current;
|
|
599
|
+
let balanceTiming = null;
|
|
600
|
+
let balanceTimingStatus = "resolved";
|
|
464
601
|
try {
|
|
465
602
|
const activeSdk = sdkRef.current;
|
|
466
603
|
if (!activeSdk) {
|
|
467
604
|
return;
|
|
468
605
|
}
|
|
606
|
+
const activeAccountAddress = initializedAccountAddress.current;
|
|
607
|
+
balanceTiming = startBalanceFetchTiming("bridge-refresh");
|
|
608
|
+
setBridgableBalanceLoading(true);
|
|
469
609
|
const updatedBalance = await activeSdk.getBalancesForBridge();
|
|
610
|
+
if (sdkRef.current !== activeSdk ||
|
|
611
|
+
initializedAccountAddress.current !== activeAccountAddress) {
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
470
614
|
setBridgableBalance(normalizeUserAssetFiatValues(updatedBalance));
|
|
471
615
|
}
|
|
472
616
|
catch (error) {
|
|
617
|
+
balanceTimingStatus = "failed";
|
|
473
618
|
console.error("Error fetching bridgable balance:", error);
|
|
474
619
|
}
|
|
475
620
|
finally {
|
|
621
|
+
if (balanceTiming) {
|
|
622
|
+
finishBalanceFetchTiming(balanceTiming, balanceTimingStatus);
|
|
623
|
+
}
|
|
624
|
+
setBridgableBalanceLoading(false);
|
|
476
625
|
if (request && bridgableBalanceRequest.current === request) {
|
|
477
626
|
bridgableBalanceRequest.current = null;
|
|
478
627
|
}
|
|
479
628
|
}
|
|
480
|
-
}, [
|
|
629
|
+
}, [
|
|
630
|
+
finishBalanceFetchTiming,
|
|
631
|
+
normalizeUserAssetFiatValues,
|
|
632
|
+
startBalanceFetchTiming,
|
|
633
|
+
]);
|
|
481
634
|
const fetchSwapBalance = useCallback(async () => {
|
|
635
|
+
const activeSdk = sdkRef.current;
|
|
636
|
+
if (!activeSdk) {
|
|
637
|
+
return null;
|
|
638
|
+
}
|
|
639
|
+
const activeAccountAddress = initializedAccountAddress.current;
|
|
640
|
+
const balanceTiming = startBalanceFetchTiming("swap-refresh");
|
|
641
|
+
let balanceTimingStatus = "resolved";
|
|
482
642
|
try {
|
|
483
|
-
|
|
484
|
-
|
|
643
|
+
setSwapBalanceLoading(true);
|
|
644
|
+
const updatedBalance = await activeSdk.getBalancesForSwap();
|
|
645
|
+
if (sdkRef.current !== activeSdk ||
|
|
646
|
+
initializedAccountAddress.current !== activeAccountAddress) {
|
|
485
647
|
return null;
|
|
486
648
|
}
|
|
487
|
-
const updatedBalance = await activeSdk.getBalancesForSwap();
|
|
488
649
|
const filteredSwapBalance = filterUnsupportedSwapSources(updatedBalance, swapSupportedChainsAndTokens.current);
|
|
489
650
|
const normalizedSwapBalance = normalizeUserAssetFiatValues(filteredSwapBalance);
|
|
490
651
|
console.log("[NexusProvider] getBalancesForSwap:refresh raw", updatedBalance);
|
|
@@ -492,10 +653,22 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
492
653
|
return normalizedSwapBalance;
|
|
493
654
|
}
|
|
494
655
|
catch (error) {
|
|
656
|
+
balanceTimingStatus = "failed";
|
|
495
657
|
console.error("Error fetching swap balance:", error);
|
|
496
658
|
return null;
|
|
497
659
|
}
|
|
498
|
-
|
|
660
|
+
finally {
|
|
661
|
+
finishBalanceFetchTiming(balanceTiming, balanceTimingStatus);
|
|
662
|
+
if (sdkRef.current === activeSdk &&
|
|
663
|
+
initializedAccountAddress.current === activeAccountAddress) {
|
|
664
|
+
setSwapBalanceLoading(false);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}, [
|
|
668
|
+
finishBalanceFetchTiming,
|
|
669
|
+
normalizeUserAssetFiatValues,
|
|
670
|
+
startBalanceFetchTiming,
|
|
671
|
+
]);
|
|
499
672
|
const getFiatValue = useCallback((amount, token) => {
|
|
500
673
|
const rate = getUsdRateFromLocalSources(token);
|
|
501
674
|
const normalized = normalizeTokenSymbol(token);
|
|
@@ -529,7 +702,9 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
529
702
|
supportedChainsAndTokens: supportedChainsAndTokensState,
|
|
530
703
|
swapSupportedChainsAndTokens: swapSupportedChainsAndTokensState,
|
|
531
704
|
bridgableBalance,
|
|
705
|
+
bridgableBalanceLoading,
|
|
532
706
|
swapBalance,
|
|
707
|
+
swapBalanceLoading,
|
|
533
708
|
network: config?.network,
|
|
534
709
|
loading,
|
|
535
710
|
fetchBridgableBalance,
|
|
@@ -547,7 +722,9 @@ const NexusProvider = ({ children, config = defaultConfig, }) => {
|
|
|
547
722
|
attachEventHooks,
|
|
548
723
|
handleInit,
|
|
549
724
|
bridgableBalance,
|
|
725
|
+
bridgableBalanceLoading,
|
|
550
726
|
swapBalance,
|
|
727
|
+
swapBalanceLoading,
|
|
551
728
|
stableConfig.network,
|
|
552
729
|
loading,
|
|
553
730
|
fetchBridgableBalance,
|
|
@@ -5,6 +5,7 @@ interface DepositIdleFormProps {
|
|
|
5
5
|
calculatingPercent?: number | null;
|
|
6
6
|
fromTokens: SwapTokenOption[];
|
|
7
7
|
isAmountReadOnly?: boolean;
|
|
8
|
+
isBalanceLoading?: boolean;
|
|
8
9
|
isCalculatingMax?: boolean;
|
|
9
10
|
isQuoteRefreshing?: boolean;
|
|
10
11
|
isSourcePickerDisabled?: boolean;
|
|
@@ -24,6 +25,6 @@ interface DepositIdleFormProps {
|
|
|
24
25
|
totalBalance: string;
|
|
25
26
|
usdValue: string;
|
|
26
27
|
}
|
|
27
|
-
export declare function DepositIdleForm({ amount, amountMode, onAmountChange, onAmountModeToggle, toToken, totalBalance, usdValue, tokenValue, fromTokens, onOpenSourcePicker, onSetPercent, routeStatus, routeMessage, isAmountReadOnly, isCalculatingMax, calculatingPercent, isQuoteRefreshing, hideDestinationTokenDropdownIcon, showAutoBadge, isSourcePickerDisabled, isTokenPickerDisabled, onOpenTokenPicker, reserveSourceRows, }: DepositIdleFormProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function DepositIdleForm({ amount, amountMode, onAmountChange, onAmountModeToggle, toToken, totalBalance, usdValue, tokenValue, fromTokens, onOpenSourcePicker, onSetPercent, routeStatus, routeMessage, isAmountReadOnly, isBalanceLoading, isCalculatingMax, calculatingPercent, isQuoteRefreshing, hideDestinationTokenDropdownIcon, showAutoBadge, isSourcePickerDisabled, isTokenPickerDisabled, onOpenTokenPicker, reserveSourceRows, }: DepositIdleFormProps): import("react/jsx-runtime").JSX.Element;
|
|
28
29
|
export {};
|
|
29
30
|
//# sourceMappingURL=deposit-idle-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deposit-idle-form.d.ts","sourceRoot":"","sources":["../../../.build-src/nexus-widget/components/deposit-idle-form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,GAAG,KAAK,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"deposit-idle-form.d.ts","sourceRoot":"","sources":["../../../.build-src/nexus-widget/components/deposit-idle-form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,GAAG,KAAK,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkiBD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAwB,EACxB,gBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gCAAwC,EACxC,aAAoB,EACpB,sBAA8B,EAC9B,qBAA6B,EAC7B,iBAAiB,EACjB,iBAAyB,GAC1B,EAAE,oBAAoB,2CAmYtB"}
|
|
@@ -106,6 +106,11 @@ function SourceLogoPair({ token }) {
|
|
|
106
106
|
} }))] }));
|
|
107
107
|
}
|
|
108
108
|
function ExactOutPercentButtons({ visible, onSelect, }) {
|
|
109
|
+
const [focusedPercent, setFocusedPercent] = useState(null);
|
|
110
|
+
React.useEffect(() => {
|
|
111
|
+
if (!visible)
|
|
112
|
+
setFocusedPercent(null);
|
|
113
|
+
}, [visible]);
|
|
109
114
|
return (_jsx("div", { style: {
|
|
110
115
|
alignItems: "center",
|
|
111
116
|
boxSizing: "border-box",
|
|
@@ -117,18 +122,17 @@ function ExactOutPercentButtons({ visible, onSelect, }) {
|
|
|
117
122
|
width: "100%",
|
|
118
123
|
}, children: [25, 50, 75, 100].map((pct) => {
|
|
119
124
|
const isMax = pct === 100;
|
|
125
|
+
const isFocused = focusedPercent === pct;
|
|
120
126
|
return (_jsx("button", { onClick: (e) => {
|
|
121
127
|
e.stopPropagation();
|
|
122
128
|
onSelect(pct);
|
|
123
|
-
},
|
|
124
|
-
e.preventDefault();
|
|
125
|
-
}, style: {
|
|
129
|
+
}, onBlur: () => setFocusedPercent(null), onFocus: () => setFocusedPercent(pct), style: {
|
|
126
130
|
alignItems: "center",
|
|
127
|
-
backgroundColor:
|
|
131
|
+
backgroundColor: isFocused ? "#E8F0FF" : "#F4F4F3",
|
|
128
132
|
border: "none",
|
|
129
133
|
borderRadius: "8px",
|
|
130
134
|
boxSizing: "border-box",
|
|
131
|
-
color:
|
|
135
|
+
color: isFocused ? brand : "#363635",
|
|
132
136
|
cursor: "pointer",
|
|
133
137
|
display: "flex",
|
|
134
138
|
flex: "1 1 0%",
|
|
@@ -140,7 +144,7 @@ function ExactOutPercentButtons({ visible, onSelect, }) {
|
|
|
140
144
|
minWidth: 0,
|
|
141
145
|
paddingBlock: "5px",
|
|
142
146
|
paddingInline: "10px",
|
|
143
|
-
},
|
|
147
|
+
}, type: "button", children: isMax ? "MAX" : `${pct}%` }, pct));
|
|
144
148
|
}) }));
|
|
145
149
|
}
|
|
146
150
|
function SkeletonRow() {
|
|
@@ -302,7 +306,19 @@ function PayWithSources({ fromTokens, onOpenSourcePicker, routeStatus, routeMess
|
|
|
302
306
|
lineHeight: "20px",
|
|
303
307
|
}, children: [_jsx(AlertCircle, { style: { flexShrink: 0, height: 15, width: 15 } }), routeMessage] }))] }));
|
|
304
308
|
}
|
|
305
|
-
|
|
309
|
+
function BalanceSkeleton({ height = "16px", width = "72px", }) {
|
|
310
|
+
return (_jsx("span", { "aria-hidden": "true", className: "animate-pulse", style: {
|
|
311
|
+
background: "linear-gradient(90deg, #F0F0EF 0%, #E6EEFF 48%, #F0F0EF 100%)",
|
|
312
|
+
backgroundSize: "200% 100%",
|
|
313
|
+
borderRadius: "6px",
|
|
314
|
+
display: "inline-block",
|
|
315
|
+
flexShrink: 0,
|
|
316
|
+
height,
|
|
317
|
+
maxWidth: "100%",
|
|
318
|
+
width,
|
|
319
|
+
} }));
|
|
320
|
+
}
|
|
321
|
+
export function DepositIdleForm({ amount, amountMode, onAmountChange, onAmountModeToggle, toToken, totalBalance, usdValue, tokenValue, fromTokens, onOpenSourcePicker, onSetPercent, routeStatus, routeMessage, isAmountReadOnly = false, isBalanceLoading = false, isCalculatingMax, calculatingPercent, isQuoteRefreshing, hideDestinationTokenDropdownIcon = false, showAutoBadge = true, isSourcePickerDisabled = false, isTokenPickerDisabled = false, onOpenTokenPicker, reserveSourceRows = false, }) {
|
|
306
322
|
const [pendingPercent, setPendingPercent] = useState(null);
|
|
307
323
|
const [isAmountFocused, setIsAmountFocused] = useState(false);
|
|
308
324
|
React.useEffect(() => {
|
|
@@ -367,13 +383,13 @@ export function DepositIdleForm({ amount, amountMode, onAmountChange, onAmountMo
|
|
|
367
383
|
fontFamily: uiFont,
|
|
368
384
|
fontSize: "14px",
|
|
369
385
|
lineHeight: "20px",
|
|
370
|
-
}, children: "Total Balance:" }),
|
|
386
|
+
}, children: "Total Balance:" }), _jsx("span", { style: {
|
|
371
387
|
color: primary,
|
|
372
388
|
fontFamily: uiFont,
|
|
373
389
|
fontSize: "14px",
|
|
374
390
|
fontWeight: 600,
|
|
375
391
|
lineHeight: "20px",
|
|
376
|
-
}, children:
|
|
392
|
+
}, children: isBalanceLoading ? (_jsx(BalanceSkeleton, { width: "64px" })) : (`$${totalBalance}`) })] })] }), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "10px" }, children: [_jsxs("div", { style: {
|
|
377
393
|
alignItems: "center",
|
|
378
394
|
display: "flex",
|
|
379
395
|
gap: "12px",
|
|
@@ -502,5 +518,5 @@ export function DepositIdleForm({ amount, amountMode, onAmountChange, onAmountMo
|
|
|
502
518
|
fontWeight: 500,
|
|
503
519
|
lineHeight: "20px",
|
|
504
520
|
whiteSpace: "nowrap",
|
|
505
|
-
}, children: destinationBalanceLabel })] })] }), _jsx(ExactOutPercentButtons, { onSelect: handlePercentSelect, visible: Boolean(toToken) && !isAmountReadOnly })] })] }), _jsx(SharedPayWithSources, { fromTokens: fromTokens, isSourcePickerDisabled: isSourcePickerDisabled, onOpenSourcePicker: onOpenSourcePicker, reserveSourceRows: reserveSourceRows, routeMessage: routeMessage, routeStatus: routeStatus, showAutoBadge: showAutoBadge })] }));
|
|
521
|
+
}, children: isBalanceLoading ? (_jsx(BalanceSkeleton, { width: "110px" })) : (destinationBalanceLabel) })] })] }), _jsx(ExactOutPercentButtons, { onSelect: handlePercentSelect, visible: Boolean(toToken) && !isAmountReadOnly })] })] }), _jsx(SharedPayWithSources, { fromTokens: fromTokens, isSourcePickerDisabled: isSourcePickerDisabled, onOpenSourcePicker: onOpenSourcePicker, reserveSourceRows: reserveSourceRows, routeMessage: routeMessage, routeStatus: routeStatus, showAutoBadge: showAutoBadge })] }));
|
|
506
522
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexus-widget-progress-screen.d.ts","sourceRoot":"","sources":["../../../.build-src/nexus-widget/components/nexus-widget-progress-screen.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACb,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,KAAK,qCAAqC,EAC1C,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC;AAErD,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF,UAAU,8BAA8B;IACtC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,CAAC,EAAE,qCAAqC,CAAC;IACpD,cAAc,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"nexus-widget-progress-screen.d.ts","sourceRoot":"","sources":["../../../.build-src/nexus-widget/components/nexus-widget-progress-screen.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACb,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,KAAK,qCAAqC,EAC1C,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC;AAErD,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF,UAAU,8BAA8B;IACtC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,CAAC,EAAE,qCAAqC,CAAC;IACpD,cAAc,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6vBD,wBAAgB,yBAAyB,CAAC,EACxC,UAAe,EACf,OAAO,EACP,aAAa,EACb,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,IAAI,EACJ,WAAW,EACX,KAAK,EACL,cAAmB,EACnB,UAAU,EACV,gBAAgB,GACjB,EAAE,8BAA8B,2CAwbhC"}
|