@orderly.network/wallet-connector-privy 2.0.8-alpha.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/dist/index.js ADDED
@@ -0,0 +1,2350 @@
1
+ 'use strict';
2
+
3
+ var React11 = require('react');
4
+ var hooks = require('@orderly.network/hooks');
5
+ var ui = require('@orderly.network/ui');
6
+ var WagmiExport = require('wagmi');
7
+ var types = require('@orderly.network/types');
8
+ var walletAdapterReact = require('@solana/wallet-adapter-react');
9
+ var walletAdapterBase = require('@solana/wallet-adapter-base');
10
+ var reactAuth = require('@privy-io/react-auth');
11
+ var i18n = require('@orderly.network/i18n');
12
+ var reactDom = require('react-dom');
13
+ var uiConnector = require('@orderly.network/ui-connector');
14
+ var viemExport = require('viem');
15
+ var chains = require('viem/chains');
16
+ var walletAdapterWallets = require('@solana/wallet-adapter-wallets');
17
+ var reactQuery = require('@tanstack/react-query');
18
+ var WagmiConnectorsExport = require('wagmi/connectors');
19
+
20
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
21
+
22
+ function _interopNamespace(e) {
23
+ if (e && e.__esModule) return e;
24
+ var n = Object.create(null);
25
+ if (e) {
26
+ Object.keys(e).forEach(function (k) {
27
+ if (k !== 'default') {
28
+ var d = Object.getOwnPropertyDescriptor(e, k);
29
+ Object.defineProperty(n, k, d.get ? d : {
30
+ enumerable: true,
31
+ get: function () { return e[k]; }
32
+ });
33
+ }
34
+ });
35
+ }
36
+ n.default = e;
37
+ return Object.freeze(n);
38
+ }
39
+
40
+ var React11__default = /*#__PURE__*/_interopDefault(React11);
41
+ var WagmiExport__namespace = /*#__PURE__*/_interopNamespace(WagmiExport);
42
+ var viemExport__namespace = /*#__PURE__*/_interopNamespace(viemExport);
43
+ var WagmiConnectorsExport__namespace = /*#__PURE__*/_interopNamespace(WagmiConnectorsExport);
44
+
45
+ // src/provider.tsx
46
+ var WagmiWalletContext = React11.createContext(null);
47
+ var WagmiWalletProvider = ({
48
+ children
49
+ }) => {
50
+ const { connectorWalletType } = useWalletConnectorPrivy();
51
+ const [wallet, setWallet] = React11.useState(void 0);
52
+ const { connect, connectors: wagmiConnectors2 } = connectorWalletType.disableWagmi ? { connect: () => Promise.resolve(), connectors: [] } : WagmiExport.useConnect();
53
+ const { disconnect } = connectorWalletType.disableWagmi ? { disconnect: () => Promise.resolve() } : WagmiExport.useDisconnect();
54
+ const { connector, isConnected, address, chainId } = connectorWalletType.disableWagmi ? { connector: null, isConnected: false, address: null, chainId: null } : WagmiExport.useAccount();
55
+ const { switchChain } = connectorWalletType.disableWagmi ? { switchChain: () => Promise.resolve() } : WagmiExport.useSwitchChain();
56
+ const connectedChain = React11.useMemo(() => {
57
+ if (chainId) {
58
+ return {
59
+ id: chainId,
60
+ namespace: types.ChainNamespace.evm
61
+ };
62
+ }
63
+ return null;
64
+ }, [chainId]);
65
+ const setChain = React11.useCallback(
66
+ (chainId2) => {
67
+ return new Promise((resolve, reject) => {
68
+ switchChain(
69
+ { chainId: chainId2 },
70
+ {
71
+ onSuccess: () => resolve(true),
72
+ onError: (e) => {
73
+ return reject(e);
74
+ }
75
+ }
76
+ );
77
+ });
78
+ },
79
+ [switchChain]
80
+ );
81
+ React11.useEffect(() => {
82
+ if (!connector || !isConnected) {
83
+ setWallet(void 0);
84
+ return;
85
+ }
86
+ connector.getProvider().then((provider) => {
87
+ setWallet({
88
+ label: connector.name,
89
+ icon: "",
90
+ provider,
91
+ accounts: [
92
+ {
93
+ address
94
+ }
95
+ ],
96
+ chains: [
97
+ {
98
+ id: chainId,
99
+ namespace: types.ChainNamespace.evm
100
+ }
101
+ ],
102
+ chain: connectedChain
103
+ });
104
+ });
105
+ }, [connector, chainId, isConnected, address, connectedChain]);
106
+ const connectors = React11.useMemo(() => {
107
+ return wagmiConnectors2.filter((connector2) => connector2.id !== "injected").sort(
108
+ (a, b) => a.type === "injected" ? -1 : 1
109
+ );
110
+ }, [wagmiConnectors2]);
111
+ const value = React11.useMemo(
112
+ () => ({
113
+ connectors,
114
+ connect,
115
+ wallet,
116
+ connectedChain,
117
+ setChain,
118
+ disconnect,
119
+ isConnected
120
+ }),
121
+ [
122
+ connectors,
123
+ connect,
124
+ wallet,
125
+ connectedChain,
126
+ setChain,
127
+ disconnect,
128
+ isConnected
129
+ ]
130
+ );
131
+ return /* @__PURE__ */ React11__default.default.createElement(WagmiWalletContext.Provider, { value }, children);
132
+ };
133
+ function useWagmiWallet() {
134
+ const context = React11.useContext(WagmiWalletContext);
135
+ if (!context) {
136
+ throw new Error("useWagmiWallet must be used within a WagmiWalletProvider");
137
+ }
138
+ return context;
139
+ }
140
+ var Network = /* @__PURE__ */ ((Network2) => {
141
+ Network2["mainnet"] = "mainnet";
142
+ Network2["testnet"] = "testnet";
143
+ return Network2;
144
+ })(Network || {});
145
+ var WalletType = /* @__PURE__ */ ((WalletType2) => {
146
+ WalletType2["EVM"] = "EVM";
147
+ WalletType2["SOL"] = "SOL";
148
+ WalletType2["PRIVY"] = "privy";
149
+ return WalletType2;
150
+ })(WalletType || {});
151
+ var SolanaChains = /* @__PURE__ */ new Map([[walletAdapterBase.WalletAdapterNetwork.Devnet, 901901901], [walletAdapterBase.WalletAdapterNetwork.Mainnet, 900900900]]);
152
+ var SolanaChainsMap = /* @__PURE__ */ new Map([
153
+ [walletAdapterBase.WalletAdapterNetwork.Devnet, 901901901],
154
+ ["testnet" /* testnet */, 901901901],
155
+ ["mainnet" /* mainnet */, 900900900],
156
+ [walletAdapterBase.WalletAdapterNetwork.Mainnet, 900900900]
157
+ ]);
158
+ var WalletChainTypeEnum = /* @__PURE__ */ ((WalletChainTypeEnum2) => {
159
+ WalletChainTypeEnum2["onlyEVM"] = "onlyEVM";
160
+ WalletChainTypeEnum2["onlySOL"] = "onlySOL";
161
+ WalletChainTypeEnum2["EVM_SOL"] = "EVM_SOL";
162
+ return WalletChainTypeEnum2;
163
+ })(WalletChainTypeEnum || {});
164
+ var SolanaWalletContext = React11.createContext(
165
+ null
166
+ );
167
+ var SolanaWalletProvider = ({
168
+ children
169
+ }) => {
170
+ const { setLedgerAddress } = hooks.useStorageLedgerAddress();
171
+ const [wallet, setWallet] = React11.useState();
172
+ const { network, solanaInfo, connectorWalletType } = useWalletConnectorPrivy();
173
+ const {
174
+ wallets,
175
+ select,
176
+ connect: connectSolana,
177
+ wallet: walletSolana,
178
+ publicKey,
179
+ signMessage,
180
+ signTransaction,
181
+ sendTransaction,
182
+ disconnect: disconnectSolana
183
+ } = connectorWalletType.disableSolana ? {
184
+ wallets: [],
185
+ select: () => Promise.resolve(),
186
+ connect: () => Promise.resolve(),
187
+ wallet: null,
188
+ publicKey: null,
189
+ signMessage: () => Promise.resolve(),
190
+ signTransaction: () => Promise.resolve(),
191
+ sendTransaction: () => Promise.resolve(),
192
+ disconnect: () => Promise.resolve()
193
+ } : walletAdapterReact.useWallet();
194
+ const solanaPromiseRef = React11.useRef({
195
+ walletSelect: null,
196
+ connect: null,
197
+ walletSelectResolve: () => {
198
+ },
199
+ walletSelectReject: () => {
200
+ },
201
+ connectReject: () => {
202
+ },
203
+ connectResolve: () => {
204
+ }
205
+ });
206
+ const isManual = React11.useRef(false);
207
+ const initPromiseRef = () => {
208
+ solanaPromiseRef.current.walletSelectResolve = () => {
209
+ };
210
+ solanaPromiseRef.current.walletSelectReject = () => {
211
+ };
212
+ solanaPromiseRef.current.connectReject = () => {
213
+ };
214
+ solanaPromiseRef.current.connectReject = () => {
215
+ };
216
+ solanaPromiseRef.current.connect = null;
217
+ solanaPromiseRef.current.walletSelect = null;
218
+ solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {
219
+ solanaPromiseRef.current.walletSelectResolve = resolve;
220
+ solanaPromiseRef.current.walletSelectReject = reject;
221
+ });
222
+ solanaPromiseRef.current.connect = new Promise((resolve, reject) => {
223
+ solanaPromiseRef.current.connectResolve = resolve;
224
+ solanaPromiseRef.current.connectReject = reject;
225
+ });
226
+ };
227
+ const disconnect = () => {
228
+ disconnectSolana().then(() => {
229
+ setWallet(void 0);
230
+ });
231
+ };
232
+ const connect = async (walletName) => {
233
+ initPromiseRef();
234
+ isManual.current = true;
235
+ if (!solanaPromiseRef.current) {
236
+ return;
237
+ }
238
+ if (!walletSolana) {
239
+ select(walletName);
240
+ } else {
241
+ solanaPromiseRef.current.walletSelectResolve(walletSolana);
242
+ if (!publicKey) {
243
+ try {
244
+ await connectSolana();
245
+ } catch (e) {
246
+ solanaPromiseRef.current.connectReject(e);
247
+ }
248
+ } else {
249
+ solanaPromiseRef.current.connectResolve({
250
+ userAddress: publicKey.toBase58(),
251
+ signMessage,
252
+ sendTransaction,
253
+ signTransaction
254
+ });
255
+ }
256
+ }
257
+ return Promise.all([
258
+ solanaPromiseRef.current.walletSelect,
259
+ solanaPromiseRef.current.connect
260
+ ]).then(
261
+ ([
262
+ connectedWallet,
263
+ { userAddress, signMessage: signMessage2, signTransaction: signTransaction2, sendTransaction: sendTransaction2 }
264
+ ]) => {
265
+ const tempWallet = {
266
+ label: connectedWallet.adapter.name,
267
+ icon: "",
268
+ provider: {
269
+ rpcUrl: solanaInfo?.rpcUrl ?? null,
270
+ network: solanaInfo?.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet,
271
+ signMessage: signMessage2,
272
+ signTransaction: signTransaction2,
273
+ sendTransaction: sendTransaction2
274
+ },
275
+ accounts: [
276
+ {
277
+ address: userAddress
278
+ }
279
+ ],
280
+ chains: [
281
+ {
282
+ id: SolanaChainsMap.get(network),
283
+ namespace: types.ChainNamespace.solana
284
+ }
285
+ ],
286
+ chain: {
287
+ id: SolanaChainsMap.get(network),
288
+ namespace: types.ChainNamespace.solana
289
+ }
290
+ };
291
+ if (connectedWallet.adapter.name === "Ledger") {
292
+ setLedgerAddress(userAddress);
293
+ }
294
+ isManual.current = false;
295
+ setWallet(tempWallet);
296
+ }
297
+ ).catch((e) => {
298
+ return Promise.reject(e);
299
+ });
300
+ };
301
+ const connectedChain = React11.useMemo(() => {
302
+ if (!publicKey) {
303
+ return null;
304
+ }
305
+ return {
306
+ id: SolanaChainsMap.get(network),
307
+ namespace: types.ChainNamespace.solana
308
+ };
309
+ }, [publicKey]);
310
+ const isConnected = React11.useMemo(() => {
311
+ return !!publicKey;
312
+ }, [publicKey]);
313
+ React11.useEffect(() => {
314
+ if (!walletSolana) {
315
+ return;
316
+ }
317
+ if (isManual.current && solanaPromiseRef.current) {
318
+ solanaPromiseRef.current.walletSelectResolve(walletSolana);
319
+ connectSolana().then();
320
+ }
321
+ if (!publicKey) {
322
+ connectSolana().then();
323
+ return;
324
+ }
325
+ if (isManual.current && solanaPromiseRef.current) {
326
+ solanaPromiseRef.current.connectResolve({
327
+ userAddress: publicKey?.toBase58(),
328
+ signMessage,
329
+ sendTransaction
330
+ });
331
+ return;
332
+ }
333
+ setWallet({
334
+ label: walletSolana.adapter.name,
335
+ icon: "",
336
+ provider: {
337
+ rpcUrl: solanaInfo?.rpcUrl ?? null,
338
+ network: solanaInfo?.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet,
339
+ signMessage,
340
+ signTransaction,
341
+ sendTransaction
342
+ },
343
+ accounts: [
344
+ {
345
+ address: publicKey.toBase58()
346
+ }
347
+ ],
348
+ chains: [
349
+ {
350
+ id: SolanaChainsMap.get(network),
351
+ namespace: types.ChainNamespace.solana
352
+ }
353
+ ],
354
+ chain: {
355
+ id: SolanaChainsMap.get(network),
356
+ namespace: types.ChainNamespace.solana
357
+ }
358
+ });
359
+ }, [
360
+ publicKey,
361
+ walletSolana,
362
+ signMessage,
363
+ signTransaction,
364
+ sendTransaction,
365
+ solanaInfo
366
+ ]);
367
+ const value = React11.useMemo(
368
+ () => ({
369
+ wallets,
370
+ connectedChain,
371
+ connect,
372
+ wallet,
373
+ disconnect,
374
+ isConnected
375
+ }),
376
+ [wallets, connectedChain, wallet, isConnected]
377
+ );
378
+ return /* @__PURE__ */ React11__default.default.createElement(SolanaWalletContext.Provider, { value }, children);
379
+ };
380
+ function useSolanaWallet() {
381
+ const context = React11.useContext(SolanaWalletContext);
382
+ if (!context) {
383
+ throw new Error(
384
+ "useSolanaWallet must be used within a SolanaWalletProvider"
385
+ );
386
+ }
387
+ return context;
388
+ }
389
+ var getPrivyEmbeddedWalletChainId = (chainId) => {
390
+ if (!chainId) {
391
+ return null;
392
+ }
393
+ return parseInt(chainId.split("eip155:")[1]);
394
+ };
395
+ var PrivyWalletContext = React11.createContext(null);
396
+ var PrivyWalletProvider = ({
397
+ children
398
+ }) => {
399
+ const { network, solanaInfo, setSolanaInfo, connectorWalletType } = useWalletConnectorPrivy();
400
+ const {
401
+ login,
402
+ logout,
403
+ ready,
404
+ authenticated,
405
+ user,
406
+ exportWallet: exportEvmWallet,
407
+ createWallet: createEvmWallet
408
+ } = reactAuth.usePrivy();
409
+ const { wallets: walletsEVM } = connectorWalletType.disablePrivy ? { wallets: [] } : reactAuth.useWallets();
410
+ const connectedRef = React11.useRef(false);
411
+ const {
412
+ ready: solanaReady,
413
+ wallets: walletsSOL,
414
+ createWallet: createSolanaWallet,
415
+ exportWallet: exportSolanaWallet
416
+ } = connectorWalletType.disablePrivy ? { ready: false, wallets: [], createWallet: () => Promise.resolve(), exportWallet: () => Promise.resolve() } : reactAuth.useSolanaWallets();
417
+ const [walletEVM, setWalletEVM] = React11.useState(null);
418
+ const [walletSOL, setWalletSOL] = React11.useState(null);
419
+ const { track } = hooks.useTrack();
420
+ const linkedAccount = React11.useMemo(() => {
421
+ if (user && user.linkedAccounts) {
422
+ const account = user.linkedAccounts.filter((item) => item.type !== "wallet").sort(
423
+ (a, b) => (b.latestVerifiedAt?.getTime() ?? 0) - (a.latestVerifiedAt?.getTime() ?? 0)
424
+ )[0];
425
+ let address = null;
426
+ if (account.type === "email") {
427
+ address = account.address;
428
+ } else if (account.type === "twitter_oauth") {
429
+ address = `@${account.username}`;
430
+ } else if (account.type === "google_oauth") {
431
+ address = `@${account.name}`;
432
+ }
433
+ return {
434
+ type: account.type,
435
+ address
436
+ };
437
+ }
438
+ return null;
439
+ }, [user]);
440
+ const switchChain = (chainId) => {
441
+ const wallet = walletsEVM[0];
442
+ if (wallet) {
443
+ return wallet.switchChain(chainId);
444
+ }
445
+ return Promise.reject("no wallet");
446
+ };
447
+ const connect = () => {
448
+ login();
449
+ };
450
+ const disconnect = () => {
451
+ return logout();
452
+ };
453
+ const exportWallet = (namespace) => {
454
+ if (namespace === types.ChainNamespace.evm) {
455
+ track(types.EnumTrackerKeys.clickExportPrivateKey, {
456
+ type: "evm"
457
+ });
458
+ return exportEvmWallet();
459
+ } else if (namespace === types.ChainNamespace.solana) {
460
+ track(types.EnumTrackerKeys.clickExportPrivateKey, {
461
+ type: "solana"
462
+ });
463
+ return exportSolanaWallet();
464
+ }
465
+ return Promise.reject("no namespace");
466
+ };
467
+ const isConnected = React11.useMemo(() => {
468
+ if (ready && authenticated) {
469
+ return true;
470
+ }
471
+ return false;
472
+ }, [ready, authenticated]);
473
+ React11.useEffect(() => {
474
+ if (!authenticated || !walletsEVM || !walletsEVM[0]) {
475
+ setWalletEVM(null);
476
+ return;
477
+ }
478
+ const wallet = walletsEVM[0];
479
+ wallet.getEthereumProvider().then((provider) => {
480
+ setWalletEVM({
481
+ label: "privy",
482
+ icon: "",
483
+ provider,
484
+ accounts: [
485
+ {
486
+ address: wallet.address
487
+ }
488
+ ],
489
+ chains: [
490
+ {
491
+ id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
492
+ namespace: types.ChainNamespace.evm
493
+ }
494
+ ],
495
+ chain: {
496
+ id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
497
+ namespace: types.ChainNamespace.evm
498
+ }
499
+ });
500
+ });
501
+ }, [walletsEVM, authenticated]);
502
+ React11.useEffect(() => {
503
+ if (!authenticated) {
504
+ setWalletSOL(null);
505
+ return;
506
+ }
507
+ if (!solanaReady) {
508
+ return;
509
+ }
510
+ if (!user) {
511
+ return;
512
+ }
513
+ const embededSolanaWallet = (user?.linkedAccounts).find(
514
+ (item) => item.chainType === "solana" && item.connectorType === "embedded"
515
+ );
516
+ if (!embededSolanaWallet) {
517
+ createSolanaWallet().then();
518
+ return;
519
+ }
520
+ if (!walletsSOL || !walletsSOL[0]) {
521
+ return;
522
+ }
523
+ const wallet = walletsSOL.find((w) => w.connectorType === "embedded");
524
+ if (wallet) {
525
+ if (walletSOL && wallet.address === walletSOL.accounts[0].address) {
526
+ if (walletSOL.chain.id === SolanaChainsMap.get(network)) {
527
+ return;
528
+ }
529
+ }
530
+ setWalletSOL({
531
+ label: "privy",
532
+ icon: "",
533
+ provider: {
534
+ signMessage: wallet.signMessage,
535
+ signTransaction: wallet.signTransaction,
536
+ sendTransaction: wallet.sendTransaction,
537
+ network: solanaInfo?.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet,
538
+ rpcUrl: solanaInfo?.rpcUrl ?? void 0
539
+ },
540
+ accounts: [
541
+ {
542
+ address: wallet.address
543
+ }
544
+ ],
545
+ chains: [
546
+ {
547
+ id: SolanaChainsMap.get(network),
548
+ namespace: types.ChainNamespace.solana
549
+ }
550
+ ],
551
+ chain: {
552
+ id: SolanaChainsMap.get(network),
553
+ namespace: types.ChainNamespace.solana
554
+ }
555
+ });
556
+ }
557
+ }, [
558
+ walletsSOL,
559
+ authenticated,
560
+ createSolanaWallet,
561
+ solanaReady,
562
+ user,
563
+ walletSOL,
564
+ network,
565
+ solanaInfo
566
+ ]);
567
+ React11.useEffect(() => {
568
+ if (isConnected && linkedAccount) {
569
+ if (connectedRef.current) {
570
+ return;
571
+ }
572
+ connectedRef.current = true;
573
+ track(types.EnumTrackerKeys.socialLoginSuccess, {
574
+ type: linkedAccount.type,
575
+ address: linkedAccount.address
576
+ });
577
+ }
578
+ }, [isConnected, linkedAccount, connectedRef]);
579
+ const value = React11.useMemo(
580
+ () => ({
581
+ connect,
582
+ walletEVM,
583
+ walletSOL,
584
+ isConnected,
585
+ disconnect,
586
+ switchChain,
587
+ linkedAccount,
588
+ exportWallet,
589
+ createEvmWallet,
590
+ createSolanaWallet
591
+ }),
592
+ [
593
+ connect,
594
+ walletEVM,
595
+ walletSOL,
596
+ isConnected,
597
+ disconnect,
598
+ switchChain,
599
+ linkedAccount,
600
+ exportWallet,
601
+ createEvmWallet,
602
+ createSolanaWallet
603
+ ]
604
+ );
605
+ return /* @__PURE__ */ React11__default.default.createElement(PrivyWalletContext.Provider, { value }, children);
606
+ };
607
+ function usePrivyWallet() {
608
+ const context = React11.useContext(PrivyWalletContext);
609
+ if (!context) {
610
+ throw new Error("usePrivyWallet must be used within a PrivyWalletProvider");
611
+ }
612
+ return context;
613
+ }
614
+ function useWallet2() {
615
+ const { track } = hooks.useTrack();
616
+ const { walletChainType } = useWalletConnectorPrivy();
617
+ const [connectorKey, setConnectorKey] = hooks.useLocalStorage(types.ConnectorKey, "");
618
+ const {
619
+ disconnect: disconnectEVM,
620
+ connect: connectEVM,
621
+ wallet: walletEVM,
622
+ connectedChain: connectedChainEvm,
623
+ setChain: setChainEvm,
624
+ isConnected: isConnectedEVM
625
+ } = useWagmiWallet();
626
+ const {
627
+ disconnect: disconnectSOL,
628
+ connect: connectSOL,
629
+ wallet: walletSOL,
630
+ isConnected: isConnectedSOL,
631
+ connectedChain: connectedChainSOL
632
+ } = useSolanaWallet();
633
+ const {
634
+ disconnect: disconnectPrivy,
635
+ connect: connectPrivy,
636
+ walletSOL: privyWalletSOL,
637
+ walletEVM: privyWalletEVM,
638
+ isConnected: isConnectedPrivy,
639
+ switchChain: setChainPrivy
640
+ } = usePrivyWallet();
641
+ const [wallet, setWallet] = React11.useState(null);
642
+ const [namespace, setNamespace] = React11.useState(null);
643
+ const { storageChain, setStorageChain } = hooks.useStorageChain();
644
+ const { setOpenConnectDrawer, setTargetNamespace } = useWalletConnectorPrivy();
645
+ const isManual = React11.useRef(false);
646
+ const connect = (params) => {
647
+ setTargetNamespace(void 0);
648
+ try {
649
+ if (params.walletType === "EVM" /* EVM */) {
650
+ setConnectorKey("EVM" /* EVM */);
651
+ connectEVM({ connector: params.connector });
652
+ }
653
+ if (params.walletType === "SOL" /* SOL */) {
654
+ setConnectorKey("SOL" /* SOL */);
655
+ connectSOL(params.walletAdapter.name).then();
656
+ }
657
+ if (params.walletType === "privy" /* PRIVY */) {
658
+ setConnectorKey("privy" /* PRIVY */);
659
+ connectPrivy();
660
+ }
661
+ } catch (e) {
662
+ }
663
+ };
664
+ const isPrivy = React11.useMemo(() => {
665
+ if (connectorKey === "privy" /* PRIVY */) {
666
+ return true;
667
+ }
668
+ return false;
669
+ }, [connectorKey]);
670
+ const [connectedChain, setConnectedChain] = React11.useState();
671
+ const setChain = async (chain) => {
672
+ let tempNamespace = types.ChainNamespace.evm;
673
+ if (Array.from(SolanaChains.values()).includes(
674
+ parseInt(chain.chainId)
675
+ )) {
676
+ tempNamespace = types.ChainNamespace.solana;
677
+ }
678
+ if (isPrivy) {
679
+ if (tempNamespace === types.ChainNamespace.evm) {
680
+ if (walletChainType === "onlySOL" /* onlySOL */) {
681
+ return Promise.reject(new Error("No evm wallet found"));
682
+ }
683
+ isManual.current = true;
684
+ return setChainPrivy(parseInt(chain.chainId)).then((res) => {
685
+ track(types.EnumTrackerKeys.switchNetworkSuccess, {
686
+ from_chain: storageChain?.chainId,
687
+ to_chain: chain.chainId
688
+ });
689
+ setStorageChain(parseInt(chain.chainId));
690
+ return Promise.resolve(true);
691
+ }).catch((e) => {
692
+ return Promise.reject(e);
693
+ });
694
+ }
695
+ if (tempNamespace === types.ChainNamespace.solana) {
696
+ isManual.current = true;
697
+ if (walletChainType === "onlyEVM" /* onlyEVM */) {
698
+ return Promise.reject(new Error("only evm wallet"));
699
+ }
700
+ if (privyWalletSOL) {
701
+ setStorageChain(parseInt(chain.chainId));
702
+ return Promise.resolve(true);
703
+ } else {
704
+ setOpenConnectDrawer(true);
705
+ setTargetNamespace(types.ChainNamespace.solana);
706
+ return Promise.reject(new Error("No solana wallet found"));
707
+ }
708
+ }
709
+ } else {
710
+ if (storageChain.namespace === types.ChainNamespace.evm) {
711
+ if (tempNamespace === types.ChainNamespace.evm) {
712
+ await setChainEvm(parseInt(chain.chainId));
713
+ setStorageChain(parseInt(chain.chainId));
714
+ track(types.EnumTrackerKeys.switchNetworkSuccess, {
715
+ from_chain: storageChain?.chainId,
716
+ to_chain: chain.chainId
717
+ });
718
+ return Promise.resolve(true);
719
+ }
720
+ if (tempNamespace === types.ChainNamespace.solana) {
721
+ if (isConnectedSOL && walletSOL) {
722
+ setStorageChain(parseInt(chain.chainId));
723
+ } else {
724
+ setOpenConnectDrawer(true);
725
+ setTargetNamespace(types.ChainNamespace.solana);
726
+ return Promise.resolve(true);
727
+ }
728
+ }
729
+ }
730
+ if (storageChain.namespace === types.ChainNamespace.solana) {
731
+ if (tempNamespace === types.ChainNamespace.evm) {
732
+ if (isConnectedEVM && walletEVM) {
733
+ setStorageChain(parseInt(chain.chainId));
734
+ } else {
735
+ setOpenConnectDrawer(true);
736
+ setTargetNamespace(types.ChainNamespace.evm);
737
+ }
738
+ }
739
+ }
740
+ }
741
+ };
742
+ const switchWallet = (namespace2) => {
743
+ const fromWallet = wallet?.accounts[0].address;
744
+ let toWallet;
745
+ if (isPrivy) {
746
+ if (namespace2 === types.ChainNamespace.evm) {
747
+ if (privyWalletEVM) {
748
+ setStorageChain(privyWalletEVM.chain.id);
749
+ toWallet = privyWalletEVM.accounts[0].address;
750
+ }
751
+ } else {
752
+ if (privyWalletSOL) {
753
+ setStorageChain(privyWalletSOL.chain.id);
754
+ toWallet = privyWalletSOL.accounts[0].address;
755
+ }
756
+ }
757
+ } else {
758
+ if (namespace2 === types.ChainNamespace.evm) {
759
+ if (walletEVM) {
760
+ setStorageChain(walletEVM.chain.id);
761
+ toWallet = walletEVM.accounts[0].address;
762
+ }
763
+ } else {
764
+ if (walletSOL) {
765
+ setStorageChain(walletSOL.chain.id);
766
+ toWallet = walletSOL.accounts[0].address;
767
+ }
768
+ }
769
+ }
770
+ track(types.EnumTrackerKeys.clickSwitchWallet, {
771
+ fromWallet,
772
+ toWallet
773
+ });
774
+ };
775
+ const disconnect = async (walletType) => {
776
+ if (walletType === "privy" /* PRIVY */) {
777
+ return await disconnectPrivy();
778
+ }
779
+ if (walletType === "EVM" /* EVM */) {
780
+ return disconnectEVM();
781
+ }
782
+ if (walletType === "SOL" /* SOL */) {
783
+ return disconnectSOL();
784
+ }
785
+ };
786
+ const setNullWalletStatus = () => {
787
+ setWallet(null);
788
+ setConnectedChain(null);
789
+ setNamespace(null);
790
+ };
791
+ React11.useEffect(() => {
792
+ if (connectorKey !== "privy" /* PRIVY */) {
793
+ return;
794
+ }
795
+ if (storageChain?.namespace === types.ChainNamespace.evm) {
796
+ if (privyWalletEVM) {
797
+ setWallet(privyWalletEVM);
798
+ setConnectedChain(privyWalletEVM.chain);
799
+ setNamespace(types.ChainNamespace.evm);
800
+ } else {
801
+ setNullWalletStatus();
802
+ }
803
+ }
804
+ if (storageChain?.namespace === types.ChainNamespace.solana) {
805
+ if (privyWalletSOL) {
806
+ setWallet(privyWalletSOL);
807
+ setConnectedChain(privyWalletSOL.chain);
808
+ setNamespace(types.ChainNamespace.solana);
809
+ } else {
810
+ setNullWalletStatus();
811
+ }
812
+ }
813
+ }, [connectorKey, privyWalletEVM, privyWalletSOL, storageChain]);
814
+ React11.useEffect(() => {
815
+ if (connectorKey === "privy" /* PRIVY */) {
816
+ return;
817
+ }
818
+ if (storageChain?.namespace === types.ChainNamespace.evm) {
819
+ if (isConnectedEVM && walletEVM) {
820
+ setWallet(walletEVM);
821
+ setConnectedChain(connectedChainEvm);
822
+ setNamespace(types.ChainNamespace.evm);
823
+ } else {
824
+ setNullWalletStatus();
825
+ }
826
+ }
827
+ if (storageChain?.namespace === types.ChainNamespace.solana) {
828
+ if (isConnectedSOL && walletSOL) {
829
+ setWallet(walletSOL);
830
+ setConnectedChain(connectedChainSOL);
831
+ setNamespace(types.ChainNamespace.solana);
832
+ } else {
833
+ setNullWalletStatus();
834
+ }
835
+ }
836
+ }, [
837
+ connectorKey,
838
+ storageChain,
839
+ walletEVM,
840
+ walletSOL,
841
+ isConnectedEVM,
842
+ isConnectedSOL
843
+ ]);
844
+ return {
845
+ connect,
846
+ wallet,
847
+ connectedChain,
848
+ setChain,
849
+ namespace,
850
+ switchWallet,
851
+ disconnect
852
+ };
853
+ }
854
+
855
+ // src/util.ts
856
+ var WALLET_ICONS = {
857
+ "metamask": "https://oss.orderly.network/static/sdk/evm_wallets/metamask.png",
858
+ "walletconnect": "https://oss.orderly.network/static/sdk/evm_wallets/walletConnect.png",
859
+ "binance": "https://oss.orderly.network/static/sdk/evm_wallets/binance.png",
860
+ "ledger": "https://oss.orderly.network/static/sdk/evm_wallets/ledger.png",
861
+ "coinbase": "https://oss.orderly.network/static/sdk/evm_wallets/coinbase.png",
862
+ "magic": "https://oss.orderly.network/static/sdk/evm_wallets/magic.png",
863
+ "trezor": "https://oss.orderly.network/static/sdk/evm_wallets/trezor.png",
864
+ "exodus": "https://oss.orderly.network/static/sdk/evm_wallets/exodus.png",
865
+ "frame": "https://oss.orderly.network/static/sdk/evm_wallets/frame.png",
866
+ "rabby": "https://oss.orderly.network/static/sdk/evm_wallets/rabby.png"
867
+ };
868
+ var getWalletIcon = (type) => {
869
+ return WALLET_ICONS[type.toLowerCase()];
870
+ };
871
+ function RenderPrivyTypeIcon({
872
+ type,
873
+ size,
874
+ black
875
+ }) {
876
+ if (type === "email") {
877
+ return /* @__PURE__ */ React11__default.default.createElement(
878
+ "img",
879
+ {
880
+ src: `https://oss.orderly.network/static/sdk/privy/email${black ? "-black" : ""}.svg`,
881
+ width: size
882
+ }
883
+ );
884
+ }
885
+ if (type === "google_oauth") {
886
+ return /* @__PURE__ */ React11__default.default.createElement(
887
+ "img",
888
+ {
889
+ src: "https://oss.orderly.network/static/sdk/privy/google.svg",
890
+ width: size
891
+ }
892
+ );
893
+ }
894
+ if (type === "twitter_oauth") {
895
+ return /* @__PURE__ */ React11__default.default.createElement(
896
+ "img",
897
+ {
898
+ src: `https://oss.orderly.network/static/sdk/privy/twitter${black ? "-black" : ""}.svg`,
899
+ width: size
900
+ }
901
+ );
902
+ }
903
+ return /* @__PURE__ */ React11__default.default.createElement(
904
+ "img",
905
+ {
906
+ src: `https://oss.orderly.network/static/sdk/privy/email${black ? "-black" : ""}.svg`,
907
+ width: size
908
+ }
909
+ );
910
+ }
911
+ function RenderWalletIcon({
912
+ connector
913
+ }) {
914
+ const icon = connector.icon ? connector.icon : getWalletIcon(connector.type);
915
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-w-[18px] oui-h-[18px] oui-flex oui-items-center oui-justify-center" }, /* @__PURE__ */ React11__default.default.createElement(
916
+ "img",
917
+ {
918
+ className: ui.cn(
919
+ connector.icon ? "oui-w-[12px] oui-h-[12px]" : "oui-w-[18px] oui-h-[18px]"
920
+ ),
921
+ src: icon,
922
+ alt: connector.name
923
+ }
924
+ ));
925
+ }
926
+ var MoreIcon = (props) => /* @__PURE__ */ React11__default.default.createElement(
927
+ "svg",
928
+ {
929
+ xmlns: "http://www.w3.org/2000/svg",
930
+ width: "16",
931
+ height: "16",
932
+ viewBox: "0 0 16 16",
933
+ fill: "currentColor",
934
+ ...props
935
+ },
936
+ /* @__PURE__ */ React11__default.default.createElement("path", { d: "M8.00521 6.66797C8.74161 6.66797 9.33854 7.26464 9.33854 8.0013C9.33854 8.73797 8.74161 9.33464 8.00521 9.33464C7.26881 9.33464 6.67188 8.73797 6.67188 8.0013C6.67188 7.26464 7.26881 6.66797 8.00521 6.66797Z" }),
937
+ /* @__PURE__ */ React11__default.default.createElement("path", { d: "M3.33333 6.66797C4.06973 6.66797 4.66667 7.26464 4.66667 8.0013C4.66667 8.73797 4.06973 9.33464 3.33333 9.33464C2.59693 9.33464 2 8.73797 2 8.0013C2 7.26464 2.59693 6.66797 3.33333 6.66797Z" }),
938
+ /* @__PURE__ */ React11__default.default.createElement("path", { d: "M12.6666 6.66797C13.403 6.66797 14 7.26464 14 8.0013C14 8.73797 13.403 9.33464 12.6666 9.33464C11.9302 9.33464 11.3333 8.73797 11.3333 8.0013C11.3333 7.26464 11.9302 6.66797 12.6666 6.66797Z" })
939
+ );
940
+ var DisconnectIcon = (props) => /* @__PURE__ */ React11__default.default.createElement(
941
+ "svg",
942
+ {
943
+ width: "16",
944
+ height: "16",
945
+ viewBox: "0 0 16 16",
946
+ xmlns: "http://www.w3.org/2000/svg",
947
+ fill: "currentColor",
948
+ ...props
949
+ },
950
+ /* @__PURE__ */ React11__default.default.createElement("g", { id: "box-arrow-right" }, /* @__PURE__ */ React11__default.default.createElement(
951
+ "path",
952
+ {
953
+ id: "Vector",
954
+ d: "M1.99365 4.66056C1.99365 3.1879 3.18759 1.9939 4.66032 1.9939H7.32698C8.79965 1.9939 9.99365 3.1879 9.99365 4.66056C9.99365 5.02856 9.69498 5.32723 9.32698 5.32723C8.95898 5.32723 8.66032 5.02856 8.66032 4.66056C8.66032 3.92389 8.06365 3.32723 7.32698 3.32723H4.66032C3.92392 3.32723 3.32699 3.92389 3.32699 4.66056V11.3272C3.32699 12.0639 3.92392 12.6606 4.66032 12.6606H7.32698C8.06365 12.6606 8.66032 12.0639 8.66032 11.3272C8.66032 10.9592 8.95898 10.6606 9.32698 10.6606C9.69498 10.6606 9.99365 10.9592 9.99365 11.3272C9.99365 12.7999 8.79965 13.9939 7.32698 13.9939H4.66032C3.18759 13.9939 1.99365 12.7999 1.99365 11.3272V4.66056ZM6.66032 7.99389C6.66032 7.62589 6.95898 7.32722 7.32698 7.32722H12.369L11.0563 5.99389L11.9937 5.05656L14.473 7.51456C14.733 7.77523 14.733 8.21255 14.473 8.47322L11.9937 10.9312L11.0563 9.99389L12.369 8.66056H7.32698C6.95898 8.66056 6.66032 8.36189 6.66032 7.99389Z"
955
+ }
956
+ ))
957
+ );
958
+ var CloseIcon = (props) => /* @__PURE__ */ React11__default.default.createElement(
959
+ "svg",
960
+ {
961
+ width: "20",
962
+ height: "20",
963
+ viewBox: "0 0 20 20",
964
+ fill: "currentColor",
965
+ xmlns: "http://www.w3.org/2000/svg",
966
+ ...props
967
+ },
968
+ /* @__PURE__ */ React11__default.default.createElement("g", { id: "x-square-fill" }, /* @__PURE__ */ React11__default.default.createElement(
969
+ "path",
970
+ {
971
+ id: "Vector",
972
+ d: "M5.83834 2.44141C3.9975 2.44141 2.505 3.93391 2.505 5.77474V14.1081C2.505 15.9489 3.9975 17.4414 5.83834 17.4414H14.1717C16.0125 17.4414 17.505 15.9489 17.505 14.1081V5.77474C17.505 3.93391 16.0125 2.44141 14.1717 2.44141H5.83834ZM7.505 6.60807C7.71834 6.60807 7.94083 6.67974 8.10417 6.84224L10.005 8.74307L11.9058 6.84224C12.0683 6.67974 12.2917 6.60807 12.505 6.60807C12.7183 6.60807 12.9408 6.67974 13.1042 6.84224C13.4292 7.16808 13.4292 7.71473 13.1042 8.04057L11.2033 9.94141L13.1042 11.8422C13.4292 12.1681 13.4292 12.7147 13.1042 13.0406C12.7783 13.3656 12.2317 13.3656 11.9058 13.0406L10.005 11.1397L8.10417 13.0406C7.77833 13.3656 7.23168 13.3656 6.90584 13.0406C6.58084 12.7147 6.58084 12.1681 6.90584 11.8422L8.80668 9.94141L6.90584 8.04057C6.58084 7.71473 6.58084 7.16808 6.90584 6.84224C7.06834 6.67974 7.29167 6.60807 7.505 6.60807Z"
973
+ }
974
+ ))
975
+ );
976
+ function WalletCard(props) {
977
+ const { t } = i18n.useTranslation();
978
+ const copyAddress = async (address) => {
979
+ await navigator.clipboard.writeText(address);
980
+ ui.toast.success(t("common.copy.copied"));
981
+ };
982
+ return /* @__PURE__ */ React11__default.default.createElement(
983
+ "div",
984
+ {
985
+ className: ui.cn(
986
+ "oui-rounded-2xl oui-relative oui-p-4 oui-h-[110px] oui-overflow-hidden",
987
+ props.type === "EVM" /* EVM */ ? "oui-bg-[#283BEE]" : "oui-bg-[#630EAD]",
988
+ props.isActive && props.type === "SOL" /* SOL */ && props.isBoth && "oui-border-[2px] oui-border-[#faedff]",
989
+ props.isActive && props.type === "EVM" /* EVM */ && props.isBoth && "oui-border-[2px] oui-border-[#B9D1FF]"
990
+ )
991
+ },
992
+ /* @__PURE__ */ React11__default.default.createElement(
993
+ "div",
994
+ {
995
+ style: {
996
+ position: "absolute",
997
+ top: 0,
998
+ right: -20,
999
+ background: "url('https://oss.orderly.network/static/sdk/wallet-card-bg.png')",
1000
+ width: "110px",
1001
+ height: "110px",
1002
+ backgroundSize: "contain",
1003
+ backgroundRepeat: "no-repeat",
1004
+ backgroundPosition: "center",
1005
+ zIndex: 0
1006
+ }
1007
+ }
1008
+ ),
1009
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-relative oui-z-10 oui-flex oui-flex-col oui-justify-between oui-h-full" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-between" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-sm oui-font-semibold" }, ui.formatAddress(props.address)), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React11__default.default.createElement(ui.Tooltip, { content: t("common.copy"), className: "oui-z-[65]" }, /* @__PURE__ */ React11__default.default.createElement(
1010
+ ui.CopyIcon,
1011
+ {
1012
+ size: 16,
1013
+ opacity: 1,
1014
+ className: "oui-text-base-contrast-80 oui-cursor-pointer hover:oui-text-base-contrast",
1015
+ onClick: () => copyAddress(props.address)
1016
+ }
1017
+ )), props.isPrivy ? /* @__PURE__ */ React11__default.default.createElement(
1018
+ PrivyWalletHandleOption,
1019
+ {
1020
+ address: props.address,
1021
+ type: props.type
1022
+ }
1023
+ ) : /* @__PURE__ */ React11__default.default.createElement(NonPrivyWalletHandleOption, { walletType: props.type }))), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-between" }, props.type === "EVM" /* EVM */ ? /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-relative" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-h-[18px] " }, /* @__PURE__ */ React11__default.default.createElement(
1024
+ "img",
1025
+ {
1026
+ src: "https://oss.orderly.network/static/sdk/chains.png",
1027
+ className: "oui-h-[18px] oui-w-[49px] oui-relative oui-z-0"
1028
+ }
1029
+ )), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 oui-relative oui-left-[-9px]" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-rounded-full oui-bg-[#282e3a] oui-w-[18px] oui-h-[18px] oui-flex oui-items-center oui-justify-center" }, /* @__PURE__ */ React11__default.default.createElement(EVMChainPopover, null, /* @__PURE__ */ React11__default.default.createElement(
1030
+ MoreIcon,
1031
+ {
1032
+ className: "oui-text-base-contrast-54 hover:oui-text-base-contrast oui-h-3 oui-w-3 oui-relative oui-z-10",
1033
+ style: { zIndex: 1 }
1034
+ }
1035
+ ))), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs oui-font-semibold" }, "EVM")))) : /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-gap-1" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement(
1036
+ "img",
1037
+ {
1038
+ src: "https://oss.orderly.network/static/sdk/solana-logo.png",
1039
+ className: "oui-w-4"
1040
+ }
1041
+ )), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs oui-font-semibold" }, "Solana")), props.isBoth && /* @__PURE__ */ React11__default.default.createElement("div", null, /* @__PURE__ */ React11__default.default.createElement(
1042
+ ui.Checkbox,
1043
+ {
1044
+ checked: props.isActive,
1045
+ onCheckedChange: props.onActiveChange
1046
+ }
1047
+ ))))
1048
+ );
1049
+ }
1050
+ function NonPrivyWalletHandleOption({
1051
+ walletType
1052
+ }) {
1053
+ const { disconnect } = useWallet2();
1054
+ return /* @__PURE__ */ React11__default.default.createElement("div", { onClick: () => disconnect(walletType) }, /* @__PURE__ */ React11__default.default.createElement(DisconnectIcon, { className: "oui-text-base-contrast-80 oui-cursor-pointer hover:oui-text-base-contrast oui-w-4 oui-h-4" }));
1055
+ }
1056
+ function PrivyWalletHandleOption({
1057
+ address,
1058
+ type
1059
+ }) {
1060
+ const { t } = i18n.useTranslation();
1061
+ const { exportWallet } = usePrivyWallet();
1062
+ return /* @__PURE__ */ React11__default.default.createElement(ui.DropdownMenuRoot, null, /* @__PURE__ */ React11__default.default.createElement(ui.DropdownMenuTrigger, { asChild: true }, /* @__PURE__ */ React11__default.default.createElement("button", null, /* @__PURE__ */ React11__default.default.createElement(MoreIcon, { className: "oui-text-base-contrast-80 oui-cursor-pointer hover:oui-text-base-contrast" }))), /* @__PURE__ */ React11__default.default.createElement(ui.DropdownMenuPortal, null, /* @__PURE__ */ React11__default.default.createElement(
1063
+ ui.DropdownMenuContent,
1064
+ {
1065
+ size: "xl",
1066
+ align: "end",
1067
+ side: "top",
1068
+ style: { width: "100px" },
1069
+ className: "oui-p-1 oui-rounded oui-font-semibold oui-z-[65]",
1070
+ sideOffset: 0
1071
+ },
1072
+ /* @__PURE__ */ React11__default.default.createElement(
1073
+ ui.DropdownMenuItem,
1074
+ {
1075
+ className: "oui-py-1 oui-px-2 oui-text-2xs oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer",
1076
+ onClick: () => {
1077
+ exportWallet(type);
1078
+ }
1079
+ },
1080
+ /* @__PURE__ */ React11__default.default.createElement("div", null, t("common.export"))
1081
+ )
1082
+ )));
1083
+ }
1084
+ function EVMChainPopover({ children }) {
1085
+ const { getChainsByNetwork } = useWalletConnectorPrivy();
1086
+ const [chains] = React11.useState(getChainsByNetwork("mainnet"));
1087
+ const [open, setOpen] = React11.useState(false);
1088
+ const [visible, setVisible] = React11.useState(true);
1089
+ const { t } = i18n.useTranslation();
1090
+ return /* @__PURE__ */ React11__default.default.createElement(
1091
+ ui.Popover,
1092
+ {
1093
+ content: /* @__PURE__ */ React11__default.default.createElement("div", null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-2xs oui-text-base-contrast oui-font-semibold" }, t("connector.supportedEvmChain")), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-grid oui-grid-cols-3 oui-gap-y-3 oui-gap-x-2 oui-mt-3 oui-text-2xs oui-text-base-contrast-54" }, chains.map((item, key) => /* @__PURE__ */ React11__default.default.createElement(
1094
+ "div",
1095
+ {
1096
+ key,
1097
+ className: "oui-flex oui-items-center oui-justify-start oui-gap-1"
1098
+ },
1099
+ /* @__PURE__ */ React11__default.default.createElement(ui.ChainIcon, { chainId: item.id, size: "2xs" }),
1100
+ /* @__PURE__ */ React11__default.default.createElement("div", null, item.name)
1101
+ )))),
1102
+ arrow: true,
1103
+ contentProps: {
1104
+ side: "bottom",
1105
+ align: "center",
1106
+ className: "oui-p-2 oui-z-[65]"
1107
+ }
1108
+ },
1109
+ /* @__PURE__ */ React11__default.default.createElement("button", null, children)
1110
+ );
1111
+ }
1112
+ function AddSolanaWallet() {
1113
+ const { t } = i18n.useTranslation();
1114
+ const { wallets } = useSolanaWallet();
1115
+ const { connect } = useWallet2();
1116
+ const [visible, setVisible] = React11.useState(false);
1117
+ const onToggleVisibility = () => {
1118
+ setVisible(!visible);
1119
+ };
1120
+ const { targetNamespace } = useWalletConnectorPrivy();
1121
+ const [open, setOpen] = React11.useState(false);
1122
+ React11.useEffect(() => {
1123
+ let timer = 0;
1124
+ if (targetNamespace === types.ChainNamespace.solana) {
1125
+ timer = window.setTimeout(() => {
1126
+ setOpen(true);
1127
+ }, 200);
1128
+ }
1129
+ return () => {
1130
+ if (timer) {
1131
+ window.clearTimeout(timer);
1132
+ }
1133
+ };
1134
+ }, [targetNamespace]);
1135
+ React11.useEffect(() => {
1136
+ if (open === false) {
1137
+ return;
1138
+ }
1139
+ const timeId = window.setTimeout(() => {
1140
+ setOpen(false);
1141
+ }, 5e3);
1142
+ return () => {
1143
+ if (timeId) {
1144
+ window.clearTimeout(timeId);
1145
+ }
1146
+ };
1147
+ }, [open]);
1148
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-bg-[#07080A] oui-rounded-[8px] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React11__default.default.createElement(
1149
+ ui.Tooltip,
1150
+ {
1151
+ className: "oui-text-warning-darken oui-max-w-[200px] oui-z-[65]",
1152
+ open,
1153
+ content: "Connect an EVM-compatible wallet to continue using the EVM network."
1154
+ },
1155
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React11__default.default.createElement(
1156
+ "img",
1157
+ {
1158
+ src: "https://oss.orderly.network/static/sdk/solana-logo.png",
1159
+ className: "oui-w-[15px] oui-h-[15px]"
1160
+ }
1161
+ ), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast-80 oui-text-2xs oui-font-semibold" }, t("connector.addSolanaWallet")), /* @__PURE__ */ React11__default.default.createElement("button", { onClick: onToggleVisibility }, visible ? /* @__PURE__ */ React11__default.default.createElement(
1162
+ ui.ChevronDownIcon,
1163
+ {
1164
+ size: 16,
1165
+ opacity: 1,
1166
+ className: "oui-text-base-contrast-36"
1167
+ }
1168
+ ) : /* @__PURE__ */ React11__default.default.createElement(
1169
+ ui.ChevronUpIcon,
1170
+ {
1171
+ size: 16,
1172
+ opacity: 1,
1173
+ className: "oui-text-base-contrast"
1174
+ }
1175
+ )))
1176
+ ), /* @__PURE__ */ React11__default.default.createElement(
1177
+ "div",
1178
+ {
1179
+ className: ui.cn(
1180
+ "oui-grid oui-grid-cols-2 oui-gap-[6px] oui-transition-height oui-duration-150 oui-overflow-hidden",
1181
+ visible ? "oui-max-h-0 oui-mt-0" : "oui-max-h-[400px] oui-mt-3"
1182
+ )
1183
+ },
1184
+ wallets.map((item, index) => /* @__PURE__ */ React11__default.default.createElement(
1185
+ "div",
1186
+ {
1187
+ key: index,
1188
+ className: "oui-flex oui-items-center oui-justify-center oui-gap-1 oui-px-2 oui-py-[11px] oui-bg-[#131519] oui-cursor-pointer",
1189
+ onClick: () => connect({
1190
+ walletType: "SOL" /* SOL */,
1191
+ walletAdapter: item.adapter
1192
+ })
1193
+ },
1194
+ /* @__PURE__ */ React11__default.default.createElement(RenderWalletIcon, { connector: item.adapter }),
1195
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs" }, item.adapter.name)
1196
+ ))
1197
+ ));
1198
+ }
1199
+ function AddEvmWallet() {
1200
+ const { t } = i18n.useTranslation();
1201
+ const [visible, setVisible] = React11.useState(false);
1202
+ const { connect } = useWallet2();
1203
+ const [open, setOpen] = React11.useState(false);
1204
+ const { connectors } = useWagmiWallet();
1205
+ const { targetNamespace } = useWalletConnectorPrivy();
1206
+ React11.useEffect(() => {
1207
+ let timer = 0;
1208
+ if (targetNamespace === types.ChainNamespace.evm) {
1209
+ timer = window.setTimeout(() => {
1210
+ setOpen(true);
1211
+ }, 200);
1212
+ }
1213
+ return () => {
1214
+ if (timer) {
1215
+ window.clearTimeout(timer);
1216
+ }
1217
+ };
1218
+ }, [targetNamespace]);
1219
+ React11.useEffect(() => {
1220
+ if (open === false) {
1221
+ return;
1222
+ }
1223
+ const timeId = window.setTimeout(() => {
1224
+ setOpen(false);
1225
+ }, 5e3);
1226
+ return () => {
1227
+ if (timeId) {
1228
+ window.clearTimeout(timeId);
1229
+ }
1230
+ };
1231
+ }, [open]);
1232
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-bg-[#07080A] oui-rounded-[8px] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React11__default.default.createElement(
1233
+ ui.Tooltip,
1234
+ {
1235
+ className: "oui-text-warning-darken oui-max-w-[200px] oui-z-[65]",
1236
+ open,
1237
+ content: "Connect an EVM-compatible wallet to continue using the EVM network."
1238
+ },
1239
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-relative oui-w-[55px]" }, /* @__PURE__ */ React11__default.default.createElement(
1240
+ "img",
1241
+ {
1242
+ src: "https://oss.orderly.network/static/sdk/chains.png",
1243
+ className: "oui-h-[18px] oui-relative oui-z-0"
1244
+ }
1245
+ ), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-rounded-full oui-bg-[#282e3a] oui-w-[18px] oui-h-[18px] oui-flex oui-items-center oui-justify-center oui-absolute oui-right-0" }, /* @__PURE__ */ React11__default.default.createElement(EVMChainPopover, null, /* @__PURE__ */ React11__default.default.createElement(
1246
+ MoreIcon,
1247
+ {
1248
+ className: "oui-text-base-contrast-54 hover:oui-text-base-contrast oui-h-3 oui-w-3 oui-relative oui-z-10",
1249
+ style: { zIndex: 1 }
1250
+ }
1251
+ ))))), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast-80 oui-text-2xs oui-font-semibold" }, t("connector.addEvmWallet")), /* @__PURE__ */ React11__default.default.createElement("button", { onClick: () => setVisible(!visible) }, visible ? /* @__PURE__ */ React11__default.default.createElement(
1252
+ ui.ChevronDownIcon,
1253
+ {
1254
+ size: 16,
1255
+ opacity: 1,
1256
+ className: "oui-text-base-contrast-36"
1257
+ }
1258
+ ) : /* @__PURE__ */ React11__default.default.createElement(
1259
+ ui.ChevronUpIcon,
1260
+ {
1261
+ size: 16,
1262
+ opacity: 1,
1263
+ className: "oui-text-base-contrast"
1264
+ }
1265
+ )))
1266
+ ), /* @__PURE__ */ React11__default.default.createElement(
1267
+ "div",
1268
+ {
1269
+ className: ui.cn(
1270
+ "oui-grid oui-grid-cols-2 oui-gap-[6px] oui-transition-height oui-duration-150 oui-overflow-hidden",
1271
+ visible ? "oui-max-h-0 oui-mt-0" : "oui-max-h-[400px] oui-mt-3"
1272
+ )
1273
+ },
1274
+ connectors.map((item, index) => /* @__PURE__ */ React11__default.default.createElement(
1275
+ "div",
1276
+ {
1277
+ key: index,
1278
+ className: "oui-flex oui-items-center oui-justify-center oui-gap-1 oui-px-2 oui-py-[11px] oui-bg-[#131519] oui-cursor-pointer oui-text-2xs",
1279
+ onClick: () => connect({ walletType: "EVM" /* EVM */, connector: item })
1280
+ },
1281
+ /* @__PURE__ */ React11__default.default.createElement(RenderWalletIcon, { connector: item }),
1282
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast" }, item.name)
1283
+ ))
1284
+ ));
1285
+ }
1286
+
1287
+ // src/components/renderNoPrivyWallet.tsx
1288
+ function RenderNoPrivyWallet() {
1289
+ const { wallet: walletInWagmi, isConnected: isConnectedEvm } = useWagmiWallet();
1290
+ const { wallet: walletInSolana, isConnected: isConnectedSolana } = useSolanaWallet();
1291
+ const { namespace, switchWallet } = useWallet2();
1292
+ const { walletChainType, connectorWalletType } = useWalletConnectorPrivy();
1293
+ if (walletChainType === "EVM_SOL" /* EVM_SOL */) {
1294
+ if (isConnectedEvm && isConnectedSolana) {
1295
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-5" }, !connectorWalletType.disableWagmi && /* @__PURE__ */ React11__default.default.createElement(
1296
+ WalletCard,
1297
+ {
1298
+ type: "EVM" /* EVM */,
1299
+ address: walletInWagmi?.accounts[0].address,
1300
+ isActive: namespace === types.ChainNamespace.evm,
1301
+ onActiveChange: () => {
1302
+ switchWallet(types.ChainNamespace.evm);
1303
+ },
1304
+ isPrivy: false,
1305
+ isBoth: true
1306
+ }
1307
+ ), !connectorWalletType.disableSolana && /* @__PURE__ */ React11__default.default.createElement(
1308
+ WalletCard,
1309
+ {
1310
+ type: "SOL" /* SOL */,
1311
+ address: walletInSolana?.accounts[0].address,
1312
+ isActive: namespace === types.ChainNamespace.solana,
1313
+ onActiveChange: () => {
1314
+ switchWallet(types.ChainNamespace.solana);
1315
+ },
1316
+ isPrivy: false,
1317
+ isBoth: true
1318
+ }
1319
+ ));
1320
+ }
1321
+ if (isConnectedEvm && !isConnectedSolana) {
1322
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement(
1323
+ WalletCard,
1324
+ {
1325
+ type: "EVM" /* EVM */,
1326
+ address: walletInWagmi?.accounts[0].address,
1327
+ isActive: namespace === types.ChainNamespace.evm,
1328
+ onActiveChange: () => {
1329
+ switchWallet(types.ChainNamespace.evm);
1330
+ },
1331
+ isPrivy: false,
1332
+ isBoth: false
1333
+ }
1334
+ ), !connectorWalletType.disableSolana && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-[1px] oui-bg-line oui-my-5" }), /* @__PURE__ */ React11__default.default.createElement(AddSolanaWallet, null)));
1335
+ }
1336
+ if (!isConnectedEvm && isConnectedSolana) {
1337
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement(
1338
+ WalletCard,
1339
+ {
1340
+ type: "SOL" /* SOL */,
1341
+ address: walletInSolana?.accounts[0].address,
1342
+ isActive: namespace === types.ChainNamespace.solana,
1343
+ onActiveChange: () => {
1344
+ switchWallet(types.ChainNamespace.solana);
1345
+ },
1346
+ isPrivy: false,
1347
+ isBoth: false
1348
+ }
1349
+ ), !connectorWalletType.disableWagmi && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-[1px] oui-bg-line oui-my-5" }), /* @__PURE__ */ React11__default.default.createElement(AddEvmWallet, null)));
1350
+ }
1351
+ }
1352
+ if (walletChainType === "onlySOL" /* onlySOL */) {
1353
+ if (isConnectedSolana) {
1354
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement(
1355
+ WalletCard,
1356
+ {
1357
+ type: "SOL" /* SOL */,
1358
+ address: walletInSolana?.accounts[0].address,
1359
+ isActive: namespace === types.ChainNamespace.solana,
1360
+ onActiveChange: () => {
1361
+ switchWallet(types.ChainNamespace.solana);
1362
+ },
1363
+ isPrivy: false,
1364
+ isBoth: false
1365
+ }
1366
+ ));
1367
+ }
1368
+ }
1369
+ if (walletChainType === "onlyEVM" /* onlyEVM */) {
1370
+ if (isConnectedEvm) {
1371
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement(
1372
+ WalletCard,
1373
+ {
1374
+ type: "EVM" /* EVM */,
1375
+ address: walletInWagmi?.accounts[0].address,
1376
+ isActive: namespace === types.ChainNamespace.evm,
1377
+ onActiveChange: () => {
1378
+ switchWallet(types.ChainNamespace.evm);
1379
+ },
1380
+ isPrivy: false,
1381
+ isBoth: false
1382
+ }
1383
+ ));
1384
+ }
1385
+ }
1386
+ return;
1387
+ }
1388
+ function Drawer({ children, isOpen, onClose }) {
1389
+ const [windowHeight, setWindowHeight] = React11.useState(0);
1390
+ const { isMobile } = ui.useScreen();
1391
+ React11.useEffect(() => {
1392
+ setWindowHeight(window.innerHeight);
1393
+ const handleResize = () => {
1394
+ setWindowHeight(window.innerHeight);
1395
+ };
1396
+ window.addEventListener("resize", handleResize);
1397
+ if (isOpen) {
1398
+ document.body.style.overflow = "hidden";
1399
+ } else {
1400
+ document.body.style.overflow = "auto";
1401
+ }
1402
+ return () => {
1403
+ document.body.style.overflow = "auto";
1404
+ window.removeEventListener("resize", handleResize);
1405
+ };
1406
+ }, [isOpen, isMobile]);
1407
+ if (!isOpen)
1408
+ return null;
1409
+ const drawerHeight = isMobile ? windowHeight : windowHeight - 72 - 24;
1410
+ return reactDom.createPortal(
1411
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-fixed oui-inset-0 oui-z-[60]" }, /* @__PURE__ */ React11__default.default.createElement(
1412
+ "div",
1413
+ {
1414
+ className: "oui-absolute oui-inset-0 oui-bg-[rgba(0,0,0,0.48)] oui-transition-opacity",
1415
+ onClick: onClose
1416
+ }
1417
+ ), /* @__PURE__ */ React11__default.default.createElement(
1418
+ "div",
1419
+ {
1420
+ style: { height: `${drawerHeight}px` },
1421
+ className: ui.cn(
1422
+ "oui-overflow-hidden",
1423
+ "oui-fixed oui-top-0 oui-right-0",
1424
+ "oui-bg-[#131519] oui-shadow-lg",
1425
+ "oui-border oui-border-line-12",
1426
+ "oui-w-[276px]",
1427
+ "md:oui-w-[300px]",
1428
+ "md:oui-top-1/2 md:oui-translate-y-[-50%]",
1429
+ "oui-rounded-0 md:oui-rounded-2xl",
1430
+ "md:oui-rounded-0",
1431
+ "oui-p-4",
1432
+ "oui-transform oui-transition-transform oui-duration-300 oui-ease-in-out",
1433
+ "oui-flex oui-flex-col oui-justify-between",
1434
+ "oui-m-0 md:oui-m-3",
1435
+ isOpen ? "oui-translate-x-0" : "oui--translate-x-full"
1436
+ )
1437
+ },
1438
+ children
1439
+ )),
1440
+ document.body
1441
+ );
1442
+ }
1443
+ function NoWallet() {
1444
+ const { walletChainType } = useWalletConnectorPrivy();
1445
+ const { t } = i18n.useTranslation();
1446
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-justify-center oui-items-center oui-w-full oui-mt-5" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-justify-center oui-items-center oui-w-full oui-gap-3" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-justify-center oui-items-center oui-gap-1 oui-border-[1px] oui-border-line-12 oui-rounded-[8px] oui-px-2 oui-py-[13px] oui-w-full " }, /* @__PURE__ */ React11__default.default.createElement(
1447
+ "img",
1448
+ {
1449
+ src: "https://oss.orderly.network/static/sdk/privy/no-wallet.png",
1450
+ className: "oui-w-[64px] oui-h-[64px]"
1451
+ }
1452
+ ), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast-36 oui-text-2xs oui-font-semibold" }, t("connector.noWallet"))), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-start oui-gap-1 oui-px-2 oui-py-[6px] oui-bg-[rgba(232,136,0,0.15)] oui-rounded-[4px] " }, /* @__PURE__ */ React11__default.default.createElement(
1453
+ ui.ExclamationFillIcon,
1454
+ {
1455
+ size: 10,
1456
+ className: "oui-mt-1 oui-w-[10px] oui-h-[10px] oui-text-warning-darken oui-flex-shrink-0"
1457
+ }
1458
+ ), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-2xs oui-text-warning-darken" }, t("connector.noWallet.description")))), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-[1px] oui-bg-line oui-my-5 oui-w-full" }), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-2 oui-w-full" }, walletChainType === "EVM_SOL" /* EVM_SOL */ && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, /* @__PURE__ */ React11__default.default.createElement(CreateEVMWallet, null), /* @__PURE__ */ React11__default.default.createElement(CreateSOLWallet, null)), walletChainType === "onlyEVM" /* onlyEVM */ && /* @__PURE__ */ React11__default.default.createElement(CreateEVMWallet, null), walletChainType === "onlySOL" /* onlySOL */ && /* @__PURE__ */ React11__default.default.createElement(CreateSOLWallet, null)));
1459
+ }
1460
+ function CreateEVMWallet() {
1461
+ const { t } = i18n.useTranslation();
1462
+ const { createEvmWallet } = usePrivyWallet();
1463
+ const [loading, setLoading] = React11.useState(false);
1464
+ const doCreate = () => {
1465
+ if (loading) {
1466
+ return;
1467
+ }
1468
+ setLoading(true);
1469
+ createEvmWallet().then(() => {
1470
+ setLoading(false);
1471
+ }).catch((e) => {
1472
+ setLoading(false);
1473
+ });
1474
+ };
1475
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-bg-[#07080A] oui-rounded-[8px] oui-px-2 oui-py-[11px] oui-w-full" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-relative oui-w-[55px]" }, /* @__PURE__ */ React11__default.default.createElement(
1476
+ "img",
1477
+ {
1478
+ src: "https://oss.orderly.network/static/sdk/chains.png",
1479
+ className: "oui-h-[18px] oui-relative oui-z-0"
1480
+ }
1481
+ ), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-rounded-full oui-bg-[#282e3a] oui-w-[18px] oui-h-[18px] oui-flex oui-items-center oui-justify-center oui-absolute oui-right-0" }, /* @__PURE__ */ React11__default.default.createElement(EVMChainPopover, null, /* @__PURE__ */ React11__default.default.createElement(
1482
+ MoreIcon,
1483
+ {
1484
+ className: "oui-text-base-contrast-54 hover:oui-text-base-contrast oui-h-3 oui-w-3 oui-relative oui-z-10",
1485
+ style: { zIndex: 1 }
1486
+ }
1487
+ ))))), /* @__PURE__ */ React11__default.default.createElement(
1488
+ "div",
1489
+ {
1490
+ className: ui.cn(
1491
+ "oui-text-base-contrast-80 oui-text-2xs oui-font-semibold oui-cursor-pointer",
1492
+ loading && "oui-opacity-50"
1493
+ ),
1494
+ onClick: doCreate
1495
+ },
1496
+ t("connector.createEvmWallet")
1497
+ )));
1498
+ }
1499
+ function CreateSOLWallet() {
1500
+ const { t } = i18n.useTranslation();
1501
+ const { createSolanaWallet } = usePrivyWallet();
1502
+ const [loading, setLoading] = React11.useState(false);
1503
+ const doCreate = () => {
1504
+ if (loading) {
1505
+ return;
1506
+ }
1507
+ setLoading(true);
1508
+ createSolanaWallet().then(() => {
1509
+ setLoading(false);
1510
+ }).catch((e) => {
1511
+ setLoading(false);
1512
+ });
1513
+ };
1514
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-bg-[#07080A] oui-rounded-[8px] oui-px-2 oui-py-[11px] oui-w-full" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React11__default.default.createElement(
1515
+ "img",
1516
+ {
1517
+ src: "https://oss.orderly.network/static/sdk/solana-logo.png",
1518
+ className: "oui-w-[15px] oui-h-[15px]"
1519
+ }
1520
+ ), /* @__PURE__ */ React11__default.default.createElement(
1521
+ "div",
1522
+ {
1523
+ className: ui.cn(
1524
+ "oui-text-base-contrast-80 oui-text-2xs oui-font-semibold oui-cursor-pointer",
1525
+ loading && "oui-opacity-50"
1526
+ ),
1527
+ onClick: doCreate
1528
+ },
1529
+ t("connector.createSolanaWallet")
1530
+ )));
1531
+ }
1532
+ function RenderPrivyWallet() {
1533
+ const { t } = i18n.useTranslation();
1534
+ const { walletChainType } = useWalletConnectorPrivy();
1535
+ const { walletEVM, walletSOL, linkedAccount } = usePrivyWallet();
1536
+ const { namespace, switchWallet, disconnect } = useWallet2();
1537
+ const renderWalletType = React11.useMemo(() => {
1538
+ if (walletChainType === "onlyEVM" /* onlyEVM */) {
1539
+ if (walletEVM && walletEVM.accounts.length) {
1540
+ return "onlyEVM" /* onlyEVM */;
1541
+ }
1542
+ return "noWallet" /* noWallet */;
1543
+ }
1544
+ if (walletChainType === "onlySOL" /* onlySOL */) {
1545
+ if (walletSOL && walletSOL.accounts.length) {
1546
+ return "onlySOL" /* onlySOL */;
1547
+ }
1548
+ return "noWallet" /* noWallet */;
1549
+ }
1550
+ if ((!walletEVM || !walletEVM.accounts.length) && (!walletSOL || !walletSOL.accounts.length)) {
1551
+ return "noWallet" /* noWallet */;
1552
+ }
1553
+ if (walletEVM && walletEVM.accounts.length && (!walletSOL || !walletSOL.accounts.length)) {
1554
+ return "onlyEVM" /* onlyEVM */;
1555
+ }
1556
+ if ((!walletEVM || !walletEVM.accounts.length) && walletSOL && walletSOL.accounts.length) {
1557
+ return "onlySOL" /* onlySOL */;
1558
+ }
1559
+ return "both" /* both */;
1560
+ }, [walletEVM, walletSOL, walletChainType]);
1561
+ return /* @__PURE__ */ React11__default.default.createElement("div", null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-justify-between oui-items-center" }, linkedAccount && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-gap-2 oui-text-base-contrast" }, /* @__PURE__ */ React11__default.default.createElement("div", null, /* @__PURE__ */ React11__default.default.createElement(RenderPrivyTypeIcon, { type: linkedAccount.type, size: 24 })), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-xs" }, linkedAccount.address)), /* @__PURE__ */ React11__default.default.createElement(
1562
+ "div",
1563
+ {
1564
+ className: "oui-cursor-pointer oui-text-primary oui-text-2xs oui-font-semibold",
1565
+ onClick: () => disconnect("privy" /* PRIVY */)
1566
+ },
1567
+ t("connector.logout")
1568
+ )), renderWalletType === "noWallet" /* noWallet */ && /* @__PURE__ */ React11__default.default.createElement(NoWallet, null), renderWalletType === "both" /* both */ && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-5 oui-mt-5" }, walletChainType === "EVM_SOL" /* EVM_SOL */ && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, /* @__PURE__ */ React11__default.default.createElement(
1569
+ WalletCard,
1570
+ {
1571
+ type: "EVM" /* EVM */,
1572
+ address: walletEVM?.accounts[0].address ?? "",
1573
+ isActive: namespace === types.ChainNamespace.evm,
1574
+ onActiveChange: () => {
1575
+ switchWallet(types.ChainNamespace.evm);
1576
+ },
1577
+ isPrivy: true,
1578
+ isBoth: true
1579
+ }
1580
+ ), /* @__PURE__ */ React11__default.default.createElement(
1581
+ WalletCard,
1582
+ {
1583
+ type: "SOL" /* SOL */,
1584
+ address: walletSOL?.accounts[0].address ?? "",
1585
+ isActive: namespace === types.ChainNamespace.solana,
1586
+ onActiveChange: () => {
1587
+ switchWallet(types.ChainNamespace.solana);
1588
+ },
1589
+ isPrivy: true,
1590
+ isBoth: true
1591
+ }
1592
+ )), walletChainType === "onlyEVM" /* onlyEVM */ && /* @__PURE__ */ React11__default.default.createElement(
1593
+ WalletCard,
1594
+ {
1595
+ type: "EVM" /* EVM */,
1596
+ address: walletEVM?.accounts[0].address ?? "",
1597
+ isActive: namespace === types.ChainNamespace.evm,
1598
+ onActiveChange: () => {
1599
+ switchWallet(types.ChainNamespace.evm);
1600
+ },
1601
+ isPrivy: true,
1602
+ isBoth: false
1603
+ }
1604
+ ), walletChainType === "onlySOL" /* onlySOL */ && /* @__PURE__ */ React11__default.default.createElement(
1605
+ WalletCard,
1606
+ {
1607
+ type: "SOL" /* SOL */,
1608
+ address: walletSOL?.accounts[0].address ?? "",
1609
+ isActive: namespace === types.ChainNamespace.solana,
1610
+ onActiveChange: () => {
1611
+ switchWallet(types.ChainNamespace.solana);
1612
+ },
1613
+ isPrivy: true,
1614
+ isBoth: false
1615
+ }
1616
+ )), renderWalletType === "onlyEVM" /* onlyEVM */ && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-0 oui-mt-5" }, /* @__PURE__ */ React11__default.default.createElement(
1617
+ WalletCard,
1618
+ {
1619
+ type: "EVM" /* EVM */,
1620
+ address: walletEVM?.accounts[0].address ?? "",
1621
+ isActive: namespace === types.ChainNamespace.evm,
1622
+ onActiveChange: () => {
1623
+ switchWallet(types.ChainNamespace.evm);
1624
+ },
1625
+ isPrivy: true,
1626
+ isBoth: false
1627
+ }
1628
+ ), walletChainType === "EVM_SOL" /* EVM_SOL */ && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-[1px] oui-bg-line oui-my-5 oui-w-full" }), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-2 oui-w-full" }, /* @__PURE__ */ React11__default.default.createElement(CreateSOLWallet, null)))), renderWalletType === "onlySOL" /* onlySOL */ && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-0 oui-mt-5" }, /* @__PURE__ */ React11__default.default.createElement(
1629
+ WalletCard,
1630
+ {
1631
+ type: "SOL" /* SOL */,
1632
+ address: walletSOL?.accounts[0].address ?? "",
1633
+ isActive: namespace === types.ChainNamespace.solana,
1634
+ onActiveChange: () => {
1635
+ switchWallet(types.ChainNamespace.solana);
1636
+ },
1637
+ isPrivy: true,
1638
+ isBoth: false
1639
+ }
1640
+ ), walletChainType === "EVM_SOL" /* EVM_SOL */ && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-[1px] oui-bg-line oui-my-5 oui-w-full" }), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-flex-col oui-gap-2 oui-w-full" }, /* @__PURE__ */ React11__default.default.createElement(CreateEVMWallet, null)))));
1641
+ }
1642
+
1643
+ // src/components/connectDrawer.tsx
1644
+ function PrivyConnectArea({ connect }) {
1645
+ const { t } = i18n.useTranslation();
1646
+ const { isMobile, isDesktop } = ui.useScreen();
1647
+ const { connectorWalletType } = useWalletConnectorPrivy();
1648
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement(
1649
+ "div",
1650
+ {
1651
+ className: ui.cn(
1652
+ "oui-flex oui-items-center oui-justify-between",
1653
+ "oui-text-base-contrast-80 oui-text-sm oui-font-semibold oui-mb-3",
1654
+ "md:oui-mb-2"
1655
+ )
1656
+ },
1657
+ t("connector.loginIn"),
1658
+ isMobile && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-3 oui-flex oui-justify-center" }, /* @__PURE__ */ React11__default.default.createElement(
1659
+ "img",
1660
+ {
1661
+ src: "https://oss.orderly.network/static/sdk/privy/privy-logo.png",
1662
+ className: " oui-h-[10px]"
1663
+ }
1664
+ ))
1665
+ ), /* @__PURE__ */ React11__default.default.createElement(
1666
+ "div",
1667
+ {
1668
+ className: ui.cn(
1669
+ "oui-grid oui-grid-cols-2 oui-gap-[6px]",
1670
+ "md:oui-flex md:oui-flex-col md:oui-gap-[6px]"
1671
+ )
1672
+ },
1673
+ /* @__PURE__ */ React11__default.default.createElement(
1674
+ "div",
1675
+ {
1676
+ className: "oui-cursor-pointer oui-rounded-[6px] oui-bg-[#333948] oui-px-2 oui-py-[11px] oui-flex oui-justify-center oui-items-center oui-gap-1",
1677
+ onClick: () => connect({ walletType: "privy", extraType: "email" })
1678
+ },
1679
+ /* @__PURE__ */ React11__default.default.createElement(
1680
+ "img",
1681
+ {
1682
+ src: "https://oss.orderly.network/static/sdk/privy/email.svg",
1683
+ className: "oui-w-[18px] oui-h-[18px]"
1684
+ }
1685
+ ),
1686
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs" }, t("connector.email"))
1687
+ ),
1688
+ /* @__PURE__ */ React11__default.default.createElement(
1689
+ "div",
1690
+ {
1691
+ className: "oui-rounded-[6px] oui-bg-[#335FFC] oui-px-2 oui-py-[11px] oui-flex oui-justify-center oui-items-center oui-gap-1 oui-cursor-pointer",
1692
+ onClick: () => connect({ walletType: "privy", extraType: "google" })
1693
+ },
1694
+ /* @__PURE__ */ React11__default.default.createElement(
1695
+ "img",
1696
+ {
1697
+ src: "https://oss.orderly.network/static/sdk/privy/google.svg",
1698
+ className: "oui-w-[18px] oui-h-[18px]"
1699
+ }
1700
+ ),
1701
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs" }, t("connector.google"))
1702
+ ),
1703
+ /* @__PURE__ */ React11__default.default.createElement(
1704
+ "div",
1705
+ {
1706
+ className: "oui-rounded-[6px] oui-bg-[#07080A] oui-px-2 oui-py-[11px] oui-flex oui-justify-center oui-items-center oui-gap-1 oui-cursor-pointer",
1707
+ onClick: () => connect({ walletType: "privy", extraType: "twitter" })
1708
+ },
1709
+ /* @__PURE__ */ React11__default.default.createElement(
1710
+ "img",
1711
+ {
1712
+ src: "https://oss.orderly.network/static/sdk/privy/twitter.svg",
1713
+ className: "oui-w-[18px] oui-h-[18px]"
1714
+ }
1715
+ ),
1716
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs" }, t("connector.twitter"))
1717
+ )
1718
+ ), isDesktop && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-3 oui-flex oui-justify-center oui-mt-4" }, /* @__PURE__ */ React11__default.default.createElement(
1719
+ "img",
1720
+ {
1721
+ src: "https://oss.orderly.network/static/sdk/privy/privy-logo.png",
1722
+ className: " oui-h-[10px]"
1723
+ }
1724
+ )), (!connectorWalletType.disableWagmi || !connectorWalletType.disableSolana) && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-h-[1px] oui-bg-line oui-w-full oui-mt-4 md:oui-mt-5" }));
1725
+ }
1726
+ function EVMConnectArea({ connect }) {
1727
+ const { connectors } = useWagmiWallet();
1728
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast-80 oui-text-sm oui-font-semibold oui-mb-2" }, "EVM"), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-grid oui-grid-cols-2 oui-gap-[6px]" }, connectors.map((item, key) => /* @__PURE__ */ React11__default.default.createElement(
1729
+ "div",
1730
+ {
1731
+ key,
1732
+ className: " oui-flex oui-items-center oui-justify-start oui-gap-1 oui-rounded-[6px] oui-px-2 oui-bg-[#07080A] oui-py-[11px] oui-flex-1 oui-cursor-pointer",
1733
+ onClick: () => connect(item)
1734
+ },
1735
+ /* @__PURE__ */ React11__default.default.createElement(RenderWalletIcon, { connector: item }),
1736
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs" }, item.name)
1737
+ ))));
1738
+ }
1739
+ function SOLConnectArea({
1740
+ connect
1741
+ }) {
1742
+ const { wallets } = useSolanaWallet();
1743
+ return /* @__PURE__ */ React11__default.default.createElement("div", null, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast-80 oui-text-sm oui-font-semibold oui-mb-2" }, "Solana"), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-grid oui-grid-cols-2 oui-gap-[6px]" }, wallets.map((item, key) => /* @__PURE__ */ React11__default.default.createElement(
1744
+ "div",
1745
+ {
1746
+ key,
1747
+ className: " oui-flex oui-items-center oui-justify-center oui-gap-1 oui-rounded-[6px] oui-px-2 oui-bg-[#07080A] oui-py-[11px] oui-flex-1 oui-cursor-pointer",
1748
+ onClick: () => connect(item.adapter)
1749
+ },
1750
+ /* @__PURE__ */ React11__default.default.createElement(RenderWalletIcon, { connector: item.adapter }),
1751
+ /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-text-base-contrast oui-text-2xs" }, item.adapter.name)
1752
+ ))));
1753
+ }
1754
+ function ConnectWallet() {
1755
+ const { connect } = useWallet2();
1756
+ const { setOpenConnectDrawer, walletChainType, connectorWalletType } = useWalletConnectorPrivy();
1757
+ const handleConnect = (params) => {
1758
+ connect(params);
1759
+ if (params.walletType === "privy" /* PRIVY */) {
1760
+ setOpenConnectDrawer(false);
1761
+ }
1762
+ };
1763
+ return /* @__PURE__ */ React11__default.default.createElement("div", { className: ui.cn("oui-flex oui-flex-col oui-gap-4", "md:oui-gap-5") }, !connectorWalletType.disablePrivy && /* @__PURE__ */ React11__default.default.createElement(
1764
+ PrivyConnectArea,
1765
+ {
1766
+ connect: (type) => handleConnect({ walletType: "privy" /* PRIVY */, extraType: type })
1767
+ }
1768
+ ), walletChainType === "EVM_SOL" /* EVM_SOL */ && /* @__PURE__ */ React11__default.default.createElement(React11__default.default.Fragment, null, !connectorWalletType.disableWagmi && /* @__PURE__ */ React11__default.default.createElement(
1769
+ EVMConnectArea,
1770
+ {
1771
+ connect: (connector) => handleConnect({
1772
+ walletType: "EVM" /* EVM */,
1773
+ connector
1774
+ })
1775
+ }
1776
+ ), !connectorWalletType.disableSolana && /* @__PURE__ */ React11__default.default.createElement(
1777
+ SOLConnectArea,
1778
+ {
1779
+ connect: (walletAdapter) => handleConnect({
1780
+ walletType: "SOL" /* SOL */,
1781
+ walletAdapter
1782
+ })
1783
+ }
1784
+ )), walletChainType === "onlyEVM" /* onlyEVM */ && /* @__PURE__ */ React11__default.default.createElement(
1785
+ EVMConnectArea,
1786
+ {
1787
+ connect: (connector) => handleConnect({ walletType: "EVM" /* EVM */, connector })
1788
+ }
1789
+ ), walletChainType === "onlySOL" /* onlySOL */ && /* @__PURE__ */ React11__default.default.createElement(
1790
+ SOLConnectArea,
1791
+ {
1792
+ connect: (walletAdapter) => handleConnect({
1793
+ walletType: "SOL" /* SOL */,
1794
+ walletAdapter
1795
+ })
1796
+ }
1797
+ ));
1798
+ }
1799
+ function MyWallet() {
1800
+ const [connectorKey, setConnectorKey] = hooks.useLocalStorage(types.ConnectorKey, "");
1801
+ return /* @__PURE__ */ React11__default.default.createElement("div", null, connectorKey === "privy" && /* @__PURE__ */ React11__default.default.createElement(RenderPrivyWallet, null), connectorKey !== "privy" && /* @__PURE__ */ React11__default.default.createElement(RenderNoPrivyWallet, null));
1802
+ }
1803
+ function ConnectDrawer(props) {
1804
+ const { t } = i18n.useTranslation();
1805
+ const { isConnected: isConnectedPrivy } = usePrivyWallet();
1806
+ const { isConnected: isConnectedEvm } = useWagmiWallet();
1807
+ const { isConnected: isConnectedSolana } = useSolanaWallet();
1808
+ const { termsOfUse, connectorWalletType } = useWalletConnectorPrivy();
1809
+ const [connectorKey, setConnectorKey] = hooks.useLocalStorage(types.ConnectorKey, "");
1810
+ const isConnected = React11.useMemo(() => {
1811
+ if (connectorKey === "privy" /* PRIVY */ && isConnectedPrivy) {
1812
+ return true;
1813
+ }
1814
+ if (connectorKey !== "privy" /* PRIVY */) {
1815
+ if (isConnectedEvm) {
1816
+ return true;
1817
+ }
1818
+ if (isConnectedSolana) {
1819
+ return true;
1820
+ }
1821
+ }
1822
+ return false;
1823
+ }, [isConnectedPrivy, isConnectedEvm, isConnectedSolana, connectorKey]);
1824
+ const { isMobile } = ui.useScreen();
1825
+ return /* @__PURE__ */ React11__default.default.createElement(Drawer, { isOpen: props.open, onClose: () => props.onChangeOpen(false) }, !isMobile && /* @__PURE__ */ React11__default.default.createElement(
1826
+ "div",
1827
+ {
1828
+ className: "oui-z-0 oui-absolute -oui-top-[calc(100vh/2)] oui-h-[100vh] oui-left-[50px] oui-right-[50px]",
1829
+ style: {
1830
+ background: "conic-gradient(from -41deg at 40.63% 50.41%, rgba(242, 98, 181, 0.00) 125.17920970916748deg, rgba(95, 197, 255, 0.20) 193.4119462966919deg, rgba(255, 172, 137, 0.20) 216.0206937789917deg, rgba(129, 85, 255, 0.20) 236.0708713531494deg, rgba(120, 157, 255, 0.20) 259.95326042175293deg, rgba(159, 115, 241, 0.00) 311.0780096054077deg)",
1831
+ filter: "blur(50px)"
1832
+ }
1833
+ }
1834
+ ), /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-z-10 oui-relative" }, /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-flex oui-justify-between oui-items-center oui-mb-4 md:oui-mb-5" }, /* @__PURE__ */ React11__default.default.createElement(
1835
+ "div",
1836
+ {
1837
+ className: ui.cn(
1838
+ "oui-font-semibold oui-text-base-contrast-80 ",
1839
+ "oui-text-[20px] oui-py-2",
1840
+ "md:oui-text-base md:oui-py-0"
1841
+ )
1842
+ },
1843
+ isConnected ? t("connector.myWallet") : t("connector.connectWallet")
1844
+ ), /* @__PURE__ */ React11__default.default.createElement(
1845
+ CloseIcon,
1846
+ {
1847
+ className: "oui-cursor-pointer oui-text-base-contrast-20 oui-w-5 oui-h-5 hover:oui-text-base-contrast-80",
1848
+ onClick: () => props.onChangeOpen(false)
1849
+ }
1850
+ )), isConnected ? /* @__PURE__ */ React11__default.default.createElement(MyWallet, null) : /* @__PURE__ */ React11__default.default.createElement(ConnectWallet, null)), !isConnected && /* @__PURE__ */ React11__default.default.createElement("div", { className: "oui-z-10 oui-text-base-contrast-80 oui-text-center oui-text-2xs oui-relative oui-font-semibold" }, /* @__PURE__ */ React11__default.default.createElement(
1851
+ i18n.Trans,
1852
+ {
1853
+ i18nKey: "connector.termsOfUse",
1854
+ components: [
1855
+ /* @__PURE__ */ React11__default.default.createElement(
1856
+ "a",
1857
+ {
1858
+ href: termsOfUse,
1859
+ className: "oui-cursor-pointer oui-underline oui-text-primary",
1860
+ target: "_blank"
1861
+ }
1862
+ )
1863
+ ]
1864
+ }
1865
+ )));
1866
+ }
1867
+ function UserCenter(props) {
1868
+ const { accountState: state } = props;
1869
+ return /* @__PURE__ */ React11__default.default.createElement(RenderUserCenter, { state, disabledConnect: props.disabledConnect });
1870
+ }
1871
+ var MwebUserCenter = (props) => {
1872
+ const { state } = props;
1873
+ return /* @__PURE__ */ React11__default.default.createElement(RenderUserCenter, { state, disabledConnect: props.disabledConnect });
1874
+ };
1875
+ var RenderUserCenter = (props) => {
1876
+ const { state } = props;
1877
+ const { t } = i18n.useTranslation();
1878
+ const { isMobile } = ui.useScreen();
1879
+ const { connect, wallet } = hooks.useWalletConnector();
1880
+ const { linkedAccount } = usePrivyWallet();
1881
+ const disabled = state.validating || props.disabledConnect;
1882
+ if (state.status === types.AccountStatusEnum.EnableTradingWithoutConnected) {
1883
+ return /* @__PURE__ */ React11__default.default.createElement(
1884
+ ui.Button,
1885
+ {
1886
+ size: "md",
1887
+ variant: "gradient",
1888
+ angle: 45,
1889
+ "data-testid": "oui-testid-nav-bar-address-btn",
1890
+ className: "oui-flex oui-items-center oui-justify-center oui-gap-2"
1891
+ },
1892
+ /* @__PURE__ */ React11__default.default.createElement(ui.Text.formatted, { rule: "address", className: "oui-text-[rgba(0,0,0,.88)]" }, ui.formatAddress(state.address, [4, 4]))
1893
+ );
1894
+ }
1895
+ if (state.status <= types.AccountStatusEnum.NotConnected || disabled) {
1896
+ return /* @__PURE__ */ React11__default.default.createElement(
1897
+ ui.Button,
1898
+ {
1899
+ "data-testid": "oui-testid-nav-bar-connectWallet-btn",
1900
+ size: "md",
1901
+ variant: disabled ? void 0 : "gradient",
1902
+ angle: 45,
1903
+ className: "wallet-connect-button",
1904
+ loading: state.validating,
1905
+ disabled,
1906
+ onClick: () => {
1907
+ connect().then((r) => {
1908
+ }).catch((e) => void 0);
1909
+ }
1910
+ },
1911
+ t("connector.connectWallet")
1912
+ );
1913
+ }
1914
+ if (!wallet) {
1915
+ return;
1916
+ }
1917
+ if (isMobile) {
1918
+ return /* @__PURE__ */ React11__default.default.createElement(
1919
+ uiConnector.AuthGuard,
1920
+ {
1921
+ buttonProps: {
1922
+ size: "sm"
1923
+ }
1924
+ },
1925
+ /* @__PURE__ */ React11__default.default.createElement("div", { onClick: () => connect() }, /* @__PURE__ */ React11__default.default.createElement(
1926
+ ui.Button,
1927
+ {
1928
+ size: "sm",
1929
+ variant: "gradient",
1930
+ angle: 45,
1931
+ "data-testid": "oui-testid-nav-bar-address-btn",
1932
+ className: "oui-flex oui-items-center oui-justify-center oui-gap-2"
1933
+ },
1934
+ linkedAccount && /* @__PURE__ */ React11__default.default.createElement(
1935
+ RenderPrivyTypeIcon,
1936
+ {
1937
+ type: linkedAccount.type,
1938
+ size: 18,
1939
+ black: true
1940
+ }
1941
+ ),
1942
+ /* @__PURE__ */ React11__default.default.createElement(
1943
+ ui.Text.formatted,
1944
+ {
1945
+ rule: "address",
1946
+ className: "oui-text-[rgba(0,0,0,.88)]"
1947
+ },
1948
+ ui.formatAddress(wallet.accounts[0].address)
1949
+ )
1950
+ ))
1951
+ );
1952
+ }
1953
+ return /* @__PURE__ */ React11__default.default.createElement("div", { onClick: () => connect() }, /* @__PURE__ */ React11__default.default.createElement(
1954
+ ui.Button,
1955
+ {
1956
+ size: "md",
1957
+ variant: "gradient",
1958
+ angle: 45,
1959
+ "data-testid": "oui-testid-nav-bar-address-btn",
1960
+ className: "oui-flex oui-items-center oui-justify-center oui-gap-2"
1961
+ },
1962
+ linkedAccount && /* @__PURE__ */ React11__default.default.createElement(
1963
+ RenderPrivyTypeIcon,
1964
+ {
1965
+ type: linkedAccount.type,
1966
+ size: 18,
1967
+ black: true
1968
+ }
1969
+ ),
1970
+ /* @__PURE__ */ React11__default.default.createElement(ui.Text.formatted, { rule: "address", className: "oui-text-[rgba(0,0,0,.88)]" }, ui.formatAddress(wallet.accounts[0].address))
1971
+ ));
1972
+ };
1973
+ ui.installExtension({
1974
+ name: "account-menu-privy",
1975
+ scope: ["*"],
1976
+ positions: [ui.ExtensionPositionEnum.AccountMenu]
1977
+ })((props) => {
1978
+ return /* @__PURE__ */ React11__default.default.createElement(UserCenter, { ...props });
1979
+ });
1980
+ ui.installExtension({
1981
+ name: "mobile-account-menu-privy",
1982
+ scope: ["*"],
1983
+ positions: [ui.ExtensionPositionEnum.MobileAccountMenu]
1984
+ })((props) => {
1985
+ return /* @__PURE__ */ React11__default.default.createElement(MwebUserCenter, { ...props });
1986
+ });
1987
+
1988
+ // src/main.tsx
1989
+ function Main(props) {
1990
+ const { wallet, connectedChain, setChain, namespace } = useWallet2();
1991
+ const { openConnectDrawer, setOpenConnectDrawer, setTargetNamespace } = useWalletConnectorPrivy();
1992
+ const connect = (props2) => {
1993
+ if (props2 && props2.autoSelect) {
1994
+ return Promise.resolve([]);
1995
+ }
1996
+ setTargetNamespace(void 0);
1997
+ return new Promise((resolve, reject) => {
1998
+ setOpenConnectDrawer(true);
1999
+ resolve([]);
2000
+ });
2001
+ };
2002
+ const disconnect = React11.useCallback(async () => {
2003
+ return Promise.resolve([]);
2004
+ }, [wallet]);
2005
+ const value = React11.useMemo(
2006
+ () => ({
2007
+ connect,
2008
+ disconnect,
2009
+ connecting: false,
2010
+ wallet,
2011
+ setChain,
2012
+ connectedChain,
2013
+ namespace,
2014
+ chains: [],
2015
+ settingChain: false
2016
+ }),
2017
+ [connect, setChain, connectedChain, wallet, namespace]
2018
+ );
2019
+ return /* @__PURE__ */ React11__default.default.createElement(hooks.WalletConnectorContext.Provider, { value }, /* @__PURE__ */ React11__default.default.createElement(
2020
+ ConnectDrawer,
2021
+ {
2022
+ open: openConnectDrawer,
2023
+ onChangeOpen: setOpenConnectDrawer
2024
+ }
2025
+ ), props.children);
2026
+ }
2027
+ function InitPrivyProvider({
2028
+ privyConfig,
2029
+ initChains,
2030
+ children
2031
+ }) {
2032
+ if (!privyConfig) {
2033
+ return children;
2034
+ }
2035
+ const config = React11.useMemo(() => {
2036
+ const chains = initChains;
2037
+ return {
2038
+ loginMethods: privyConfig.config?.loginMethods || ["email", "google", "twitter"],
2039
+ appearance: {
2040
+ ...privyConfig.config?.appearance,
2041
+ walletChainType: "ethereum-and-solana"
2042
+ },
2043
+ embeddedWallets: {
2044
+ ethereum: {
2045
+ createOnLogin: "all-users"
2046
+ },
2047
+ solana: {
2048
+ createOnLogin: "all-users"
2049
+ }
2050
+ },
2051
+ defaultChain: chains[0],
2052
+ supportedChains: chains
2053
+ };
2054
+ }, [initChains, privyConfig]);
2055
+ if (!initChains.length) {
2056
+ return;
2057
+ }
2058
+ return /* @__PURE__ */ React11__default.default.createElement(reactAuth.PrivyProvider, { appId: privyConfig.appid, config }, children);
2059
+ }
2060
+ function InitSolanaProvider({
2061
+ mainnetRpc,
2062
+ devnetRpc,
2063
+ wallets: walletsProp,
2064
+ onError,
2065
+ children
2066
+ }) {
2067
+ const { network, setSolanaInfo, connectorWalletType } = useWalletConnectorPrivy();
2068
+ if (connectorWalletType.disableSolana) {
2069
+ return children;
2070
+ }
2071
+ const wallets = React11.useMemo(() => {
2072
+ return walletsProp ?? [new walletAdapterWallets.PhantomWalletAdapter()];
2073
+ }, [walletsProp]);
2074
+ React11.useEffect(() => {
2075
+ let rpcUrl = null;
2076
+ if (network === "mainnet") {
2077
+ rpcUrl = mainnetRpc ?? null;
2078
+ } else {
2079
+ rpcUrl = devnetRpc ?? null;
2080
+ }
2081
+ if (rpcUrl) {
2082
+ setSolanaInfo({
2083
+ rpcUrl,
2084
+ network: network === "mainnet" ? walletAdapterBase.WalletAdapterNetwork.Mainnet : walletAdapterBase.WalletAdapterNetwork.Devnet
2085
+ });
2086
+ }
2087
+ }, [network, mainnetRpc, devnetRpc, setSolanaInfo]);
2088
+ return /* @__PURE__ */ React11__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, onError }, children);
2089
+ }
2090
+ function InitWagmiProvider({
2091
+ children,
2092
+ initialState,
2093
+ initChains,
2094
+ wagmiConfig
2095
+ }) {
2096
+ const { connectorWalletType } = useWalletConnectorPrivy();
2097
+ if (connectorWalletType.disableWagmi) {
2098
+ return children;
2099
+ }
2100
+ const [queryClient] = React11.useState(() => new reactQuery.QueryClient());
2101
+ const [config, setConfig] = React11.useState(
2102
+ () => WagmiExport.createConfig({
2103
+ chains: initChains && initChains.length ? initChains : [chains.mainnet],
2104
+ multiInjectedProviderDiscovery: true,
2105
+ storage: wagmiConfig.storage ? wagmiConfig.storage : WagmiExport.createStorage({
2106
+ storage: localStorage,
2107
+ key: "wagmi"
2108
+ }),
2109
+ connectors: wagmiConfig.connectors ? wagmiConfig.connectors : [WagmiExport.injected()],
2110
+ transports: Object.fromEntries(
2111
+ initChains.map((chain) => [chain.id, WagmiExport.http()])
2112
+ )
2113
+ })
2114
+ );
2115
+ return /* @__PURE__ */ React11__default.default.createElement(WagmiExport.WagmiProvider, { config, initialState }, /* @__PURE__ */ React11__default.default.createElement(reactQuery.QueryClientProvider, { client: queryClient }, children));
2116
+ }
2117
+
2118
+ // src/provider.tsx
2119
+ var fetchChainInfo = async (url) => {
2120
+ const response = await fetch(url);
2121
+ if (!response.ok) {
2122
+ throw new Error(`Failed to fetch data from ${url}`);
2123
+ }
2124
+ return response.json();
2125
+ };
2126
+ var processChainInfo = (chainInfo) => chainInfo.map(
2127
+ (row) => viemExport.defineChain({
2128
+ id: Number(row.chain_id),
2129
+ name: row.name,
2130
+ nativeCurrency: {
2131
+ decimals: row.currency_decimal,
2132
+ name: "Ether",
2133
+ symbol: row.currency_symbol
2134
+ },
2135
+ rpcUrls: {
2136
+ default: {
2137
+ http: [row.public_rpc_url]
2138
+ }
2139
+ },
2140
+ blockExplorers: {
2141
+ default: { name: "Explorer", url: row.explorer_base_url }
2142
+ }
2143
+ })
2144
+ ) || [];
2145
+ var walletConnectorPrivyContext = React11.createContext({
2146
+ initChains: [chains.mainnet],
2147
+ mainnetChains: [],
2148
+ testnetChains: [],
2149
+ getChainsByNetwork: () => [],
2150
+ openConnectDrawer: false,
2151
+ setOpenConnectDrawer: () => {
2152
+ },
2153
+ targetNamespace: void 0,
2154
+ setTargetNamespace: () => {
2155
+ },
2156
+ network: "mainnet" /* mainnet */,
2157
+ setNetwork: () => {
2158
+ },
2159
+ solanaInfo: null,
2160
+ setSolanaInfo: () => {
2161
+ },
2162
+ termsOfUse: "",
2163
+ walletChainType: "EVM_SOL" /* EVM_SOL */,
2164
+ connectorWalletType: {
2165
+ disableWagmi: false,
2166
+ disablePrivy: false,
2167
+ disableSolana: false
2168
+ }
2169
+ });
2170
+ var useWalletConnectorPrivy = () => React11.useContext(walletConnectorPrivyContext);
2171
+ function WalletConnectorPrivyProvider(props) {
2172
+ const [walletChainType, setWalletChainType] = React11.useState(
2173
+ "EVM_SOL" /* EVM_SOL */
2174
+ );
2175
+ const [termsOfUse] = React11.useState(props.termsOfUse);
2176
+ const [network, setNetwork] = React11.useState(props.network);
2177
+ const [initChains, setInitChains] = React11.useState([]);
2178
+ const [mainnetChains, setMainnetChains] = React11.useState([]);
2179
+ const [testnetChains, setTestnetChains] = React11.useState([]);
2180
+ const initRef = React11.useRef(false);
2181
+ const [openConnectDrawer, setOpenConnectDrawer] = React11.useState(false);
2182
+ const [targetNamespace, setTargetNamespace] = React11.useState();
2183
+ const [solanaInfo, setSolanaInfo] = React11.useState(null);
2184
+ const connectorWalletType = React11.useMemo(() => {
2185
+ let type = {
2186
+ disableWagmi: false,
2187
+ disablePrivy: false,
2188
+ disableSolana: false
2189
+ };
2190
+ if (!props.privyConfig) {
2191
+ type.disablePrivy = true;
2192
+ }
2193
+ if (!props.wagmiConfig) {
2194
+ type.disableWagmi = true;
2195
+ }
2196
+ if (!props.solanaConfig) {
2197
+ type.disableSolana = true;
2198
+ }
2199
+ return type;
2200
+ }, [props.privyConfig, props.wagmiConfig, props.solanaConfig]);
2201
+ const fetchAllChains = async () => {
2202
+ let testChainsList = [];
2203
+ let mainnetChainsList = [];
2204
+ try {
2205
+ const testChainInfoRes = await fetchChainInfo(
2206
+ "https://testnet-api-evm.orderly.org/v1/public/chain_info"
2207
+ );
2208
+ testChainsList = testChainInfoRes.data.rows;
2209
+ } catch (error) {
2210
+ testChainsList = [types.ArbitrumSepoliaChainInfo, types.SolanaDevnetChainInfo];
2211
+ }
2212
+ try {
2213
+ const mainnetChainInfoRes = await fetchChainInfo(
2214
+ "https://api-evm.orderly.org/v1/public/chain_info"
2215
+ );
2216
+ mainnetChainsList = mainnetChainInfoRes.data.rows;
2217
+ } catch (error) {
2218
+ mainnetChainsList = [];
2219
+ }
2220
+ const testChains = processChainInfo(testChainsList);
2221
+ const mainnetChains2 = processChainInfo(mainnetChainsList);
2222
+ setTestnetChains(testChains);
2223
+ setMainnetChains(mainnetChains2);
2224
+ setInitChains([...testChains, ...mainnetChains2]);
2225
+ initRef.current = true;
2226
+ };
2227
+ const handleCustomerChains = () => {
2228
+ const testChains = processChainInfo(
2229
+ props.customChains.testnet?.map((item) => item.network_infos)
2230
+ );
2231
+ const mainnetChains2 = processChainInfo(
2232
+ props.customChains.mainnet?.map((item) => item.network_infos)
2233
+ );
2234
+ setTestnetChains(testChains);
2235
+ setMainnetChains(mainnetChains2);
2236
+ setInitChains([...testChains, ...mainnetChains2]);
2237
+ const chainTypeObj = {
2238
+ hasEvm: false,
2239
+ hasSol: false
2240
+ };
2241
+ [...testChains, ...mainnetChains2].forEach((chain) => {
2242
+ if (types.SolanaChains.has(chain.id)) {
2243
+ chainTypeObj.hasSol = true;
2244
+ } else {
2245
+ chainTypeObj.hasEvm = true;
2246
+ }
2247
+ });
2248
+ initRef.current = true;
2249
+ if (chainTypeObj.hasEvm && chainTypeObj.hasSol) {
2250
+ setWalletChainType("EVM_SOL" /* EVM_SOL */);
2251
+ } else if (chainTypeObj.hasEvm) {
2252
+ setWalletChainType("onlyEVM" /* onlyEVM */);
2253
+ } else if (chainTypeObj.hasSol) {
2254
+ setWalletChainType("onlySOL" /* onlySOL */);
2255
+ }
2256
+ };
2257
+ if (connectorWalletType.disablePrivy && connectorWalletType.disableWagmi && connectorWalletType.disableSolana) {
2258
+ throw new Error(
2259
+ "Privy, Wagmi, and Solana are disabled. Please enable at least one of them."
2260
+ );
2261
+ }
2262
+ const getChainsByNetwork = (network2) => {
2263
+ return network2 === "mainnet" ? mainnetChains : testnetChains;
2264
+ };
2265
+ const value = React11.useMemo(
2266
+ () => ({
2267
+ initChains,
2268
+ mainnetChains,
2269
+ testnetChains,
2270
+ getChainsByNetwork,
2271
+ openConnectDrawer,
2272
+ setOpenConnectDrawer,
2273
+ targetNamespace,
2274
+ setTargetNamespace,
2275
+ network,
2276
+ setNetwork,
2277
+ solanaInfo,
2278
+ setSolanaInfo,
2279
+ termsOfUse,
2280
+ walletChainType,
2281
+ connectorWalletType
2282
+ }),
2283
+ [
2284
+ initChains,
2285
+ mainnetChains,
2286
+ testnetChains,
2287
+ getChainsByNetwork,
2288
+ openConnectDrawer,
2289
+ setOpenConnectDrawer,
2290
+ targetNamespace,
2291
+ setTargetNamespace,
2292
+ network,
2293
+ setNetwork,
2294
+ solanaInfo,
2295
+ setSolanaInfo,
2296
+ termsOfUse,
2297
+ walletChainType,
2298
+ connectorWalletType
2299
+ ]
2300
+ );
2301
+ React11.useEffect(() => {
2302
+ if (!props.customChains) {
2303
+ fetchAllChains();
2304
+ return;
2305
+ }
2306
+ handleCustomerChains();
2307
+ }, [props.customChains]);
2308
+ if (!initRef.current) {
2309
+ return null;
2310
+ }
2311
+ return /* @__PURE__ */ React11__default.default.createElement(walletConnectorPrivyContext.Provider, { value }, /* @__PURE__ */ React11__default.default.createElement(ui.TooltipProvider, { delayDuration: 300 }, /* @__PURE__ */ React11__default.default.createElement(
2312
+ InitPrivyProvider,
2313
+ {
2314
+ privyConfig: props.privyConfig,
2315
+ initChains
2316
+ },
2317
+ /* @__PURE__ */ React11__default.default.createElement(
2318
+ InitWagmiProvider,
2319
+ {
2320
+ wagmiConfig: props.wagmiConfig ?? {},
2321
+ initChains
2322
+ },
2323
+ /* @__PURE__ */ React11__default.default.createElement(
2324
+ InitSolanaProvider,
2325
+ {
2326
+ ...props.solanaConfig ?? { wallets: [], onError: () => {
2327
+ } }
2328
+ },
2329
+ /* @__PURE__ */ React11__default.default.createElement(PrivyWalletProvider, null, /* @__PURE__ */ React11__default.default.createElement(WagmiWalletProvider, null, /* @__PURE__ */ React11__default.default.createElement(SolanaWalletProvider, null, /* @__PURE__ */ React11__default.default.createElement(Main, null, props.children))))
2330
+ )
2331
+ )
2332
+ )));
2333
+ }
2334
+ var viem = viemExport__namespace;
2335
+ var wagmiConnectors = WagmiConnectorsExport__namespace;
2336
+ var wagmi = WagmiExport__namespace;
2337
+
2338
+ exports.MwebUserCenter = MwebUserCenter;
2339
+ exports.Network = Network;
2340
+ exports.SolanaChains = SolanaChains;
2341
+ exports.SolanaChainsMap = SolanaChainsMap;
2342
+ exports.UserCenter = UserCenter;
2343
+ exports.WalletChainTypeEnum = WalletChainTypeEnum;
2344
+ exports.WalletConnectorPrivyProvider = WalletConnectorPrivyProvider;
2345
+ exports.WalletType = WalletType;
2346
+ exports.viem = viem;
2347
+ exports.wagmi = wagmi;
2348
+ exports.wagmiConnectors = wagmiConnectors;
2349
+ //# sourceMappingURL=out.js.map
2350
+ //# sourceMappingURL=index.js.map