@openfort/react 0.0.14 → 0.0.16
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 +288 -173
- 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.16';
|
|
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',
|
|
@@ -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: {
|
|
@@ -10004,13 +9982,17 @@ const createSIWEMessage = (address, nonce, chainId) => createSiweMessage({
|
|
|
10004
9982
|
nonce,
|
|
10005
9983
|
});
|
|
10006
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
|
|
10007
9988
|
function useConnectWithSiwe() {
|
|
10008
9989
|
const { client, user, updateUser } = useOpenfortCore();
|
|
10009
9990
|
const { log } = useOpenfort();
|
|
10010
9991
|
const { address, connector } = useAccount();
|
|
10011
9992
|
const chainId = useChainId();
|
|
10012
9993
|
const config = useConfig();
|
|
10013
|
-
|
|
9994
|
+
useWallet$1((connector === null || connector === void 0 ? void 0 : connector.id) || "");
|
|
9995
|
+
const connectWithSiwe = useCallback(async ({ onError, onConnect, } = {}) => {
|
|
10014
9996
|
const connectorType = connector === null || connector === void 0 ? void 0 : connector.type;
|
|
10015
9997
|
const walletClientType = connector === null || connector === void 0 ? void 0 : connector.id;
|
|
10016
9998
|
if (!address || !connectorType || !walletClientType) {
|
|
@@ -10047,18 +10029,28 @@ function useConnectWithSiwe() {
|
|
|
10047
10029
|
}
|
|
10048
10030
|
catch (err) {
|
|
10049
10031
|
log("Failed to connect with SIWE", err);
|
|
10050
|
-
if (
|
|
10051
|
-
|
|
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.";
|
|
10052
10043
|
}
|
|
10053
10044
|
else {
|
|
10054
|
-
|
|
10045
|
+
message = "Failed to connect with SIWE.";
|
|
10055
10046
|
}
|
|
10047
|
+
onError(message, err instanceof AxiosError ? err.request.status : undefined);
|
|
10056
10048
|
}
|
|
10057
10049
|
}, [client, user, updateUser, log, address, chainId, config, connector]);
|
|
10058
10050
|
return connectWithSiwe;
|
|
10059
10051
|
}
|
|
10060
10052
|
|
|
10061
|
-
const states$
|
|
10053
|
+
const states$3 = {
|
|
10062
10054
|
CONNECTED: 'connected',
|
|
10063
10055
|
CONNECTING: 'connecting',
|
|
10064
10056
|
EXPIRING: 'expiring',
|
|
@@ -10107,10 +10099,10 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10107
10099
|
mutation: {
|
|
10108
10100
|
onMutate: (connector) => {
|
|
10109
10101
|
if (connector.connector) {
|
|
10110
|
-
setStatus(states$
|
|
10102
|
+
setStatus(states$3.CONNECTING);
|
|
10111
10103
|
}
|
|
10112
10104
|
else {
|
|
10113
|
-
setStatus(states$
|
|
10105
|
+
setStatus(states$3.UNAVAILABLE);
|
|
10114
10106
|
}
|
|
10115
10107
|
},
|
|
10116
10108
|
onError(err) {
|
|
@@ -10126,13 +10118,13 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10126
10118
|
// https://github.com/MetaMask/eth-rpc-errors/blob/main/src/error-constants.ts
|
|
10127
10119
|
switch (error.code) {
|
|
10128
10120
|
case -32002:
|
|
10129
|
-
setStatus(states$
|
|
10121
|
+
setStatus(states$3.NOTCONNECTED);
|
|
10130
10122
|
break;
|
|
10131
10123
|
case 4001:
|
|
10132
|
-
setStatus(states$
|
|
10124
|
+
setStatus(states$3.REJECTED);
|
|
10133
10125
|
break;
|
|
10134
10126
|
default:
|
|
10135
|
-
setStatus(states$
|
|
10127
|
+
setStatus(states$3.FAILED);
|
|
10136
10128
|
break;
|
|
10137
10129
|
}
|
|
10138
10130
|
}
|
|
@@ -10141,10 +10133,10 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10141
10133
|
if (error.message) {
|
|
10142
10134
|
switch (error.message) {
|
|
10143
10135
|
case 'User rejected request':
|
|
10144
|
-
setStatus(states$
|
|
10136
|
+
setStatus(states$3.REJECTED);
|
|
10145
10137
|
break;
|
|
10146
10138
|
default:
|
|
10147
|
-
setStatus(states$
|
|
10139
|
+
setStatus(states$3.FAILED);
|
|
10148
10140
|
break;
|
|
10149
10141
|
}
|
|
10150
10142
|
}
|
|
@@ -10152,7 +10144,7 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10152
10144
|
}
|
|
10153
10145
|
else if (data) {
|
|
10154
10146
|
if (!wallet) {
|
|
10155
|
-
setStatus(states$
|
|
10147
|
+
setStatus(states$3.FAILED);
|
|
10156
10148
|
throw console.error('No wallet found');
|
|
10157
10149
|
}
|
|
10158
10150
|
// If already has linked account, don't link again
|
|
@@ -10167,10 +10159,10 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10167
10159
|
console.error(error);
|
|
10168
10160
|
disconnect();
|
|
10169
10161
|
if (status === 409) {
|
|
10170
|
-
setStatus(states$
|
|
10162
|
+
setStatus(states$3.DUPLICATED);
|
|
10171
10163
|
}
|
|
10172
10164
|
else {
|
|
10173
|
-
setStatus(states$
|
|
10165
|
+
setStatus(states$3.FAILED);
|
|
10174
10166
|
}
|
|
10175
10167
|
},
|
|
10176
10168
|
onConnect: () => {
|
|
@@ -10208,8 +10200,8 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10208
10200
|
const [status, setStatus] = useState(forceState
|
|
10209
10201
|
? forceState
|
|
10210
10202
|
: !(wallet === null || wallet === void 0 ? void 0 : wallet.isInstalled)
|
|
10211
|
-
? states$
|
|
10212
|
-
: states$
|
|
10203
|
+
? states$3.UNAVAILABLE
|
|
10204
|
+
: states$3.CONNECTING);
|
|
10213
10205
|
const locales = useLocales({
|
|
10214
10206
|
CONNECTORNAME: walletInfo.name,
|
|
10215
10207
|
CONNECTORSHORTNAME: (_g = walletInfo.shortName) !== null && _g !== void 0 ? _g : walletInfo.name,
|
|
@@ -10223,12 +10215,12 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10223
10215
|
connect({ connector: wallet === null || wallet === void 0 ? void 0 : wallet.connector });
|
|
10224
10216
|
}
|
|
10225
10217
|
else {
|
|
10226
|
-
setStatus(states$
|
|
10218
|
+
setStatus(states$3.UNAVAILABLE);
|
|
10227
10219
|
}
|
|
10228
10220
|
};
|
|
10229
10221
|
let connectTimeout;
|
|
10230
10222
|
useEffect(() => {
|
|
10231
|
-
if (status === states$
|
|
10223
|
+
if (status === states$3.UNAVAILABLE)
|
|
10232
10224
|
return;
|
|
10233
10225
|
// UX: Give user time to see the UI before opening the extension
|
|
10234
10226
|
connectTimeout = setTimeout(runConnect, 600);
|
|
@@ -10264,25 +10256,25 @@ const ConnectWithInjector = ({ switchConnectMethod, forceState }) => {
|
|
|
10264
10256
|
if (isWalletConnectConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector.id)) {
|
|
10265
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." }) })] }) }));
|
|
10266
10258
|
}
|
|
10267
|
-
const hasError = status === states$
|
|
10259
|
+
const hasError = status === states$3.FAILED || status === states$3.REJECTED || status === states$3.DUPLICATED;
|
|
10268
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 &&
|
|
10269
|
-
(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: {
|
|
10270
10262
|
transform: 'scale(1.14)',
|
|
10271
10263
|
position: 'relative',
|
|
10272
10264
|
width: '100%',
|
|
10273
|
-
}, 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: {
|
|
10274
10266
|
transform: 'scale(1.14)',
|
|
10275
10267
|
position: 'relative',
|
|
10276
10268
|
width: '100%',
|
|
10277
|
-
}, 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: {
|
|
10278
10270
|
paddingBottom: 28,
|
|
10279
|
-
}, 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: {
|
|
10280
10272
|
paddingBottom: 28,
|
|
10281
10273
|
}, children: [jsx(ModalH1, { children: wallet.connector.id === 'injected'
|
|
10282
10274
|
? locales.injectionScreen_connecting_injected_h1
|
|
10283
10275
|
: locales.injectionScreen_connecting_h1 }), jsx(ModalBody, { children: wallet.connector.id === 'injected'
|
|
10284
10276
|
? locales.injectionScreen_connecting_injected_p
|
|
10285
|
-
: 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))] }) })] }) }));
|
|
10286
10278
|
};
|
|
10287
10279
|
|
|
10288
10280
|
const IconContainer$1 = styled(motion.div) `
|
|
@@ -10481,7 +10473,7 @@ const Loader = ({ header, description, icon, isError = false, isSuccess = false,
|
|
|
10481
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 })] }))] })] }));
|
|
10482
10474
|
};
|
|
10483
10475
|
|
|
10484
|
-
const states$
|
|
10476
|
+
const states$2 = {
|
|
10485
10477
|
INIT: "init",
|
|
10486
10478
|
REDIRECT: "redirect",
|
|
10487
10479
|
CONNECTING: "connecting",
|
|
@@ -10490,7 +10482,7 @@ const states$1 = {
|
|
|
10490
10482
|
const ConnectWithOAuth = ({}) => {
|
|
10491
10483
|
const { connector, setRoute, log } = useOpenfort();
|
|
10492
10484
|
const { client, user } = useOpenfortCore();
|
|
10493
|
-
const [status, setStatus] = useState(states$
|
|
10485
|
+
const [status, setStatus] = useState(states$2.INIT);
|
|
10494
10486
|
const [description, setDescription] = useState(undefined);
|
|
10495
10487
|
useEffect(() => {
|
|
10496
10488
|
(async () => {
|
|
@@ -10500,13 +10492,13 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10500
10492
|
const hasProvider = !!url.searchParams.get("openfortAuthProviderUI");
|
|
10501
10493
|
const provider = connector.id;
|
|
10502
10494
|
switch (status) {
|
|
10503
|
-
case states$
|
|
10495
|
+
case states$2.INIT:
|
|
10504
10496
|
if (hasProvider)
|
|
10505
|
-
setStatus(states$
|
|
10497
|
+
setStatus(states$2.CONNECTING);
|
|
10506
10498
|
else
|
|
10507
|
-
setTimeout(() => setStatus(states$
|
|
10499
|
+
setTimeout(() => setStatus(states$2.REDIRECT), 150); // UX: wait a bit before redirecting
|
|
10508
10500
|
break;
|
|
10509
|
-
case states$
|
|
10501
|
+
case states$2.CONNECTING:
|
|
10510
10502
|
const player = url.searchParams.get("player_id");
|
|
10511
10503
|
const accessToken = url.searchParams.get("access_token");
|
|
10512
10504
|
const refreshToken = url.searchParams.get("refresh_token");
|
|
@@ -10528,7 +10520,7 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10528
10520
|
refreshToken,
|
|
10529
10521
|
});
|
|
10530
10522
|
setRoute(routes.LOADING);
|
|
10531
|
-
case states$
|
|
10523
|
+
case states$2.REDIRECT:
|
|
10532
10524
|
if (hasProvider)
|
|
10533
10525
|
return;
|
|
10534
10526
|
const cleanURL = window.location.origin + window.location.pathname;
|
|
@@ -10573,7 +10565,7 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10573
10565
|
catch (e) {
|
|
10574
10566
|
console.error("Error during OAuth initialization:", e);
|
|
10575
10567
|
setRoute(routes.CONNECT);
|
|
10576
|
-
setStatus(states$
|
|
10568
|
+
setStatus(states$2.ERROR);
|
|
10577
10569
|
if (e instanceof Error) {
|
|
10578
10570
|
if (e.message.includes("not enabled")) {
|
|
10579
10571
|
setDescription(`The ${provider} provider is not enabled. Please contact support.`);
|
|
@@ -10587,13 +10579,13 @@ const ConnectWithOAuth = ({}) => {
|
|
|
10587
10579
|
}
|
|
10588
10580
|
})();
|
|
10589
10581
|
}, [status]);
|
|
10590
|
-
return (jsx(PageContent, { children: jsx(Loader, { header: `Connecting with ${connector.id}`, icon: providersLogos[connector.id], isError: status === states$
|
|
10591
|
-
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);
|
|
10592
10584
|
setDescription(undefined);
|
|
10593
10585
|
} }) }));
|
|
10594
10586
|
};
|
|
10595
10587
|
|
|
10596
|
-
const states = {
|
|
10588
|
+
const states$1 = {
|
|
10597
10589
|
QRCODE: 'qrcode',
|
|
10598
10590
|
INJECTOR: 'injector',
|
|
10599
10591
|
};
|
|
@@ -10604,7 +10596,7 @@ const ConnectUsing = () => {
|
|
|
10604
10596
|
const isQrCode = !(wallet === null || wallet === void 0 ? void 0 : wallet.isInstalled) && (wallet === null || wallet === void 0 ? void 0 : wallet.getWalletConnectDeeplink);
|
|
10605
10597
|
// For OAuth connectors, we don't need to show the injector flow
|
|
10606
10598
|
const isOauth = context.connector.type === "oauth";
|
|
10607
|
-
const [status, setStatus] = useState(isQrCode ? states.QRCODE : states.INJECTOR);
|
|
10599
|
+
const [status, setStatus] = useState(isQrCode ? states$1.QRCODE : states$1.INJECTOR);
|
|
10608
10600
|
useEffect(() => {
|
|
10609
10601
|
const connector = context.connector;
|
|
10610
10602
|
context.log("ConnectUsing", { status, isQrCode, isOauth, connector });
|
|
@@ -10614,26 +10606,26 @@ const ConnectUsing = () => {
|
|
|
10614
10606
|
const checkProvider = async () => {
|
|
10615
10607
|
const res = await (wallet === null || wallet === void 0 ? void 0 : wallet.connector.getProvider());
|
|
10616
10608
|
if (!res) {
|
|
10617
|
-
setStatus(states.QRCODE);
|
|
10609
|
+
setStatus(states$1.QRCODE);
|
|
10618
10610
|
setTimeout(context.triggerResize, 10); // delay required here for modal to resize
|
|
10619
10611
|
}
|
|
10620
10612
|
};
|
|
10621
|
-
if (status === states.INJECTOR)
|
|
10613
|
+
if (status === states$1.INJECTOR)
|
|
10622
10614
|
checkProvider();
|
|
10623
10615
|
}, []);
|
|
10624
10616
|
if (isOauth)
|
|
10625
10617
|
return jsx(ConnectWithOAuth, {});
|
|
10626
10618
|
if (!wallet)
|
|
10627
10619
|
return jsxs(Alert, { children: ["Connector not found ", context.connector.id] });
|
|
10628
|
-
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) => {
|
|
10629
10621
|
//if (id) setId(id);
|
|
10630
|
-
setStatus(states.INJECTOR);
|
|
10622
|
+
setStatus(states$1.INJECTOR);
|
|
10631
10623
|
setTimeout(context.triggerResize, 10); // delay required here for modal to resize
|
|
10632
|
-
} }) }, 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) => {
|
|
10633
10625
|
//if (id) setId(id);
|
|
10634
|
-
setStatus(states.QRCODE);
|
|
10626
|
+
setStatus(states$1.QRCODE);
|
|
10635
10627
|
setTimeout(context.triggerResize, 10); // delay required here for modal to resize
|
|
10636
|
-
} }) }, states.INJECTOR))] }));
|
|
10628
|
+
} }) }, states$1.INJECTOR))] }));
|
|
10637
10629
|
};
|
|
10638
10630
|
|
|
10639
10631
|
const InputContainer = styled.div `
|
|
@@ -12344,9 +12336,8 @@ const textVariants$1 = {
|
|
|
12344
12336
|
},
|
|
12345
12337
|
};
|
|
12346
12338
|
const LinkEmail = () => {
|
|
12347
|
-
const [email, setEmail] = React.useState("");
|
|
12348
12339
|
const [password, setPassword] = React.useState("");
|
|
12349
|
-
const { setRoute, triggerResize, log } = useOpenfort();
|
|
12340
|
+
const { setRoute, triggerResize, log, emailInput: email, setEmailInput: setEmail } = useOpenfort();
|
|
12350
12341
|
const { client, updateUser } = useOpenfortCore();
|
|
12351
12342
|
const [loginLoading, setLoginLoading] = React.useState(false);
|
|
12352
12343
|
const [loginError, setLoginError] = React.useState(false);
|
|
@@ -12373,6 +12364,7 @@ const LinkEmail = () => {
|
|
|
12373
12364
|
}).then(() => {
|
|
12374
12365
|
updateUser()
|
|
12375
12366
|
.then(() => {
|
|
12367
|
+
setEmail("");
|
|
12376
12368
|
setRoute(routes.PROFILE);
|
|
12377
12369
|
});
|
|
12378
12370
|
});
|
|
@@ -12568,10 +12560,17 @@ const DIGIT_REGEX = /[0-9]/;
|
|
|
12568
12560
|
* Special characters allowed in passwords.
|
|
12569
12561
|
*/
|
|
12570
12562
|
const SPECIAL_CHARACTERS = '!@#$%^&()\\-*+.';
|
|
12563
|
+
/**
|
|
12564
|
+
* Escape regex metacharacters for safe use inside a character class.
|
|
12565
|
+
*/
|
|
12566
|
+
function escapeForCharClass(str) {
|
|
12567
|
+
return str.replace(/[-\\^]/g, '\\$&');
|
|
12568
|
+
// escapes -, \, and ^ (the only risky chars in [])
|
|
12569
|
+
}
|
|
12571
12570
|
/**
|
|
12572
12571
|
* Regular expression to match special characters.
|
|
12573
12572
|
*/
|
|
12574
|
-
const SPECIAL_CHARACTER_REGEX = new RegExp(`[${SPECIAL_CHARACTERS}]`);
|
|
12573
|
+
const SPECIAL_CHARACTER_REGEX = new RegExp(`[${escapeForCharClass(SPECIAL_CHARACTERS)}]`);
|
|
12575
12574
|
/**
|
|
12576
12575
|
* Maximum entropy score for normalization.
|
|
12577
12576
|
*/
|
|
@@ -13134,6 +13133,121 @@ const SocialProviders = () => {
|
|
|
13134
13133
|
return (jsxs(PageContent, { children: [jsx(ScrollArea, { mobileDirection: 'horizontal', children: (activeProviders).map((auth) => (jsx(ProviderButtonSwitch, { provider: auth }, auth))) }), jsx(PoweredByFooter, { showDisclaimer: true })] }));
|
|
13135
13134
|
};
|
|
13136
13135
|
|
|
13136
|
+
function useOnUserReturn(callback) {
|
|
13137
|
+
useEffect(() => {
|
|
13138
|
+
const handleVisibilityChange = () => {
|
|
13139
|
+
if (document.visibilityState === "visible") {
|
|
13140
|
+
callback();
|
|
13141
|
+
}
|
|
13142
|
+
};
|
|
13143
|
+
const handleFocus = () => {
|
|
13144
|
+
callback();
|
|
13145
|
+
};
|
|
13146
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
13147
|
+
window.addEventListener("focus", handleFocus);
|
|
13148
|
+
return () => {
|
|
13149
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
13150
|
+
window.removeEventListener("focus", handleFocus);
|
|
13151
|
+
};
|
|
13152
|
+
}, [callback]);
|
|
13153
|
+
}
|
|
13154
|
+
|
|
13155
|
+
const states = {
|
|
13156
|
+
INIT: "init",
|
|
13157
|
+
REDIRECT: "redirect",
|
|
13158
|
+
CONNECTING: "connecting",
|
|
13159
|
+
ERROR: "error",
|
|
13160
|
+
};
|
|
13161
|
+
const DownloadFooter = styled.div `
|
|
13162
|
+
margin-top: 30px;
|
|
13163
|
+
color: var(--ck-body-color-muted);
|
|
13164
|
+
`;
|
|
13165
|
+
const ConnectWithMobile = ({}) => {
|
|
13166
|
+
var _a, _b;
|
|
13167
|
+
const { connector, setRoute } = useOpenfort();
|
|
13168
|
+
const wallet = useWallet$1(connector.id) || walletConfigs[connector.id];
|
|
13169
|
+
const [status, setStatus] = useState(states.INIT);
|
|
13170
|
+
const [description, setDescription] = useState(undefined);
|
|
13171
|
+
const { connect: { getUri }, } = useWeb3();
|
|
13172
|
+
const wcUri = getUri();
|
|
13173
|
+
const [hasReturned, setHasReturned] = useState(false);
|
|
13174
|
+
const { isConnected } = useAccount();
|
|
13175
|
+
const [shouldRedirectToWalletApp, setShouldRedirectToWalletApp] = useState(false);
|
|
13176
|
+
const siwe = useConnectWithSiwe();
|
|
13177
|
+
const openApp = (url) => {
|
|
13178
|
+
var _a;
|
|
13179
|
+
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 : "");
|
|
13180
|
+
if (uri) {
|
|
13181
|
+
if (url) {
|
|
13182
|
+
window.location.href = uri;
|
|
13183
|
+
}
|
|
13184
|
+
else {
|
|
13185
|
+
window.location.href = uri.replace("?uri=", "");
|
|
13186
|
+
}
|
|
13187
|
+
}
|
|
13188
|
+
else {
|
|
13189
|
+
setStatus(states.ERROR);
|
|
13190
|
+
setDescription("Wallet does not support deeplink");
|
|
13191
|
+
}
|
|
13192
|
+
};
|
|
13193
|
+
useOnUserReturn(() => {
|
|
13194
|
+
setTimeout(() => {
|
|
13195
|
+
setHasReturned(true);
|
|
13196
|
+
}, 250);
|
|
13197
|
+
});
|
|
13198
|
+
useEffect(() => {
|
|
13199
|
+
if (hasReturned) {
|
|
13200
|
+
setHasReturned(false);
|
|
13201
|
+
if (isConnected) {
|
|
13202
|
+
setStatus(states.CONNECTING);
|
|
13203
|
+
}
|
|
13204
|
+
else {
|
|
13205
|
+
setStatus(states.ERROR);
|
|
13206
|
+
setDescription("Connection failed or cancelled");
|
|
13207
|
+
}
|
|
13208
|
+
}
|
|
13209
|
+
}, [hasReturned, isConnected]);
|
|
13210
|
+
useEffect(() => {
|
|
13211
|
+
switch (status) {
|
|
13212
|
+
case states.INIT:
|
|
13213
|
+
openApp(wcUri);
|
|
13214
|
+
break;
|
|
13215
|
+
case states.CONNECTING:
|
|
13216
|
+
setDescription("Requesting signature...");
|
|
13217
|
+
siwe({
|
|
13218
|
+
onConnect: () => {
|
|
13219
|
+
setRoute(routes.PROFILE);
|
|
13220
|
+
},
|
|
13221
|
+
onError: (error) => {
|
|
13222
|
+
setStatus(states.ERROR);
|
|
13223
|
+
setDescription(error || "Connection failed");
|
|
13224
|
+
}
|
|
13225
|
+
});
|
|
13226
|
+
setTimeout(() => {
|
|
13227
|
+
setShouldRedirectToWalletApp(true);
|
|
13228
|
+
}, 1500);
|
|
13229
|
+
break;
|
|
13230
|
+
}
|
|
13231
|
+
}, [status]);
|
|
13232
|
+
useEffect(() => {
|
|
13233
|
+
if (shouldRedirectToWalletApp && status === states.CONNECTING) {
|
|
13234
|
+
openApp();
|
|
13235
|
+
}
|
|
13236
|
+
}, [shouldRedirectToWalletApp, status]);
|
|
13237
|
+
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: () => {
|
|
13238
|
+
if (isConnected) {
|
|
13239
|
+
setStatus(states.CONNECTING);
|
|
13240
|
+
return;
|
|
13241
|
+
}
|
|
13242
|
+
setStatus(states.INIT);
|
|
13243
|
+
setDescription("");
|
|
13244
|
+
} }), isConnected ? (jsx(Button, { onClick: () => {
|
|
13245
|
+
openApp();
|
|
13246
|
+
}, children: "Sign in App" })) : (jsx(Button, { onClick: () => {
|
|
13247
|
+
openApp(wcUri);
|
|
13248
|
+
}, 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" })] }) })] }));
|
|
13249
|
+
};
|
|
13250
|
+
|
|
13137
13251
|
const customThemeDefault = {};
|
|
13138
13252
|
const ConnectModal = ({ mode = 'auto', theme = 'auto', customTheme = customThemeDefault, lang = 'en-US' }) => {
|
|
13139
13253
|
var _a;
|
|
@@ -13197,6 +13311,7 @@ const ConnectModal = ({ mode = 'auto', theme = 'auto', customTheme = customTheme
|
|
|
13197
13311
|
profile: jsx(Profile, {}),
|
|
13198
13312
|
switchNetworks: jsx(SwitchNetworks, {}),
|
|
13199
13313
|
recover: jsx(RecoverPage, {}),
|
|
13314
|
+
connectWithMobile: jsx(ConnectWithMobile, {}),
|
|
13200
13315
|
};
|
|
13201
13316
|
function hide() {
|
|
13202
13317
|
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.16";
|