@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
@@ -37,12 +37,13 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
38
38
  import { useN1WalletContext, useN1WalletInternalContext, } from '../../../Provider/hooks';
39
39
  import { useFlowStateContext } from '../context/FlowContext';
40
+ import { logger } from '../../../utils/logger';
40
41
  /**
41
42
  * Centralizes the faucet orchestration logic so it can be toggled from the widget entry point.
42
43
  */
43
44
  export function useTestnetFaucet(_a) {
44
45
  var _this = this;
45
- var enabled = _a.enabled, balance = _a.balance, minDeposit = _a.minDeposit;
46
+ var enabled = _a.enabled, balance = _a.balance, minDeposit = _a.minDeposit, onBalanceRefresh = _a.onBalanceRefresh;
46
47
  var address = useN1WalletContext().address;
47
48
  var faucetUrl = useN1WalletInternalContext().faucetUrl;
48
49
  var context = useFlowStateContext().context;
@@ -53,10 +54,28 @@ export function useTestnetFaucet(_a) {
53
54
  var _d = useState(false), tokensObtained = _d[0], setTokensObtained = _d[1];
54
55
  var _e = useState(false), showFaucetSuccess = _e[0], setShowFaucetSuccess = _e[1];
55
56
  var refreshBalance = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
57
+ var error_1;
56
58
  return __generator(this, function (_a) {
57
- return [2 /*return*/];
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
+ }
58
77
  });
59
- }); }, []);
78
+ }); }, [onBalanceRefresh]);
60
79
  var shouldShowFaucet = useMemo(function () {
61
80
  return enabled && Boolean(faucetUrl) && !tokensObtained;
62
81
  }, [enabled, faucetUrl, tokensObtained]);
@@ -68,7 +87,7 @@ export function useTestnetFaucet(_a) {
68
87
  showFaucetSuccess);
69
88
  }, [shouldShowFaucet, isFaucetLoading, faucetError, showFaucetSuccess]);
70
89
  var requestTestnetTokens = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
