@cookill/wallet-adapter 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +369 -0
- package/dist/index.cjs +183 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +137 -0
- package/dist/index.d.ts +137 -0
- package/dist/index.js +170 -0
- package/dist/index.js.map +1 -0
- package/dist/react.cjs +483 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +133 -0
- package/dist/react.d.ts +133 -0
- package/dist/react.js +465 -0
- package/dist/react.js.map +1 -0
- package/dist/standard.cjs +175 -0
- package/dist/standard.cjs.map +1 -0
- package/dist/standard.d.cts +134 -0
- package/dist/standard.d.ts +134 -0
- package/dist/standard.js +164 -0
- package/dist/standard.js.map +1 -0
- package/package.json +76 -0
package/dist/react.cjs
ADDED
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
|
|
6
|
+
// src/react.tsx
|
|
7
|
+
|
|
8
|
+
// src/index.ts
|
|
9
|
+
var NETWORKS = {
|
|
10
|
+
mainnet: {
|
|
11
|
+
chainId: "rialo:mainnet",
|
|
12
|
+
name: "Rialo Mainnet",
|
|
13
|
+
rpcUrl: "https://mainnet.rialo.io:4101",
|
|
14
|
+
wsUrl: "wss://mainnet.rialo.io:4102",
|
|
15
|
+
explorerUrl: "https://explorer.rialo.io"
|
|
16
|
+
},
|
|
17
|
+
testnet: {
|
|
18
|
+
chainId: "rialo:testnet",
|
|
19
|
+
name: "Rialo Testnet",
|
|
20
|
+
rpcUrl: "https://testnet.rialo.io:4101",
|
|
21
|
+
wsUrl: "wss://testnet.rialo.io:4102",
|
|
22
|
+
explorerUrl: "https://testnet.explorer.rialo.io"
|
|
23
|
+
},
|
|
24
|
+
devnet: {
|
|
25
|
+
chainId: "rialo:devnet",
|
|
26
|
+
name: "Rialo Devnet",
|
|
27
|
+
rpcUrl: "https://devnet.rialo.io:4101",
|
|
28
|
+
wsUrl: "wss://devnet.rialo.io:4102",
|
|
29
|
+
explorerUrl: "https://devnet.explorer.rialo.io"
|
|
30
|
+
},
|
|
31
|
+
localnet: {
|
|
32
|
+
chainId: "rialo:localnet",
|
|
33
|
+
name: "Rialo Localnet",
|
|
34
|
+
rpcUrl: "http://localhost:4101",
|
|
35
|
+
wsUrl: "ws://localhost:4102",
|
|
36
|
+
explorerUrl: "http://localhost:3000"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
function isRialoInstalled() {
|
|
40
|
+
if (typeof window === "undefined") return false;
|
|
41
|
+
return !!window.rialo?.isRialo;
|
|
42
|
+
}
|
|
43
|
+
function getRialoProvider() {
|
|
44
|
+
if (typeof window === "undefined") return void 0;
|
|
45
|
+
const rialo = window.rialo;
|
|
46
|
+
return rialo?.isRialo ? rialo : void 0;
|
|
47
|
+
}
|
|
48
|
+
function formatAddress(address, chars = 4) {
|
|
49
|
+
if (!address) return "";
|
|
50
|
+
if (address.length <= chars * 2 + 3) return address;
|
|
51
|
+
return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;
|
|
52
|
+
}
|
|
53
|
+
function formatBalance(kelvins, decimals = 4) {
|
|
54
|
+
const value = typeof kelvins === "string" ? BigInt(kelvins) : kelvins;
|
|
55
|
+
const rlo = Number(value) / 1e9;
|
|
56
|
+
return rlo.toFixed(decimals);
|
|
57
|
+
}
|
|
58
|
+
var DEFAULT_WALLETS = [
|
|
59
|
+
{
|
|
60
|
+
id: "rialo",
|
|
61
|
+
name: "Rialo Wallet",
|
|
62
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjNkVCOUE4Ii8+PHBhdGggZD0iTTggMTBIMjRWMjJIOFYxMFoiIGZpbGw9IndoaXRlIi8+PC9zdmc+",
|
|
63
|
+
downloadUrl: "https://rialo.io/wallet"
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
var WalletContext = react.createContext(null);
|
|
67
|
+
function WalletProvider({
|
|
68
|
+
children,
|
|
69
|
+
network: initialNetwork = "devnet",
|
|
70
|
+
autoConnect = true,
|
|
71
|
+
wallets: customWallets = [],
|
|
72
|
+
onConnect,
|
|
73
|
+
onDisconnect,
|
|
74
|
+
onError
|
|
75
|
+
}) {
|
|
76
|
+
const [connected, setConnected] = react.useState(false);
|
|
77
|
+
const [connecting, setConnecting] = react.useState(false);
|
|
78
|
+
const [accounts, setAccounts] = react.useState([]);
|
|
79
|
+
const [network, setNetwork] = react.useState(initialNetwork);
|
|
80
|
+
const [balance, setBalance] = react.useState(null);
|
|
81
|
+
const [selectedWallet, setSelectedWallet] = react.useState(null);
|
|
82
|
+
const [isModalOpen, setIsModalOpen] = react.useState(false);
|
|
83
|
+
const [provider, setProvider] = react.useState();
|
|
84
|
+
const wallets = [...DEFAULT_WALLETS, ...customWallets].map((w) => ({
|
|
85
|
+
...w,
|
|
86
|
+
installed: w.id === "rialo" ? isRialoInstalled() : false
|
|
87
|
+
}));
|
|
88
|
+
const activeAccount = accounts[0] || null;
|
|
89
|
+
const isInstalled = isRialoInstalled();
|
|
90
|
+
react.useEffect(() => {
|
|
91
|
+
const p = getRialoProvider();
|
|
92
|
+
setProvider(p);
|
|
93
|
+
if (p) {
|
|
94
|
+
setSelectedWallet(wallets.find((w) => w.id === "rialo") || null);
|
|
95
|
+
}
|
|
96
|
+
}, []);
|
|
97
|
+
react.useEffect(() => {
|
|
98
|
+
if (autoConnect && provider && !connected && !connecting) {
|
|
99
|
+
provider.isConnected().then((isConn) => {
|
|
100
|
+
if (isConn) {
|
|
101
|
+
handleConnect();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}, [provider, autoConnect]);
|
|
106
|
+
react.useEffect(() => {
|
|
107
|
+
if (connected && activeAccount && provider) {
|
|
108
|
+
provider.getBalance(activeAccount.address).then(setBalance).catch(console.error);
|
|
109
|
+
}
|
|
110
|
+
}, [connected, activeAccount, provider]);
|
|
111
|
+
react.useEffect(() => {
|
|
112
|
+
if (!provider) return;
|
|
113
|
+
const unsubConnect = provider.on("connect", () => {
|
|
114
|
+
setConnected(true);
|
|
115
|
+
});
|
|
116
|
+
const unsubDisconnect = provider.on("disconnect", () => {
|
|
117
|
+
setConnected(false);
|
|
118
|
+
setAccounts([]);
|
|
119
|
+
setBalance(null);
|
|
120
|
+
onDisconnect?.();
|
|
121
|
+
});
|
|
122
|
+
const unsubAccountChange = provider.on("accountChange", (data) => {
|
|
123
|
+
const { accounts: newAccounts } = data;
|
|
124
|
+
setAccounts(newAccounts.map((address) => ({ address })));
|
|
125
|
+
});
|
|
126
|
+
return () => {
|
|
127
|
+
unsubConnect();
|
|
128
|
+
unsubDisconnect();
|
|
129
|
+
unsubAccountChange();
|
|
130
|
+
};
|
|
131
|
+
}, [provider, onDisconnect]);
|
|
132
|
+
const handleConnect = react.useCallback(async () => {
|
|
133
|
+
if (!provider) {
|
|
134
|
+
const error = new Error("Rialo Wallet not installed");
|
|
135
|
+
onError?.(error);
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
setConnecting(true);
|
|
139
|
+
try {
|
|
140
|
+
const addresses = await provider.connect();
|
|
141
|
+
const walletAccounts = addresses.map((address) => ({ address }));
|
|
142
|
+
setAccounts(walletAccounts);
|
|
143
|
+
setConnected(true);
|
|
144
|
+
setIsModalOpen(false);
|
|
145
|
+
onConnect?.(walletAccounts);
|
|
146
|
+
return walletAccounts;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
onError?.(error);
|
|
149
|
+
throw error;
|
|
150
|
+
} finally {
|
|
151
|
+
setConnecting(false);
|
|
152
|
+
}
|
|
153
|
+
}, [provider, onConnect, onError]);
|
|
154
|
+
const handleDisconnect = react.useCallback(async () => {
|
|
155
|
+
if (provider) {
|
|
156
|
+
await provider.disconnect();
|
|
157
|
+
}
|
|
158
|
+
setConnected(false);
|
|
159
|
+
setAccounts([]);
|
|
160
|
+
setBalance(null);
|
|
161
|
+
onDisconnect?.();
|
|
162
|
+
}, [provider, onDisconnect]);
|
|
163
|
+
const selectWallet = react.useCallback((walletId) => {
|
|
164
|
+
const wallet = wallets.find((w) => w.id === walletId);
|
|
165
|
+
if (wallet) {
|
|
166
|
+
setSelectedWallet(wallet);
|
|
167
|
+
if (wallet.installed) {
|
|
168
|
+
handleConnect();
|
|
169
|
+
} else if (wallet.downloadUrl) {
|
|
170
|
+
window.open(wallet.downloadUrl, "_blank");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}, [wallets, handleConnect]);
|
|
174
|
+
const handleSwitchNetwork = react.useCallback(async (newNetwork) => {
|
|
175
|
+
if (provider) {
|
|
176
|
+
await provider.switchNetwork(newNetwork);
|
|
177
|
+
}
|
|
178
|
+
setNetwork(newNetwork);
|
|
179
|
+
}, [provider]);
|
|
180
|
+
const handleSignMessage = react.useCallback(async (message) => {
|
|
181
|
+
if (!provider || !connected) {
|
|
182
|
+
throw new Error("Wallet not connected");
|
|
183
|
+
}
|
|
184
|
+
return provider.signMessage(message);
|
|
185
|
+
}, [provider, connected]);
|
|
186
|
+
const handleSignTransaction = react.useCallback(async (tx) => {
|
|
187
|
+
if (!provider || !connected) {
|
|
188
|
+
throw new Error("Wallet not connected");
|
|
189
|
+
}
|
|
190
|
+
const result = await provider.signTransaction(tx);
|
|
191
|
+
return result.signature;
|
|
192
|
+
}, [provider, connected]);
|
|
193
|
+
const handleSendTransaction = react.useCallback(async (tx) => {
|
|
194
|
+
if (!provider || !connected) {
|
|
195
|
+
throw new Error("Wallet not connected");
|
|
196
|
+
}
|
|
197
|
+
return provider.sendTransaction(tx);
|
|
198
|
+
}, [provider, connected]);
|
|
199
|
+
const handleSignAndSendTransaction = react.useCallback(async (tx) => {
|
|
200
|
+
if (!provider || !connected) {
|
|
201
|
+
throw new Error("Wallet not connected");
|
|
202
|
+
}
|
|
203
|
+
return provider.signAndSendTransaction(tx);
|
|
204
|
+
}, [provider, connected]);
|
|
205
|
+
const openModal = react.useCallback(() => setIsModalOpen(true), []);
|
|
206
|
+
const closeModal = react.useCallback(() => setIsModalOpen(false), []);
|
|
207
|
+
const value = {
|
|
208
|
+
connected,
|
|
209
|
+
connecting,
|
|
210
|
+
accounts,
|
|
211
|
+
activeAccount,
|
|
212
|
+
network,
|
|
213
|
+
balance,
|
|
214
|
+
wallets,
|
|
215
|
+
selectedWallet,
|
|
216
|
+
isInstalled,
|
|
217
|
+
connect: handleConnect,
|
|
218
|
+
disconnect: handleDisconnect,
|
|
219
|
+
selectWallet,
|
|
220
|
+
switchNetwork: handleSwitchNetwork,
|
|
221
|
+
signMessage: handleSignMessage,
|
|
222
|
+
signTransaction: handleSignTransaction,
|
|
223
|
+
sendTransaction: handleSendTransaction,
|
|
224
|
+
signAndSendTransaction: handleSignAndSendTransaction,
|
|
225
|
+
isModalOpen,
|
|
226
|
+
openModal,
|
|
227
|
+
closeModal
|
|
228
|
+
};
|
|
229
|
+
return /* @__PURE__ */ jsxRuntime.jsx(WalletContext.Provider, { value, children });
|
|
230
|
+
}
|
|
231
|
+
function useWallet() {
|
|
232
|
+
const context = react.useContext(WalletContext);
|
|
233
|
+
if (!context) {
|
|
234
|
+
throw new Error("useWallet must be used within WalletProvider");
|
|
235
|
+
}
|
|
236
|
+
return context;
|
|
237
|
+
}
|
|
238
|
+
function useIsConnected() {
|
|
239
|
+
const { connected } = useWallet();
|
|
240
|
+
return connected;
|
|
241
|
+
}
|
|
242
|
+
function useActiveAccount() {
|
|
243
|
+
const { activeAccount } = useWallet();
|
|
244
|
+
return activeAccount;
|
|
245
|
+
}
|
|
246
|
+
function useAccounts() {
|
|
247
|
+
const { accounts } = useWallet();
|
|
248
|
+
return accounts;
|
|
249
|
+
}
|
|
250
|
+
function useBalance() {
|
|
251
|
+
const { balance } = useWallet();
|
|
252
|
+
return {
|
|
253
|
+
balance,
|
|
254
|
+
formatted: balance ? formatBalance(balance) : "0.0000"
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function useNetwork() {
|
|
258
|
+
const { network } = useWallet();
|
|
259
|
+
return {
|
|
260
|
+
network,
|
|
261
|
+
config: NETWORKS[network]
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function useConnectWallet() {
|
|
265
|
+
const { connect, connecting, openModal, isInstalled } = useWallet();
|
|
266
|
+
return {
|
|
267
|
+
connect: isInstalled ? connect : openModal,
|
|
268
|
+
connecting,
|
|
269
|
+
isInstalled
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function useDisconnectWallet() {
|
|
273
|
+
const { disconnect } = useWallet();
|
|
274
|
+
return { disconnect };
|
|
275
|
+
}
|
|
276
|
+
function useSignMessage() {
|
|
277
|
+
const { signMessage, connected } = useWallet();
|
|
278
|
+
const [signing, setSigning] = react.useState(false);
|
|
279
|
+
const [signature, setSignature] = react.useState(null);
|
|
280
|
+
const [error, setError] = react.useState(null);
|
|
281
|
+
const sign = react.useCallback(async (message) => {
|
|
282
|
+
if (!connected) {
|
|
283
|
+
setError(new Error("Wallet not connected"));
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
setSigning(true);
|
|
287
|
+
setError(null);
|
|
288
|
+
try {
|
|
289
|
+
const result = await signMessage(message);
|
|
290
|
+
setSignature(result.signature);
|
|
291
|
+
return result;
|
|
292
|
+
} catch (err) {
|
|
293
|
+
setError(err);
|
|
294
|
+
return null;
|
|
295
|
+
} finally {
|
|
296
|
+
setSigning(false);
|
|
297
|
+
}
|
|
298
|
+
}, [signMessage, connected]);
|
|
299
|
+
return { sign, signing, signature, error };
|
|
300
|
+
}
|
|
301
|
+
function useSendTransaction() {
|
|
302
|
+
const { signAndSendTransaction, connected } = useWallet();
|
|
303
|
+
const [sending, setSending] = react.useState(false);
|
|
304
|
+
const [txHash, setTxHash] = react.useState(null);
|
|
305
|
+
const [error, setError] = react.useState(null);
|
|
306
|
+
const send = react.useCallback(async (tx) => {
|
|
307
|
+
if (!connected) {
|
|
308
|
+
setError(new Error("Wallet not connected"));
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
setSending(true);
|
|
312
|
+
setError(null);
|
|
313
|
+
try {
|
|
314
|
+
const result = await signAndSendTransaction(tx);
|
|
315
|
+
setTxHash(result.hash);
|
|
316
|
+
return result;
|
|
317
|
+
} catch (err) {
|
|
318
|
+
setError(err);
|
|
319
|
+
return null;
|
|
320
|
+
} finally {
|
|
321
|
+
setSending(false);
|
|
322
|
+
}
|
|
323
|
+
}, [signAndSendTransaction, connected]);
|
|
324
|
+
return { send, sending, txHash, error };
|
|
325
|
+
}
|
|
326
|
+
function ConnectButton({
|
|
327
|
+
connectLabel = "Connect Wallet",
|
|
328
|
+
showAddress = true,
|
|
329
|
+
className = "",
|
|
330
|
+
style
|
|
331
|
+
}) {
|
|
332
|
+
const { connected, connecting, activeAccount, openModal, disconnect } = useWallet();
|
|
333
|
+
if (connected && activeAccount) {
|
|
334
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
335
|
+
"button",
|
|
336
|
+
{
|
|
337
|
+
onClick: disconnect,
|
|
338
|
+
className,
|
|
339
|
+
style: {
|
|
340
|
+
padding: "10px 20px",
|
|
341
|
+
borderRadius: "8px",
|
|
342
|
+
border: "none",
|
|
343
|
+
backgroundColor: "#1a1a2e",
|
|
344
|
+
color: "#6eb9a8",
|
|
345
|
+
cursor: "pointer",
|
|
346
|
+
fontWeight: 500,
|
|
347
|
+
...style
|
|
348
|
+
},
|
|
349
|
+
children: showAddress ? formatAddress(activeAccount.address) : "Disconnect"
|
|
350
|
+
}
|
|
351
|
+
);
|
|
352
|
+
}
|
|
353
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
354
|
+
"button",
|
|
355
|
+
{
|
|
356
|
+
onClick: openModal,
|
|
357
|
+
disabled: connecting,
|
|
358
|
+
className,
|
|
359
|
+
style: {
|
|
360
|
+
padding: "10px 20px",
|
|
361
|
+
borderRadius: "8px",
|
|
362
|
+
border: "none",
|
|
363
|
+
backgroundColor: "#6eb9a8",
|
|
364
|
+
color: "#0f0f1a",
|
|
365
|
+
cursor: connecting ? "not-allowed" : "pointer",
|
|
366
|
+
fontWeight: 600,
|
|
367
|
+
opacity: connecting ? 0.7 : 1,
|
|
368
|
+
...style
|
|
369
|
+
},
|
|
370
|
+
children: connecting ? "Connecting..." : connectLabel
|
|
371
|
+
}
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
function WalletModal({
|
|
375
|
+
title = "Connect Wallet",
|
|
376
|
+
className = ""
|
|
377
|
+
}) {
|
|
378
|
+
const { isModalOpen, closeModal, wallets, selectWallet, connecting } = useWallet();
|
|
379
|
+
if (!isModalOpen) return null;
|
|
380
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
381
|
+
"div",
|
|
382
|
+
{
|
|
383
|
+
className,
|
|
384
|
+
style: {
|
|
385
|
+
position: "fixed",
|
|
386
|
+
inset: 0,
|
|
387
|
+
zIndex: 9999,
|
|
388
|
+
display: "flex",
|
|
389
|
+
alignItems: "center",
|
|
390
|
+
justifyContent: "center",
|
|
391
|
+
backgroundColor: "rgba(0, 0, 0, 0.7)"
|
|
392
|
+
},
|
|
393
|
+
onClick: closeModal,
|
|
394
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
395
|
+
"div",
|
|
396
|
+
{
|
|
397
|
+
style: {
|
|
398
|
+
backgroundColor: "#1a1a2e",
|
|
399
|
+
borderRadius: "16px",
|
|
400
|
+
padding: "24px",
|
|
401
|
+
minWidth: "320px",
|
|
402
|
+
maxWidth: "400px"
|
|
403
|
+
},
|
|
404
|
+
onClick: (e) => e.stopPropagation(),
|
|
405
|
+
children: [
|
|
406
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: "20px" }, children: [
|
|
407
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { style: { margin: 0, color: "white", fontSize: "18px" }, children: title }),
|
|
408
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
409
|
+
"button",
|
|
410
|
+
{
|
|
411
|
+
onClick: closeModal,
|
|
412
|
+
style: {
|
|
413
|
+
background: "none",
|
|
414
|
+
border: "none",
|
|
415
|
+
color: "#888",
|
|
416
|
+
cursor: "pointer",
|
|
417
|
+
fontSize: "20px"
|
|
418
|
+
},
|
|
419
|
+
children: "\xD7"
|
|
420
|
+
}
|
|
421
|
+
)
|
|
422
|
+
] }),
|
|
423
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexDirection: "column", gap: "12px" }, children: wallets.map((wallet) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
424
|
+
"button",
|
|
425
|
+
{
|
|
426
|
+
onClick: () => selectWallet(wallet.id),
|
|
427
|
+
disabled: connecting,
|
|
428
|
+
style: {
|
|
429
|
+
display: "flex",
|
|
430
|
+
alignItems: "center",
|
|
431
|
+
gap: "12px",
|
|
432
|
+
padding: "16px",
|
|
433
|
+
borderRadius: "12px",
|
|
434
|
+
border: "1px solid #333",
|
|
435
|
+
backgroundColor: "#0f0f1a",
|
|
436
|
+
color: "white",
|
|
437
|
+
cursor: "pointer",
|
|
438
|
+
transition: "all 0.2s"
|
|
439
|
+
},
|
|
440
|
+
children: [
|
|
441
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
442
|
+
"img",
|
|
443
|
+
{
|
|
444
|
+
src: wallet.icon,
|
|
445
|
+
alt: wallet.name,
|
|
446
|
+
style: { width: "32px", height: "32px", borderRadius: "8px" }
|
|
447
|
+
}
|
|
448
|
+
),
|
|
449
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1, textAlign: "left" }, children: [
|
|
450
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontWeight: 600 }, children: wallet.name }),
|
|
451
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: "12px", color: "#888" }, children: wallet.installed ? "Detected" : "Not installed" })
|
|
452
|
+
] }),
|
|
453
|
+
!wallet.installed && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "12px", color: "#6eb9a8" }, children: "Install \u2192" })
|
|
454
|
+
]
|
|
455
|
+
},
|
|
456
|
+
wallet.id
|
|
457
|
+
)) })
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
)
|
|
461
|
+
}
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
exports.ConnectButton = ConnectButton;
|
|
466
|
+
exports.NETWORKS = NETWORKS;
|
|
467
|
+
exports.WalletModal = WalletModal;
|
|
468
|
+
exports.WalletProvider = WalletProvider;
|
|
469
|
+
exports.formatAddress = formatAddress;
|
|
470
|
+
exports.formatBalance = formatBalance;
|
|
471
|
+
exports.isRialoInstalled = isRialoInstalled;
|
|
472
|
+
exports.useAccounts = useAccounts;
|
|
473
|
+
exports.useActiveAccount = useActiveAccount;
|
|
474
|
+
exports.useBalance = useBalance;
|
|
475
|
+
exports.useConnectWallet = useConnectWallet;
|
|
476
|
+
exports.useDisconnectWallet = useDisconnectWallet;
|
|
477
|
+
exports.useIsConnected = useIsConnected;
|
|
478
|
+
exports.useNetwork = useNetwork;
|
|
479
|
+
exports.useSendTransaction = useSendTransaction;
|
|
480
|
+
exports.useSignMessage = useSignMessage;
|
|
481
|
+
exports.useWallet = useWallet;
|
|
482
|
+
//# sourceMappingURL=react.cjs.map
|
|
483
|
+
//# sourceMappingURL=react.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/react.tsx"],"names":["createContext","useState","useEffect","useCallback","jsx","useContext","jsxs"],"mappings":"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","file":"react.cjs","sourcesContent":["/**\n * @cookillabs/wallet-adapter\n * Community wallet adapter for Rialo blockchain dApps\n * \n * ⚠️ DISCLAIMER: This is a community package, NOT officially maintained by Rialo.\n * For official Rialo packages, see: https://www.npmjs.com/package/@rialo/frost\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Supported Rialo chains */\nexport type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';\n\n/** Network shorthand */\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\n/** Wallet account */\nexport interface WalletAccount {\n address: string;\n publicKey?: Uint8Array | string;\n label?: string;\n}\n\n/** Transaction request */\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n}\n\n/** Transaction result */\nexport interface TransactionResult {\n hash: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n}\n\n/** Signed message */\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n}\n\n/** Network configuration */\nexport interface NetworkConfig {\n chainId: string;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n}\n\n/** Wallet info for registry */\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n}\n\n/** Wallet adapter events */\nexport type WalletEvent = 'connect' | 'disconnect' | 'accountChange' | 'networkChange' | 'error';\n\n// ============================================================================\n// Network Configurations\n// ============================================================================\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n },\n};\n\n// ============================================================================\n// Wallet Provider Interface\n// ============================================================================\n\n/**\n * Provider interface injected by Rialo Wallet extension\n * Available at window.rialo when extension is installed\n */\nexport interface RialoProvider {\n isRialo: boolean;\n version: string;\n\n // Connection\n connect(): Promise<string[]>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<string[]>;\n\n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n\n // Message signing\n signMessage(message: string): Promise<SignedMessage>;\n\n // Network\n getNetwork(): Promise<string>;\n switchNetwork(network: RialoNetwork): Promise<void>;\n getBalance(address?: string): Promise<string>;\n\n // Events\n on(event: WalletEvent, callback: (data: unknown) => void): () => void;\n removeListener(event: WalletEvent, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEvent): void;\n}\n\n// ============================================================================\n// Detection & Access\n// ============================================================================\n\n/**\n * Check if Rialo Wallet extension is installed\n */\nexport function isRialoInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as RialoWindow).rialo?.isRialo;\n}\n\n/**\n * Get the Rialo provider if available\n */\nexport function getRialoProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n const rialo = (window as RialoWindow).rialo;\n return rialo?.isRialo ? rialo : undefined;\n}\n\n/**\n * Wait for Rialo provider to be available (with timeout)\n */\nexport function waitForRialoProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n if (isRialoInstalled()) {\n resolve(getRialoProvider());\n return;\n }\n\n const checkInterval = setInterval(() => {\n if (isRialoInstalled()) {\n clearInterval(checkInterval);\n resolve(getRialoProvider());\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(checkInterval);\n resolve(undefined);\n }, timeout);\n });\n}\n\n// ============================================================================\n// Simple Wallet Class (Non-React)\n// ============================================================================\n\nexport class RialoWallet {\n private provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n\n constructor() {\n this.provider = getRialoProvider();\n }\n\n get isInstalled(): boolean {\n return isRialoInstalled();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return this._accounts;\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n async connect(): Promise<WalletAccount[]> {\n this.provider = getRialoProvider();\n if (!this.provider) {\n throw new Error('Rialo Wallet not installed. Download at https://rialo.io/wallet');\n }\n\n const addresses = await this.provider.connect();\n this._accounts = addresses.map((address) => ({ address }));\n this._connected = true;\n\n const networkStr = await this.provider.getNetwork();\n this._network = networkStr.replace('rialo:', '') as RialoNetwork;\n\n return this._accounts;\n }\n\n async disconnect(): Promise<void> {\n if (this.provider) {\n await this.provider.disconnect();\n }\n this._connected = false;\n this._accounts = [];\n }\n\n async signMessage(message: string): Promise<SignedMessage> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.signMessage(message);\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n const result = await this.provider.signTransaction(tx);\n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.sendTransaction(tx);\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.signAndSendTransaction(tx);\n }\n\n async getBalance(address?: string): Promise<string> {\n if (!this.provider) {\n throw new Error('Wallet not available');\n }\n return this.provider.getBalance(address);\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this.provider) {\n throw new Error('Wallet not available');\n }\n await this.provider.switchNetwork(network);\n this._network = network;\n }\n\n on(event: WalletEvent, callback: (data: unknown) => void): () => void {\n if (!this.provider) {\n return () => {};\n }\n return this.provider.on(event, callback);\n }\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Format address for display (truncated base58)\n */\nexport function formatAddress(address: string, chars = 4): string {\n if (!address) return '';\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance from kelvins (smallest unit) to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins) : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO to kelvins\n */\nexport function parseBalance(rlo: string | number): bigint {\n const value = typeof rlo === 'string' ? parseFloat(rlo) : rlo;\n return BigInt(Math.floor(value * 1_000_000_000));\n}\n\n/**\n * Validate Rialo address format (base58)\n * Real Rialo addresses are base58 encoded public keys (32-50 chars)\n */\nexport function isValidAddress(address: string): boolean {\n if (!address || typeof address !== 'string') return false;\n if (address.length < 32 || address.length > 50) return false;\n \n // Base58 character set (no 0, O, I, l)\n const base58Regex = /^[1-9A-HJ-NP-Za-km-z]+$/;\n return base58Regex.test(address);\n}\n\n// ============================================================================\n// Window Extension\n// ============================================================================\n\ninterface RialoWindow extends Window {\n rialo?: RialoProvider;\n}\n\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n }\n}\n\n// ============================================================================\n// Default Export\n// ============================================================================\n\nexport default RialoWallet;\n","/**\n * @rialo/wallet-adapter/react\n * React hooks and components for Rialo Wallet integration\n */\n\nimport React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n ReactNode,\n} from 'react';\nimport {\n RialoProvider,\n RialoNetwork,\n WalletAccount,\n TransactionRequest,\n TransactionResult,\n SignedMessage,\n WalletInfo,\n isRialoInstalled,\n getRialoProvider,\n formatAddress,\n formatBalance,\n NETWORKS,\n} from './index';\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\nexport interface WalletContextState {\n // State\n connected: boolean;\n connecting: boolean;\n accounts: WalletAccount[];\n activeAccount: WalletAccount | null;\n network: RialoNetwork;\n balance: string | null;\n\n // Wallet info\n wallets: WalletInfo[];\n selectedWallet: WalletInfo | null;\n isInstalled: boolean;\n\n // Actions\n connect: () => Promise<WalletAccount[]>;\n disconnect: () => Promise<void>;\n selectWallet: (walletId: string) => void;\n switchNetwork: (network: RialoNetwork) => Promise<void>;\n\n // Transactions\n signMessage: (message: string) => Promise<SignedMessage>;\n signTransaction: (tx: TransactionRequest) => Promise<string>;\n sendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n signAndSendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n\n // Modal\n isModalOpen: boolean;\n openModal: () => void;\n closeModal: () => void;\n}\n\n// ============================================================================\n// Provider Props\n// ============================================================================\n\nexport interface WalletProviderProps {\n children: ReactNode;\n /** Default network (default: devnet) */\n network?: RialoNetwork;\n /** Auto-connect on mount (default: true) */\n autoConnect?: boolean;\n /** Additional wallets to support */\n wallets?: WalletInfo[];\n /** Custom styles */\n theme?: 'light' | 'dark' | 'auto';\n /** Callback when connected */\n onConnect?: (accounts: WalletAccount[]) => void;\n /** Callback when disconnected */\n onDisconnect?: () => void;\n /** Callback on error */\n onError?: (error: Error) => void;\n}\n\n// ============================================================================\n// Default Wallets\n// ============================================================================\n\nconst DEFAULT_WALLETS: WalletInfo[] = [\n {\n id: 'rialo',\n name: 'Rialo Wallet',\n icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjNkVCOUE4Ii8+PHBhdGggZD0iTTggMTBIMjRWMjJIOFYxMFoiIGZpbGw9IndoaXRlIi8+PC9zdmc+',\n downloadUrl: 'https://rialo.io/wallet',\n },\n];\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst WalletContext = createContext<WalletContextState | null>(null);\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\nexport function WalletProvider({\n children,\n network: initialNetwork = 'devnet',\n autoConnect = true,\n wallets: customWallets = [],\n onConnect,\n onDisconnect,\n onError,\n}: WalletProviderProps) {\n // State\n const [connected, setConnected] = useState(false);\n const [connecting, setConnecting] = useState(false);\n const [accounts, setAccounts] = useState<WalletAccount[]>([]);\n const [network, setNetwork] = useState<RialoNetwork>(initialNetwork);\n const [balance, setBalance] = useState<string | null>(null);\n const [selectedWallet, setSelectedWallet] = useState<WalletInfo | null>(null);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [provider, setProvider] = useState<RialoProvider | undefined>();\n\n // Merge wallets\n const wallets: WalletInfo[] = [...DEFAULT_WALLETS, ...customWallets].map((w) => ({\n ...w,\n installed: w.id === 'rialo' ? isRialoInstalled() : false,\n }));\n\n // Active account\n const activeAccount = accounts[0] || null;\n const isInstalled = isRialoInstalled();\n\n // Initialize provider\n useEffect(() => {\n const p = getRialoProvider();\n setProvider(p);\n\n if (p) {\n setSelectedWallet(wallets.find((w) => w.id === 'rialo') || null);\n }\n }, []);\n\n // Auto-connect\n useEffect(() => {\n if (autoConnect && provider && !connected && !connecting) {\n provider.isConnected().then((isConn) => {\n if (isConn) {\n handleConnect();\n }\n });\n }\n }, [provider, autoConnect]);\n\n // Fetch balance when connected\n useEffect(() => {\n if (connected && activeAccount && provider) {\n provider.getBalance(activeAccount.address).then(setBalance).catch(console.error);\n }\n }, [connected, activeAccount, provider]);\n\n // Listen for provider events\n useEffect(() => {\n if (!provider) return;\n\n const unsubConnect = provider.on('connect', () => {\n setConnected(true);\n });\n\n const unsubDisconnect = provider.on('disconnect', () => {\n setConnected(false);\n setAccounts([]);\n setBalance(null);\n onDisconnect?.();\n });\n\n const unsubAccountChange = provider.on('accountChange', (data: unknown) => {\n const { accounts: newAccounts } = data as { accounts: string[] };\n setAccounts(newAccounts.map((address) => ({ address })));\n });\n\n return () => {\n unsubConnect();\n unsubDisconnect();\n unsubAccountChange();\n };\n }, [provider, onDisconnect]);\n\n // Connect\n const handleConnect = useCallback(async (): Promise<WalletAccount[]> => {\n if (!provider) {\n const error = new Error('Rialo Wallet not installed');\n onError?.(error);\n throw error;\n }\n\n setConnecting(true);\n try {\n const addresses = await provider.connect();\n const walletAccounts = addresses.map((address) => ({ address }));\n setAccounts(walletAccounts);\n setConnected(true);\n setIsModalOpen(false);\n onConnect?.(walletAccounts);\n return walletAccounts;\n } catch (error) {\n onError?.(error as Error);\n throw error;\n } finally {\n setConnecting(false);\n }\n }, [provider, onConnect, onError]);\n\n // Disconnect\n const handleDisconnect = useCallback(async () => {\n if (provider) {\n await provider.disconnect();\n }\n setConnected(false);\n setAccounts([]);\n setBalance(null);\n onDisconnect?.();\n }, [provider, onDisconnect]);\n\n // Select wallet\n const selectWallet = useCallback((walletId: string) => {\n const wallet = wallets.find((w) => w.id === walletId);\n if (wallet) {\n setSelectedWallet(wallet);\n if (wallet.installed) {\n handleConnect();\n } else if (wallet.downloadUrl) {\n window.open(wallet.downloadUrl, '_blank');\n }\n }\n }, [wallets, handleConnect]);\n\n // Switch network\n const handleSwitchNetwork = useCallback(async (newNetwork: RialoNetwork) => {\n if (provider) {\n await provider.switchNetwork(newNetwork);\n }\n setNetwork(newNetwork);\n }, [provider]);\n\n // Sign message\n const handleSignMessage = useCallback(async (message: string): Promise<SignedMessage> => {\n if (!provider || !connected) {\n throw new Error('Wallet not connected');\n }\n return provider.signMessage(message);\n }, [provider, connected]);\n\n // Sign transaction\n const handleSignTransaction = useCallback(async (tx: TransactionRequest): Promise<string> => {\n if (!provider || !connected) {\n throw new Error('Wallet not connected');\n }\n const result = await provider.signTransaction(tx);\n return result.signature;\n }, [provider, connected]);\n\n // Send transaction\n const handleSendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n if (!provider || !connected) {\n throw new Error('Wallet not connected');\n }\n return provider.sendTransaction(tx);\n }, [provider, connected]);\n\n // Sign and send transaction\n const handleSignAndSendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n if (!provider || !connected) {\n throw new Error('Wallet not connected');\n }\n return provider.signAndSendTransaction(tx);\n }, [provider, connected]);\n\n // Modal controls\n const openModal = useCallback(() => setIsModalOpen(true), []);\n const closeModal = useCallback(() => setIsModalOpen(false), []);\n\n // Context value\n const value: WalletContextState = {\n connected,\n connecting,\n accounts,\n activeAccount,\n network,\n balance,\n wallets,\n selectedWallet,\n isInstalled,\n connect: handleConnect,\n disconnect: handleDisconnect,\n selectWallet,\n switchNetwork: handleSwitchNetwork,\n signMessage: handleSignMessage,\n signTransaction: handleSignTransaction,\n sendTransaction: handleSendTransaction,\n signAndSendTransaction: handleSignAndSendTransaction,\n isModalOpen,\n openModal,\n closeModal,\n };\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n </WalletContext.Provider>\n );\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\n/**\n * Main wallet hook - access all wallet functionality\n */\nexport function useWallet(): WalletContextState {\n const context = useContext(WalletContext);\n if (!context) {\n throw new Error('useWallet must be used within WalletProvider');\n }\n return context;\n}\n\n/**\n * Check if wallet is connected\n */\nexport function useIsConnected(): boolean {\n const { connected } = useWallet();\n return connected;\n}\n\n/**\n * Get active account\n */\nexport function useActiveAccount(): WalletAccount | null {\n const { activeAccount } = useWallet();\n return activeAccount;\n}\n\n/**\n * Get all accounts\n */\nexport function useAccounts(): WalletAccount[] {\n const { accounts } = useWallet();\n return accounts;\n}\n\n/**\n * Get current balance\n */\nexport function useBalance(): { balance: string | null; formatted: string } {\n const { balance } = useWallet();\n return {\n balance,\n formatted: balance ? formatBalance(balance) : '0.0000',\n };\n}\n\n/**\n * Get current network\n */\nexport function useNetwork(): { network: RialoNetwork; config: typeof NETWORKS.devnet } {\n const { network } = useWallet();\n return {\n network,\n config: NETWORKS[network],\n };\n}\n\n/**\n * Connect wallet hook\n */\nexport function useConnectWallet() {\n const { connect, connecting, openModal, isInstalled } = useWallet();\n return {\n connect: isInstalled ? connect : openModal,\n connecting,\n isInstalled,\n };\n}\n\n/**\n * Disconnect wallet hook\n */\nexport function useDisconnectWallet() {\n const { disconnect } = useWallet();\n return { disconnect };\n}\n\n/**\n * Sign message hook\n */\nexport function useSignMessage() {\n const { signMessage, connected } = useWallet();\n const [signing, setSigning] = useState(false);\n const [signature, setSignature] = useState<string | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n const sign = useCallback(async (message: string) => {\n if (!connected) {\n setError(new Error('Wallet not connected'));\n return null;\n }\n\n setSigning(true);\n setError(null);\n\n try {\n const result = await signMessage(message);\n setSignature(result.signature);\n return result;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setSigning(false);\n }\n }, [signMessage, connected]);\n\n return { sign, signing, signature, error };\n}\n\n/**\n * Send transaction hook\n */\nexport function useSendTransaction() {\n const { signAndSendTransaction, connected } = useWallet();\n const [sending, setSending] = useState(false);\n const [txHash, setTxHash] = useState<string | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n const send = useCallback(async (tx: TransactionRequest) => {\n if (!connected) {\n setError(new Error('Wallet not connected'));\n return null;\n }\n\n setSending(true);\n setError(null);\n\n try {\n const result = await signAndSendTransaction(tx);\n setTxHash(result.hash);\n return result;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setSending(false);\n }\n }, [signAndSendTransaction, connected]);\n\n return { send, sending, txHash, error };\n}\n\n// ============================================================================\n// Components\n// ============================================================================\n\nexport interface ConnectButtonProps {\n /** Button text when disconnected */\n connectLabel?: string;\n /** Show address when connected */\n showAddress?: boolean;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Connect wallet button component\n */\nexport function ConnectButton({\n connectLabel = 'Connect Wallet',\n showAddress = true,\n className = '',\n style,\n}: ConnectButtonProps) {\n const { connected, connecting, activeAccount, openModal, disconnect } = useWallet();\n\n if (connected && activeAccount) {\n return (\n <button\n onClick={disconnect}\n className={className}\n style={{\n padding: '10px 20px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#1a1a2e',\n color: '#6eb9a8',\n cursor: 'pointer',\n fontWeight: 500,\n ...style,\n }}\n >\n {showAddress ? formatAddress(activeAccount.address) : 'Disconnect'}\n </button>\n );\n }\n\n return (\n <button\n onClick={openModal}\n disabled={connecting}\n className={className}\n style={{\n padding: '10px 20px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#6eb9a8',\n color: '#0f0f1a',\n cursor: connecting ? 'not-allowed' : 'pointer',\n fontWeight: 600,\n opacity: connecting ? 0.7 : 1,\n ...style,\n }}\n >\n {connecting ? 'Connecting...' : connectLabel}\n </button>\n );\n}\n\nexport interface WalletModalProps {\n /** Modal title */\n title?: string;\n /** Custom class name */\n className?: string;\n}\n\n/**\n * Wallet selection modal component\n */\nexport function WalletModal({\n title = 'Connect Wallet',\n className = '',\n}: WalletModalProps) {\n const { isModalOpen, closeModal, wallets, selectWallet, connecting } = useWallet();\n\n if (!isModalOpen) return null;\n\n return (\n <div\n className={className}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n }}\n onClick={closeModal}\n >\n <div\n style={{\n backgroundColor: '#1a1a2e',\n borderRadius: '16px',\n padding: '24px',\n minWidth: '320px',\n maxWidth: '400px',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '20px' }}>\n <h2 style={{ margin: 0, color: 'white', fontSize: '18px' }}>{title}</h2>\n <button\n onClick={closeModal}\n style={{\n background: 'none',\n border: 'none',\n color: '#888',\n cursor: 'pointer',\n fontSize: '20px',\n }}\n >\n ×\n </button>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n {wallets.map((wallet) => (\n <button\n key={wallet.id}\n onClick={() => selectWallet(wallet.id)}\n disabled={connecting}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '16px',\n borderRadius: '12px',\n border: '1px solid #333',\n backgroundColor: '#0f0f1a',\n color: 'white',\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n >\n <img\n src={wallet.icon}\n alt={wallet.name}\n style={{ width: '32px', height: '32px', borderRadius: '8px' }}\n />\n <div style={{ flex: 1, textAlign: 'left' }}>\n <div style={{ fontWeight: 600 }}>{wallet.name}</div>\n <div style={{ fontSize: '12px', color: '#888' }}>\n {wallet.installed ? 'Detected' : 'Not installed'}\n </div>\n </div>\n {!wallet.installed && (\n <span style={{ fontSize: '12px', color: '#6eb9a8' }}>Install →</span>\n )}\n </button>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Re-exports\n// ============================================================================\n\nexport { formatAddress, formatBalance, NETWORKS, isRialoInstalled };\nexport type { RialoNetwork, WalletAccount, TransactionRequest, TransactionResult, SignedMessage, WalletInfo };\n"]}
|