@n1xyz/wallet-widget 0.0.29 → 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.
Files changed (131) hide show
  1. package/README.md +89 -11
  2. package/dist/Logic/sessionManager.js +8 -8
  3. package/dist/Logic/sessionManager.js.map +1 -1
  4. package/dist/Logic/transactionManager.d.ts +0 -22
  5. package/dist/Logic/transactionManager.js +0 -189
  6. package/dist/Logic/transactionManager.js.map +1 -1
  7. package/dist/Logic/utils.d.ts +3 -7
  8. package/dist/Logic/utils.js +3 -186
  9. package/dist/Logic/utils.js.map +1 -1
  10. package/dist/Modal/LoadingFallback.js +1 -1
  11. package/dist/Modal/LoadingFallback.js.map +1 -1
  12. package/dist/Modal/N1WalletModal.d.ts +1 -1
  13. package/dist/Modal/N1WalletModal.js +50 -205
  14. package/dist/Modal/N1WalletModal.js.map +1 -1
  15. package/dist/Modal/NTSFlow/views/CreateSessionView.d.ts +1 -1
  16. package/dist/Modal/NordFlow/NordFlow.js +44 -17
  17. package/dist/Modal/NordFlow/NordFlow.js.map +1 -1
  18. package/dist/Modal/NordFlow/components/ChainButton.d.ts +5 -2
  19. package/dist/Modal/NordFlow/components/ChainButton.js +16 -13
  20. package/dist/Modal/NordFlow/components/ChainButton.js.map +1 -1
  21. package/dist/Modal/NordFlow/components/EVMChainsButton.d.ts +2 -1
  22. package/dist/Modal/NordFlow/components/EVMChainsButton.js +11 -9
  23. package/dist/Modal/NordFlow/components/EVMChainsButton.js.map +1 -1
  24. package/dist/Modal/NordFlow/components/Header.d.ts +3 -1
  25. package/dist/Modal/NordFlow/components/Header.js +38 -4
  26. package/dist/Modal/NordFlow/components/Header.js.map +1 -1
  27. package/dist/Modal/NordFlow/components/ImageWithFallback.js +1 -1
  28. package/dist/Modal/NordFlow/components/ImageWithFallback.js.map +1 -1
  29. package/dist/Modal/NordFlow/components/MoreButton.d.ts +1 -1
  30. package/dist/Modal/NordFlow/components/MoreButton.js +4 -4
  31. package/dist/Modal/NordFlow/components/MoreButton.js.map +1 -1
  32. package/dist/Modal/NordFlow/components/TransactionTable.d.ts +1 -1
  33. package/dist/Modal/NordFlow/components/TransactionTable.js +11 -11
  34. package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
  35. package/dist/Modal/NordFlow/components/WaitingMessage.d.ts +3 -1
  36. package/dist/Modal/NordFlow/components/WaitingMessage.js +14 -3
  37. package/dist/Modal/NordFlow/components/WaitingMessage.js.map +1 -1
  38. package/dist/Modal/NordFlow/components/index.d.ts +0 -1
  39. package/dist/Modal/NordFlow/components/index.js +0 -1
  40. package/dist/Modal/NordFlow/components/index.js.map +1 -1
  41. package/dist/Modal/NordFlow/constants.js +12 -48
  42. package/dist/Modal/NordFlow/constants.js.map +1 -1
  43. package/dist/Modal/NordFlow/context/DepositContext.js +112 -41
  44. package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -1
  45. package/dist/Modal/NordFlow/context/FlowContext.d.ts +1 -0
  46. package/dist/Modal/NordFlow/context/FlowContext.js +99 -6
  47. package/dist/Modal/NordFlow/context/FlowContext.js.map +1 -1
  48. package/dist/Modal/NordFlow/context/WalletConnectContext.js +76 -20
  49. package/dist/Modal/NordFlow/context/WalletConnectContext.js.map +1 -1
  50. package/dist/Modal/NordFlow/hoc/withImageFallback.js.map +1 -1
  51. package/dist/Modal/NordFlow/hooks/useTestnetFaucet.d.ts +2 -1
  52. package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js +26 -7
  53. package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js.map +1 -1
  54. package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.d.ts +1 -1
  55. package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js +10 -15
  56. package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js.map +1 -1
  57. package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js +103 -54
  58. package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js.map +1 -1
  59. package/dist/Modal/NordFlow/screens/03-AmountInputScreen.d.ts +1 -2
  60. package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js +284 -60
  61. package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js.map +1 -1
  62. package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js +2 -2
  63. package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js.map +1 -1
  64. package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js +97 -110
  65. package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js.map +1 -1
  66. package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js +10 -8
  67. package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js.map +1 -1
  68. package/dist/Modal/NordFlow/screens/index.d.ts +5 -9
  69. package/dist/Modal/NordFlow/screens/index.js +5 -9
  70. package/dist/Modal/NordFlow/screens/index.js.map +1 -1
  71. package/dist/Modal/NordFlow/types.d.ts +13 -3
  72. package/dist/Modal/NordFlow/types.js +4 -3
  73. package/dist/Modal/NordFlow/types.js.map +1 -1
  74. package/dist/Modal/NordFlow/utils/depositStorage.d.ts +4 -0
  75. package/dist/Modal/NordFlow/utils/depositStorage.js +48 -0
  76. package/dist/Modal/NordFlow/utils/depositStorage.js.map +1 -0
  77. package/dist/Modal/NordFlow/utils/nordUtils.d.ts +1 -1
  78. package/dist/Modal/NordFlow/utils/nordUtils.js +1 -1
  79. package/dist/Modal/NordFlow/utils/nordUtils.js.map +1 -1
  80. package/dist/Provider/LazyWalletProvider.d.ts +1 -1
  81. package/dist/Provider/LazyWalletProvider.js +38 -38
  82. package/dist/Provider/LazyWalletProvider.js.map +1 -1
  83. package/dist/Provider/N1WalletProvider.d.ts +2 -1
  84. package/dist/Provider/N1WalletProvider.js +85 -82
  85. package/dist/Provider/N1WalletProvider.js.map +1 -1
  86. package/dist/Provider/ShadowRootWrapper.d.ts +1 -1
  87. package/dist/Provider/WalletErrorBoundary.d.ts +9 -2
  88. package/dist/Provider/WalletErrorBoundary.js +19 -1
  89. package/dist/Provider/WalletErrorBoundary.js.map +1 -1
  90. package/dist/Provider/hooks/useNordUserInitialization.js +87 -35
  91. package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
  92. package/dist/Provider/icons/CoinbaseWalletIcon.d.ts +1 -1
  93. package/dist/Provider/icons/ConnectionDotsSVG.d.ts +1 -1
  94. package/dist/Provider/icons/MetamaskIcon.d.ts +1 -1
  95. package/dist/Provider/icons/PhantomIcon.d.ts +1 -1
  96. package/dist/Provider/icons/UserIcon.d.ts +1 -1
  97. package/dist/Provider/icons/WalletConnectIcon.d.ts +1 -1
  98. package/dist/Provider/types.d.ts +18 -16
  99. package/dist/Provider/types.js +8 -2
  100. package/dist/Provider/types.js.map +1 -1
  101. package/dist/WidgetButton/N1ConnectButton.d.ts +1 -1
  102. package/dist/WidgetButton/N1ConnectButton.js +29 -10
  103. package/dist/WidgetButton/N1ConnectButton.js.map +1 -1
  104. package/dist/components/Logo.d.ts +2 -1
  105. package/dist/components/Logo.js +5 -2
  106. package/dist/components/Logo.js.map +1 -1
  107. package/dist/components/QRCodeLoader.d.ts +1 -1
  108. package/dist/components/QRCodeLoader.js +1 -1
  109. package/dist/components/QRCodeLoader.js.map +1 -1
  110. package/dist/components/logos/EVMChainsGroup.js +1 -1
  111. package/dist/components/logos/EVMChainsGroup.js.map +1 -1
  112. package/dist/components/logos/MoreChainsGroup.js +1 -1
  113. package/dist/components/logos/MoreChainsGroup.js.map +1 -1
  114. package/dist/components/logos/index.d.ts +0 -2
  115. package/dist/components/logos/index.js +0 -2
  116. package/dist/components/logos/index.js.map +1 -1
  117. package/dist/config/solana.d.ts +3 -15
  118. package/dist/config/solana.js +6 -29
  119. package/dist/config/solana.js.map +1 -1
  120. package/dist/embedded-main-css.d.ts +1 -1
  121. package/dist/embedded-main-css.js +1 -1
  122. package/dist/embedded-main-css.js.map +1 -1
  123. package/dist/index.d.ts +2 -0
  124. package/dist/index.js +2 -0
  125. package/dist/index.js.map +1 -1
  126. package/dist/main.css +2 -2
  127. package/dist/polyfills/windowEthereumGuard.d.ts +6 -0
  128. package/dist/polyfills/windowEthereumGuard.js +28 -0
  129. package/dist/polyfills/windowEthereumGuard.js.map +1 -0
  130. package/package.json +26 -11
  131. package/dist/utils/dynamicImports.d.ts +0 -25
