@gluwa/connect-kit 0.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,1820 @@
1
+ import React from "react";
2
+ import {
3
+ getAddress
4
+ } from "./chunk-6KUZ225H.js";
5
+ import "./chunk-EVEWD66F.js";
6
+ import {
7
+ __name
8
+ } from "./chunk-U2IU7TQD.js";
9
+
10
+ // src/ConnectModal.tsx
11
+ import { useState, useEffect as useEffect4, useCallback as useCallback2, useRef as useRef2, useMemo as useMemo2 } from "react";
12
+
13
+ // src/ConnectModal.scss
14
+ var css = `.ck-root {
15
+ position: fixed;
16
+ inset: 0;
17
+ z-index: 9999;
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ }
22
+
23
+ .ck-overlay {
24
+ position: absolute;
25
+ inset: 0;
26
+ background: rgba(0, 0, 0, 0.6);
27
+ }
28
+
29
+ .ck-modal {
30
+ position: relative;
31
+ display: flex;
32
+ width: 1120px;
33
+ height: 620px;
34
+ border-radius: 16px;
35
+ overflow: hidden;
36
+ background: #1a1a1a;
37
+ color: #fff;
38
+ }
39
+
40
+ .ck-pane {
41
+ display: flex;
42
+ flex-direction: column;
43
+ padding: 24px;
44
+ width: 560px;
45
+ flex-shrink: 0;
46
+ box-sizing: border-box;
47
+ }
48
+ .ck-pane--selector {
49
+ border-right: 1px solid rgba(255, 255, 255, 0.08);
50
+ }
51
+ .ck-pane--detail {
52
+ padding-inline: 20px;
53
+ overflow: hidden;
54
+ min-height: 0;
55
+ }
56
+
57
+ .ck-pane__header {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 8px;
61
+ margin-bottom: 20px;
62
+ }
63
+
64
+ .ck-pane__title {
65
+ flex: 1;
66
+ font-size: 16px;
67
+ font-weight: 600;
68
+ margin: 0;
69
+ }
70
+
71
+ .ck-pane__body {
72
+ flex: 1;
73
+ display: flex;
74
+ flex-direction: column;
75
+ min-height: 0;
76
+ overflow: hidden;
77
+ }
78
+
79
+ .ck-pane__footer {
80
+ margin-top: auto;
81
+ padding-top: 16px;
82
+ text-align: center;
83
+ }
84
+
85
+ .ck-btn-close,
86
+ .ck-btn-back {
87
+ position: relative;
88
+ width: 28px;
89
+ height: 28px;
90
+ background: none;
91
+ border: none;
92
+ cursor: pointer;
93
+ padding: 0;
94
+ border-radius: 50%;
95
+ flex-shrink: 0;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ }
100
+ .ck-btn-close:hover,
101
+ .ck-btn-back:hover {
102
+ background: rgba(255, 255, 255, 0.08);
103
+ }
104
+
105
+ .ck-btn-close::before, .ck-btn-close::after {
106
+ content: "";
107
+ position: absolute;
108
+ width: 14px;
109
+ height: 2px;
110
+ background: rgba(255, 255, 255, 0.7);
111
+ border-radius: 1px;
112
+ }
113
+ .ck-btn-close::before {
114
+ transform: rotate(45deg);
115
+ }
116
+ .ck-btn-close::after {
117
+ transform: rotate(-45deg);
118
+ }
119
+
120
+ .ck-btn-back::before {
121
+ content: "";
122
+ position: absolute;
123
+ width: 8px;
124
+ height: 8px;
125
+ border-left: 2px solid rgba(255, 255, 255, 0.7);
126
+ border-bottom: 2px solid rgba(255, 255, 255, 0.7);
127
+ transform: rotate(45deg) translate(1px, -1px);
128
+ border-radius: 1px;
129
+ }
130
+
131
+ .ck-btn-primary {
132
+ display: inline-flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ padding: 8px 16px;
136
+ border-radius: 8px;
137
+ font-size: 14px;
138
+ font-weight: 600;
139
+ text-decoration: none;
140
+ cursor: pointer;
141
+ white-space: nowrap;
142
+ color: #fff;
143
+ background: rgba(255, 255, 255, 0.15);
144
+ border: none;
145
+ }
146
+ .ck-btn-primary:hover {
147
+ background: rgba(255, 255, 255, 0.22);
148
+ }
149
+
150
+ .ck-connector-list {
151
+ display: flex;
152
+ flex-direction: column;
153
+ gap: 8px;
154
+ }
155
+
156
+ .ck-connector-item {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: 12px;
160
+ width: 100%;
161
+ padding: 12px 16px;
162
+ border: none;
163
+ border-radius: 12px;
164
+ cursor: pointer;
165
+ text-align: left;
166
+ color: #fff;
167
+ background: rgba(255, 255, 255, 0.05);
168
+ transition: background 0.15s;
169
+ }
170
+ .ck-connector-item:hover:not(:disabled) {
171
+ background: rgba(255, 255, 255, 0.08);
172
+ }
173
+ .ck-connector-item.is-active {
174
+ background: #3b82f6;
175
+ }
176
+ .ck-connector-item:disabled {
177
+ opacity: 0.5;
178
+ cursor: not-allowed;
179
+ }
180
+
181
+ .ck-connector-item__icon {
182
+ width: 32px;
183
+ height: 32px;
184
+ border-radius: 8px;
185
+ flex-shrink: 0;
186
+ background: rgba(255, 255, 255, 0.1);
187
+ display: block;
188
+ object-fit: cover;
189
+ }
190
+ .ck-connector-item__icon[src] {
191
+ background: none;
192
+ }
193
+
194
+ .ck-connector-item__label {
195
+ flex: 1;
196
+ font-size: 14px;
197
+ font-weight: 500;
198
+ }
199
+
200
+ .ck-connector-item__badge {
201
+ font-size: 11px;
202
+ font-weight: 600;
203
+ padding: 2px 6px;
204
+ border-radius: 4px;
205
+ background: rgba(255, 255, 255, 0.15);
206
+ color: rgba(255, 255, 255, 0.8);
207
+ }
208
+
209
+ .ck-divider {
210
+ display: flex;
211
+ align-items: center;
212
+ gap: 8px;
213
+ color: rgba(255, 255, 255, 0.3);
214
+ font-size: 12px;
215
+ margin: 4px 0;
216
+ }
217
+ .ck-divider::before, .ck-divider::after {
218
+ content: "";
219
+ flex: 1;
220
+ height: 1px;
221
+ background: rgba(255, 255, 255, 0.1);
222
+ }
223
+
224
+ .ck-link-no-wallet {
225
+ font-size: 13px;
226
+ text-decoration: none;
227
+ color: rgba(255, 255, 255, 0.5);
228
+ }
229
+
230
+ .ck-view {
231
+ display: flex;
232
+ flex-direction: column;
233
+ align-items: center;
234
+ flex: 1;
235
+ }
236
+ .ck-view--idle {
237
+ justify-content: center;
238
+ text-align: center;
239
+ gap: 12px;
240
+ }
241
+ .ck-view--qr {
242
+ gap: 16px;
243
+ }
244
+ .ck-view--extension {
245
+ justify-content: center;
246
+ align-items: center;
247
+ gap: 12px;
248
+ text-align: center;
249
+ }
250
+ .ck-view--wallet-list {
251
+ align-items: stretch;
252
+ gap: 12px;
253
+ height: 100%;
254
+ overflow: hidden;
255
+ width: 100%;
256
+ box-sizing: border-box;
257
+ }
258
+
259
+ .ck-view__illustration {
260
+ width: 180px;
261
+ height: auto;
262
+ display: block;
263
+ }
264
+
265
+ .ck-view__wallet-icon {
266
+ width: 64px;
267
+ height: 64px;
268
+ border-radius: 16px;
269
+ background: rgba(255, 255, 255, 0.1);
270
+ }
271
+ .ck-view__title {
272
+ font-size: 18px;
273
+ font-weight: 600;
274
+ margin: 0;
275
+ }
276
+
277
+ .ck-view__description,
278
+ .ck-view__caption {
279
+ font-size: 13px;
280
+ opacity: 0.6;
281
+ margin: 0;
282
+ text-align: center;
283
+ }
284
+
285
+ .ck-qr-frame {
286
+ width: 216px;
287
+ height: 216px;
288
+ border-radius: 16px;
289
+ display: flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ background: #fff;
293
+ overflow: hidden;
294
+ flex-shrink: 0;
295
+ }
296
+ .ck-qr-frame--loading {
297
+ background: rgba(255, 255, 255, 0.05);
298
+ }
299
+
300
+ .ck-qr-spinner,
301
+ .ck-spinner {
302
+ width: 32px;
303
+ height: 32px;
304
+ border: 3px solid rgba(255, 255, 255, 0.15);
305
+ border-top-color: rgba(255, 255, 255, 0.6);
306
+ border-radius: 50%;
307
+ animation: ck-spin 0.8s linear infinite;
308
+ }
309
+
310
+ @keyframes ck-spin {
311
+ to {
312
+ transform: rotate(360deg);
313
+ }
314
+ }
315
+ .ck-copy-link {
316
+ background: none;
317
+ border: none;
318
+ cursor: pointer;
319
+ font-size: 13px;
320
+ color: #fff;
321
+ opacity: 0.5;
322
+ display: flex;
323
+ align-items: center;
324
+ gap: 4px;
325
+ }
326
+
327
+ .ck-download-card {
328
+ display: flex;
329
+ align-items: center;
330
+ justify-content: space-between;
331
+ width: 100%;
332
+ padding: 14px 16px;
333
+ border-radius: 12px;
334
+ background: rgba(255, 255, 255, 0.05);
335
+ margin-top: auto;
336
+ gap: 12px;
337
+ }
338
+
339
+ .ck-download-card__text {
340
+ display: flex;
341
+ flex-direction: column;
342
+ gap: 2px;
343
+ }
344
+
345
+ .ck-download-card__title {
346
+ font-size: 14px;
347
+ font-weight: 500;
348
+ margin: 0;
349
+ }
350
+
351
+ .ck-download-card__sub {
352
+ font-size: 12px;
353
+ opacity: 0.5;
354
+ margin: 0;
355
+ }
356
+
357
+ .ck-all-wallets-btn {
358
+ display: flex;
359
+ align-items: center;
360
+ gap: 12px;
361
+ width: 100%;
362
+ padding: 14px 16px;
363
+ border: none;
364
+ border-radius: 12px;
365
+ background: rgba(255, 255, 255, 0.05);
366
+ color: #fff;
367
+ cursor: pointer;
368
+ margin-top: auto;
369
+ }
370
+
371
+ .ck-all-wallets-btn__icon {
372
+ width: 32px;
373
+ height: 32px;
374
+ border-radius: 8px;
375
+ background: rgba(255, 255, 255, 0.1);
376
+ }
377
+
378
+ .ck-all-wallets-btn__label {
379
+ flex: 1;
380
+ font-size: 14px;
381
+ font-weight: 500;
382
+ text-align: left;
383
+ }
384
+
385
+ .ck-all-wallets-btn__count {
386
+ font-size: 12px;
387
+ opacity: 0.5;
388
+ }
389
+
390
+ .ck-wallet-search {
391
+ display: flex;
392
+ align-items: center;
393
+ gap: 8px;
394
+ }
395
+
396
+ .ck-wallet-search__input {
397
+ flex: 1;
398
+ padding: 10px 14px;
399
+ border-radius: 10px;
400
+ border: 1px solid rgba(255, 255, 255, 0.1);
401
+ background: rgba(255, 255, 255, 0.05);
402
+ font-size: 14px;
403
+ outline: none;
404
+ color: #fff;
405
+ }
406
+ .ck-wallet-search__input::placeholder {
407
+ color: rgba(255, 255, 255, 0.35);
408
+ }
409
+
410
+ .ck-wc-filter {
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 6px;
414
+ flex-shrink: 0;
415
+ border: none;
416
+ background: none;
417
+ cursor: pointer;
418
+ padding: 0;
419
+ }
420
+
421
+ .ck-wc-filter__icon {
422
+ width: 20px;
423
+ height: 20px;
424
+ border-radius: 4px;
425
+ display: block;
426
+ opacity: 0.5;
427
+ }
428
+ .ck-wc-filter.is-active .ck-wc-filter__icon {
429
+ opacity: 1;
430
+ }
431
+
432
+ .ck-wc-filter__track {
433
+ position: relative;
434
+ width: 36px;
435
+ height: 20px;
436
+ border-radius: 10px;
437
+ background: rgba(255, 255, 255, 0.15);
438
+ transition: background 0.2s;
439
+ }
440
+ .ck-wc-filter.is-active .ck-wc-filter__track {
441
+ background: #3b82f6;
442
+ }
443
+
444
+ .ck-wc-filter__thumb {
445
+ position: absolute;
446
+ top: 2px;
447
+ left: 2px;
448
+ width: 16px;
449
+ height: 16px;
450
+ border-radius: 50%;
451
+ background: #fff;
452
+ transition: transform 0.2s;
453
+ }
454
+ .ck-wc-filter.is-active .ck-wc-filter__thumb {
455
+ transform: translateX(16px);
456
+ }
457
+
458
+ .ck-wallet-grid-scroll {
459
+ flex: 1;
460
+ min-height: 0;
461
+ width: 520px;
462
+ overflow-x: hidden;
463
+ overflow-y: auto;
464
+ }
465
+
466
+ .ck-wallet-grid {
467
+ display: grid;
468
+ grid-template-columns: repeat(4, minmax(0, 1fr));
469
+ grid-auto-rows: max-content;
470
+ gap: 8px;
471
+ list-style: none;
472
+ margin: 0;
473
+ padding: 0;
474
+ width: 100%;
475
+ box-sizing: border-box;
476
+ }
477
+
478
+ .ck-wallet-grid__item {
479
+ display: flex;
480
+ flex-direction: column;
481
+ align-items: center;
482
+ gap: 6px;
483
+ padding: 10px 4px;
484
+ width: 100%;
485
+ background: none;
486
+ border: none;
487
+ border-radius: 10px;
488
+ cursor: pointer;
489
+ color: #fff;
490
+ box-sizing: border-box;
491
+ }
492
+ .ck-wallet-grid__item:hover {
493
+ background: rgba(255, 255, 255, 0.05);
494
+ }
495
+
496
+ .ck-wallet-grid__icon {
497
+ width: 48px;
498
+ height: 48px;
499
+ border-radius: 12px;
500
+ flex-shrink: 0;
501
+ }
502
+
503
+ .ck-wallet-grid__icon-placeholder {
504
+ width: 48px;
505
+ height: 48px;
506
+ border-radius: 12px;
507
+ flex-shrink: 0;
508
+ background: rgba(255, 255, 255, 0.1);
509
+ }
510
+
511
+ .ck-wallet-grid__name {
512
+ display: flex;
513
+ align-items: center;
514
+ justify-content: center;
515
+ gap: 3px;
516
+ width: 100%;
517
+ min-width: 0;
518
+ }
519
+
520
+ .ck-wallet-grid__name-text {
521
+ flex: 1;
522
+ min-width: 0;
523
+ font-size: 11px;
524
+ overflow: hidden;
525
+ text-overflow: ellipsis;
526
+ white-space: nowrap;
527
+ }
528
+
529
+ .ck-wallet-grid__wc-badge {
530
+ width: 10px;
531
+ height: 10px;
532
+ border-radius: 2px;
533
+ flex-shrink: 0;
534
+ opacity: 0.7;
535
+ }
536
+
537
+ .ck-wallet-list-loading,
538
+ .ck-wallet-list-empty {
539
+ display: flex;
540
+ align-items: center;
541
+ justify-content: center;
542
+ padding: 32px;
543
+ opacity: 0.4;
544
+ }
545
+
546
+ .ck-mobile-only {
547
+ display: none;
548
+ }
549
+
550
+ @media (max-width: 1120px) {
551
+ .ck-root {
552
+ align-items: flex-end;
553
+ }
554
+ .ck-modal {
555
+ flex-direction: column;
556
+ width: 100%;
557
+ height: auto;
558
+ max-height: 90dvh;
559
+ border-radius: 20px 20px 0 0;
560
+ animation: ck-slide-up 0.28s cubic-bezier(0.32, 0.72, 0, 1);
561
+ overflow-y: auto;
562
+ }
563
+ @keyframes ck-slide-up {
564
+ from {
565
+ transform: translateY(100%);
566
+ }
567
+ to {
568
+ transform: translateY(0);
569
+ }
570
+ }
571
+ .ck-modal:not(.ck-modal--has-detail) .ck-pane--detail {
572
+ display: none;
573
+ }
574
+ .ck-modal.ck-modal--has-detail .ck-pane--selector {
575
+ display: none;
576
+ }
577
+ .ck-pane--selector,
578
+ .ck-pane--detail {
579
+ width: 100%;
580
+ border-right: none;
581
+ }
582
+ .ck-pane--detail {
583
+ min-height: 420px;
584
+ }
585
+ .ck-mobile-only {
586
+ display: block;
587
+ }
588
+ }`;
589
+ document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
590
+
591
+ // src/ConnectModal.tsx
592
+ import { useConfig as useConfig2 } from "wagmi";
593
+
594
+ // assets/creditwallet.png
595
+ var creditwallet_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAtNJREFUeAHVWDFs00AUfWe7oYVSWdAxQEfUCZiQqEQykDUdGBAL0IERlQGxMbAhBpDYGEBMMDCEtUtbqZXYuiHGCDEymDZqqZr4+N/OuW579jmO5aRPcs8+n68v/7//798BYwah65x23Rp8NOltjQa4UmIORfwzgbYE2kJSa+FTx/PWToyJP7iuO9eV+AiJGsqAQMsReOp5XvuwK0amJ7FalDWyc0LbtlBXpCz1gizzpmwyDHJh6JVDgpFmVjFKkJVYUw7fCx8P5GCfY/r9Ezjzl7TvvIVnGBg+FulvSEgKclUGRhM3r0b3cnsX/u8/xnE8ppcw7ggEbnMTWoj8aOJjVWdx/svz6Hnn3iscfP+pHXuhHUkCe2+/0dWCkY+E2+dC5p9xU/lMLjUgZs4e6dv/upFooanlxRN9+x9W4JNV09DZ9kQmQu7G66DNow0mN7XcDL71Da4zEjpzd4GuW2SNTXR//EKPrkHBrrbpqtA8bOXO43dII2SZJnNIoKyVPGQYbBX+noXuzF82jrcwZnB0nXbfMgwWLwxizIKDlS3KLObcotUQm5dD3BSylcYNbfTlBWvIwRCYXLoTWbIIQoyhCOmgUoQJOxRtukAZmaitY65WKNxCuRbWGIYixKK3qpsoEtoo48jhCOLEaFUvYu/lZ+M6ZMK5F/eDsN+luZKQmKm5tFDRwssHEvw9CCYa14MfacLpyNQKvA51aR2y+wtkUv2TBjtw+2zmQu10lR8KZRZoYQnLO8qULdA/mozNHs/C7MpkQs3oPnMJS/uzfhtYaIuaa6kfkIXi9QwXXKwPHZiEAuvGz1bkr3X+enUl6nUTIU4FcVFXKB1YCYTyiJ/3+yEvjNdGMchDwSkEmQyjAh06qJOQKDHSKcQjFjdKBouZT0DUc0SITx9sgTqzRVkgr8RPPsIuDVhTtN9/SFvsK8GuttgDK4/W2HUyRUt3YDV2+A99bkdtt/T4QQAAAABJRU5ErkJggg==";
596
+
597
+ // assets/metamask.png
598
+ var metamask_default = "data:image/png;base64,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";
599
+
600
+ // assets/wc.png
601
+ var wc_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABPBJREFUeAHVWFtsVEUY/mZ2u2cvpd1WCuWm22DxglrawINKTFVQNKmtGNSAERo18UHUN0tQKQ9NLUFTjL6ZtH0wGgJCC4kCihtF64WkGBUCmHZpIKhFd0G7l3b3DP/MXtue7dkCbeFLNjtnzj/zf/PfZuYwTBDuZr8nwlHHBK8QENVgcEPQT4IhwAR8gsHHddEZA7zhTUW+CUxPU+QIe7N/A2NsPTWrMTF4uRAdg5uK2nMRNiWU3+yvjjHWRk0Prg4+IrbVjFhWQu5Gvzvi4FsgxOu4lmCsVQvpWwONRQHD10ad5B4PZ2yPAJZgcuATQjxoFF/MiAzFyte4ehddESme+SDdNEVkJJQXpE5kI6RiZmrIKMiQSOhMIeWyRFq3YRqQcJ1XtlMWIjJbME3INISy0JVaZ7aL4SGPFbcUckR1oP+ijh/ORdF/SWCioBpVL2uUNcFwfa4DGS1h3eI8bFxmx+ISDm5QOE7+o2Nbdxhdp6IYHM6NnB7n0M4Sad6Xy6DyYo62GheqSnku4ug+G8VrB0P4bUDPSV4TosxiXdFQR4TqzIRryvPQ+bRLuScTUtmB3mGcuBCDVFvi5MqKEgsKaBe+zYa+gK6sZoYYxxkr1YJaM6NqFuCVpRrybXFNOg348OgQ3v85jHP/jRw9fwbDG/fZUV9hU+4scTK8VGkj0lGEo+NrkicI5mwJ9AhhvkXYrQy7VjuxaCbHi/uD+KY/Nq780jkWfFznRK9fx+rdQYRyiyUfc7QE/KnzzCg8fmseev6M4vz/8cncGh1+7HTYuTjS/AuLOArIej1/jSRZTv0DQYFAJD6+gMavWmjFzuPDxnToPGXNRublKhu2PezA7wMxPPrJIC5F4hMnJ0+istSCnU86VQF5jOT+8KfJns5oFxKZQ2vzcTtZuEAL4aOeobFKiYthutw9y4LtKxyw0tuK2RYcfs6lJhyNO2Za8CmRmUfBO28Gh/f5fCwqHjvlXHrXRQlx1yyu5mxd6cC98y1GqqlSk5lGd/76dwytP0VSz3eS4n3PuEhpmpQsAV+uc6pMSqKY3CnlquaklRVSX3uNA8vmpvs+oIToPmsQg8SFk5kMD0pvesN478c0KRWktS4VR0vIap8/60KRPU5GZk8ygyRB6UJJWBFc48LyBdbUPM3fR9BwOIQs8DFns79djFOpNy+3Y/P9Wur51L8xuPKYcpGEjKlXD4QQiQIdTzhUNqr+sMAZCn7p8iTepQW+RQvNDtFpsT7S4CFbrcom8m1/VO0XD9wcX+VNDq6yBQnLvLA/hL0nh4mojuMXdKwssypS8lean3bndiLz9rhk5H6GFi507IUJmo6E1eoyIcms+SyIfafTKSzbGw+GxxTApu/CpmQk5LWJJ46QXjNhaeokqRAp3NAVwld90TFyu08MYe2eYOpZWqbpSAQ5QN3hlB/ogNRB+1m12QhJKkgV9+j5GA71RrPKfUHvntoVxD1UPlq6zS0jIe9u8j+Vx453AnLH92B64As1uMtkIxV1ZKV6TBPkBTLVTjbiZ1qxA1MNIXZk3mZH1HlNQyNl+DFMHXxaBI2ZHdf3RVFCCkhBOQCTBLLCsWxXacPdXgpqmqiclJiimLGFjclImH6OSVyRrsWNVlq+PnkhzIYb74MVxhLz0F8146yWBnuEtFzGJz15nGFgXsH0X+Q+OdFPepcBu2QIgJzDMScAAAAASUVORK5CYII=";
602
+
603
+ // src/connector-meta.ts
604
+ var CONNECTOR_META = {
605
+ CREDIT_CONNECT: {
606
+ label: "Continue with Credit Wallet",
607
+ detailTitle: "Scan with Credit Wallet",
608
+ downloadUrl: "https://creditwallet.onelink.me/Jv54",
609
+ logoUrl: creditwallet_default
610
+ },
611
+ CREDIT_WALLET: {
612
+ label: "Credit Wallet",
613
+ detailTitle: "Scan with Credit Wallet",
614
+ downloadUrl: "https://creditwallet.onelink.me/Jv54",
615
+ logoUrl: creditwallet_default,
616
+ deepLinkBase: "creditwallet://"
617
+ },
618
+ METAMASK: {
619
+ label: "MetaMask",
620
+ detailTitle: "Scan with MetaMask",
621
+ downloadUrl: "https://metamask.io/download/",
622
+ logoUrl: metamask_default,
623
+ deepLinkBase: "metamask://"
624
+ },
625
+ WALLET_CONNECT: {
626
+ label: "WalletConnect",
627
+ detailTitle: "WalletConnect",
628
+ logoUrl: wc_default
629
+ }
630
+ };
631
+
632
+ // src/utils/platform.ts
633
+ var isMobileDevice = /* @__PURE__ */ __name(() => {
634
+ if (typeof window === "undefined") return false;
635
+ return /android|iphone|ipad|ipod/i.test(navigator.userAgent);
636
+ }, "isMobileDevice");
637
+ var tryOpenDeepLink = /* @__PURE__ */ __name((uri, deepLinkBase2) => {
638
+ const sep = deepLinkBase2.endsWith("/") ? "" : "/";
639
+ window.location.href = `${deepLinkBase2}${sep}wc?uri=${encodeURIComponent(uri)}`;
640
+ }, "tryOpenDeepLink");
641
+ var detectMetaMaskExtension = /* @__PURE__ */ __name(() => {
642
+ var _a;
643
+ return typeof window !== "undefined" && Boolean((_a = window.ethereum) == null ? void 0 : _a.isMetaMask);
644
+ }, "detectMetaMaskExtension");
645
+
646
+ // src/hooks/useWagmiConnect.ts
647
+ import { useEffect, useRef, useCallback } from "react";
648
+ import { useConnect, useAccount, useConfig } from "wagmi";
649
+ var WAGMI_CONNECTOR_ID = {
650
+ METAMASK: "metaMaskSDK",
651
+ WALLET_CONNECT: "walletConnect",
652
+ CREDIT_WALLET: "walletConnect",
653
+ CREDIT_CONNECT: "credit-connect"
654
+ };
655
+ var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) => {
656
+ const config = useConfig();
657
+ const { address, status } = useAccount();
658
+ const pendingConnectorId = useRef(null);
659
+ const onConnectRef = useRef(onConnect);
660
+ const onErrorRef = useRef(onError);
661
+ const onQrUriRef = useRef(onQrUri);
662
+ useEffect(() => {
663
+ onConnectRef.current = onConnect;
664
+ }, [
665
+ onConnect
666
+ ]);
667
+ useEffect(() => {
668
+ onErrorRef.current = onError;
669
+ }, [
670
+ onError
671
+ ]);
672
+ useEffect(() => {
673
+ onQrUriRef.current = onQrUri;
674
+ }, [
675
+ onQrUri
676
+ ]);
677
+ const { connect, reset, isPending } = useConnect({
678
+ mutation: {
679
+ onError(error) {
680
+ const id = pendingConnectorId.current;
681
+ if (id) {
682
+ onErrorRef.current(error, id);
683
+ pendingConnectorId.current = null;
684
+ }
685
+ }
686
+ }
687
+ });
688
+ useEffect(() => {
689
+ const handler = /* @__PURE__ */ __name((data) => {
690
+ const msg = data;
691
+ if ((msg == null ? void 0 : msg.type) === "display_uri" && typeof msg.data === "string") {
692
+ onQrUriRef.current(msg.data);
693
+ }
694
+ }, "handler");
695
+ const unsubscribers = config.connectors.map((connector) => {
696
+ connector.emitter.on("message", handler);
697
+ return () => {
698
+ connector.emitter.off("message", handler);
699
+ };
700
+ });
701
+ return () => {
702
+ unsubscribers.forEach((fn) => {
703
+ fn();
704
+ });
705
+ };
706
+ }, [
707
+ config.connectors
708
+ ]);
709
+ useEffect(() => {
710
+ if (status === "connected" && address && pendingConnectorId.current) {
711
+ const id = pendingConnectorId.current;
712
+ pendingConnectorId.current = null;
713
+ onConnectRef.current({
714
+ address,
715
+ connectorId: id
716
+ });
717
+ }
718
+ }, [
719
+ status,
720
+ address
721
+ ]);
722
+ const triggerConnect = useCallback((connectorId) => {
723
+ const wagmiId = WAGMI_CONNECTOR_ID[connectorId];
724
+ if (!wagmiId) {
725
+ onErrorRef.current(new Error(`No wagmi connector mapped for ${connectorId}`), connectorId);
726
+ return;
727
+ }
728
+ const connector = config.connectors.find((c) => c.id === wagmiId);
729
+ if (!connector) {
730
+ onErrorRef.current(new Error(`Wagmi connector '${wagmiId}' not found in config`), connectorId);
731
+ return;
732
+ }
733
+ onQrUriRef.current(null);
734
+ pendingConnectorId.current = connectorId;
735
+ connect({
736
+ connector
737
+ });
738
+ }, [
739
+ config.connectors,
740
+ connect
741
+ ]);
742
+ const cancelConnect = useCallback(() => {
743
+ pendingConnectorId.current = null;
744
+ onQrUriRef.current(null);
745
+ reset();
746
+ }, [
747
+ reset
748
+ ]);
749
+ return {
750
+ triggerConnect,
751
+ cancelConnect,
752
+ isConnecting: isPending
753
+ };
754
+ }, "useWagmiConnect");
755
+
756
+ // assets/graphic.png
757
+ var graphic_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAPKdJREFUeAHtnQt8VHe179eeCRAICUN5lUdgQqHUltrwaKX2Nbmt1rbaErV6qj02OW1p0auAnuNp9aOAXq8ez1HgeiwKehOu1vqGqm19VAl90pZHKrSVQpshUF6lMEkIhJCZfdfvv/d/smey573nmf/Xz3T2nkcywfnt9fivtf4alQhej8cTpOBCjeg6nU910jwa6V5+ytP/Ks3ff6zzsdbK9y+7yd3qDwRaSaEoMjQqUiBYvqsNUug2FqyPxVpLmRPgG4S8gUW9iUUdIIWigCkqAUO0IQo16KTfxqcQrGfgq2Bl9VZNiFHbT4YoSb42xPcu0kex6NlCa7W6YaXtwPs2sZA3sJBbqFh437paqhjip02N6uIzCCh4AUeJ1hf9PITKYmTBao+6yAWr6acU8Hoq2Iq7vHzoYbe71kV0m42o/XxbeSDQ1UyFyg3rffyPsYp0Mj0RfRM9uaieFCVNwQrYFO4SFtNSGmBpNT+L9lG2p5vKqKzVaVd3imcku+RagybEHPG7/VSIQv7AWi/1lbUNeFzTG+kvi5pJUbKUUYEhhcsJqSjhQrShDSzY5lStbKocDJxq4TvcqNpTyYkxbbluxNhevjXxY9exa70y258jac4NqWWxDnxcp4X832ZSlCwuKiCmeqqWs3DbWCwrqF+8LXxedyDQWcPCWpFr0bC13dQe6JzDh41afxa7gT/nZhZyAxUCmh7DA3GNIkVJUxAuNOLQPnI3RWWSm9kSr3kr0F0wyzvwDvqobwULeYnlYT9b4/q8L0PdsH4nEUVm4pULXfLk3QKz1WV32bXTIl7T4nY1FpJ4AWJt9gKW4vNZrLGXrfHOak/VKnNpKz+U9dWzYP2WR1Yq8ZY+ebPA/GXHF7+JzMwyssm8pruSRbuaigS40GZ87DUfgjWuy2tsfP2PFgqX+sl7W0hR8uRFwEgM8R3EG45z+YvfWDBJoRQwL0Qr+PAu8yE/u/71heY9KBSOwC7zKhawLm+8ZFM0Fjce/HessPxdJyFsUiiyTM4ssJEACm2Wsa4mLJXeaC7ZlARmVrrJPM2/O60oeXIi4GjxkuEy12ez1thMKMG9NS8YmjfqJQGdXCwyo/7Zqc9iFbFOWutBYwlKocgKOREwf6nxhW7AMSd81iCTK5870Nbm45ixlsXtn1ozYxOlgbWxgYyLRIw66bgIIbPQt7jI1ZJJ/TPcaSS3jDNtNa9hLyOFIgtkXcBYJmLRijjXKl4Il8/5S677LC/385LSnJqamoTWMLnGhkiGDhsm7nvPnqUk8JPhKaTVzMAXrc1kZtjdvOzkL6FQQVE4ZFXARoY2xF9k3YuYtz3QVYPH29vaVhGFltq/S29kS9wc52f6TEvbQFGihUBHnzeGb+eRZ8xYcT906FCqqKy0/VndXV3UfeoUneJb4J3jdPLECTp6+JDdS/2UYg20cYFBVZn4jM1Y1yaFwmGyKmC2Qhv5DktGbIXcNZt37gy4RCxMMXt3h5CrZmJNjT/6cUO4QbilPuvjEOf0GRfShIkTaTzfMuVc71kW8RE6uN9PB9v3R1trP6UgZGTYLVVb9SjLJIXCQbIm4CmequWaUdPMv0RfuWXnrtWJxEsuap467YIIS2UnXFja6TNm0pRpXkdEGwuI+eD+/bRr5w46xdbaAvqElyXKMJtu/k6z0ANZ6TlqSIDCSbIiYLO4oc38BcJ1bm97I5zIsgM9vSFy1cn41/zyLzfbCQUQ7qyLZ9NFsy+hIUOHUS5p2/t6tJADbF1Xtgc6465jm62Jm40zldBSOEtWBFztqWoz4152md1zntq5zce/qinOW/zsOtdJ19mMc5vILFHMp3Cj2bVjBwt5u+WRxKKMDiXU2rDCKRwXsNV1ZhoRL+5ve6NNM3pp7YgQLyq1rFZ3+swLad6CBXkXrpXuU13018cfC1tjrPeW8d8Qyz22eiT8Ws7Edy4lhcIBHBWw9YtKZua1vW1fQxzrGxavOVUSlsqHJ2B1r73+fVmNcTOht7eXtj61RSS7TOJWXrEVbiajXjpgWmEVCysyxtF2QjPZJMDECuNIu45i/nJXvSleLDehn9WHxydMnEQ3LawvWPECLE9de8P76NI58+RDuHhtjtVSyF5Fs3mI2F5ZYIUjOCZgs3i/wTwNj73RbQbRGY+Hlk2pqWm1rhXj8YsumU3X33wLVYyspGLg0rlzI0SMklE7EVvH9LCY76IiRT+zwKt3zF1BioLAMQHbWd+2tjaPfeyrtUyrmbk6WryXzplLcxdcScWGVcSo9+Z/i1UxXrrGvPd6OTtNxci5Xh//lbeRoiBwRMCwOJqZZSWL9SX78kaOe7VGI+aNFO+lc+dRsQIRI+Fm0sDJuAFuMl/YWjRzTnUfuRZSUaLdRZpeq5+szd/0EUUYRwSMLU3k+FU36Rvk47ymi/GvfutrNQo1Iu41pnGUhngl8B5GjxkjjtlNXhVtZY3ElfYojrWidaPDteteUuQdR7LQcp3TWu8sYTfa6xZidfEvC66srpnZYl1qQsxbjG6zpLy8nOZffgV5zhtN0y+YQaG+PvrAtVdRZ0cHnh5QfWVtNyyGNWH91LwlFGLvSueLrSYu0qbl1ZpJ0zZoldtaSJE3HJkLzcL1YSqxbiZprNQY67t18twygoZGVlYWrXgnTZpEH7xtobgvHz484rnvfH8t3XvnJ3CIGB+5gXChB9xo/vvFcdAoK/VTIRPScSXyDbzU6w0s6ga9c66fvwHLtKrtqs47D2TsQk/xeHx27nMsjLjXWOdFtrkYufqaa+lzn/8CW9wLBogX3HjLB+nu+z9tnulLra601eJyOOGlAker2tFMwRC8qoHr1jo/ptMGCgZbSJEXMhawi0KW5oSy1nivRW9wOO6tnVswS0XnenvpzX17RfdRIm54/41seRMnYZc98CBVjTLmqgdJa4pcWjJG0oaKJI7URrf6ja1YB7BGG7VjBT+vilLyhBNJLDmyJu5YGrjObKlFZhau86zZs6kQQEXV4xt/S1u3tNBTf/kz7XllV8zXzpt/OQv4/cn8WCHe5f/7W/LUay3ekJloLfbOiLmhqclD69Y10I9+lF5GXKNppMgrGQuYs63TzPu4V+E+Ct0lrW8huc6BE++I2mYJmhVgkaMZPXp00uKV3P6JT9KVV18jjvnfZ4nFCr+M//BFL38CWLvWy38omk6aKBTcSOt+2CYEHRPzYqPzWrZOK0lREDhZStkR6wlznbgBx1grLaQqK5REWoFFPvnOOwNed8ONN4oJH6my9N8fkIcDSihZ1HncycFtncsNvPzHxy/x1IXLvBRuM5+hb3sLKfKKEwL24T+afYwkwDqxvIJbih0KAs95Y4RLLxFjecy1XAmsL9zndIAFtrHCfso3uk1SStNjD1tAppnFGz7j5JZIcCnySkYCtg4v18kVU8ByrAyEUYgNCnDpcWHBhA8cD4myyrC+mYBlJZNoK+ylfKHpA62ni9d2Y71cLRMVJI650G7qi9kLa+6tK4o2MsUarybi2JHDYorGP17ZLYbXxQIu/YJrrxPdRRiKF80lGX7uKVOn0u13fFIcwwqHUh956zz33rea8+BwgzeJmxaqo3vuUyItMrK+wTe7zz55nIn1hQCffOwPQsCw5Dct/HDM1yIJtf2F5+nN118PP7Zj6/NUPW0ajZs4ic6DJ3B+cp8l1lpvqnz0E5+gXz3yMA49ljJKP+WTRYubSW0AXtRkXcCMWDSF6DJJXu3asT1sfZFkwlgbSxtfBBD6yRMDE1EH9u8XN4AJHxD0vAVXDnCZraSTuLJDxsLPP/M0ToUF5tBCrZ8qMiLr+wNr4Sb9zGLf6KWdgE2mGMDy2ol34M87S2/ufZ3d611xXze8vJwy4WB7O726axdtfeYZuvjSSyOeY3c6ceWIQhEHxyxwkMoGxHXmmBzx+PjzJ1EmeNiCH+gfX2MLBLln925KBbs1XysnTp6kVIBQn3/2aXH/yq6/y6aGWKiYU5ERDrrQwQEC7iOqlTXwIytHUibM4kQS5k/BfYY7Ht0EgV0Vtm/dSqkyK0GC6vBbhygZfvWzh+nXj/xMushJwS50/pNZiqImIwGjML/aY8S1dl9G1Enr5rE1/p04aRJNmjyZpk+/IBxj9pw5Q6+w9Xxl9y7q6ekZ8LtQcBErcYXiC5RBwi1OhSuvuS5hXH7y5Ak6dOgtmjRpsu3zf+J4+2tfeoAOsKssqaioIO/06XQJu8zjx4+ncXyTHDt2jJrXr6fu7m7RMzzVU3myPdA1oAmEvZdaXnJCo8g0zSz40C3LTppIgGkvu8i1SY2pHbw4YIFRmI8iDf0ymyfFFw/im/Wud4lGALv2O8nFs2fTh87cRq/wss+Tf/oTiyc59xXCTWV5CUC8NRcmV1TyKl9YogWM2PYLn1kcYXEh2CsWLCDf9dcLEdtxCYkWS1r+pS+ZIqZmFjFf7Nxo9GfRBu/ixxYGLR6NbvNzdPO/GN+DiZcYY6SEPPjIuKG/v5lfa22P2gt3qqeqGQPcsA763MupxaZwiSHkZ596KikhY8QrYuBkSEW8YDhfcD637PNhb+HHP3iIVn3rm+H4Fla24d57hXgTAdH633yTXnzhBXrs0UetTyEjPcCLqZ5qlEvj39AKfjdibAtq65ZBSMYWmIW7XyfxP2+s18gvYSpALOi7RRHF/2tuosOH4seiKMRANRUy0EcPHxZNClH7GYkyyXlXLEhJvOAMu/fr1q6lxrvvpv/4+koR70o+eOutdDuv8cayuECK9pePPCLucW6DEG/VKA994IO30Nx58+lqXx1NrZke8+fCC8BnWfUf38QpOp4a+H41KQYNTlhgtKLBCpNpAVotzwnrjPXPX/z+MUoXxMdrvvudpF1qCRJeqMbCNqJY951+4cy016LhESDOlq46rO5nli4VbnMsINTHfvc7YWljiDYM/o2W/fuDtODqq+nE8bfDv6fKM5pG8S0eV102W8TgateHwUfGFtg6IgZJF76z1kQ7kmVFzIx65F/9/OcpvQ/Z6ujGhHTYw6789q3Ph8+TsboQ7i9/9rMI4cK63n7HJ8TEDsTOsJxW4UrQYNHLcT2WuDoDJ2kYr0WXl2deDaYoPTIWMGIutrQtJOZi6ai6Crtw0r12AnQD/Z4tGaxxrkD55tanWoRLDiDYj91xB90SZyIHsszfX72a49P+AhE7keL47sWfDk/tsOJyuWjs+PPpyKGDpIdCdJIt8oRJU8Tj0cCNlhlwzlbHbChRlCYODbXTHtWNcaM+LH9Y3Wgnufqaa+jJP/+ZcgESYlhXlktTNbws9G9f/hK7zhNivmfzX/8aXiICdsK1YideSVlZGY0ZO46OHztKfX191NXZYetKm/XVAnhDpBhUOCJgXotslrsRsBuNmDhCwAfanakYhBXOtoBFB9OO7WGrC+AyI8scDySo4DJLME4HFjYTho+oEO7zWV4XP8UCrqwaFWGFYX1/3Z9Qa1HLSIMPRwQc5UajaX21uZzh6JIGMtNork81mZUMdsJNJlEFrOKdwhn39T/9WcL3JAusLj5biF3pM6e7I5JwsL7SfXaTrsbcDEIcK6Vk4a5kV9pH/U3rK8gU8EFLlVKmiCIQhwSMJNFRFsee3bsihItY9xa2uoh14yWqgFW8l1z6biHe6DXbTBjGySu403CjkZmWAsa/KdaiTZr9xuZpikGGYwLG7nvRVpjdar98HoUH8WK+ZBmeYW8uRIu14oN+P72xd29E+WUqwgXR4sVSmRN/YzTl7ErDhbY2Xqz8UnjWlmUrV8Vgw9F+YKsVNnckCI9tgcW4OIFbCZHL9jtgjZ0hDBSE7G9ri7BEiZCCPcFrwm/t9/P9iQE106kKF+RKvADbt0DAcKNhiTf8aJ2owQaceVYllIOYtARstglyskoT9c8aUQcnspBEgRVGYT5GyMKNflm+B0PTowUMwf75scfC7XepJruwxos6a4i5wjKYDoUbEC2aHLq77GukIdS6G26gy9/znpTj1eiYN5viBShCkex7/R9h19nYi+rUClIMWlIWMCqvjJ0FUaQhS+qN/YH5OT9FZqDDewbLZAtEC7GinjiV1js7+se/Hk7q9RAqloPSEa0kWry/zLJ4AWJgjbPPr7/2Gj34+WXi3xDD4V3krqNcglnSGEer85KhprXy//GNtGiRWnvOIymVUlrLJgEqi0bxlzcZy4kh50ju/HjtQwOa3MdPmCA6kSAutN55p9fYrrce4zXRt48eM2qL2ZU+dpTPjxnnp/mGc/ws4K2pEce4x20cH9u5x24Wx/mTJguRHD70FvXatDJK7MTrZMIqHv/3hw/Rd77xDerq9ygaDwS6mimXYPh75CRNP7sHc6ixUTVQ5ImkBWzsKmhsyI0v73e/vzaiQAFWFYX11sKCeMi403fD9XGLI7LNZfPfI9ZaQZDjy12t221FjOoqFGqAXIoXFzuUXOLCB2B52eNZlnPxwvq6XW0Dn9BghZtJkReSFrB1X9tf/v7xmNVFSEJ9/EO3xLTKcF1RjujUOmkyTGALe/6kKeL4+LEj9Jb52eD6XnRpbcRr29/cR0fYEkuiSyOznbCSQLgIM6weC2JeF4Xq/YHu/Lit636I9bvI+vYhoRpqXOwnRV5IJQYWo1BRHhhLvABW6dmXd9G3v7aC/nvVd8OPw+J+8ctfzqlwwYiKkTRt+ozw+eSpXupiQXR2BGw7hHrO9ltfiPb7a9YI1xzcePMH6TsPrc2qeHEBhHDhzUSFGs0c8y7zB7ry6K72ccxdhhDKSyS2Fl2pxJtfkhYwX/3FeJyLZycWIOp27/jUp2hKdTX9r+VfFX25EAus2SWUW8rK3AMec5mPwWV+8/U9LOppwo1+m2NsTLvEZ0W8a224x36/y7/5Lco20VM+THIf79qx6DOw/DXUxO40lQdU7Jt/khawHm44j2990P7WETAqpa69/nr6KQv+s/fcLVxquKKwxKctSSi/WNc9FWEN8RokoIyE1nS6hBNcuE92jdYKfi7WTpGkAjg+Y/ldcKlxk9VOiHN/xeKVVheJuu98/yHRApgL3n/zLcLyw1ORQnaT7qdCQlndgiGVGFisGaG7BptX22EVL7K7GCULYWD0C+LiBCNWE4IsNTLKly9YEDNTbQes61jztVh6Ot0duc1KrMZ7hAvY1yhXmWYrSAp+7EM3i2MWcJ0qlVTYkYoLHdDjNOjHEi+QiZ+bru2PnWHZYGUgjinVU8Njd2Ty69Xdu0Q8aJ371Pbmm+Ims8FS0CgQwaA4WGk70M3zVlRSDaNtMAXzxa1bI3p35edFN1G8WD+3lClXVWFLCi40tgHRPXZWFGNgY4lXIgv9//z4Y2Kjr1TEgdJKuJNbn31GHEuRRwtajnOVLvgIi8sNt/0Uu+r7TdfdLoGVqH83l3R0RGhWCVhhSyoutJhvhUzs+of7+14RN7595JC4jyVep4GIYZlxMbAKOh0unDWLrvHV0fv473rvtdfGfB1cWqzHwiuA15Bt1xrLR7JhgRNYGc8uU5QmKbjQxngc1C1bOXH8mBAvwNac2RYvgMuMG6q7gGyAgKjhesumCABxS/ccCTi8Dy47PIJ5V1wejocxwsYO0bbHwrVOosTPRHz6x6eezdqSksXTUdZXkTkoo0QiC7fnnn5KB7yWqre3vSFugZMn9GLkwP428flPvnM84vHnn35a/9gHb9bl34zbJdOq9c8vvj98/qOHvq9ni3s+eYf8PZtJoYhB0uYS85ZCFBSJLHQQXb7gSpG4Es+x1U00+rRQQTcTklyYAgk3+U+P/8GuiEKsAyP7Dot78EC7iMnhwqcyNkd2X8GC42fgZ8EbQOwd3allCQsyS90rSpqkBYwROVM9VRs4kbUE9c538dqu220URGS682A+kLsH7tz2Ir32yit05NAha6OAAJnyu+9fPGB6JIpZIOConRFiAtEm6r6CS/8v/LtkWCB7orHjBSkUMUgpOeL1VNQGybUTx9fU1dG3vruKKkaOpPPGjqdCplOUTnYY2WyO4e0srASivRIjX9niwiraxbhopr/3zk+IY8TBsQYV4CLxhc/cH7HxGdDLhlPQPZzcwTOk9UWOyYWAkSi85847xLlaA1bEI+Xs5hTPyNVsFZbg+PMPPkj/8/P/lpPEVbLIpFOyAwJg+YRQq0aF67wTVpux+Gd7q8Wx3fRJPI+SSDk1AwSHnUenxnDSbMwV1DesP9wo6z1Bw7reoFGH/kTusycifo7RvKD2O1LEJmUBYxpHiEI75V5IWE6Rbl8hAOFYM8bRwMLeeMstYi06loVNhg9ce5Ww6NHLarhwwHpKCw9re7J6IXWzeOPhYmtcxSKuPPpU+DGMy1ETNxTxSNl0whqwiOtYxJshYggGX9ZMZyA7hYxLYVlRV2zdWE0uP2WC7M+VMar1AoDHLZMiqWvCtdQ56UYKuRMP4sNrAix03MMaG7hIoYhH2gUCiIdD5N4oLTEEjCqmbPfJJgKxKVxXCPiJp54hp7Drz7U29kPQsMoA7vI73jvobOUFlA7j9zzEbvU+HAY4+1+jXGhFLNyUJoGec0dGlw9Hvx3G7Hh2bnuJfvfb3wgBQzz54u2jR2nLX58UrYGIZ9PZ2tSKnN8FTwM/9+xZY6IlXOef/Pq3YlQP4u5P3f7hsLCPXvIFOjdiMqVLH18AKt55CYcYFXK0o+fsVlIobMjIR8M4Uxe5MFgNkyjDu9a/97LZcePQbIJ4XHoBEF86wJrCHUYHFSqurFYXiS5MJEHcK38PXhse2scuc9/Q8ygTYLnlBcDcc0qhsMWxGluM3OHs9HLrRt9wLfGFh7W62Ow8ygUQHtZck92XWK4Jo1kC74teYrIuLUU3Oljb/hDzIo51gjH+R2jEcWGF/QcCXTWkUNjg2PqPOTGi2SpkuYO8tMYQsEwuoUE+W/GytdDCuiMEPo+sk8YSE+qmES/HWhPGBQCf1WrVo4F7DcQy0YRrySkyteKKwUHWulx4vdjHQoaYr7NaZUk2R9RAvLDC4nPwRYM/Q8I1YVjZ88+fQLXz59O7a+fSwts/ltJ6cPfYy+mE9w5yitEHNtFIY0lJWWBFTLJWgXHQqB7CLaKCC0LBQLmLszjcTvb1yva/WCDBJb0BfJ7T3V1iKxZM8EjGO3jVMggABRpO4u4Nb+DmJ4UiBjkpocIYVLnxWdWoKtrtd263wlig8QDWF3EtqqxwPIovHmICiHmLJhjsEwK2biIWj4MWq947wtl68CGnw6Nt/aRQxCCXNZBr+OaDRZQJpmyD2DWVKrERI0aENxHr6TlD5eXxCzCsNc7JFGskC8ory/rLKreQQhGDnJX6cBy3iWNRP46x1FSIWDcROxtnixVJdZay6qiNlqCNkxSKGOS0Vk83d5GP2py6YHC5XOFtVs72nEn4+kpLnFwW1YiQCRXG8pFoJVRbhyrikVMBm0tNLTjG8ku8BFO+kG4z4mC40vGwVpwNO/UGOYHRnbRPnm4ghSIOOa+Wd1NoGe6xBCN7agsJaYEh3t6ojcCjQSJMutHSamb8+y3us4tcm0ihiEPOBYyMtGaKGIUWhRYPD2MLjL14Qc/p0zFfJ5obzB0DxfvYapZ3ZWaFYX2rwp1I1KLcZ0Ui8tKJ3x7oXs3LStgW8C5ZpYW+4kJBzsnqiYqD5ebkGClkV3I56sAm6p316bQy0ugH9hx41BpLK/dZkZC8zRs2BwOgp1js74liCky3yMc2JtFgc7bAiXfEjKzAyQ76yx8fDw+Xj2bCxElirNCbe18X570jJtPbKYoYlhviH2qu/fK/yZqDgVNLSaFIQF4HhkPEQQpiz2HRAQDxosQyX8MBpIV99ukt9EzLZtq7Z4/t64YOG0bTZ8ykKdO8NH7iRPHY1qe2hEWMdsCT3juoJ04/cNnZk1Txzosi5rUkrcAGTvY1kEKRBEkJWNd9HgoESBvdmpXGcuucLXHOQkYpZLZH9SALDsFi0F28GVoQLIbWT5k2TdxL0UazfetW2vNKf3klrHGPZ7YQNICb7GbhDg/sGrDshL2nghRa+RaHF6RQJElCAQvxdnXu5MxOo1a5rYWyBFtjrxzTIx+T7YgLrro6PHwuXeRUynhtgxIIdvz5E9k9nhhXsHa0sRXetXOH2BM5SVr44vUoZ5yb1eQNRaokFnDX3FUclC1lAddlU8ASu75iiZz2IadIysdQ4yyJtqIYoC53OUxme9PpMy+kBddeR5lwjpef/rH7FRbydptnUY2mcyZe26JEq8iUAQLWO+chHpXuLHYklB3qjVrVjmbKEdjKhe8WxmpHzARMu+gxp17AnR1+cnf4uYqRlXRz/YdpCGeiM2XXjh1WEbe4yV2vBKtwElsLrHfMXcHPLI962M+WeA2vsWzShm/1Uw4xxYzdEYXoNMSSNkPRrcjh6eI9wyeLbqGzlTP4/ZMiMsSWAXJb+B/jMmwdc+ncuXTpnHnkBFEi9rOI69T6rsIp7AUsrLC+McZ7YEGW5dIaW/uJj8/4FzrDiSEnQFJp8s4vi2O29CtD4l4XF66bF36YPGPG2L7v2JHDIsaFu50Me17ZzQmu5+UpRKyGtSscIVYl1hKbx/gLp9Wzbzknl+I1GOKXR0P7+2QzJrJsMdRyMNC5Qu5FtOXJv1D3qVO270O2GctG9jHuQGZdMptu4gvCUMMtR7JOrfEqHMFewLr+MrvLy4RgdbOhXNe3aFXbc+4+A9NateAYY2ZgOZ1geMCIfbGFidx/iBNL9Wh77D7VRU8+9gdbEU8xR9XCPYaQYwndymi25rNmh7Pot5FC4QC2AtZG7VjKt9UQLGnaMuNBLa+F9bIVUZYcZgrqjiuOv2j+bOPiAIxRucF6rMvGEjFiZNOaiuINvGbHC88nFPJQBxJj2QJFNaQoOpIr5OCkFgt6BeUZa8EHiiTemdGY9vRGS/KKzN0P/Nbno3eeQLw7/cILxfowWg0f3/hbgsCjgaWdwK/xjB1LI0eOFI9BuEcOHxYW+5zR4dR8INDVSHnALGFt4L+L18q0WrLP8Ad09kI4HyDidHgofB7g+w5+H2J4Pxm5EL+K5fNLXksp04Ez0s18d5c87x57BXVOen/SQjYs+CZL03zsDcRQXGKWevrsnoeVxu6B/BpfrLVrm/dgx8G8ZKKneqqW8GdcwYdOWluL2DVe36b9OrlY5ELgrUrg2aXoBAzYEiPZFLHMBYuMZSKULvZGLRUBCBfblSCGlmWMSFi1BzrnJPp9KC4h46Lhk49BvCHS6w9a9u41rbYP1o1/thfWTQ+LRWMrFtpQRmWrc/2lNmvON1o//9Q582ncjFk0fsbATHonZ9l72Lvo5Rvuz5q3jiOHqCf5CjOJEDLu+d/kZRZ3qxK3cxSlgIFpHVeQxRpbCfE6sFXENiNvNrEr2JjKlwhC6KO+2jJhbYYUjfvIFyCIVxTkQLjvbbiPqvk+XToPHxJihqiP7XtdiPztfXtSFrkuLLbOgnZv4H/LFlKkjDMCXr/eR1g/1UVroIcTXq2i6GPRombKMqaQfRRlIWNhfmnWmON9Sp4pnqrlmuE201WN99F7G++nbCOEfFgKfA+L+3UhbHHjx2PgN25YxnNtcRsW2k+KuGQu4HXrkAjZafsclqLuuy+n3TVm0YeX3TV2Z8njIn0U/5n7jeRLqBUTQWiQYF7c2nA885o6WviN71K+keKGsA+0bufbtpiiNi62KEF1PaostD1OCHijpV46mgANGVpDjY0q1skD1Z6qNsThoyZOoo+vWU+jznd2+LxTHNi5jZ5r/iG1830c/HxbOVg8p2RxYCaWMVEjBh7q7W0gRc4xEm9GVhwxb6GKFyAexwXmf3z2X6l8ZGX4cXgN5ZXhcy/fmvjvajOTigrKxVA7t3YZKfKBSO7B+s6+6VYqBubd/skIN388Z8k/+9hTdNODK0XyzcRLppARItAgJ3MB6wm2/gjqL5Mip5hfbB+OYX2LCVhjecHZ9quHRcyMc1jof0IYMDHsSSC+32l2qg1aMhew1ockVawYN0BDQ3ktwRyM8BdbrJEPY3cUbmixMe92Y144xLv7id+HH4e4F/3iMeFqm2CNfeNUzrTTICVzAS/6TCsFQyiG8Ec9w+d9ddS42E+KHKP58F+Id5glpiwW4DrLdeq9z2we8Dxc7UW/fCxsjVFdxiIelB1ezsTAi1mki+6rIS3El/tQo7gfMnSOELcip0zxeHwyeTX7Ax+iYmXm1YbncGyvUSASDZJyH7e41CziVV7PSB8NMpwd7H7v4hZS5BWNguHkVSrVVliLfeJby4VY5n30kxx35lf8ssRTVnfBKkcjRfyLJfeKzx8krYnj/0E1LCHnW6sosotmlkxW16ZWKol1WKzHwuI98c2vUueRQ5RPxs/sF+zb5rxtOyDimx5YKU85sRUaVPGwEnAJgfVR2TwhE0HJsvuJ30WcH0hy2ki8n/dc0w9p79Ob03o/Yne5dn103564r4WnMf92OUNcXzqYXGklYBP91OW1VPyISR9wn+1czniURyW7qs5PfhZ2NBDvE99cTs82/YA2ffnzwrKnQ5UZ39rFwNG8t/G+8N8QtGwSUOooATP6mQVeCgXTMxUFgjlRQ7jPSz/7Ofrw9Ek0tnxY0u+3WmwUTWTSrbT7j7+POEfNczpIC5yMOw+LPS9shWnhYJkwkpfdCQuOc+dEF5XeNd+Xi+H12YDXfsMFDdgobnLFcLpj5hR67WQXPX34OJ0Nxt+sHF1KM8zMrzX+BGe7jH5g6cpCWNGvsdJ52Jn4WVrUjiR/Hi5CsPrAHBy4gkocJWCg6z7R1hEKQcgtVJwI9xk7V1h3eHzX6Eoh5t++eYi6zp2L+WaIFII5anYJoVsIN4ixx8aFncFrzDc/uNJ2nRmVU1JI4jOlmdFOdQ0br4fnAJfdGBlU+gxaAYs9n06dquUDdrV0Y0qkpt3GjzdrWksxLkMIC4x9pKKpGlomXGqriPElb48Sairs4+TURhY2yhujQTyKGBqTPapr56XdSCEF3HMq+SkgWPs2Y24fSkpLvad4UApYDK7v6sSsq6g4iS1xV+dJvWNeKx8/WgiD/JLBWg8ca0dHKeJH/r6H1i9uEKKNRWX5CJo06jy6aPxkmlg1ho/HiOPK8uFUOWw4PcxRxtpnHxdCwc0uXnaigWKYORTwbAoCRvXZ5u/9lxA9hvdRibvRg1LAGJerd8yFu3wXu87ega8QlUzFZIWFB4F51fF2cISIR762IyxeCHUWC3PW+CniJkU6qWpM3F92/1U300+3b6aunjMiYZVJwktSOWQITRlZTkPdLhrmMnKrJ0cmv0m6BFZ7HMfng8WNHrQuNKwrJ61aSA8NzD6HQnXa6Nacl4GamVNcWALs+iX9+1G8weu/dOPNtyR8rdUdrZv5blp81U0JBWvHrbMXsCXenPYSEYBQa8eNootGV1HVkIFfxQOe/hgYVjjZmBhlmBY32lPKlVmDexmpr89PBcJUT9UqziSf5Ntms02uDV02iXpeUfssizeQfU4EXOxqc2eJ3+3aSjf9YDl95Ymf0qHOdygV4EpnQu3YUXTXRdPoivHn2YoXyB0wQCpu9IxrfOHjYBJz0ooZtQ4cRmsJH7pdOS3qgHjZ3YvupvGiywYzrVjMTbGELGuf8WVfcPXVCX8X9lP+7z/8SQy4k40AViG/dGAvJcOet409qiz9uUlzQ/V4umbiWBrmzs7XD0kzmTjTKeSjEkYJWKC1cFxcR8FQjbEXlJYzl8sofzTE67rufVT2vQ1U9oWvimMLDbDM9qNkjNbBK69KLF4Jlouw7otGgGgh3/PIGrr752sSCnnP0YPivirFDDPE+y5P9lscZVzOX/CSjoMH9Towx7l+Tmb5KRRslOd8V0M5BQPqddLGTSD34i8YD+H48veS66N3UujXP6XQlr/gUS/fmthaT2sPdIrqfWMCp9E6eOMtiePfaGClIORLOGMsB8uhaGJb+166p32NiJG/eP1HBsTID3MC61CH4XKn0rL4ngmjUxIvvAUJYvcqSh5ZSsoXx9pSjoMHfSEHJ7NyLNh+zLGvXhxDrNFIUeO54Ne+SPrbR2XzOkHE2AVCbM3GvD+J+FfS2RtZ0CFcThYxln5EE4Ip5M17/y5ut166gJNW76HJvLT0j6Nv8RLSE8b7UmhZRJyLeDcVrAI+m+KOEFh/tuAlY3eIkkNVYuWRPv5iybm+mveCmK8TQv7qtyn4na+R7n8jLGId69aE7HPy4k3EbBshw7XGzQqmRX7cpogjFldMSG8TOkkqxRzAGpvzRRI5jZIUsIqB80iZdQxRd/ytSSHisq/8B0mhm5uU+XD8/hTd5+M9vQlfIwfJWWNkSapzpmF9UdKZKtaS0N4k9mC2Ym1H1MUujKWJssB5BGV+Uz2VASwDhV79O7kvfnf8N1SMFCLu+/q/C0ssufLqaygV3upOboN0GSPjhhgZSzlVCRoZ7Jg8MrMlp3TB58Q0Dy2JXSOLFWWB84xuuna6kahKDIvYzVlqqqgQp9HNC4lAd1KiziQ7EOuigSFV8YKx5elvbF5t/m0daUwIsXgIEbPJkdTCEDxs+obdK6Z4qnbGW6orZJQFzjPsCq/UeClIJKjYCmuJrDAZ7rRkQQrLR529ffTCsZOUa5xY7001Bgbj+rdO9Yr/GJubL+GYGMt2Zh28LvcXqsUmeZM9FfVvFdH+WcoC5xnsL6yZddfBJ5IboQ2hU3e3OL4xyewzrO5v2w5RV+85KiZkNdbZNARcPrJ/4anaqHRrs25w7uKLpevmeuuau9dFro1URCgLXACESFvDcdrysDBN9zgW+rbnxT2WWZKpvoLlfaz9SN7E+/aZXk5iUVpMqTZc6HSG7I2bad28vL/SDYKFcLVp08PPuuZfSX2c5We81R7PwgOBQFFsSKAscAFQRq7V4oAz0cEnEhsAIXRC9VXi5BVi3p/vO0DHz5ylfJFM1jsR6bjQmLBpBRYXlW5YW7eKF2gonAmHL8EGKhKUBS4AUCXESZQWPvSF2I1231Qf2wpzrBwyM9Cxlo/gLr92spPe7DyddMY5m+AzwAtAO2OqyARdqoUczzb9kJ4zp4Jo/G/p+ug/k+umhXHfI5bojItj0ZRfKgEXCDKZBSsc2vZcdC10/+ssy0eHJ11Aj+0/QpUsDLTmdZ3rE+7q8Z78WdtYYC7XLdPOp1SR1VjJWmAI/a///V/0ijkmVxTB/OtX2eJekPC9FqvsKZbySyXgAgHJrLAV/vVPYwo4ZMa/WM7RxoxjK9tNxQA+Z+vxDtFGmAqjTAEnk8RC1ZjYpcGMl0WS6gvLhQVOCkt2n4xEV8ELWMXABQSssLiHmxxjXVjGv6nOfS4EYIUh4nSJJ2LEuxHi5SQVyk+TFm+RogRcQMAKkzkVE1Y4Gt3/phA3mHG1j4oRiPiFo8mvRSfT1B8tXvdd95P7U2nsixxZzloU3UtKwAWG1QoHo0Ss7++Pf6c6MIcqX7x47ARt2LNfZMgzBfsHb7j7n0SMDGtbxlY3UbIqFvpru+RhoFjaD5WAC4wIK4zCju7+GFeu/0K8xbjvrxVkpZ88eIzWvdomxt2+cPQEvdHRzUm4s+FST9yfHVYe82dAvNiIDUC8wmVOopItFqGXnpOHW6hIUEmsAsSakQ7+5ifsDt4vHg+9+rK4H1eE8W8sIFIsM8Va7uoI9D+OJJWcALL9Vz+jv33vP8WxbLfUIpNQKYHcggxPmKIo4gDKAhcgsMIs4jU4Dj2+yfhyWconZxZp/OsUWON1UrxA5hw0XpY/EOhqpiJBCbhAKaOyFeEa6bXfCWefQXURx7+ZElGg4ZR4OeMfMv99daKVVEQoF7pAMauzMKtrozWhVT67lrZ2naJxQ4bQME2jcUOH0IaPf1BkYLEdJ1roEB9PYDcb99jpXja3D6ssvrjZuu0p9htubzXmUKNqCm2VmYpXVLZZrG97EVlfoARcwLArt2mKZ+QazbLf7bmLZrOALcUbHCefM5dPsL+R3ONon83G2hADRG4Ie5Y4R8tduSnwqonp7WGUTazJurB4YXm/4swaLy6MMvZ1kbuOigwl4AIHrnSIQrfp5lSJAVlWTOn41kO8BPKyiJHFUhPu0V/cn5QRYKmlxyzwj7WjAiq87ASO80Kx4E4VaISe2BgumNE4cViMG6EpARc4cKWneqqQ0FoFsdotk2je6eJmhxAxbmyp9eMQ9TE+P8K3Y3x8hPTuyFLMY3EELi04MsFw0bEDoRyinivrjb8/Y7cZDHCdT62gIkQJuAjQze1Po1vgkkF82c0vvGb3syHg40fC1jsscHluEbi04BC5nYtujcGlW45j7DIojzOJxUXz/UfupIxh8fZhTK/5txWj6yxRAi4CWHi1mP7suvy95DTCFa0wOnXsrHtY4MeO9ltwjLa1cdGtMXgirK46RI3S0FjbtOBiICqtRlREuM7W36+NGJlwEIKA/x407sv3cniyjHMNfipSlIALHGPzsqAYAZOOBc6UsMCnXWBvwWXMbYm9yRSHncgl0a76vp0v0sJvrBKZ9WiGmQKO+L0vPScnaNh/btPzQGghC2GE5TVna4vXcNz7VqB7NRUxSsAFjotCwvrGin/zjeyzTfTZ4sXiGFBw8PxqWnv4mHhtVZmbqtxu45jvz+r6wB9YMTKp34f1c/dH/lms84Z+8F9htxniLda414oScIGTSfxbSMSLxd1R5519QXGT9IUGjsHFBWPIz/8YPhfCPG12E+Ee5+guqjBca33bcyUnXqAEXOBkM/4tJQxXX8bAA7PUIktvtCgESkW8QJVSFjDWzbuL3QLnG21sWNRiXA6VCErABQziX3FQoPFvUTEuYh6Xl0oEJeACplTi30JAGzc+fGzuVlgSKAEXMIh/ca/iXweo6F8n1khTLrQiu6j413lcYTdav4xKBCXgAkXFv1kgfCEsnf2ClYALFBX/Oo9s+NBLaL9gJeACRcW/zhO1lOSlEkAVchQg1vpn1O1ipI4A7jRnU7WLL1OWOR28/durBI0LpJ+KHCXgAqPaU7mQKLRKnsfaoQGlia6P3hlzCxbFQKx9xBqFvFQCKBe6QGCXzsfiRZPtRjJjtMryETRp1BiaNWEKXT51priXiDlZbJn7PntXxMA7RXykiEMlUsyhLHABwMJtClr2pJ01fgp98fqP8P1kqhw2YsDrN+/7Oz28bTO91L5XCBnN6bDG7o860Oxe4mAYHv7NtBJJZCkB5xHU5LJwsaO3D+ewuHfO89H9V90c9311M94tbr/b/QKtffZxOtTxjjEe5vSp/t5XhS0WN7ok1oKVgPMIixexrg/Ht85ewFb3w7YWNxa3zn4Pza+eQUs3rac9Rw+KIfBoo8MO9Ap7LMk/b7HsARwPFQPnCXabG/gON2Fxv37znSmJV4IY+Zd3PUC3XrpAnCPpFbTZ2bAU0E87sBfywD2Aixol4LyhLcd/IcDFCVzmZPj6TXeKRBeAO11KItbk9I3I7T/TwyJgcympqFECzgNeT0WtzDQ7IV7JqvpF4oIAIOKSyU6PcG6TbhEDh5sain8pSQk4DwTJ5ZXHdTOdq3OuHDacfvxPnwuLWBSAdDvgdpYYYoIllcZSkhJwnunqOU1OAvEingZirfg3PyFFJJpZkeUifRQVOUrAeUAnd1Yzn/OrZ9In5xuzyuX2pAoLYZe8+LuSlIDzQJmlBnfPsbcoGyC2riwfLo5LNSudLnItWCddZaEVqYNNtOTev291vEPZAPHwnfMMKxy1+/ygx1LM4aUiRwk4b2h+/HfPsYOULVDoEcbcjUBBEVntYm8rVALOH2JK8bYD+yhbyGy04HQRZ6PlZ0+wG0PSRE6oLGo3Wgk4T3D81Yp71DEfypIbXSroZgGH5tR6sGUTtGCRu9FKwHnCTe5NMg5+dPcLpMgdkfsLB5UFVqQOiuh1ImGFN+9Vyzzx0OWeR0650OJnlcaIWSXgPMJu9ErcI5H10oG95DR73rYkyJzY1T5fyE3JnCypHBG+GCgBK9LjYOBUi2Zmo3/w7OPkNP842r/GLLcBLTqsDQwOCrhUUALOM9IKb2vfS39z2JXeZlp1MU61oji//GIfYYmDLnTYLTfzEMWKEnCeORDoamYrLGLh//zbb6jr7BlygkOd79Dvdm0Vx5hiWbRgE3ATx7yI7lNht1wnl5+KGCXgAiBEoWW4x3LS3Y+scUTEa599ov+Ev7D6S88bNdFF1p0U2va8uHfSi5A/E7jNRGKq6LqvIGJnjRQFwRTPyBWapcn/x3d8jiZVjaF0QDy9Nk5MLTbDhjVjl9R18aWGZcPM6UKbNf32UTr3wKfFRQfjc50aFdT3wGfEvG3+8vvbA101lAZ617ydVDakXhu+1U95RAm4gIgW8Sfn+ehOs6soGbrOnhaWFxMrAb6gvFSFuutaPYlsqxA2qpQwc5rFbAi7Inyfa6yTRcq+tyFq/Tbzn8k0IoShFNFPXV5LoeBO0rVWbdT2OQOec7sDuRK2EnCBYRUxgJDR9I+65ovGT7F9D4T7020t9PD2lnB/McTrIncdGidwbuxKf86LYQL881nQYoc+T7LiFj8TfbScCYaQ5GQLbez5hrjlYw5hFVrG1pcteOipP1NIhhEGLSze5K+OFvSu+T7SQ/IquYKF/DIf3cbPLCTj37JRq9rRTDlACbgAQYF9kIJNZE6slGDsrDErejhVlQ+nzp4zoh0xuhSTxbmmjMpWJDtxESN++kjzuMhViykVGos7FWFHI4RsilmLcR9el0ZmGctDqHc+dpRC+98gfctfwt1TeL37q9/ubwGUXVV4PZJR5jke1+Vj8nU45ySYPjDub3GTuz7diZR6x9wVrJzl9s9qm7Sq7fWULuvW1ZLL5SX3uVZqXOxP9HIl4AKGrbGPrWUDH96V5FtasCyF9WVyAGm1o8Q9jYSwNS8V33D0Fr5tSMdtlojkVVdXk2lto54kP4VCddroVj+lyrp1S/gHrCDrRVNzraB7710Z721KwEUAhNRHfbUsIh//nzxNNwvw4SaHSOtgUbWitjofM46tIueLjdcsTfSYn1Mc4zG+sGR1+oXsvJo86jxxj10rTDbx7VH+92mR4US6mK4zPCOv/QtomTZqx2pKlfXrl/PPXWH7nBaqo3sXt8R6qxKwIutA5LxUthP78oo51g0PiLgdHOo4Ie4RFmCCiBESnODwwHi+isOGkcOGh38WQgfxWvP1xvHAedpX/59/43zAGdQ6L2sPdKYuqij0rrmrWKBLE7ws9di3qclD53pPxnxe01ro3kUxY3W1M4Mi68Az4HCgkcW0GfH6t//2GzHHGkQvlaW7dBYNRA0Bk1O1ziF9NIsp/mv0NFoT+/rieyZ6fM9FFXIocgLiciTXcIwKsbVZqP3OJtqonQ1sXTW4yVHPtIjYV5CVMCHuBUgJWJEzWMRLZdloomKTQsWIcVm0Bsg41/FjKAZpZAu9iVKlrCx+JZhLa477NCkUOYQTcfXWDqxsiVgurbHV95PT6LoYh0TBUNgaI/ZNa+23sTEg4lx7/OQOxs1CKwErcgoywSziumyK2DrhxJ0NAbvdm0TGOZ3lIjv6go1kGTVswud99YnWglUWWpEXUKzCmenNurmWjGozbGruRBLrnp+vEctImdQ654V1368lV5lXHLuHtgjrnAAlYEXeMDc4x7qqKIrAEhO2Wr3NOg43RdBGedMPwkVSjZkUbRQDblIo8kSgp6ens6f3F1XlQ3mBRvOhjRLzwQ51nqCLJkxOeb9kjCb69K/WinZMWF83uVfy7yjqhv1EKAusKAhQNsqxcZNuKc/EpuXY5wn137EaOWBxX2rfR9sPvE5/27vLullcPVvf1LPCRYYSsKKgiO7GsoJmjkqzKgtW1m5nR4zqDZFe71Q9eKGjBKwoOJDg6qO+BrbItyVfQ635dQptKKOy5kxrnosJJWBFQSMbOcxGCa/1OXONN2A2KpR0rBsLJWCFolj4wFovhYbUkh7y018WiQouVcihUBQDN6xfTn1lbRTSN5Ku7RTnpCywQlH4vG9dA4u2acDjI8tGKwusUBQ8ms/24VNI9CkUisJGH1AnHUYJWKEodPrKMFEkMsuuaX4qK9ukBKxQFDotaDnU6/jmF+cQL4Xq6Y+NflIoFEXEDet9tLCpqLdEVSgUCoVCoVAo8ogq5FAMDlCG2FfWQC6tlVzu1lJJACkBK0qf961bQrq2guSIVmRxK9xzaFNjzhog3v76Rp+uact1zdxVA2u7mr5s/Jfr09qfWKKWkRSlDbK2uoZ11P7Mra57UcVEOeLYNx5dEtK0zTo2q8Pwd77hWNe1zYe/udFLGaAErChttFgbsOk+ygEnV2z06Loea2sXj9aXcLuWuCgBK0qdGC6qaxTlgJ5h8XdW0FzabZQBSsCK0kb0zeoDZ2NpoWVUAGhx6pyTQQlYUVToJ2s9eue8zSm96clF9RwHrzHPAhTSG2VDfLaZ+GC9X4uuY7YQ1PQNlAFKwIpiA3sP+/Su+atSetdf71mK/lm+1dDfFjVTDukjPdb2KK095yijyZlqGUlRVLAF9pLb1WacEIQB6+bhb7I/rb2JcsRhXkZyadSgkTaNl5L87AU8OuEr9RmPvVUCVhQN+pkFXurrXTJgo21da6VQsN6xvYqKCCVgRcEjhHvuXFPspR+tXqvaXvJD3O1QMbCi8BHbo3Cyp99ljmYJDVKUBVYUFXrH3NX8rTUEC0Fr2mWiuikUrGMXelDOhlYoigbOPvv0zrk635pIoVAUH3rnnM0iG61QKBQKhUKhUCgUCoVi0PD/AZ7VMttYgzkbAAAAAElFTkSuQmCC";
758
+
759
+ // src/views/IdleView.tsx
760
+ var IdleView = /* @__PURE__ */ __name(() => /* @__PURE__ */ React.createElement("div", {
761
+ className: "ck-view ck-view--idle"
762
+ }, /* @__PURE__ */ React.createElement("img", {
763
+ className: "ck-view__illustration",
764
+ src: graphic_default,
765
+ alt: "",
766
+ "aria-hidden": "true"
767
+ }), /* @__PURE__ */ React.createElement("h4", {
768
+ className: "ck-view__title"
769
+ }, "Connect anytime, anywhere"), /* @__PURE__ */ React.createElement("p", {
770
+ className: "ck-view__description"
771
+ }, "Choose a wallet on the left to start connecting.")), "IdleView");
772
+
773
+ // src/views/CreditWalletView.tsx
774
+ import { useEffect as useEffect2 } from "react";
775
+ import { QRCodeSVG } from "qrcode.react";
776
+ var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
777
+ const { downloadUrl: downloadUrl2, logoUrl, deepLinkBase: deepLinkBase2 } = CONNECTOR_META[connectorId];
778
+ const isMobile = isMobileDevice();
779
+ useEffect2(() => {
780
+ if (isMobile && qrUri && deepLinkBase2) {
781
+ tryOpenDeepLink(qrUri, deepLinkBase2);
782
+ }
783
+ }, [
784
+ isMobile,
785
+ qrUri,
786
+ deepLinkBase2
787
+ ]);
788
+ if (isMobile && deepLinkBase2) {
789
+ return /* @__PURE__ */ React.createElement("div", {
790
+ className: "ck-view ck-view--mobile-redirect"
791
+ }, /* @__PURE__ */ React.createElement("p", null, "Opening Credit Wallet..."));
792
+ }
793
+ return /* @__PURE__ */ React.createElement("div", {
794
+ className: "ck-view ck-view--qr"
795
+ }, /* @__PURE__ */ React.createElement("div", {
796
+ className: `ck-qr-frame ${!qrUri ? "ck-qr-frame--loading" : ""}`
797
+ }, qrUri ? /* @__PURE__ */ React.createElement(QRCodeSVG, {
798
+ value: qrUri,
799
+ size: 196,
800
+ level: "H",
801
+ imageSettings: logoUrl ? {
802
+ src: logoUrl,
803
+ width: 40,
804
+ height: 40,
805
+ excavate: true
806
+ } : void 0
807
+ }) : /* @__PURE__ */ React.createElement("div", {
808
+ className: "ck-qr-spinner",
809
+ "aria-label": "Loading QR code"
810
+ })), /* @__PURE__ */ React.createElement("p", {
811
+ className: "ck-view__caption"
812
+ }, "Open the Credit Wallet app and scan the QR"), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
813
+ className: "ck-download-card"
814
+ }, /* @__PURE__ */ React.createElement("div", {
815
+ className: "ck-download-card__text"
816
+ }, /* @__PURE__ */ React.createElement("p", {
817
+ className: "ck-download-card__title"
818
+ }, "Get Credit Wallet app"), /* @__PURE__ */ React.createElement("p", {
819
+ className: "ck-download-card__sub"
820
+ }, "Once connected, you can log in with it next time")), /* @__PURE__ */ React.createElement("a", {
821
+ href: downloadUrl2,
822
+ target: "_blank",
823
+ rel: "nofollow noopener noreferrer",
824
+ className: "ck-btn-primary"
825
+ }, "Download")));
826
+ }, "CreditWalletView");
827
+
828
+ // src/views/MetaMaskView.tsx
829
+ import { useEffect as useEffect3 } from "react";
830
+ import { QRCodeSVG as QRCodeSVG2 } from "qrcode.react";
831
+ var { downloadUrl, deepLinkBase } = CONNECTOR_META.METAMASK;
832
+ var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) => {
833
+ const isMobile = isMobileDevice();
834
+ useEffect3(() => {
835
+ if (isMobile && qrUri && deepLinkBase) {
836
+ tryOpenDeepLink(qrUri, deepLinkBase);
837
+ }
838
+ }, [
839
+ isMobile,
840
+ qrUri
841
+ ]);
842
+ if (isMobile && deepLinkBase) {
843
+ return /* @__PURE__ */ React.createElement("div", {
844
+ className: "ck-view ck-view--mobile-redirect"
845
+ }, /* @__PURE__ */ React.createElement("p", null, "Opening MetaMask..."));
846
+ }
847
+ if (hasExtension) {
848
+ return /* @__PURE__ */ React.createElement("div", {
849
+ className: "ck-view ck-view--extension"
850
+ }, /* @__PURE__ */ React.createElement("span", {
851
+ className: "ck-view__wallet-icon ck-view__wallet-icon--metamask",
852
+ "aria-hidden": "true"
853
+ }), /* @__PURE__ */ React.createElement("h4", {
854
+ className: "ck-view__title"
855
+ }, "Open MetaMask"), /* @__PURE__ */ React.createElement("p", {
856
+ className: "ck-view__description"
857
+ }, "Check the connection in your extension"), /* @__PURE__ */ React.createElement("span", {
858
+ className: "ck-spinner",
859
+ "aria-label": "Connecting"
860
+ }));
861
+ }
862
+ return /* @__PURE__ */ React.createElement("div", {
863
+ className: "ck-view ck-view--qr"
864
+ }, /* @__PURE__ */ React.createElement("div", {
865
+ className: `ck-qr-frame ${!qrUri ? "ck-qr-frame--loading" : ""}`
866
+ }, qrUri ? /* @__PURE__ */ React.createElement(QRCodeSVG2, {
867
+ value: qrUri,
868
+ size: 196,
869
+ level: "H",
870
+ imageSettings: logoUrl ? {
871
+ src: logoUrl,
872
+ width: 40,
873
+ height: 40,
874
+ excavate: true
875
+ } : void 0
876
+ }) : /* @__PURE__ */ React.createElement("div", {
877
+ className: "ck-qr-spinner",
878
+ "aria-label": "Loading QR code"
879
+ })), qrUri && /* @__PURE__ */ React.createElement("button", {
880
+ type: "button",
881
+ className: "ck-copy-link",
882
+ onClick: /* @__PURE__ */ __name(() => {
883
+ navigator.clipboard.writeText(qrUri);
884
+ }, "onClick")
885
+ }, "Copy link"), downloadUrl && /* @__PURE__ */ React.createElement("div", {
886
+ className: "ck-download-card"
887
+ }, /* @__PURE__ */ React.createElement("div", {
888
+ className: "ck-download-card__text"
889
+ }, /* @__PURE__ */ React.createElement("p", {
890
+ className: "ck-download-card__title"
891
+ }, "Don't have MetaMask Wallet?")), /* @__PURE__ */ React.createElement("a", {
892
+ href: downloadUrl,
893
+ target: "_blank",
894
+ rel: "nofollow noopener noreferrer",
895
+ className: "ck-btn-primary"
896
+ }, "Download")));
897
+ }, "MetaMaskView");
898
+
899
+ // src/views/WalletConnectView.tsx
900
+ import { useMemo } from "react";
901
+ import { QRCodeSVG as QRCodeSVG3 } from "qrcode.react";
902
+
903
+ // assets/deeplink.png
904
+ var deeplink_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAj5JREFUeAGVU0FoE0EU/TO7aVJMTKwUoSDmUqWC2B6EhFwSwYonCYp4UoonKUWiJ/GwG0+9JdKG6ikVz9JepLRSEpB0rZeGKlRtDxak0FOTwzYtuzvf+ZtujLU09JOwM/PnvT9/5j0Gh8L4OJFkQrkNHKOIUEMGEUBRZ3IBfDwbTz3+1b6feYOVUjGyb5saCqwHdoP5ofRI7R/iuakocEdHzne61f3sUCpTaxEQeM8yZ4BhNn5jrAzHRGWhMMgBcwGflSYSTotUWQDLdAJTJIZHq1SoYfs19wRGaSrKLKHFhkdH4ARhzE/owKGsggSjw7PtyUZj+frW1++Ljmj2iEJgMHIq03f53itvz16Xnfdbqu62EL/192ZfPL1//nd1bVEoyruLsYesX/59PvWlWTfz7UVS1D/jF2BpfnLWW9xen9Hlh3vzb59eX1368OYKjZPJpEq57R/unoM2Jqc5Z2znYM4d29HWjWmLxpW5wjW/Gqj29vhXiaRcLouNz5QTmkfAOAurQEJphugbuKtsrb13fhpFi8m0/I3bjtXVe9a/urH8FkOR0+zcpbTiEZDQuECxuVLKtZHc4eGesAvujz14PpB49My2nPFQJOSBhXt8ej06BUlXCEgmbo7pcHxwD+wSLBSKIF+Pk3iYbIOIOhC0wJVSYRBB1On1mkr02Tog075ImXYgcc3GLcx1m0Gd5i0zleQ9kDCk68JHuc71i737BFGcIbBnNvZfBc91DEEKJUw3TS2CA5uoiNnDfvkDT/YDNH96aT8AAAAASUVORK5CYII=";
905
+
906
+ // src/views/WalletConnectView.tsx
907
+ var WalletConnectView = /* @__PURE__ */ __name((props) => {
908
+ const { subView, selectedWallet } = props;
909
+ if (subView === "list") return /* @__PURE__ */ React.createElement(WalletListView, props);
910
+ if (subView === "wallet" && selectedWallet) return /* @__PURE__ */ React.createElement(WalletQRView, {
911
+ wallet: selectedWallet,
912
+ qrUri: props.qrUri
913
+ });
914
+ return /* @__PURE__ */ React.createElement(WCQRView, props);
915
+ }, "WalletConnectView");
916
+ var WCQRView = /* @__PURE__ */ __name(({ qrUri, logoUrl, walletList, onShowList }) => /* @__PURE__ */ React.createElement("div", {
917
+ className: "ck-view ck-view--qr"
918
+ }, /* @__PURE__ */ React.createElement("div", {
919
+ className: `ck-qr-frame ${!qrUri ? "ck-qr-frame--loading" : ""}`
920
+ }, qrUri ? /* @__PURE__ */ React.createElement(QRCodeSVG3, {
921
+ value: qrUri,
922
+ size: 196,
923
+ level: "H",
924
+ imageSettings: logoUrl ? {
925
+ src: logoUrl,
926
+ width: 40,
927
+ height: 40,
928
+ excavate: true
929
+ } : void 0
930
+ }) : /* @__PURE__ */ React.createElement("div", {
931
+ className: "ck-qr-spinner",
932
+ "aria-label": "Loading QR code"
933
+ })), /* @__PURE__ */ React.createElement("p", {
934
+ className: "ck-view__caption"
935
+ }, "Scan this QR Code with your phone"), qrUri && /* @__PURE__ */ React.createElement("button", {
936
+ type: "button",
937
+ className: "ck-copy-link",
938
+ onClick: /* @__PURE__ */ __name(() => {
939
+ navigator.clipboard.writeText(qrUri);
940
+ }, "onClick")
941
+ }, "Copy link"), /* @__PURE__ */ React.createElement("button", {
942
+ type: "button",
943
+ className: "ck-all-wallets-btn",
944
+ onClick: onShowList
945
+ }, /* @__PURE__ */ React.createElement("span", {
946
+ className: "ck-all-wallets-btn__icon",
947
+ "aria-hidden": "true"
948
+ }), /* @__PURE__ */ React.createElement("span", {
949
+ className: "ck-all-wallets-btn__label"
950
+ }, "All Wallets"), walletList.length > 0 && /* @__PURE__ */ React.createElement("span", {
951
+ className: "ck-all-wallets-btn__count"
952
+ }, walletList.length, "+"))), "WCQRView");
953
+ var CREDIT_WALLET_NAME = "Credit Wallet";
954
+ var WalletListView = /* @__PURE__ */ __name(({ walletList, walletListLoading, walletListSearch, walletListFilterActive, logoUrl, qrUri, onSelectWallet, onSearchChange, onFilterToggle }) => {
955
+ const isMobile = isMobileDevice();
956
+ const filtered = useMemo(() => {
957
+ const q = walletListSearch.trim().toLowerCase();
958
+ let list = walletList;
959
+ if (walletListFilterActive) {
960
+ list = list.filter((w) => w.mobileNative || w.mobileUniversal || w.desktopNative || w.desktopUniversal);
961
+ }
962
+ if (q) {
963
+ list = list.filter((w) => w.name.toLowerCase().includes(q));
964
+ }
965
+ return [
966
+ ...list
967
+ ].sort((a, b) => {
968
+ if (a.name === CREDIT_WALLET_NAME) return -1;
969
+ if (b.name === CREDIT_WALLET_NAME) return 1;
970
+ return 0;
971
+ });
972
+ }, [
973
+ walletList,
974
+ walletListSearch,
975
+ walletListFilterActive
976
+ ]);
977
+ const handleClickWallet = /* @__PURE__ */ __name((wallet) => {
978
+ const uri = qrUri;
979
+ if (isMobile && uri) {
980
+ const target = wallet.mobileNative || wallet.mobileUniversal;
981
+ if (target) {
982
+ tryOpenDeepLink(uri, target);
983
+ return;
984
+ }
985
+ }
986
+ onSelectWallet(wallet);
987
+ }, "handleClickWallet");
988
+ return /* @__PURE__ */ React.createElement("div", {
989
+ className: "ck-view ck-view--wallet-list"
990
+ }, /* @__PURE__ */ React.createElement("div", {
991
+ className: "ck-wallet-search"
992
+ }, /* @__PURE__ */ React.createElement("input", {
993
+ type: "text",
994
+ className: "ck-wallet-search__input",
995
+ placeholder: "Search wallet",
996
+ value: walletListSearch,
997
+ onChange: /* @__PURE__ */ __name((e) => {
998
+ onSearchChange(e.target.value);
999
+ }, "onChange")
1000
+ }), /* @__PURE__ */ React.createElement("button", {
1001
+ type: "button",
1002
+ className: `ck-wc-filter${walletListFilterActive ? " is-active" : ""}`,
1003
+ onClick: onFilterToggle,
1004
+ "aria-pressed": walletListFilterActive,
1005
+ "aria-label": "Show WalletConnect wallets only",
1006
+ title: "WalletConnect wallets only"
1007
+ }, logoUrl && /* @__PURE__ */ React.createElement("img", {
1008
+ src: logoUrl,
1009
+ alt: "",
1010
+ className: "ck-wc-filter__icon",
1011
+ "aria-hidden": "true"
1012
+ }), /* @__PURE__ */ React.createElement("span", {
1013
+ className: "ck-wc-filter__track"
1014
+ }, /* @__PURE__ */ React.createElement("span", {
1015
+ className: "ck-wc-filter__thumb"
1016
+ })))), walletListLoading && walletList.length === 0 && /* @__PURE__ */ React.createElement("div", {
1017
+ className: "ck-wallet-list-loading"
1018
+ }, /* @__PURE__ */ React.createElement("span", {
1019
+ className: "ck-spinner",
1020
+ "aria-label": "Loading wallets"
1021
+ })), !walletListLoading && filtered.length === 0 && walletList.length > 0 && /* @__PURE__ */ React.createElement("p", {
1022
+ className: "ck-wallet-list-empty"
1023
+ }, "No wallets found."), /* @__PURE__ */ React.createElement("div", {
1024
+ className: "ck-wallet-grid-scroll"
1025
+ }, /* @__PURE__ */ React.createElement("ul", {
1026
+ className: "ck-wallet-grid"
1027
+ }, filtered.map((wallet) => {
1028
+ const hasDeeplink = !!(wallet.mobileNative || wallet.mobileUniversal || wallet.desktopNative || wallet.desktopUniversal);
1029
+ return /* @__PURE__ */ React.createElement("li", {
1030
+ key: wallet.id
1031
+ }, /* @__PURE__ */ React.createElement("button", {
1032
+ type: "button",
1033
+ className: "ck-wallet-grid__item",
1034
+ onClick: /* @__PURE__ */ __name(() => {
1035
+ handleClickWallet(wallet);
1036
+ }, "onClick")
1037
+ }, wallet.imageUrl ? /* @__PURE__ */ React.createElement("img", {
1038
+ className: "ck-wallet-grid__icon",
1039
+ src: wallet.imageUrl,
1040
+ alt: ""
1041
+ }) : /* @__PURE__ */ React.createElement("span", {
1042
+ className: "ck-wallet-grid__icon-placeholder",
1043
+ "aria-hidden": "true"
1044
+ }), /* @__PURE__ */ React.createElement("span", {
1045
+ className: "ck-wallet-grid__name"
1046
+ }, /* @__PURE__ */ React.createElement("span", {
1047
+ className: "ck-wallet-grid__name-text"
1048
+ }, wallet.name), hasDeeplink && /* @__PURE__ */ React.createElement("img", {
1049
+ src: deeplink_default,
1050
+ alt: "",
1051
+ className: "ck-wallet-grid__wc-badge",
1052
+ "aria-hidden": "true"
1053
+ }))));
1054
+ }))));
1055
+ }, "WalletListView");
1056
+ var WalletQRView = /* @__PURE__ */ __name(({ wallet, qrUri }) => {
1057
+ const downloadUrl2 = wallet.appIos || wallet.appAndroid || wallet.homepage;
1058
+ const logoSrc = wallet.imageUrl;
1059
+ return /* @__PURE__ */ React.createElement("div", {
1060
+ className: "ck-view ck-view--qr"
1061
+ }, /* @__PURE__ */ React.createElement("div", {
1062
+ className: `ck-qr-frame ${!qrUri ? "ck-qr-frame--loading" : ""}`
1063
+ }, qrUri ? /* @__PURE__ */ React.createElement(QRCodeSVG3, {
1064
+ value: qrUri,
1065
+ size: 196,
1066
+ level: "H",
1067
+ ...logoSrc && {
1068
+ imageSettings: {
1069
+ src: logoSrc,
1070
+ width: 40,
1071
+ height: 40,
1072
+ excavate: true
1073
+ }
1074
+ }
1075
+ }) : /* @__PURE__ */ React.createElement("div", {
1076
+ className: "ck-qr-spinner",
1077
+ "aria-label": "Loading QR code"
1078
+ })), /* @__PURE__ */ React.createElement("p", {
1079
+ className: "ck-view__caption"
1080
+ }, "Scan this QR Code with your phone"), qrUri && /* @__PURE__ */ React.createElement("button", {
1081
+ type: "button",
1082
+ className: "ck-copy-link",
1083
+ onClick: /* @__PURE__ */ __name(() => {
1084
+ navigator.clipboard.writeText(qrUri);
1085
+ }, "onClick")
1086
+ }, "Copy link"), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
1087
+ className: "ck-download-card"
1088
+ }, /* @__PURE__ */ React.createElement("div", {
1089
+ className: "ck-download-card__text"
1090
+ }, /* @__PURE__ */ React.createElement("p", {
1091
+ className: "ck-download-card__title"
1092
+ }, "Don't have ", wallet.name, "?")), /* @__PURE__ */ React.createElement("a", {
1093
+ href: downloadUrl2,
1094
+ target: "_blank",
1095
+ rel: "nofollow noopener noreferrer",
1096
+ className: "ck-btn-primary"
1097
+ }, "Download")));
1098
+ }, "WalletQRView");
1099
+
1100
+ // src/ConnectModal.tsx
1101
+ var RECENT_KEY = "connect-kit:recent";
1102
+ var readRecentConnector = /* @__PURE__ */ __name(() => {
1103
+ try {
1104
+ return localStorage.getItem(RECENT_KEY);
1105
+ } catch {
1106
+ return null;
1107
+ }
1108
+ }, "readRecentConnector");
1109
+ var writeRecentConnector = /* @__PURE__ */ __name((id) => {
1110
+ try {
1111
+ localStorage.setItem(RECENT_KEY, id);
1112
+ } catch {
1113
+ }
1114
+ }, "writeRecentConnector");
1115
+ var fetchWCWalletList = /* @__PURE__ */ __name(async (projectId) => {
1116
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
1117
+ const all = [];
1118
+ let page = 1;
1119
+ const entries = 100;
1120
+ while (page <= 10) {
1121
+ const url = new URL("https://explorer-api.walletconnect.com/v3/wallets");
1122
+ url.searchParams.set("projectId", projectId);
1123
+ url.searchParams.set("entries", String(entries));
1124
+ url.searchParams.set("page", String(page));
1125
+ const res = await fetch(url.toString());
1126
+ if (!res.ok) throw new Error(`Failed to fetch wallet list: ${res.status}`);
1127
+ const json = await res.json();
1128
+ const listings = Object.values((_a = json.listings) != null ? _a : {});
1129
+ for (const w of listings) {
1130
+ all.push({
1131
+ id: w.id,
1132
+ name: w.name,
1133
+ imageUrl: (_e = (_d = (_b = w.image_url) == null ? void 0 : _b.md) != null ? _d : (_c = w.image_url) == null ? void 0 : _c.sm) != null ? _e : "",
1134
+ mobileNative: (_g = (_f = w.mobile) == null ? void 0 : _f.native) != null ? _g : "",
1135
+ mobileUniversal: (_i = (_h = w.mobile) == null ? void 0 : _h.universal) != null ? _i : "",
1136
+ desktopNative: (_k = (_j = w.desktop) == null ? void 0 : _j.native) != null ? _k : "",
1137
+ desktopUniversal: (_m = (_l = w.desktop) == null ? void 0 : _l.universal) != null ? _m : "",
1138
+ appIos: (_o = (_n = w.app) == null ? void 0 : _n.ios) != null ? _o : "",
1139
+ appAndroid: (_q = (_p = w.app) == null ? void 0 : _p.android) != null ? _q : "",
1140
+ homepage: (_r = w.homepage) != null ? _r : ""
1141
+ });
1142
+ }
1143
+ if (listings.length < entries || all.length >= json.total) break;
1144
+ page += 1;
1145
+ }
1146
+ return all;
1147
+ }, "fetchWCWalletList");
1148
+ var SelectorPane = /* @__PURE__ */ __name(({ connectors, selected, recentConnector, onSelect, onClose }) => {
1149
+ const hasRecent = recentConnector !== null && connectors.includes(recentConnector);
1150
+ const recentConnectors = hasRecent ? [
1151
+ recentConnector
1152
+ ] : [];
1153
+ const otherConnectors = connectors.filter((id) => id !== recentConnector);
1154
+ const downloadUrl2 = connectors.map((id) => CONNECTOR_META[id].downloadUrl).find((url) => url != null);
1155
+ return /* @__PURE__ */ React.createElement("div", {
1156
+ className: "ck-pane ck-pane--selector"
1157
+ }, /* @__PURE__ */ React.createElement("div", {
1158
+ className: "ck-pane__header"
1159
+ }, /* @__PURE__ */ React.createElement("h3", {
1160
+ className: "ck-pane__title"
1161
+ }, "Connect Wallet"), /* @__PURE__ */ React.createElement("button", {
1162
+ type: "button",
1163
+ className: "ck-btn-close ck-mobile-only",
1164
+ onClick: onClose,
1165
+ "aria-label": "Close"
1166
+ })), /* @__PURE__ */ React.createElement("div", {
1167
+ className: "ck-connector-list"
1168
+ }, hasRecent && /* @__PURE__ */ React.createElement(React.Fragment, null, recentConnectors.map((id) => /* @__PURE__ */ React.createElement(ConnectorItem, {
1169
+ key: id,
1170
+ id,
1171
+ isSelected: selected === id,
1172
+ isRecent: true,
1173
+ onSelect
1174
+ })), otherConnectors.length > 0 && /* @__PURE__ */ React.createElement("div", {
1175
+ className: "ck-divider"
1176
+ }, /* @__PURE__ */ React.createElement("span", null, "OR"))), otherConnectors.map((id) => /* @__PURE__ */ React.createElement(ConnectorItem, {
1177
+ key: id,
1178
+ id,
1179
+ isSelected: selected === id,
1180
+ isRecent: false,
1181
+ onSelect
1182
+ }))), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
1183
+ className: "ck-pane__footer"
1184
+ }, /* @__PURE__ */ React.createElement("a", {
1185
+ href: downloadUrl2,
1186
+ target: "_blank",
1187
+ rel: "nofollow noopener noreferrer",
1188
+ className: "ck-link-no-wallet"
1189
+ }, "I don't have a wallet >")));
1190
+ }, "SelectorPane");
1191
+ var ConnectorItem = /* @__PURE__ */ __name(({ id, isSelected, isRecent, onSelect }) => {
1192
+ const meta = CONNECTOR_META[id];
1193
+ return /* @__PURE__ */ React.createElement("button", {
1194
+ type: "button",
1195
+ className: `ck-connector-item ck-connector-item--${id.toLowerCase().replaceAll("_", "-")} ${isSelected ? "is-active" : ""}`,
1196
+ onClick: /* @__PURE__ */ __name(() => {
1197
+ onSelect(id);
1198
+ }, "onClick")
1199
+ }, meta.logoUrl ? /* @__PURE__ */ React.createElement("img", {
1200
+ className: "ck-connector-item__icon",
1201
+ src: meta.logoUrl,
1202
+ alt: "",
1203
+ "aria-hidden": "true"
1204
+ }) : /* @__PURE__ */ React.createElement("span", {
1205
+ className: "ck-connector-item__icon",
1206
+ "aria-hidden": "true"
1207
+ }), /* @__PURE__ */ React.createElement("span", {
1208
+ className: "ck-connector-item__label"
1209
+ }, meta.label), isRecent && /* @__PURE__ */ React.createElement("span", {
1210
+ className: "ck-connector-item__badge"
1211
+ }, "Recent"));
1212
+ }, "ConnectorItem");
1213
+ var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMaskExtension, connectorLogoMap, wcSubView, wcWalletList, wcWalletListLoading, wcWalletListSearch, wcSelectedWallet, wcFilterActive, onBack, onClose, onWCShowList, onWCSelectWallet, onWCSearchChange, onWCFilterToggle }) => {
1214
+ const title = getDetailTitle(selectedConnector, hasMetaMaskExtension, wcSubView, wcSelectedWallet);
1215
+ const showBack = selectedConnector !== null;
1216
+ return /* @__PURE__ */ React.createElement("div", {
1217
+ className: "ck-pane ck-pane--detail"
1218
+ }, /* @__PURE__ */ React.createElement("div", {
1219
+ className: "ck-pane__header"
1220
+ }, showBack && /* @__PURE__ */ React.createElement("button", {
1221
+ type: "button",
1222
+ className: "ck-btn-back",
1223
+ onClick: onBack,
1224
+ "aria-label": "Back"
1225
+ }), /* @__PURE__ */ React.createElement("h3", {
1226
+ className: "ck-pane__title"
1227
+ }, title), /* @__PURE__ */ React.createElement("button", {
1228
+ type: "button",
1229
+ className: "ck-btn-close",
1230
+ onClick: onClose,
1231
+ "aria-label": "Close"
1232
+ })), /* @__PURE__ */ React.createElement("div", {
1233
+ className: "ck-pane__body"
1234
+ }, !selectedConnector && /* @__PURE__ */ React.createElement(IdleView, null), (selectedConnector === "CREDIT_CONNECT" || selectedConnector === "CREDIT_WALLET") && /* @__PURE__ */ React.createElement(CreditWalletView, {
1235
+ connectorId: selectedConnector,
1236
+ qrUri
1237
+ }), selectedConnector === "METAMASK" && /* @__PURE__ */ React.createElement(MetaMaskView, {
1238
+ qrUri,
1239
+ hasExtension: hasMetaMaskExtension,
1240
+ logoUrl: connectorLogoMap.METAMASK
1241
+ }), selectedConnector === "WALLET_CONNECT" && /* @__PURE__ */ React.createElement(WalletConnectView, {
1242
+ subView: wcSubView,
1243
+ qrUri,
1244
+ logoUrl: connectorLogoMap.WALLET_CONNECT,
1245
+ walletList: wcWalletList,
1246
+ walletListLoading: wcWalletListLoading,
1247
+ walletListSearch: wcWalletListSearch,
1248
+ walletListFilterActive: wcFilterActive,
1249
+ selectedWallet: wcSelectedWallet,
1250
+ onShowList: onWCShowList,
1251
+ onSelectWallet: onWCSelectWallet,
1252
+ onSearchChange: onWCSearchChange,
1253
+ onFilterToggle: onWCFilterToggle
1254
+ })));
1255
+ }, "DetailPane");
1256
+ var getDetailTitle = /* @__PURE__ */ __name((connector, hasMetaMaskExtension, wcSubView, wcSelectedWallet) => {
1257
+ if (!connector) return "";
1258
+ if (connector === "WALLET_CONNECT") {
1259
+ if (wcSubView === "list") return "All Wallets";
1260
+ if (wcSubView === "wallet" && wcSelectedWallet) return `Scan with ${wcSelectedWallet.name}`;
1261
+ return "Scan with WalletConnect";
1262
+ }
1263
+ if (connector === "METAMASK" && hasMetaMaskExtension) return "MetaMask";
1264
+ return CONNECTOR_META[connector].detailTitle;
1265
+ }, "getDetailTitle");
1266
+ var ConnectModal = /* @__PURE__ */ __name((props) => {
1267
+ if (props.connectors.includes("CREDIT_WALLET") && props.connectors.includes("CREDIT_CONNECT")) {
1268
+ throw new Error("CREDIT_WALLET and CREDIT_CONNECT cannot be used together");
1269
+ }
1270
+ if (!props.open) return null;
1271
+ return /* @__PURE__ */ React.createElement(ConnectModalInner, props);
1272
+ }, "ConnectModal");
1273
+ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, onClose, onLog, wcProjectId }) => {
1274
+ var _a;
1275
+ const [selectedConnector, setSelectedConnector] = useState(null);
1276
+ const [qrUriMap, setQrUriMap] = useState({});
1277
+ const pendingQrConnectorRef = useRef2(null);
1278
+ const [recentConnector, setRecentConnector] = useState(null);
1279
+ const [hasMetaMaskExtension, setHasMetaMaskExtension] = useState(false);
1280
+ const [wcSubView, setWcSubView] = useState("qr");
1281
+ const [wcWalletList, setWcWalletList] = useState([]);
1282
+ const [wcWalletListLoading, setWcWalletListLoading] = useState(false);
1283
+ const [wcWalletListSearch, setWcWalletListSearch] = useState("");
1284
+ const [wcFilterActive, setWcFilterActive] = useState(false);
1285
+ const [wcSelectedWallet, setWcSelectedWallet] = useState(null);
1286
+ const wcLoadedRef = useRef2(false);
1287
+ const handleQrUri = useCallback2((uri) => {
1288
+ if (uri) {
1289
+ const id = pendingQrConnectorRef.current;
1290
+ if (id) setQrUriMap((prev) => ({
1291
+ ...prev,
1292
+ [id]: uri
1293
+ }));
1294
+ }
1295
+ }, []);
1296
+ const handleConnect = useCallback2((result) => {
1297
+ onConnect(result);
1298
+ onClose();
1299
+ }, [
1300
+ onConnect,
1301
+ onClose
1302
+ ]);
1303
+ const handleError = useCallback2((error, connectorId) => {
1304
+ onLog == null ? void 0 : onLog(`[connect-kit] connection failed (${connectorId}): ${error.message}`, error);
1305
+ setSelectedConnector(null);
1306
+ setQrUriMap((prev) => {
1307
+ const next = {
1308
+ ...prev
1309
+ };
1310
+ delete next[connectorId];
1311
+ return next;
1312
+ });
1313
+ setWcSubView("qr");
1314
+ setWcSelectedWallet(null);
1315
+ }, [
1316
+ onLog
1317
+ ]);
1318
+ const { triggerConnect, cancelConnect } = useWagmiConnect({
1319
+ onConnect: handleConnect,
1320
+ onError: handleError,
1321
+ onQrUri: handleQrUri
1322
+ });
1323
+ const wagmiConfig = useConfig2();
1324
+ const connectorLogoMap = useMemo2(() => {
1325
+ const map = {};
1326
+ for (const [connectorId, wagmiId] of Object.entries(WAGMI_CONNECTOR_ID)) {
1327
+ const wagmiConnector = wagmiConfig.connectors.find((c) => c.id === wagmiId);
1328
+ if (wagmiConnector == null ? void 0 : wagmiConnector.icon) map[connectorId] = wagmiConnector.icon;
1329
+ }
1330
+ return map;
1331
+ }, [
1332
+ wagmiConfig.connectors
1333
+ ]);
1334
+ useEffect4(() => {
1335
+ setRecentConnector(readRecentConnector());
1336
+ setHasMetaMaskExtension(detectMetaMaskExtension());
1337
+ }, []);
1338
+ useEffect4(() => {
1339
+ if (!open) {
1340
+ setSelectedConnector(null);
1341
+ setQrUriMap({});
1342
+ pendingQrConnectorRef.current = null;
1343
+ setWcSubView("qr");
1344
+ setWcWalletListSearch("");
1345
+ setWcFilterActive(false);
1346
+ setWcSelectedWallet(null);
1347
+ cancelConnect();
1348
+ }
1349
+ }, [
1350
+ open,
1351
+ cancelConnect
1352
+ ]);
1353
+ const loadWCWalletList = useCallback2(async (projectId) => {
1354
+ if (wcLoadedRef.current) return;
1355
+ wcLoadedRef.current = true;
1356
+ setWcWalletListLoading(true);
1357
+ try {
1358
+ const list = await fetchWCWalletList(projectId);
1359
+ setWcWalletList(list);
1360
+ } catch {
1361
+ wcLoadedRef.current = false;
1362
+ } finally {
1363
+ setWcWalletListLoading(false);
1364
+ }
1365
+ }, []);
1366
+ const handleSelectConnector = useCallback2((id) => {
1367
+ if (id === selectedConnector) return;
1368
+ pendingQrConnectorRef.current = id;
1369
+ setSelectedConnector(id);
1370
+ setWcSubView("qr");
1371
+ setWcSelectedWallet(null);
1372
+ writeRecentConnector(id);
1373
+ setRecentConnector(id);
1374
+ if (id === "WALLET_CONNECT" && wcProjectId) {
1375
+ loadWCWalletList(wcProjectId);
1376
+ }
1377
+ cancelConnect();
1378
+ triggerConnect(id);
1379
+ }, [
1380
+ selectedConnector,
1381
+ triggerConnect,
1382
+ cancelConnect,
1383
+ wcProjectId,
1384
+ loadWCWalletList
1385
+ ]);
1386
+ const handleWCShowList = useCallback2(() => {
1387
+ setWcSubView("list");
1388
+ }, []);
1389
+ const handleWCSelectWallet = useCallback2((wallet) => {
1390
+ setWcSelectedWallet(wallet);
1391
+ setWcSubView("wallet");
1392
+ }, []);
1393
+ const handleWCFilterToggle = useCallback2(() => {
1394
+ setWcFilterActive((prev) => !prev);
1395
+ }, []);
1396
+ const handleBack = useCallback2(() => {
1397
+ if (selectedConnector === "WALLET_CONNECT") {
1398
+ if (wcSubView === "wallet") {
1399
+ setWcSelectedWallet(null);
1400
+ setWcSubView("list");
1401
+ return;
1402
+ }
1403
+ if (wcSubView === "list") {
1404
+ setWcSubView("qr");
1405
+ return;
1406
+ }
1407
+ }
1408
+ pendingQrConnectorRef.current = null;
1409
+ setSelectedConnector(null);
1410
+ cancelConnect();
1411
+ }, [
1412
+ selectedConnector,
1413
+ wcSubView,
1414
+ cancelConnect
1415
+ ]);
1416
+ return /* @__PURE__ */ React.createElement("div", {
1417
+ className: "ck-root"
1418
+ }, /* @__PURE__ */ React.createElement("div", {
1419
+ className: "ck-overlay",
1420
+ onClick: onClose
1421
+ }), /* @__PURE__ */ React.createElement("div", {
1422
+ className: `ck-modal${selectedConnector ? " ck-modal--has-detail" : ""}`,
1423
+ role: "dialog",
1424
+ "aria-modal": "true",
1425
+ "aria-label": "Connect Wallet"
1426
+ }, /* @__PURE__ */ React.createElement(SelectorPane, {
1427
+ connectors,
1428
+ selected: selectedConnector,
1429
+ recentConnector,
1430
+ onSelect: handleSelectConnector,
1431
+ onClose
1432
+ }), /* @__PURE__ */ React.createElement(DetailPane, {
1433
+ selectedConnector,
1434
+ qrUri: selectedConnector ? (_a = qrUriMap[selectedConnector]) != null ? _a : null : null,
1435
+ hasMetaMaskExtension,
1436
+ connectorLogoMap,
1437
+ wcSubView,
1438
+ wcWalletList,
1439
+ wcWalletListLoading,
1440
+ wcWalletListSearch,
1441
+ wcFilterActive,
1442
+ wcSelectedWallet,
1443
+ onBack: handleBack,
1444
+ onClose,
1445
+ onWCShowList: handleWCShowList,
1446
+ onWCSelectWallet: handleWCSelectWallet,
1447
+ onWCSearchChange: setWcWalletListSearch,
1448
+ onWCFilterToggle: handleWCFilterToggle
1449
+ })));
1450
+ }, "ConnectModalInner");
1451
+
1452
+ // ../../node_modules/.pnpm/@wagmi+core@2.22.1_@tanstack+query-core@5.100.9_@types+react@18.3.20_react@18.3.1_types_b6cc874872911bd30e0c8a5ffb262d86/node_modules/@wagmi/core/dist/esm/connectors/createConnector.js
1453
+ function createConnector(createConnectorFn) {
1454
+ return createConnectorFn;
1455
+ }
1456
+ __name(createConnector, "createConnector");
1457
+
1458
+ // src/creditConnectConnector.ts
1459
+ import { DappSessionManager } from "@gluwa/credit-connect-sdk/dapp";
1460
+ var CONNECTOR_ID = "credit-connect";
1461
+ var CONNECTOR_NAME = "Credit Wallet";
1462
+ var CONNECTOR_TYPE = "credit-connect";
1463
+ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
1464
+ let manager = null;
1465
+ let selectedChainId = null;
1466
+ let connectPromise = null;
1467
+ let provider = null;
1468
+ let isLocalDisconnect = false;
1469
+ let emitWagmiMessage = null;
1470
+ let emitWagmiDisconnect = null;
1471
+ const providerListeners = /* @__PURE__ */ new Map();
1472
+ const emitProviderEvent = /* @__PURE__ */ __name((event, ...args) => {
1473
+ const listeners = providerListeners.get(event);
1474
+ if (listeners) for (const fn of listeners) fn(...args);
1475
+ }, "emitProviderEvent");
1476
+ const getCurrentSession = /* @__PURE__ */ __name(() => {
1477
+ if (!manager || manager.state.status !== "CONNECTED" || !manager.state.session) return null;
1478
+ return manager.state.session;
1479
+ }, "getCurrentSession");
1480
+ const getEvmAddressInfo = /* @__PURE__ */ __name((session) => session.addressInfoList.filter((info) => info.networkType === "eip155"), "getEvmAddressInfo");
1481
+ const getChecksummedAccounts = /* @__PURE__ */ __name((session) => getEvmAddressInfo(session).map((info) => getAddress(info.address)), "getChecksummedAccounts");
1482
+ const resetState = /* @__PURE__ */ __name(() => {
1483
+ connectPromise = null;
1484
+ selectedChainId = null;
1485
+ }, "resetState");
1486
+ const createManagerIfNeeded = /* @__PURE__ */ __name(() => {
1487
+ if (manager) return manager;
1488
+ manager = new DappSessionManager({
1489
+ projectKey: options.projectKey,
1490
+ serverUrl: options.serverUrl,
1491
+ storage: options.storage,
1492
+ e2ee: options.e2ee,
1493
+ createHub: options.createHub,
1494
+ enableReconnect: true,
1495
+ autoInit: true
1496
+ });
1497
+ manager.on("changeState", (state) => {
1498
+ var _a;
1499
+ if (state.status === "CONNECTING" && state.connectingPayload) {
1500
+ (_a = options.onDisplayUri) == null ? void 0 : _a.call(options, state.connectingPayload);
1501
+ emitWagmiMessage == null ? void 0 : emitWagmiMessage("display_uri", state.connectingPayload);
1502
+ }
1503
+ if (state.status === "DISCONNECTED" && !isLocalDisconnect) {
1504
+ resetState();
1505
+ emitProviderEvent("disconnect");
1506
+ emitWagmiDisconnect == null ? void 0 : emitWagmiDisconnect();
1507
+ }
1508
+ });
1509
+ return manager;
1510
+ }, "createManagerIfNeeded");
1511
+ const ensureManagerInitialized = /* @__PURE__ */ __name(async () => {
1512
+ const m = createManagerIfNeeded();
1513
+ if (m.state.status === "PENDING") {
1514
+ await m.initSession();
1515
+ return m;
1516
+ }
1517
+ if (m.state.status === "INITIALIZING") {
1518
+ await new Promise((resolve) => {
1519
+ const unsub = m.on("changeState", (state) => {
1520
+ if (state.status !== "INITIALIZING") {
1521
+ unsub();
1522
+ resolve();
1523
+ }
1524
+ });
1525
+ });
1526
+ }
1527
+ return m;
1528
+ }, "ensureManagerInitialized");
1529
+ return createConnector((config) => {
1530
+ emitWagmiMessage = /* @__PURE__ */ __name((type, data) => {
1531
+ config.emitter.emit("message", {
1532
+ type,
1533
+ data
1534
+ });
1535
+ }, "emitWagmiMessage");
1536
+ emitWagmiDisconnect = /* @__PURE__ */ __name(() => {
1537
+ config.emitter.emit("disconnect");
1538
+ }, "emitWagmiDisconnect");
1539
+ return {
1540
+ id: CONNECTOR_ID,
1541
+ name: CONNECTOR_NAME,
1542
+ type: CONNECTOR_TYPE,
1543
+ async setup() {
1544
+ await ensureManagerInitialized();
1545
+ },
1546
+ async connect(parameters) {
1547
+ var _a;
1548
+ try {
1549
+ const m = createManagerIfNeeded();
1550
+ if (m.state.status === "INITIALIZING") {
1551
+ await new Promise((resolve) => {
1552
+ const unsub = m.on("changeState", (state) => {
1553
+ if (state.status !== "INITIALIZING") {
1554
+ unsub();
1555
+ resolve();
1556
+ }
1557
+ });
1558
+ });
1559
+ }
1560
+ if (parameters == null ? void 0 : parameters.isReconnecting) {
1561
+ const session2 = getCurrentSession();
1562
+ if (!session2) throw new Error("No active session to reconnect");
1563
+ const accounts2 = getChecksummedAccounts(session2);
1564
+ if (accounts2.length === 0) throw new Error("No EVM address found");
1565
+ const chainId2 = Number.parseInt(getEvmAddressInfo(session2)[0].networkIdentifier, 10);
1566
+ if (!Number.isFinite(chainId2)) throw new Error(`Invalid chainId: ${chainId2}`);
1567
+ selectedChainId = chainId2;
1568
+ return {
1569
+ accounts: accounts2,
1570
+ chainId: chainId2
1571
+ };
1572
+ }
1573
+ if (m.state.status === "CONNECTING" && m.state.connectingPayload) {
1574
+ (_a = options.onDisplayUri) == null ? void 0 : _a.call(options, m.state.connectingPayload);
1575
+ if (!connectPromise) {
1576
+ connectPromise = new Promise((resolve) => {
1577
+ const unsub = m.on("changeState", (state) => {
1578
+ if (state.status === "CONNECTED") {
1579
+ unsub();
1580
+ resolve(true);
1581
+ } else if (state.status === "DISCONNECTED") {
1582
+ unsub();
1583
+ resolve(false);
1584
+ }
1585
+ });
1586
+ });
1587
+ }
1588
+ }
1589
+ if (m.state.status !== "CONNECTED") {
1590
+ if (!connectPromise) {
1591
+ if (m.state.status !== "DISCONNECTED") {
1592
+ throw new Error(`Cannot connect from ${m.state.status} state`);
1593
+ }
1594
+ connectPromise = m.connectNewSession();
1595
+ }
1596
+ const connected = await connectPromise;
1597
+ connectPromise = null;
1598
+ if (!connected) throw new Error("Credit Connect session failed");
1599
+ }
1600
+ const session = getCurrentSession();
1601
+ if (!session) throw new Error("Credit Connect session failed");
1602
+ const accounts = getChecksummedAccounts(session);
1603
+ if (accounts.length === 0) throw new Error("No EVM address found");
1604
+ const chainId = Number.parseInt(getEvmAddressInfo(session)[0].networkIdentifier, 10);
1605
+ if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
1606
+ selectedChainId = chainId;
1607
+ return {
1608
+ accounts,
1609
+ chainId
1610
+ };
1611
+ } catch (error) {
1612
+ resetState();
1613
+ throw error;
1614
+ }
1615
+ },
1616
+ async switchChain({ chainId }) {
1617
+ const session = getCurrentSession();
1618
+ if (!session) throw new Error("No active session");
1619
+ const supported = getEvmAddressInfo(session).some((info) => Number.parseInt(info.networkIdentifier, 10) === chainId);
1620
+ if (!supported) {
1621
+ const err = new Error(`Unsupported chain: ${chainId}`);
1622
+ err.code = 4902;
1623
+ throw err;
1624
+ }
1625
+ selectedChainId = chainId;
1626
+ config.emitter.emit("change", {
1627
+ chainId
1628
+ });
1629
+ const chain = config.chains.find((c) => c.id === chainId);
1630
+ if (!chain) throw new Error(`Chain ${chainId} not in config`);
1631
+ return chain;
1632
+ },
1633
+ async isAuthorized() {
1634
+ await ensureManagerInitialized();
1635
+ const session = getCurrentSession();
1636
+ if (!session) return false;
1637
+ return session.addressInfoList.some((info) => info.networkType === "eip155");
1638
+ },
1639
+ async disconnect() {
1640
+ isLocalDisconnect = true;
1641
+ try {
1642
+ if ((manager == null ? void 0 : manager.state.status) === "CONNECTED") {
1643
+ await manager.disconnectSession();
1644
+ }
1645
+ } finally {
1646
+ isLocalDisconnect = false;
1647
+ }
1648
+ resetState();
1649
+ config.emitter.emit("disconnect");
1650
+ },
1651
+ async getAccounts() {
1652
+ await ensureManagerInitialized();
1653
+ const session = getCurrentSession();
1654
+ if (!session) return [];
1655
+ return getChecksummedAccounts(session);
1656
+ },
1657
+ async getChainId() {
1658
+ await ensureManagerInitialized();
1659
+ const session = getCurrentSession();
1660
+ if (!session) throw new Error("No active session");
1661
+ if (selectedChainId !== null) return selectedChainId;
1662
+ const evmAddressInfo = getEvmAddressInfo(session);
1663
+ if (evmAddressInfo.length === 0) throw new Error("No EVM address found");
1664
+ const chainId = Number.parseInt(evmAddressInfo[0].networkIdentifier, 10);
1665
+ if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
1666
+ selectedChainId = chainId;
1667
+ return chainId;
1668
+ },
1669
+ async getProvider() {
1670
+ if (provider) return provider;
1671
+ await ensureManagerInitialized();
1672
+ provider = {
1673
+ request: /* @__PURE__ */ __name(async (args) => {
1674
+ const { method, params } = args;
1675
+ const session = getCurrentSession();
1676
+ const getSelectedAddressInfo = /* @__PURE__ */ __name((address) => {
1677
+ if (!session) throw new Error("No active session");
1678
+ const evmInfo = getEvmAddressInfo(session);
1679
+ if (evmInfo.length === 0) throw new Error("No EVM address found");
1680
+ if (!address) return evmInfo[0];
1681
+ const found = evmInfo.find((info) => info.address.toLowerCase() === address.toLowerCase());
1682
+ if (!found) throw new Error(`Address not in session: ${address}`);
1683
+ return found;
1684
+ }, "getSelectedAddressInfo");
1685
+ if (method === "eth_accounts") {
1686
+ if (!session) return [];
1687
+ return getChecksummedAccounts(session);
1688
+ }
1689
+ if (method === "eth_chainId") {
1690
+ if (!session) throw new Error("No active session");
1691
+ if (selectedChainId !== null) return `0x${selectedChainId.toString(16)}`;
1692
+ const evmInfo = getEvmAddressInfo(session);
1693
+ if (evmInfo.length === 0) throw new Error("No EVM address found");
1694
+ const chainId = Number.parseInt(evmInfo[0].networkIdentifier, 10);
1695
+ if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
1696
+ selectedChainId = chainId;
1697
+ return `0x${chainId.toString(16)}`;
1698
+ }
1699
+ if (method === "wallet_switchEthereumChain") {
1700
+ const [{ chainId: rawChainId }] = params != null ? params : [];
1701
+ if (!rawChainId) throw new Error("wallet_switchEthereumChain missing chainId param");
1702
+ const chainId = Number.parseInt(rawChainId, 16);
1703
+ if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${rawChainId}`);
1704
+ if (!session) throw new Error("No active session");
1705
+ const supported = getEvmAddressInfo(session).some((info) => Number.parseInt(info.networkIdentifier, 10) === chainId);
1706
+ if (!supported) {
1707
+ const err = new Error(`Unsupported chain: ${chainId}`);
1708
+ err.code = 4902;
1709
+ throw err;
1710
+ }
1711
+ selectedChainId = chainId;
1712
+ config.emitter.emit("change", {
1713
+ chainId
1714
+ });
1715
+ return null;
1716
+ }
1717
+ if (method === "personal_sign") {
1718
+ const [messageParam, addressParam] = params != null ? params : [];
1719
+ const message = typeof messageParam === "string" ? messageParam : String(messageParam != null ? messageParam : "");
1720
+ const address = typeof addressParam === "string" ? addressParam : void 0;
1721
+ const addressInfo = getSelectedAddressInfo(address);
1722
+ const response = await (session == null ? void 0 : session.jsonRpc.request("signMessage", {
1723
+ message,
1724
+ addressInfo
1725
+ }));
1726
+ return response == null ? void 0 : response.signature;
1727
+ }
1728
+ if (method === "eth_sign") {
1729
+ const [addressParam, messageParam] = params != null ? params : [];
1730
+ const address = typeof addressParam === "string" ? addressParam : void 0;
1731
+ const message = typeof messageParam === "string" ? messageParam : String(messageParam != null ? messageParam : "");
1732
+ const addressInfo = getSelectedAddressInfo(address);
1733
+ const response = await (session == null ? void 0 : session.jsonRpc.request("signMessage", {
1734
+ message,
1735
+ addressInfo
1736
+ }));
1737
+ return response == null ? void 0 : response.signature;
1738
+ }
1739
+ if (method === "eth_signTypedData" || method === "eth_signTypedData_v4") {
1740
+ const [addressParam, typedDataParam] = params != null ? params : [];
1741
+ const address = typeof addressParam === "string" ? addressParam : void 0;
1742
+ const typedData = typeof typedDataParam === "string" ? typedDataParam : JSON.stringify(typedDataParam != null ? typedDataParam : "");
1743
+ const addressInfo = getSelectedAddressInfo(address);
1744
+ const response = await (session == null ? void 0 : session.jsonRpc.request("signTypedData", {
1745
+ typedData,
1746
+ addressInfo
1747
+ }));
1748
+ return response == null ? void 0 : response.signature;
1749
+ }
1750
+ if (method === "eth_sendTransaction") {
1751
+ const [txParams] = params != null ? params : [];
1752
+ const addressInfo = getSelectedAddressInfo(txParams == null ? void 0 : txParams.from);
1753
+ const response = await (session == null ? void 0 : session.jsonRpc.request("sendTransaction", {
1754
+ addressInfo,
1755
+ to: txParams == null ? void 0 : txParams.to,
1756
+ value: txParams == null ? void 0 : txParams.value,
1757
+ data: txParams == null ? void 0 : txParams.data,
1758
+ gas: txParams == null ? void 0 : txParams.gas,
1759
+ gasPrice: txParams == null ? void 0 : txParams.gasPrice,
1760
+ maxFeePerGas: txParams == null ? void 0 : txParams.maxFeePerGas,
1761
+ maxPriorityFeePerGas: txParams == null ? void 0 : txParams.maxPriorityFeePerGas,
1762
+ nonce: txParams == null ? void 0 : txParams.nonce,
1763
+ chainId: txParams == null ? void 0 : txParams.chainId
1764
+ }));
1765
+ return response == null ? void 0 : response.txHash;
1766
+ }
1767
+ if (method === "credit_connect_send_message") {
1768
+ if (!session) throw new Error("No active session");
1769
+ const [messageParam] = params != null ? params : [];
1770
+ const message = typeof messageParam === "string" ? messageParam : JSON.stringify(messageParam != null ? messageParam : "");
1771
+ await session.msg.sendMessage(message);
1772
+ return true;
1773
+ }
1774
+ if (method === "credit_connect_jsonrpc_ping") {
1775
+ if (!session) throw new Error("No active session");
1776
+ return await session.jsonRpc.request("pingPong", {});
1777
+ }
1778
+ throw new Error(`Unsupported provider method: ${method}`);
1779
+ }, "request"),
1780
+ on: /* @__PURE__ */ __name((event, listener) => {
1781
+ if (!providerListeners.has(event)) providerListeners.set(event, /* @__PURE__ */ new Set());
1782
+ providerListeners.get(event).add(listener);
1783
+ return provider;
1784
+ }, "on"),
1785
+ removeListener: /* @__PURE__ */ __name((event, listener) => {
1786
+ var _a;
1787
+ (_a = providerListeners.get(event)) == null ? void 0 : _a.delete(listener);
1788
+ return provider;
1789
+ }, "removeListener")
1790
+ };
1791
+ return provider;
1792
+ },
1793
+ onAccountsChanged(accounts) {
1794
+ if (!accounts || accounts.length === 0) {
1795
+ config.emitter.emit("disconnect");
1796
+ return;
1797
+ }
1798
+ config.emitter.emit("change", {
1799
+ accounts: accounts.map(getAddress)
1800
+ });
1801
+ },
1802
+ onChainChanged(chainId) {
1803
+ const normalized = typeof chainId === "string" ? Number.parseInt(chainId, 16) : Number(chainId);
1804
+ if (!Number.isFinite(normalized)) return;
1805
+ selectedChainId = normalized;
1806
+ config.emitter.emit("change", {
1807
+ chainId: normalized
1808
+ });
1809
+ },
1810
+ onDisconnect() {
1811
+ resetState();
1812
+ config.emitter.emit("disconnect");
1813
+ }
1814
+ };
1815
+ });
1816
+ }, "creditConnectConnector");
1817
+ export {
1818
+ ConnectModal,
1819
+ creditConnectConnector
1820
+ };