@kodiak-finance/orderly-wallet-connector-privy 2.7.4

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.mjs ADDED
@@ -0,0 +1,3366 @@
1
+ import React19, { createContext, useState, useEffect, useMemo, useContext, useRef, useCallback } from 'react';
2
+ import * as viemExport from 'viem';
3
+ import { defineChain } from 'viem';
4
+ import { mainnet, abstract, abstractTestnet } from 'viem/chains';
5
+ import { useWalletConnector, useAccount, useSWR, fetcher, WalletConnectorContext, useTrack, useStorageLedgerAddress, useLocalStorage, useStorageChain } from '@kodiak-finance/orderly-hooks';
6
+ import { SOLANA_TESTNET_CHAINID, SOLANA_MAINNET_CHAINID, ChainNamespace, TesntTokenFallback, ArbitrumSepoliaTokenInfo, SolanaDevnetTokenInfo, ABSTRACT_CHAIN_ID_MAP, AccountStatusEnum, ABSTRACT_TESTNET_CHAINID, ABSTRACT_MAINNET_CHAINID, SolanaChains as SolanaChains$1, AbstractChains, ArbitrumSepoliaChainInfo, SolanaDevnetChainInfo, EMPTY_OBJECT, TrackerEventName, ConnectorKey } from '@kodiak-finance/orderly-types';
7
+ import { modal, useModal, SimpleSheet, SheetHeader, Text, Flex, Divider, cn, installExtension, ExtensionPositionEnum, useScreen, formatAddress, Button, SimpleDialog, TooltipProvider, CloseIcon, ScrollArea, ExclamationFillIcon, Tooltip, CopyIcon, Checkbox, toast, DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, DropdownMenuItem, ChevronDownIcon, ChevronUpIcon, Grid, ChainIcon, Popover } from '@kodiak-finance/orderly-ui';
8
+ import { useTranslation, Trans } from '@kodiak-finance/orderly-i18n';
9
+ import { AbstractWalletProvider as AbstractWalletProvider$1, useLoginWithAbstract, useAbstractClient, useGlobalWalletSignerAccount } from '@abstract-foundation/agw-react';
10
+ import * as WagmiExport from 'wagmi';
11
+ import { createConfig, injected, createStorage, http, WagmiProvider, useConnect, useDisconnect, useAccount as useAccount$1, useSwitchChain } from 'wagmi';
12
+ import { windowGuard } from '@kodiak-finance/orderly-utils';
13
+ import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';
14
+ import { PrivyProvider, usePrivy, useWallets, useSolanaWallets } from '@privy-io/react-auth';
15
+ import { WalletProvider, useWallet } from '@solana/wallet-adapter-react';
16
+ import { create } from 'zustand';
17
+ import { AuthGuard } from '@kodiak-finance/orderly-ui-connector';
18
+ import { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets';
19
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
20
+ import * as WagmiConnectorsExport from 'wagmi/connectors';
21
+
22
+ // src/provider.tsx
23
+ var Network = /* @__PURE__ */ ((Network3) => {
24
+ Network3["mainnet"] = "mainnet";
25
+ Network3["testnet"] = "testnet";
26
+ return Network3;
27
+ })(Network || {});
28
+ var WalletType = /* @__PURE__ */ ((WalletType5) => {
29
+ WalletType5["EVM"] = "EVM";
30
+ WalletType5["SOL"] = "SOL";
31
+ WalletType5["ABSTRACT"] = "Abstract";
32
+ return WalletType5;
33
+ })(WalletType || {});
34
+ var WalletConnectType = /* @__PURE__ */ ((WalletConnectType2) => {
35
+ WalletConnectType2["EVM"] = "EVM";
36
+ WalletConnectType2["SOL"] = "SOL";
37
+ WalletConnectType2["PRIVY"] = "privy";
38
+ WalletConnectType2["ABSTRACT"] = "Abstract";
39
+ return WalletConnectType2;
40
+ })(WalletConnectType || {});
41
+ var SolanaChains = /* @__PURE__ */ new Map([
42
+ [WalletAdapterNetwork.Devnet, SOLANA_TESTNET_CHAINID],
43
+ [WalletAdapterNetwork.Mainnet, SOLANA_MAINNET_CHAINID]
44
+ ]);
45
+ var SolanaChainsMap = /* @__PURE__ */ new Map([
46
+ [WalletAdapterNetwork.Devnet, SOLANA_TESTNET_CHAINID],
47
+ ["testnet" /* testnet */, SOLANA_TESTNET_CHAINID],
48
+ ["mainnet" /* mainnet */, SOLANA_MAINNET_CHAINID],
49
+ [WalletAdapterNetwork.Mainnet, SOLANA_MAINNET_CHAINID]
50
+ ]);
51
+ var AbstractChainsMap = /* @__PURE__ */ new Map([
52
+ ["testnet" /* testnet */, ABSTRACT_TESTNET_CHAINID],
53
+ ["mainnet" /* mainnet */, ABSTRACT_MAINNET_CHAINID]
54
+ ]);
55
+ var WalletChainTypeEnum = /* @__PURE__ */ ((WalletChainTypeEnum2) => {
56
+ WalletChainTypeEnum2["onlyEVM"] = "onlyEVM";
57
+ WalletChainTypeEnum2["onlySOL"] = "onlySOL";
58
+ WalletChainTypeEnum2["EVM_SOL"] = "EVM_SOL";
59
+ return WalletChainTypeEnum2;
60
+ })(WalletChainTypeEnum || {});
61
+
62
+ // src/providers/abstractWallet/abstractWalletProvider.tsx
63
+ var AbstractWalletContext = createContext(
64
+ null
65
+ );
66
+ var AbstractWalletProvider = (props) => {
67
+ const { network } = useWalletConnectorPrivy();
68
+ const { login, logout } = useLoginWithAbstract();
69
+ const [wallet, setWallet] = useState(null);
70
+ const { data: client, isLoading: isClientLoading } = useAbstractClient();
71
+ const { connector } = useAccount$1();
72
+ const { address, status } = useGlobalWalletSignerAccount();
73
+ const connect = () => {
74
+ return login();
75
+ };
76
+ const disconnect = () => {
77
+ return logout();
78
+ };
79
+ const isConnected = useMemo(() => {
80
+ return !!(client && connector);
81
+ }, [client, connector]);
82
+ const connectedChain = useMemo(() => {
83
+ if (!client || !connector) {
84
+ return;
85
+ }
86
+ return {
87
+ id: AbstractChainsMap.get(network),
88
+ namespace: ChainNamespace.evm
89
+ };
90
+ }, [client, connector]);
91
+ const value = useMemo(
92
+ () => ({
93
+ isConnected,
94
+ connect,
95
+ disconnect,
96
+ wallet,
97
+ connectedChain
98
+ }),
99
+ [connect, disconnect, isConnected, wallet, connectedChain]
100
+ );
101
+ useEffect(() => {
102
+ if (!client || !connector || !address) {
103
+ setWallet(null);
104
+ return;
105
+ }
106
+ connector?.getProvider().then((provider) => {
107
+ const tempWallet = {
108
+ label: "AGW",
109
+ icon: "",
110
+ provider: {
111
+ ...provider,
112
+ agwWallet: true,
113
+ sendTransaction: async (params) => {
114
+ return client.sendTransaction(params);
115
+ },
116
+ writeContract: async (params) => {
117
+ return client.writeContract(params);
118
+ }
119
+ },
120
+ accounts: [
121
+ {
122
+ address
123
+ }
124
+ ],
125
+ chains: [
126
+ {
127
+ id: AbstractChainsMap.get(network),
128
+ namespace: ChainNamespace.evm
129
+ }
130
+ ],
131
+ chain: connectedChain,
132
+ additionalInfo: {
133
+ AGWAddress: client.account.address
134
+ }
135
+ };
136
+ setWallet(tempWallet);
137
+ });
138
+ }, [client, connectedChain, connector, address, isClientLoading]);
139
+ useEffect(() => {
140
+ windowGuard(() => {
141
+ const connection = localStorage.getItem(
142
+ "privy-caw:cm04asygd041fmry9zmcyn5o5:connection"
143
+ );
144
+ if (connection) {
145
+ login();
146
+ }
147
+ });
148
+ }, []);
149
+ return /* @__PURE__ */ React19.createElement(AbstractWalletContext.Provider, { value }, props.children);
150
+ };
151
+ function useAbstractWallet() {
152
+ const context = useContext(AbstractWalletContext);
153
+ if (!context) {
154
+ throw new Error(
155
+ "useAbstractWallet must be used within a AbstractWalletProvider"
156
+ );
157
+ }
158
+ return context;
159
+ }
160
+ var getPrivyEmbeddedWalletChainId = (chainId) => {
161
+ if (!chainId) {
162
+ return null;
163
+ }
164
+ return parseInt(chainId.split("eip155:")[1]);
165
+ };
166
+ var defaultUseSolanaWallets = {
167
+ ready: false,
168
+ wallets: [],
169
+ createWallet: () => Promise.resolve(),
170
+ exportWallet: () => Promise.resolve()
171
+ };
172
+ var defaultUseWallets = { wallets: [] };
173
+ var PrivyWalletContext = createContext(null);
174
+ var PrivyWalletProvider = ({
175
+ children
176
+ }) => {
177
+ const { network, solanaInfo, setSolanaInfo, connectorWalletType } = useWalletConnectorPrivy();
178
+ const {
179
+ login,
180
+ logout,
181
+ ready,
182
+ authenticated,
183
+ user,
184
+ exportWallet: exportEvmWallet,
185
+ createWallet: createEvmWallet
186
+ } = usePrivy();
187
+ const { wallets: walletsEVM } = connectorWalletType.disablePrivy ? defaultUseWallets : useWallets();
188
+ const connectedRef = useRef(false);
189
+ const {
190
+ ready: solanaReady,
191
+ wallets: walletsSOL,
192
+ createWallet: createSolanaWallet,
193
+ exportWallet: exportSolanaWallet
194
+ } = connectorWalletType.disablePrivy ? defaultUseSolanaWallets : useSolanaWallets();
195
+ const [walletEVM, setWalletEVM] = useState(null);
196
+ const [walletSOL, setWalletSOL] = useState(null);
197
+ const { track } = useTrack();
198
+ const linkedAccount = useMemo(() => {
199
+ if (user && user.linkedAccounts) {
200
+ const account = user.linkedAccounts.filter((item) => item.type !== "wallet").sort(
201
+ (a, b) => (b.latestVerifiedAt?.getTime() ?? 0) - (a.latestVerifiedAt?.getTime() ?? 0)
202
+ )[0];
203
+ let address = null;
204
+ if (account.type === "email") {
205
+ address = account.address;
206
+ } else if (account.type === "twitter_oauth") {
207
+ address = `@${account.username}`;
208
+ } else if (account.type === "google_oauth") {
209
+ address = `@${account.name}`;
210
+ }
211
+ return {
212
+ type: account.type,
213
+ address
214
+ };
215
+ }
216
+ return null;
217
+ }, [user]);
218
+ const switchChain = (chainId) => {
219
+ const wallet = walletsEVM[0];
220
+ if (wallet) {
221
+ return wallet.switchChain(chainId);
222
+ }
223
+ return Promise.reject("no wallet");
224
+ };
225
+ const connect = () => {
226
+ login();
227
+ };
228
+ const disconnect = () => {
229
+ return logout();
230
+ };
231
+ const exportWallet = (namespace) => {
232
+ if (namespace === ChainNamespace.evm) {
233
+ track(TrackerEventName.clickExportPrivateKey, {
234
+ type: "evm"
235
+ });
236
+ return exportEvmWallet();
237
+ } else if (namespace === ChainNamespace.solana) {
238
+ track(TrackerEventName.clickExportPrivateKey, {
239
+ type: "solana"
240
+ });
241
+ return exportSolanaWallet();
242
+ }
243
+ return Promise.reject("no namespace");
244
+ };
245
+ const isConnected = useMemo(() => {
246
+ if (ready && authenticated) {
247
+ return true;
248
+ }
249
+ return false;
250
+ }, [ready, authenticated]);
251
+ useEffect(() => {
252
+ if (!authenticated || !walletsEVM || !walletsEVM[0]) {
253
+ setWalletEVM(null);
254
+ return;
255
+ }
256
+ const wallet = walletsEVM[0];
257
+ wallet.getEthereumProvider().then((provider) => {
258
+ setWalletEVM({
259
+ label: "privy",
260
+ icon: "",
261
+ provider,
262
+ accounts: [
263
+ {
264
+ address: wallet.address
265
+ }
266
+ ],
267
+ chains: [
268
+ {
269
+ id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
270
+ namespace: ChainNamespace.evm
271
+ }
272
+ ],
273
+ chain: {
274
+ id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
275
+ namespace: ChainNamespace.evm
276
+ }
277
+ });
278
+ });
279
+ }, [walletsEVM, authenticated]);
280
+ useEffect(() => {
281
+ if (!authenticated) {
282
+ setWalletSOL(null);
283
+ return;
284
+ }
285
+ if (!solanaReady) {
286
+ return;
287
+ }
288
+ if (!user) {
289
+ return;
290
+ }
291
+ const embededSolanaWallet = (user?.linkedAccounts).find(
292
+ (item) => item.chainType === "solana" && item.connectorType === "embedded"
293
+ );
294
+ if (!embededSolanaWallet) {
295
+ createSolanaWallet().then();
296
+ return;
297
+ }
298
+ if (!walletsSOL || !walletsSOL[0]) {
299
+ return;
300
+ }
301
+ const wallet = walletsSOL.find((w) => w.connectorType === "embedded");
302
+ if (wallet) {
303
+ if (walletSOL && wallet.address === walletSOL.accounts[0].address) {
304
+ if (walletSOL.chain.id === SolanaChainsMap.get(network)) {
305
+ return;
306
+ }
307
+ }
308
+ setWalletSOL({
309
+ label: "privy",
310
+ icon: "",
311
+ provider: {
312
+ signMessage: wallet.signMessage,
313
+ signTransaction: wallet.signTransaction,
314
+ sendTransaction: wallet.sendTransaction,
315
+ network: solanaInfo?.network ?? WalletAdapterNetwork.Devnet,
316
+ rpcUrl: solanaInfo?.rpcUrl ?? void 0
317
+ },
318
+ accounts: [
319
+ {
320
+ address: wallet.address
321
+ }
322
+ ],
323
+ chains: [
324
+ {
325
+ id: SolanaChainsMap.get(network),
326
+ namespace: ChainNamespace.solana
327
+ }
328
+ ],
329
+ chain: {
330
+ id: SolanaChainsMap.get(network),
331
+ namespace: ChainNamespace.solana
332
+ }
333
+ });
334
+ }
335
+ }, [
336
+ walletsSOL,
337
+ authenticated,
338
+ createSolanaWallet,
339
+ solanaReady,
340
+ user,
341
+ walletSOL,
342
+ network,
343
+ solanaInfo
344
+ ]);
345
+ useEffect(() => {
346
+ if (isConnected && linkedAccount) {
347
+ if (connectedRef.current) {
348
+ return;
349
+ }
350
+ connectedRef.current = true;
351
+ track(TrackerEventName.socialLoginSuccess, {
352
+ type: linkedAccount.type,
353
+ address: linkedAccount.address
354
+ });
355
+ }
356
+ }, [isConnected, linkedAccount, connectedRef]);
357
+ const value = useMemo(
358
+ () => ({
359
+ connect,
360
+ walletEVM,
361
+ walletSOL,
362
+ isConnected,
363
+ disconnect,
364
+ switchChain,
365
+ linkedAccount,
366
+ exportWallet,
367
+ createEvmWallet,
368
+ createSolanaWallet
369
+ }),
370
+ [
371
+ connect,
372
+ walletEVM,
373
+ walletSOL,
374
+ isConnected,
375
+ disconnect,
376
+ switchChain,
377
+ linkedAccount,
378
+ exportWallet,
379
+ createEvmWallet,
380
+ createSolanaWallet
381
+ ]
382
+ );
383
+ return /* @__PURE__ */ React19.createElement(PrivyWalletContext.Provider, { value }, children);
384
+ };
385
+ function usePrivyWallet() {
386
+ const context = useContext(PrivyWalletContext);
387
+ if (!context) {
388
+ throw new Error("usePrivyWallet must be used within a PrivyWalletProvider");
389
+ }
390
+ return context;
391
+ }
392
+ var useSolanaWalletStore = create((set, get) => ({
393
+ wallet: null,
394
+ isConnecting: false,
395
+ error: null,
396
+ isManual: false,
397
+ walletMethods: null,
398
+ pendingWalletName: null,
399
+ connect: async (walletName) => {
400
+ const { setIsManual, walletMethods } = get();
401
+ if (!walletMethods) {
402
+ throw new Error("Wallet methods not initialized");
403
+ }
404
+ setIsManual(true);
405
+ set({ pendingWalletName: walletName });
406
+ try {
407
+ set({ isConnecting: true, error: null });
408
+ const { walletSolana, select } = walletMethods;
409
+ select(walletName);
410
+ await new Promise((resolve) => {
411
+ const checkWallet = () => {
412
+ const currentWallet = get().walletMethods?.walletSolana;
413
+ if (currentWallet) {
414
+ resolve();
415
+ } else {
416
+ setTimeout(checkWallet, 500);
417
+ }
418
+ };
419
+ checkWallet();
420
+ });
421
+ const updatedWalletMethods = get().walletMethods;
422
+ if (!updatedWalletMethods) {
423
+ throw new Error("Wallet methods not initialized");
424
+ }
425
+ if (!updatedWalletMethods.publicKey) {
426
+ await updatedWalletMethods.connectSolana();
427
+ }
428
+ const lastestWalletMethods = get().walletMethods;
429
+ if (!lastestWalletMethods) {
430
+ throw new Error("Wallet methods not initialized");
431
+ }
432
+ if (!lastestWalletMethods.publicKey) {
433
+ throw new Error("Wallet not connected");
434
+ }
435
+ const wallet = {
436
+ label: updatedWalletMethods.walletSolana.adapter.name,
437
+ icon: "",
438
+ provider: {
439
+ rpcUrl: lastestWalletMethods.solanaInfo?.rpcUrl ?? null,
440
+ network: lastestWalletMethods.solanaInfo?.network ?? WalletAdapterNetwork.Devnet,
441
+ signMessage: lastestWalletMethods.signMessage,
442
+ signTransaction: lastestWalletMethods.signTransaction,
443
+ sendTransaction: lastestWalletMethods.sendTransaction
444
+ },
445
+ accounts: [
446
+ {
447
+ address: lastestWalletMethods.publicKey.toBase58()
448
+ }
449
+ ],
450
+ chains: [
451
+ {
452
+ id: SolanaChainsMap.get(lastestWalletMethods.network),
453
+ namespace: ChainNamespace.solana
454
+ }
455
+ ],
456
+ chain: {
457
+ id: SolanaChainsMap.get(lastestWalletMethods.network),
458
+ namespace: ChainNamespace.solana
459
+ }
460
+ };
461
+ set({
462
+ wallet,
463
+ isConnecting: false,
464
+ isManual: false,
465
+ pendingWalletName: null
466
+ });
467
+ return wallet;
468
+ } catch (error) {
469
+ set({
470
+ error,
471
+ isConnecting: false,
472
+ isManual: false,
473
+ pendingWalletName: null
474
+ });
475
+ throw error;
476
+ }
477
+ },
478
+ disconnect: async () => {
479
+ const { walletMethods } = get();
480
+ if (!walletMethods) {
481
+ throw new Error("Wallet methods not initialized");
482
+ }
483
+ try {
484
+ await walletMethods.disconnectSolana();
485
+ set({ wallet: null, error: null });
486
+ } catch (error) {
487
+ set({ error });
488
+ throw error;
489
+ }
490
+ },
491
+ setWallet: (wallet) => set({ wallet }),
492
+ setError: (error) => set({ error }),
493
+ setIsManual: (isManual) => set({ isManual }),
494
+ setWalletMethods: (methods) => set({ walletMethods: methods }),
495
+ setPendingWalletName: (name) => set({ pendingWalletName: name })
496
+ }));
497
+
498
+ // src/providers/solana/solanaWalletProvider.tsx
499
+ var defaultUseSolanaWallet = {
500
+ wallets: [],
501
+ select: () => Promise.resolve(),
502
+ connect: () => Promise.resolve(),
503
+ wallet: null,
504
+ publicKey: null,
505
+ signMessage: () => Promise.resolve(),
506
+ signTransaction: () => Promise.resolve(),
507
+ sendTransaction: () => Promise.resolve(),
508
+ disconnect: () => Promise.resolve()
509
+ };
510
+ var SolanaWalletContext = createContext(
511
+ null
512
+ );
513
+ var SolanaWalletProvider = ({
514
+ children
515
+ }) => {
516
+ const { setLedgerAddress } = useStorageLedgerAddress();
517
+ const { network, solanaInfo, connectorWalletType } = useWalletConnectorPrivy();
518
+ const {
519
+ wallets,
520
+ select,
521
+ connect: connectSolana,
522
+ wallet: walletSolana,
523
+ publicKey,
524
+ signMessage,
525
+ signTransaction,
526
+ sendTransaction,
527
+ disconnect: disconnectSolana
528
+ } = connectorWalletType.disableSolana ? defaultUseSolanaWallet : useWallet();
529
+ const {
530
+ wallet,
531
+ connect,
532
+ disconnect: disconnectWallet,
533
+ setWallet,
534
+ setWalletMethods,
535
+ isManual
536
+ } = useSolanaWalletStore();
537
+ useEffect(() => {
538
+ if (!walletSolana || isManual)
539
+ return;
540
+ if (!publicKey) {
541
+ return;
542
+ }
543
+ const newWallet = {
544
+ label: walletSolana.adapter.name,
545
+ icon: "",
546
+ provider: {
547
+ rpcUrl: solanaInfo?.rpcUrl ?? null,
548
+ network: solanaInfo?.network ?? WalletAdapterNetwork.Devnet,
549
+ signMessage,
550
+ signTransaction,
551
+ sendTransaction
552
+ },
553
+ accounts: [
554
+ {
555
+ address: publicKey.toBase58()
556
+ }
557
+ ],
558
+ chains: [
559
+ {
560
+ id: SolanaChainsMap.get(network),
561
+ namespace: ChainNamespace.solana
562
+ }
563
+ ],
564
+ chain: {
565
+ id: SolanaChainsMap.get(network),
566
+ namespace: ChainNamespace.solana
567
+ }
568
+ };
569
+ if (walletSolana.adapter.name === "Ledger") {
570
+ setLedgerAddress(publicKey.toBase58());
571
+ }
572
+ setWallet(newWallet);
573
+ }, [
574
+ publicKey,
575
+ walletSolana,
576
+ signMessage,
577
+ signTransaction,
578
+ sendTransaction,
579
+ solanaInfo,
580
+ isManual
581
+ ]);
582
+ useEffect(() => {
583
+ setWalletMethods({
584
+ select,
585
+ connectSolana,
586
+ walletSolana,
587
+ publicKey,
588
+ signMessage,
589
+ signTransaction,
590
+ sendTransaction,
591
+ disconnectSolana,
592
+ network,
593
+ solanaInfo
594
+ });
595
+ }, [
596
+ select,
597
+ connectSolana,
598
+ walletSolana,
599
+ publicKey,
600
+ signMessage,
601
+ signTransaction,
602
+ sendTransaction,
603
+ disconnectSolana,
604
+ network,
605
+ solanaInfo
606
+ ]);
607
+ const value = useMemo(
608
+ () => ({
609
+ wallets,
610
+ connectedChain: publicKey ? {
611
+ id: SolanaChainsMap.get(network),
612
+ namespace: ChainNamespace.solana
613
+ } : null,
614
+ connect,
615
+ wallet,
616
+ disconnect: disconnectWallet,
617
+ isConnected: !!publicKey
618
+ }),
619
+ [wallets, publicKey, wallet, network]
620
+ );
621
+ return /* @__PURE__ */ React19.createElement(SolanaWalletContext.Provider, { value }, children);
622
+ };
623
+ function useSolanaWallet() {
624
+ const context = useContext(SolanaWalletContext);
625
+ if (!context) {
626
+ throw new Error(
627
+ "useSolanaWallet must be used within a SolanaWalletProvider"
628
+ );
629
+ }
630
+ return context;
631
+ }
632
+ var WagmiWalletContext = createContext(null);
633
+ var WagmiWalletProvider = ({
634
+ children
635
+ }) => {
636
+ const { connectorWalletType } = useWalletConnectorPrivy();
637
+ const [wallet, setWallet] = useState(void 0);
638
+ const { connect, connectors: wagmiConnectors2 } = connectorWalletType.disableWagmi ? { connect: () => Promise.resolve(), connectors: [] } : useConnect();
639
+ const { disconnect } = connectorWalletType.disableWagmi ? { disconnect: () => Promise.resolve() } : useDisconnect();
640
+ const { connector, isConnected, address, chainId } = connectorWalletType.disableWagmi ? { connector: null, isConnected: false, address: null, chainId: null } : useAccount$1();
641
+ const { switchChain } = connectorWalletType.disableWagmi ? { switchChain: () => Promise.resolve() } : useSwitchChain();
642
+ const connectedChain = useMemo(() => {
643
+ if (chainId) {
644
+ return {
645
+ id: chainId,
646
+ namespace: ChainNamespace.evm
647
+ };
648
+ }
649
+ return null;
650
+ }, [chainId]);
651
+ const setChain = useCallback(
652
+ (chainId2) => {
653
+ return new Promise((resolve, reject) => {
654
+ switchChain(
655
+ { chainId: chainId2 },
656
+ {
657
+ onSuccess: () => resolve(true),
658
+ onError: (e) => {
659
+ return reject(e);
660
+ }
661
+ }
662
+ );
663
+ });
664
+ },
665
+ [switchChain]
666
+ );
667
+ useEffect(() => {
668
+ if (!connector || !isConnected) {
669
+ setWallet(void 0);
670
+ return;
671
+ }
672
+ connector.getProvider?.().then((provider) => {
673
+ setWallet({
674
+ label: connector.name,
675
+ icon: "",
676
+ provider,
677
+ accounts: [
678
+ {
679
+ address
680
+ }
681
+ ],
682
+ chains: [
683
+ {
684
+ id: chainId,
685
+ namespace: ChainNamespace.evm
686
+ }
687
+ ],
688
+ chain: connectedChain
689
+ });
690
+ });
691
+ }, [connector, chainId, isConnected, address, connectedChain]);
692
+ const connectors = useMemo(() => {
693
+ return wagmiConnectors2.filter((connector2) => connector2.id !== "injected").sort(
694
+ (a, b) => a.type === "injected" ? -1 : 1
695
+ );
696
+ }, [wagmiConnectors2]);
697
+ const value = useMemo(
698
+ () => ({
699
+ connectors,
700
+ connect,
701
+ wallet,
702
+ connectedChain,
703
+ setChain,
704
+ disconnect,
705
+ isConnected
706
+ }),
707
+ [
708
+ connectors,
709
+ connect,
710
+ wallet,
711
+ connectedChain,
712
+ setChain,
713
+ disconnect,
714
+ isConnected
715
+ ]
716
+ );
717
+ return /* @__PURE__ */ React19.createElement(WagmiWalletContext.Provider, { value }, children);
718
+ };
719
+ function useWagmiWallet() {
720
+ const context = useContext(WagmiWalletContext);
721
+ if (!context) {
722
+ throw new Error("useWagmiWallet must be used within a WagmiWalletProvider");
723
+ }
724
+ return context;
725
+ }
726
+ var MoreIcon = (props) => /* @__PURE__ */ React19.createElement(
727
+ "svg",
728
+ {
729
+ xmlns: "http://www.w3.org/2000/svg",
730
+ width: "16",
731
+ height: "16",
732
+ viewBox: "0 0 16 16",
733
+ fill: "currentColor",
734
+ ...props
735
+ },
736
+ /* @__PURE__ */ React19.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" }),
737
+ /* @__PURE__ */ React19.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" }),
738
+ /* @__PURE__ */ React19.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" })
739
+ );
740
+ var DisconnectIcon = (props) => /* @__PURE__ */ React19.createElement(
741
+ "svg",
742
+ {
743
+ width: "16",
744
+ height: "16",
745
+ viewBox: "0 0 16 16",
746
+ xmlns: "http://www.w3.org/2000/svg",
747
+ fill: "currentColor",
748
+ ...props
749
+ },
750
+ /* @__PURE__ */ React19.createElement("g", { id: "box-arrow-right" }, /* @__PURE__ */ React19.createElement(
751
+ "path",
752
+ {
753
+ id: "Vector",
754
+ 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"
755
+ }
756
+ ))
757
+ );
758
+ var ArrowRightIcon = ({ size, ...props }) => /* @__PURE__ */ React19.createElement(
759
+ "svg",
760
+ {
761
+ width: size,
762
+ height: size,
763
+ viewBox: "0 0 14 14",
764
+ fill: "currentColor",
765
+ xmlns: "http://www.w3.org/2000/svg",
766
+ ...props
767
+ },
768
+ /* @__PURE__ */ React19.createElement("path", { d: "M3.50696 6.9958C3.50696 6.6738 3.76788 6.41305 4.08971 6.41305C4.36842 6.41305 7.62762 6.41305 8.49679 6.41305L6.76662 4.6648L7.58621 3.84521L10.336 6.57697C10.4504 6.69072 10.507 6.84355 10.507 6.99639C10.507 7.14864 10.4498 7.30089 10.336 7.41464L7.58621 10.1464L6.76662 9.3268L8.49679 7.57854C7.62762 7.57854 4.36842 7.57854 4.08971 7.57854C3.76788 7.57854 3.50696 7.3178 3.50696 6.9958Z" })
769
+ );
770
+ var ArrowRightLinearGradientIcon = ({
771
+ size,
772
+ ...props
773
+ }) => /* @__PURE__ */ React19.createElement(
774
+ "svg",
775
+ {
776
+ xmlns: "http://www.w3.org/2000/svg",
777
+ width: size,
778
+ height: size,
779
+ viewBox: "0 0 20 20",
780
+ fill: "none"
781
+ },
782
+ /* @__PURE__ */ React19.createElement(
783
+ "path",
784
+ {
785
+ d: "M5.01001 9.994C5.01001 9.534 5.38276 9.1615 5.84251 9.1615C6.24068 9.1615 10.8967 9.1615 12.1383 9.1615L9.66667 6.664L10.8375 5.49316L14.7658 9.39568C14.9292 9.55818 15.01 9.7765 15.01 9.99484C15.01 10.2123 14.9283 10.4298 14.7658 10.5923L10.8375 14.4948L9.66667 13.324L12.1383 10.8265C10.8967 10.8265 6.24068 10.8265 5.84251 10.8265C5.38276 10.8265 5.01001 10.454 5.01001 9.994Z",
786
+ fill: "url(#paint0_linear_2269_12077)"
787
+ }
788
+ ),
789
+ /* @__PURE__ */ React19.createElement("defs", null, /* @__PURE__ */ React19.createElement(
790
+ "linearGradient",
791
+ {
792
+ id: "paint0_linear_2269_12077",
793
+ x1: "15.01",
794
+ y1: "9.994",
795
+ x2: "5.01001",
796
+ y2: "9.994",
797
+ gradientUnits: "userSpaceOnUse"
798
+ },
799
+ /* @__PURE__ */ React19.createElement("stop", { stopColor: "#59B0FE" }),
800
+ /* @__PURE__ */ React19.createElement("stop", { offset: "1", stopColor: "#26FEFE" })
801
+ ))
802
+ );
803
+ var PwaDialog = modal.create((props) => {
804
+ const { visible, hide, resolve, reject, onOpenChange } = useModal();
805
+ const [domain, setDomain] = useState("");
806
+ const { t } = useTranslation();
807
+ useEffect(() => {
808
+ setDomain(window.location.hostname);
809
+ }, []);
810
+ return /* @__PURE__ */ React19.createElement(SimpleSheet, { open: visible, onOpenChange }, /* @__PURE__ */ React19.createElement(SheetHeader, null, /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-base-contrast-80 oui-text " }, t("connector.privy.pwa.sheetTitle"))), /* @__PURE__ */ React19.createElement(Flex, { direction: "column", gap: 3, className: "oui-w-full" }, /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-base-contrast-80 oui-text " }, t("connector.privy.pwa.description")), /* @__PURE__ */ React19.createElement(Flex, { direction: "column", gap: 4, className: "oui-w-full" }, /* @__PURE__ */ React19.createElement(
811
+ StepItem,
812
+ {
813
+ index: 1,
814
+ title: t("connector.privy.pwa.step1"),
815
+ content: /* @__PURE__ */ React19.createElement(Flex, { className: "oui-w-full oui-bg-dark-8" }, /* @__PURE__ */ React19.createElement(
816
+ Flex,
817
+ {
818
+ className: "oui-bg-black/[0.08] oui-p-2 oui-h-[52px] oui-rounded-[44px] oui-w-full oui-px-4 oui-relative",
819
+ itemAlign: "center",
820
+ justify: "center"
821
+ },
822
+ /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-black/[0.88] oui-text-[18px] oui-leading-[36px] oui-flex-1 oui-text-center oui-whitespace-nowrap" }, domain),
823
+ /* @__PURE__ */ React19.createElement(ShareIcon, { className: "oui-absolute oui-right-4 oui-top-1/2 oui-translate-y-[-50%]" })
824
+ ))
825
+ }
826
+ ), /* @__PURE__ */ React19.createElement(
827
+ StepItem,
828
+ {
829
+ index: 2,
830
+ title: t("connector.privy.pwa.step2"),
831
+ classNames: {
832
+ content: "oui-bg-[#e9e9eb]"
833
+ },
834
+ content: /* @__PURE__ */ React19.createElement(
835
+ Flex,
836
+ {
837
+ className: "oui-w-full oui-bg-base-contrast oui-rounded-[12px]",
838
+ direction: "column"
839
+ },
840
+ /* @__PURE__ */ React19.createElement(
841
+ Flex,
842
+ {
843
+ className: "oui-w-full oui-px-4 oui-py-3",
844
+ justify: "start",
845
+ itemAlign: "center"
846
+ },
847
+ /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-black/[0.2] oui-text-[18px]" }, t("connector.privy.pwa.findOnPage"))
848
+ ),
849
+ /* @__PURE__ */ React19.createElement(Divider, { className: "oui-bg-black/[0.15] oui-w-full" }),
850
+ /* @__PURE__ */ React19.createElement(
851
+ Flex,
852
+ {
853
+ className: "oui-w-full oui-px-4 oui-py-3",
854
+ justify: "between",
855
+ itemAlign: "center"
856
+ },
857
+ /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-black/[0.88] oui-text-[18px] oui-col-span-2 oui-whitespace-nowrap" }, t("connector.privy.pwa.addToHomeScreen")),
858
+ /* @__PURE__ */ React19.createElement(AddIcon, null)
859
+ )
860
+ )
861
+ }
862
+ ))));
863
+ });
864
+ var ShareIcon = (props) => {
865
+ return /* @__PURE__ */ React19.createElement(
866
+ "svg",
867
+ {
868
+ xmlns: "http://www.w3.org/2000/svg",
869
+ width: "28",
870
+ height: "28",
871
+ viewBox: "0 0 28 28",
872
+ fill: "none",
873
+ className: props.className
874
+ },
875
+ /* @__PURE__ */ React19.createElement(
876
+ "path",
877
+ {
878
+ d: "M5 23.3333V13.6667C5 12.1939 6.15127 11 7.57143 11H10.6744V12.7778H7.57143C7.09804 12.7778 6.71429 13.1757 6.71429 13.6667V23.3333C6.71429 23.8243 7.09804 24.2222 7.57143 24.2222H20.4286C20.902 24.2222 21.2857 23.8243 21.2857 23.3333V13.6667C21.2857 13.1757 20.902 12.7778 20.4286 12.7778H17.555V11H20.4286C21.8487 11 23 12.1939 23 13.6667V23.3333C23 24.8061 21.8487 26 20.4286 26H7.57143C6.15127 26 5 24.8061 5 23.3333Z",
879
+ fill: "black",
880
+ fillOpacity: "0.48"
881
+ }
882
+ ),
883
+ /* @__PURE__ */ React19.createElement(
884
+ "path",
885
+ {
886
+ d: "M13.3759 2.25933C13.7206 1.91356 14.2794 1.91356 14.6241 2.25933L20.2416 7.89432C20.586 8.24011 20.5862 8.80066 20.2416 9.14634C19.897 9.49203 19.3382 9.49185 18.9935 9.14634L14.8827 5.02278V19H13.1173V5.02278L9.00654 9.14634C8.66182 9.49185 8.10301 9.49203 7.7584 9.14634C7.41378 8.80066 7.41396 8.24011 7.7584 7.89432L13.3759 2.25933Z",
887
+ fill: "black",
888
+ fillOpacity: "0.48"
889
+ }
890
+ )
891
+ );
892
+ };
893
+ var AddIcon = () => {
894
+ return /* @__PURE__ */ React19.createElement(
895
+ "svg",
896
+ {
897
+ xmlns: "http://www.w3.org/2000/svg",
898
+ width: "24",
899
+ height: "24",
900
+ viewBox: "0 0 24 24",
901
+ fill: "none"
902
+ },
903
+ /* @__PURE__ */ React19.createElement(
904
+ "path",
905
+ {
906
+ d: "M7.00598 3.92969H17.006C18.6627 3.92969 20.006 5.27297 20.006 6.92969V16.9297C20.006 18.5864 18.6627 19.9297 17.006 19.9297H7.00598C5.34927 19.9297 4.00598 18.5864 4.00598 16.9297V6.92969C4.00598 5.27297 5.34927 3.92969 7.00598 3.92969Z",
907
+ stroke: "black",
908
+ strokeOpacity: "0.88",
909
+ strokeWidth: "2"
910
+ }
911
+ ),
912
+ /* @__PURE__ */ React19.createElement(
913
+ "path",
914
+ {
915
+ d: "M8 12L16 12",
916
+ stroke: "black",
917
+ strokeOpacity: "0.88",
918
+ strokeWidth: "2",
919
+ strokeLinecap: "round"
920
+ }
921
+ ),
922
+ /* @__PURE__ */ React19.createElement(
923
+ "path",
924
+ {
925
+ d: "M12 8L12 16",
926
+ stroke: "black",
927
+ strokeOpacity: "0.88",
928
+ strokeWidth: "2",
929
+ strokeLinecap: "round"
930
+ }
931
+ )
932
+ );
933
+ };
934
+ var StepItem = (props) => {
935
+ return /* @__PURE__ */ React19.createElement(
936
+ Flex,
937
+ {
938
+ className: " oui-rounded-[12px] oui-w-full oui-overflow-hidden",
939
+ direction: "column"
940
+ },
941
+ /* @__PURE__ */ React19.createElement(Flex, { className: "oui-bg-base-4 oui-w-full oui-px-3 oui-py-3 oui-gap-[6px]" }, /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-base-contrast-80 oui-text-xs oui-w-[18px] oui-h-[18px] oui-rounded-[100%] oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)] oui-text-center oui-text-black " }, props.index), /* @__PURE__ */ React19.createElement(Text, { className: "oui-text-base-contrast-80 oui-text-xs" }, props.title)),
942
+ /* @__PURE__ */ React19.createElement(
943
+ Flex,
944
+ {
945
+ className: cn(
946
+ "oui-bg-base-contrast oui-h-[120px] oui-w-full oui-px-6",
947
+ props.classNames?.content
948
+ ),
949
+ justify: "center",
950
+ itemAlign: "center"
951
+ },
952
+ props.content
953
+ )
954
+ );
955
+ };
956
+ var OrderlyOSS = "https://oss.orderly.network";
957
+ var PrivyConnectorImagePath = `${OrderlyOSS}/static/sdk/privy`;
958
+ var WALLET_ICONS = {
959
+ metamask: "https://oss.orderly.network/static/sdk/evm_wallets/metamask.png",
960
+ walletconnect: "https://oss.orderly.network/static/sdk/evm_wallets/walletConnect.png",
961
+ binance: "https://oss.orderly.network/static/sdk/evm_wallets/binance.png",
962
+ ledger: "https://oss.orderly.network/static/sdk/evm_wallets/ledger.png",
963
+ coinbase: "https://oss.orderly.network/static/sdk/evm_wallets/coinbase.png",
964
+ magic: "https://oss.orderly.network/static/sdk/evm_wallets/magic.png",
965
+ trezor: "https://oss.orderly.network/static/sdk/evm_wallets/trezor.png",
966
+ exodus: "https://oss.orderly.network/static/sdk/evm_wallets/exodus.png",
967
+ frame: "https://oss.orderly.network/static/sdk/evm_wallets/frame.png",
968
+ rabby: "https://oss.orderly.network/static/sdk/evm_wallets/rabby.png"
969
+ };
970
+ var getWalletIcon = (type) => {
971
+ return WALLET_ICONS[type.toLowerCase()];
972
+ };
973
+ var getChainType = (chainId) => {
974
+ if (AbstractChains.has(chainId)) {
975
+ return "Abstract" /* ABSTRACT */;
976
+ }
977
+ if (SolanaChains$1.has(chainId)) {
978
+ return "SOL" /* SOL */;
979
+ }
980
+ return "EVM" /* EVM */;
981
+ };
982
+
983
+ // src/hooks/useWallet.tsx
984
+ function useWallet2() {
985
+ const { track } = useTrack();
986
+ const { walletChainTypeConfig } = useWalletConnectorPrivy();
987
+ const [connectorKey, setConnectorKey] = useLocalStorage(ConnectorKey, "");
988
+ const {
989
+ disconnect: disconnectEVM,
990
+ connect: connectEVM,
991
+ wallet: walletEVM,
992
+ connectedChain: connectedChainEvm,
993
+ setChain: setChainEvm,
994
+ isConnected: isConnectedEVM
995
+ } = useWagmiWallet();
996
+ const {
997
+ disconnect: disconnectSOL,
998
+ connect: connectSOL,
999
+ wallet: walletSOL,
1000
+ isConnected: isConnectedSOL,
1001
+ connectedChain: connectedChainSOL
1002
+ } = useSolanaWallet();
1003
+ const {
1004
+ disconnect: disconnectPrivy,
1005
+ connect: connectPrivy,
1006
+ walletSOL: privyWalletSOL,
1007
+ walletEVM: privyWalletEVM,
1008
+ isConnected: isConnectedPrivy,
1009
+ switchChain: setChainPrivy
1010
+ } = usePrivyWallet();
1011
+ const {
1012
+ connect: connectAbstract,
1013
+ wallet: walletAbstract,
1014
+ connectedChain: connectedChainAbstract,
1015
+ isConnected: isConnectedAbstract,
1016
+ disconnect: disconnectAbstract
1017
+ } = useAbstractWallet();
1018
+ const [wallet, setWallet] = useState(null);
1019
+ const [namespace, setNamespace] = useState(null);
1020
+ const [walletType, setWalletType] = useState(null);
1021
+ const { storageChain, setStorageChain } = useStorageChain();
1022
+ const { setOpenConnectDrawer, targetWalletType, setTargetWalletType } = useWalletConnectorPrivy();
1023
+ const isManual = useRef(false);
1024
+ const connect = (params) => {
1025
+ setTargetWalletType(void 0);
1026
+ try {
1027
+ if (params.walletType === "EVM" /* EVM */) {
1028
+ setConnectorKey("EVM" /* EVM */);
1029
+ connectEVM({ connector: params.connector });
1030
+ }
1031
+ if (params.walletType === "SOL" /* SOL */) {
1032
+ setConnectorKey("SOL" /* SOL */);
1033
+ connectSOL(params.walletAdapter.name).then();
1034
+ }
1035
+ if (params.walletType === "privy" /* PRIVY */) {
1036
+ setConnectorKey("privy" /* PRIVY */);
1037
+ connectPrivy();
1038
+ }
1039
+ if (params.walletType === "Abstract" /* ABSTRACT */) {
1040
+ setConnectorKey("Abstract" /* ABSTRACT */);
1041
+ connectAbstract();
1042
+ }
1043
+ } catch (e) {
1044
+ }
1045
+ };
1046
+ const isPrivy = useMemo(() => {
1047
+ if (connectorKey === "privy" /* PRIVY */) {
1048
+ return true;
1049
+ }
1050
+ return false;
1051
+ }, [connectorKey]);
1052
+ const [connectedChain, setConnectedChain] = useState();
1053
+ const setChain = async (chain) => {
1054
+ const chainType = getChainType(parseInt(chain.chainId));
1055
+ if (isPrivy) {
1056
+ if (chainType === "EVM" /* EVM */) {
1057
+ if (!walletChainTypeConfig.hasEvm) {
1058
+ return Promise.reject(new Error("No evm wallet found"));
1059
+ }
1060
+ isManual.current = true;
1061
+ return setChainPrivy(parseInt(chain.chainId)).then((res) => {
1062
+ track(TrackerEventName.switchNetworkSuccess, {
1063
+ from_chain: storageChain?.chainId,
1064
+ to_chain: chain.chainId
1065
+ });
1066
+ setStorageChain(parseInt(chain.chainId));
1067
+ return Promise.resolve(true);
1068
+ }).catch((e) => {
1069
+ return Promise.reject(e);
1070
+ });
1071
+ }
1072
+ if (chainType === "Abstract" /* ABSTRACT */) {
1073
+ setOpenConnectDrawer(true);
1074
+ setTargetWalletType("Abstract" /* ABSTRACT */);
1075
+ }
1076
+ if (chainType === "SOL" /* SOL */) {
1077
+ isManual.current = true;
1078
+ if (!walletChainTypeConfig.hasSol) {
1079
+ return Promise.reject(new Error("No solana wallet found"));
1080
+ }
1081
+ if (privyWalletSOL) {
1082
+ setStorageChain(parseInt(chain.chainId));
1083
+ return Promise.resolve(true);
1084
+ } else {
1085
+ setOpenConnectDrawer(true);
1086
+ setTargetWalletType("SOL" /* SOL */);
1087
+ return Promise.reject(new Error("No solana wallet found"));
1088
+ }
1089
+ }
1090
+ } else {
1091
+ if (chainType === "EVM" /* EVM */) {
1092
+ if (isConnectedEVM && walletEVM) {
1093
+ await setChainEvm(parseInt(chain.chainId));
1094
+ setStorageChain(parseInt(chain.chainId));
1095
+ track(TrackerEventName.switchNetworkSuccess, {
1096
+ from_chain: storageChain?.chainId,
1097
+ to_chain: chain.chainId
1098
+ });
1099
+ } else {
1100
+ setOpenConnectDrawer(true);
1101
+ setTargetWalletType("EVM" /* EVM */);
1102
+ return Promise.resolve(true);
1103
+ }
1104
+ return Promise.resolve(true);
1105
+ }
1106
+ if (chainType === "SOL" /* SOL */) {
1107
+ if (isConnectedSOL && walletSOL) {
1108
+ setStorageChain(parseInt(chain.chainId));
1109
+ } else {
1110
+ setOpenConnectDrawer(true);
1111
+ setTargetWalletType("SOL" /* SOL */);
1112
+ return Promise.resolve(true);
1113
+ }
1114
+ }
1115
+ if (chainType === "Abstract" /* ABSTRACT */) {
1116
+ if (isConnectedAbstract && walletAbstract) {
1117
+ setStorageChain(parseInt(chain.chainId));
1118
+ return Promise.resolve(true);
1119
+ } else {
1120
+ setOpenConnectDrawer(true);
1121
+ setTargetWalletType("Abstract" /* ABSTRACT */);
1122
+ return Promise.reject(new Error("No abstract wallet found"));
1123
+ }
1124
+ }
1125
+ }
1126
+ };
1127
+ const switchWallet = (walletType2) => {
1128
+ const fromWallet = wallet?.accounts[0].address;
1129
+ let toWallet;
1130
+ if (isPrivy) {
1131
+ switch (walletType2) {
1132
+ case "EVM" /* EVM */:
1133
+ if (privyWalletEVM) {
1134
+ setStorageChain(privyWalletEVM.chain.id);
1135
+ toWallet = privyWalletEVM.accounts[0].address;
1136
+ }
1137
+ break;
1138
+ case "SOL" /* SOL */:
1139
+ if (privyWalletSOL) {
1140
+ setStorageChain(privyWalletSOL.chain.id);
1141
+ toWallet = privyWalletSOL.accounts[0].address;
1142
+ }
1143
+ break;
1144
+ }
1145
+ } else {
1146
+ switch (walletType2) {
1147
+ case "EVM" /* EVM */:
1148
+ if (walletEVM) {
1149
+ setStorageChain(walletEVM.chain.id);
1150
+ toWallet = walletEVM.accounts[0].address;
1151
+ }
1152
+ break;
1153
+ case "SOL" /* SOL */:
1154
+ if (walletSOL) {
1155
+ setStorageChain(walletSOL.chain.id);
1156
+ toWallet = walletSOL.accounts[0].address;
1157
+ }
1158
+ break;
1159
+ case "Abstract" /* ABSTRACT */:
1160
+ if (walletAbstract) {
1161
+ setStorageChain(walletAbstract.chain.id);
1162
+ toWallet = walletAbstract.accounts[0].address;
1163
+ }
1164
+ break;
1165
+ }
1166
+ }
1167
+ track(TrackerEventName.clickSwitchWallet, {
1168
+ fromWallet,
1169
+ toWallet
1170
+ });
1171
+ };
1172
+ const disconnect = async (walletType2) => {
1173
+ switch (walletType2) {
1174
+ case "privy" /* PRIVY */:
1175
+ return await disconnectPrivy();
1176
+ case "EVM" /* EVM */:
1177
+ return disconnectEVM();
1178
+ case "SOL" /* SOL */:
1179
+ return disconnectSOL();
1180
+ case "Abstract" /* ABSTRACT */:
1181
+ return disconnectAbstract();
1182
+ }
1183
+ };
1184
+ const onDisconnect = (parmas) => {
1185
+ if (!walletType) {
1186
+ throw new Error("No wallet type found");
1187
+ }
1188
+ return new Promise((resolve, reject) => {
1189
+ disconnect(walletType).then(() => {
1190
+ resolve(true);
1191
+ }).catch((e) => {
1192
+ reject(e);
1193
+ });
1194
+ });
1195
+ };
1196
+ const setNullWalletStatus = () => {
1197
+ setWallet(null);
1198
+ setWalletType(null);
1199
+ setConnectedChain(null);
1200
+ setNamespace(null);
1201
+ };
1202
+ useEffect(() => {
1203
+ if (connectorKey !== "privy" /* PRIVY */) {
1204
+ return;
1205
+ }
1206
+ if (storageChain?.namespace === ChainNamespace.evm) {
1207
+ if (AbstractChains.has(storageChain.chainId)) {
1208
+ return setNullWalletStatus();
1209
+ }
1210
+ if (privyWalletEVM) {
1211
+ setWallet(privyWalletEVM);
1212
+ setWalletType("privy" /* PRIVY */);
1213
+ setConnectedChain(privyWalletEVM.chain);
1214
+ setNamespace(ChainNamespace.evm);
1215
+ } else {
1216
+ setNullWalletStatus();
1217
+ }
1218
+ }
1219
+ if (storageChain?.namespace === ChainNamespace.solana) {
1220
+ if (privyWalletSOL) {
1221
+ setWallet(privyWalletSOL);
1222
+ setWalletType("privy" /* PRIVY */);
1223
+ setConnectedChain(privyWalletSOL.chain);
1224
+ setNamespace(ChainNamespace.solana);
1225
+ } else {
1226
+ setNullWalletStatus();
1227
+ }
1228
+ }
1229
+ }, [connectorKey, privyWalletEVM, privyWalletSOL, storageChain]);
1230
+ useEffect(() => {
1231
+ if (connectorKey === "privy" /* PRIVY */) {
1232
+ return;
1233
+ }
1234
+ if (storageChain?.namespace === ChainNamespace.evm) {
1235
+ if (AbstractChains.has(storageChain.chainId)) {
1236
+ if (isConnectedAbstract && walletAbstract) {
1237
+ setWallet(walletAbstract);
1238
+ setWalletType("Abstract" /* ABSTRACT */);
1239
+ setConnectedChain(connectedChainAbstract);
1240
+ setNamespace(ChainNamespace.evm);
1241
+ } else {
1242
+ setNullWalletStatus();
1243
+ }
1244
+ } else {
1245
+ if (isConnectedEVM && walletEVM) {
1246
+ setWallet(walletEVM);
1247
+ setWalletType("EVM" /* EVM */);
1248
+ setConnectedChain(connectedChainEvm);
1249
+ setNamespace(ChainNamespace.evm);
1250
+ } else {
1251
+ setNullWalletStatus();
1252
+ }
1253
+ }
1254
+ }
1255
+ if (storageChain?.namespace === ChainNamespace.solana) {
1256
+ if (isConnectedSOL && walletSOL) {
1257
+ setWallet(walletSOL);
1258
+ setWalletType("SOL" /* SOL */);
1259
+ setConnectedChain(connectedChainSOL);
1260
+ setNamespace(ChainNamespace.solana);
1261
+ } else {
1262
+ setNullWalletStatus();
1263
+ }
1264
+ }
1265
+ }, [
1266
+ connectorKey,
1267
+ storageChain,
1268
+ walletEVM,
1269
+ walletSOL,
1270
+ isConnectedEVM,
1271
+ isConnectedSOL,
1272
+ isConnectedAbstract,
1273
+ walletAbstract,
1274
+ connectedChainAbstract
1275
+ ]);
1276
+ return {
1277
+ connect,
1278
+ wallet,
1279
+ connectedChain,
1280
+ setChain,
1281
+ namespace,
1282
+ switchWallet,
1283
+ disconnect,
1284
+ onDisconnect
1285
+ };
1286
+ }
1287
+ function AbstractConnectArea({ connect }) {
1288
+ const { isMobile } = useScreen();
1289
+ return /* @__PURE__ */ React19.createElement("div", null, /* @__PURE__ */ React19.createElement("div", { className: "oui-mb-2 oui-text-sm oui-font-semibold oui-text-base-contrast-80" }, "Abstract"), /* @__PURE__ */ React19.createElement("div", { className: "oui-grid oui-grid-cols-2 oui-gap-2" }, /* @__PURE__ */ React19.createElement(
1290
+ "div",
1291
+ {
1292
+ className: cn(
1293
+ " oui-flex oui-flex-1 oui-cursor-pointer oui-items-center oui-justify-start oui-gap-1 oui-rounded-[6px] oui-px-2 oui-py-[11px]",
1294
+ isMobile ? "oui-bg-base-5" : "oui-bg-[#07080A]"
1295
+ ),
1296
+ onClick: () => connect()
1297
+ },
1298
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-size-[18px] oui-items-center oui-justify-center" }, /* @__PURE__ */ React19.createElement(
1299
+ "img",
1300
+ {
1301
+ className: cn("oui-size-[12px]"),
1302
+ src: `${PrivyConnectorImagePath}/abstract.png`,
1303
+ alt: "abstract wallet"
1304
+ }
1305
+ )),
1306
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, "Abstract")
1307
+ )));
1308
+ }
1309
+ var RenderLoginMethodsDom = ({
1310
+ connect,
1311
+ loginMethods
1312
+ }) => {
1313
+ const { t } = useTranslation();
1314
+ const { isDesktop } = useScreen();
1315
+ const arr = [];
1316
+ if (loginMethods?.includes("email")) {
1317
+ arr.push(
1318
+ /* @__PURE__ */ React19.createElement(
1319
+ "div",
1320
+ {
1321
+ className: cn(
1322
+ "oui-flex oui-cursor-pointer oui-items-center oui-justify-center oui-gap-1 oui-rounded-[6px] oui-border oui-border-base-contrast-12 oui-px-2 oui-py-[11px]",
1323
+ isDesktop && "oui-border-none oui-bg-[#333948]"
1324
+ ),
1325
+ onClick: () => connect({ walletType: "privy", extraType: "email" })
1326
+ },
1327
+ /* @__PURE__ */ React19.createElement(
1328
+ "img",
1329
+ {
1330
+ src: "https://oss.orderly.network/static/sdk/privy/email.svg",
1331
+ className: "oui-size-[18px]"
1332
+ }
1333
+ ),
1334
+ isDesktop && /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, t("connector.privy.email"))
1335
+ )
1336
+ );
1337
+ }
1338
+ if (loginMethods?.includes("google")) {
1339
+ arr.push(
1340
+ /* @__PURE__ */ React19.createElement(
1341
+ "div",
1342
+ {
1343
+ className: cn(
1344
+ "oui-flex oui-cursor-pointer oui-items-center oui-justify-center oui-gap-1 oui-rounded-[6px] oui-border oui-border-base-contrast-12 oui-px-2 oui-py-[11px]",
1345
+ isDesktop && "oui-border-none oui-bg-[#335FFC]"
1346
+ ),
1347
+ onClick: () => connect({ walletType: "privy", extraType: "google" })
1348
+ },
1349
+ /* @__PURE__ */ React19.createElement(
1350
+ "img",
1351
+ {
1352
+ src: "https://oss.orderly.network/static/sdk/privy/google.svg",
1353
+ className: "oui-size-[18px]"
1354
+ }
1355
+ ),
1356
+ isDesktop && /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, t("connector.privy.google"))
1357
+ )
1358
+ );
1359
+ }
1360
+ if (loginMethods?.includes("twitter")) {
1361
+ arr.push(
1362
+ /* @__PURE__ */ React19.createElement(
1363
+ "div",
1364
+ {
1365
+ className: cn(
1366
+ "oui-flex oui-cursor-pointer oui-items-center oui-justify-center oui-gap-1 oui-rounded-[6px] oui-border oui-border-base-contrast-12 oui-px-2 oui-py-[11px]",
1367
+ isDesktop && "oui-border-none oui-bg-[#07080A]"
1368
+ ),
1369
+ onClick: () => connect({ walletType: "privy", extraType: "twitter" })
1370
+ },
1371
+ /* @__PURE__ */ React19.createElement(
1372
+ "img",
1373
+ {
1374
+ src: "https://oss.orderly.network/static/sdk/privy/twitter.svg",
1375
+ className: "oui-size-[18px]"
1376
+ }
1377
+ ),
1378
+ isDesktop && /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, t("connector.privy.twitter"))
1379
+ )
1380
+ );
1381
+ }
1382
+ return arr.map((item, index) => {
1383
+ return /* @__PURE__ */ React19.createElement("div", { key: index }, item);
1384
+ });
1385
+ };
1386
+ var PrivyConnectAreaMobile = ({
1387
+ connect
1388
+ }) => {
1389
+ const { t } = useTranslation();
1390
+ const { isMobile, isDesktop } = useScreen();
1391
+ const { connectorWalletType, privyConfig } = useWalletConnectorPrivy();
1392
+ const loginMethods = privyConfig.loginMethods;
1393
+ return /* @__PURE__ */ React19.createElement(Flex, { direction: "column", className: "oui-w-full" }, /* @__PURE__ */ React19.createElement(Grid, { cols: 3, rows: 1, className: "oui-w-full", gap: 2 }, /* @__PURE__ */ React19.createElement(RenderLoginMethodsDom, { connect, loginMethods })), (!connectorWalletType.disableWagmi || !connectorWalletType.disableSolana) && /* @__PURE__ */ React19.createElement("div", { className: "oui-mt-4 oui-h-px oui-w-full oui-bg-line md:oui-mt-5" }));
1394
+ };
1395
+ var PrivyConnectAreaDesktop = ({
1396
+ connect
1397
+ }) => {
1398
+ const { t } = useTranslation();
1399
+ const { connectorWalletType, privyConfig } = useWalletConnectorPrivy();
1400
+ const loginMethods = privyConfig.loginMethods;
1401
+ return /* @__PURE__ */ React19.createElement(Flex, { direction: "column", itemAlign: "start", className: "oui-w-full" }, /* @__PURE__ */ React19.createElement(Grid, { cols: 1, gap: 2, className: "oui-w-full" }, /* @__PURE__ */ React19.createElement(RenderLoginMethodsDom, { connect, loginMethods })), (!connectorWalletType.disableWagmi || !connectorWalletType.disableSolana) && /* @__PURE__ */ React19.createElement("div", { className: "oui-mt-4 oui-h-px oui-w-full oui-bg-line md:oui-mt-5" }));
1402
+ };
1403
+ function PrivyConnectArea({
1404
+ connect
1405
+ }) {
1406
+ const { isDesktop } = useScreen();
1407
+ if (isDesktop) {
1408
+ return /* @__PURE__ */ React19.createElement(PrivyConnectAreaDesktop, { connect });
1409
+ }
1410
+ return /* @__PURE__ */ React19.createElement(PrivyConnectAreaMobile, { connect });
1411
+ }
1412
+ function RenderPrivyTypeIcon({
1413
+ type,
1414
+ size,
1415
+ black
1416
+ }) {
1417
+ if (type === "email") {
1418
+ return /* @__PURE__ */ React19.createElement(
1419
+ "img",
1420
+ {
1421
+ src: `https://oss.orderly.network/static/sdk/privy/email${black ? "-black" : ""}.svg`,
1422
+ width: size
1423
+ }
1424
+ );
1425
+ }
1426
+ if (type === "google_oauth") {
1427
+ return /* @__PURE__ */ React19.createElement(
1428
+ "img",
1429
+ {
1430
+ src: "https://oss.orderly.network/static/sdk/privy/google.svg",
1431
+ width: size
1432
+ }
1433
+ );
1434
+ }
1435
+ if (type === "twitter_oauth") {
1436
+ return /* @__PURE__ */ React19.createElement(
1437
+ "img",
1438
+ {
1439
+ src: `https://oss.orderly.network/static/sdk/privy/twitter${black ? "-black" : ""}.svg`,
1440
+ width: size
1441
+ }
1442
+ );
1443
+ }
1444
+ return /* @__PURE__ */ React19.createElement(
1445
+ "img",
1446
+ {
1447
+ src: `https://oss.orderly.network/static/sdk/privy/email${black ? "-black" : ""}.svg`,
1448
+ width: size
1449
+ }
1450
+ );
1451
+ }
1452
+ function RenderWalletIcon({
1453
+ connector
1454
+ }) {
1455
+ const icon = connector.icon ? connector.icon : getWalletIcon(connector.type);
1456
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-w-[18px] oui-h-[18px] oui-flex oui-items-center oui-justify-center" }, /* @__PURE__ */ React19.createElement(
1457
+ "img",
1458
+ {
1459
+ className: cn(
1460
+ connector.icon ? "oui-w-[12px] oui-h-[12px]" : "oui-w-[18px] oui-h-[18px]"
1461
+ ),
1462
+ src: icon,
1463
+ alt: connector.name
1464
+ }
1465
+ ));
1466
+ }
1467
+ function EVMChainPopover({ children }) {
1468
+ const { getChainsByNetwork } = useWalletConnectorPrivy();
1469
+ const [chains] = useState(getChainsByNetwork("mainnet"));
1470
+ const { t } = useTranslation();
1471
+ const { isMobile } = useScreen();
1472
+ const [open, setOpen] = useState(false);
1473
+ if (isMobile) {
1474
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
1475
+ SimpleDialog,
1476
+ {
1477
+ open,
1478
+ size: "xs",
1479
+ onOpenChange: setOpen,
1480
+ classNames: {
1481
+ content: "oui-p-4 oui-z-[99]",
1482
+ overlay: "oui-z-[99]"
1483
+ },
1484
+ title: t("connector.privy.supportedEvmChain")
1485
+ },
1486
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-p-1 oui-grid oui-grid-cols-2 oui-gap-x-2 oui-gap-y-3 oui-text-2xs oui-text-base-contrast-54" }, chains.map((item, key) => /* @__PURE__ */ React19.createElement(
1487
+ "div",
1488
+ {
1489
+ key,
1490
+ className: "oui-flex oui-items-center oui-justify-start oui-gap-1"
1491
+ },
1492
+ /* @__PURE__ */ React19.createElement(ChainIcon, { chainId: item.id, size: "2xs" }),
1493
+ /* @__PURE__ */ React19.createElement("div", null, item.name)
1494
+ )))
1495
+ ), /* @__PURE__ */ React19.createElement("button", { onClick: () => setOpen(true) }, children));
1496
+ }
1497
+ return /* @__PURE__ */ React19.createElement(
1498
+ Popover,
1499
+ {
1500
+ content: /* @__PURE__ */ React19.createElement("div", null, /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast" }, t("connector.privy.supportedEvmChain")), /* @__PURE__ */ React19.createElement("div", { className: "oui-mt-3 oui-grid oui-grid-cols-3 oui-gap-x-2 oui-gap-y-3 oui-text-2xs oui-text-base-contrast-54" }, chains.map((item, key) => /* @__PURE__ */ React19.createElement(
1501
+ "div",
1502
+ {
1503
+ key,
1504
+ className: "oui-flex oui-items-center oui-justify-start oui-gap-1"
1505
+ },
1506
+ /* @__PURE__ */ React19.createElement(ChainIcon, { chainId: item.id, size: "2xs" }),
1507
+ /* @__PURE__ */ React19.createElement("div", null, item.name)
1508
+ )))),
1509
+ arrow: true,
1510
+ contentProps: {
1511
+ side: "bottom",
1512
+ align: "center",
1513
+ className: "oui-p-2 oui-z-[65]"
1514
+ }
1515
+ },
1516
+ /* @__PURE__ */ React19.createElement("button", null, children)
1517
+ );
1518
+ }
1519
+
1520
+ // src/components/renderConnector/solanaConnector.tsx
1521
+ function SOLConnectArea({
1522
+ connect
1523
+ }) {
1524
+ const { wallets } = useSolanaWallet();
1525
+ const { isMobile } = useScreen();
1526
+ return /* @__PURE__ */ React19.createElement("div", null, /* @__PURE__ */ React19.createElement("div", { className: "oui-mb-2 oui-text-sm oui-font-semibold oui-text-base-contrast-80" }, "Solana"), /* @__PURE__ */ React19.createElement("div", { className: "oui-grid oui-grid-cols-2 oui-gap-2" }, wallets.map((item, key) => /* @__PURE__ */ React19.createElement(
1527
+ "div",
1528
+ {
1529
+ key,
1530
+ className: cn(
1531
+ " oui-flex oui-flex-1 oui-cursor-pointer oui-items-center oui-justify-start oui-gap-1 oui-rounded-[6px] oui-px-2 oui-py-[11px]",
1532
+ isMobile ? "oui-bg-base-5" : "oui-bg-[#07080A]"
1533
+ ),
1534
+ onClick: () => connect(item.adapter)
1535
+ },
1536
+ /* @__PURE__ */ React19.createElement(RenderWalletIcon, { connector: item.adapter }),
1537
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, item.adapter.name)
1538
+ ))));
1539
+ }
1540
+ function EVMConnectArea({
1541
+ connect
1542
+ }) {
1543
+ const { connectors } = useWagmiWallet();
1544
+ const { setOpenConnectDrawer } = useWalletConnectorPrivy();
1545
+ const { isMobile } = useScreen();
1546
+ const onConnect = (item) => {
1547
+ if (isMobile) {
1548
+ if (item.id === "walletConnect") {
1549
+ setOpenConnectDrawer(false);
1550
+ }
1551
+ }
1552
+ connect(item);
1553
+ };
1554
+ return /* @__PURE__ */ React19.createElement("div", { className: "" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-mb-2 oui-text-sm oui-font-semibold oui-text-base-contrast-80" }, "EVM"), /* @__PURE__ */ React19.createElement("div", { className: "oui-grid oui-grid-cols-2 oui-gap-2" }, connectors.map((item, key) => /* @__PURE__ */ React19.createElement(
1555
+ "div",
1556
+ {
1557
+ key,
1558
+ className: cn(
1559
+ " oui-flex oui-flex-1 oui-cursor-pointer oui-items-center oui-justify-start oui-gap-1 oui-rounded-[6px] oui-px-2 oui-py-[11px]",
1560
+ isMobile ? "oui-bg-base-5" : "oui-bg-[#07080A]"
1561
+ ),
1562
+ onClick: () => onConnect(item)
1563
+ },
1564
+ /* @__PURE__ */ React19.createElement(RenderWalletIcon, { connector: item }),
1565
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, item.name)
1566
+ ))));
1567
+ }
1568
+
1569
+ // src/components/renderConnector/index.tsx
1570
+ function RenderConnector() {
1571
+ const { connect } = useWallet2();
1572
+ const { setOpenConnectDrawer, connectorWalletType, walletChainTypeConfig } = useWalletConnectorPrivy();
1573
+ const handleConnect = (params) => {
1574
+ connect(params);
1575
+ if (params.walletType === "privy" /* PRIVY */) {
1576
+ setOpenConnectDrawer(false);
1577
+ }
1578
+ };
1579
+ const renderPrivyConnectArea = () => {
1580
+ if (connectorWalletType.disablePrivy) {
1581
+ return null;
1582
+ }
1583
+ return /* @__PURE__ */ React19.createElement(
1584
+ PrivyConnectArea,
1585
+ {
1586
+ connect: (type) => handleConnect({
1587
+ walletType: "privy" /* PRIVY */,
1588
+ extraType: type
1589
+ })
1590
+ }
1591
+ );
1592
+ };
1593
+ const renderWagmiConnectArea = () => {
1594
+ if (connectorWalletType.disableWagmi) {
1595
+ return null;
1596
+ }
1597
+ if (!walletChainTypeConfig.hasEvm) {
1598
+ return null;
1599
+ }
1600
+ return /* @__PURE__ */ React19.createElement(
1601
+ EVMConnectArea,
1602
+ {
1603
+ connect: (connector) => handleConnect({
1604
+ walletType: "EVM" /* EVM */,
1605
+ connector
1606
+ })
1607
+ }
1608
+ );
1609
+ };
1610
+ const renderSolanaConnectArea = () => {
1611
+ if (connectorWalletType.disableSolana) {
1612
+ return null;
1613
+ }
1614
+ if (!walletChainTypeConfig.hasSol) {
1615
+ return null;
1616
+ }
1617
+ return /* @__PURE__ */ React19.createElement(
1618
+ SOLConnectArea,
1619
+ {
1620
+ connect: (walletAdapter) => handleConnect({
1621
+ walletType: "SOL" /* SOL */,
1622
+ walletAdapter
1623
+ })
1624
+ }
1625
+ );
1626
+ };
1627
+ const renderAbstractConnectArea = () => {
1628
+ if (connectorWalletType.disableAGW) {
1629
+ return null;
1630
+ }
1631
+ if (!walletChainTypeConfig.hasAbstract) {
1632
+ return null;
1633
+ }
1634
+ return /* @__PURE__ */ React19.createElement(
1635
+ AbstractConnectArea,
1636
+ {
1637
+ connect: () => handleConnect({ walletType: "Abstract" /* ABSTRACT */ })
1638
+ }
1639
+ );
1640
+ };
1641
+ return /* @__PURE__ */ React19.createElement(ScrollArea, { className: "oui-flex oui-grow oui-shrik oui-basis-auto oui-custom-scrollbar" }, /* @__PURE__ */ React19.createElement("div", { className: cn("oui-flex oui-flex-col oui-gap-4", "md:oui-gap-5") }, renderPrivyConnectArea(), renderWagmiConnectArea(), renderSolanaConnectArea(), renderAbstractConnectArea()));
1642
+ }
1643
+ function SwitchNetworkTips({
1644
+ tipsContent
1645
+ }) {
1646
+ const { t } = useTranslation();
1647
+ const { isMobile } = useScreen();
1648
+ const { network, setOpenConnectDrawer } = useWalletConnectorPrivy();
1649
+ if (!tipsContent) {
1650
+ return null;
1651
+ }
1652
+ const onSwitchNetwork = () => {
1653
+ setOpenConnectDrawer(false);
1654
+ modal.show(isMobile ? "ChainSelectorSheetId" : "ChainSelectorDialogId", {
1655
+ networkId: network,
1656
+ bridgeLessOnly: false
1657
+ }).then(
1658
+ (r) => {
1659
+ },
1660
+ (error) => void 0
1661
+ );
1662
+ };
1663
+ return /* @__PURE__ */ React19.createElement(
1664
+ "div",
1665
+ {
1666
+ onClick: onSwitchNetwork,
1667
+ className: "oui-mb-3 oui-flex oui-cursor-pointer oui-items-center oui-justify-between oui-gap-1 oui-rounded-[8px] oui-bg-[rgba(255,125,0,0.1)] oui-px-2 oui-py-[6px] "
1668
+ },
1669
+ /* @__PURE__ */ React19.createElement(Flex, { gap: 1 }, /* @__PURE__ */ React19.createElement(
1670
+ ExclamationFillIcon,
1671
+ {
1672
+ size: 14,
1673
+ className: " oui-shrink-0 oui-text-warning-darken"
1674
+ }
1675
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-warning-darken" }, t("connector.privy.switchNetwork.tips", {
1676
+ chainName: tipsContent
1677
+ }))),
1678
+ /* @__PURE__ */ React19.createElement(ArrowRightIcon, { size: 14, className: "oui-text-[#FF7D00]" })
1679
+ );
1680
+ }
1681
+ var StorageChainNotCurrentWalletType = ({
1682
+ currentWalletType
1683
+ }) => {
1684
+ const { storageChain } = useStorageChain();
1685
+ const tipsContent = useMemo(() => {
1686
+ if (!currentWalletType || currentWalletType.size === 0 || !storageChain) {
1687
+ return null;
1688
+ }
1689
+ let text = null;
1690
+ const isSolana = SolanaChains$1.has(parseInt(storageChain?.chainId));
1691
+ const isAbstract = AbstractChains.has(parseInt(storageChain?.chainId));
1692
+ const isEvm = !isSolana && !isAbstract;
1693
+ if (isSolana && currentWalletType.has("SOL" /* SOL */)) {
1694
+ return null;
1695
+ } else if (isAbstract && currentWalletType.has("Abstract" /* ABSTRACT */)) {
1696
+ return null;
1697
+ } else if (isEvm && currentWalletType.has("EVM" /* EVM */)) {
1698
+ return null;
1699
+ }
1700
+ text = Array.from(currentWalletType).map((item) => {
1701
+ if (item === "EVM" /* EVM */) {
1702
+ return "Evm";
1703
+ } else if (item === "SOL" /* SOL */) {
1704
+ return "Solana";
1705
+ } else if (item === "Abstract" /* ABSTRACT */) {
1706
+ return "Abstract";
1707
+ }
1708
+ }).join("/");
1709
+ return text;
1710
+ }, [storageChain, currentWalletType]);
1711
+ return /* @__PURE__ */ React19.createElement(SwitchNetworkTips, { tipsContent });
1712
+ };
1713
+ var getCardBgClassName = (type = "EVM" /* EVM */) => {
1714
+ const cardBgColorMap = {
1715
+ ["EVM" /* EVM */]: "oui-bg-[#283BEE]",
1716
+ ["Abstract" /* ABSTRACT */]: "oui-bg-[#00A858]",
1717
+ ["SOL" /* SOL */]: "oui-bg-[#630EAD]"
1718
+ };
1719
+ return cardBgColorMap[type];
1720
+ };
1721
+ var getCardActiveClassName = (isActive, isMulti, type = "EVM" /* EVM */) => {
1722
+ const cardActiveColorMap = {
1723
+ ["EVM" /* EVM */]: "oui-border-[2px] oui-border-[#B9D1FF]",
1724
+ ["Abstract" /* ABSTRACT */]: "oui-border-[2px] oui-border-[#B9D1FF]",
1725
+ ["SOL" /* SOL */]: "oui-border-[2px] oui-border-[#faedff]"
1726
+ };
1727
+ return isActive && isMulti && cardActiveColorMap[type];
1728
+ };
1729
+ function WalletCard(props) {
1730
+ const { t } = useTranslation();
1731
+ const copyAddress = async (address) => {
1732
+ await navigator.clipboard.writeText(address);
1733
+ toast.success(t("common.copy.copied"));
1734
+ };
1735
+ return /* @__PURE__ */ React19.createElement(
1736
+ "div",
1737
+ {
1738
+ className: cn(
1739
+ "oui-relative oui-h-[110px] oui-overflow-hidden oui-rounded-2xl oui-p-4",
1740
+ getCardBgClassName(props.type),
1741
+ getCardActiveClassName(
1742
+ props.isActive,
1743
+ props.isMulti || false,
1744
+ props.type
1745
+ )
1746
+ )
1747
+ },
1748
+ /* @__PURE__ */ React19.createElement(
1749
+ "div",
1750
+ {
1751
+ style: {
1752
+ position: "absolute",
1753
+ top: 0,
1754
+ right: -20,
1755
+ background: "url('https://oss.orderly.network/static/sdk/wallet-card-bg.png')",
1756
+ width: "110px",
1757
+ height: "110px",
1758
+ backgroundSize: "contain",
1759
+ backgroundRepeat: "no-repeat",
1760
+ backgroundPosition: "center",
1761
+ zIndex: 0
1762
+ }
1763
+ }
1764
+ ),
1765
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-relative oui-z-10 oui-flex oui-h-full oui-flex-col oui-justify-between" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-between" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-text-sm oui-font-semibold oui-text-base-contrast" }, formatAddress(props.address)), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-2" }, /* @__PURE__ */ React19.createElement(Tooltip, { content: t("common.copy"), className: "oui-z-[65]" }, /* @__PURE__ */ React19.createElement(
1766
+ CopyIcon,
1767
+ {
1768
+ size: 16,
1769
+ opacity: 1,
1770
+ className: "oui-cursor-pointer oui-text-base-contrast-80 hover:oui-text-base-contrast",
1771
+ onClick: () => copyAddress(props.address)
1772
+ }
1773
+ )), props.isPrivy ? /* @__PURE__ */ React19.createElement(
1774
+ PrivyWalletHandleOption,
1775
+ {
1776
+ address: props.address,
1777
+ type: props.type
1778
+ }
1779
+ ) : /* @__PURE__ */ React19.createElement(NonPrivyWalletHandleOption, { walletType: props.type }))), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-between" }, /* @__PURE__ */ React19.createElement(RenderWalletType, { walletType: props.type }), props.isMulti && /* @__PURE__ */ React19.createElement("div", null, /* @__PURE__ */ React19.createElement(
1780
+ Checkbox,
1781
+ {
1782
+ checked: props.isActive,
1783
+ onCheckedChange: props.onActiveChange
1784
+ }
1785
+ ))))
1786
+ );
1787
+ }
1788
+ function NonPrivyWalletHandleOption({
1789
+ walletType
1790
+ }) {
1791
+ const { disconnect } = useWallet2();
1792
+ const disconnectWallet = () => {
1793
+ let walletConnectType = "EVM" /* EVM */;
1794
+ switch (walletType) {
1795
+ case "EVM" /* EVM */:
1796
+ walletConnectType = "EVM" /* EVM */;
1797
+ break;
1798
+ case "SOL" /* SOL */:
1799
+ walletConnectType = "SOL" /* SOL */;
1800
+ break;
1801
+ case "Abstract" /* ABSTRACT */:
1802
+ walletConnectType = "Abstract" /* ABSTRACT */;
1803
+ break;
1804
+ }
1805
+ disconnect(walletConnectType);
1806
+ };
1807
+ return /* @__PURE__ */ React19.createElement("div", { onClick: () => disconnectWallet() }, /* @__PURE__ */ React19.createElement(DisconnectIcon, { className: "oui-size-4 oui-cursor-pointer oui-text-base-contrast-80 hover:oui-text-base-contrast" }));
1808
+ }
1809
+ function PrivyWalletHandleOption({
1810
+ address,
1811
+ type
1812
+ }) {
1813
+ const { t } = useTranslation();
1814
+ const { exportWallet } = usePrivyWallet();
1815
+ return /* @__PURE__ */ React19.createElement(DropdownMenuRoot, null, /* @__PURE__ */ React19.createElement(DropdownMenuTrigger, { asChild: true }, /* @__PURE__ */ React19.createElement("button", null, /* @__PURE__ */ React19.createElement(MoreIcon, { className: "oui-cursor-pointer oui-text-base-contrast-80 hover:oui-text-base-contrast" }))), /* @__PURE__ */ React19.createElement(DropdownMenuPortal, null, /* @__PURE__ */ React19.createElement(
1816
+ DropdownMenuContent,
1817
+ {
1818
+ size: "xl",
1819
+ align: "end",
1820
+ side: "top",
1821
+ style: { width: "100px" },
1822
+ className: "oui-z-[65] oui-rounded oui-p-1 oui-font-semibold",
1823
+ sideOffset: 0
1824
+ },
1825
+ /* @__PURE__ */ React19.createElement(
1826
+ DropdownMenuItem,
1827
+ {
1828
+ className: "oui-cursor-pointer oui-px-2 oui-py-1 oui-text-2xs oui-text-base-contrast-54 hover:oui-text-base-contrast",
1829
+ onClick: () => {
1830
+ exportWallet(type);
1831
+ }
1832
+ },
1833
+ /* @__PURE__ */ React19.createElement("div", null, t("common.export"))
1834
+ )
1835
+ )));
1836
+ }
1837
+ var RenderWalletType = ({ walletType }) => {
1838
+ if (walletType === "SOL" /* SOL */) {
1839
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-gap-1" }, /* @__PURE__ */ React19.createElement("div", { className: "" }, /* @__PURE__ */ React19.createElement(
1840
+ "img",
1841
+ {
1842
+ src: "https://oss.orderly.network/static/sdk/solana-logo.png",
1843
+ className: "oui-w-4"
1844
+ }
1845
+ )), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast" }, "Solana"));
1846
+ }
1847
+ if (walletType === "Abstract" /* ABSTRACT */) {
1848
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-gap-[6px]" }, /* @__PURE__ */ React19.createElement(
1849
+ "img",
1850
+ {
1851
+ src: `${PrivyConnectorImagePath}/abstract-transparent.png`,
1852
+ className: "oui-w-4"
1853
+ }
1854
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast" }, "Abstract"));
1855
+ }
1856
+ if (walletType === "EVM" /* EVM */) {
1857
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-relative oui-flex oui-items-center oui-justify-center" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-h-[18px] oui-items-center oui-justify-center " }, /* @__PURE__ */ React19.createElement(
1858
+ "img",
1859
+ {
1860
+ src: "https://oss.orderly.network/static/sdk/chains.png",
1861
+ className: "oui-relative oui-z-0 oui-h-[18px] oui-w-[49px]"
1862
+ }
1863
+ )), /* @__PURE__ */ React19.createElement("div", { className: "oui-relative oui-left-[-9px] oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]" }, /* @__PURE__ */ React19.createElement(EVMChainPopover, null, /* @__PURE__ */ React19.createElement(
1864
+ MoreIcon,
1865
+ {
1866
+ className: "oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast",
1867
+ style: { zIndex: 1 }
1868
+ }
1869
+ ))), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast" }, "Evm"))));
1870
+ }
1871
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null);
1872
+ };
1873
+ function AddAbstractWallet() {
1874
+ const [visible, setVisible] = useState(false);
1875
+ const onToggleVisibility = () => {
1876
+ setVisible(!visible);
1877
+ };
1878
+ const { connect } = useWallet2();
1879
+ const { targetWalletType } = useWalletConnectorPrivy();
1880
+ const [open, setOpen] = useState(false);
1881
+ const { t } = useTranslation();
1882
+ useEffect(() => {
1883
+ let timer = 0;
1884
+ if (targetWalletType === "Abstract" /* ABSTRACT */) {
1885
+ timer = window.setTimeout(() => {
1886
+ setOpen(true);
1887
+ }, 200);
1888
+ }
1889
+ return () => {
1890
+ if (timer) {
1891
+ window.clearTimeout(timer);
1892
+ }
1893
+ };
1894
+ }, [targetWalletType]);
1895
+ useEffect(() => {
1896
+ if (open === false) {
1897
+ return;
1898
+ }
1899
+ const timeId = window.setTimeout(() => {
1900
+ setOpen(false);
1901
+ }, 5e3);
1902
+ return () => {
1903
+ if (timeId) {
1904
+ window.clearTimeout(timeId);
1905
+ }
1906
+ };
1907
+ }, [open]);
1908
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-rounded-[8px] oui-bg-[#07080A] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React19.createElement(
1909
+ Tooltip,
1910
+ {
1911
+ className: "oui-z-[65] oui-max-w-[200px] oui-text-warning-darken",
1912
+ open,
1913
+ content: t("connector.privy.addAbstractWallet.tips")
1914
+ },
1915
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React19.createElement(
1916
+ "img",
1917
+ {
1918
+ src: `${PrivyConnectorImagePath}/abstract-transparent.png`,
1919
+ className: "oui-size-[15px]"
1920
+ }
1921
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast-80" }, t("connector.privy.addAbstractWallet")), /* @__PURE__ */ React19.createElement("button", { onClick: onToggleVisibility }, visible ? /* @__PURE__ */ React19.createElement(
1922
+ ChevronDownIcon,
1923
+ {
1924
+ size: 16,
1925
+ opacity: 1,
1926
+ className: "oui-text-base-contrast-36"
1927
+ }
1928
+ ) : /* @__PURE__ */ React19.createElement(
1929
+ ChevronUpIcon,
1930
+ {
1931
+ size: 16,
1932
+ opacity: 1,
1933
+ className: "oui-text-base-contrast"
1934
+ }
1935
+ )))
1936
+ ), /* @__PURE__ */ React19.createElement(
1937
+ "div",
1938
+ {
1939
+ className: cn(
1940
+ "oui-transition-height oui-grid oui-grid-cols-2 oui-gap-2 oui-overflow-hidden oui-duration-150",
1941
+ visible ? "oui-mt-0 oui-max-h-0" : "oui-mt-3 oui-max-h-[400px]"
1942
+ )
1943
+ },
1944
+ /* @__PURE__ */ React19.createElement(
1945
+ "div",
1946
+ {
1947
+ className: "oui-flex oui-cursor-pointer oui-items-center oui-justify-start oui-gap-1 oui-bg-[#131519] oui-px-2 oui-py-[11px]",
1948
+ onClick: () => connect({
1949
+ walletType: "Abstract" /* ABSTRACT */
1950
+ })
1951
+ },
1952
+ /* @__PURE__ */ React19.createElement(
1953
+ "img",
1954
+ {
1955
+ className: cn("oui-size-[12px]"),
1956
+ src: `${PrivyConnectorImagePath}/abstract.png`,
1957
+ alt: "abstract wallet"
1958
+ }
1959
+ ),
1960
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, "Abstract")
1961
+ )
1962
+ ));
1963
+ }
1964
+ function AddEvmWallet() {
1965
+ const { t } = useTranslation();
1966
+ const [visible, setVisible] = useState(false);
1967
+ const { connect } = useWallet2();
1968
+ const [open, setOpen] = useState(false);
1969
+ const { connectors } = useWagmiWallet();
1970
+ const { targetWalletType } = useWalletConnectorPrivy();
1971
+ useEffect(() => {
1972
+ let timer = 0;
1973
+ if (targetWalletType === "EVM" /* EVM */) {
1974
+ timer = window.setTimeout(() => {
1975
+ setOpen(true);
1976
+ }, 200);
1977
+ }
1978
+ return () => {
1979
+ if (timer) {
1980
+ window.clearTimeout(timer);
1981
+ }
1982
+ };
1983
+ }, [targetWalletType]);
1984
+ useEffect(() => {
1985
+ if (open === false) {
1986
+ return;
1987
+ }
1988
+ const timeId = window.setTimeout(() => {
1989
+ setOpen(false);
1990
+ }, 5e3);
1991
+ return () => {
1992
+ if (timeId) {
1993
+ window.clearTimeout(timeId);
1994
+ }
1995
+ };
1996
+ }, [open]);
1997
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-rounded-[8px] oui-bg-[#07080A] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React19.createElement(
1998
+ Tooltip,
1999
+ {
2000
+ className: "oui-z-[65] oui-max-w-[200px] oui-text-warning-darken",
2001
+ open,
2002
+ content: t("connector.privy.addEvmWallet.tips")
2003
+ },
2004
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-relative oui-flex oui-w-[55px] oui-items-center oui-justify-start" }, /* @__PURE__ */ React19.createElement(
2005
+ "img",
2006
+ {
2007
+ src: "https://oss.orderly.network/static/sdk/chains.png",
2008
+ className: "oui-relative oui-z-0 oui-h-[18px]"
2009
+ }
2010
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-absolute oui-right-0 oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]" }, /* @__PURE__ */ React19.createElement(EVMChainPopover, null, /* @__PURE__ */ React19.createElement(
2011
+ MoreIcon,
2012
+ {
2013
+ className: "oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast",
2014
+ style: { zIndex: 1 }
2015
+ }
2016
+ ))))), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast-80" }, t("connector.privy.addEvmWallet")), /* @__PURE__ */ React19.createElement("button", { onClick: () => setVisible(!visible) }, visible ? /* @__PURE__ */ React19.createElement(
2017
+ ChevronDownIcon,
2018
+ {
2019
+ size: 16,
2020
+ opacity: 1,
2021
+ className: "oui-text-base-contrast-36"
2022
+ }
2023
+ ) : /* @__PURE__ */ React19.createElement(
2024
+ ChevronUpIcon,
2025
+ {
2026
+ size: 16,
2027
+ opacity: 1,
2028
+ className: "oui-text-base-contrast"
2029
+ }
2030
+ )))
2031
+ ), /* @__PURE__ */ React19.createElement(
2032
+ "div",
2033
+ {
2034
+ className: cn(
2035
+ "oui-transition-height oui-grid oui-grid-cols-2 oui-gap-2 oui-overflow-hidden oui-duration-150",
2036
+ visible ? "oui-mt-0 oui-max-h-0" : "oui-mt-3 oui-max-h-[400px]"
2037
+ )
2038
+ },
2039
+ connectors.map((item, index) => /* @__PURE__ */ React19.createElement(
2040
+ "div",
2041
+ {
2042
+ key: index,
2043
+ className: "oui-flex oui-cursor-pointer oui-items-center oui-justify-center oui-gap-1 oui-bg-[#131519] oui-px-2 oui-py-[11px] oui-text-2xs",
2044
+ onClick: () => connect({ walletType: "EVM" /* EVM */, connector: item })
2045
+ },
2046
+ /* @__PURE__ */ React19.createElement(RenderWalletIcon, { connector: item }),
2047
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-base-contrast" }, item.name)
2048
+ ))
2049
+ ));
2050
+ }
2051
+ function AddSolanaWallet() {
2052
+ const { t } = useTranslation();
2053
+ const { wallets } = useSolanaWallet();
2054
+ const { connect } = useWallet2();
2055
+ const [visible, setVisible] = useState(false);
2056
+ const onToggleVisibility = () => {
2057
+ setVisible(!visible);
2058
+ };
2059
+ const { targetWalletType } = useWalletConnectorPrivy();
2060
+ const [open, setOpen] = useState(false);
2061
+ useEffect(() => {
2062
+ let timer = 0;
2063
+ if (targetWalletType === "SOL" /* SOL */) {
2064
+ timer = window.setTimeout(() => {
2065
+ setOpen(true);
2066
+ }, 200);
2067
+ }
2068
+ return () => {
2069
+ if (timer) {
2070
+ window.clearTimeout(timer);
2071
+ }
2072
+ };
2073
+ }, [targetWalletType]);
2074
+ useEffect(() => {
2075
+ if (open === false) {
2076
+ return;
2077
+ }
2078
+ const timeId = window.setTimeout(() => {
2079
+ setOpen(false);
2080
+ }, 5e3);
2081
+ return () => {
2082
+ if (timeId) {
2083
+ window.clearTimeout(timeId);
2084
+ }
2085
+ };
2086
+ }, [open]);
2087
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-rounded-[8px] oui-bg-[#07080A] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React19.createElement(
2088
+ Tooltip,
2089
+ {
2090
+ className: "oui-z-[65] oui-max-w-[200px] oui-text-warning-darken",
2091
+ open,
2092
+ content: t("connector.privy.addSolanaWallet.tips")
2093
+ },
2094
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React19.createElement(
2095
+ "img",
2096
+ {
2097
+ src: "https://oss.orderly.network/static/sdk/solana-logo.png",
2098
+ className: "oui-size-[15px]"
2099
+ }
2100
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast-80" }, t("connector.privy.addSolanaWallet")), /* @__PURE__ */ React19.createElement("button", { onClick: onToggleVisibility }, visible ? /* @__PURE__ */ React19.createElement(
2101
+ ChevronDownIcon,
2102
+ {
2103
+ size: 16,
2104
+ opacity: 1,
2105
+ className: "oui-text-base-contrast-36"
2106
+ }
2107
+ ) : /* @__PURE__ */ React19.createElement(
2108
+ ChevronUpIcon,
2109
+ {
2110
+ size: 16,
2111
+ opacity: 1,
2112
+ className: "oui-text-base-contrast"
2113
+ }
2114
+ )))
2115
+ ), /* @__PURE__ */ React19.createElement(
2116
+ "div",
2117
+ {
2118
+ className: cn(
2119
+ "oui-transition-height oui-grid oui-grid-cols-2 oui-gap-2 oui-overflow-hidden oui-duration-150",
2120
+ visible ? "oui-mt-0 oui-max-h-0" : "oui-mt-3 oui-max-h-[400px]"
2121
+ )
2122
+ },
2123
+ wallets.map((item, index) => /* @__PURE__ */ React19.createElement(
2124
+ "div",
2125
+ {
2126
+ key: index,
2127
+ className: "oui-flex oui-cursor-pointer oui-items-center oui-justify-start oui-gap-1 oui-bg-[#131519] oui-px-2 oui-py-[11px]",
2128
+ onClick: () => connect({
2129
+ walletType: "SOL" /* SOL */,
2130
+ walletAdapter: item.adapter
2131
+ })
2132
+ },
2133
+ /* @__PURE__ */ React19.createElement(RenderWalletIcon, { connector: item.adapter }),
2134
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-base-contrast" }, item.adapter.name)
2135
+ ))
2136
+ ));
2137
+ }
2138
+
2139
+ // src/components/renderNonPrivyWallet/index.tsx
2140
+ function RenderNonPrivyWallet() {
2141
+ const [walletList, setWalletList] = useState([]);
2142
+ const [addWalletList, setAddWalletList] = useState([]);
2143
+ const { storageChain } = useStorageChain();
2144
+ const { connectorWalletType, walletChainTypeConfig } = useWalletConnectorPrivy();
2145
+ const { wallet: walletInWagmi, isConnected: isConnectedEvm } = useWagmiWallet();
2146
+ const { wallet: walletInSolana, isConnected: isConnectedSolana } = useSolanaWallet();
2147
+ const { wallet: walletInAbstract, isConnected: isConnectedAbstract } = useAbstractWallet();
2148
+ const { namespace, switchWallet } = useWallet2();
2149
+ const isActive = (walletType) => {
2150
+ if (namespace === ChainNamespace.evm) {
2151
+ if (walletType === "Abstract" /* ABSTRACT */) {
2152
+ return AbstractChains.has(storageChain?.chainId);
2153
+ }
2154
+ if (walletType === "EVM" /* EVM */) {
2155
+ return !AbstractChains.has(storageChain?.chainId);
2156
+ }
2157
+ return false;
2158
+ }
2159
+ if (namespace === ChainNamespace.solana) {
2160
+ return walletType === "SOL" /* SOL */;
2161
+ }
2162
+ return false;
2163
+ };
2164
+ const currentConnectWalletType = useMemo(() => {
2165
+ const temp = /* @__PURE__ */ new Set();
2166
+ walletList.forEach((wallet) => {
2167
+ temp.add(wallet.type);
2168
+ });
2169
+ return temp;
2170
+ }, [walletList]);
2171
+ useEffect(() => {
2172
+ const tempWalletList = [];
2173
+ const tempAddWallet = [];
2174
+ if (!connectorWalletType.disableWagmi && walletChainTypeConfig.hasEvm) {
2175
+ if (isConnectedEvm) {
2176
+ tempWalletList.push({
2177
+ type: "EVM" /* EVM */,
2178
+ address: walletInWagmi?.accounts[0].address
2179
+ });
2180
+ } else {
2181
+ tempAddWallet.push("EVM" /* EVM */);
2182
+ }
2183
+ }
2184
+ if (!connectorWalletType.disableSolana && walletChainTypeConfig.hasSol) {
2185
+ if (isConnectedSolana) {
2186
+ tempWalletList.push({
2187
+ type: "SOL" /* SOL */,
2188
+ address: walletInSolana?.accounts[0].address
2189
+ });
2190
+ } else {
2191
+ tempAddWallet.push("SOL" /* SOL */);
2192
+ }
2193
+ }
2194
+ if (!connectorWalletType.disableAGW && walletChainTypeConfig.hasAbstract) {
2195
+ if (isConnectedAbstract) {
2196
+ tempWalletList.push({
2197
+ type: "Abstract" /* ABSTRACT */,
2198
+ address: walletInAbstract?.additionalInfo?.AGWAddress
2199
+ });
2200
+ } else {
2201
+ tempAddWallet.push("Abstract" /* ABSTRACT */);
2202
+ }
2203
+ }
2204
+ setWalletList(tempWalletList);
2205
+ setAddWalletList(tempAddWallet);
2206
+ }, [
2207
+ isConnectedEvm,
2208
+ isConnectedSolana,
2209
+ isConnectedAbstract,
2210
+ walletInWagmi,
2211
+ walletInSolana,
2212
+ walletInAbstract,
2213
+ walletChainTypeConfig,
2214
+ connectorWalletType
2215
+ ]);
2216
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, walletList.length && /* @__PURE__ */ React19.createElement(
2217
+ StorageChainNotCurrentWalletType,
2218
+ {
2219
+ currentWalletType: currentConnectWalletType
2220
+ }
2221
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-flex-col oui-gap-5" }, walletList.map((wallet) => /* @__PURE__ */ React19.createElement(
2222
+ WalletCard,
2223
+ {
2224
+ key: wallet.type,
2225
+ type: wallet.type,
2226
+ address: wallet.address,
2227
+ isActive: isActive(wallet.type),
2228
+ onActiveChange: () => {
2229
+ switchWallet(wallet.type);
2230
+ },
2231
+ isPrivy: false,
2232
+ isMulti: walletList.length > 1
2233
+ }
2234
+ ))), /* @__PURE__ */ React19.createElement(RenderAddWallet, { addWalletList }));
2235
+ }
2236
+ function RenderAddWallet({ addWalletList }) {
2237
+ if (addWalletList.length === 0) {
2238
+ return null;
2239
+ }
2240
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "oui-my-5 oui-h-px oui-bg-line" }), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-flex-col oui-gap-5" }, addWalletList.map((wallet, index) => {
2241
+ if (wallet === "EVM" /* EVM */) {
2242
+ return /* @__PURE__ */ React19.createElement(AddEvmWallet, { key: index });
2243
+ }
2244
+ if (wallet === "SOL" /* SOL */) {
2245
+ return /* @__PURE__ */ React19.createElement(AddSolanaWallet, { key: index });
2246
+ }
2247
+ if (wallet === "Abstract" /* ABSTRACT */) {
2248
+ return /* @__PURE__ */ React19.createElement(AddAbstractWallet, { key: index });
2249
+ }
2250
+ })));
2251
+ }
2252
+ function NoWallet() {
2253
+ const { walletChainType } = useWalletConnectorPrivy();
2254
+ const { t } = useTranslation();
2255
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-mt-5 oui-flex oui-w-full oui-flex-col oui-items-center oui-justify-center" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-w-full oui-flex-col oui-items-center oui-justify-center oui-gap-3" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-w-full oui-flex-col oui-items-center oui-justify-center oui-gap-1 oui-rounded-[8px] oui-border oui-border-line-12 oui-px-2 oui-py-[13px] " }, /* @__PURE__ */ React19.createElement(
2256
+ "img",
2257
+ {
2258
+ src: "https://oss.orderly.network/static/sdk/privy/no-wallet.png",
2259
+ className: "oui-size-[64px]"
2260
+ }
2261
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-font-semibold oui-text-base-contrast-36" }, t("connector.privy.noWallet"))), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-start oui-gap-1 oui-rounded-[4px] oui-bg-[rgba(232,136,0,0.15)] oui-px-2 oui-py-[6px] " }, /* @__PURE__ */ React19.createElement(
2262
+ ExclamationFillIcon,
2263
+ {
2264
+ size: 10,
2265
+ className: "oui-mt-1 oui-size-[10px] oui-shrink-0 oui-text-warning-darken"
2266
+ }
2267
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-text-warning-darken" }, t("connector.privy.noWallet.description")))), /* @__PURE__ */ React19.createElement("div", { className: "oui-my-5 oui-h-px oui-w-full oui-bg-line" }), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-w-full oui-flex-col oui-gap-2" }, walletChainType === "EVM_SOL" /* EVM_SOL */ && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(CreateEVMWallet, null), /* @__PURE__ */ React19.createElement(CreateSOLWallet, null)), walletChainType === "onlyEVM" /* onlyEVM */ && /* @__PURE__ */ React19.createElement(CreateEVMWallet, null), walletChainType === "onlySOL" /* onlySOL */ && /* @__PURE__ */ React19.createElement(CreateSOLWallet, null)));
2268
+ }
2269
+ function CreateEVMWallet() {
2270
+ const { t } = useTranslation();
2271
+ const { createEvmWallet } = usePrivyWallet();
2272
+ const [loading, setLoading] = useState(false);
2273
+ const doCreate = () => {
2274
+ if (loading) {
2275
+ return;
2276
+ }
2277
+ setLoading(true);
2278
+ createEvmWallet().then(() => {
2279
+ setLoading(false);
2280
+ }).catch((e) => {
2281
+ setLoading(false);
2282
+ });
2283
+ };
2284
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-w-full oui-rounded-[8px] oui-bg-[#07080A] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-relative oui-flex oui-w-[55px] oui-items-center oui-justify-start" }, /* @__PURE__ */ React19.createElement(
2285
+ "img",
2286
+ {
2287
+ src: "https://oss.orderly.network/static/sdk/chains.png",
2288
+ className: "oui-relative oui-z-0 oui-h-[18px]"
2289
+ }
2290
+ ), /* @__PURE__ */ React19.createElement("div", { className: "oui-absolute oui-right-0 oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]" }, /* @__PURE__ */ React19.createElement(EVMChainPopover, null, /* @__PURE__ */ React19.createElement(
2291
+ MoreIcon,
2292
+ {
2293
+ className: "oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast",
2294
+ style: { zIndex: 1 }
2295
+ }
2296
+ ))))), /* @__PURE__ */ React19.createElement(
2297
+ "div",
2298
+ {
2299
+ className: cn(
2300
+ "oui-cursor-pointer oui-text-2xs oui-font-semibold oui-text-base-contrast-80",
2301
+ loading && "oui-opacity-50"
2302
+ ),
2303
+ onClick: doCreate
2304
+ },
2305
+ t("connector.privy.createEvmWallet")
2306
+ )));
2307
+ }
2308
+ function CreateSOLWallet() {
2309
+ const { t } = useTranslation();
2310
+ const { createSolanaWallet } = usePrivyWallet();
2311
+ const [loading, setLoading] = useState(false);
2312
+ const doCreate = () => {
2313
+ if (loading) {
2314
+ return;
2315
+ }
2316
+ setLoading(true);
2317
+ createSolanaWallet().then(() => {
2318
+ setLoading(false);
2319
+ }).catch((e) => {
2320
+ setLoading(false);
2321
+ });
2322
+ };
2323
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-w-full oui-rounded-[8px] oui-bg-[#07080A] oui-px-2 oui-py-[11px]" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-center oui-gap-1 " }, /* @__PURE__ */ React19.createElement(
2324
+ "img",
2325
+ {
2326
+ src: "https://oss.orderly.network/static/sdk/solana-logo.png",
2327
+ className: "oui-size-[15px]"
2328
+ }
2329
+ ), /* @__PURE__ */ React19.createElement(
2330
+ "div",
2331
+ {
2332
+ className: cn(
2333
+ "oui-cursor-pointer oui-text-2xs oui-font-semibold oui-text-base-contrast-80",
2334
+ loading && "oui-opacity-50"
2335
+ ),
2336
+ onClick: doCreate
2337
+ },
2338
+ t("connector.privy.createSolanaWallet")
2339
+ )));
2340
+ }
2341
+ function RenderPrivyWallet() {
2342
+ const { t } = useTranslation();
2343
+ const {
2344
+ targetWalletType,
2345
+ setTargetWalletType,
2346
+ walletChainTypeConfig,
2347
+ connectorWalletType
2348
+ } = useWalletConnectorPrivy();
2349
+ const { walletEVM, walletSOL, linkedAccount } = usePrivyWallet();
2350
+ const { switchWallet, disconnect } = useWallet2();
2351
+ const { storageChain } = useStorageChain();
2352
+ const [walletList, setWalletList] = useState([]);
2353
+ const [addWallet, setAddWallet] = useState([]);
2354
+ const [loading, setLoading] = useState(true);
2355
+ const isActive = useCallback(
2356
+ (walletType) => {
2357
+ if (storageChain?.namespace === ChainNamespace.evm) {
2358
+ if (walletType === "EVM" /* EVM */) {
2359
+ return !AbstractChains.has(storageChain?.chainId);
2360
+ }
2361
+ return false;
2362
+ }
2363
+ if (storageChain?.namespace === ChainNamespace.solana) {
2364
+ return walletType === "SOL" /* SOL */;
2365
+ }
2366
+ return false;
2367
+ },
2368
+ [storageChain]
2369
+ );
2370
+ const isHaveEvmWallet = useMemo(() => {
2371
+ return walletEVM && walletEVM.accounts.length;
2372
+ }, [walletEVM]);
2373
+ const isHaveSolWallet = useMemo(() => {
2374
+ return walletSOL && walletSOL.accounts.length;
2375
+ }, [walletSOL]);
2376
+ const renderWarning = useCallback(() => {
2377
+ let showWarning = false;
2378
+ if (AbstractChains.has(storageChain?.chainId)) {
2379
+ showWarning = true;
2380
+ }
2381
+ if (targetWalletType === "Abstract" /* ABSTRACT */) {
2382
+ showWarning = true;
2383
+ }
2384
+ if (!showWarning) {
2385
+ return;
2386
+ }
2387
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-mt-5 oui-border-b oui-border-line oui-pb-5" }, /* @__PURE__ */ React19.createElement(
2388
+ "div",
2389
+ {
2390
+ className: cn(
2391
+ "oui-flex oui-items-start oui-justify-center oui-gap-1",
2392
+ "oui-w-full oui-rounded-[8px] oui-px-2 oui-py-[13px]",
2393
+ "oui-bg-warning-darken/10"
2394
+ )
2395
+ },
2396
+ /* @__PURE__ */ React19.createElement(
2397
+ ExclamationFillIcon,
2398
+ {
2399
+ size: 14,
2400
+ className: "oui-mt-[2px] oui-size-[14px] oui-shrink-0 oui-text-warning-darken"
2401
+ }
2402
+ ),
2403
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-text-2xs oui-leading-[18px] oui-text-warning-darken" }, "Abstract Chain access requires Abstract Global Wallet. Privy connection is currently unsupported.")
2404
+ ));
2405
+ }, [targetWalletType]);
2406
+ const renderWallet = useCallback(() => {
2407
+ if (loading) {
2408
+ return;
2409
+ }
2410
+ if (!walletList.length) {
2411
+ return /* @__PURE__ */ React19.createElement(NoWallet, null);
2412
+ }
2413
+ return /* @__PURE__ */ React19.createElement("div", { className: "oui-mt-5 oui-flex oui-flex-col oui-gap-5" }, walletList.map((wallet) => /* @__PURE__ */ React19.createElement(
2414
+ WalletCard,
2415
+ {
2416
+ key: wallet.type,
2417
+ type: wallet.type,
2418
+ address: wallet.address,
2419
+ isActive: isActive(wallet.type),
2420
+ isPrivy: true,
2421
+ isMulti: walletList.length > 1,
2422
+ onActiveChange: () => {
2423
+ switchWallet(wallet.type);
2424
+ }
2425
+ }
2426
+ )), addWallet.map((node, index) => /* @__PURE__ */ React19.createElement("div", { key: index }, /* @__PURE__ */ React19.createElement("div", { className: "oui-my-5 oui-h-px oui-w-full oui-bg-line" }), /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-w-full oui-flex-col oui-gap-2" }, node))));
2427
+ }, [walletList, addWallet, isActive, switchWallet, t, loading]);
2428
+ useEffect(() => {
2429
+ new Promise(
2430
+ (resolve) => setTimeout(() => {
2431
+ setLoading(false);
2432
+ resolve(true);
2433
+ }, 200)
2434
+ );
2435
+ }, []);
2436
+ useEffect(() => {
2437
+ const tempWalletList = [];
2438
+ const tempAddWallet = [];
2439
+ if (!connectorWalletType.disableWagmi && walletChainTypeConfig.hasEvm) {
2440
+ if (isHaveEvmWallet) {
2441
+ tempWalletList.push({
2442
+ type: "EVM" /* EVM */,
2443
+ address: walletEVM.accounts[0].address
2444
+ });
2445
+ } else {
2446
+ tempAddWallet.push(/* @__PURE__ */ React19.createElement(CreateEVMWallet, null));
2447
+ }
2448
+ }
2449
+ if (!connectorWalletType.disableSolana && walletChainTypeConfig.hasSol) {
2450
+ if (isHaveSolWallet) {
2451
+ tempWalletList.push({
2452
+ type: "SOL" /* SOL */,
2453
+ address: walletSOL.accounts[0].address
2454
+ });
2455
+ } else {
2456
+ tempAddWallet.push(/* @__PURE__ */ React19.createElement(CreateSOLWallet, null));
2457
+ }
2458
+ }
2459
+ setWalletList(tempWalletList);
2460
+ setAddWallet(tempAddWallet);
2461
+ }, [
2462
+ connectorWalletType,
2463
+ walletChainTypeConfig,
2464
+ walletEVM,
2465
+ walletSOL,
2466
+ isHaveEvmWallet,
2467
+ isHaveSolWallet
2468
+ ]);
2469
+ useEffect(() => {
2470
+ if (targetWalletType === "Abstract" /* ABSTRACT */) {
2471
+ windowGuard(() => {
2472
+ setTimeout(() => {
2473
+ setTargetWalletType(void 0);
2474
+ }, 5e3);
2475
+ });
2476
+ }
2477
+ }, [targetWalletType, setTargetWalletType]);
2478
+ return /* @__PURE__ */ React19.createElement("div", null, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-between" }, linkedAccount && /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-items-center oui-justify-start oui-gap-2 oui-text-base-contrast" }, /* @__PURE__ */ React19.createElement("div", null, /* @__PURE__ */ React19.createElement(RenderPrivyTypeIcon, { type: linkedAccount.type, size: 24 })), /* @__PURE__ */ React19.createElement("div", { className: "oui-text-xs" }, linkedAccount.address)), /* @__PURE__ */ React19.createElement(
2479
+ "div",
2480
+ {
2481
+ className: "oui-cursor-pointer oui-text-2xs oui-font-semibold oui-text-primary",
2482
+ onClick: () => disconnect("privy" /* PRIVY */)
2483
+ },
2484
+ t("connector.privy.logout")
2485
+ )), renderWarning(), renderWallet());
2486
+ }
2487
+
2488
+ // src/components/connectDrawer.tsx
2489
+ function MyWallet() {
2490
+ const [connectorKey, setConnectorKey] = useLocalStorage(ConnectorKey, "");
2491
+ return /* @__PURE__ */ React19.createElement("div", null, connectorKey === "privy" && /* @__PURE__ */ React19.createElement(RenderPrivyWallet, null), connectorKey !== "privy" && /* @__PURE__ */ React19.createElement(RenderNonPrivyWallet, null));
2492
+ }
2493
+ function ConnectDrawer(props) {
2494
+ const { t } = useTranslation();
2495
+ const { isConnected: isConnectedPrivy } = usePrivyWallet();
2496
+ const { isConnected: isConnectedEvm } = useWagmiWallet();
2497
+ const { isConnected: isConnectedSolana } = useSolanaWallet();
2498
+ const { isConnected: isConnectedAbstract } = useAbstractWallet();
2499
+ const { termsOfUse } = useWalletConnectorPrivy();
2500
+ const [connectorKey] = useLocalStorage(ConnectorKey, "");
2501
+ const isConnected = useMemo(() => {
2502
+ if (connectorKey === "privy" /* PRIVY */ && isConnectedPrivy) {
2503
+ return true;
2504
+ }
2505
+ if (connectorKey !== "privy" /* PRIVY */) {
2506
+ if (isConnectedEvm) {
2507
+ return true;
2508
+ }
2509
+ if (isConnectedSolana) {
2510
+ return true;
2511
+ }
2512
+ if (isConnectedAbstract) {
2513
+ return true;
2514
+ }
2515
+ }
2516
+ return false;
2517
+ }, [
2518
+ isConnectedPrivy,
2519
+ isConnectedEvm,
2520
+ isConnectedSolana,
2521
+ isConnectedAbstract,
2522
+ connectorKey
2523
+ ]);
2524
+ const { isMobile } = useScreen();
2525
+ const showPwaDialog = () => {
2526
+ modal.show(PwaDialog);
2527
+ };
2528
+ const renderHeader = useCallback(() => {
2529
+ return /* @__PURE__ */ React19.createElement(
2530
+ "div",
2531
+ {
2532
+ className: cn(
2533
+ "oui-font-semibold oui-text-base-contrast-80 ",
2534
+ "oui-pb-2 oui-text-[20px]",
2535
+ "md:oui-py-0 md:oui-text-base"
2536
+ )
2537
+ },
2538
+ isConnected ? t("connector.privy.myWallet") : t("connector.connectWallet")
2539
+ );
2540
+ }, [isConnected]);
2541
+ return /* @__PURE__ */ React19.createElement(
2542
+ SimpleSheet,
2543
+ {
2544
+ open: props.open,
2545
+ onOpenChange: props.onChangeOpen,
2546
+ classNames: {
2547
+ body: "oui-h-full oui-py-0 oui-border-none oui-relative",
2548
+ // overlay: "!oui-bg-base-10/60",
2549
+ content: cn(
2550
+ "!oui-p-4 !oui-bg-[#131519] !oui-border !oui-border-solid !oui-border-line-12",
2551
+ isMobile ? "oui-inset-y-0 oui-right-0 oui-w-[280px] oui-rounded-none !oui-bg-[#181C23]" : "!oui-bottom-[30px] oui-right-3 oui-top-[48px] !oui-h-auto oui-w-[300px] oui-overflow-hidden oui-rounded-[16px] !oui-bg-[#131519] "
2552
+ )
2553
+ },
2554
+ contentProps: { side: "right", closeable: false }
2555
+ },
2556
+ !isMobile && /* @__PURE__ */ React19.createElement(
2557
+ "div",
2558
+ {
2559
+ className: "oui-absolute oui-inset-x-[50px] -oui-top-[calc(100vh/2)] oui-z-0 oui-h-screen",
2560
+ style: {
2561
+ 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)",
2562
+ filter: "blur(50px)"
2563
+ }
2564
+ }
2565
+ ),
2566
+ /* @__PURE__ */ React19.createElement("div", { className: "oui-relative oui-z-10 oui-flex oui-h-full oui-flex-col oui-gap-4 md:oui-gap-5" }, /* @__PURE__ */ React19.createElement("div", { className: "oui-flex oui-flex-none oui-items-center oui-justify-between" }, renderHeader(), /* @__PURE__ */ React19.createElement(
2567
+ CloseIcon,
2568
+ {
2569
+ className: "oui-size-5 oui-cursor-pointer oui-text-base-contrast-20 hover:oui-text-base-contrast-80",
2570
+ onClick: () => props.onChangeOpen(false)
2571
+ }
2572
+ )), isConnected ? /* @__PURE__ */ React19.createElement(MyWallet, null) : /* @__PURE__ */ React19.createElement(RenderConnector, null), !isConnected && /* @__PURE__ */ React19.createElement(Flex, { gap: 4, direction: "column" }, isMobile && /* @__PURE__ */ React19.createElement(
2573
+ Flex,
2574
+ {
2575
+ itemAlign: "center",
2576
+ justify: "between",
2577
+ gap: 4,
2578
+ className: "oui-rounded-[8px] oui-px-3 oui-py-2 oui-text-2xs oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.10)_0%,rgba(38,254,254,0.10)_100%)] oui-w-full",
2579
+ onClick: () => showPwaDialog()
2580
+ },
2581
+ /* @__PURE__ */ React19.createElement(Text, { className: "oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)] oui-bg-clip-text oui-text-transparent" }, t("connector.privy.pwa.title")),
2582
+ /* @__PURE__ */ React19.createElement(
2583
+ ArrowRightLinearGradientIcon,
2584
+ {
2585
+ size: 20,
2586
+ className: "oui-flex-shrink-0"
2587
+ }
2588
+ )
2589
+ ), termsOfUse && /* @__PURE__ */ React19.createElement("div", { className: "oui-flex-none oui-text-center oui-text-2xs oui-font-semibold oui-text-base-contrast-80" }, /* @__PURE__ */ React19.createElement(
2590
+ Trans,
2591
+ {
2592
+ i18nKey: "connector.privy.termsOfUse",
2593
+ components: [
2594
+ /* @__PURE__ */ React19.createElement(
2595
+ "a",
2596
+ {
2597
+ key: "termsOfUse",
2598
+ href: termsOfUse,
2599
+ className: "oui-cursor-pointer oui-text-primary oui-underline",
2600
+ target: "_blank",
2601
+ rel: "noreferrer"
2602
+ }
2603
+ )
2604
+ ]
2605
+ }
2606
+ ))))
2607
+ );
2608
+ }
2609
+ var LinkDeviceMobile = (props) => {
2610
+ const [open, setOpen] = useState(false);
2611
+ const { account } = useAccount();
2612
+ const { t } = useTranslation();
2613
+ const onDisconnect = async () => {
2614
+ localStorage.removeItem("orderly_link_device");
2615
+ await account.disconnect();
2616
+ };
2617
+ const showDialog = () => {
2618
+ setOpen(true);
2619
+ };
2620
+ const hideDialog = () => {
2621
+ setOpen(false);
2622
+ };
2623
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
2624
+ SimpleDialog,
2625
+ {
2626
+ open,
2627
+ onOpenChange: setOpen,
2628
+ title: t("common.tips"),
2629
+ size: "xs",
2630
+ actions: {
2631
+ secondary: {
2632
+ label: t("common.cancel"),
2633
+ onClick: hideDialog,
2634
+ size: "md",
2635
+ fullWidth: true
2636
+ },
2637
+ primary: {
2638
+ label: t("connector.disconnect"),
2639
+ onClick: async () => {
2640
+ await onDisconnect();
2641
+ hideDialog();
2642
+ },
2643
+ size: "md",
2644
+ variant: "outlined",
2645
+ color: "danger"
2646
+ }
2647
+ }
2648
+ },
2649
+ /* @__PURE__ */ React19.createElement(Text, { intensity: 54, size: "sm" }, t("linkDevice.scanQRCode.connected.description"))
2650
+ ), /* @__PURE__ */ React19.createElement(Flex, { className: "oui-gap-[6px]", itemAlign: "center", onClick: showDialog }, /* @__PURE__ */ React19.createElement(
2651
+ Flex,
2652
+ {
2653
+ className: "oui-text-base-contrast",
2654
+ intensity: 500,
2655
+ height: 28,
2656
+ r: "md"
2657
+ },
2658
+ /* @__PURE__ */ React19.createElement(DesktopIcon, null),
2659
+ /* @__PURE__ */ React19.createElement(Dot, null),
2660
+ /* @__PURE__ */ React19.createElement(LinkIcon, null),
2661
+ /* @__PURE__ */ React19.createElement(Dot, null),
2662
+ /* @__PURE__ */ React19.createElement(MobileIcon, null)
2663
+ ), props.children));
2664
+ };
2665
+ var Dot = () => {
2666
+ return /* @__PURE__ */ React19.createElement(Flex, { className: "oui-gap-x-[1px] oui-px-[1px]" }, /* @__PURE__ */ React19.createElement(DotIcon, null), /* @__PURE__ */ React19.createElement(DotIcon, null), /* @__PURE__ */ React19.createElement(DotIcon, null));
2667
+ };
2668
+ var DesktopIcon = (props) => /* @__PURE__ */ React19.createElement(
2669
+ "svg",
2670
+ {
2671
+ width: "18",
2672
+ height: "18",
2673
+ viewBox: "0 0 18 18",
2674
+ fill: "currentColor",
2675
+ xmlns: "http://www.w3.org/2000/svg",
2676
+ ...props
2677
+ },
2678
+ /* @__PURE__ */ React19.createElement("path", { d: "M4.5 2.93a2.25 2.25 0 0 0-2.25 2.25v5.25a.75.75 0 0 0-.75.75v1.5c0 1.272.93 2.25 2.25 2.25h10.5c1.318 0 2.25-.978 2.25-2.25v-1.5a.75.75 0 0 0-.75-.75V5.18a2.25 2.25 0 0 0-2.25-2.25zm0 1.5h9a.75.75 0 0 1 .75.75v5.25H3.75V5.18a.75.75 0 0 1 .75-.75M3 11.93h12v.75c0 .46-.277.75-.75.75H3.75c-.474 0-.75-.29-.75-.75z" })
2679
+ );
2680
+ var MobileIcon = (props) => /* @__PURE__ */ React19.createElement(
2681
+ "svg",
2682
+ {
2683
+ width: "18",
2684
+ height: "18",
2685
+ viewBox: "0 0 18 18",
2686
+ fill: "currentColor",
2687
+ xmlns: "http://www.w3.org/2000/svg",
2688
+ ...props
2689
+ },
2690
+ /* @__PURE__ */ React19.createElement("path", { d: "M13.498 3.715a2.25 2.25 0 0 0-2.25-2.25h-4.5a2.25 2.25 0 0 0-2.25 2.25v10.5a2.25 2.25 0 0 0 2.25 2.25h4.5a2.25 2.25 0 0 0 2.25-2.25zm-1.5 0v9.75h-6v-9.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 .75.75m-2.25 11.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0" })
2691
+ );
2692
+ var LinkIcon = (props) => /* @__PURE__ */ React19.createElement(
2693
+ "svg",
2694
+ {
2695
+ width: "12",
2696
+ height: "12",
2697
+ viewBox: "0 0 12 12",
2698
+ fill: "none",
2699
+ xmlns: "http://www.w3.org/2000/svg"
2700
+ },
2701
+ /* @__PURE__ */ React19.createElement(
2702
+ "path",
2703
+ {
2704
+ fillRule: "evenodd",
2705
+ clipRule: "evenodd",
2706
+ d: "M1.007 6a5 5 0 1 1 10 0 5 5 0 0 1-10 0m7.486-2.344A.6.6 0 0 1 8.91 3.5c.15 0 .305.048.418.156a.55.55 0 0 1 0 .798L5.254 8.337a.62.62 0 0 1-.837 0L2.67 6.673a.55.55 0 0 1 0-.798.62.62 0 0 1 .837 0l1.329 1.266z",
2707
+ fill: "url(#a)"
2708
+ }
2709
+ ),
2710
+ /* @__PURE__ */ React19.createElement("defs", null, /* @__PURE__ */ React19.createElement(
2711
+ "linearGradient",
2712
+ {
2713
+ id: "a",
2714
+ x1: "11.007",
2715
+ y1: "5.999",
2716
+ x2: "1.007",
2717
+ y2: "5.999",
2718
+ gradientUnits: "userSpaceOnUse"
2719
+ },
2720
+ /* @__PURE__ */ React19.createElement("stop", { stopColor: "rgb(var(--oui-gradient-brand-end))" }),
2721
+ /* @__PURE__ */ React19.createElement("stop", { offset: "1", stopColor: "rgb(var(--oui-gradient-brand-start))" })
2722
+ ))
2723
+ );
2724
+ var DotIcon = (props) => /* @__PURE__ */ React19.createElement(
2725
+ "svg",
2726
+ {
2727
+ width: "2",
2728
+ height: "2",
2729
+ viewBox: "0 0 2 2",
2730
+ fill: "none",
2731
+ xmlns: "http://www.w3.org/2000/svg"
2732
+ },
2733
+ /* @__PURE__ */ React19.createElement(
2734
+ "path",
2735
+ {
2736
+ d: "M.667.334a.667.667 0 1 1 0 1.333.667.667 0 0 1 0-1.333",
2737
+ fill: "url(#a)"
2738
+ }
2739
+ ),
2740
+ /* @__PURE__ */ React19.createElement("defs", null, /* @__PURE__ */ React19.createElement(
2741
+ "linearGradient",
2742
+ {
2743
+ id: "a",
2744
+ x1: "1.333",
2745
+ y1: "1.001",
2746
+ x2: "0",
2747
+ y2: "1.001",
2748
+ gradientUnits: "userSpaceOnUse"
2749
+ },
2750
+ /* @__PURE__ */ React19.createElement("stop", { stopColor: "rgb(var(--oui-gradient-brand-end))" }),
2751
+ /* @__PURE__ */ React19.createElement("stop", { offset: "1", stopColor: "rgb(var(--oui-gradient-brand-start))" })
2752
+ ))
2753
+ );
2754
+
2755
+ // src/components/userCenter.tsx
2756
+ function UserCenter(props) {
2757
+ const { accountState: state } = props;
2758
+ return /* @__PURE__ */ React19.createElement(RenderUserCenter, { state, disabledConnect: props.disabledConnect });
2759
+ }
2760
+ var MwebUserCenter = (props) => {
2761
+ const { state } = props;
2762
+ return /* @__PURE__ */ React19.createElement(RenderUserCenter, { state, disabledConnect: props.disabledConnect });
2763
+ };
2764
+ var RenderUserCenter = (props) => {
2765
+ const { state } = props;
2766
+ const { t } = useTranslation();
2767
+ const { isMobile } = useScreen();
2768
+ const { connect, wallet } = useWalletConnector();
2769
+ const { linkedAccount } = usePrivyWallet();
2770
+ const { state: accountState, account } = useAccount();
2771
+ const { connectedChain } = useWalletConnector();
2772
+ const disabled = state.validating || props.disabledConnect;
2773
+ const userAddress = useMemo(() => {
2774
+ if (connectedChain?.id && ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id))) {
2775
+ return account.getAdditionalInfo()?.AGWAddress;
2776
+ }
2777
+ return account.address;
2778
+ }, [account, connectedChain, accountState]);
2779
+ if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {
2780
+ return /* @__PURE__ */ React19.createElement(Flex, { className: "oui-bg-base-5 oui-px-[7px] oui-rounded-[6px] oui-gap-[6px]" }, /* @__PURE__ */ React19.createElement(LinkDeviceMobile, null, /* @__PURE__ */ React19.createElement(
2781
+ Text.formatted,
2782
+ {
2783
+ rule: "address",
2784
+ className: "oui-text-base-contrast oui-text-xs"
2785
+ },
2786
+ formatAddress(userAddress)
2787
+ )));
2788
+ }
2789
+ if (state.status <= AccountStatusEnum.NotConnected || disabled) {
2790
+ return /* @__PURE__ */ React19.createElement(
2791
+ Button,
2792
+ {
2793
+ "data-testid": "oui-testid-nav-bar-connectWallet-btn",
2794
+ size: "md",
2795
+ variant: disabled ? void 0 : "gradient",
2796
+ angle: 45,
2797
+ className: cn(
2798
+ "wallet-connect-button",
2799
+ isMobile && "oui-font-semibold oui-px-2"
2800
+ ),
2801
+ loading: state.validating,
2802
+ disabled,
2803
+ onClick: () => {
2804
+ connect().then((r) => {
2805
+ }).catch((e) => void 0);
2806
+ }
2807
+ },
2808
+ isMobile ? t("connector.connect") : t("connector.connectWallet")
2809
+ );
2810
+ }
2811
+ if (!wallet) {
2812
+ return;
2813
+ }
2814
+ if (isMobile) {
2815
+ return /* @__PURE__ */ React19.createElement(
2816
+ AuthGuard,
2817
+ {
2818
+ buttonProps: {
2819
+ size: "md"
2820
+ }
2821
+ },
2822
+ /* @__PURE__ */ React19.createElement("div", { onClick: () => connect() }, /* @__PURE__ */ React19.createElement(
2823
+ Button,
2824
+ {
2825
+ size: "md",
2826
+ variant: "gradient",
2827
+ angle: 45,
2828
+ "data-testid": "oui-testid-nav-bar-address-btn",
2829
+ className: "oui-px-2 oui-flex oui-items-center oui-justify-center oui-gap-1"
2830
+ },
2831
+ linkedAccount && /* @__PURE__ */ React19.createElement(
2832
+ RenderPrivyTypeIcon,
2833
+ {
2834
+ type: linkedAccount.type,
2835
+ size: 14,
2836
+ black: true
2837
+ }
2838
+ ),
2839
+ /* @__PURE__ */ React19.createElement(
2840
+ Text.formatted,
2841
+ {
2842
+ rule: "address",
2843
+ className: "oui-text-[rgba(0,0,0,.88)] oui-font-semibold"
2844
+ },
2845
+ formatAddress(userAddress)
2846
+ )
2847
+ ))
2848
+ );
2849
+ }
2850
+ return /* @__PURE__ */ React19.createElement("div", { onClick: () => connect() }, /* @__PURE__ */ React19.createElement(
2851
+ Button,
2852
+ {
2853
+ size: "md",
2854
+ variant: "gradient",
2855
+ angle: 45,
2856
+ "data-testid": "oui-testid-nav-bar-address-btn",
2857
+ className: "oui-flex oui-items-center oui-justify-center oui-gap-2"
2858
+ },
2859
+ linkedAccount && /* @__PURE__ */ React19.createElement(
2860
+ RenderPrivyTypeIcon,
2861
+ {
2862
+ type: linkedAccount.type,
2863
+ size: 18,
2864
+ black: true
2865
+ }
2866
+ ),
2867
+ /* @__PURE__ */ React19.createElement(Text.formatted, { rule: "address", className: "oui-text-[rgba(0,0,0,.88)]" }, formatAddress(userAddress))
2868
+ ));
2869
+ };
2870
+ installExtension({
2871
+ name: "account-menu-privy",
2872
+ scope: ["*"],
2873
+ positions: [ExtensionPositionEnum.AccountMenu]
2874
+ })((props) => {
2875
+ return /* @__PURE__ */ React19.createElement(UserCenter, { ...props });
2876
+ });
2877
+ installExtension({
2878
+ name: "mobile-account-menu-privy",
2879
+ scope: ["*"],
2880
+ positions: [ExtensionPositionEnum.MobileAccountMenu]
2881
+ })((props) => {
2882
+ return /* @__PURE__ */ React19.createElement(MwebUserCenter, { ...props });
2883
+ });
2884
+
2885
+ // src/main.tsx
2886
+ var Main = (props) => {
2887
+ const { headerProps, children } = props;
2888
+ const { wallet, connectedChain, setChain, namespace, onDisconnect } = useWallet2();
2889
+ const { openConnectDrawer, setOpenConnectDrawer, setTargetWalletType } = useWalletConnectorPrivy();
2890
+ const connect = (options) => {
2891
+ if (options && options.autoSelect) {
2892
+ return Promise.resolve([]);
2893
+ }
2894
+ setTargetWalletType(void 0);
2895
+ return new Promise((resolve) => {
2896
+ setOpenConnectDrawer(true);
2897
+ resolve([]);
2898
+ });
2899
+ };
2900
+ const memoizedValue = useMemo(
2901
+ () => ({
2902
+ connect,
2903
+ disconnect: onDisconnect,
2904
+ connecting: false,
2905
+ wallet,
2906
+ setChain,
2907
+ connectedChain,
2908
+ namespace,
2909
+ chains: [],
2910
+ settingChain: false
2911
+ }),
2912
+ [connect, setChain, onDisconnect, connectedChain, wallet, namespace]
2913
+ );
2914
+ return /* @__PURE__ */ React19.createElement(WalletConnectorContext.Provider, { value: memoizedValue }, /* @__PURE__ */ React19.createElement(
2915
+ ConnectDrawer,
2916
+ {
2917
+ open: openConnectDrawer,
2918
+ onChangeOpen: setOpenConnectDrawer,
2919
+ headerProps
2920
+ }
2921
+ ), children);
2922
+ };
2923
+ var InitAbstractProvider = (props) => {
2924
+ const { network } = useWalletConnectorPrivy();
2925
+ const chain = useMemo(() => {
2926
+ if (network === "mainnet" /* mainnet */) {
2927
+ return abstract;
2928
+ }
2929
+ return abstractTestnet;
2930
+ }, [network]);
2931
+ return /* @__PURE__ */ React19.createElement(AbstractWalletProvider$1, { chain }, props.children);
2932
+ };
2933
+
2934
+ // src/providers/abstractWallet/index.tsx
2935
+ function AbstractWallet({ children }) {
2936
+ return /* @__PURE__ */ React19.createElement(InitAbstractProvider, null, /* @__PURE__ */ React19.createElement(AbstractWalletProvider, null, children));
2937
+ }
2938
+ function InitPrivyProvider({
2939
+ privyConfig,
2940
+ initChains,
2941
+ children
2942
+ }) {
2943
+ if (!privyConfig) {
2944
+ return children;
2945
+ }
2946
+ const config = useMemo(() => {
2947
+ const chains = initChains;
2948
+ return {
2949
+ loginMethods: privyConfig.config?.loginMethods || [
2950
+ "email",
2951
+ "google",
2952
+ "twitter"
2953
+ ],
2954
+ appearance: {
2955
+ ...privyConfig.config?.appearance,
2956
+ walletChainType: "ethereum-and-solana"
2957
+ },
2958
+ embeddedWallets: {
2959
+ ethereum: {
2960
+ createOnLogin: "all-users"
2961
+ },
2962
+ solana: {
2963
+ createOnLogin: "all-users"
2964
+ }
2965
+ },
2966
+ externalWallets: {
2967
+ walletConnect: {
2968
+ enabled: false
2969
+ }
2970
+ },
2971
+ defaultChain: chains[0],
2972
+ supportedChains: chains
2973
+ };
2974
+ }, [initChains, privyConfig]);
2975
+ if (!initChains.length) {
2976
+ return;
2977
+ }
2978
+ return /* @__PURE__ */ React19.createElement(PrivyProvider, { appId: privyConfig.appid, config }, children);
2979
+ }
2980
+
2981
+ // src/providers/privy/index.tsx
2982
+ function PrivyWallet(props) {
2983
+ return /* @__PURE__ */ React19.createElement(
2984
+ InitPrivyProvider,
2985
+ {
2986
+ privyConfig: props.privyConfig,
2987
+ initChains: props.initChains
2988
+ },
2989
+ /* @__PURE__ */ React19.createElement(PrivyWalletProvider, null, props.children)
2990
+ );
2991
+ }
2992
+ function InitSolanaProvider({
2993
+ mainnetRpc,
2994
+ devnetRpc,
2995
+ wallets: walletsProp,
2996
+ onError,
2997
+ children
2998
+ }) {
2999
+ const { network, setSolanaInfo, connectorWalletType } = useWalletConnectorPrivy();
3000
+ if (connectorWalletType.disableSolana) {
3001
+ return children;
3002
+ }
3003
+ const wallets = useMemo(() => {
3004
+ return walletsProp ?? [new PhantomWalletAdapter()];
3005
+ }, [walletsProp]);
3006
+ useEffect(() => {
3007
+ let rpcUrl = null;
3008
+ if (network === "mainnet") {
3009
+ rpcUrl = mainnetRpc ?? null;
3010
+ } else {
3011
+ rpcUrl = devnetRpc ?? null;
3012
+ }
3013
+ setSolanaInfo({
3014
+ rpcUrl,
3015
+ network: network === "mainnet" ? WalletAdapterNetwork.Mainnet : WalletAdapterNetwork.Devnet
3016
+ });
3017
+ }, [network, mainnetRpc, devnetRpc, setSolanaInfo]);
3018
+ return /* @__PURE__ */ React19.createElement(WalletProvider, { wallets, onError, autoConnect: true }, children);
3019
+ }
3020
+
3021
+ // src/providers/solana/index.tsx
3022
+ function SolanaWallet(props) {
3023
+ return /* @__PURE__ */ React19.createElement(
3024
+ InitSolanaProvider,
3025
+ {
3026
+ ...props.solanaConfig ?? { wallets: [], onError: () => {
3027
+ } }
3028
+ },
3029
+ /* @__PURE__ */ React19.createElement(SolanaWalletProvider, null, props.children)
3030
+ );
3031
+ }
3032
+ function InitWagmiProvider({
3033
+ children,
3034
+ initialState,
3035
+ initChains,
3036
+ wagmiConfig
3037
+ }) {
3038
+ const { connectorWalletType } = useWalletConnectorPrivy();
3039
+ if (connectorWalletType.disableWagmi) {
3040
+ return children;
3041
+ }
3042
+ const [queryClient] = useState(() => new QueryClient());
3043
+ const [config] = useState(
3044
+ () => createConfig({
3045
+ chains: initChains && initChains.length ? initChains : [mainnet],
3046
+ multiInjectedProviderDiscovery: true,
3047
+ storage: wagmiConfig.storage ? wagmiConfig.storage : createStorage({
3048
+ storage: localStorage,
3049
+ key: "wagmi"
3050
+ }),
3051
+ connectors: wagmiConfig.connectors ? wagmiConfig.connectors : [injected()],
3052
+ transports: Object.fromEntries(
3053
+ initChains.map((chain) => [chain.id, http()])
3054
+ )
3055
+ })
3056
+ );
3057
+ return /* @__PURE__ */ React19.createElement(WagmiProvider, { config, initialState }, /* @__PURE__ */ React19.createElement(QueryClientProvider, { client: queryClient }, children));
3058
+ }
3059
+
3060
+ // src/providers/wagmi/index.tsx
3061
+ var WagmiWallet = (props) => {
3062
+ return /* @__PURE__ */ React19.createElement(
3063
+ InitWagmiProvider,
3064
+ {
3065
+ initChains: props.initChains,
3066
+ wagmiConfig: props.wagmiConfig ?? EMPTY_OBJECT
3067
+ },
3068
+ /* @__PURE__ */ React19.createElement(WagmiWalletProvider, null, props.children)
3069
+ );
3070
+ };
3071
+
3072
+ // src/provider.tsx
3073
+ var commonSwrOpts = {
3074
+ revalidateIfStale: false,
3075
+ revalidateOnFocus: false,
3076
+ revalidateOnReconnect: false,
3077
+ // If false, undefined data gets cached against the key.
3078
+ revalidateOnMount: true,
3079
+ // don't duplicate a request with the same key for 1hr
3080
+ dedupingInterval: 36e5
3081
+ };
3082
+ TesntTokenFallback([
3083
+ ArbitrumSepoliaTokenInfo,
3084
+ SolanaDevnetTokenInfo
3085
+ ]);
3086
+ var testnetChainFallback = [ArbitrumSepoliaChainInfo, SolanaDevnetChainInfo];
3087
+ var formatSwapChainInfo = (data = {}) => {
3088
+ return Object.keys(data).map((key) => {
3089
+ const chain = data[key];
3090
+ const { network_infos, token_infos } = chain;
3091
+ const nativeToken = token_infos.find(
3092
+ (item) => item.symbol === network_infos.currency_symbol
3093
+ );
3094
+ if (nativeToken) {
3095
+ network_infos.currency_decimal = nativeToken.decimals;
3096
+ } else {
3097
+ network_infos.currency_decimal = 18;
3098
+ }
3099
+ return network_infos;
3100
+ });
3101
+ };
3102
+ var processChainInfo = (chainInfo) => chainInfo.map(
3103
+ (row) => defineChain({
3104
+ id: Number(row.chain_id),
3105
+ name: row.name,
3106
+ nativeCurrency: {
3107
+ decimals: row.currency_decimal,
3108
+ name: "Ether",
3109
+ symbol: row.currency_symbol
3110
+ },
3111
+ rpcUrls: {
3112
+ default: {
3113
+ http: [row.public_rpc_url]
3114
+ }
3115
+ },
3116
+ blockExplorers: {
3117
+ default: { name: "Explorer", url: row.explorer_base_url }
3118
+ }
3119
+ })
3120
+ ) || [];
3121
+ var WalletConnectorPrivyContext = createContext({
3122
+ initChains: [mainnet],
3123
+ mainnetChains: [],
3124
+ testnetChains: [],
3125
+ getChainsByNetwork: () => [],
3126
+ openConnectDrawer: false,
3127
+ setOpenConnectDrawer: () => {
3128
+ },
3129
+ targetWalletType: void 0,
3130
+ setTargetWalletType: () => {
3131
+ },
3132
+ network: "mainnet" /* mainnet */,
3133
+ setNetwork: () => {
3134
+ },
3135
+ solanaInfo: null,
3136
+ setSolanaInfo: () => {
3137
+ },
3138
+ termsOfUse: "",
3139
+ walletChainType: "EVM_SOL" /* EVM_SOL */,
3140
+ walletChainTypeConfig: {
3141
+ hasEvm: true,
3142
+ hasSol: true,
3143
+ hasAbstract: false
3144
+ },
3145
+ connectorWalletType: {
3146
+ disableWagmi: false,
3147
+ disablePrivy: false,
3148
+ disableSolana: false,
3149
+ disableAGW: false
3150
+ },
3151
+ privyConfig: {
3152
+ loginMethods: []
3153
+ }
3154
+ });
3155
+ var useWalletConnectorPrivy = () => useContext(WalletConnectorPrivyContext);
3156
+ var defaultPrivyLoginMethod = [
3157
+ "email",
3158
+ "google",
3159
+ "twitter"
3160
+ ];
3161
+ function WalletConnectorPrivyProvider(props) {
3162
+ const [walletChainType, setWalletChainType] = useState(
3163
+ "EVM_SOL" /* EVM_SOL */
3164
+ );
3165
+ const [termsOfUse] = useState(props.termsOfUse || "");
3166
+ const [network, setNetwork] = useState(props.network);
3167
+ const [initChains, setInitChains] = useState([]);
3168
+ const [mainnetChains, setMainnetChains] = useState([]);
3169
+ const [testnetChains, setTestnetChains] = useState([]);
3170
+ const initRef = useRef(false);
3171
+ const [openConnectDrawer, setOpenConnectDrawer] = useState(false);
3172
+ const [targetWalletType, setTargetWalletType] = useState();
3173
+ const [privyConfig, setPrivyConfig] = useState({
3174
+ loginMethods: props.privyConfig ? props.privyConfig?.config?.loginMethods ?? defaultPrivyLoginMethod : defaultPrivyLoginMethod
3175
+ });
3176
+ const [solanaInfo, setSolanaInfo] = useState(null);
3177
+ const connectorWalletType = useMemo(() => {
3178
+ const type = {
3179
+ disableWagmi: false,
3180
+ disablePrivy: false,
3181
+ disableSolana: false,
3182
+ disableAGW: false
3183
+ };
3184
+ if (!props.privyConfig) {
3185
+ type.disablePrivy = true;
3186
+ }
3187
+ if (!props.wagmiConfig) {
3188
+ type.disableWagmi = true;
3189
+ }
3190
+ if (!props.solanaConfig) {
3191
+ type.disableSolana = true;
3192
+ }
3193
+ if (!props.abstractConfig) {
3194
+ type.disableAGW = true;
3195
+ }
3196
+ return type;
3197
+ }, [props.privyConfig, props.wagmiConfig, props.solanaConfig]);
3198
+ const walletChainTypeConfig = useMemo(() => {
3199
+ const chainTypeObj = {
3200
+ hasEvm: false,
3201
+ hasSol: false,
3202
+ hasAbstract: false
3203
+ };
3204
+ initChains.forEach((chain) => {
3205
+ if (SolanaChains$1.has(chain.id)) {
3206
+ chainTypeObj.hasSol = true;
3207
+ } else if (AbstractChains.has(chain.id)) {
3208
+ chainTypeObj.hasAbstract = true;
3209
+ } else {
3210
+ chainTypeObj.hasEvm = true;
3211
+ }
3212
+ });
3213
+ return chainTypeObj;
3214
+ }, [initChains]);
3215
+ const { data: swapChainInfoRes, isLoading: swapLoading } = useSWR(
3216
+ !props.customChains && props.enableSwapDeposit ? "https://fi-api.woo.org/swap_support" : null,
3217
+ fetcher,
3218
+ commonSwrOpts
3219
+ );
3220
+ const { data: mainnetChainInfos } = useSWR(
3221
+ !props.customChains ? "https://api.orderly.org/v1/public/chain_info" : null,
3222
+ fetcher,
3223
+ commonSwrOpts
3224
+ );
3225
+ const { data: testChainInfos } = useSWR(
3226
+ !props.customChains ? "https://testnet-api.orderly.org/v1/public/chain_info" : null,
3227
+ fetcher,
3228
+ {
3229
+ ...commonSwrOpts,
3230
+ fallbackData: testnetChainFallback
3231
+ }
3232
+ );
3233
+ const handleCustomerChains = () => {
3234
+ const testChains = processChainInfo(
3235
+ props.customChains.testnet?.map((item) => item.network_infos)
3236
+ );
3237
+ const mainnetChains2 = processChainInfo(
3238
+ props.customChains.mainnet?.map((item) => item.network_infos)
3239
+ );
3240
+ setTestnetChains(testChains);
3241
+ setMainnetChains(mainnetChains2);
3242
+ setInitChains([...testChains, ...mainnetChains2]);
3243
+ const chainTypeObj = {
3244
+ hasEvm: false,
3245
+ hasSol: false,
3246
+ hasAbstract: false
3247
+ };
3248
+ [...testChains, ...mainnetChains2].forEach((chain) => {
3249
+ if (SolanaChains$1.has(chain.id)) {
3250
+ chainTypeObj.hasSol = true;
3251
+ } else if (AbstractChains.has(chain.id)) {
3252
+ chainTypeObj.hasAbstract = true;
3253
+ } else {
3254
+ chainTypeObj.hasEvm = true;
3255
+ }
3256
+ });
3257
+ initRef.current = true;
3258
+ if (chainTypeObj.hasEvm && chainTypeObj.hasSol) {
3259
+ setWalletChainType("EVM_SOL" /* EVM_SOL */);
3260
+ } else if (chainTypeObj.hasEvm) {
3261
+ setWalletChainType("onlyEVM" /* onlyEVM */);
3262
+ } else if (chainTypeObj.hasSol) {
3263
+ setWalletChainType("onlySOL" /* onlySOL */);
3264
+ }
3265
+ };
3266
+ if (connectorWalletType.disablePrivy && connectorWalletType.disableWagmi && connectorWalletType.disableSolana && connectorWalletType.disableAGW) {
3267
+ throw new Error(
3268
+ "Privy, Wagmi, Solana, Abstract are all disabled. Please enable at least one of them."
3269
+ );
3270
+ }
3271
+ const getChainsByNetwork = (network2) => {
3272
+ return network2 === "mainnet" ? mainnetChains : testnetChains;
3273
+ };
3274
+ const value = useMemo(
3275
+ () => ({
3276
+ initChains,
3277
+ mainnetChains,
3278
+ testnetChains,
3279
+ getChainsByNetwork,
3280
+ openConnectDrawer,
3281
+ setOpenConnectDrawer,
3282
+ targetWalletType,
3283
+ setTargetWalletType,
3284
+ network,
3285
+ setNetwork,
3286
+ solanaInfo,
3287
+ setSolanaInfo,
3288
+ termsOfUse,
3289
+ walletChainType,
3290
+ connectorWalletType,
3291
+ walletChainTypeConfig,
3292
+ privyConfig
3293
+ }),
3294
+ [
3295
+ initChains,
3296
+ mainnetChains,
3297
+ testnetChains,
3298
+ getChainsByNetwork,
3299
+ openConnectDrawer,
3300
+ setOpenConnectDrawer,
3301
+ targetWalletType,
3302
+ setTargetWalletType,
3303
+ network,
3304
+ setNetwork,
3305
+ solanaInfo,
3306
+ setSolanaInfo,
3307
+ termsOfUse,
3308
+ walletChainType,
3309
+ connectorWalletType,
3310
+ walletChainTypeConfig,
3311
+ privyConfig
3312
+ ]
3313
+ );
3314
+ useEffect(() => {
3315
+ if (props.customChains) {
3316
+ return;
3317
+ }
3318
+ if (!mainnetChainInfos || !testChainInfos || swapLoading) {
3319
+ return;
3320
+ }
3321
+ let testChainsList = [];
3322
+ let mainnetChainsList = [];
3323
+ try {
3324
+ testChainsList = testChainInfos;
3325
+ mainnetChainsList = mainnetChainInfos;
3326
+ const testChains = processChainInfo(testChainsList);
3327
+ const mainnetChains2 = processChainInfo(mainnetChainsList);
3328
+ const swapChains = processChainInfo(
3329
+ formatSwapChainInfo(swapChainInfoRes?.data || {})
3330
+ );
3331
+ const chains = [...testChains, ...mainnetChains2];
3332
+ const filterSwapChains = swapChains.filter(
3333
+ (item) => !chains.some((chain) => chain.id === item.id)
3334
+ );
3335
+ setTestnetChains(testChains);
3336
+ setMainnetChains(mainnetChains2);
3337
+ setInitChains([...chains, ...filterSwapChains]);
3338
+ } catch (error) {
3339
+ testChainsList = [ArbitrumSepoliaChainInfo, SolanaDevnetChainInfo];
3340
+ mainnetChainsList = [];
3341
+ }
3342
+ initRef.current = true;
3343
+ }, [
3344
+ props.customChains,
3345
+ mainnetChainInfos,
3346
+ testChainInfos,
3347
+ swapChainInfoRes,
3348
+ swapLoading
3349
+ ]);
3350
+ useEffect(() => {
3351
+ if (props.customChains) {
3352
+ handleCustomerChains();
3353
+ }
3354
+ }, [props.customChains]);
3355
+ if (!initRef.current) {
3356
+ return null;
3357
+ }
3358
+ return /* @__PURE__ */ React19.createElement(WalletConnectorPrivyContext.Provider, { value }, /* @__PURE__ */ React19.createElement(TooltipProvider, { delayDuration: 300 }, /* @__PURE__ */ React19.createElement(PrivyWallet, { privyConfig: props.privyConfig, initChains }, /* @__PURE__ */ React19.createElement(WagmiWallet, { wagmiConfig: props.wagmiConfig, initChains }, /* @__PURE__ */ React19.createElement(SolanaWallet, { solanaConfig: props.solanaConfig }, /* @__PURE__ */ React19.createElement(AbstractWallet, null, /* @__PURE__ */ React19.createElement(Main, { headerProps: props.headerProps }, props.children)))))));
3359
+ }
3360
+ var viem = viemExport;
3361
+ var wagmiConnectors = WagmiConnectorsExport;
3362
+ var wagmi = WagmiExport;
3363
+
3364
+ export { AbstractChainsMap, MwebUserCenter, Network, SolanaChains, SolanaChainsMap, UserCenter, WalletChainTypeEnum, WalletConnectType, WalletConnectorPrivyProvider, WalletType, viem, wagmi, wagmiConnectors };
3365
+ //# sourceMappingURL=out.js.map
3366
+ //# sourceMappingURL=index.mjs.map