@@ -1,74 +1,298 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
3
- import { useN1WalletContext } from '../../../Provider/hooks';
4
- import { ImageWithFallback } from '../components';
5
- import { ANIMATION_EASE } from '../constants';
6
- import { formatAmount, isNordConfigured } from '../utils/nordUtils';
7
- import { useDepositContext } from '../context/DepositContext';
8
- import { useFlowStateContext } from '../context/FlowContext';
9
- import { useTestnetFaucet } from '../hooks/useTestnetFaucet';
10
- import { WaitingMessage } from '../components/WaitingMessage';
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ 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);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
57
+ var _a;
58
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
59
+ import { Connection, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
60
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
61
+ import { SolanaLogo } from "../../../components/logos";
62
+ import { getSolanaRpcUrl, SolanaNetwork } from "../../../config/solana";
63
+ import { useN1WalletContext } from "../../../Provider/hooks";
64
+ import { logger } from "../../../utils/logger";
65
+ import { useDepositContext } from "../context/DepositContext";
66
+ import { useFlowStateContext } from "../context/FlowContext";
67
+ import { formatAmount, isNordConfigured } from "../utils/nordUtils";
68
+ var USDC_MINT_BY_NETWORK = (_a = {},
69
+ _a[SolanaNetwork.MAINNET] = "EPjFWdd5AufqSSqeM2qN1xzybapC8hEki3H6KNozN8n",
70
+ _a[SolanaNetwork.TESTNET] = "Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ",
71
+ _a[SolanaNetwork.DEVNET] = "Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ",
72
+ _a);
73
+ var GAS_FEE_LAMPORTS = 5000; // ~0.000005 SOL
74
+ var BALANCE_REFRESH_MS = 20000;
75
+ var DEFAULT_AMOUNT = "100";
76
+ var DEFAULT_MIN_DEPOSIT = 5;
77
+ var INITIAL_BALANCE_STATE = {
78
+ usdc: null,
79
+ sol: null,
80
+ loading: false,
81
+ error: null,
82
+ };
11
83
  export function AmountInputScreen(_a) {
12
- var _b = _a.isTestnet, isTestnet = _b === void 0 ? false : _b;
84
+ var _this = this;
13
85
  var context = useFlowStateContext().context;
14
- var _c = useDepositContext(), updateAmount = _c.updateAmount, startDeposit = _c.startDeposit;
15
- var nord = useN1WalletContext().nord;
16
- // Hard code amount to 100
17
- var amount = '100';
18
- // Hard code balance to 0 to allow faucet to trigger
19
- var balance = 100;
20
- // Force the amount to be 100 on component mount only, not on every render
86
+ var _b = useDepositContext(), amount = _b.amount, updateAmount = _b.updateAmount, startDeposit = _b.startDeposit;
87
+ var _c = useN1WalletContext(), nord = _c.nord, address = _c.address;
88
+ var _d = useState("USDC"), tokenSymbol = _d[0], setTokenSymbol = _d[1];
89
+ var _e = useState(6), tokenDecimals = _e[0], setTokenDecimals = _e[1];
90
+ var _f = useState(INITIAL_BALANCE_STATE), walletBalances = _f[0], setWalletBalances = _f[1];
91
+ var isMountedRef = useRef(true);
92
+ useEffect(function () {
93
+ return function () {
94
+ isMountedRef.current = false;
95
+ };
96
+ }, []);
97
+ useEffect(function () {
98
+ if (!amount) {
99
+ updateAmount(DEFAULT_AMOUNT);
100
+ }
101
+ }, [amount, updateAmount]);
102
+ var selectedChainName = context.selectedChain || "Solana";
103
+ var selectedNetwork = useMemo(function () {
104
+ var configuredNetwork = context.selectedChainNetwork;
105
+ if (configuredNetwork &&
106
+ Object.values(SolanaNetwork).includes(configuredNetwork)) {
107
+ return configuredNetwork;
108
+ }
109
+ return SolanaNetwork.MAINNET;
110
+ }, [context.selectedChainNetwork]);
111
+ var fallbackMintForNetwork = useMemo(function () {
112
+ var _a;
113
+ return (_a = USDC_MINT_BY_NETWORK[selectedNetwork]) !== null && _a !== void 0 ? _a : USDC_MINT_BY_NETWORK[SolanaNetwork.MAINNET];
114
+ }, [selectedNetwork]);
115
+ var _g = useState(fallbackMintForNetwork), tokenMintAddress = _g[0], setTokenMintAddress = _g[1];
21
116
  useEffect(function () {
22
- updateAmount('100');
23
- // Empty dependency array ensures this only runs once on mount
24
- }, [updateAmount]);
25
- var _d = useState(false), isHovered = _d[0], setIsHovered = _d[1];
26
- // Get token information from Nord if available
27
- var _e = useState('USDC'), tokenSymbol = _e[0], setTokenSymbol = _e[1];
28
- var _f = useState('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg'), tokenLogo = _f[0], setTokenLogo = _f[1];
29
- var _g = useState(6), tokenDecimals = _g[0], setTokenDecimals = _g[1];
30
- // Try to get token information from Nord
117
+ setTokenMintAddress(fallbackMintForNetwork);
118
+ }, [fallbackMintForNetwork]);
31
119
  useEffect(function () {
32
120
  if (nord && isNordConfigured(nord)) {
33
121
  try {
34
- // Find the USDC token or the first token
35
- var usdcToken = nord.tokens.find(function (t) { return t.symbol === 'USDC'; }) || nord.tokens[0];
36
- if (usdcToken) {
37
- setTokenSymbol(usdcToken.symbol);
38
- // Use a default logo if not available
39
- // setTokenLogo(`/images/tokens/${usdcToken.symbol.toLowerCase()}.svg`);
40
- setTokenLogo('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg');
41
- setTokenDecimals(usdcToken.decimals);
122
+ var usdcToken_1 = nord.tokens.find(function (t) { return t.symbol === "USDC"; }) || nord.tokens[0];
123
+ if (usdcToken_1) {
124
+ setTokenSymbol(usdcToken_1.symbol);
125
+ setTokenDecimals(usdcToken_1.decimals);
126
+ setTokenMintAddress(function (prev) { var _a; return (_a = usdcToken_1.mintAddr) !== null && _a !== void 0 ? _a : prev; });
42
127
  }
43
128
  }
44
129
  catch (error) {
45
- console.warn('Error getting token information from Nord:', error);
130
+ logger.warn("Error getting token information from Nord:", error);
46
131
  }
47
132
  }
48
133
  }, [nord]);
49
- // Removed handleAmountChange since we don't want user to edit the amount
50
- // todo:fix
51
- var isValidAmount = true;
52
- var hardcodedMinDeposit = 100;
53
- var _h = useTestnetFaucet({
54
- enabled: isTestnet,
55
- balance: balance,
56
- minDeposit: hardcodedMinDeposit,
57
- }), showFaucetOverlay = _h.showFaucetOverlay, isFaucetLoading = _h.isFaucetLoading, faucetError = _h.faucetError, showFaucetSuccess = _h.showFaucetSuccess, requestTestnetTokens = _h.requestTestnetTokens;
58
- // Format the balance with the appropriate number of decimal places
59
- var formattedBalance = formatAmount(balance, tokenDecimals);
60
- return (_jsxs("div", { className: "overflow-hidden relative", children: [isTestnet && showFaucetOverlay && (_jsx("div", { className: "absolute inset-0 z-10 bg-neutral-900/80 backdrop-blur-md flex flex-col items-center justify-center p-6", children: isFaucetLoading ? (_jsx(WaitingMessage, { loaderSize: 52, message: {
61
- visible: true,
62
- title: 'Obtaining Testnet Tokens',
63
- subtitle: 'Please wait while we request testnet tokens for your wallet...',
64
- isTyping: false,
65
- } })) : showFaucetSuccess ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-green-500 text-5xl mb-4 n1-ww-animate-fade-up", children: "\u2713" }), _jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h3", { className: "text-xl text-white font-semibold", children: "Tokens Obtained Successfully" }), _jsx("p", { className: "text-sm text-green-400", children: "Your wallet has been funded with testnet tokens." }), _jsx("p", { className: "text-sm text-neutral-400 mt-2", children: "Please wait while your balance updates..." })] })] })) : faucetError ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-red-500 text-5xl mb-4 n1-ww-animate-fade-up", children: "\u26A0\uFE0F" }), _jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h3", { className: "text-xl text-white font-semibold", children: "Failed to Get Tokens" }), _jsx("p", { className: "text-sm text-red-400", children: faucetError }), _jsx("button", { onClick: requestTestnetTokens, className: "mt-4 px-4 py-2 bg-n1-ww-main text-white rounded-sm hover:bg-n1-ww-main/90 transition-colors", children: "Try Again" })] })] })) : null })), _jsx("h2", { className: "text-xl text-white font-semibold mb-6 text-center", children: "Enter Amount" }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "relative border-2 border-n1-ww-border bg-n1-ww-gray-900 rounded-sm p-0 overflow-hidden n1-ww-animate-fade-up", style: { animationDelay: '0.1s' }, children: [_jsxs("div", { className: "flex items-center justify-between p-4 border-b border-n1-ww-border bg-black/10", children: [_jsxs("div", { className: "flex items-center space-x-3", children: [_jsx("div", { className: "w-8 h-8 rounded-full overflow-hidden bg-n1-ww-gray-800 flex items-center justify-center shadow-sm", children: _jsx(ImageWithFallback, { src: tokenLogo, alt: tokenSymbol, width: 24, height: 24, fallbackText: tokenSymbol.charAt(0), fallbackClassName: "w-6 h-6 rounded-full flex items-center justify-center", fallbackBgColor: "bg-blue-900", fallbackTextColor: "text-blue-300" }) }), _jsx("span", { className: "text-white font-medium", children: tokenSymbol })] }), _jsx("div", { className: "text-xs rounded-sm bg-n1-ww-gray-800 px-2 py-1 text-n1-ww-gray-300", children: "Fixed Amount" })] }), isTestnet && (_jsx("div", { className: "mb-4 w-full flex items-center justify-center", children: _jsxs("div", { className: "bg-yellow-900/40 border border-n1-ww-border text-yellow-200 rounded px-3 py-2 text-sm text-center max-w-xl mx-auto shadow-sm", children: [_jsx("span", { className: "font-semibold", children: "Testnet Only:" }), " Please make sure your wallet is set to ", _jsx("span", { className: "font-semibold", children: "testnet mode" }), " before proceeding. ", _jsx("a", { href: "https://docs.phantom.com/developer-powertools/testnet-mode", target: "_blank", rel: "noopener noreferrer", className: "underline text-yellow-200 hover:text-yellow-100 transition-colors", children: "Learn how to switch to testnet" }), "."] }) })), _jsxs("div", { className: "relative p-6 flex flex-col items-center", children: [_jsxs("div", { className: "relative flex items-baseline justify-center w-full", children: [_jsx("span", { className: "text-4xl font-bold text-white mr-1 n1-ww-animate-fade-up", style: { animationDelay: '0.2s' }, children: amount }), _jsx("span", { className: "text-xl text-neutral-400 ml-1 n1-ww-animate-fade-up", style: { animationDelay: '0.3s' }, children: tokenSymbol })] }), _jsx("div", { className: "w-16 h-1 bg-n1-ww-gray-800 rounded-full mt-4 mb-2" }), _jsx("div", { className: "flex justify-center items-center text-sm mt-2 w-full n1-ww-animate-fade-up", style: { animationDelay: '0.4s' }, children: _jsxs("span", { className: "text-neutral-400", children: ["Balance: ", formattedBalance, " ", tokenSymbol] }) })] })] }), context.depositError && (_jsx("div", { className: "bg-red-900/30 text-red-400 p-3 rounded-sm text-sm border border-n1-ww-border n1-ww-animate-fade-up", style: { animationDelay: '0.5s' }, children: context.depositError })), _jsx("button", { onClick: startDeposit, disabled: !isValidAmount, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); }, className: "\n group relative w-full overflow-hidden rounded-sm border-2 bg-neutral-950 py-4 text-center\n transition-all duration-300 ".concat(ANIMATION_EASE, " n1-ww-animate-fade-up\n ").concat(isValidAmount
66
- ? 'cursor-pointer border-n1-ww-border hover:border-n1-ww-border'
67
- : 'cursor-not-allowed border-n1-ww-border opacity-50', "\n "), style: {
68
- transform: isHovered && isValidAmount ? 'scale(0.99)' : 'scale(1)',
69
- animationDelay: '0.6s'
70
- }, children: _jsx("span", { className: "\n text-base font-medium tracking-wide transition-colors duration-300 ".concat(ANIMATION_EASE, "\n ").concat(isValidAmount
71
- ? 'text-n1-ww-gray-300 group-hover:text-white'
72
- : 'text-n1-ww-gray-600', "\n "), children: "Continue" }) })] })] }));
134
+ var minDeposit = useMemo(function () {
135
+ var _a, _b;
136
+ if (!nord || !isNordConfigured(nord) || !tokenMintAddress) {
137
+ return DEFAULT_MIN_DEPOSIT;
138
+ }
139
+ try {
140
+ // @ts-ignore
141
+ var mintInfo = (_b = (_a = nord.protonClient) === null || _a === void 0 ? void 0 : _a.mintInfo) === null || _b === void 0 ? void 0 : _b.get(tokenMintAddress);
142
+ if (mintInfo === null || mintInfo === void 0 ? void 0 : mintInfo.minDeposit) {
143
+ var minDepositUnits = Number(mintInfo.minDeposit);
144
+ var divisor = Math.pow(10, tokenDecimals);
145
+ if (Number.isFinite(minDepositUnits) && divisor > 0) {
146
+ return minDepositUnits / divisor;
147
+ }
148
+ }
149
+ }
150
+ catch (error) {
151
+ logger.warn("Unable to derive min deposit from Nord config", error);
152
+ }
153
+ return DEFAULT_MIN_DEPOSIT;
154
+ }, [nord, tokenMintAddress, tokenDecimals]);
155
+ var fetchBalances = useCallback(function () {
156
+ var args_1 = [];
157
+ for (var _i = 0; _i < arguments.length; _i++) {
158
+ args_1[_i] = arguments[_i];
159
+ }
160
+ return __awaiter(_this, __spreadArray([], args_1, true), void 0, function (showSpinner) {
161
+ var rpcEndpoint, connection, ownerKey, _a, solLamports, tokenAccounts, usdcTotal, error_1;
162
+ if (showSpinner === void 0) { showSpinner = true; }
163
+ return __generator(this, function (_b) {
164
+ switch (_b.label) {
165
+ case 0:
166
+ if (!address) {
167
+ if (isMountedRef.current) {
168
+ setWalletBalances(INITIAL_BALANCE_STATE);
169
+ }
170
+ return [2 /*return*/];
171
+ }
172
+ if (showSpinner) {
173
+ setWalletBalances(function (prev) { return (__assign(__assign({}, prev), { loading: true, error: null })); });
174
+ }
175
+ _b.label = 1;
176
+ case 1:
177
+ _b.trys.push([1, 3, , 4]);
178
+ rpcEndpoint = getSolanaRpcUrl();
179
+ connection = new Connection(rpcEndpoint, "confirmed");
180
+ ownerKey = new PublicKey(address);
181
+ return [4 /*yield*/, Promise.all([
182
+ connection.getBalance(ownerKey),
183
+ connection.getParsedTokenAccountsByOwner(ownerKey, {
184
+ mint: new PublicKey(tokenMintAddress),
185
+ }),
186
+ ])];
187
+ case 2:
188
+ _a = _b.sent(), solLamports = _a[0], tokenAccounts = _a[1];
189
+ usdcTotal = tokenAccounts.value.reduce(function (total, _a) {
190
+ var _b, _c;
191
+ var account = _a.account;
192
+ var info = (_b = account.data.parsed) === null || _b === void 0 ? void 0 : _b.info;
193
+ var tokenAmount = info === null || info === void 0 ? void 0 : info.tokenAmount;
194
+ if (!tokenAmount) {
195
+ return total;
196
+ }
197
+ var uiAmount = typeof tokenAmount.uiAmount === "number"
198
+ ? tokenAmount.uiAmount
199
+ : parseFloat((_c = tokenAmount.uiAmountString) !== null && _c !== void 0 ? _c : "0");
200
+ return total + (Number.isFinite(uiAmount) ? uiAmount : 0);
201
+ }, 0);
202
+ if (!isMountedRef.current) {
203
+ return [2 /*return*/];
204
+ }
205
+ setWalletBalances({
206
+ usdc: usdcTotal,
207
+ sol: solLamports / LAMPORTS_PER_SOL,
208
+ loading: false,
209
+ error: null,
210
+ });
211
+ return [3 /*break*/, 4];
212
+ case 3:
213
+ error_1 = _b.sent();
214
+ logger.warn("Failed to load wallet balances", error_1);
215
+ if (!isMountedRef.current) {
216
+ return [2 /*return*/];
217
+ }
218
+ setWalletBalances(function (prev) { return (__assign(__assign({}, prev), { loading: false, error: "Unable to fetch wallet balances. Please try again." })); });
219
+ return [3 /*break*/, 4];
220
+ case 4: return [2 /*return*/];
221
+ }
222
+ });
223
+ });
224
+ }, [address, tokenMintAddress]);
225
+ useEffect(function () {
226
+ fetchBalances();
227
+ var interval = setInterval(function () {
228
+ fetchBalances(false);
229
+ }, BALANCE_REFRESH_MS);
230
+ return function () { return clearInterval(interval); };
231
+ }, [fetchBalances]);
232
+ var isSolana = selectedChainName.toLowerCase().includes("solana");
233
+ var gasFeeInSol = GAS_FEE_LAMPORTS / LAMPORTS_PER_SOL;
234
+ var gasFeeUSD = "~$0.0012";
235
+ var minDepositDisplay = minDeposit.toString();
236
+ var formattedBalance = walletBalances.usdc == null
237
+ ? walletBalances.loading
238
+ ? "Loading..."
239
+ : "—"
240
+ : formatAmount(walletBalances.usdc, tokenDecimals);
241
+ var formattedSolBalance = walletBalances.sol == null
242
+ ? walletBalances.loading
243
+ ? "Loading..."
244
+ : "—"
245
+ : walletBalances.sol.toFixed(4);
246
+ var numericAmount = Number(amount || 0);
247
+ var hasEnteredAmount = Number.isFinite(numericAmount) && numericAmount > 0;
248
+ var meetsMinDeposit = numericAmount >= minDeposit;
249
+ var hasSufficientUsdc = walletBalances.usdc == null ? false : numericAmount <= walletBalances.usdc;
250
+ var hasSufficientSol = walletBalances.sol == null ? false : walletBalances.sol >= gasFeeInSol;
251
+ var validationError = useMemo(function () {
252
+ if (!address) {
253
+ return "Connect a wallet to continue.";
254
+ }
255
+ if (walletBalances.error) {
256
+ return walletBalances.error;
257
+ }
258
+ if (!hasEnteredAmount) {
259
+ return "Enter an amount to continue.";
260
+ }
261
+ if (walletBalances.loading || walletBalances.usdc == null || walletBalances.sol == null) {
262
+ return null;
263
+ }
264
+ if (!meetsMinDeposit) {
265
+ return "Minimum deposit is ".concat(minDeposit, " ").concat(tokenSymbol, ".");
266
+ }
267
+ if (!hasSufficientUsdc) {
268
+ return "Insufficient ".concat(tokenSymbol, " balance for this deposit.");
269
+ }
270
+ if (!hasSufficientSol) {
271
+ return "Not enough SOL to cover network fees.";
272
+ }
273
+ return null;
274
+ }, [
275
+ address,
276
+ walletBalances.error,
277
+ walletBalances.loading,
278
+ walletBalances.usdc,
279
+ walletBalances.sol,
280
+ hasEnteredAmount,
281
+ hasSufficientSol,
282
+ hasSufficientUsdc,
283
+ meetsMinDeposit,
284
+ tokenSymbol,
285
+ minDeposit,
286
+ ]);
287
+ var isValidAmount = !walletBalances.loading && validationError === null;
288
+ var handleUseMax = function () {
289
+ if (walletBalances.usdc == null || walletBalances.usdc <= 0) {
290
+ return;
291
+ }
292
+ updateAmount(walletBalances.usdc.toFixed(tokenDecimals));
293
+ };
294
+ return (_jsxs("div", { className: "overflow-hidden relative", children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsx("h2", { className: "text-sm text-white font-medium", children: "Deposit From" }), _jsxs("div", { className: "flex items-center space-x-2 rounded-md bg-n1-ww-border h-5 justify-center p-1", children: [isSolana ? (_jsx("div", { className: "rounded-full flex items-center justify-center bg-black h-3 w-3", children: _jsx(SolanaLogo, { width: 6, height: 6 }) })) : (_jsx("div", { className: "w-4 h-4 rounded-full bg-n1-ww-gray-600" })), _jsx("span", { className: "text-white text-xs font-medium", children: selectedChainName })] })] }), _jsxs("div", { className: "space-y-3 mb-4 text-white text-xs font-light", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "Available Balance:" }), _jsxs("span", { children: [formattedBalance, " ", tokenSymbol] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "SOL Balance:" }), _jsxs("span", { children: [formattedSolBalance, " SOL"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "Minimum Deposit:" }), _jsxs("span", { children: [minDepositDisplay, " ", tokenSymbol] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "Gas Fee:" }), _jsxs("span", { children: [gasFeeInSol.toFixed(6), " SOL (", gasFeeUSD, ")"] })] })] }), _jsx("div", { className: "h-px bg-n1-ww-border mb-4" }), _jsxs("div", { className: "mb-4 flex justify-between w-full", children: [_jsx("div", { className: "flex items-center gap-3", children: _jsxs("div", { className: "flex items-center justify-between border border-n1-ww-gray-400 bg-n1-ww-gray-600 flex-1 w-[292px] rounded h-8 px-2", children: [_jsx("span", { className: "text-white text-sm font-medium", children: "Amount" }), _jsxs("div", { className: "flex items-center space-x-2", children: [_jsx("input", { type: "number", step: "0.000001", value: amount, onChange: function (e) { return updateAmount(e.target.value); }, className: "text-white font-light text-xs text-right bg-transparent border-none outline-none focus:ring-2 focus:ring-n1-ww-main focus:ring-offset-0 rounded px-1" }), _jsx("button", { className: "border border-n1-ww-gray-400 h-5 text-white text-xs font-light flex items-center justify-center px-1 rounded transition-colors", children: tokenSymbol })] })] }) }), _jsx("button", { className: "border border-n1-ww-gray-400 bg-n1-ww-gray-600 rounded text-white text-sm font-medium px-2 h-8 hover:bg-n1-ww-gray-800 transition-colors w-[68px]", onClick: handleUseMax, type: "button", children: "Max" })] }), validationError && (_jsx("p", { className: "mb-2 text-xs text-red-400", children: validationError })), _jsx("button", { onClick: startDeposit, disabled: !isValidAmount, className: "\n w-full h-8 rounded border bg-transparent flex font-medium items-center justify-center\n transition-all duration-200 transform\n ".concat(isValidAmount
295
+ ? "border-n1-ww-main hover:bg-n1-ww-gray-900 cursor-pointer"
296
+ : "border-n1-ww-border opacity-50 cursor-not-allowed", "\n "), children: _jsx("span", { className: "\n font-medium text-sm opacity-90\n ".concat(isValidAmount ? "text-n1-ww-main" : "text-n1-ww-gray-600", "\n "), children: "Deposit" }) })] }));
73
297
  }
