@n1xyz/wallet-widget 0.0.28 → 0.0.30
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/README.md +89 -11
- package/dist/Logic/sessionManager.js +8 -8
- package/dist/Logic/sessionManager.js.map +1 -1
- package/dist/Logic/transactionManager.d.ts +0 -22
- package/dist/Logic/transactionManager.js +0 -189
- package/dist/Logic/transactionManager.js.map +1 -1
- package/dist/Logic/utils.d.ts +3 -7
- package/dist/Logic/utils.js +3 -186
- package/dist/Logic/utils.js.map +1 -1
- package/dist/Modal/LoadingFallback.js +1 -1
- package/dist/Modal/LoadingFallback.js.map +1 -1
- package/dist/Modal/N1WalletModal.d.ts +1 -1
- package/dist/Modal/N1WalletModal.js +50 -205
- package/dist/Modal/N1WalletModal.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateSessionView.d.ts +1 -1
- package/dist/Modal/NordFlow/NordFlow.js +44 -17
- package/dist/Modal/NordFlow/NordFlow.js.map +1 -1
- package/dist/Modal/NordFlow/components/ChainButton.d.ts +5 -2
- package/dist/Modal/NordFlow/components/ChainButton.js +16 -13
- package/dist/Modal/NordFlow/components/ChainButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/EVMChainsButton.d.ts +2 -1
- package/dist/Modal/NordFlow/components/EVMChainsButton.js +11 -9
- package/dist/Modal/NordFlow/components/EVMChainsButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/Header.d.ts +3 -1
- package/dist/Modal/NordFlow/components/Header.js +38 -4
- package/dist/Modal/NordFlow/components/Header.js.map +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js.map +1 -1
- package/dist/Modal/NordFlow/components/MoreButton.d.ts +1 -1
- package/dist/Modal/NordFlow/components/MoreButton.js +4 -4
- package/dist/Modal/NordFlow/components/MoreButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/TransactionTable.d.ts +1 -1
- package/dist/Modal/NordFlow/components/TransactionTable.js +11 -11
- package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.d.ts +3 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.js +14 -3
- package/dist/Modal/NordFlow/components/WaitingMessage.js.map +1 -1
- package/dist/Modal/NordFlow/components/index.d.ts +0 -1
- package/dist/Modal/NordFlow/components/index.js +0 -1
- package/dist/Modal/NordFlow/components/index.js.map +1 -1
- package/dist/Modal/NordFlow/constants.js +12 -48
- package/dist/Modal/NordFlow/constants.js.map +1 -1
- package/dist/Modal/NordFlow/context/DepositContext.js +112 -41
- package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -1
- package/dist/Modal/NordFlow/context/FlowContext.d.ts +1 -0
- package/dist/Modal/NordFlow/context/FlowContext.js +99 -6
- package/dist/Modal/NordFlow/context/FlowContext.js.map +1 -1
- package/dist/Modal/NordFlow/context/WalletConnectContext.js +76 -20
- package/dist/Modal/NordFlow/context/WalletConnectContext.js.map +1 -1
- package/dist/Modal/NordFlow/hoc/withImageFallback.js.map +1 -1
- package/dist/Modal/NordFlow/hooks/useTestnetFaucet.d.ts +18 -0
- package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js +181 -0
- package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js.map +1 -0
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.d.ts +1 -1
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js +10 -15
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.d.ts +1 -0
- package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js +115 -0
- package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/03-AmountInputScreen.d.ts +4 -0
- package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js +298 -0
- package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.d.ts +1 -0
- package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js +29 -0
- package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.d.ts +1 -0
- package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js +131 -0
- package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.d.ts +1 -0
- package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js +37 -0
- package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/07-FinalSuccessScreen.d.ts +5 -0
- package/dist/Modal/NordFlow/screens/07-FinalSuccessScreen.js +39 -0
- package/dist/Modal/NordFlow/screens/07-FinalSuccessScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/08-ErrorScreen.d.ts +1 -0
- package/dist/Modal/NordFlow/screens/08-ErrorScreen.js +68 -0
- package/dist/Modal/NordFlow/screens/08-ErrorScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/index.d.ts +5 -9
- package/dist/Modal/NordFlow/screens/index.js +5 -9
- package/dist/Modal/NordFlow/screens/index.js.map +1 -1
- package/dist/Modal/NordFlow/types.d.ts +13 -3
- package/dist/Modal/NordFlow/types.js +4 -3
- package/dist/Modal/NordFlow/types.js.map +1 -1
- package/dist/Modal/NordFlow/utils/depositStorage.d.ts +4 -0
- package/dist/Modal/NordFlow/utils/depositStorage.js +48 -0
- package/dist/Modal/NordFlow/utils/depositStorage.js.map +1 -0
- package/dist/Modal/NordFlow/utils/nordUtils.d.ts +1 -1
- package/dist/Modal/NordFlow/utils/nordUtils.js +1 -1
- package/dist/Modal/NordFlow/utils/nordUtils.js.map +1 -1
- package/dist/Provider/LazyWalletProvider.d.ts +1 -1
- package/dist/Provider/LazyWalletProvider.js +38 -38
- package/dist/Provider/LazyWalletProvider.js.map +1 -1
- package/dist/Provider/N1WalletProvider.d.ts +2 -1
- package/dist/Provider/N1WalletProvider.js +85 -82
- package/dist/Provider/N1WalletProvider.js.map +1 -1
- package/dist/Provider/ShadowRootWrapper.d.ts +1 -1
- package/dist/Provider/WalletErrorBoundary.d.ts +9 -2
- package/dist/Provider/WalletErrorBoundary.js +19 -1
- package/dist/Provider/WalletErrorBoundary.js.map +1 -1
- package/dist/Provider/hooks/useNordUserInitialization.js +87 -35
- package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/Provider/icons/CoinbaseWalletIcon.d.ts +1 -1
- package/dist/Provider/icons/ConnectionDotsSVG.d.ts +1 -1
- package/dist/Provider/icons/MetamaskIcon.d.ts +1 -1
- package/dist/Provider/icons/PhantomIcon.d.ts +1 -1
- package/dist/Provider/icons/UserIcon.d.ts +1 -1
- package/dist/Provider/icons/WalletConnectIcon.d.ts +1 -1
- package/dist/Provider/types.d.ts +18 -16
- package/dist/Provider/types.js +8 -2
- package/dist/Provider/types.js.map +1 -1
- package/dist/WidgetButton/N1ConnectButton.d.ts +1 -1
- package/dist/WidgetButton/N1ConnectButton.js +29 -10
- package/dist/WidgetButton/N1ConnectButton.js.map +1 -1
- package/dist/animations/N1Loader.d.ts +11 -0
- package/dist/animations/N1Loader.js +42 -0
- package/dist/animations/N1Loader.js.map +1 -0
- package/dist/animations/N1Loader.json +1 -0
- package/dist/animations/Processing.d.ts +11 -0
- package/dist/animations/Processing.js +42 -0
- package/dist/animations/Processing.js.map +1 -0
- package/dist/animations/Processing.json +1 -0
- package/dist/components/Logo.d.ts +2 -1
- package/dist/components/Logo.js +5 -2
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/QRCodeLoader.d.ts +1 -1
- package/dist/components/QRCodeLoader.js +1 -1
- package/dist/components/QRCodeLoader.js.map +1 -1
- package/dist/components/logos/EVMChainsGroup.js +1 -1
- package/dist/components/logos/EVMChainsGroup.js.map +1 -1
- package/dist/components/logos/MoreChainsGroup.js +1 -1
- package/dist/components/logos/MoreChainsGroup.js.map +1 -1
- package/dist/components/logos/index.d.ts +0 -2
- package/dist/components/logos/index.js +0 -2
- package/dist/components/logos/index.js.map +1 -1
- package/dist/config/solana.d.ts +3 -15
- package/dist/config/solana.js +6 -29
- package/dist/config/solana.js.map +1 -1
- package/dist/embedded-main-css.d.ts +1 -1
- package/dist/embedded-main-css.js +1 -1
- package/dist/embedded-main-css.js.map +1 -1
- package/dist/fonts/apk-galeria/APK-Galeria-Bold-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Bold-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Extra-Bold-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Extra-Bold-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Light-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Light-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Medium-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Medium-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Regular-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Regular-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Semi-Bold-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Semi-Bold-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Thin-Italic-Trial.otf +0 -0
- package/dist/fonts/apk-galeria/APK-Galeria-Thin-Trial.otf +0 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.css +2 -2
- package/dist/polyfills/windowEthereumGuard.d.ts +6 -0
- package/dist/polyfills/windowEthereumGuard.js +28 -0
- package/dist/polyfills/windowEthereumGuard.js.map +1 -0
- package/dist/utils/dynamicNord.d.ts +2 -0
- package/dist/utils/dynamicNord.js +59 -0
- package/dist/utils/dynamicNord.js.map +1 -0
- package/dist/utils/ed25519.d.ts +8 -0
- package/dist/utils/ed25519.js +87 -0
- package/dist/utils/ed25519.js.map +1 -0
- package/package.json +26 -11
- package/dist/utils/dynamicImports.d.ts +0 -25
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
38
|
+
import { useN1WalletContext, useN1WalletInternalContext, } from '../../../Provider/hooks';
|
|
39
|
+
import { useFlowStateContext } from '../context/FlowContext';
|
|
40
|
+
import { logger } from '../../../utils/logger';
|
|
41
|
+
/**
|
|
42
|
+
* Centralizes the faucet orchestration logic so it can be toggled from the widget entry point.
|
|
43
|
+
*/
|
|
44
|
+
export function useTestnetFaucet(_a) {
|
|
45
|
+
var _this = this;
|
|
46
|
+
var enabled = _a.enabled, balance = _a.balance, minDeposit = _a.minDeposit, onBalanceRefresh = _a.onBalanceRefresh;
|
|
47
|
+
var address = useN1WalletContext().address;
|
|
48
|
+
var faucetUrl = useN1WalletInternalContext().faucetUrl;
|
|
49
|
+
var context = useFlowStateContext().context;
|
|
50
|
+
var faucetFiredRef = useRef(false);
|
|
51
|
+
var prevBalanceRef = useRef(balance);
|
|
52
|
+
var _b = useState(false), isFaucetLoading = _b[0], setIsFaucetLoading = _b[1];
|
|
53
|
+
var _c = useState(null), faucetError = _c[0], setFaucetError = _c[1];
|
|
54
|
+
var _d = useState(false), tokensObtained = _d[0], setTokensObtained = _d[1];
|
|
55
|
+
var _e = useState(false), showFaucetSuccess = _e[0], setShowFaucetSuccess = _e[1];
|
|
56
|
+
var refreshBalance = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
57
|
+
var error_1;
|
|
58
|
+
return __generator(this, function (_a) {
|
|
59
|
+
switch (_a.label) {
|
|
60
|
+
case 0:
|
|
61
|
+
if (!onBalanceRefresh) {
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
}
|
|
64
|
+
_a.label = 1;
|
|
65
|
+
case 1:
|
|
66
|
+
_a.trys.push([1, 3, , 4]);
|
|
67
|
+
return [4 /*yield*/, onBalanceRefresh()];
|
|
68
|
+
case 2:
|
|
69
|
+
_a.sent();
|
|
70
|
+
return [3 /*break*/, 4];
|
|
71
|
+
case 3:
|
|
72
|
+
error_1 = _a.sent();
|
|
73
|
+
logger.warn('Failed to refresh balance after faucet request', error_1);
|
|
74
|
+
return [3 /*break*/, 4];
|
|
75
|
+
case 4: return [2 /*return*/];
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}); }, [onBalanceRefresh]);
|
|
79
|
+
var shouldShowFaucet = useMemo(function () {
|
|
80
|
+
return enabled && Boolean(faucetUrl) && !tokensObtained;
|
|
81
|
+
}, [enabled, faucetUrl, tokensObtained]);
|
|
82
|
+
var showFaucetOverlay = useMemo(function () {
|
|
83
|
+
if (!shouldShowFaucet) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return ((isFaucetLoading || faucetError !== null) ||
|
|
87
|
+
showFaucetSuccess);
|
|
88
|
+
}, [shouldShowFaucet, isFaucetLoading, faucetError, showFaucetSuccess]);
|
|
89
|
+
var requestTestnetTokens = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
90
|
+
var response, errorData, error_2;
|
|
91
|
+
return __generator(this, function (_a) {
|
|
92
|
+
switch (_a.label) {
|
|
93
|
+
case 0:
|
|
94
|
+
if (!shouldShowFaucet || !address || !faucetUrl)
|
|
95
|
+
return [2 /*return*/];
|
|
96
|
+
if (faucetFiredRef.current)
|
|
97
|
+
return [2 /*return*/];
|
|
98
|
+
faucetFiredRef.current = true;
|
|
99
|
+
_a.label = 1;
|
|
100
|
+
case 1:
|
|
101
|
+
_a.trys.push([1, 7, 8, 9]);
|
|
102
|
+
setIsFaucetLoading(true);
|
|
103
|
+
setFaucetError(null);
|
|
104
|
+
setShowFaucetSuccess(false);
|
|
105
|
+
return [4 /*yield*/, fetch(faucetUrl, {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: {
|
|
108
|
+
'Content-Type': 'application/json',
|
|
109
|
+
},
|
|
110
|
+
body: JSON.stringify({ address: address }),
|
|
111
|
+
})];
|
|
112
|
+
case 2:
|
|
113
|
+
response = _a.sent();
|
|
114
|
+
if (!!response.ok) return [3 /*break*/, 4];
|
|
115
|
+
return [4 /*yield*/, response
|
|
116
|
+
.json()
|
|
117
|
+
.catch(function () { return ({ error: 'Failed to request tokens' }); })];
|
|
118
|
+
case 3:
|
|
119
|
+
errorData = _a.sent();
|
|
120
|
+
throw new Error(errorData.error || 'Failed to request tokens');
|
|
121
|
+
case 4: return [4 /*yield*/, response.json().catch(function () { return ({}); })];
|
|
122
|
+
case 5:
|
|
123
|
+
_a.sent();
|
|
124
|
+
setTokensObtained(true);
|
|
125
|
+
setShowFaucetSuccess(true);
|
|
126
|
+
return [4 /*yield*/, refreshBalance()];
|
|
127
|
+
case 6:
|
|
128
|
+
_a.sent();
|
|
129
|
+
setShowFaucetSuccess(false);
|
|
130
|
+
return [3 /*break*/, 9];
|
|
131
|
+
case 7:
|
|
132
|
+
error_2 = _a.sent();
|
|
133
|
+
console.error('Faucet error:', error_2);
|
|
134
|
+
setFaucetError(error_2 instanceof Error ? error_2.message : 'Failed to request tokens');
|
|
135
|
+
faucetFiredRef.current = false;
|
|
136
|
+
return [3 /*break*/, 9];
|
|
137
|
+
case 8:
|
|
138
|
+
setIsFaucetLoading(false);
|
|
139
|
+
return [7 /*endfinally*/];
|
|
140
|
+
case 9: return [2 /*return*/];
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}); }, [shouldShowFaucet, address, faucetUrl, refreshBalance]);
|
|
144
|
+
useEffect(function () {
|
|
145
|
+
if (!shouldShowFaucet ||
|
|
146
|
+
isFaucetLoading ||
|
|
147
|
+
faucetError ||
|
|
148
|
+
showFaucetSuccess ||
|
|
149
|
+
context.depositError != null ||
|
|
150
|
+
faucetFiredRef.current) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
requestTestnetTokens();
|
|
154
|
+
}, [
|
|
155
|
+
shouldShowFaucet,
|
|
156
|
+
isFaucetLoading,
|
|
157
|
+
faucetError,
|
|
158
|
+
showFaucetSuccess,
|
|
159
|
+
context.depositError,
|
|
160
|
+
requestTestnetTokens,
|
|
161
|
+
]);
|
|
162
|
+
useEffect(function () {
|
|
163
|
+
if (balance > prevBalanceRef.current && balance >= minDeposit) {
|
|
164
|
+
setTokensObtained(false);
|
|
165
|
+
setShowFaucetSuccess(false);
|
|
166
|
+
}
|
|
167
|
+
else if (balance < minDeposit / 2) {
|
|
168
|
+
faucetFiredRef.current = false;
|
|
169
|
+
setTokensObtained(false);
|
|
170
|
+
}
|
|
171
|
+
prevBalanceRef.current = balance;
|
|
172
|
+
}, [balance, minDeposit]);
|
|
173
|
+
return {
|
|
174
|
+
isFaucetLoading: isFaucetLoading,
|
|
175
|
+
faucetError: faucetError,
|
|
176
|
+
showFaucetSuccess: showFaucetSuccess,
|
|
177
|
+
showFaucetOverlay: showFaucetOverlay,
|
|
178
|
+
requestTestnetTokens: requestTestnetTokens,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=useTestnetFaucet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTestnetFaucet.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useTestnetFaucet.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { useFlowStateContext } from '../context/FlowContext';\nimport { logger } from '../../../utils/logger';\n\ninterface UseTestnetFaucetParams {\n enabled: boolean;\n balance: number;\n minDeposit: number;\n onBalanceRefresh?: () => Promise<void>;\n}\n\ninterface UseTestnetFaucetResult {\n isFaucetLoading: boolean;\n faucetError: string | null;\n showFaucetSuccess: boolean;\n showFaucetOverlay: boolean;\n requestTestnetTokens: () => Promise<void>;\n}\n\n/**\n * Centralizes the faucet orchestration logic so it can be toggled from the widget entry point.\n */\nexport function useTestnetFaucet({\n enabled,\n balance,\n minDeposit,\n onBalanceRefresh,\n}: UseTestnetFaucetParams): UseTestnetFaucetResult {\n const { address } = useN1WalletContext();\n const { faucetUrl } = useN1WalletInternalContext();\n const { context } = useFlowStateContext();\n\n const faucetFiredRef = useRef(false);\n const prevBalanceRef = useRef(balance);\n\n const [isFaucetLoading, setIsFaucetLoading] = useState(false);\n const [faucetError, setFaucetError] = useState<string | null>(null);\n const [tokensObtained, setTokensObtained] = useState(false);\n const [showFaucetSuccess, setShowFaucetSuccess] = useState(false);\n\n const refreshBalance = useCallback(async () => {\n if (!onBalanceRefresh) {\n return;\n }\n try {\n await onBalanceRefresh();\n } catch (error) {\n logger.warn('Failed to refresh balance after faucet request', error);\n }\n }, [onBalanceRefresh]);\n\n const shouldShowFaucet = useMemo(() => {\n return enabled && Boolean(faucetUrl) && !tokensObtained;\n }, [enabled, faucetUrl, tokensObtained]);\n\n const showFaucetOverlay = useMemo(() => {\n if (!shouldShowFaucet) {\n return false;\n }\n\n return (\n (isFaucetLoading || faucetError !== null) ||\n showFaucetSuccess\n );\n }, [shouldShowFaucet, isFaucetLoading, faucetError, showFaucetSuccess]);\n\n const requestTestnetTokens = useCallback(async () => {\n if (!shouldShowFaucet || !address || !faucetUrl) return;\n if (faucetFiredRef.current) return;\n\n faucetFiredRef.current = true;\n\n try {\n setIsFaucetLoading(true);\n setFaucetError(null);\n setShowFaucetSuccess(false);\n\n const response = await fetch(faucetUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ address }),\n });\n\n if (!response.ok) {\n const errorData = await response\n .json()\n .catch(() => ({ error: 'Failed to request tokens' }));\n throw new Error(errorData.error || 'Failed to request tokens');\n }\n\n await response.json().catch(() => ({}));\n setTokensObtained(true);\n setShowFaucetSuccess(true);\n\n await refreshBalance();\n setShowFaucetSuccess(false);\n } catch (error) {\n console.error('Faucet error:', error);\n setFaucetError(\n error instanceof Error ? error.message : 'Failed to request tokens'\n );\n faucetFiredRef.current = false;\n } finally {\n setIsFaucetLoading(false);\n }\n }, [shouldShowFaucet, address, faucetUrl, refreshBalance]);\n\n useEffect(() => {\n if (\n !shouldShowFaucet ||\n isFaucetLoading ||\n faucetError ||\n showFaucetSuccess ||\n context.depositError != null ||\n faucetFiredRef.current\n ) {\n return;\n }\n\n requestTestnetTokens();\n }, [\n shouldShowFaucet,\n isFaucetLoading,\n faucetError,\n showFaucetSuccess,\n context.depositError,\n requestTestnetTokens,\n ]);\n\n useEffect(() => {\n if (balance > prevBalanceRef.current && balance >= minDeposit) {\n setTokensObtained(false);\n setShowFaucetSuccess(false);\n } else if (balance < minDeposit / 2) {\n faucetFiredRef.current = false;\n setTokensObtained(false);\n }\n\n prevBalanceRef.current = balance;\n }, [balance, minDeposit]);\n\n return {\n isFaucetLoading,\n faucetError,\n showFaucetSuccess,\n showFaucetOverlay,\n requestTestnetTokens,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function ConnectWalletScreen(): JSX.Element;
|
|
1
|
+
export declare function ConnectWalletScreen(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import { useEffect
|
|
3
|
-
// import { IoMdWallet } from 'react-icons/io';
|
|
4
|
-
import { LoadingSquares } from '../components/LoadingSquares';
|
|
5
|
-
import { ANIMATION_EASE } from '../constants';
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from 'react';
|
|
6
3
|
import { useWalletConnectContext } from '../context/WalletConnectContext';
|
|
4
|
+
import { WaitingMessage } from '../components/WaitingMessage';
|
|
7
5
|
export function ConnectWalletScreen() {
|
|
8
6
|
var _a = useWalletConnectContext(), isConnecting = _a.isConnecting, connectWallet = _a.connectWallet;
|
|
9
|
-
var _b = useState(null), isHovered = _b[0], setIsHovered = _b[1];
|
|
10
7
|
useEffect(function () {
|
|
11
8
|
if (!isConnecting) {
|
|
12
9
|
connectWallet();
|
|
13
10
|
}
|
|
14
|
-
}, [isConnecting]);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
transform: isHovered === 'wallet' ? 'scale(0.99)' : 'scale(1)',
|
|
22
|
-
}, children: _jsx("div", { className: "relative z-[200] pl-4 isolate", children: _jsx("div", { className: "flex items-center", children: _jsx("span", { className: "\n ml-2 text-base font-medium tracking-wide transition-colors duration-300 ".concat(ANIMATION_EASE, "\n text-n1-ww-gray-500 dark:text-neutral-400 group-hover:text-n1-ww-gray-900 dark:group-hover:text-white\n "), children: "Continue with Wallet" }) }) }) }), _jsx("button", { disabled: true, onMouseEnter: function () { return setIsHovered('google'); }, onMouseLeave: function () { return setIsHovered(null); }, className: "\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-ww-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ".concat(ANIMATION_EASE, "\n cursor-not-allowed border-n1-ww-gray-200 dark:border-n1-ww-gray-800 opacity-50\n "), children: _jsx("div", { className: "relative z-[200] pl-4 isolate", children: _jsx("div", { className: "flex items-center", children: _jsx("span", { className: "text-base font-medium tracking-wide text-n1-ww-gray-500 dark:text-neutral-400", children: "Continue with Google (soon)" }) }) }) }), _jsx("button", { disabled: true, onMouseEnter: function () { return setIsHovered('email'); }, onMouseLeave: function () { return setIsHovered(null); }, className: "\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-ww-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ".concat(ANIMATION_EASE, "\n cursor-not-allowed border-n1-ww-gray-200 dark:border-n1-ww-gray-800 opacity-50\n "), children: _jsx("div", { className: "relative z-[200] pl-4 isolate", children: _jsx("div", { className: "flex items-center", children: _jsx("span", { className: "text-base font-medium tracking-wide text-n1-ww-gray-500 dark:text-neutral-400", children: "Continue with Email (soon)" }) }) }) })] }) }));
|
|
11
|
+
}, [isConnecting, connectWallet]);
|
|
12
|
+
return (_jsx(WaitingMessage, { loaderSize: 52, message: {
|
|
13
|
+
visible: true,
|
|
14
|
+
title: 'Connecting Wallet',
|
|
15
|
+
subtitle: 'Please approve the connection request in your wallet',
|
|
16
|
+
isTyping: false,
|
|
17
|
+
} }));
|
|
23
18
|
}
|
|
24
19
|
//# sourceMappingURL=01-ConnectWalletScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"01-ConnectWalletScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/01-ConnectWalletScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"01-ConnectWalletScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/01-ConnectWalletScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,UAAU,mBAAmB;IAC3B,IAAA,KAAkC,uBAAuB,EAAE,EAAzD,YAAY,kBAAA,EAAE,aAAa,mBAA8B,CAAC;IAElE,SAAS,CAAC;QACR,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAElC,OAAO,CACL,KAAC,cAAc,IACb,UAAU,EAAE,EAAE,EACd,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,mBAAmB;YAC1B,QAAQ,EAAE,sDAAsD;YAChE,QAAQ,EAAE,KAAK;SAChB,GACD,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { useWalletConnectContext } from '../context/WalletConnectContext';\nimport { WaitingMessage } from '../components/WaitingMessage';\n\nexport function ConnectWalletScreen() {\n const { isConnecting, connectWallet } = useWalletConnectContext();\n\n useEffect(() => {\n if (!isConnecting) {\n connectWallet();\n }\n }, [isConnecting, connectWallet]);\n\n return (\n <WaitingMessage\n loaderSize={52}\n message={{\n visible: true,\n title: 'Connecting Wallet',\n subtitle: 'Please approve the connection request in your wallet',\n isTyping: false,\n }}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ChainSelectionScreen(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
|
+
import { SolanaLogo, HyperliquidLogo, ArbitrumLogo, EthereumLogo } from "../../../components/logos";
|
|
4
|
+
import { SolanaNetwork } from "../../../config/solana";
|
|
5
|
+
import { logger } from "../../../utils/logger";
|
|
6
|
+
import { ChainButton } from "../components/ChainButton";
|
|
7
|
+
import { useWalletConnectContext } from "../context/WalletConnectContext";
|
|
8
|
+
import { useFlowStateContext } from "../context/FlowContext";
|
|
9
|
+
import { FlowState } from "../types";
|
|
10
|
+
export function ChainSelectionScreen() {
|
|
11
|
+
var disconnectWallet = useWalletConnectContext().disconnectWallet;
|
|
12
|
+
var _a = useFlowStateContext(), transition = _a.transition, context = _a.context;
|
|
13
|
+
// Define the chains
|
|
14
|
+
var chainsWithNetworkInfo = useMemo(function () { return [
|
|
15
|
+
{
|
|
16
|
+
id: "solana",
|
|
17
|
+
name: "Solana",
|
|
18
|
+
subtitle: "~1 minute deposit time",
|
|
19
|
+
logo: (_jsx("div", { className: "flex items-center justify-center", style: { width: 16, height: 16 }, children: _jsx(SolanaLogo, { width: 16, height: 16 }) })),
|
|
20
|
+
network: SolanaNetwork.MAINNET,
|
|
21
|
+
disabled: false,
|
|
22
|
+
soon: false,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "hyperliquid",
|
|
26
|
+
name: "Hyperliquid",
|
|
27
|
+
subtitle: undefined,
|
|
28
|
+
logo: (_jsx("div", { className: "flex items-center justify-center", style: { width: 16, height: 16 }, children: _jsx(HyperliquidLogo, { width: 16, height: 16 }) })),
|
|
29
|
+
network: "",
|
|
30
|
+
disabled: false,
|
|
31
|
+
soon: true,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: "arbitrum",
|
|
35
|
+
name: "Arbitrum",
|
|
36
|
+
subtitle: undefined,
|
|
37
|
+
logo: (_jsx("div", { className: "flex items-center justify-center", style: { width: 16, height: 16 }, children: _jsx(ArbitrumLogo, { width: 16, height: 16 }) })),
|
|
38
|
+
network: "",
|
|
39
|
+
disabled: false,
|
|
40
|
+
soon: true,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "ethereum",
|
|
44
|
+
name: "Ethereum",
|
|
45
|
+
subtitle: undefined,
|
|
46
|
+
logo: (_jsx("div", { className: "flex items-center justify-center", style: { width: 16, height: 16 }, children: _jsx(EthereumLogo, { width: 16, height: 16 }) })),
|
|
47
|
+
network: "",
|
|
48
|
+
disabled: false,
|
|
49
|
+
soon: true,
|
|
50
|
+
},
|
|
51
|
+
]; }, []);
|
|
52
|
+
var initialSelectedChainId = useMemo(function () {
|
|
53
|
+
var _a;
|
|
54
|
+
if (context.selectedChainId) {
|
|
55
|
+
var chainFromId = chainsWithNetworkInfo.find(function (chain) { return chain.id === context.selectedChainId; });
|
|
56
|
+
if (chainFromId) {
|
|
57
|
+
return chainFromId.id;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (context.selectedChain) {
|
|
61
|
+
var normalizedContextValue_1 = context.selectedChain.toLowerCase();
|
|
62
|
+
var chainFromContext = chainsWithNetworkInfo.find(function (chain) {
|
|
63
|
+
return chain.name.toLowerCase() === normalizedContextValue_1 ||
|
|
64
|
+
chain.id.toLowerCase() === normalizedContextValue_1;
|
|
65
|
+
});
|
|
66
|
+
if (chainFromContext) {
|
|
67
|
+
return chainFromContext.id;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return ((_a = chainsWithNetworkInfo.find(function (c) { return !c.disabled && !c.soon; })) === null || _a === void 0 ? void 0 : _a.id) || null;
|
|
71
|
+
}, [chainsWithNetworkInfo, context.selectedChain, context.selectedChainId]);
|
|
72
|
+
// Initialize with first enabled chain selected
|
|
73
|
+
var _b = useState(initialSelectedChainId), selectedChainId = _b[0], setSelectedChainId = _b[1];
|
|
74
|
+
// Handle chain selection - only Solana can be selected
|
|
75
|
+
var handleChainSelect = useCallback(function (chainId) {
|
|
76
|
+
logger.debug("Chain selected in ChainSelectionScreen:", chainId);
|
|
77
|
+
// Find the chain to check if it's disabled or "soon"
|
|
78
|
+
var chain = chainsWithNetworkInfo.find(function (c) { return c.id === chainId; });
|
|
79
|
+
// Only update selection if chain is not disabled and not "soon" (only Solana)
|
|
80
|
+
if (chain && !chain.disabled && !chain.soon) {
|
|
81
|
+
// Select the chain (only one can be selected at a time)
|
|
82
|
+
setSelectedChainId(chainId);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger.debug("Chain not selectable:", chainId);
|
|
86
|
+
}
|
|
87
|
+
}, [chainsWithNetworkInfo]);
|
|
88
|
+
var selectedChain = useMemo(function () { return chainsWithNetworkInfo.find(function (chain) { return chain.id === selectedChainId; }); }, [chainsWithNetworkInfo, selectedChainId]);
|
|
89
|
+
var handleContinue = useCallback(function () {
|
|
90
|
+
var _a;
|
|
91
|
+
if (!selectedChain || selectedChain.disabled || selectedChain.soon) {
|
|
92
|
+
logger.debug("Continue button clicked without selectable chain");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
var didTransition = transition(FlowState.AMOUNT_INPUT, {
|
|
96
|
+
selectedChain: selectedChain.name,
|
|
97
|
+
selectedChainId: selectedChain.id,
|
|
98
|
+
selectedChainNetwork: (_a = selectedChain.network) !== null && _a !== void 0 ? _a : null,
|
|
99
|
+
depositError: undefined,
|
|
100
|
+
lastDeposit: null,
|
|
101
|
+
});
|
|
102
|
+
if (!didTransition) {
|
|
103
|
+
logger.warn("Failed to transition to amount input from chain selection");
|
|
104
|
+
}
|
|
105
|
+
}, [selectedChain, transition]);
|
|
106
|
+
var handleDisconnect = useCallback(function () {
|
|
107
|
+
logger.debug("Disconnect button clicked");
|
|
108
|
+
disconnectWallet();
|
|
109
|
+
}, [disconnectWallet]);
|
|
110
|
+
var isContinueDisabled = !selectedChain || selectedChain.disabled || selectedChain.soon;
|
|
111
|
+
return (_jsx("div", { className: "overflow-visible relative", children: _jsxs("div", { className: "flex flex-col space-y-3", children: [chainsWithNetworkInfo.map(function (chain) { return (_jsx(ChainButton, { chain: chain, onClick: function () { return handleChainSelect(chain.id); }, disabled: chain.disabled, selected: selectedChainId === chain.id && !chain.soon, soon: chain.soon, subtitle: chain.subtitle }, chain.id)); }), _jsxs("div", { className: "flex flex-col space-y-2", children: [_jsx("button", { type: "button", onClick: handleContinue, disabled: isContinueDisabled, className: "w-full h-8 rounded border bg-transparent flex font-medium items-center justify-center transition-all duration-200 transform ".concat(isContinueDisabled
|
|
112
|
+
? "border-n1-ww-border opacity-50 cursor-not-allowed"
|
|
113
|
+
: "border-n1-ww-main hover:bg-n1-ww-gray-900 cursor-pointer"), children: _jsx("span", { className: "font-medium text-sm opacity-90 ".concat(isContinueDisabled ? "text-n1-ww-gray-500" : "text-n1-ww-main"), children: "Continue" }) }), _jsx("button", { type: "button", onClick: handleDisconnect, className: "w-full h-8 rounded border border-n1-ww-border bg-transparent flex font-medium items-center justify-center transition-all duration-200 transform hover:bg-n1-ww-gray-900 cursor-pointer", children: _jsx("span", { className: "text-white font-medium text-sm opacity-90", children: "Disconnect" }) })] })] }) }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=02-ChainSelectionScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"02-ChainSelectionScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/02-ChainSelectionScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport { \n SolanaLogo, \n HyperliquidLogo, \n ArbitrumLogo, \n EthereumLogo\n} from \"../../../components/logos\";\nimport { SolanaNetwork } from \"../../../config/solana\";\nimport { logger } from \"../../../utils/logger\";\nimport { ChainButton } from \"../components/ChainButton\";\nimport { useWalletConnectContext } from \"../context/WalletConnectContext\";\nimport { useFlowStateContext } from \"../context/FlowContext\";\nimport { FlowState } from \"../types\";\n\nexport function ChainSelectionScreen() {\n const { disconnectWallet } = useWalletConnectContext();\n const { transition, context } = useFlowStateContext();\n\n // Define the chains\n const chainsWithNetworkInfo = useMemo(\n () => [\n {\n id: \"solana\",\n name: \"Solana\",\n subtitle: \"~1 minute deposit time\",\n logo: (\n <div\n className=\"flex items-center justify-center\"\n style={{ width: 16, height: 16 }}\n >\n <SolanaLogo width={16} height={16} />\n </div>\n ),\n network: SolanaNetwork.MAINNET,\n disabled: false,\n soon: false,\n },\n {\n id: \"hyperliquid\",\n name: \"Hyperliquid\",\n subtitle: undefined,\n logo: (\n <div\n className=\"flex items-center justify-center\"\n style={{ width: 16, height: 16 }}\n >\n <HyperliquidLogo width={16} height={16} />\n </div>\n ),\n network: \"\",\n disabled: false,\n soon: true,\n },\n {\n id: \"arbitrum\",\n name: \"Arbitrum\",\n subtitle: undefined,\n logo: (\n <div\n className=\"flex items-center justify-center\"\n style={{ width: 16, height: 16 }}\n >\n <ArbitrumLogo width={16} height={16} />\n </div>\n ),\n network: \"\",\n disabled: false,\n soon: true,\n },\n {\n id: \"ethereum\",\n name: \"Ethereum\",\n subtitle: undefined,\n logo: (\n <div\n className=\"flex items-center justify-center\"\n style={{ width: 16, height: 16 }}\n >\n <EthereumLogo width={16} height={16} />\n </div>\n ),\n network: \"\",\n disabled: false,\n soon: true,\n },\n ],\n []\n );\n\n const initialSelectedChainId = useMemo(() => {\n if (context.selectedChainId) {\n const chainFromId = chainsWithNetworkInfo.find(\n (chain) => chain.id === context.selectedChainId\n );\n if (chainFromId) {\n return chainFromId.id;\n }\n }\n\n if (context.selectedChain) {\n const normalizedContextValue = context.selectedChain.toLowerCase();\n const chainFromContext = chainsWithNetworkInfo.find(\n (chain) =>\n chain.name.toLowerCase() === normalizedContextValue ||\n chain.id.toLowerCase() === normalizedContextValue\n );\n if (chainFromContext) {\n return chainFromContext.id;\n }\n }\n\n return chainsWithNetworkInfo.find((c) => !c.disabled && !c.soon)?.id || null;\n }, [chainsWithNetworkInfo, context.selectedChain, context.selectedChainId]);\n\n // Initialize with first enabled chain selected\n const [selectedChainId, setSelectedChainId] = useState<string | null>(\n initialSelectedChainId\n );\n\n // Handle chain selection - only Solana can be selected\n const handleChainSelect = useCallback((chainId: string) => {\n logger.debug(\"Chain selected in ChainSelectionScreen:\", chainId);\n\n // Find the chain to check if it's disabled or \"soon\"\n const chain = chainsWithNetworkInfo.find((c) => c.id === chainId);\n\n // Only update selection if chain is not disabled and not \"soon\" (only Solana)\n if (chain && !chain.disabled && !chain.soon) {\n // Select the chain (only one can be selected at a time)\n setSelectedChainId(chainId);\n } else {\n logger.debug(\"Chain not selectable:\", chainId);\n }\n }, [chainsWithNetworkInfo]);\n\n const selectedChain = useMemo(\n () => chainsWithNetworkInfo.find((chain) => chain.id === selectedChainId),\n [chainsWithNetworkInfo, selectedChainId]\n );\n\n const handleContinue = useCallback(() => {\n if (!selectedChain || selectedChain.disabled || selectedChain.soon) {\n logger.debug(\"Continue button clicked without selectable chain\");\n return;\n }\n\n const didTransition = transition(FlowState.AMOUNT_INPUT, {\n selectedChain: selectedChain.name,\n selectedChainId: selectedChain.id,\n selectedChainNetwork: selectedChain.network ?? null,\n depositError: undefined,\n lastDeposit: null,\n });\n\n if (!didTransition) {\n logger.warn(\"Failed to transition to amount input from chain selection\");\n }\n }, [selectedChain, transition]);\n\n const handleDisconnect = useCallback(() => {\n logger.debug(\"Disconnect button clicked\");\n disconnectWallet();\n }, [disconnectWallet]);\n\n const isContinueDisabled =\n !selectedChain || selectedChain.disabled || selectedChain.soon;\n\n return (\n <div className=\"overflow-visible relative\">\n <div className=\"flex flex-col space-y-3\">\n {chainsWithNetworkInfo.map((chain) => (\n <ChainButton\n key={chain.id}\n chain={chain}\n onClick={() => handleChainSelect(chain.id)}\n disabled={chain.disabled}\n selected={selectedChainId === chain.id && !chain.soon}\n soon={chain.soon}\n subtitle={chain.subtitle}\n />\n ))}\n <div className=\"flex flex-col space-y-2\">\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={isContinueDisabled}\n className={`w-full h-8 rounded border bg-transparent flex font-medium items-center justify-center transition-all duration-200 transform ${\n isContinueDisabled\n ? \"border-n1-ww-border opacity-50 cursor-not-allowed\"\n : \"border-n1-ww-main hover:bg-n1-ww-gray-900 cursor-pointer\"\n }`}\n >\n <span\n className={`font-medium text-sm opacity-90 ${\n isContinueDisabled ? \"text-n1-ww-gray-500\" : \"text-n1-ww-main\"\n }`}\n >\n Continue\n </span>\n </button>\n <button\n type=\"button\"\n onClick={handleDisconnect}\n className=\"w-full h-8 rounded border border-n1-ww-border bg-transparent flex font-medium items-center justify-center transition-all duration-200 transform hover:bg-n1-ww-gray-900 cursor-pointer\"\n >\n <span className=\"text-white font-medium text-sm opacity-90\">\n Disconnect\n </span>\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
|