@openfort/react 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/Common/Modal/styles.js +3 -0
- package/build/components/Common/Modal/styles.js.map +1 -1
- package/build/components/Common/ScrollArea/index.d.ts +5 -1
- package/build/components/Common/ScrollArea/index.js +2 -2
- package/build/components/Common/ScrollArea/styles.d.ts +4 -1
- package/build/components/Common/ScrollArea/styles.js +19 -4
- package/build/components/Common/ScrollArea/styles.js.map +1 -1
- package/build/components/ConnectModal/index.js +15 -5
- package/build/components/ConnectModal/index.js.map +1 -1
- package/build/components/PageContent/index.d.ts +2 -1
- package/build/components/PageContent/index.js +2 -2
- package/build/components/Pages/BuyProviderSelect/styles.d.ts +2 -1
- package/build/components/Pages/Connected/EthereumConnected.js +7 -3
- package/build/components/Pages/Connected/EthereumConnected.js.map +1 -1
- package/build/components/Pages/Deposit/AssetChainLogo.d.ts +5 -2
- package/build/components/Pages/Deposit/AssetChainLogo.js +21 -4
- package/build/components/Pages/Deposit/AssetChainLogo.js.map +1 -1
- package/build/components/Pages/Deposit/DepositAddressBlock.js +1 -1
- package/build/components/Pages/Deposit/RouteSelectors.js +11 -1
- package/build/components/Pages/Deposit/RouteSelectors.js.map +1 -1
- package/build/components/Pages/Deposit/SameChainDepositStatus.d.ts +7 -0
- package/build/components/Pages/Deposit/SameChainDepositStatus.js +34 -0
- package/build/components/Pages/Deposit/SameChainDepositStatus.js.map +1 -0
- package/build/components/Pages/Deposit/SameChainDepositSuccess.d.ts +11 -0
- package/build/components/Pages/Deposit/SameChainDepositSuccess.js +30 -0
- package/build/components/Pages/Deposit/SameChainDepositSuccess.js.map +1 -0
- package/build/components/Pages/Deposit/TestnetNotice.d.ts +10 -0
- package/build/components/Pages/Deposit/TestnetNotice.js +131 -0
- package/build/components/Pages/Deposit/TestnetNotice.js.map +1 -0
- package/build/components/Pages/Deposit/UnsupportedNetworkNotice.d.ts +12 -0
- package/build/components/Pages/Deposit/UnsupportedNetworkNotice.js +111 -0
- package/build/components/Pages/Deposit/UnsupportedNetworkNotice.js.map +1 -0
- package/build/components/Pages/Deposit/index.js +20 -4
- package/build/components/Pages/Deposit/index.js.map +1 -1
- package/build/components/Pages/Deposit/paymentOptions.d.ts +6 -0
- package/build/components/Pages/Deposit/paymentOptions.js +7 -1
- package/build/components/Pages/Deposit/paymentOptions.js.map +1 -1
- package/build/components/Pages/Deposit/useDepositRoute.d.ts +2 -0
- package/build/components/Pages/Deposit/useDepositRoute.js +26 -2
- package/build/components/Pages/Deposit/useDepositRoute.js.map +1 -1
- package/build/components/Pages/Deposit/useSameChainArrival.d.ts +19 -0
- package/build/components/Pages/Deposit/useSameChainArrival.js +86 -0
- package/build/components/Pages/Deposit/useSameChainArrival.js.map +1 -0
- package/build/components/Pages/DepositCrypto/index.js +26 -3
- package/build/components/Pages/DepositCrypto/index.js.map +1 -1
- package/build/components/Pages/DepositWallet/DepositWalletDesktop.js +9 -8
- package/build/components/Pages/DepositWallet/DepositWalletDesktop.js.map +1 -1
- package/build/components/Pages/DepositWallet/index.js +48 -10
- package/build/components/Pages/DepositWallet/index.js.map +1 -1
- package/build/components/Pages/SelectToken/styles.d.ts +2 -1
- package/build/components/Pages/SendConfirmation/index.js +1 -1
- package/build/constants/chainConfigs.js +32 -32
- package/build/constants/logos.d.ts +4 -0
- package/build/constants/logos.js +25 -1
- package/build/constants/logos.js.map +1 -1
- package/build/ethereum/hooks/useEthereumWalletAssets.js +39 -3
- package/build/ethereum/hooks/useEthereumWalletAssets.js.map +1 -1
- package/build/hooks/openfort/useFundingChains.d.ts +6 -0
- package/build/hooks/openfort/useFundingChains.js +19 -5
- package/build/hooks/openfort/useFundingChains.js.map +1 -1
- package/build/shared/utils/explorer.js +6 -4
- package/build/shared/utils/explorer.js.map +1 -1
- package/build/utils/validation.d.ts +9 -0
- package/build/utils/validation.js +14 -1
- package/build/utils/validation.js.map +1 -1
- package/build/version.d.ts +1 -1
- package/build/version.js +1 -1
- package/build/wagmi/components/ChainSelect/index.js +3 -2
- package/build/wagmi/components/ChainSelect/index.js.map +1 -1
- package/build/wagmi/components/ChainSelectList/index.js +3 -2
- package/build/wagmi/components/ChainSelectList/index.js.map +1 -1
- package/build/wagmi/components/SwitchNetworks/index.js +3 -2
- package/build/wagmi/components/SwitchNetworks/index.js.map +1 -1
- package/build/wagmi/useSwitchChainFiltered.d.ts +199 -0
- package/build/wagmi/useSwitchChainFiltered.js +53 -0
- package/build/wagmi/useSwitchChainFiltered.js.map +1 -0
- package/package.json +1 -1
|
@@ -237,6 +237,9 @@ const BoxContainer = styled(motion.div) `
|
|
|
237
237
|
left: 50%;
|
|
238
238
|
width: var(--width);
|
|
239
239
|
height: var(--height);
|
|
240
|
+
/* Match InnerContainer's viewport cap so a tall page's card background
|
|
241
|
+
doesn't run off-screen while the content scrolls inside. */
|
|
242
|
+
max-height: 88vh;
|
|
240
243
|
transform: translateX(-50%);
|
|
241
244
|
backface-visibility: hidden;
|
|
242
245
|
transition: all 200ms ease;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
export declare const ScrollArea: ({ children, height, backgroundColor, mobileDirection, }: {
|
|
2
|
+
export declare const ScrollArea: ({ children, height, backgroundColor, mobileDirection, fill, }: {
|
|
3
3
|
children: React.ReactNode;
|
|
4
4
|
height?: number;
|
|
5
5
|
backgroundColor?: string;
|
|
6
6
|
mobileDirection?: "horizontal" | "vertical";
|
|
7
|
+
/** Grow to fill a flex parent and scroll internally, instead of capping at a
|
|
8
|
+
* fixed pixel height. Use inside a bounded flex column to keep siblings (e.g.
|
|
9
|
+
* a footer) pinned while only this region scrolls. */
|
|
10
|
+
fill?: boolean;
|
|
7
11
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,7 +4,7 @@ import useIsMobile from '../../../hooks/useIsMobile.js';
|
|
|
4
4
|
import { ScrollContainer, ScrollAreaContainer, MoreIndicator } from './styles.js';
|
|
5
5
|
|
|
6
6
|
const ArrowDown = () => (jsxs("svg", { width: "11", height: "12", viewBox: "0 0 11 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("title", { children: "Scroll down arrow" }), jsx("path", { d: "M5.49438 1L5.49438 11M5.49438 11L9.5 7M5.49438 11L1.5 7", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" })] }));
|
|
7
|
-
const ScrollArea = ({ children, height, backgroundColor, mobileDirection, }) => {
|
|
7
|
+
const ScrollArea = ({ children, height, backgroundColor, mobileDirection, fill, }) => {
|
|
8
8
|
const ref = useRef(null);
|
|
9
9
|
const moreRef = useRef(null);
|
|
10
10
|
const isMobile = useIsMobile();
|
|
@@ -44,7 +44,7 @@ const ScrollArea = ({ children, height, backgroundColor, mobileDirection, }) =>
|
|
|
44
44
|
el.removeEventListener('scroll', handleScroll);
|
|
45
45
|
};
|
|
46
46
|
}, [ref.current]);
|
|
47
|
-
return (jsxs(ScrollContainer, { children: [jsx(ScrollAreaContainer, { ref: ref, "$mobile": isMobile, "$height": height, "$backgroundColor": backgroundColor, "$mobileDirection": mobileDirection, children: children }), jsx(MoreIndicator, { ref: moreRef, className: "hide", onClick: () => {
|
|
47
|
+
return (jsxs(ScrollContainer, { "$fill": fill, children: [jsx(ScrollAreaContainer, { ref: ref, "$mobile": isMobile, "$height": height, "$backgroundColor": backgroundColor, "$mobileDirection": mobileDirection, "$fill": fill, children: children }), jsx(MoreIndicator, { ref: moreRef, className: "hide", onClick: () => {
|
|
48
48
|
if (ref.current) {
|
|
49
49
|
ref.current.scrollTo({
|
|
50
50
|
top: ref.current.scrollHeight,
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
export declare const ScrollContainer: import("styled-components").StyledComponent<"div", any, {
|
|
1
|
+
export declare const ScrollContainer: import("styled-components").StyledComponent<"div", any, {
|
|
2
|
+
$fill?: boolean;
|
|
3
|
+
}, never>;
|
|
2
4
|
export declare const MoreIndicator: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
3
5
|
export declare const ScrollAreaContainer: import("styled-components").StyledComponent<"div", any, {
|
|
4
6
|
$mobile?: boolean;
|
|
5
7
|
$height?: number;
|
|
6
8
|
$backgroundColor?: string;
|
|
7
9
|
$mobileDirection?: "horizontal" | "vertical";
|
|
10
|
+
$fill?: boolean;
|
|
8
11
|
}, never>;
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { css, keyframes } from 'styled-components';
|
|
2
2
|
import styled from '../../../styles/styled/index.js';
|
|
3
3
|
|
|
4
4
|
const ScrollContainer = styled.div `
|
|
5
5
|
position: relative;
|
|
6
|
+
${({ $fill }) => $fill &&
|
|
7
|
+
css `
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
flex: 1 1 auto;
|
|
11
|
+
min-height: 0;
|
|
12
|
+
`}
|
|
6
13
|
`;
|
|
7
14
|
const fadeIn = keyframes `
|
|
8
15
|
0%{ opacity:0; }
|
|
@@ -60,7 +67,7 @@ const ScrollAreaContainer = styled.div `
|
|
|
60
67
|
position: relative;
|
|
61
68
|
z-index: 1;
|
|
62
69
|
|
|
63
|
-
${({ $mobile, $height, $mobileDirection }) => $mobile && $mobileDirection === 'horizontal'
|
|
70
|
+
${({ $mobile, $height, $mobileDirection, $fill }) => $mobile && $mobileDirection === 'horizontal'
|
|
64
71
|
? css `
|
|
65
72
|
overflow-x: scroll;
|
|
66
73
|
margin: 0 -24px;
|
|
@@ -103,8 +110,16 @@ const ScrollAreaContainer = styled.div `
|
|
|
103
110
|
}
|
|
104
111
|
`
|
|
105
112
|
: css `
|
|
106
|
-
|
|
107
|
-
|
|
113
|
+
${$fill
|
|
114
|
+
? css `
|
|
115
|
+
flex: 1 1 auto;
|
|
116
|
+
min-height: 0;
|
|
117
|
+
overflow-y: scroll;
|
|
118
|
+
`
|
|
119
|
+
: css `
|
|
120
|
+
max-height: ${$height ? `${$height}px` : '310px'};
|
|
121
|
+
overflow-y: scroll;
|
|
122
|
+
`}
|
|
108
123
|
padding: 0 10px;
|
|
109
124
|
margin: calc(var(--fade-height) * -1) -16px 0 -10px;
|
|
110
125
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -149,17 +149,27 @@ const ConnectModal = ({ mode = 'auto', theme = 'auto', customTheme = customTheme
|
|
|
149
149
|
const isConnected = (_a = strategy === null || strategy === void 0 ? void 0 : strategy.isConnected(state)) !== null && _a !== void 0 ? _a : false;
|
|
150
150
|
const chainId = strategy === null || strategy === void 0 ? void 0 : strategy.getChainId();
|
|
151
151
|
const chainIsSupported = chainId != null && context.chains.some((c) => c.id === chainId);
|
|
152
|
-
// Auto-close when the
|
|
153
|
-
//
|
|
154
|
-
//
|
|
152
|
+
// Auto-close only when the connect/auth flow completes: the modal was opened while
|
|
153
|
+
// disconnected and then became connected. We latch the "opened-while-connected" state
|
|
154
|
+
// on each open transition, so a chain switch — which briefly drops and restores the
|
|
155
|
+
// connection while the modal is already open and connected — never triggers a close.
|
|
156
|
+
const prevOpenRef = useRef(context.open);
|
|
157
|
+
const openedConnectedRef = useRef(isConnected);
|
|
155
158
|
const prevIsConnectedRef = useRef(isConnected);
|
|
156
159
|
useEffect(() => {
|
|
160
|
+
const justOpened = context.open && !prevOpenRef.current;
|
|
161
|
+
prevOpenRef.current = context.open;
|
|
162
|
+
if (justOpened) {
|
|
163
|
+
openedConnectedRef.current = isConnected;
|
|
164
|
+
prevIsConnectedRef.current = isConnected;
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
157
167
|
const wasConnected = prevIsConnectedRef.current;
|
|
158
168
|
prevIsConnectedRef.current = isConnected;
|
|
159
|
-
if (!wasConnected && isConnected && context.open) {
|
|
169
|
+
if (!openedConnectedRef.current && !wasConnected && isConnected && context.open) {
|
|
160
170
|
context.setOpen(false);
|
|
161
171
|
}
|
|
162
|
-
}, [isConnected]);
|
|
172
|
+
}, [isConnected, context.open]);
|
|
163
173
|
//if chain is unsupported we enforce a "switch chain" prompt
|
|
164
174
|
const closeable = !(context.uiConfig.enforceSupportedChains && isConnected && !chainIsSupported);
|
|
165
175
|
const route = context.route.route;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -6,6 +6,7 @@ type PageContentProps = {
|
|
|
6
6
|
onBack?: SetOnBackFunction;
|
|
7
7
|
logoutOnBack?: boolean;
|
|
8
8
|
header?: string;
|
|
9
|
+
className?: string;
|
|
9
10
|
};
|
|
10
|
-
export declare const PageContent: ({ children, width, onBack, logoutOnBack, header }: PageContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const PageContent: ({ children, width, onBack, logoutOnBack, header, className, }: PageContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
export {};
|
|
@@ -5,7 +5,7 @@ import { ModalHeading } from '../Common/Modal/styles.js';
|
|
|
5
5
|
import { useOpenfort } from '../Openfort/useOpenfort.js';
|
|
6
6
|
import { PageContentStyle } from './styles.js';
|
|
7
7
|
|
|
8
|
-
const PageContent = ({ children, width, onBack = 'back', logoutOnBack, header }) => {
|
|
8
|
+
const PageContent = ({ children, width, onBack = 'back', logoutOnBack, header, className, }) => {
|
|
9
9
|
const { setOnBack, setRoute, setPreviousRoute, setRouteHistory } = useOpenfort();
|
|
10
10
|
const { signOut } = useSignOut();
|
|
11
11
|
useEffect(() => {
|
|
@@ -48,7 +48,7 @@ const PageContent = ({ children, width, onBack = 'back', logoutOnBack, header })
|
|
|
48
48
|
else
|
|
49
49
|
setOnBack(null);
|
|
50
50
|
}, [!!onBack, !!logoutOnBack]);
|
|
51
|
-
return (jsxs(PageContentStyle, { style: { width }, children: [header && jsx(ModalHeading, { children: header }), children] }));
|
|
51
|
+
return (jsxs(PageContentStyle, { className: className, style: { width }, children: [header && jsx(ModalHeading, { children: header }), children] }));
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
export { PageContent };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export declare const ProviderSelectContent: import("styled-components").StyledComponent<({ children, width, onBack, logoutOnBack, header }: {
|
|
1
|
+
export declare const ProviderSelectContent: import("styled-components").StyledComponent<({ children, width, onBack, logoutOnBack, header, className, }: {
|
|
2
2
|
children?: React.ReactNode;
|
|
3
3
|
width?: number | string;
|
|
4
4
|
onBack?: import("../../PageContent").SetOnBackFunction;
|
|
5
5
|
logoutOnBack?: boolean;
|
|
6
6
|
header?: string;
|
|
7
|
+
className?: string;
|
|
7
8
|
}) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
|
|
8
9
|
export declare const ProviderList: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
9
10
|
export declare const ProviderButton: import("styled-components").StyledComponent<"button", any, {
|
|
@@ -63,10 +63,14 @@ const EthereumConnected = () => {
|
|
|
63
63
|
});
|
|
64
64
|
const ensName = identity.status === 'success' ? identity.name : undefined;
|
|
65
65
|
const { data: assets, isLoading } = useEthereumWalletAssets();
|
|
66
|
+
// Total is summed from the multi-chain assets so the headline matches the
|
|
67
|
+
// "Your assets" breakdown. The single-chain path omits fiat for native ETH,
|
|
68
|
+
// which would otherwise drop it from the total.
|
|
69
|
+
const { data: multiChainAssets } = useEthereumWalletAssets({ multiChain: true });
|
|
66
70
|
const totalBalanceUsd = useMemo(() => {
|
|
67
|
-
if (!
|
|
71
|
+
if (!multiChainAssets)
|
|
68
72
|
return 0;
|
|
69
|
-
return
|
|
73
|
+
return multiChainAssets.reduce((acc, asset) => {
|
|
70
74
|
var _a, _b, _c, _d;
|
|
71
75
|
if (!asset.metadata || !asset.balance)
|
|
72
76
|
return acc;
|
|
@@ -76,7 +80,7 @@ const EthereumConnected = () => {
|
|
|
76
80
|
const balance = Number(formatUnits((_d = asset.balance) !== null && _d !== void 0 ? _d : BigInt(0), getAssetDecimals(asset)));
|
|
77
81
|
return acc + price * balance;
|
|
78
82
|
}, 0);
|
|
79
|
-
}, [
|
|
83
|
+
}, [multiChainAssets]);
|
|
80
84
|
useEffect(() => {
|
|
81
85
|
context.triggerResize();
|
|
82
86
|
}, [context.triggerResize]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumConnected.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthereumConnected.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Center logo for the deposit QR: the asset logo with the chain logo as a small
|
|
3
3
|
* badge bottom-left, so scanners can confirm the right token + network at a glance.
|
|
4
|
-
*
|
|
4
|
+
* Falls back to a colored monogram when the token has no usable logo, so the QR
|
|
5
|
+
* centre is never blank (and never collapses to just the chain badge). Kept fully
|
|
6
|
+
* within the logo slot (no overflow) so it never covers QR data modules.
|
|
5
7
|
*/
|
|
6
|
-
export declare function AssetChainLogo({ assetLogo, chainLogo }: {
|
|
8
|
+
export declare function AssetChainLogo({ assetLogo, chainLogo, symbol, }: {
|
|
7
9
|
assetLogo: string;
|
|
8
10
|
chainLogo: string;
|
|
11
|
+
symbol?: string;
|
|
9
12
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { symbolToColor } from '../../../constants/logos.js';
|
|
2
4
|
|
|
3
5
|
const hide = (e) => {
|
|
4
6
|
e.currentTarget.style.display = 'none';
|
|
@@ -6,10 +8,25 @@ const hide = (e) => {
|
|
|
6
8
|
/**
|
|
7
9
|
* Center logo for the deposit QR: the asset logo with the chain logo as a small
|
|
8
10
|
* badge bottom-left, so scanners can confirm the right token + network at a glance.
|
|
9
|
-
*
|
|
11
|
+
* Falls back to a colored monogram when the token has no usable logo, so the QR
|
|
12
|
+
* centre is never blank (and never collapses to just the chain badge). Kept fully
|
|
13
|
+
* within the logo slot (no overflow) so it never covers QR data modules.
|
|
10
14
|
*/
|
|
11
|
-
function AssetChainLogo({ assetLogo, chainLogo }) {
|
|
12
|
-
|
|
15
|
+
function AssetChainLogo({ assetLogo, chainLogo, symbol, }) {
|
|
16
|
+
const [assetFailed, setAssetFailed] = useState(false);
|
|
17
|
+
const showMonogram = !assetLogo || assetFailed;
|
|
18
|
+
return (jsxs("div", { style: { position: 'relative', width: '100%' }, children: [showMonogram ? (jsx("div", { style: {
|
|
19
|
+
display: 'flex',
|
|
20
|
+
alignItems: 'center',
|
|
21
|
+
justifyContent: 'center',
|
|
22
|
+
width: '100%',
|
|
23
|
+
aspectRatio: '1 / 1',
|
|
24
|
+
borderRadius: '50%',
|
|
25
|
+
background: symbolToColor(symbol || '?'),
|
|
26
|
+
color: '#fff',
|
|
27
|
+
fontWeight: 600,
|
|
28
|
+
fontSize: 28,
|
|
29
|
+
}, children: (symbol || '?').charAt(0).toUpperCase() })) : (jsx("img", { src: assetLogo, alt: "", onError: () => setAssetFailed(true), style: { display: 'block', width: '100%', borderRadius: '50%' } })), chainLogo && (jsx("img", { src: chainLogo, alt: "", onError: hide, style: {
|
|
13
30
|
position: 'absolute',
|
|
14
31
|
bottom: 0,
|
|
15
32
|
left: 0,
|
|
@@ -17,7 +34,7 @@ function AssetChainLogo({ assetLogo, chainLogo }) {
|
|
|
17
34
|
borderRadius: '50%',
|
|
18
35
|
border: '2px solid #fff',
|
|
19
36
|
background: '#fff',
|
|
20
|
-
} })] }));
|
|
37
|
+
} }))] }));
|
|
21
38
|
}
|
|
22
39
|
|
|
23
40
|
export { AssetChainLogo };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetChainLogo.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AssetChainLogo.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -21,7 +21,7 @@ function DepositAddressBlock({ assetLogo, chainLogo, receiverAddress, pm, source
|
|
|
21
21
|
, {
|
|
22
22
|
// Encode the EIP-681 / Solana Pay URI (address + amount + network) so a
|
|
23
23
|
// scanner prefills the send; fall back to the bare address same-chain.
|
|
24
|
-
value: (_a = pm === null || pm === void 0 ? void 0 : pm.addressUri) !== null && _a !== void 0 ? _a : receiverAddress, image: jsx(AssetChainLogo, { assetLogo: assetLogo !== null && assetLogo !== void 0 ? assetLogo : '', chainLogo: chainLogo !== null && chainLogo !== void 0 ? chainLogo : '' }), imageClip: false }) }), jsx("div", { style: depositAddressLabel, children: "Your deposit address" }), jsxs("div", { style: addressBox, children: [jsx("code", { style: codeStyle, children: receiverAddress }), jsx(CopyIconButton, { value: receiverAddress, size: 28 })] }), status && jsx(DepositStatus, { status: status }), !sameChain && pm && jsx(DepositDetails, { pm: pm, sourceCurrency: sourceCurrency })] }));
|
|
24
|
+
value: (_a = pm === null || pm === void 0 ? void 0 : pm.addressUri) !== null && _a !== void 0 ? _a : receiverAddress, image: jsx(AssetChainLogo, { assetLogo: assetLogo !== null && assetLogo !== void 0 ? assetLogo : '', chainLogo: chainLogo !== null && chainLogo !== void 0 ? chainLogo : '', symbol: sourceCurrency === null || sourceCurrency === void 0 ? void 0 : sourceCurrency.symbol }), imageClip: false }) }), jsx("div", { style: depositAddressLabel, children: "Your deposit address" }), jsxs("div", { style: addressBox, children: [jsx("code", { style: codeStyle, children: receiverAddress }), jsx(CopyIconButton, { value: receiverAddress, size: 28 })] }), status && jsx(DepositStatus, { status: status }), !sameChain && pm && jsx(DepositDetails, { pm: pm, sourceCurrency: sourceCurrency })] }));
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export { DepositAddressBlock };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { chainLogoUrl, currencyLogoUrl } from '../../../constants/logos.js';
|
|
3
|
+
import { caipToChainId } from '../DepositWallet/walletDeeplinks.js';
|
|
2
4
|
import { twoCol, field } from './formStyles.js';
|
|
3
5
|
import { LogoSelect } from './LogoSelect.js';
|
|
4
6
|
import { Skeleton } from './styles.js';
|
|
@@ -12,7 +14,15 @@ function RouteSelectors({ chains, chain, currency, chainLabel, onChainChange, on
|
|
|
12
14
|
}
|
|
13
15
|
const activeChain = (_a = chains.find((c) => c.id === chain)) !== null && _a !== void 0 ? _a : chains[0];
|
|
14
16
|
const currencies = (_b = activeChain === null || activeChain === void 0 ? void 0 : activeChain.currencies) !== null && _b !== void 0 ? _b : [];
|
|
15
|
-
return (jsxs("div", { style: twoCol, children: [jsxs("div", { style: field, children: [chainLabel, jsx(LogoSelect, { value: (_c = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id) !== null && _c !== void 0 ? _c : '', onChange: onChainChange, options: chains.map((c) => ({
|
|
17
|
+
return (jsxs("div", { style: twoCol, children: [jsxs("div", { style: field, children: [chainLabel, jsx(LogoSelect, { value: (_c = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id) !== null && _c !== void 0 ? _c : '', onChange: onChainChange, options: chains.map((c) => ({
|
|
18
|
+
value: c.id,
|
|
19
|
+
label: c.name,
|
|
20
|
+
logo: chainLogoUrl(caipToChainId(c.id), c.logo),
|
|
21
|
+
})) })] }), jsxs("div", { style: field, children: ["Currency", jsx(LogoSelect, { value: currency, onChange: onCurrencyChange, options: currencies.map((c) => ({
|
|
22
|
+
value: c.symbol,
|
|
23
|
+
label: c.symbol,
|
|
24
|
+
logo: currencyLogoUrl(c.symbol, c.logo),
|
|
25
|
+
})) })] })] }));
|
|
16
26
|
}
|
|
17
27
|
|
|
18
28
|
export { RouteSelectors };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteSelectors.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RouteSelectors.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Waiting for your deposit…" banner shown under the deposit address for a
|
|
3
|
+
* same-chain "transfer from address". Arrival detection lives in
|
|
4
|
+
* {@link import('./useSameChainArrival').useSameChainArrival}; on arrival the
|
|
5
|
+
* page swaps to {@link import('./SameChainDepositSuccess').SameChainDepositSuccess}.
|
|
6
|
+
*/
|
|
7
|
+
export declare function SameChainDepositStatus(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import styled from '../../../styles/styled/index.js';
|
|
4
|
+
import { Spinner } from '../../Common/Spinner/index.js';
|
|
5
|
+
import { useOpenfort } from '../../Openfort/useOpenfort.js';
|
|
6
|
+
|
|
7
|
+
const Banner = styled.div `
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: 8px;
|
|
11
|
+
margin-top: 14px;
|
|
12
|
+
padding: 10px 12px;
|
|
13
|
+
border-radius: 10px;
|
|
14
|
+
border: 1px solid var(--ck-body-divider, #e4e4e7);
|
|
15
|
+
background: var(--ck-body-background-secondary, #fafafa);
|
|
16
|
+
font-size: 14px;
|
|
17
|
+
color: var(--ck-body-color-muted, #6b7280);
|
|
18
|
+
`;
|
|
19
|
+
/**
|
|
20
|
+
* "Waiting for your deposit…" banner shown under the deposit address for a
|
|
21
|
+
* same-chain "transfer from address". Arrival detection lives in
|
|
22
|
+
* {@link import('./useSameChainArrival').useSameChainArrival}; on arrival the
|
|
23
|
+
* page swaps to {@link import('./SameChainDepositSuccess').SameChainDepositSuccess}.
|
|
24
|
+
*/
|
|
25
|
+
function SameChainDepositStatus() {
|
|
26
|
+
const { triggerResize } = useOpenfort();
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
triggerResize();
|
|
29
|
+
}, [triggerResize]);
|
|
30
|
+
return (jsxs(Banner, { children: [jsx(Spinner, {}), jsx("span", { children: "Waiting for your deposit\u2026" })] }));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { SameChainDepositStatus };
|
|
34
|
+
//# sourceMappingURL=SameChainDepositStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SameChainDepositStatus.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal success screen for a same-chain "transfer from address" deposit.
|
|
3
|
+
* The deposit lands in the wallet itself (no rail session), so arrival is
|
|
4
|
+
* detected by a native balance increase and we don't hold the inbound tx hash —
|
|
5
|
+
* "View on Explorer" therefore opens the wallet's address page, where the
|
|
6
|
+
* incoming transfer is listed.
|
|
7
|
+
*/
|
|
8
|
+
export declare function SameChainDepositSuccess({ address, chainId }: {
|
|
9
|
+
address: string;
|
|
10
|
+
chainId: number;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { ChainTypeEnum } from '@openfort/openfort-js';
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import { getExplorerUrl } from '../../../shared/utils/explorer.js';
|
|
5
|
+
import Button from '../../Common/Button/index.js';
|
|
6
|
+
import Loader from '../../Common/Loading/index.js';
|
|
7
|
+
import PoweredByFooter from '../../Common/PoweredByFooter/index.js';
|
|
8
|
+
import { routes } from '../../Openfort/types.js';
|
|
9
|
+
import { useOpenfort } from '../../Openfort/useOpenfort.js';
|
|
10
|
+
import { PageContent } from '../../PageContent/index.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Terminal success screen for a same-chain "transfer from address" deposit.
|
|
14
|
+
* The deposit lands in the wallet itself (no rail session), so arrival is
|
|
15
|
+
* detected by a native balance increase and we don't hold the inbound tx hash —
|
|
16
|
+
* "View on Explorer" therefore opens the wallet's address page, where the
|
|
17
|
+
* incoming transfer is listed.
|
|
18
|
+
*/
|
|
19
|
+
function SameChainDepositSuccess({ address, chainId }) {
|
|
20
|
+
const { setRoute, triggerResize } = useOpenfort();
|
|
21
|
+
// Collapse the modal from the tall deposit form down to the compact card.
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
triggerResize();
|
|
24
|
+
}, [triggerResize]);
|
|
25
|
+
const explorerUrl = getExplorerUrl(ChainTypeEnum.EVM, { chainId, address });
|
|
26
|
+
return (jsxs(PageContent, { children: [jsx(Loader, { isSuccess: true, header: "Deposit received", description: "Funds are in your wallet" }), explorerUrl && (jsx(Button, { variant: "primary", onClick: () => window.open(explorerUrl, '_blank', 'noopener,noreferrer'), children: "View on Explorer" })), jsx(Button, { variant: "secondary", onClick: () => setRoute(routes.CONNECTED), children: "Back to profile" }), jsx(PoweredByFooter, {})] }));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { SameChainDepositSuccess };
|
|
30
|
+
//# sourceMappingURL=SameChainDepositSuccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SameChainDepositSuccess.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A dev-facing notice shown only for test keys (`pk_test_…`) in the Deposit flow.
|
|
3
|
+
*
|
|
4
|
+
* Collapsed by default to a single summary line; expands to explain that funding
|
|
5
|
+
* routes through Relay, whose testnet rail bridges the same asset but cannot swap
|
|
6
|
+
* to a different token (testnets lack DEX liquidity, so e.g. `ETH → USDC` fails),
|
|
7
|
+
* and that card/exchange rails are mainnet-only. Links to Relay's testnet guide.
|
|
8
|
+
* Renders nothing on live keys.
|
|
9
|
+
*/
|
|
10
|
+
export declare function TestnetNotice(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import styled from '../../../styles/styled/index.js';
|
|
4
|
+
import { getPublishableKeyEnvironment } from '../../../utils/validation.js';
|
|
5
|
+
import { useOpenfort } from '../../Openfort/useOpenfort.js';
|
|
6
|
+
|
|
7
|
+
/** Relay's own testnet guide — the authoritative explanation of the limitation. */
|
|
8
|
+
const RELAY_TESTNET_DOCS = 'https://docs.relay.link/references/api/api_guides/testnet#testnet-support';
|
|
9
|
+
const FlaskIcon = () => (jsxs("svg", { width: "15", height: "15", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [jsx("path", { d: "M6 1.5h4M6.5 1.5v4.2L3.3 11.4A1.5 1.5 0 0 0 4.6 13.7h6.8a1.5 1.5 0 0 0 1.3-2.3L9.5 5.7V1.5", stroke: "currentColor", strokeWidth: "1.3", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M5.1 9h5.8", stroke: "currentColor", strokeWidth: "1.3", strokeLinecap: "round" })] }));
|
|
10
|
+
const Card = styled.div `
|
|
11
|
+
text-align: left;
|
|
12
|
+
margin-bottom: 14px;
|
|
13
|
+
border-radius: 12px;
|
|
14
|
+
/* Amber "sandbox" tint that reads on both light and dark themes. */
|
|
15
|
+
background: rgba(245, 158, 11, 0.09);
|
|
16
|
+
border: 1px solid rgba(245, 158, 11, 0.28);
|
|
17
|
+
color: var(--ck-body-color);
|
|
18
|
+
`;
|
|
19
|
+
/** The always-visible summary row; the whole row toggles the details. */
|
|
20
|
+
const Header = styled.button `
|
|
21
|
+
appearance: none;
|
|
22
|
+
width: 100%;
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: 9px;
|
|
26
|
+
padding: 10px 12px;
|
|
27
|
+
background: none;
|
|
28
|
+
border: 0;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
color: inherit;
|
|
31
|
+
font: inherit;
|
|
32
|
+
text-align: left;
|
|
33
|
+
`;
|
|
34
|
+
const Badge = styled.span `
|
|
35
|
+
flex-shrink: 0;
|
|
36
|
+
width: 22px;
|
|
37
|
+
height: 22px;
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
border-radius: 7px;
|
|
42
|
+
color: #b45309;
|
|
43
|
+
background: rgba(245, 158, 11, 0.18);
|
|
44
|
+
`;
|
|
45
|
+
const Summary = styled.span `
|
|
46
|
+
flex: 1;
|
|
47
|
+
min-width: 0;
|
|
48
|
+
font-size: 13px;
|
|
49
|
+
font-weight: 600;
|
|
50
|
+
line-height: 1.3;
|
|
51
|
+
`;
|
|
52
|
+
const Chevron = styled.span `
|
|
53
|
+
flex-shrink: 0;
|
|
54
|
+
color: var(--ck-body-color-muted, #6b7280);
|
|
55
|
+
font-size: 11px;
|
|
56
|
+
transition: transform 150ms ease;
|
|
57
|
+
transform: rotate(${({ $open }) => ($open ? '90deg' : '0deg')});
|
|
58
|
+
`;
|
|
59
|
+
const Body = styled.div `
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
gap: 7px;
|
|
63
|
+
padding: 0 12px 12px 43px;
|
|
64
|
+
font-size: 12.5px;
|
|
65
|
+
line-height: 1.45;
|
|
66
|
+
`;
|
|
67
|
+
const Muted = styled.p `
|
|
68
|
+
margin: 0;
|
|
69
|
+
color: var(--ck-body-color-muted, #6b7280);
|
|
70
|
+
`;
|
|
71
|
+
const Rules = styled.ul `
|
|
72
|
+
margin: 0;
|
|
73
|
+
padding: 0;
|
|
74
|
+
list-style: none;
|
|
75
|
+
display: flex;
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
gap: 3px;
|
|
78
|
+
|
|
79
|
+
li {
|
|
80
|
+
display: flex;
|
|
81
|
+
align-items: flex-start;
|
|
82
|
+
gap: 7px;
|
|
83
|
+
}
|
|
84
|
+
li[data-ok='true']::before {
|
|
85
|
+
content: '✓';
|
|
86
|
+
color: #16a34a;
|
|
87
|
+
font-weight: 700;
|
|
88
|
+
}
|
|
89
|
+
li[data-ok='false']::before {
|
|
90
|
+
content: '✕';
|
|
91
|
+
color: #dc2626;
|
|
92
|
+
font-weight: 700;
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
const DocsLink = styled.a `
|
|
96
|
+
display: inline-flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: 4px;
|
|
99
|
+
width: fit-content;
|
|
100
|
+
font-weight: 600;
|
|
101
|
+
color: var(--ck-body-color);
|
|
102
|
+
text-decoration: underline;
|
|
103
|
+
text-underline-offset: 2px;
|
|
104
|
+
|
|
105
|
+
&:hover {
|
|
106
|
+
opacity: 0.8;
|
|
107
|
+
}
|
|
108
|
+
`;
|
|
109
|
+
/**
|
|
110
|
+
* A dev-facing notice shown only for test keys (`pk_test_…`) in the Deposit flow.
|
|
111
|
+
*
|
|
112
|
+
* Collapsed by default to a single summary line; expands to explain that funding
|
|
113
|
+
* routes through Relay, whose testnet rail bridges the same asset but cannot swap
|
|
114
|
+
* to a different token (testnets lack DEX liquidity, so e.g. `ETH → USDC` fails),
|
|
115
|
+
* and that card/exchange rails are mainnet-only. Links to Relay's testnet guide.
|
|
116
|
+
* Renders nothing on live keys.
|
|
117
|
+
*/
|
|
118
|
+
function TestnetNotice() {
|
|
119
|
+
const { publishableKey, triggerResize } = useOpenfort();
|
|
120
|
+
const [open, setOpen] = useState(false);
|
|
121
|
+
// Re-measure the modal when the details expand/collapse so it grows/shrinks to fit.
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
triggerResize();
|
|
124
|
+
}, [open, triggerResize]);
|
|
125
|
+
if (getPublishableKeyEnvironment(publishableKey) !== 'test')
|
|
126
|
+
return null;
|
|
127
|
+
return (jsxs(Card, { children: [jsxs(Header, { type: "button", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [jsx(Badge, { children: jsx(FlaskIcon, {}) }), jsx(Summary, { children: "Testnet mode \u2014 funding is limited" }), jsx(Chevron, { "$open": open, children: "\u25B6" })] }), open && (jsxs(Body, { children: [jsx(Muted, { children: "Deposits route through Relay's testnet rail. It bridges the same asset but can't swap between tokens \u2014 testnets have no DEX liquidity. Card and exchange rails are mainnet-only." }), jsxs(Rules, { children: [jsx("li", { "data-ok": "true", children: "Bridging the same asset (e.g. ETH \u2192 ETH) and same-chain transfers" }), jsx("li", { "data-ok": "false", children: "Swapping to another token (e.g. \u2192 USDC) \u2014 fails with \"$0 liquidity\"" })] }), jsx(Muted, { children: "To test swaps, card or exchange deposits, use a live key on a low-cost chain like Base." }), jsx(DocsLink, { href: RELAY_TESTNET_DOCS, target: "_blank", rel: "noreferrer", children: "Why? Read Relay's testnet guide \u2197" })] }))] }));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export { TestnetNotice };
|
|
131
|
+
//# sourceMappingURL=TestnetNotice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestnetNotice.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FundingChain } from '../../../hooks/openfort/useFundingChains';
|
|
2
|
+
/**
|
|
3
|
+
* Shown in the deposit flow when the active funding TARGET chain (the embedded
|
|
4
|
+
* wallet's chain) isn't one the rail can deliver to — e.g. Polygon Amoy or a
|
|
5
|
+
* Solana testnet, which Relay's testnet rail doesn't route. Explains why, and
|
|
6
|
+
* (on EVM) offers a one-tap switch to the supported chains. Solana-only contexts
|
|
7
|
+
* have no in-VM switch, so they get the explanation alone.
|
|
8
|
+
*/
|
|
9
|
+
export declare function UnsupportedNetworkNotice({ targetChain, railChains, }: {
|
|
10
|
+
targetChain: string;
|
|
11
|
+
railChains: FundingChain[];
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element;
|