74
298
  //# sourceMappingURL=03-AmountInputScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"03-AmountInputScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/03-AmountInputScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,MAAM,UAAU,iBAAiB,CAAC,EAA6C;QAA3C,iBAAiB,EAAjB,SAAS,mBAAG,KAAK,KAAA;IAC3C,IAAA,OAAO,GAAK,mBAAmB,EAAE,QAA1B,CAA2B;IACpC,IAAA,KAAiC,iBAAiB,EAAE,EAAlD,YAAY,kBAAA,EAAE,YAAY,kBAAwB,CAAC;IACnD,IAAA,IAAI,GAAK,kBAAkB,EAAE,KAAzB,CAA0B;IAEtC,0BAA0B;IAC1B,IAAM,MAAM,GAAG,KAAK,CAAC;IACrB,oDAAoD;IACpD,IAAM,OAAO,GAAG,GAAG,CAAC;IAEpB,0EAA0E;IAC1E,SAAS,CAAC;QACR,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,8DAA8D;IAChE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEb,IAAA,KAA4B,QAAQ,CAAC,KAAK,CAAC,EAA1C,SAAS,QAAA,EAAE,YAAY,QAAmB,CAAC;IAElD,+CAA+C;IACzC,IAAA,KAAgC,QAAQ,CAAC,MAAM,CAAC,EAA/C,WAAW,QAAA,EAAE,cAAc,QAAoB,CAAC;IACjD,IAAA,KAA4B,QAAQ,CAAC,+EAA+E,CAAC,EAApH,SAAS,QAAA,EAAE,YAAY,QAA6F,CAAC;IACtH,IAAA,KAAoC,QAAQ,CAAC,CAAC,CAAC,EAA9C,aAAa,QAAA,EAAE,gBAAgB,QAAe,CAAC;IAEtD,yCAAyC;IACzC,SAAS,CAAC;QACR,IAAI,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,yCAAyC;gBACzC,IAAM,SAAS,GACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,MAAM,KAAK,MAAM,EAAnB,CAAmB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtE,IAAI,SAAS,EAAE,CAAC;oBACd,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACjC,sCAAsC;oBACtC,wEAAwE;oBACxE,YAAY,CAAC,+EAA+E,CAAC,CAAC;oBAC9F,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,yEAAyE;IAEzE,WAAW;IACX,IAAM,aAAa,GAAG,IAAI,CAAC;IAE3B,IAAM,mBAAmB,GAAG,GAAG,CAAC;IAE1B,IAAA,KAMF,gBAAgB,CAAC;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,SAAA;QACP,UAAU,EAAE,mBAAmB;KAChC,CAAC,EATA,iBAAiB,uBAAA,EACjB,eAAe,qBAAA,EACf,WAAW,iBAAA,EACX,iBAAiB,uBAAA,EACjB,oBAAoB,0BAKpB,CAAC;IAEH,mEAAmE;IACnE,IAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE9D,OAAO,CACL,eAAK,SAAS,EAAC,0BAA0B,aAEtC,SAAS,IAAI,iBAAiB,IAAI,CACjC,cAAK,SAAS,EAAC,wGAAwG,YACpH,eAAe,CAAC,CAAC,CAAC,CACjB,KAAC,cAAc,IACb,UAAU,EAAE,EAAE,EACd,OAAO,EAAE;wBACP,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE,0BAA0B;wBACjC,QAAQ,EACN,gEAAgE;wBAClE,QAAQ,EAAE,KAAK;qBAChB,GACD,CACH,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACtB,8BACE,cAAK,SAAS,EAAC,oDAAoD,uBAAQ,EAC3E,eAAK,SAAS,EAAC,uBAAuB,aACpC,aAAI,SAAS,EAAC,kCAAkC,6CAE3C,EACL,YAAG,SAAS,EAAC,wBAAwB,iEAEjC,EACJ,YAAG,SAAS,EAAC,+BAA+B,0DAExC,IACA,IACL,CACJ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,8BACE,cAAK,SAAS,EAAC,kDAAkD,6BAAS,EAC1E,eAAK,SAAS,EAAC,uBAAuB,aACpC,aAAI,SAAS,EAAC,kCAAkC,qCAE3C,EACL,YAAG,SAAS,EAAC,sBAAsB,YAChC,WAAW,GACV,EACJ,iBACE,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAC,6FAA6F,0BAGhG,IACL,IACL,CACJ,CAAC,CAAC,CAAC,IAAI,GACJ,CACP,EAED,aAAI,SAAS,EAAC,mDAAmD,6BAE5D,EAGL,eAAK,SAAS,EAAC,WAAW,aAExB,eAAK,SAAS,EAAC,8GAA8G,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,aAE7J,eAAK,SAAS,EAAC,gFAAgF,aAC7F,eAAK,SAAS,EAAC,6BAA6B,aAC1C,cAAK,SAAS,EAAC,mGAAmG,YAChH,KAAC,iBAAiB,IAChB,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EACnC,iBAAiB,EAAC,uDAAuD,EACzE,eAAe,EAAC,aAAa,EAC7B,iBAAiB,EAAC,eAAe,GACjC,GACE,EACN,eAAM,SAAS,EAAC,wBAAwB,YACrC,WAAW,GACP,IACH,EACN,cAAK,SAAS,EAAC,oEAAoE,6BAE7E,IACF,EAEL,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,8CAA8C,YAC3D,eAAK,SAAS,EAAC,8HAA8H,aAC3I,eAAM,SAAS,EAAC,eAAe,8BAAqB,8CAAwC,eAAM,SAAS,EAAC,eAAe,6BAAoB,0BAAoB,YAAG,IAAI,EAAC,4DAA4D,EAAC,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,SAAS,EAAC,mEAAmE,+CAAmC,SAC9X,GACF,CACP,EAGD,eAAK,SAAS,EAAC,yCAAyC,aACtD,eAAK,SAAS,EAAC,oDAAoD,aACjE,eAAM,SAAS,EAAC,0DAA0D,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,YACzG,MAAM,GACF,EACP,eAAM,SAAS,EAAC,qDAAqD,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,YACpG,WAAW,GACP,IACH,EAGN,cAAK,SAAS,EAAC,mDAAmD,GAAO,EAGzE,cAAK,SAAS,EAAC,4EAA4E,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,YAC3H,gBAAM,SAAS,EAAC,kBAAkB,0BACtB,gBAAgB,OAAG,WAAW,IACnC,GACH,IACF,IACF,EAGL,OAAO,CAAC,YAAY,IAAI,CACvB,cAAK,SAAS,EAAC,oGAAoG,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,YAClJ,OAAO,CAAC,YAAY,GACjB,CACP,EAGD,iBACE,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,CAAC,aAAa,EACxB,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,KAAK,CAAC,EAAnB,CAAmB,EACvC,SAAS,EAAE,2JAEqB,cAAc,iDAC1C,aAAa;4BACb,CAAC,CAAC,8DAA8D;4BAChE,CAAC,CAAC,mDAAmD,iBAExD,EACD,KAAK,EAAE;4BACL,SAAS,EAAE,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;4BAClE,cAAc,EAAE,MAAM;yBACvB,YAED,eACE,SAAS,EAAE,6FAC4D,cAAc,6BACjF,aAAa;gCACb,CAAC,CAAC,4CAA4C;gCAC9C,CAAC,CAAC,qBAAqB,mBAE1B,yBAGI,GACA,IACL,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useN1WalletContext } from '../../../Provider/hooks';\nimport { ImageWithFallback } from '../components';\nimport { ANIMATION_EASE } from '../constants';\nimport { formatAmount, isNordConfigured } from '../utils/nordUtils';\nimport { useDepositContext } from '../context/DepositContext';\nimport { useFlowStateContext } from '../context/FlowContext';\nimport { useTestnetFaucet } from '../hooks/useTestnetFaucet';\nimport { WaitingMessage } from '../components/WaitingMessage';\n\ninterface AmountInputScreenProps {\n isTestnet?: boolean;\n}\n\nexport function AmountInputScreen({ isTestnet = false }: AmountInputScreenProps) {\n const { context } = useFlowStateContext();\n const { updateAmount, startDeposit } = useDepositContext();\n const { nord } = useN1WalletContext();\n\n // Hard code amount to 100\n const amount = '100';\n // Hard code balance to 0 to allow faucet to trigger\n const balance = 100;\n\n // Force the amount to be 100 on component mount only, not on every render\n useEffect(() => {\n updateAmount('100');\n // Empty dependency array ensures this only runs once on mount\n }, [updateAmount]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n // Get token information from Nord if available\n const [tokenSymbol, setTokenSymbol] = useState('USDC');\n const [tokenLogo, setTokenLogo] = useState('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg');\n const [tokenDecimals, setTokenDecimals] = useState(6);\n\n // Try to get token information from Nord\n useEffect(() => {\n if (nord && isNordConfigured(nord)) {\n try {\n // Find the USDC token or the first token\n const usdcToken =\n nord.tokens.find((t: any) => t.symbol === 'USDC') || nord.tokens[0];\n if (usdcToken) {\n setTokenSymbol(usdcToken.symbol);\n // Use a default logo if not available\n // setTokenLogo(`/images/tokens/${usdcToken.symbol.toLowerCase()}.svg`);\n setTokenLogo('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg');\n setTokenDecimals(usdcToken.decimals);\n }\n } catch (error) {\n console.warn('Error getting token information from Nord:', error);\n }\n }\n }, [nord]);\n\n // Removed handleAmountChange since we don't want user to edit the amount\n\n // todo:fix\n const isValidAmount = true;\n\n const hardcodedMinDeposit = 100;\n\n const {\n showFaucetOverlay,\n isFaucetLoading,\n faucetError,\n showFaucetSuccess,\n requestTestnetTokens,\n } = useTestnetFaucet({\n enabled: isTestnet,\n balance,\n minDeposit: hardcodedMinDeposit,\n });\n\n // Format the balance with the appropriate number of decimal places\n const formattedBalance = formatAmount(balance, tokenDecimals);\n\n return (\n <div className=\"overflow-hidden relative\">\n {/* Faucet Overlay */}\n {isTestnet && showFaucetOverlay && (\n <div className=\"absolute inset-0 z-10 bg-neutral-900/80 backdrop-blur-md flex flex-col items-center justify-center p-6\">\n {isFaucetLoading ? (\n <WaitingMessage\n loaderSize={52}\n message={{\n visible: true,\n title: 'Obtaining Testnet Tokens',\n subtitle:\n 'Please wait while we request testnet tokens for your wallet...',\n isTyping: false,\n }}\n />\n ) : showFaucetSuccess ? (\n <>\n <div className=\"text-green-500 text-5xl mb-4 n1-ww-animate-fade-up\">✓</div>\n <div className=\"space-y-2 text-center\">\n <h3 className=\"text-xl text-white font-semibold\">\n Tokens Obtained Successfully\n </h3>\n <p className=\"text-sm text-green-400\">\n Your wallet has been funded with testnet tokens.\n </p>\n <p className=\"text-sm text-neutral-400 mt-2\">\n Please wait while your balance updates...\n </p>\n </div>\n </>\n ) : faucetError ? (\n <>\n <div className=\"text-red-500 text-5xl mb-4 n1-ww-animate-fade-up\">⚠️</div>\n <div className=\"space-y-2 text-center\">\n <h3 className=\"text-xl text-white font-semibold\">\n Failed to Get Tokens\n </h3>\n <p className=\"text-sm text-red-400\">\n {faucetError}\n </p>\n <button\n onClick={requestTestnetTokens}\n className=\"mt-4 px-4 py-2 bg-n1-ww-main text-white rounded-sm hover:bg-n1-ww-main/90 transition-colors\"\n >\n Try Again\n </button>\n </div>\n </>\n ) : null}\n </div>\n )}\n\n <h2 className=\"text-xl text-white font-semibold mb-6 text-center\">\n Enter Amount\n </h2>\n\n {/* Amount Input */}\n <div className=\"space-y-6\">\n {/* Token Selection and Amount Input */}\n <div className=\"relative border-2 border-n1-ww-border bg-n1-ww-gray-900 rounded-sm p-0 overflow-hidden n1-ww-animate-fade-up\" style={{ animationDelay: '0.1s' }}>\n {/* Token Selection Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-n1-ww-border bg-black/10\">\n <div className=\"flex items-center space-x-3\">\n <div className=\"w-8 h-8 rounded-full overflow-hidden bg-n1-ww-gray-800 flex items-center justify-center shadow-sm\">\n <ImageWithFallback\n src={tokenLogo}\n alt={tokenSymbol}\n width={24}\n height={24}\n fallbackText={tokenSymbol.charAt(0)}\n fallbackClassName=\"w-6 h-6 rounded-full flex items-center justify-center\"\n fallbackBgColor=\"bg-blue-900\"\n fallbackTextColor=\"text-blue-300\"\n />\n </div>\n <span className=\"text-white font-medium\">\n {tokenSymbol}\n </span>\n </div>\n <div className=\"text-xs rounded-sm bg-n1-ww-gray-800 px-2 py-1 text-n1-ww-gray-300\">\n Fixed Amount\n </div>\n </div>\n\n {isTestnet && (\n <div className=\"mb-4 w-full flex items-center justify-center\">\n <div className=\"bg-yellow-900/40 border border-n1-ww-border text-yellow-200 rounded px-3 py-2 text-sm text-center max-w-xl mx-auto shadow-sm\">\n <span className=\"font-semibold\">Testnet Only:</span> Please make sure your wallet is set to <span className=\"font-semibold\">testnet mode</span> before proceeding. <a href=\"https://docs.phantom.com/developer-powertools/testnet-mode\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"underline text-yellow-200 hover:text-yellow-100 transition-colors\">Learn how to switch to testnet</a>.\n </div>\n </div>\n )}\n\n {/* Amount Input - Hardcoded to 100 */}\n <div className=\"relative p-6 flex flex-col items-center\">\n <div className=\"relative flex items-baseline justify-center w-full\">\n <span className=\"text-4xl font-bold text-white mr-1 n1-ww-animate-fade-up\" style={{ animationDelay: '0.2s' }}>\n {amount}\n </span>\n <span className=\"text-xl text-neutral-400 ml-1 n1-ww-animate-fade-up\" style={{ animationDelay: '0.3s' }}>\n {tokenSymbol}\n </span>\n </div>\n\n {/* Decorative element */}\n <div className=\"w-16 h-1 bg-n1-ww-gray-800 rounded-full mt-4 mb-2\"></div>\n\n {/* Balance Display */}\n <div className=\"flex justify-center items-center text-sm mt-2 w-full n1-ww-animate-fade-up\" style={{ animationDelay: '0.4s' }}>\n <span className=\"text-neutral-400\">\n Balance: {formattedBalance} {tokenSymbol}\n </span>\n </div>\n </div>\n </div>\n\n {/* Error Message */}\n {context.depositError && (\n <div className=\"bg-red-900/30 text-red-400 p-3 rounded-sm text-sm border border-n1-ww-border n1-ww-animate-fade-up\" style={{ animationDelay: '0.5s' }}>\n {context.depositError}\n </div>\n )}\n\n {/* Continue Button */}\n <button\n onClick={startDeposit}\n disabled={!isValidAmount}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`\n group relative w-full overflow-hidden rounded-sm border-2 bg-neutral-950 py-4 text-center\n transition-all duration-300 ${ANIMATION_EASE} n1-ww-animate-fade-up\n ${isValidAmount\n ? 'cursor-pointer border-n1-ww-border hover:border-n1-ww-border'\n : 'cursor-not-allowed border-n1-ww-border opacity-50'\n }\n `}\n style={{\n transform: isHovered && isValidAmount ? 'scale(0.99)' : 'scale(1)',\n animationDelay: '0.6s'\n }}\n >\n <span\n className={`\n text-base font-medium tracking-wide transition-colors duration-300 ${ANIMATION_EASE}\n ${isValidAmount\n ? 'text-n1-ww-gray-300 group-hover:text-white'\n : 'text-n1-ww-gray-600'\n }\n `}\n >\n Continue\n </span>\n </button>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"03-AmountInputScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/03-AmountInputScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Connection, LAMPORTS_PER_SOL, PublicKey } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { SolanaLogo } from \"../../../components/logos\";\nimport { getSolanaRpcUrl, SolanaNetwork } from \"../../../config/solana\";\nimport { useN1WalletContext } from \"../../../Provider/hooks\";\nimport { logger } from \"../../../utils/logger\";\nimport { useDepositContext } from \"../context/DepositContext\";\nimport { useFlowStateContext } from \"../context/FlowContext\";\nimport { formatAmount, isNordConfigured } from \"../utils/nordUtils\";\n\ninterface AmountInputScreenProps {\n}\n\nconst USDC_MINT_BY_NETWORK: Record<SolanaNetwork, string> = {\n [SolanaNetwork.MAINNET]: \"EPjFWdd5AufqSSqeM2qN1xzybapC8hEki3H6KNozN8n\",\n [SolanaNetwork.TESTNET]: \"Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ\",\n [SolanaNetwork.DEVNET]: \"Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ\",\n};\n\nconst GAS_FEE_LAMPORTS = 5_000; // ~0.000005 SOL\nconst BALANCE_REFRESH_MS = 20_000;\nconst DEFAULT_AMOUNT = \"100\";\nconst DEFAULT_MIN_DEPOSIT = 5;\n\ninterface WalletBalanceState {\n usdc: number | null;\n sol: number | null;\n loading: boolean;\n error: string | null;\n}\n\nconst INITIAL_BALANCE_STATE: WalletBalanceState = {\n usdc: null,\n sol: null,\n loading: false,\n error: null,\n};\n\nexport function AmountInputScreen({}: AmountInputScreenProps) {\n const { context } = useFlowStateContext();\n const { amount, updateAmount, startDeposit } = useDepositContext();\n const { nord, address } = useN1WalletContext();\n\n const [tokenSymbol, setTokenSymbol] = useState(\"USDC\");\n const [tokenDecimals, setTokenDecimals] = useState(6);\n const [walletBalances, setWalletBalances] = useState<WalletBalanceState>(\n INITIAL_BALANCE_STATE\n );\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (!amount) {\n updateAmount(DEFAULT_AMOUNT);\n }\n }, [amount, updateAmount]);\n const selectedChainName = context.selectedChain || \"Solana\";\n const selectedNetwork = useMemo<SolanaNetwork>(() => {\n const configuredNetwork = context.selectedChainNetwork as\n | SolanaNetwork\n | undefined;\n if (\n configuredNetwork &&\n Object.values(SolanaNetwork).includes(configuredNetwork)\n ) {\n return configuredNetwork;\n }\n return SolanaNetwork.MAINNET;\n }, [context.selectedChainNetwork]);\n\n const fallbackMintForNetwork = useMemo(\n () =>\n USDC_MINT_BY_NETWORK[selectedNetwork] ??\n USDC_MINT_BY_NETWORK[SolanaNetwork.MAINNET],\n [selectedNetwork]\n );\n const [tokenMintAddress, setTokenMintAddress] = useState(\n fallbackMintForNetwork\n );\n\n useEffect(() => {\n setTokenMintAddress(fallbackMintForNetwork);\n }, [fallbackMintForNetwork]);\n\n useEffect(() => {\n if (nord && isNordConfigured(nord)) {\n try {\n const usdcToken =\n nord.tokens.find((t: any) => t.symbol === \"USDC\") || nord.tokens[0];\n if (usdcToken) {\n setTokenSymbol(usdcToken.symbol);\n setTokenDecimals(usdcToken.decimals);\n setTokenMintAddress((prev) => usdcToken.mintAddr ?? prev);\n }\n } catch (error) {\n logger.warn(\"Error getting token information from Nord:\", error);\n }\n }\n }, [nord]);\n\n const minDeposit = useMemo(() => {\n if (!nord || !isNordConfigured(nord) || !tokenMintAddress) {\n return DEFAULT_MIN_DEPOSIT;\n }\n try {\n // @ts-ignore\n const mintInfo = nord.protonClient?.mintInfo?.get(tokenMintAddress);\n if (mintInfo?.minDeposit) {\n const minDepositUnits = Number(mintInfo.minDeposit);\n const divisor = 10 ** tokenDecimals;\n if (Number.isFinite(minDepositUnits) && divisor > 0) {\n return minDepositUnits / divisor;\n }\n }\n } catch (error) {\n logger.warn(\"Unable to derive min deposit from Nord config\", error);\n }\n return DEFAULT_MIN_DEPOSIT;\n }, [nord, tokenMintAddress, tokenDecimals]);\n\n const fetchBalances = useCallback(\n async (showSpinner: boolean = true) => {\n if (!address) {\n if (isMountedRef.current) {\n setWalletBalances(INITIAL_BALANCE_STATE);\n }\n return;\n }\n\n if (showSpinner) {\n setWalletBalances((prev) => ({\n ...prev,\n loading: true,\n error: null,\n }));\n }\n\n try {\n const rpcEndpoint = getSolanaRpcUrl();\n const connection = new Connection(rpcEndpoint, \"confirmed\");\n const ownerKey = new PublicKey(address);\n\n const [solLamports, tokenAccounts] = await Promise.all([\n connection.getBalance(ownerKey),\n connection.getParsedTokenAccountsByOwner(ownerKey, {\n mint: new PublicKey(tokenMintAddress),\n }),\n ]);\n\n const usdcTotal = tokenAccounts.value.reduce((total, { account }) => {\n const info = account.data.parsed?.info;\n const tokenAmount = info?.tokenAmount;\n if (!tokenAmount) {\n return total;\n }\n const uiAmount =\n typeof tokenAmount.uiAmount === \"number\"\n ? tokenAmount.uiAmount\n : parseFloat(tokenAmount.uiAmountString ?? \"0\");\n return total + (Number.isFinite(uiAmount) ? uiAmount : 0);\n }, 0);\n\n if (!isMountedRef.current) {\n return;\n }\n\n setWalletBalances({\n usdc: usdcTotal,\n sol: solLamports / LAMPORTS_PER_SOL,\n loading: false,\n error: null,\n });\n } catch (error) {\n logger.warn(\"Failed to load wallet balances\", error);\n if (!isMountedRef.current) {\n return;\n }\n setWalletBalances((prev) => ({\n ...prev,\n loading: false,\n error: \"Unable to fetch wallet balances. Please try again.\",\n }));\n }\n },\n [address, tokenMintAddress]\n );\n\n useEffect(() => {\n fetchBalances();\n const interval = setInterval(() => {\n fetchBalances(false);\n }, BALANCE_REFRESH_MS);\n\n return () => clearInterval(interval);\n }, [fetchBalances]);\n\n\n\n const isSolana = selectedChainName.toLowerCase().includes(\"solana\");\n const gasFeeInSol = GAS_FEE_LAMPORTS / LAMPORTS_PER_SOL;\n const gasFeeUSD = \"~$0.0012\";\n const minDepositDisplay = minDeposit.toString();\n\n const formattedBalance =\n walletBalances.usdc == null\n ? walletBalances.loading\n ? \"Loading...\"\n : \"—\"\n : formatAmount(walletBalances.usdc, tokenDecimals);\n\n const formattedSolBalance =\n walletBalances.sol == null\n ? walletBalances.loading\n ? \"Loading...\"\n : \"—\"\n : walletBalances.sol.toFixed(4);\n\n const numericAmount = Number(amount || 0);\n const hasEnteredAmount = Number.isFinite(numericAmount) && numericAmount > 0;\n const meetsMinDeposit = numericAmount >= minDeposit;\n const hasSufficientUsdc =\n walletBalances.usdc == null ? false : numericAmount <= walletBalances.usdc;\n const hasSufficientSol =\n walletBalances.sol == null ? false : walletBalances.sol >= gasFeeInSol;\n\n const validationError = useMemo(() => {\n if (!address) {\n return \"Connect a wallet to continue.\";\n }\n\n if (walletBalances.error) {\n return walletBalances.error;\n }\n\n if (!hasEnteredAmount) {\n return \"Enter an amount to continue.\";\n }\n\n if (walletBalances.loading || walletBalances.usdc == null || walletBalances.sol == null) {\n return null;\n }\n\n if (!meetsMinDeposit) {\n return `Minimum deposit is ${minDeposit} ${tokenSymbol}.`;\n }\n\n if (!hasSufficientUsdc) {\n return `Insufficient ${tokenSymbol} balance for this deposit.`;\n }\n\n if (!hasSufficientSol) {\n return \"Not enough SOL to cover network fees.\";\n }\n\n return null;\n }, [\n address,\n walletBalances.error,\n walletBalances.loading,\n walletBalances.usdc,\n walletBalances.sol,\n hasEnteredAmount,\n hasSufficientSol,\n hasSufficientUsdc,\n meetsMinDeposit,\n tokenSymbol,\n minDeposit,\n ]);\n\n const isValidAmount = !walletBalances.loading && validationError === null;\n\n const handleUseMax = () => {\n if (walletBalances.usdc == null || walletBalances.usdc <= 0) {\n return;\n }\n updateAmount(walletBalances.usdc.toFixed(tokenDecimals));\n };\n\n return (\n <div className=\"overflow-hidden relative\">\n\n {/* Header Section */}\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-sm text-white font-medium\">Deposit From</h2>\n <div className=\"flex items-center space-x-2 rounded-md bg-n1-ww-border h-5 justify-center p-1\">\n {isSolana ? (\n <div className=\"rounded-full flex items-center justify-center bg-black h-3 w-3\">\n <SolanaLogo width={6} height={6} />\n </div>\n ) : (\n <div className=\"w-4 h-4 rounded-full bg-n1-ww-gray-600\"></div>\n )}\n <span className=\"text-white text-xs font-medium\">\n {selectedChainName}\n </span>\n </div>\n </div>\n\n {/* Deposit Information Section */}\n <div className=\"space-y-3 mb-4 text-white text-xs font-light\">\n <div className=\"flex items-center justify-between\">\n <span>Available Balance:</span>\n <span>\n {formattedBalance} {tokenSymbol}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>SOL Balance:</span>\n <span>{formattedSolBalance} SOL</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>Minimum Deposit:</span>\n <span>\n {minDepositDisplay} {tokenSymbol}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>Gas Fee:</span>\n <span>\n {gasFeeInSol.toFixed(6)} SOL ({gasFeeUSD})\n </span>\n </div>\n </div>\n\n <div className=\"h-px bg-n1-ww-border mb-4\"></div>\n\n {/* Amount Input Section */}\n <div className=\"mb-4 flex justify-between w-full\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex items-center justify-between border border-n1-ww-gray-400 bg-n1-ww-gray-600 flex-1 w-[292px] rounded h-8 px-2\">\n <span className=\"text-white text-sm font-medium\">Amount</span>\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"number\"\n step=\"0.000001\"\n value={amount}\n onChange={(e) => updateAmount(e.target.value)}\n className=\"text-white font-light text-xs text-right bg-transparent border-none outline-none focus:ring-2 focus:ring-n1-ww-main focus:ring-offset-0 rounded px-1\"\n />\n <button className=\"border border-n1-ww-gray-400 h-5 text-white text-xs font-light flex items-center justify-center px-1 rounded transition-colors\">\n {tokenSymbol}\n </button>\n </div>\n </div>\n </div>\n <button\n className=\"border border-n1-ww-gray-400 bg-n1-ww-gray-600 rounded text-white text-sm font-medium px-2 h-8 hover:bg-n1-ww-gray-800 transition-colors w-[68px]\"\n onClick={handleUseMax}\n type=\"button\"\n >\n Max\n </button>\n </div>\n\n {validationError && (\n <p className=\"mb-2 text-xs text-red-400\">{validationError}</p>\n )}\n\n {/* Deposit Button */}\n <button\n onClick={startDeposit}\n disabled={!isValidAmount}\n className={`\n w-full h-8 rounded border bg-transparent flex font-medium items-center justify-center\n transition-all duration-200 transform\n ${\n isValidAmount\n ? \"border-n1-ww-main hover:bg-n1-ww-gray-900 cursor-pointer\"\n : \"border-n1-ww-border opacity-50 cursor-not-allowed\"\n }\n `}\n >\n <span\n className={`\n font-medium text-sm opacity-90\n ${isValidAmount ? \"text-n1-ww-main\" : \"text-n1-ww-gray-600\"}\n `}\n >\n Deposit\n </span>\n </button>\n </div>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