71
- var response, errorData, error_1;
90
+ var response, errorData, error_2;
72
91
  return __generator(this, function (_a) {
73
92
  switch (_a.label) {
74
93
  case 0:
@@ -110,9 +129,9 @@ export function useTestnetFaucet(_a) {
110
129
  setShowFaucetSuccess(false);
111
130
  return [3 /*break*/, 9];
112
131
  case 7:
113
- error_1 = _a.sent();
114
- console.error('Faucet error:', error_1);
115
- setFaucetError(error_1 instanceof Error ? error_1.message : 'Failed to request tokens');
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');
116
135
  faucetFiredRef.current = false;
117
136
  return [3 /*break*/, 9];
118
137
  case 8:
@@ -1 +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';\n\ninterface UseTestnetFaucetParams {\n enabled: boolean;\n balance: number;\n minDeposit: number;\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}: 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 // TODO: implement when balance fetching is wired up\n }, []);\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
+ {"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, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
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
- // If connecting, show loading state
16
- if (isConnecting) {
17
- return (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 space-y-6", children: [_jsx(LoadingSquares, {}), _jsxs("div", { className: "space-y-2 text-center w-[300px]", children: [_jsx("h3", { className: "text-xl text-n1-ww-gray-800 dark:text-white font-semibold", children: "Connecting Wallet" }), _jsx("p", { className: "text-sm text-n1-ww-gray-600 dark:text-neutral-400", children: "Please approve the connection request in your wallet" })] })] }));
18
- }
19
- // If not connecting, show connect options (exactly like NTS flow)
20
- return (_jsx("div", { className: "p-6 overflow-hidden relative", children: _jsxs("div", { className: "space-y-4", children: [_jsx("button", { onClick: connectWallet, onMouseEnter: function () { return setIsHovered('wallet'); }, 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-pointer border-n1-ww-gray-200 dark:border-n1-ww-gray-800 hover:border-n1-ww-gray-400 dark:hover:border-white/60\n "), style: {
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,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,UAAU,mBAAmB;IAC3B,IAAA,KAAkC,uBAAuB,EAAE,EAAzD,YAAY,kBAAA,EAAE,aAAa,mBAA8B,CAAC;IAC5D,IAAA,KAA4B,QAAQ,CAExC,IAAI,CAAC,EAFA,SAAS,QAAA,EAAE,YAAY,QAEvB,CAAC;IAGR,SAAS,CAAC;QACR,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,oCAAoC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CACL,eAAK,SAAS,EAAC,2DAA2D,aACxE,KAAC,cAAc,KAAG,EAClB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,2DAA2D,kCAEpE,EACL,YAAG,SAAS,EAAC,mDAAmD,qEAE5D,IACA,IACF,CACP,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,OAAO,CACL,cAAK,SAAS,EAAC,8BAA8B,YAC3C,eAAK,SAAS,EAAC,WAAW,aACxB,iBACE,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,QAAQ,CAAC,EAAtB,CAAsB,EAC1C,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,SAAS,EAAE,kLAEqB,cAAc,qJAE7C,EACD,KAAK,EAAE;wBACL,SAAS,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;qBAC/D,YAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,cAAK,SAAS,EAAC,mBAAmB,YAEhC,eACE,SAAS,EAAE,oGAC+D,cAAc,4IAEzF,qCAGM,GACH,GACF,GACC,EAET,iBACE,QAAQ,QACR,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,QAAQ,CAAC,EAAtB,CAAsB,EAC1C,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,SAAS,EAAE,kLAEqB,cAAc,6GAE7C,YAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,cAAK,SAAS,EAAC,mBAAmB,YAChC,eAAM,SAAS,EAAC,+EAA+E,4CAExF,GACH,GACF,GACC,EAET,iBACE,QAAQ,QACR,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,OAAO,CAAC,EAArB,CAAqB,EACzC,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,SAAS,EAAE,kLAEqB,cAAc,6GAE7C,YAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,cAAK,SAAS,EAAC,mBAAmB,YAChC,eAAM,SAAS,EAAC,+EAA+E,2CAExF,GACH,GACF,GACC,IACL,GACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\n// import { IoMdWallet } from 'react-icons/io';\nimport { LoadingSquares } from '../components/LoadingSquares';\nimport { ANIMATION_EASE } from '../constants';\nimport { useWalletConnectContext } from '../context/WalletConnectContext';\n\nexport function ConnectWalletScreen() {\n const { isConnecting, connectWallet } = useWalletConnectContext();\n const [isHovered, setIsHovered] = useState<\n 'wallet' | 'google' | 'email' | null\n >(null);\n\n\n useEffect(() => {\n if (!isConnecting) {\n connectWallet();\n }\n }, [isConnecting]);\n\n // If connecting, show loading state\n if (isConnecting) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 space-y-6\">\n <LoadingSquares />\n <div className=\"space-y-2 text-center w-[300px]\">\n <h3 className=\"text-xl text-n1-ww-gray-800 dark:text-white font-semibold\">\n Connecting Wallet\n </h3>\n <p className=\"text-sm text-n1-ww-gray-600 dark:text-neutral-400\">\n Please approve the connection request in your wallet\n </p>\n </div>\n </div>\n );\n }\n\n // If not connecting, show connect options (exactly like NTS flow)\n return (\n <div className=\"p-6 overflow-hidden relative\">\n <div className=\"space-y-4\">\n <button\n onClick={connectWallet}\n onMouseEnter={() => setIsHovered('wallet')}\n onMouseLeave={() => setIsHovered(null)}\n 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 ${ANIMATION_EASE}\n cursor-pointer border-n1-ww-gray-200 dark:border-n1-ww-gray-800 hover:border-n1-ww-gray-400 dark:hover:border-white/60\n `}\n style={{\n transform: isHovered === 'wallet' ? 'scale(0.99)' : 'scale(1)',\n }}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center\">\n {/* <IoMdWallet className=\"w-5 h-5 text-n1-ww-gray-500 dark:text-neutral-400 group-hover:text-n1-ww-gray-900 dark:group-hover:text-white transition-colors duration-300\" /> */}\n <span\n className={`\n ml-2 text-base font-medium tracking-wide transition-colors duration-300 ${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 `}\n >\n Continue with Wallet\n </span>\n </div>\n </div>\n </button>\n\n <button\n disabled\n onMouseEnter={() => setIsHovered('google')}\n onMouseLeave={() => setIsHovered(null)}\n 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 ${ANIMATION_EASE}\n cursor-not-allowed border-n1-ww-gray-200 dark:border-n1-ww-gray-800 opacity-50\n `}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center\">\n <span className=\"text-base font-medium tracking-wide text-n1-ww-gray-500 dark:text-neutral-400\">\n Continue with Google (soon)\n </span>\n </div>\n </div>\n </button>\n\n <button\n disabled\n onMouseEnter={() => setIsHovered('email')}\n onMouseLeave={() => setIsHovered(null)}\n 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 ${ANIMATION_EASE}\n cursor-not-allowed border-n1-ww-gray-200 dark:border-n1-ww-gray-800 opacity-50\n `}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center\">\n <span className=\"text-base font-medium tracking-wide text-n1-ww-gray-500 dark:text-neutral-400\">\n Continue with Email (soon)\n </span>\n </div>\n </div>\n </button>\n </div>\n </div>\n );\n}\n"]}
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"]}
@@ -1,66 +1,115 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import Logo from '../../../components/Logo';
4
- import { SolanaLogo } from '../../../components/logos';
5
- import { SolanaNetwork } from '../../../config/solana';
6
- import { logger } from '../../../utils/logger';
7
- import { ChainButton } from '../components/ChainButton';
8
- import { EVMChainsButton } from '../components/EVMChainsButton';
9
- import { MoreButton } from '../components/MoreButton';
10
- import { useFlowStateContext } from '../context/FlowContext';
11
- import { FlowState } from '../types';
12
- // Custom N1Logo wrapper that responds to the group hover state
13
- var N1Logo = function (_a) {
14
- var _b = _a.size, size = _b === void 0 ? 38 : _b;
15
- return (_jsx("div", { className: "text-white group-hover:text-red-500 transition-colors duration-200", children: _jsx(Logo, { size: size }) }));
16
- };
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";
17
10
  export function ChainSelectionScreen() {
18
- var transition = useFlowStateContext().transition;
19
- var _a = useState(false), isLoading = _a[0], setIsLoading = _a[1];
20
- // Only allow devnet, gray out other chains
21
- var handleChainSelect = function (chainId) {
22
- logger.debug('Chain selected in ChainSelectionScreen:', chainId);
23
- // Only allow devnet to be selected
24
- if (chainId === 'devnet') {
25
- setIsLoading(true);
26
- transition(FlowState.AMOUNT_INPUT, { selectedChain: chainId });
27
- }
28
- else {
29
- logger.debug('Chain not allowed:', chainId);
30
- // Could show a toast or message here
31
- }
32
- };
33
- // Define the 4 options as requested
34
- var chainsWithNetworkInfo = [
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 [
35
15
  {
36
- id: 'devnet',
37
- name: 'Devnet',
38
- logo: (_jsx("div", { className: "flex items-center justify-center", style: { width: 48, height: 48 }, children: _jsx(N1Logo, {}) })),
39
- network: SolanaNetwork.DEVNET,
40
- disabled: false, // Only devnet is clickable
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,
41
23
  },
42
24
  {
43
- id: 'solana',
44
- name: 'Solana',
45
- logo: (_jsx("div", { className: "flex items-center justify-center", style: { width: 48, height: 48 }, children: _jsx(SolanaLogo, { width: 36, height: 36 }) })),
46
- network: SolanaNetwork.MAINNET,
47
- disabled: true,
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,
48
32
  },
49
33
  {
50
- id: 'evm-chains',
51
- name: 'EVM Chains',
52
- logo: '', // Not needed as we're using EVMChainsButton
53
- network: '', // Empty string instead of null
54
- disabled: true,
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,
55
41
  },
56
42
  {
57
- id: 'more',
58
- name: 'More',
59
- logo: '', // Not needed as we're using MoreButton
60
- network: '', // Empty string instead of null
61
- disabled: true,
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,
62
50
  },
63
- ];
64
- return (_jsx("div", { className: "overflow-hidden relative", children: isLoading ? (_jsx("div", { className: "flex justify-center items-center py-8", children: _jsx("div", { className: "n1-ww-animate-spin rounded-full h-8 w-8 border-b-2 border-n1-ww-border" }) })) : (_jsxs("div", { className: "space-y-8", children: [_jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsx(ChainButton, { chain: chainsWithNetworkInfo[0], onClick: function () { return handleChainSelect(chainsWithNetworkInfo[0].id); }, disabled: chainsWithNetworkInfo[0].disabled }, chainsWithNetworkInfo[0].id), _jsx(ChainButton, { chain: chainsWithNetworkInfo[1], onClick: function () { return handleChainSelect(chainsWithNetworkInfo[1].id); }, disabled: chainsWithNetworkInfo[1].disabled }, chainsWithNetworkInfo[1].id)] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsx(EVMChainsButton, { chain: chainsWithNetworkInfo[2], onClick: function () { return handleChainSelect(chainsWithNetworkInfo[2].id); }, disabled: chainsWithNetworkInfo[2].disabled }, chainsWithNetworkInfo[2].id), _jsx(MoreButton, { chain: chainsWithNetworkInfo[3], onClick: function () { return handleChainSelect(chainsWithNetworkInfo[3].id); }, disabled: chainsWithNetworkInfo[3].disabled }, chainsWithNetworkInfo[3].id)] })] })) }));
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" }) })] })] }) }));
65
114
  }
66
115
  //# sourceMappingURL=02-ChainSelectionScreen.js.map
@@ -1 +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 { useState } from 'react';\nimport Logo from '../../../components/Logo';\nimport { SolanaLogo } from '../../../components/logos';\nimport { SolanaNetwork } from '../../../config/solana';\nimport { logger } from '../../../utils/logger';\nimport { ChainButton } from '../components/ChainButton';\nimport { EVMChainsButton } from '../components/EVMChainsButton';\nimport { MoreButton } from '../components/MoreButton';\nimport { useFlowStateContext } from '../context/FlowContext';\nimport { FlowState } from '../types';\n\n// Custom N1Logo wrapper that responds to the group hover state\nconst N1Logo = ({ size = 38 }) => (\n <div className=\"text-white group-hover:text-red-500 transition-colors duration-200\">\n <Logo size={size} />\n </div>\n);\n\nexport function ChainSelectionScreen() {\n const { transition } = useFlowStateContext();\n const [isLoading, setIsLoading] = useState(false);\n\n // Only allow devnet, gray out other chains\n const handleChainSelect = (chainId: string) => {\n logger.debug('Chain selected in ChainSelectionScreen:', chainId);\n\n // Only allow devnet to be selected\n if (chainId === 'devnet') {\n setIsLoading(true);\n transition(FlowState.AMOUNT_INPUT, { selectedChain: chainId });\n } else {\n logger.debug('Chain not allowed:', chainId);\n // Could show a toast or message here\n }\n };\n\n // Define the 4 options as requested\n const chainsWithNetworkInfo = [\n {\n id: 'devnet',\n name: 'Devnet',\n logo: (\n <div\n className=\"flex items-center justify-center\"\n style={{ width: 48, height: 48 }}\n >\n <N1Logo />\n </div>\n ),\n network: SolanaNetwork.DEVNET,\n disabled: false, // Only devnet is clickable\n },\n {\n id: 'solana',\n name: 'Solana',\n logo: (\n <div\n className=\"flex items-center justify-center\"\n style={{ width: 48, height: 48 }}\n >\n <SolanaLogo width={36} height={36} />\n </div>\n ),\n network: SolanaNetwork.MAINNET,\n disabled: true,\n },\n {\n id: 'evm-chains',\n name: 'EVM Chains',\n logo: '', // Not needed as we're using EVMChainsButton\n network: '', // Empty string instead of null\n disabled: true,\n },\n {\n id: 'more',\n name: 'More',\n logo: '', // Not needed as we're using MoreButton\n network: '', // Empty string instead of null\n disabled: true,\n },\n ];\n\n return (\n <div className=\"overflow-hidden relative\">\n\n {isLoading ? (\n <div className=\"flex justify-center items-center py-8\">\n <div className=\"n1-ww-animate-spin rounded-full h-8 w-8 border-b-2 border-n1-ww-border\"></div>\n </div>\n ) : (\n <div className=\"space-y-8\">\n {/* First row: Devnet, Solana */}\n <div className=\"grid grid-cols-2 gap-4\">\n <ChainButton\n key={chainsWithNetworkInfo[0].id}\n chain={chainsWithNetworkInfo[0]}\n onClick={() => handleChainSelect(chainsWithNetworkInfo[0].id)}\n disabled={chainsWithNetworkInfo[0].disabled}\n />\n <ChainButton\n key={chainsWithNetworkInfo[1].id}\n chain={chainsWithNetworkInfo[1]}\n onClick={() => handleChainSelect(chainsWithNetworkInfo[1].id)}\n disabled={chainsWithNetworkInfo[1].disabled}\n />\n </div>\n\n {/* Second row: EVM Chains, More */}\n <div className=\"grid grid-cols-2 gap-4\">\n <EVMChainsButton\n key={chainsWithNetworkInfo[2].id}\n chain={chainsWithNetworkInfo[2]}\n onClick={() => handleChainSelect(chainsWithNetworkInfo[2].id)}\n disabled={chainsWithNetworkInfo[2].disabled}\n />\n <MoreButton\n key={chainsWithNetworkInfo[3].id}\n chain={chainsWithNetworkInfo[3]}\n onClick={() => handleChainSelect(chainsWithNetworkInfo[3].id)}\n disabled={chainsWithNetworkInfo[3].disabled}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
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"]}
@@ -1,5 +1,4 @@
1
1
  interface AmountInputScreenProps {
2
- isTestnet?: boolean;
3
2
  }
4
- export declare function AmountInputScreen({ isTestnet }: AmountInputScreenProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare function AmountInputScreen({}: AmountInputScreenProps): import("react/jsx-runtime").JSX.Element;
5
4
  export {};