@openfort/react 0.0.13 → 0.0.15
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/build/components/ConnectModal/ConnectWithMobile.d.ts +2 -0
- package/build/components/Openfort/context.d.ts +1 -1
- package/build/components/Openfort/types.d.ts +1 -0
- package/build/hooks/openfort/useConnectWithSiwe.d.ts +1 -1
- package/build/index.es.js +285 -176
- package/build/index.es.js.map +1 -1
- package/build/utils/useOnUserReturn.d.ts +1 -0
- package/build/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -22,7 +22,7 @@ export type ContextValue = {
|
|
|
22
22
|
open: boolean;
|
|
23
23
|
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
24
24
|
route: ValueOf<typeof routes>;
|
|
25
|
-
setRoute:
|
|
25
|
+
setRoute: (r: ValueOf<typeof routes>) => void;
|
|
26
26
|
connector: Connector;
|
|
27
27
|
setConnector: React.Dispatch<React.SetStateAction<Connector>>;
|
|
28
28
|
errorMessage: ErrorMessage;
|
|
@@ -15,6 +15,7 @@ export declare const routes: {
|
|
|
15
15
|
readonly ABOUT: "about";
|
|
16
16
|
readonly CONNECTORS: "connectors";
|
|
17
17
|
readonly MOBILECONNECTORS: "mobileConnectors";
|
|
18
|
+
readonly CONNECT_WITH_MOBILE: "connectWithMobile";
|
|
18
19
|
readonly CONNECT: "connect";
|
|
19
20
|
readonly DOWNLOAD: "download";
|
|
20
21
|
readonly PROFILE: "profile";
|
package/build/index.es.js
CHANGED
|
@@ -4,13 +4,13 @@ import { http, useConfig, useConnectors as useConnectors$1, useConnect as useCon
|
|
|
4
4
|
import { mainnet, polygon, optimism, arbitrum, sepolia } from 'wagmi/chains';
|
|
5
5
|
import { safe, injected, coinbaseWallet, walletConnect } from '@wagmi/connectors';
|
|
6
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
import React, { useEffect, createContext, useState, useMemo, useRef, useCallback, createElement, useLayoutEffect, useContext } from 'react';
|
|
8
|
-
import { detect } from 'detect-browser';
|
|
9
7
|
import { Buffer } from 'buffer';
|
|
8
|
+
import React, { useEffect, createContext, useState, useMemo, useRef, useCallback, createElement, useLayoutEffect, useContext } from 'react';
|
|
10
9
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
11
10
|
import { motion, AnimatePresence, MotionConfig } from 'framer-motion';
|
|
12
11
|
import styled$1, { css, keyframes } from 'styled-components';
|
|
13
12
|
import { createPortal } from 'react-dom';
|
|
13
|
+
import { detect } from 'detect-browser';
|
|
14
14
|
import { useTransition } from 'react-transition-state';
|
|
15
15
|
import ResizeObserver from 'resize-observer-polyfill';
|
|
16
16
|
import useMeasure from 'react-use-measure';
|
|
@@ -22,7 +22,7 @@ import { createSiweMessage } from 'viem/siwe';
|
|
|
22
22
|
import { signMessage } from '@wagmi/core';
|
|
23
23
|
import calculateEntropy from 'fast-password-entropy';
|
|
24
24
|
|
|
25
|
-
const OPENFORT_VERSION = '0.0.
|
|
25
|
+
const OPENFORT_VERSION = '0.0.15';
|
|
26
26
|
|
|
27
27
|
var OpenfortErrorType;
|
|
28
28
|
(function (OpenfortErrorType) {
|
|
@@ -298,76 +298,6 @@ var Logos = {
|
|
|
298
298
|
Openfort,
|
|
299
299
|
};
|
|
300
300
|
|
|
301
|
-
const truncateRegex = /^(0x[a-zA-Z0-9]{4})[a-zA-Z0-9]+([a-zA-Z0-9]{4})$/;
|
|
302
|
-
const truncateEthAddress = (address, separator = '••••') => {
|
|
303
|
-
if (!address)
|
|
304
|
-
return '';
|
|
305
|
-
const match = address.match(truncateRegex);
|
|
306
|
-
if (!match)
|
|
307
|
-
return address;
|
|
308
|
-
return `${match[1]}${separator}${match[2]}`;
|
|
309
|
-
};
|
|
310
|
-
const nFormatter = (num, digits = 2) => {
|
|
311
|
-
if (num < 10000)
|
|
312
|
-
return num.toFixed(2);
|
|
313
|
-
const lookup = [
|
|
314
|
-
{ value: 1, symbol: '' },
|
|
315
|
-
{ value: 1e3, symbol: 'k' },
|
|
316
|
-
{ value: 1e6, symbol: 'm' },
|
|
317
|
-
{ value: 1e9, symbol: 'b' },
|
|
318
|
-
{ value: 1e12, symbol: 't' },
|
|
319
|
-
{ value: 1e15, symbol: 'p' },
|
|
320
|
-
{ value: 1e18, symbol: 'e' },
|
|
321
|
-
];
|
|
322
|
-
const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
|
|
323
|
-
var item = lookup
|
|
324
|
-
.slice()
|
|
325
|
-
.reverse()
|
|
326
|
-
.find(function (item) {
|
|
327
|
-
return num >= item.value;
|
|
328
|
-
});
|
|
329
|
-
return item
|
|
330
|
-
? (num / item.value).toFixed(digits).replace(rx, '$1') + item.symbol
|
|
331
|
-
: '0';
|
|
332
|
-
};
|
|
333
|
-
const detectBrowser = () => {
|
|
334
|
-
var _a;
|
|
335
|
-
const browser = detect();
|
|
336
|
-
return (_a = browser === null || browser === void 0 ? void 0 : browser.name) !== null && _a !== void 0 ? _a : '';
|
|
337
|
-
};
|
|
338
|
-
const detectOS = () => {
|
|
339
|
-
var _a;
|
|
340
|
-
const browser = detect();
|
|
341
|
-
return (_a = browser === null || browser === void 0 ? void 0 : browser.os) !== null && _a !== void 0 ? _a : '';
|
|
342
|
-
};
|
|
343
|
-
const isIOS = () => {
|
|
344
|
-
const os = detectOS();
|
|
345
|
-
return os.toLowerCase().includes('ios');
|
|
346
|
-
};
|
|
347
|
-
const isAndroid = () => {
|
|
348
|
-
const os = detectOS();
|
|
349
|
-
return os.toLowerCase().includes('android');
|
|
350
|
-
};
|
|
351
|
-
const isMobile = () => {
|
|
352
|
-
return isAndroid() || isIOS();
|
|
353
|
-
};
|
|
354
|
-
function flattenChildren(children) {
|
|
355
|
-
const childrenArray = React.Children.toArray(children);
|
|
356
|
-
return childrenArray.reduce((flatChildren, child) => {
|
|
357
|
-
if (child.type === React.Fragment) {
|
|
358
|
-
return flatChildren.concat(flattenChildren(child.props.children));
|
|
359
|
-
}
|
|
360
|
-
flatChildren.push(child);
|
|
361
|
-
return flatChildren;
|
|
362
|
-
}, []);
|
|
363
|
-
}
|
|
364
|
-
const isWalletConnectConnector = (connectorId) => connectorId === 'walletConnect';
|
|
365
|
-
const isFamilyAccountsConnector = (connectorId) => connectorId === 'familyAccountsProvider';
|
|
366
|
-
const isCoinbaseWalletConnector = (connectorId) => connectorId === 'coinbaseWalletSDK';
|
|
367
|
-
const isPortoConnector = (connectorId) => connectorId === 'xyz.ithaca.porto';
|
|
368
|
-
const isSafeConnector = (connectorId) => connectorId === 'safe';
|
|
369
|
-
const isInjectedConnector = (connectorId) => connectorId === 'injected';
|
|
370
|
-
|
|
371
301
|
// Organised in alphabetical order by key
|
|
372
302
|
const walletConfigs = {
|
|
373
303
|
mock: {
|
|
@@ -382,9 +312,7 @@ const walletConfigs = {
|
|
|
382
312
|
ios: 'https://apps.apple.com/app/argent/id1358741926',
|
|
383
313
|
},
|
|
384
314
|
getWalletConnectDeeplink: (uri) => {
|
|
385
|
-
return
|
|
386
|
-
? uri
|
|
387
|
-
: `https://argent.link/app/wc?uri=${encodeURIComponent(uri)}`;
|
|
315
|
+
return `https://argent.link/app/wc?uri=${encodeURIComponent(uri)}`;
|
|
388
316
|
},
|
|
389
317
|
},
|
|
390
318
|
'coinbaseWallet, coinbaseWalletSDK': {
|
|
@@ -443,9 +371,7 @@ const walletConfigs = {
|
|
|
443
371
|
ios: 'https://family.co/download',
|
|
444
372
|
},
|
|
445
373
|
getWalletConnectDeeplink: (uri) => {
|
|
446
|
-
return
|
|
447
|
-
? uri
|
|
448
|
-
: `familywallet://wc?uri=${encodeURIComponent(uri)}`;
|
|
374
|
+
return `familywallet://wc?uri=${encodeURIComponent(uri)}`;
|
|
449
375
|
},
|
|
450
376
|
},
|
|
451
377
|
familyAccountsProvider: {
|
|
@@ -480,7 +406,7 @@ const walletConfigs = {
|
|
|
480
406
|
chrome: 'https://chrome.google.com/webstore/detail/frontier-wallet/kppfdiipphfccemcignhifpjkapfbihd',
|
|
481
407
|
},
|
|
482
408
|
getWalletConnectDeeplink: (uri) => {
|
|
483
|
-
return
|
|
409
|
+
return `frontier://wc?uri=${encodeURIComponent(uri)}`;
|
|
484
410
|
},
|
|
485
411
|
},
|
|
486
412
|
injected: {
|
|
@@ -504,9 +430,7 @@ const walletConfigs = {
|
|
|
504
430
|
edge: 'https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm',
|
|
505
431
|
},
|
|
506
432
|
getWalletConnectDeeplink: (uri) => {
|
|
507
|
-
return
|
|
508
|
-
? uri
|
|
509
|
-
: `https://metamask.app.link/wc?uri=${encodeURIComponent(uri)}`;
|
|
433
|
+
return `https://metamask.app.link/wc?uri=${encodeURIComponent(uri)}`;
|
|
510
434
|
},
|
|
511
435
|
},
|
|
512
436
|
'app.phantom': {
|
|
@@ -528,9 +452,7 @@ const walletConfigs = {
|
|
|
528
452
|
brave: 'https://rainbow.me/extension?utm_source=connectkit',
|
|
529
453
|
},
|
|
530
454
|
getWalletConnectDeeplink: (uri) => {
|
|
531
|
-
return
|
|
532
|
-
? uri
|
|
533
|
-
: `https://rnbwapp.com/wc?uri=${encodeURIComponent(uri)}&connector=connectkit`;
|
|
455
|
+
return `https://rnbwapp.com/wc?uri=${encodeURIComponent(uri)}&connector=connectkit`;
|
|
534
456
|
},
|
|
535
457
|
},
|
|
536
458
|
'io.rabby': {
|
|
@@ -551,9 +473,7 @@ const walletConfigs = {
|
|
|
551
473
|
android: 'https://play.google.com/store/apps/details?id=io.gnosis.safe',
|
|
552
474
|
},
|
|
553
475
|
getWalletConnectDeeplink: (uri) => {
|
|
554
|
-
return
|
|
555
|
-
? uri
|
|
556
|
-
: `https://gnosis-safe.io/wc?uri=${encodeURIComponent(uri)}`;
|
|
476
|
+
return `https://gnosis-safe.io/wc?uri=${encodeURIComponent(uri)}`;
|
|
557
477
|
},
|
|
558
478
|
},
|
|
559
479
|
'xyz.talisman': {
|
|
@@ -578,9 +498,7 @@ const walletConfigs = {
|
|
|
578
498
|
ios: 'https://apps.apple.com/app/trust-crypto-bitcoin-wallet/id1288339409',
|
|
579
499
|
},
|
|
580
500
|
getWalletConnectDeeplink(uri) {
|
|
581
|
-
return
|
|
582
|
-
? uri
|
|
583
|
-
: `https://link.trustwallet.com/wc?uri=${encodeURIComponent(uri)}`;
|
|
501
|
+
return `https://link.trustwallet.com/wc?uri=${encodeURIComponent(uri)}`;
|
|
584
502
|
},
|
|
585
503
|
},
|
|
586
504
|
infinityWallet: {
|
|
@@ -617,9 +535,7 @@ const walletConfigs = {
|
|
|
617
535
|
android: 'https://play.google.com/store/apps/details?id=io.horizontalsystems.bankwallet',
|
|
618
536
|
},
|
|
619
537
|
getWalletConnectDeeplink: (uri) => {
|
|
620
|
-
return
|
|
621
|
-
? uri
|
|
622
|
-
: `https://unstoppable.money/wc?uri=${encodeURIComponent(uri)}`;
|
|
538
|
+
return `https://unstoppable.money/wc?uri=${encodeURIComponent(uri)}`;
|
|
623
539
|
},
|
|
624
540
|
},
|
|
625
541
|
onto: {
|
|
@@ -632,9 +548,7 @@ const walletConfigs = {
|
|
|
632
548
|
website: 'https://onto.app/en/download/',
|
|
633
549
|
},
|
|
634
550
|
getWalletConnectDeeplink: (uri) => {
|
|
635
|
-
return
|
|
636
|
-
? uri
|
|
637
|
-
: `https://onto.app/wc?uri=${encodeURIComponent(uri)}`;
|
|
551
|
+
return `https://onto.app/wc?uri=${encodeURIComponent(uri)}`;
|
|
638
552
|
},
|
|
639
553
|
},
|
|
640
554
|
steak: {
|
|
@@ -647,9 +561,7 @@ const walletConfigs = {
|
|
|
647
561
|
website: 'https://steakwallet.fi/download',
|
|
648
562
|
},
|
|
649
563
|
getWalletConnectDeeplink: (uri) => {
|
|
650
|
-
return
|
|
651
|
-
? uri
|
|
652
|
-
: `https://links.steakwallet.fi/wc?uri=${encodeURIComponent(uri)}`;
|
|
564
|
+
return `https://links.steakwallet.fi/wc?uri=${encodeURIComponent(uri)}`;
|
|
653
565
|
},
|
|
654
566
|
},
|
|
655
567
|
ledger: {
|
|
@@ -663,9 +575,7 @@ const walletConfigs = {
|
|
|
663
575
|
ios: 'https://apps.apple.com/app/ledger-live-web3-wallet/id1361671700',
|
|
664
576
|
},
|
|
665
577
|
getWalletConnectDeeplink: (uri) => {
|
|
666
|
-
return
|
|
667
|
-
? uri
|
|
668
|
-
: `ledgerlive://wc?uri=${encodeURIComponent(uri)}`;
|
|
578
|
+
return `ledgerlive://wc?uri=${encodeURIComponent(uri)}`;
|
|
669
579
|
},
|
|
670
580
|
shouldDeeplinkDesktop: true,
|
|
671
581
|
},
|
|
@@ -679,9 +589,7 @@ const walletConfigs = {
|
|
|
679
589
|
website: 'https://zerion.io/',
|
|
680
590
|
},
|
|
681
591
|
getWalletConnectDeeplink: (uri) => {
|
|
682
|
-
return
|
|
683
|
-
? uri
|
|
684
|
-
: `https://app.zerion.io/wc?uri=${encodeURIComponent(uri)}`;
|
|
592
|
+
return `https://app.zerion.io/wc?uri=${encodeURIComponent(uri)}`;
|
|
685
593
|
},
|
|
686
594
|
},
|
|
687
595
|
slope: {
|
|
@@ -695,9 +603,7 @@ const walletConfigs = {
|
|
|
695
603
|
website: 'https://slope.finance/',
|
|
696
604
|
},
|
|
697
605
|
getWalletConnectDeeplink: (uri) => {
|
|
698
|
-
return
|
|
699
|
-
? uri
|
|
700
|
-
: `https://slope.finance/app/wc?uri=${encodeURIComponent(uri)}`;
|
|
606
|
+
return `https://slope.finance/app/wc?uri=${encodeURIComponent(uri)}`;
|
|
701
607
|
},
|
|
702
608
|
},
|
|
703
609
|
tokenPocket: {
|
|
@@ -770,6 +676,7 @@ const routes = {
|
|
|
770
676
|
ABOUT: 'about',
|
|
771
677
|
CONNECTORS: 'connectors',
|
|
772
678
|
MOBILECONNECTORS: 'mobileConnectors',
|
|
679
|
+
CONNECT_WITH_MOBILE: 'connectWithMobile',
|
|
773
680
|
CONNECT: 'connect',
|
|
774
681
|
DOWNLOAD: 'download',
|
|
775
682
|
PROFILE: 'profile',
|
|
@@ -1188,7 +1095,7 @@ const CoreOpenfortProvider = ({ children, debugMode, onConnect, onDisconnect, ..
|
|
|
1188
1095
|
// will reset on logout
|
|
1189
1096
|
const { data: embeddedAccounts, refetch: fetchEmbeddedAccounts, isPending: isLoadingAccounts } = useQuery({
|
|
1190
1097
|
queryKey: ['openfortEmbeddedAccountsList'],
|
|
1191
|
-
queryFn: () => openfort.embeddedWallet.list(),
|
|
1098
|
+
queryFn: () => openfort.embeddedWallet.list({ limit: 100 }),
|
|
1192
1099
|
refetchOnMount: false,
|
|
1193
1100
|
refetchOnWindowFocus: false,
|
|
1194
1101
|
});
|
|
@@ -2488,6 +2395,76 @@ const Portal = (props) => {
|
|
|
2488
2395
|
return mounted ? createPortal(children, ref.current) : null;
|
|
2489
2396
|
};
|
|
2490
2397
|
|
|
2398
|
+
const truncateRegex = /^(0x[a-zA-Z0-9]{4})[a-zA-Z0-9]+([a-zA-Z0-9]{4})$/;
|
|
2399
|
+
const truncateEthAddress = (address, separator = '••••') => {
|
|
2400
|
+
if (!address)
|
|
2401
|
+
return '';
|
|
2402
|
+
const match = address.match(truncateRegex);
|
|
2403
|
+
if (!match)
|
|
2404
|
+
return address;
|
|
2405
|
+
return `${match[1]}${separator}${match[2]}`;
|
|
2406
|
+
};
|
|
2407
|
+
const nFormatter = (num, digits = 2) => {
|
|
2408
|
+
if (num < 10000)
|
|
2409
|
+
return num.toFixed(2);
|
|
2410
|
+
const lookup = [
|
|
2411
|
+
{ value: 1, symbol: '' },
|
|
2412
|
+
{ value: 1e3, symbol: 'k' },
|
|
2413
|
+
{ value: 1e6, symbol: 'm' },
|
|
2414
|
+
{ value: 1e9, symbol: 'b' },
|
|
2415
|
+
{ value: 1e12, symbol: 't' },
|
|
2416
|
+
{ value: 1e15, symbol: 'p' },
|
|
2417
|
+
{ value: 1e18, symbol: 'e' },
|
|
2418
|
+
];
|
|
2419
|
+
const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
|
|
2420
|
+
var item = lookup
|
|
2421
|
+
.slice()
|
|
2422
|
+
.reverse()
|
|
2423
|
+
.find(function (item) {
|
|
2424
|
+
return num >= item.value;
|
|
2425
|
+
});
|
|
2426
|
+
return item
|
|
2427
|
+
? (num / item.value).toFixed(digits).replace(rx, '$1') + item.symbol
|
|
2428
|
+
: '0';
|
|
2429
|
+
};
|
|
2430
|
+
const detectBrowser = () => {
|
|
2431
|
+
var _a;
|
|
2432
|
+
const browser = detect();
|
|
2433
|
+
return (_a = browser === null || browser === void 0 ? void 0 : browser.name) !== null && _a !== void 0 ? _a : '';
|
|
2434
|
+
};
|
|
2435
|
+
const detectOS = () => {
|
|
2436
|
+
var _a;
|
|
2437
|
+
const browser = detect();
|
|
2438
|
+
return (_a = browser === null || browser === void 0 ? void 0 : browser.os) !== null && _a !== void 0 ? _a : '';
|
|
2439
|
+
};
|
|
2440
|
+
const isIOS = () => {
|
|
2441
|
+
const os = detectOS();
|
|
2442
|
+
return os.toLowerCase().includes('ios');
|
|
2443
|
+
};
|
|
2444
|
+
const isAndroid = () => {
|
|
2445
|
+
const os = detectOS();
|
|
2446
|
+
return os.toLowerCase().includes('android');
|
|
2447
|
+
};
|
|
2448
|
+
const isMobile = () => {
|
|
2449
|
+
return isAndroid() || isIOS();
|
|
2450
|
+
};
|
|
2451
|
+
function flattenChildren(children) {
|
|
2452
|
+
const childrenArray = React.Children.toArray(children);
|
|
2453
|
+
return childrenArray.reduce((flatChildren, child) => {
|
|
2454
|
+
if (child.type === React.Fragment) {
|
|
2455
|
+
return flatChildren.concat(flattenChildren(child.props.children));
|
|
2456
|
+
}
|
|
2457
|
+
flatChildren.push(child);
|
|
2458
|
+
return flatChildren;
|
|
2459
|
+
}, []);
|
|
2460
|
+
}
|
|
2461
|
+
const isWalletConnectConnector = (connectorId) => connectorId === 'walletConnect';
|
|
2462
|
+
const isFamilyAccountsConnector = (connectorId) => connectorId === 'familyAccountsProvider';
|
|
2463
|
+
const isCoinbaseWalletConnector = (connectorId) => connectorId === 'coinbaseWalletSDK';
|
|
2464
|
+
const isPortoConnector = (connectorId) => connectorId === 'xyz.ithaca.porto';
|
|
2465
|
+
const isSafeConnector = (connectorId) => connectorId === 'safe';
|
|
2466
|
+
const isInjectedConnector = (connectorId) => connectorId === 'injected';
|
|
2467
|
+
|
|
2491
2468
|
var defaultTheme = {
|
|
2492
2469
|
mobileWidth: 560,
|
|
2493
2470
|
};
|
|
@@ -5031,6 +5008,8 @@ const Modal = ({ open, pages, pageId, positionInside, inline, demo, onClose, onB
|
|
|
5031
5008
|
return "Email Verification"; // TODO: Localize
|
|
5032
5009
|
case routes.SOCIAL_PROVIDERS:
|
|
5033
5010
|
return "Other socials"; // TODO: Localize
|
|
5011
|
+
case routes.LINK_EMAIL:
|
|
5012
|
+
return "Link your email"; // TODO: Localize
|
|
5034
5013
|
case routes.CONNECT:
|
|
5035
5014
|
if (shouldUseQrcode()) {
|
|
5036
5015
|
return isWalletConnectConnector((_a = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _a === void 0 ? void 0 : _a.id)
|
|
@@ -6221,7 +6200,7 @@ const ConnectorButton = styled(motion.button) `
|
|
|
6221
6200
|
display: block;
|
|
6222
6201
|
text-decoration: none;
|
|
6223
6202
|
`;
|
|
6224
|
-
|
|
6203
|
+
styled(motion.a) `
|
|
6225
6204
|
display: block;
|
|
6226
6205
|
text-decoration: none;
|
|
6227
6206
|
`;
|
|
@@ -6963,7 +6942,7 @@ const ConnectorList = () => {
|
|
|
6963
6942
|
const { lastConnectorId } = useLastConnector();
|
|
6964
6943
|
const familyConnector = useFamilyConnector();
|
|
6965
6944
|
const familyAccountsConnector = useFamilyAccountsConnector();
|
|
6966
|
-
let filteredWallets = wallets.filter((wallet) => wallet.id !== (familyAccountsConnector === null || familyAccountsConnector === void 0 ? void 0 : familyAccountsConnector.id));
|
|
6945
|
+
let filteredWallets = wallets.filter((wallet) => wallet.id !== (familyAccountsConnector === null || familyAccountsConnector === void 0 ? void 0 : familyAccountsConnector.id) && wallet.id !== embeddedWalletId);
|
|
6967
6946
|
if (familyConnector && isFamily()) {
|
|
6968
6947
|
filteredWallets = filteredWallets.filter((wallet) => wallet.id !== (familyConnector === null || familyConnector === void 0 ? void 0 : familyConnector.id));
|
|
6969
6948
|
}
|
|
@@ -6975,12 +6954,12 @@ const ConnectorList = () => {
|
|
|
6975
6954
|
...wallets.filter((wallet) => lastConnectorId === wallet.connector.id && wallet.id !== embeddedWalletId),
|
|
6976
6955
|
...wallets.filter((wallet) => lastConnectorId !== wallet.connector.id && wallet.id !== embeddedWalletId),
|
|
6977
6956
|
];
|
|
6978
|
-
return (jsxs(ScrollArea, { mobileDirection: 'horizontal', children: [
|
|
6957
|
+
return (jsxs(ScrollArea, { mobileDirection: 'horizontal', children: [filteredWallets.length === 0 && (jsx(Alert, { error: true, children: "No connectors found in Openfort config." })), filteredWallets.length > 0 && (jsx(ConnectorsContainer, { "$mobile": isMobile, "$totalResults": walletsToDisplay.length, children: filteredWallets.map((wallet) => jsx(ConnectorItem, { wallet: wallet, isRecent: wallet.id === lastConnectorId }, wallet.id)) }))] }));
|
|
6979
6958
|
};
|
|
6980
6959
|
const ConnectorItem = ({ wallet, isRecent, }) => {
|
|
6981
6960
|
var _a;
|
|
6982
6961
|
const { connect: { getUri }, } = useWeb3();
|
|
6983
|
-
const
|
|
6962
|
+
const wcUri = getUri();
|
|
6984
6963
|
const isMobile = useIsMobile();
|
|
6985
6964
|
const context = useOpenfort();
|
|
6986
6965
|
const { connect } = useConnect();
|
|
@@ -6995,7 +6974,7 @@ const ConnectorItem = ({ wallet, isRecent, }) => {
|
|
|
6995
6974
|
*/
|
|
6996
6975
|
let deeplink = (!wallet.isInstalled && isMobile) ||
|
|
6997
6976
|
(wallet.shouldDeeplinkDesktop && !isMobile)
|
|
6998
|
-
? (_a = wallet.getWalletConnectDeeplink) === null || _a === void 0 ? void 0 : _a.call(wallet,
|
|
6977
|
+
? (_a = wallet.getWalletConnectDeeplink) === null || _a === void 0 ? void 0 : _a.call(wallet, wcUri !== null && wcUri !== void 0 ? wcUri : '')
|
|
6999
6978
|
: undefined;
|
|
7000
6979
|
const redirectToMoreWallets = isMobile && isWalletConnectConnector(wallet.id);
|
|
7001
6980
|
// Safari requires opening popup on user gesture, so we connect immediately here
|
|
@@ -7007,10 +6986,12 @@ const ConnectorItem = ({ wallet, isRecent, }) => {
|
|
|
7007
6986
|
var _a, _b, _c;
|
|
7008
6987
|
return (jsxs(Fragment, { children: [jsx(ConnectorIcon, { "data-small": wallet.iconShouldShrink, "data-shape": wallet.iconShape, "data-background": redirectToMoreWallets, children: (_a = wallet.iconConnector) !== null && _a !== void 0 ? _a : wallet.icon }), jsxs(ConnectorLabel, { children: [isMobile ? (_b = wallet.shortName) !== null && _b !== void 0 ? _b : wallet.name : wallet.name, !((_c = context.uiConfig) === null || _c === void 0 ? void 0 : _c.hideRecentBadge) && isRecent && (jsx(RecentlyUsedTag, { children: jsx("span", { children: "Recent" }) }))] })] }));
|
|
7009
6988
|
};
|
|
7010
|
-
if (deeplink) {
|
|
7011
|
-
jsx(ConnectorAnchor, { href: deeplink, children: content() });
|
|
7012
|
-
}
|
|
7013
6989
|
return (jsx(ConnectorButton, { type: "button", disabled: context.route !== routes.CONNECTORS, onClick: () => {
|
|
6990
|
+
if (isMobile && deeplink) {
|
|
6991
|
+
context.setRoute(routes.CONNECT_WITH_MOBILE);
|
|
6992
|
+
context.setConnector({ id: wallet.id });
|
|
6993
|
+
return;
|
|
6994
|
+
}
|
|
7014
6995
|
if (redirectToMoreWallets) {
|
|
7015
6996
|
context.setRoute(routes.MOBILECONNECTORS);
|
|
7016
6997
|
}
|
|
@@ -7696,12 +7677,9 @@ const MobileConnectors = () => {
|
|
|
7696
7677
|
return false;
|
|
7697
7678
|
return true;
|
|
7698
7679
|
})) !== null && _a !== void 0 ? _a : [];
|
|
7699
|
-
const connectWallet = (
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
if (uri)
|
|
7703
|
-
window.location.href = uri;
|
|
7704
|
-
//if (uri) window.open(uri, '_blank');
|
|
7680
|
+
const connectWallet = (walletId) => {
|
|
7681
|
+
context.setRoute(routes.CONNECT_WITH_MOBILE);
|
|
7682
|
+
context.setConnector({ id: walletId });
|
|
7705
7683
|
};
|
|
7706
7684
|
return (jsx(PageContent, { style: { width: 312 }, children: jsxs(Container$7, { children: [jsx(ModalContent, { style: { paddingBottom: 0 }, children: jsx(ScrollArea, { height: 340, children: jsxs(WalletList, { "$disabled": !wcUri, children: [walletsIdsToDisplay
|
|
7707
7685
|
.sort(
|
|
@@ -7719,7 +7697,7 @@ const MobileConnectors = () => {
|
|
|
7719
7697
|
.map((walletId, i) => {
|
|
7720
7698
|
const wallet = walletConfigs[walletId];
|
|
7721
7699
|
const { name, shortName, iconConnector, icon } = wallet;
|
|
7722
|
-
return (jsxs(WalletItem, { onClick: () => connectWallet(
|
|
7700
|
+
return (jsxs(WalletItem, { onClick: () => connectWallet(walletId), style: {
|
|
7723
7701
|
animationDelay: `${i * 50}ms`,
|
|
7724
7702
|
}, children: [jsx(WalletIcon$1, { "$outline": true, children: iconConnector !== null && iconConnector !== void 0 ? iconConnector : icon }), jsx(WalletLabel, { children: shortName !== null && shortName !== void 0 ? shortName : name })] }, i));
|
|
7725
7703
|
}), jsxs(WalletItem, { onClick: openW3M, "$waiting": isOpenW3M, children: [jsx(WalletIcon$1, { style: { background: 'var(--ck-body-background-secondary)' }, children: isOpenW3M ? (jsx("div", { style: {
|
|
@@ -8915,7 +8893,7 @@ const ChainSelectList = ({ variant, }) => {
|
|
|
8915
8893
|
gap: 12,
|
|
8916
8894
|
color: ch.id === (chain === null || chain === void 0 ? void 0 : chain.id)
|
|
8917
8895
|
? 'var(--ck-dropdown-active-color, inherit)'
|
|
8918
|
-
: 'inherit'
|
|
8896
|
+
: 'var(--ck-dropdown-color, inherit)'
|
|
8919
8897
|
}, children: [jsxs(ChainLogoContainer, { children: [jsx(ChainLogoSpinner, { initial: { opacity: 0 }, animate: {
|
|
8920
8898
|
opacity: isPending && pendingChainId === ch.id ? 1 : 0,
|
|
8921
8899
|
}, transition: {
|
|
@@ -9427,6 +9405,7 @@ const ProviderInputInner = styled.div `
|
|
|
9427
9405
|
display: flex;
|
|
9428
9406
|
align-items: center;
|
|
9429
9407
|
justify-content: center;
|
|
9408
|
+
margin-top: 12px;
|
|
9430
9409
|
|
|
9431
9410
|
box-shadow: var(--ck-secondary-button-box-shadow);
|
|
9432
9411
|
background: var(--ck-secondary-button-background);
|
|
@@ -9489,7 +9468,7 @@ const ProvidersButton = styled.div `
|
|
|
9489
9468
|
}
|
|
9490
9469
|
|
|
9491
9470
|
&:first-of-type {
|
|
9492
|
-
${ButtonContainer} {
|
|
9471
|
+
${ButtonContainer}, ${ProviderInputInner} {
|
|
9493
9472
|
margin-top: 0;
|
|
9494
9473
|
}
|
|
9495
9474
|
}
|
|
@@ -10003,13 +9982,17 @@ const createSIWEMessage = (address, nonce, chainId) => createSiweMessage({
|
|
|
10003
9982
|
nonce,
|
|
10004
9983
|
});
|
|
10005
9984
|
|
|
9985
|
+
// This hook assumes wagmi is already connected to a wallet
|
|
9986
|
+
// It will use the connected wallet to sign the SIWE message and authenticate with Openfort
|
|
9987
|
+
// If there is a user already, it will link the wallet to the user
|
|
10006
9988
|
function useConnectWithSiwe() {
|
|
10007
9989
|
const { client, user, updateUser } = useOpenfortCore();
|
|
10008
9990
|
const { log } = useOpenfort();
|
|
10009
9991
|
const { address, connector } = useAccount();
|
|
10010
9992
|
const chainId = useChainId();
|
|
10011
9993
|
const config = useConfig();
|
|
10012
|
-
|
|
9994
|
+
useWallet$1((connector === null || connector === void 0 ? void 0 : connector.id) || "");
|
|
9995
|
+
const connectWithSiwe = useCallback(async ({ onError, onConnect, } = {}) => {
|
|
10013
9996
|
const connectorType = connector === null || connector === void 0 ? void 0 : connector.type;
|
|
10014
9997
|
const walletClientType = connector === null || connector === void 0 ? void 0 : connector.id;
|
|
10015
9998
|
if (!address || !connectorType || !walletClientType) {
|
|
@@ -10046,18 +10029,28 @@ function useConnectWithSiwe() {
|
|
|
10046
10029
|
}
|
|
10047
10030
|
catch (err) {
|
|
10048
10031
|
log("Failed to connect with SIWE", err);
|
|
10049
|
-
if (
|
|
10050
|
-
|
|
10032
|
+
if (!onError)
|
|
10033
|
+
return;
|
|
10034
|
+
let message = err instanceof Error ? err.message : err instanceof AxiosError ? err.message : String(err);
|
|
10035
|
+
if (message.includes("User rejected the request.")) {
|
|
10036
|
+
message = "User rejected the request.";
|
|
10037
|
+
}
|
|
10038
|
+
else if (message.includes("Invalid signature")) {
|
|
10039
|
+
message = "Invalid signature. Please try again.";
|
|
10040
|
+
}
|
|
10041
|
+
else if (message.includes("An error occurred when attempting to switch chain")) {
|
|
10042
|
+
message = "Failed to switch chain. Please switch your wallet to the correct network and try again.";
|
|
10051
10043
|
}
|
|
10052
10044
|
else {
|
|
10053
|
-
|
|
10045
|
+
message = "Failed to connect with SIWE.";
|
|
10054
10046
|
}
|
|
10047
|
+
onError(message, err instanceof AxiosError ? err.request.status : undefined);
|
|
10055
10048
|
}
|
|
10056
10049
|
}, [client, user, updateUser, log, address, chainId, config, connector]);
|
|
10057
10050
|
return connectWithSiwe;
|
|
10058
10051
|
}
|
|
10059
10052
|
|
|
10060
|
-
const states$
|
|
10053
|
+
const states$3 = {
|
|
10061
10054
|
CONNECTED: 'connected',
|
|
10062
10055
|
CONNECTING: 'connecting',
|
|
10063
10056
|
EXPIRING: 'expiring',
|
|
@@ -10106,10 +10099,10 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10106
10099
|
mutation: {
|
|
10107
10100
|
onMutate: (connector) => {
|
|
10108
10101
|
if (connector.connector) {
|
|
10109
|
-
setStatus(states$
|
|
10102
|
+
setStatus(states$3.CONNECTING);
|
|
10110
10103
|
}
|
|
10111
10104
|
else {
|
|
10112
|
-
setStatus(states$
|
|
10105
|
+
setStatus(states$3.UNAVAILABLE);
|
|
10113
10106
|
}
|
|
10114
10107
|
},
|
|
10115
10108
|
onError(err) {
|
|
@@ -10125,13 +10118,13 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10125
10118
|
// https://github.com/MetaMask/eth-rpc-errors/blob/main/src/error-constants.ts
|
|
10126
10119
|
switch (error.code) {
|
|
10127
10120
|
case -32002:
|
|
10128
|
-
setStatus(states$
|
|
10121
|
+
setStatus(states$3.NOTCONNECTED);
|
|
10129
10122
|
break;
|
|
10130
10123
|
case 4001:
|
|
10131
|
-
setStatus(states$
|
|
10124
|
+
setStatus(states$3.REJECTED);
|
|
10132
10125
|
break;
|
|
10133
10126
|
default:
|
|
10134
|
-
setStatus(states$
|
|
10127
|
+
setStatus(states$3.FAILED);
|
|
10135
10128
|
break;
|
|
10136
10129
|
}
|
|
10137
10130
|
}
|
|
@@ -10140,10 +10133,10 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10140
10133
|
if (error.message) {
|
|
10141
10134
|
switch (error.message) {
|
|
10142
10135
|
case 'User rejected request':
|
|
10143
|
-
setStatus(states$
|
|
10136
|
+
setStatus(states$3.REJECTED);
|
|
10144
10137
|
break;
|
|
10145
10138
|
default:
|
|
10146
|
-
setStatus(states$
|
|
10139
|
+
setStatus(states$3.FAILED);
|
|
10147
10140
|
break;
|
|
10148
10141
|
}
|
|
10149
10142
|
}
|
|
@@ -10151,7 +10144,7 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10151
10144
|
}
|
|
10152
10145
|
else if (data) {
|
|
10153
10146
|
if (!wallet) {
|
|
10154
|
-
setStatus(states$
|
|
10147
|
+
setStatus(states$3.FAILED);
|
|
10155
10148
|
throw console.error('No wallet found');
|
|
10156
10149
|
}
|
|
10157
10150
|
// If already has linked account, don't link again
|
|
@@ -10166,10 +10159,10 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10166
10159
|
console.error(error);
|
|
10167
10160
|
disconnect();
|
|
10168
10161
|
if (status === 409) {
|
|
10169
|
-
setStatus(states$
|
|
10162
|
+
setStatus(states$3.DUPLICATED);
|
|
10170
10163
|
}
|
|
10171
10164
|
else {
|
|
10172
|
-
setStatus(states$
|
|
10165
|
+
setStatus(states$3.FAILED);
|
|
10173
10166
|
}
|
|
10174
10167
|
},
|
|
10175
10168
|
onConnect: () => {
|
|
@@ -10207,8 +10200,8 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10207
10200
|
const [status, setStatus] = useState(forceState
|
|
10208
10201
|
? forceState
|
|
10209
10202
|
: !(wallet === null || wallet === void 0 ? void 0 : wallet.isInstalled)
|
|
10210
|
-
? states$
|
|
10211
|
-
: states$
|
|
10203
|
+
? states$3.UNAVAILABLE
|
|
10204
|
+
: states$3.CONNECTING);
|
|
10212
10205
|
const locales = useLocales({
|
|
10213
10206
|
CONNECTORNAME: walletInfo.name,
|
|
10214
10207
|
CONNECTORSHORTNAME: (_g = walletInfo.shortName) !== null && _g !== void 0 ? _g : walletInfo.name,
|
|
@@ -10222,12 +10215,12 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10222
10215
|
connect({ connector: wallet === null || wallet === void 0 ? void 0 : wallet.connector });
|
|
10223
10216
|
}
|
|
10224
10217
|
else {
|
|
10225
|
-
setStatus(states$
|
|
10218
|
+
setStatus(states$3.UNAVAILABLE);
|
|
10226
10219
|
}
|
|
10227
10220
|
};
|
|
10228
10221
|
let connectTimeout;
|
|
10229
10222
|
useEffect(() => {
|
|
10230
|
-
if (status === states$
|
|
10223
|
+
if (status === states$3.UNAVAILABLE)
|
|
10231
10224
|
return;
|
|
10232
10225
|
// UX: Give user time to see the UI before opening the extension
|
|
10233
10226
|
connectTimeout = setTimeout(runConnect, 600);
|
|
@@ -10263,25 +10256,25 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10263
10256
|
if (isWalletConnectConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector.id)) {
|
|
10264
10257
|
return (jsx(PageContent, { children: jsxs(Container$3, { children: [jsx(ModalHeading, { children: "Invalid State" }), jsx(ModalContent, { children: jsx(Alert, { children: "WalletConnect does not have an injection flow. This state should never happen." }) })] }) }));
|
|
10265
10258
|
}
|
|
10266
|
-
const hasError = status === states$
|
|
10259
|
+
const hasError = status === states$3.FAILED || status === states$3.REJECTED || status === states$3.DUPLICATED;
|
|
10267
10260
|
return (jsx(PageContent, { children: jsxs(Container$3, { children: [jsx(ConnectingContainer$1, { children: jsxs(ConnectingAnimation$1, { "$shake": hasError, "$circle": walletInfo.iconShape === 'circle', children: [jsx(AnimatePresence, { children: (hasError) && (jsx(RetryButton, { "aria-label": "Retry", initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 }, whileTap: { scale: 0.9 }, transition: { duration: 0.1 }, onClick: runConnect, children: jsx(RetryIconContainer, { children: jsx(Tooltip, { open: showTryAgainTooltip &&
|
|
10268
|
-
(hasError), message: locales.tryAgainQuestion, xOffset: -6, children: jsx(RetryIconCircle, {}) }) }) })) }), walletInfo.iconShape === 'circle' ? (jsx(CircleSpinner, { logo: status === states$
|
|
10261
|
+
(hasError), message: locales.tryAgainQuestion, xOffset: -6, children: jsx(RetryIconCircle, {}) }) }) })) }), walletInfo.iconShape === 'circle' ? (jsx(CircleSpinner, { logo: status === states$3.UNAVAILABLE ? (jsx("div", { style: {
|
|
10269
10262
|
transform: 'scale(1.14)',
|
|
10270
10263
|
position: 'relative',
|
|
10271
10264
|
width: '100%',
|
|
10272
|
-
}, children: walletInfo.icon })) : (jsx(Fragment, { children: walletInfo.icon })), smallLogo: walletInfo.iconShouldShrink, connecting: status === states$
|
|
10265
|
+
}, children: walletInfo.icon })) : (jsx(Fragment, { children: walletInfo.icon })), smallLogo: walletInfo.iconShouldShrink, connecting: status === states$3.CONNECTING, unavailable: status === states$3.UNAVAILABLE })) : (jsx(SquircleSpinner, { logo: status === states$3.UNAVAILABLE ? (jsx("div", { style: {
|
|
10273
10266
|
transform: 'scale(1.14)',
|
|
10274
10267
|
position: 'relative',
|
|
10275
10268
|
width: '100%',
|
|
10276
|
-
}, children: walletInfo.icon })) : (jsx(Fragment, { children: walletInfo.icon })), connecting: status === states$
|
|
10269
|
+
}, children: walletInfo.icon })) : (jsx(Fragment, { children: walletInfo.icon })), connecting: status === states$3.CONNECTING }))] }) }), jsx(ModalContentContainer, { children: jsxs(AnimatePresence, { initial: false, children: [status === states$3.FAILED && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { children: [jsxs(ModalH1, { "$error": true, children: [jsx(AlertIcon, {}), locales.injectionScreen_failed_h1] }), jsx(ModalBody, { children: locales.injectionScreen_failed_p })] }) }, states$3.FAILED)), status === states$3.REJECTED && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { style: {
|
|
10277
10270
|
paddingBottom: 28,
|
|
10278
|
-
}, children: [jsx(ModalH1, { children: locales.injectionScreen_rejected_h1 }), jsx(ModalBody, { children: locales.injectionScreen_rejected_p })] }) }, states$
|
|
10271
|
+
}, children: [jsx(ModalH1, { children: locales.injectionScreen_rejected_h1 }), jsx(ModalBody, { children: locales.injectionScreen_rejected_p })] }) }, states$3.REJECTED)), status === states$3.DUPLICATED && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { style: { paddingBottom: 28 }, children: [jsxs(ModalH1, { "$error": true, children: [jsx(AlertIcon, {}), locales.injectionScreen_failed_h1] }), jsx(ModalBody, { children: "This wallet is already linked to another player. Please try another wallet." })] }) }, states$3.DUPLICATED)), (status === states$3.CONNECTING || status === states$3.EXPIRING) && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { style: {
|
|
10279
10272
|
paddingBottom: 28,
|
|
10280
10273
|
}, children: [jsx(ModalH1, { children: wallet.connector.id === 'injected'
|
|
10281
10274
|
? locales.injectionScreen_connecting_injected_h1
|
|
10282
10275
|
: locales.injectionScreen_connecting_h1 }), jsx(ModalBody, { children: wallet.connector.id === 'injected'
|
|
10283
10276
|
? locales.injectionScreen_connecting_injected_p
|
|
10284
|
-
: locales.injectionScreen_connecting_p })] }) }, states$
|
|
10277
|
+
: locales.injectionScreen_connecting_p })] }) }, states$3.CONNECTING)), status === states$3.CONNECTED && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { children: [jsxs(ModalH1, { "$valid": true, children: [jsx(TickIcon, {}), " ", locales.injectionScreen_connected_h1] }), jsx(ModalBody, { children: locales.injectionScreen_connected_p })] }) }, states$3.CONNECTED)), status === states$3.NOTCONNECTED && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { children: [jsx(ModalH1, { children: locales.injectionScreen_notconnected_h1 }), jsx(ModalBody, { children: locales.injectionScreen_notconnected_p })] }) }, states$3.NOTCONNECTED)), status === states$3.UNAVAILABLE && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: !extensionUrl ? (jsxs(Fragment, { children: [jsxs(ModalContent, { style: { paddingBottom: 12 }, children: [jsx(ModalH1, { children: locales.injectionScreen_unavailable_h1 }), jsx(ModalBody, { children: locales.injectionScreen_unavailable_p })] }), !wallet.isInstalled && suggestedExtension && (jsxs(Button, { href: suggestedExtension === null || suggestedExtension === void 0 ? void 0 : suggestedExtension.url, icon: jsx(BrowserIcon, { browser: suggestedExtension === null || suggestedExtension === void 0 ? void 0 : suggestedExtension.name }), children: ["Install on ", suggestedExtension === null || suggestedExtension === void 0 ? void 0 : suggestedExtension.label] }))] })) : (jsxs(Fragment, { children: [jsxs(ModalContent, { style: { paddingBottom: 18 }, children: [jsx(ModalH1, { children: locales.injectionScreen_install_h1 }), jsx(ModalBody, { children: locales.injectionScreen_install_p })] }), !wallet.isInstalled && extensionUrl && (jsx(Button, { href: extensionUrl, icon: jsx(BrowserIcon, {}), children: locales.installTheExtension }))] })) }, states$3.UNAVAILABLE))] }) })] }) }));
|
|
10285
10278
|
};
|
|
10286
10279
|
|
|
10287
10280
|
const IconContainer$1 = styled(motion.div) `
|
|
@@ -10480,7 +10473,7 @@ const Loader = ({ header, description, icon, isError = false, isSuccess = false,
|
|
|
10480
10473
|
}, children: renderLogo() }), connecting: isLoading })] }) }), jsxs(TextWrapper, { children: [isLoading && (jsxs(Fragment, { children: [jsx(ModalH1, { children: "Loading, please wait" }), jsx(ModalBody, { children: description !== null && description !== void 0 ? description : header })] })), isSuccess && (jsxs(Fragment, { children: [jsxs(ModalH1, { "$valid": true, children: [jsx(TickIcon, {}), " ", header] }), jsx(ModalBody, { children: description })] })), isError && (jsxs(Fragment, { children: [jsx(ModalH1, { "$error": true, children: header }), jsx(ModalBody, { children: description })] }))] })] }));
|
|
10481
10474
|
};
|
|
10482
10475
|
|
|
10483
|
-
const states$
|
|
10476
|
+
const states$2 = {
|
|
10484
10477
|
INIT: "init",
|
|
10485
10478
|
REDIRECT: "redirect",
|
|
10486
10479
|
CONNECTING: "connecting",
|
|
@@ -10489,7 +10482,7 @@ const states$1 = {
|
|
|
10489
10482
|
const ConnectWithOAuth = ({}) => {
|
|
10490
10483
|
const { connector, setRoute, log } = useOpenfort();
|
|
10491
10484
|
const { client, user } = useOpenfortCore();
|
|
10492
|
-
const [status, setStatus] = useState(states$
|
|
10485
|
+
const [status, setStatus] = useState(states$2.INIT);
|
|
10493
10486
|
const [description, setDescription] = useState(undefined);
|
|
10494
10487
|
useEffect(() => {
|
|
10495
10488
|
(async () => {
|
|
@@ -10499,13 +10492,13 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10499
10492
|
const hasProvider = !!url.searchParams.get("openfortAuthProviderUI");
|
|
10500
10493
|
const provider = connector.id;
|
|
10501
10494
|
switch (status) {
|
|
10502
|
-
case states$
|
|
10495
|
+
case states$2.INIT:
|
|
10503
10496
|
if (hasProvider)
|
|
10504
|
-
setStatus(states$
|
|
10497
|
+
setStatus(states$2.CONNECTING);
|
|
10505
10498
|
else
|
|
10506
|
-
setTimeout(() => setStatus(states$
|
|
10499
|
+
setTimeout(() => setStatus(states$2.REDIRECT), 150); // UX: wait a bit before redirecting
|
|
10507
10500
|
break;
|
|
10508
|
-
case states$
|
|
10501
|
+
case states$2.CONNECTING:
|
|
10509
10502
|
const player = url.searchParams.get("player_id");
|
|
10510
10503
|
const accessToken = url.searchParams.get("access_token");
|
|
10511
10504
|
const refreshToken = url.searchParams.get("refresh_token");
|
|
@@ -10527,7 +10520,7 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10527
10520
|
refreshToken,
|
|
10528
10521
|
});
|
|
10529
10522
|
setRoute(routes.LOADING);
|
|
10530
|
-
case states$
|
|
10523
|
+
case states$2.REDIRECT:
|
|
10531
10524
|
if (hasProvider)
|
|
10532
10525
|
return;
|
|
10533
10526
|
const cleanURL = window.location.origin + window.location.pathname;
|
|
@@ -10572,7 +10565,7 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10572
10565
|
catch (e) {
|
|
10573
10566
|
console.error("Error during OAuth initialization:", e);
|
|
10574
10567
|
setRoute(routes.CONNECT);
|
|
10575
|
-
setStatus(states$
|
|
10568
|
+
setStatus(states$2.ERROR);
|
|
10576
10569
|
if (e instanceof Error) {
|
|
10577
10570
|
if (e.message.includes("not enabled")) {
|
|
10578
10571
|
setDescription(`The ${provider} provider is not enabled. Please contact support.`);
|
|
@@ -10586,13 +10579,13 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10586
10579
|
}
|
|
10587
10580
|
})();
|
|
10588
10581
|
}, [status]);
|
|
10589
|
-
return (jsx(PageContent, { children: jsx(Loader, { header: `Connecting with ${connector.id}`, icon: providersLogos[connector.id], isError: status === states$
|
|
10590
|
-
setStatus(states$
|
|
10582
|
+
return (jsx(PageContent, { children: jsx(Loader, { header: `Connecting with ${connector.id}`, icon: providersLogos[connector.id], isError: status === states$2.ERROR, description: description, onRetry: () => {
|
|
10583
|
+
setStatus(states$2.INIT);
|
|
10591
10584
|
setDescription(undefined);
|
|
10592
10585
|
} }) }));
|
|
10593
10586
|
};
|
|
10594
10587
|
|
|
10595
|
-
const states = {
|
|
10588
|
+
const states$1 = {
|
|
10596
10589
|
QRCODE: 'qrcode',
|
|
10597
10590
|
INJECTOR: 'injector',
|
|
10598
10591
|
};
|
|
@@ -10603,7 +10596,7 @@ const ConnectUsing = () => {
|
|
|
10603
10596
|
const isQrCode = !(wallet === null || wallet === void 0 ? void 0 : wallet.isInstalled) && (wallet === null || wallet === void 0 ? void 0 : wallet.getWalletConnectDeeplink);
|
|
10604
10597
|
// For OAuth connectors, we don't need to show the injector flow
|
|
10605
10598
|
const isOauth = context.connector.type === "oauth";
|
|
10606
|
-
const [status, setStatus] = useState(isQrCode ? states.QRCODE : states.INJECTOR);
|
|
10599
|
+
const [status, setStatus] = useState(isQrCode ? states$1.QRCODE : states$1.INJECTOR);
|
|
10607
10600
|
useEffect(() => {
|
|
10608
10601
|
const connector = context.connector;
|
|
10609
10602
|
context.log("ConnectUsing", { status, isQrCode, isOauth, connector });
|
|
@@ -10613,26 +10606,26 @@ const ConnectUsing = () => {
|
|
|
10613
10606
|
const checkProvider = async () => {
|
|
10614
10607
|
const res = await (wallet === null || wallet === void 0 ? void 0 : wallet.connector.getProvider());
|
|
10615
10608
|
if (!res) {
|
|
10616
|
-
setStatus(states.QRCODE);
|
|
10609
|
+
setStatus(states$1.QRCODE);
|
|
10617
10610
|
setTimeout(context.triggerResize, 10); // delay required here for modal to resize
|
|
10618
10611
|
}
|
|
10619
10612
|
};
|
|
10620
|
-
if (status === states.INJECTOR)
|
|
10613
|
+
if (status === states$1.INJECTOR)
|
|
10621
10614
|
checkProvider();
|
|
10622
10615
|
}, []);
|
|
10623
10616
|
if (isOauth)
|
|
10624
10617
|
return jsx(ConnectWithOAuth, {});
|
|
10625
10618
|
if (!wallet)
|
|
10626
10619
|
return jsxs(Alert, { children: ["Connector not found ", context.connector.id] });
|
|
10627
|
-
return (jsxs(AnimatePresence, { children: [status === states.QRCODE && (jsx(motion.div, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$2, children: jsx(ConnectWithQRCode, { switchConnectMethod: (id) => {
|
|
10620
|
+
return (jsxs(AnimatePresence, { children: [status === states$1.QRCODE && (jsx(motion.div, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$2, children: jsx(ConnectWithQRCode, { switchConnectMethod: (id) => {
|
|
10628
10621
|
//if (id) setId(id);
|
|
10629
|
-
setStatus(states.INJECTOR);
|
|
10622
|
+
setStatus(states$1.INJECTOR);
|
|
10630
10623
|
setTimeout(context.triggerResize, 10); // delay required here for modal to resize
|
|
10631
|
-
} }) }, states.QRCODE)), status === states.INJECTOR && (jsx(motion.div, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$2, children: jsx(ConnectWithInjector, { switchConnectMethod: (id) => {
|
|
10624
|
+
} }) }, states$1.QRCODE)), status === states$1.INJECTOR && (jsx(motion.div, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$2, children: jsx(ConnectWithInjector, { switchConnectMethod: (id) => {
|
|
10632
10625
|
//if (id) setId(id);
|
|
10633
|
-
setStatus(states.QRCODE);
|
|
10626
|
+
setStatus(states$1.QRCODE);
|
|
10634
10627
|
setTimeout(context.triggerResize, 10); // delay required here for modal to resize
|
|
10635
|
-
} }) }, states.INJECTOR))] }));
|
|
10628
|
+
} }) }, states$1.INJECTOR))] }));
|
|
10636
10629
|
};
|
|
10637
10630
|
|
|
10638
10631
|
const InputContainer = styled.div `
|
|
@@ -11236,7 +11229,7 @@ function useWallets(hookOptions = {}) {
|
|
|
11236
11229
|
try {
|
|
11237
11230
|
const embeddedAccounts = await queryClient.ensureQueryData({
|
|
11238
11231
|
queryKey: ['openfortEmbeddedAccountsList'],
|
|
11239
|
-
queryFn: () => client.embeddedWallet.list()
|
|
11232
|
+
queryFn: () => client.embeddedWallet.list({ limit: 100 })
|
|
11240
11233
|
});
|
|
11241
11234
|
let walletAddress = optionsObject.address;
|
|
11242
11235
|
// Ensure that the embedded wallet is listed
|
|
@@ -12343,9 +12336,8 @@ const textVariants$1 = {
|
|
|
12343
12336
|
},
|
|
12344
12337
|
};
|
|
12345
12338
|
const LinkEmail = () => {
|
|
12346
|
-
const [email, setEmail] = React.useState("");
|
|
12347
12339
|
const [password, setPassword] = React.useState("");
|
|
12348
|
-
const { setRoute, triggerResize, log } = useOpenfort();
|
|
12340
|
+
const { setRoute, triggerResize, log, emailInput: email, setEmailInput: setEmail } = useOpenfort();
|
|
12349
12341
|
const { client, updateUser } = useOpenfortCore();
|
|
12350
12342
|
const [loginLoading, setLoginLoading] = React.useState(false);
|
|
12351
12343
|
const [loginError, setLoginError] = React.useState(false);
|
|
@@ -12372,6 +12364,7 @@ const LinkEmail = () => {
|
|
|
12372
12364
|
}).then(() => {
|
|
12373
12365
|
updateUser()
|
|
12374
12366
|
.then(() => {
|
|
12367
|
+
setEmail("");
|
|
12375
12368
|
setRoute(routes.PROFILE);
|
|
12376
12369
|
});
|
|
12377
12370
|
});
|
|
@@ -12448,7 +12441,7 @@ const EmailButton = () => {
|
|
|
12448
12441
|
e.preventDefault();
|
|
12449
12442
|
setRoute(user ? routes.LINK_EMAIL : routes.EMAIL_LOGIN);
|
|
12450
12443
|
};
|
|
12451
|
-
return (jsx(ProvidersButton, { children: jsx("form", { onSubmit: handleSubmit, noValidate: true, children: jsxs(ProviderInputInner, { children: [jsx("input", { value: emailInput, onChange: (e) => setEmailInput(e.target.value), type: "email", placeholder: "Enter your email",
|
|
12444
|
+
return (jsx(ProvidersButton, { children: jsx("form", { onSubmit: handleSubmit, noValidate: true, children: jsxs(ProviderInputInner, { children: [jsx("input", { value: emailInput, onChange: (e) => setEmailInput(e.target.value), type: "email", placeholder: "Enter your email", formNoValidate: true }), jsx("div", { style: { position: "relative" }, children: jsx(AnimatePresence, { initial: false, children: emailInput ? (jsx(EmailInnerButton, { initial: { x: -5, opacity: 0 }, animate: { x: 0, opacity: 1 }, exit: { x: -5, opacity: 0, position: "absolute" }, transition: { duration: 0.2, ease: [0.25, 1, 0.5, 1] }, type: "submit", "aria-label": "Submit email", children: jsx(ProviderIcon$1, { children: jsxs("svg", { width: "13", height: "12", viewBox: "0 0 13 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("line", { stroke: "currentColor", x1: "1", y1: "6", x2: "12", y2: "6", strokeWidth: "1", strokeLinecap: "round" }), jsx("path", { stroke: "currentColor", d: "M7.51431 1.5L11.757 5.74264M7.5 10.4858L11.7426 6.24314", strokeWidth: "1", strokeLinecap: "round" })] }) }) }, emailInput ? "enabled" : "disabled")) : (jsx(motion.div, { initial: { x: 5, opacity: 0 }, animate: { x: 0, opacity: 1 }, exit: { x: 5, opacity: 0, position: "absolute" }, transition: { duration: 0.2, ease: [0.25, 1, 0.5, 1] }, children: jsx(ProviderIcon$1, { children: jsx(EmailIcon, {}) }) })) }) })] }) }) }));
|
|
12452
12445
|
};
|
|
12453
12446
|
const AuthProviderButton = ({ provider, title = provider + " login", icon }) => {
|
|
12454
12447
|
const { setRoute, setConnector } = useOpenfort();
|
|
@@ -13133,6 +13126,121 @@ const SocialProviders = () => {
|
|
|
13133
13126
|
return (jsxs(PageContent, { children: [jsx(ScrollArea, { mobileDirection: 'horizontal', children: (activeProviders).map((auth) => (jsx(ProviderButtonSwitch, { provider: auth }, auth))) }), jsx(PoweredByFooter, { showDisclaimer: true })] }));
|
|
13134
13127
|
};
|
|
13135
13128
|
|
|
13129
|
+
function useOnUserReturn(callback) {
|
|
13130
|
+
useEffect(() => {
|
|
13131
|
+
const handleVisibilityChange = () => {
|
|
13132
|
+
if (document.visibilityState === "visible") {
|
|
13133
|
+
callback();
|
|
13134
|
+
}
|
|
13135
|
+
};
|
|
13136
|
+
const handleFocus = () => {
|
|
13137
|
+
callback();
|
|
13138
|
+
};
|
|
13139
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
13140
|
+
window.addEventListener("focus", handleFocus);
|
|
13141
|
+
return () => {
|
|
13142
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
13143
|
+
window.removeEventListener("focus", handleFocus);
|
|
13144
|
+
};
|
|
13145
|
+
}, [callback]);
|
|
13146
|
+
}
|
|
13147
|
+
|
|
13148
|
+
const states = {
|
|
13149
|
+
INIT: "init",
|
|
13150
|
+
REDIRECT: "redirect",
|
|
13151
|
+
CONNECTING: "connecting",
|
|
13152
|
+
ERROR: "error",
|
|
13153
|
+
};
|
|
13154
|
+
const DownloadFooter = styled.div `
|
|
13155
|
+
margin-top: 30px;
|
|
13156
|
+
color: var(--ck-body-color-muted);
|
|
13157
|
+
`;
|
|
13158
|
+
const ConnectWithMobile = ({}) => {
|
|
13159
|
+
var _a, _b;
|
|
13160
|
+
const { connector, setRoute } = useOpenfort();
|
|
13161
|
+
const wallet = useWallet$1(connector.id) || walletConfigs[connector.id];
|
|
13162
|
+
const [status, setStatus] = useState(states.INIT);
|
|
13163
|
+
const [description, setDescription] = useState(undefined);
|
|
13164
|
+
const { connect: { getUri }, } = useWeb3();
|
|
13165
|
+
const wcUri = getUri();
|
|
13166
|
+
const [hasReturned, setHasReturned] = useState(false);
|
|
13167
|
+
const { isConnected } = useAccount();
|
|
13168
|
+
const [shouldRedirectToWalletApp, setShouldRedirectToWalletApp] = useState(false);
|
|
13169
|
+
const siwe = useConnectWithSiwe();
|
|
13170
|
+
const openApp = (url) => {
|
|
13171
|
+
var _a;
|
|
13172
|
+
const uri = (_a = wallet === null || wallet === void 0 ? void 0 : wallet.getWalletConnectDeeplink) === null || _a === void 0 ? void 0 : _a.call(wallet, url !== null && url !== void 0 ? url : "");
|
|
13173
|
+
if (uri) {
|
|
13174
|
+
if (url) {
|
|
13175
|
+
window.location.href = uri;
|
|
13176
|
+
}
|
|
13177
|
+
else {
|
|
13178
|
+
window.location.href = uri.replace("?uri=", "");
|
|
13179
|
+
}
|
|
13180
|
+
}
|
|
13181
|
+
else {
|
|
13182
|
+
setStatus(states.ERROR);
|
|
13183
|
+
setDescription("Wallet does not support deeplink");
|
|
13184
|
+
}
|
|
13185
|
+
};
|
|
13186
|
+
useOnUserReturn(() => {
|
|
13187
|
+
setTimeout(() => {
|
|
13188
|
+
setHasReturned(true);
|
|
13189
|
+
}, 250);
|
|
13190
|
+
});
|
|
13191
|
+
useEffect(() => {
|
|
13192
|
+
if (hasReturned) {
|
|
13193
|
+
setHasReturned(false);
|
|
13194
|
+
if (isConnected) {
|
|
13195
|
+
setStatus(states.CONNECTING);
|
|
13196
|
+
}
|
|
13197
|
+
else {
|
|
13198
|
+
setStatus(states.ERROR);
|
|
13199
|
+
setDescription("Connection failed or cancelled");
|
|
13200
|
+
}
|
|
13201
|
+
}
|
|
13202
|
+
}, [hasReturned, isConnected]);
|
|
13203
|
+
useEffect(() => {
|
|
13204
|
+
switch (status) {
|
|
13205
|
+
case states.INIT:
|
|
13206
|
+
openApp(wcUri);
|
|
13207
|
+
break;
|
|
13208
|
+
case states.CONNECTING:
|
|
13209
|
+
setDescription("Requesting signature...");
|
|
13210
|
+
siwe({
|
|
13211
|
+
onConnect: () => {
|
|
13212
|
+
setRoute(routes.PROFILE);
|
|
13213
|
+
},
|
|
13214
|
+
onError: (error) => {
|
|
13215
|
+
setStatus(states.ERROR);
|
|
13216
|
+
setDescription(error || "Connection failed");
|
|
13217
|
+
}
|
|
13218
|
+
});
|
|
13219
|
+
setTimeout(() => {
|
|
13220
|
+
setShouldRedirectToWalletApp(true);
|
|
13221
|
+
}, 1500);
|
|
13222
|
+
break;
|
|
13223
|
+
}
|
|
13224
|
+
}, [status]);
|
|
13225
|
+
useEffect(() => {
|
|
13226
|
+
if (shouldRedirectToWalletApp && status === states.CONNECTING) {
|
|
13227
|
+
openApp();
|
|
13228
|
+
}
|
|
13229
|
+
}, [shouldRedirectToWalletApp, status]);
|
|
13230
|
+
return (jsxs(PageContent, { children: [jsx(Loader, { header: `Connecting with ${connector.id.split(",")[0]}`, icon: wallet === null || wallet === void 0 ? void 0 : wallet.icon, isError: status === states.ERROR, description: description, onRetry: () => {
|
|
13231
|
+
if (isConnected) {
|
|
13232
|
+
setStatus(states.CONNECTING);
|
|
13233
|
+
return;
|
|
13234
|
+
}
|
|
13235
|
+
setStatus(states.INIT);
|
|
13236
|
+
setDescription("");
|
|
13237
|
+
} }), isConnected ? (jsx(Button, { onClick: () => {
|
|
13238
|
+
openApp();
|
|
13239
|
+
}, children: "Sign in App" })) : (jsx(Button, { onClick: () => {
|
|
13240
|
+
openApp(wcUri);
|
|
13241
|
+
}, children: "Sign in App" })), jsx(DownloadFooter, { children: jsxs(FitText, { children: ["Dont have ", connector.id.split(",")[0], " installed?", ' ', jsx("a", { style: { marginLeft: 5 }, href: isAndroid() ? (_a = wallet === null || wallet === void 0 ? void 0 : wallet.downloadUrls) === null || _a === void 0 ? void 0 : _a.android : (_b = wallet === null || wallet === void 0 ? void 0 : wallet.downloadUrls) === null || _b === void 0 ? void 0 : _b.ios, target: "_blank", rel: "noreferrer", children: "GET" })] }) })] }));
|
|
13242
|
+
};
|
|
13243
|
+
|
|
13136
13244
|
const customThemeDefault = {};
|
|
13137
13245
|
const ConnectModal = ({ mode = 'auto', theme = 'auto', customTheme = customThemeDefault, lang = 'en-US' }) => {
|
|
13138
13246
|
var _a;
|
|
@@ -13196,6 +13304,7 @@ const ConnectModal = ({ mode = 'auto', theme = 'auto', customTheme = customTheme
|
|
|
13196
13304
|
profile: jsx(Profile, {}),
|
|
13197
13305
|
switchNetworks: jsx(SwitchNetworks, {}),
|
|
13198
13306
|
recover: jsx(RecoverPage, {}),
|
|
13307
|
+
connectWithMobile: jsx(ConnectWithMobile, {}),
|
|
13199
13308
|
};
|
|
13200
13309
|
function hide() {
|
|
13201
13310
|
context.setOpen(false);
|
package/build/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useOnUserReturn(callback: () => void): void;
|
package/build/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const OPENFORT_VERSION = "0.0.
|
|
1
|
+
export declare const OPENFORT_VERSION = "0.0.15";
|