2
3
  import { WaitingMessage } from '../components/WaitingMessage';
3
- import { useState, useEffect } from 'react';
4
4
  export function DepositProgressScreen() {
5
5
  var _a = useState(0), _elapsedTime = _a[0], setElapsedTime = _a[1];
6
6
  var maxTime = 300; // Maximum time in seconds
@@ -24,6 +24,6 @@ export function DepositProgressScreen() {
24
24
  // Clean up timer on unmount
25
25
  return function () { return clearInterval(timer); };
26
26
  }, []);
27
- return (_jsx("div", { className: "overflow-hidden relative", children: _jsx(WaitingMessage, { message: message, loaderSize: 52 }) }));
27
+ return (_jsx("div", { className: "overflow-hidden relative", children: _jsx(WaitingMessage, { message: message, animation: "transfer" }) }));
28
28
  }
29
29
  //# sourceMappingURL=04-DepositProgressScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"04-DepositProgressScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/04-DepositProgressScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,UAAU,qBAAqB;IAC7B,IAAA,KAAiC,QAAQ,CAAC,CAAC,CAAC,EAA3C,YAAY,QAAA,EAAE,cAAc,QAAe,CAAC;IACnD,IAAM,OAAO,GAAG,GAAG,CAAC,CAAC,0BAA0B;IAE/C,IAAM,OAAO,GAAG;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE,2CAA2C;QACrD,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,oCAAoC;IACpC,SAAS,CAAC;QACR,IAAM,KAAK,GAAG,WAAW,CAAC;YACxB,cAAc,CAAC,UAAC,QAAQ;gBACtB,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;oBACxB,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,OAAO,QAAQ,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,4BAA4B;QAC5B,OAAO,cAAM,OAAA,aAAa,CAAC,KAAK,CAAC,EAApB,CAAoB,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,EAAE,GACd,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { WaitingMessage } from '../components/WaitingMessage';\nimport { useState, useEffect } from 'react';\n\nexport function DepositProgressScreen() {\n const [_elapsedTime, setElapsedTime] = useState(0);\n const maxTime = 300; // Maximum time in seconds\n\n const message = {\n visible: true,\n title: 'Processing Deposit',\n subtitle: 'Please wait while we process your deposit',\n isTyping: false,\n };\n\n // Start timer when component mounts\n useEffect(() => {\n const timer = setInterval(() => {\n setElapsedTime((prevTime) => {\n if (prevTime >= maxTime) {\n clearInterval(timer);\n return maxTime;\n }\n return prevTime + 1;\n });\n }, 1000);\n\n // Clean up timer on unmount\n return () => clearInterval(timer);\n }, []);\n\n return (\n <div className=\"overflow-hidden relative\">\n <WaitingMessage\n message={message}\n loaderSize={52}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"04-DepositProgressScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/04-DepositProgressScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,UAAU,qBAAqB;IAC7B,IAAA,KAAiC,QAAQ,CAAC,CAAC,CAAC,EAA3C,YAAY,QAAA,EAAE,cAAc,QAAe,CAAC;IACnD,IAAM,OAAO,GAAG,GAAG,CAAC,CAAC,0BAA0B;IAE/C,IAAM,OAAO,GAAG;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE,2CAA2C;QACrD,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,oCAAoC;IACpC,SAAS,CAAC;QACR,IAAM,KAAK,GAAG,WAAW,CAAC;YACxB,cAAc,CAAC,UAAC,QAAQ;gBACtB,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;oBACxB,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,OAAO,QAAQ,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,4BAA4B;QAC5B,OAAO,cAAM,OAAA,aAAa,CAAC,KAAK,CAAC,EAApB,CAAoB,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,UAAU,GACpB,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { WaitingMessage } from '../components/WaitingMessage';\n\nexport function DepositProgressScreen() {\n const [_elapsedTime, setElapsedTime] = useState(0);\n const maxTime = 300; // Maximum time in seconds\n\n const message = {\n visible: true,\n title: 'Processing Deposit',\n subtitle: 'Please wait while we process your deposit',\n isTyping: false,\n };\n\n // Start timer when component mounts\n useEffect(() => {\n const timer = setInterval(() => {\n setElapsedTime((prevTime) => {\n if (prevTime >= maxTime) {\n clearInterval(timer);\n return maxTime;\n }\n return prevTime + 1;\n });\n }, 1000);\n\n // Clean up timer on unmount\n return () => clearInterval(timer);\n }, []);\n\n return (\n <div className=\"overflow-hidden relative\">\n <WaitingMessage\n message={message}\n animation=\"transfer\"\n />\n </div>\n );\n}"]}