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