@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.
@@ -0,0 +1,2 @@
1
+ declare const ConnectWithMobile: React.FC<{}>;
2
+ export default ConnectWithMobile;
@@ -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: React.Dispatch<React.SetStateAction<ValueOf<typeof routes>>>;
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";
@@ -1,4 +1,4 @@
1
- export declare function useConnectWithSiwe(): ({ onError, onConnect, }: {
1
+ export declare function useConnectWithSiwe(): ({ onError, onConnect, }?: {
2
2
  onError?: (error: string, status?: number) => void;
3
3
  onConnect?: () => void;
4
4
  }) => Promise<void>;
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.13';
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 isAndroid()
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 isAndroid()
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 isAndroid() ? uri : `frontier://wc?uri=${encodeURIComponent(uri)}`;
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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 isAndroid()
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
- const ConnectorAnchor = styled(motion.a) `
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: [walletsToDisplay.length === 0 && (jsx(Alert, { error: true, children: "No connectors found in Openfort config." })), walletsToDisplay.length > 0 && (jsx(ConnectorsContainer, { "$mobile": isMobile, "$totalResults": walletsToDisplay.length, children: walletsToDisplay.map((wallet) => jsx(ConnectorItem, { wallet: wallet, isRecent: wallet.id === lastConnectorId }, wallet.id)) }))] }));
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 uri = getUri();
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, uri !== null && uri !== void 0 ? uri : '')
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 = (wallet) => {
7700
- var _a;
7701
- const uri = (_a = wallet.getWalletConnectDeeplink) === null || _a === void 0 ? void 0 : _a.call(wallet, wcUri);
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(wallet), style: {
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
- const connectWithSiwe = useCallback(async ({ onError, onConnect, }) => {
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 (err instanceof AxiosError) {
10050
- onError && onError("Failed to connect with SIWE", err.request.status);
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
- onError && onError("Failed to connect with SIWE");
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$2 = {
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$2.CONNECTING);
10102
+ setStatus(states$3.CONNECTING);
10110
10103
  }
10111
10104
  else {
10112
- setStatus(states$2.UNAVAILABLE);
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$2.NOTCONNECTED);
10121
+ setStatus(states$3.NOTCONNECTED);
10129
10122
  break;
10130
10123
  case 4001:
10131
- setStatus(states$2.REJECTED);
10124
+ setStatus(states$3.REJECTED);
10132
10125
  break;
10133
10126
  default:
10134
- setStatus(states$2.FAILED);
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$2.REJECTED);
10136
+ setStatus(states$3.REJECTED);
10144
10137
  break;
10145
10138
  default:
10146
- setStatus(states$2.FAILED);
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$2.FAILED);
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$2.DUPLICATED);
10162
+ setStatus(states$3.DUPLICATED);
10170
10163
  }
10171
10164
  else {
10172
- setStatus(states$2.FAILED);
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$2.UNAVAILABLE
10211
- : states$2.CONNECTING);
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$2.UNAVAILABLE);
10218
+ setStatus(states$3.UNAVAILABLE);
10226
10219
  }
10227
10220
  };
10228
10221
  let connectTimeout;
10229
10222
  useEffect(() => {
10230
- if (status === states$2.UNAVAILABLE)
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$2.FAILED || status === states$2.REJECTED || status === states$2.DUPLICATED;
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$2.UNAVAILABLE ? (jsx("div", { style: {
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$2.CONNECTING, unavailable: status === states$2.UNAVAILABLE })) : (jsx(SquircleSpinner, { logo: status === states$2.UNAVAILABLE ? (jsx("div", { style: {
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$2.CONNECTING }))] }) }), jsx(ModalContentContainer, { children: jsxs(AnimatePresence, { initial: false, children: [status === states$2.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$2.FAILED)), status === states$2.REJECTED && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { style: {
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$2.REJECTED)), status === states$2.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$2.DUPLICATED)), (status === states$2.CONNECTING || status === states$2.EXPIRING) && (jsx(Content, { initial: 'initial', animate: 'animate', exit: 'exit', variants: contentVariants$1, children: jsxs(ModalContent, { style: {
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$2.CONNECTING)), status === states$2.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$2.CONNECTED)), status === states$2.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$2.NOTCONNECTED)), status === states$2.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$2.UNAVAILABLE))] }) })] }) }));
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$1 = {
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$1.INIT);
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$1.INIT:
10495
+ case states$2.INIT:
10503
10496
  if (hasProvider)
10504
- setStatus(states$1.CONNECTING);
10497
+ setStatus(states$2.CONNECTING);
10505
10498
  else
10506
- setTimeout(() => setStatus(states$1.REDIRECT), 150); // UX: wait a bit before redirecting
10499
+ setTimeout(() => setStatus(states$2.REDIRECT), 150); // UX: wait a bit before redirecting
10507
10500
  break;
10508
- case states$1.CONNECTING:
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$1.REDIRECT:
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$1.ERROR);
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$1.ERROR, description: description, onRetry: () => {
10590
- setStatus(states$1.INIT);
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", autoFocus: true, 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, {}) }) })) }) })] }) }) }));
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);
@@ -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;
@@ -1 +1 @@
1
- export declare const OPENFORT_VERSION = "0.0.13";
1
+ export declare const OPENFORT_VERSION = "0.0.15";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfort/react",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "author": "Openfort (https://www.openfort.io)",
5
5
  "license": "BSD-2-Clause license",
6
6
  "description": "The easiest way to integrate Openfort to your project.",