@relayprotocol/relay-kit-ui 10.0.0 → 10.0.1
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/_cjs/src/components/common/CustomAddressModal.js +18 -8
- package/_cjs/src/components/common/CustomAddressModal.js.map +1 -1
- package/_cjs/src/components/common/RefundReason.js +106 -3
- package/_cjs/src/components/common/RefundReason.js.map +1 -1
- package/_cjs/src/components/primitives/ChainIcon.js +2 -1
- package/_cjs/src/components/primitives/ChainIcon.js.map +1 -1
- package/_cjs/src/components/primitives/ChainTokenIcon.js +6 -2
- package/_cjs/src/components/primitives/ChainTokenIcon.js.map +1 -1
- package/_cjs/src/components/widgets/OnrampWidget/widget/index.js +1 -1
- package/_cjs/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
- package/_cjs/src/components/widgets/SwapWidgetRenderer.js +17 -3
- package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
- package/_cjs/src/components/widgets/WidgetContainer.js +1 -1
- package/_cjs/src/components/widgets/WidgetContainer.js.map +1 -1
- package/_cjs/src/constants/events.js +2 -1
- package/_cjs/src/constants/events.js.map +1 -1
- package/_cjs/src/hooks/index.js +3 -1
- package/_cjs/src/hooks/index.js.map +1 -1
- package/_cjs/src/hooks/useKnownTokenContract.js +45 -0
- package/_cjs/src/hooks/useKnownTokenContract.js.map +1 -0
- package/_cjs/src/version.js +1 -1
- package/_cjs/src/version.js.map +1 -1
- package/_cjs/tsconfig.build.tsbuildinfo +1 -1
- package/_esm/src/components/common/CustomAddressModal.js +24 -10
- package/_esm/src/components/common/CustomAddressModal.js.map +1 -1
- package/_esm/src/components/common/RefundReason.js +107 -4
- package/_esm/src/components/common/RefundReason.js.map +1 -1
- package/_esm/src/components/primitives/ChainIcon.js +3 -2
- package/_esm/src/components/primitives/ChainIcon.js.map +1 -1
- package/_esm/src/components/primitives/ChainTokenIcon.js +6 -3
- package/_esm/src/components/primitives/ChainTokenIcon.js.map +1 -1
- package/_esm/src/components/widgets/OnrampWidget/widget/index.js +1 -1
- package/_esm/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
- package/_esm/src/components/widgets/SwapWidgetRenderer.js +22 -5
- package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
- package/_esm/src/components/widgets/WidgetContainer.js +1 -1
- package/_esm/src/components/widgets/WidgetContainer.js.map +1 -1
- package/_esm/src/constants/events.js +2 -1
- package/_esm/src/constants/events.js.map +1 -1
- package/_esm/src/hooks/index.js +2 -1
- package/_esm/src/hooks/index.js.map +1 -1
- package/_esm/src/hooks/useKnownTokenContract.js +52 -0
- package/_esm/src/hooks/useKnownTokenContract.js.map +1 -0
- package/_esm/src/version.js +1 -1
- package/_esm/src/version.js.map +1 -1
- package/_esm/tsconfig.build.tsbuildinfo +1 -1
- package/_types/src/components/common/CustomAddressModal.d.ts.map +1 -1
- package/_types/src/components/common/RefundReason.d.ts.map +1 -1
- package/_types/src/components/primitives/ChainIcon.d.ts.map +1 -1
- package/_types/src/components/primitives/ChainTokenIcon.d.ts.map +1 -1
- package/_types/src/components/widgets/OnrampWidget/widget/index.d.ts.map +1 -1
- package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
- package/_types/src/components/widgets/WidgetContainer.d.ts.map +1 -1
- package/_types/src/constants/events.d.ts +1 -0
- package/_types/src/constants/events.d.ts.map +1 -1
- package/_types/src/hooks/index.d.ts +2 -1
- package/_types/src/hooks/index.d.ts.map +1 -1
- package/_types/src/hooks/useKnownTokenContract.d.ts +35 -0
- package/_types/src/hooks/useKnownTokenContract.d.ts.map +1 -0
- package/_types/src/version.d.ts +1 -1
- package/_types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -21,7 +21,7 @@ const address_js_1 = require("../../utils/address.js");
|
|
|
21
21
|
const RelayKitProvider_js_1 = require("../../providers/RelayKitProvider.js");
|
|
22
22
|
const localStorage_js_1 = require("../../utils/localStorage.js");
|
|
23
23
|
const lighter_js_1 = require("../../utils/lighter.js");
|
|
24
|
-
const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnected, multiWalletSupportEnabled, wallet, onAnalyticEvent, onOpenChange, onConfirmed, onClear }) => {
|
|
24
|
+
const CustomAddressModal = ({ open, toToken, toAddress, toChain, linkedWallets, isConnected, multiWalletSupportEnabled, wallet, onAnalyticEvent, onOpenChange, onConfirmed, onClear }) => {
|
|
25
25
|
const haptic = (0, RelayKitProvider_js_1.useHapticEvent)();
|
|
26
26
|
const connectedAddress = (0, index_js_2.useWalletAddress)(wallet, linkedWallets);
|
|
27
27
|
const [address, setAddress] = (0, react_1.useState)('');
|
|
@@ -65,7 +65,14 @@ const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnect
|
|
|
65
65
|
}
|
|
66
66
|
}, [open]);
|
|
67
67
|
const { data: resolvedENS, isLoading: isLoadingENS } = (0, index_js_2.useENSResolver)((0, ens_js_1.isENSName)(input) ? input : '');
|
|
68
|
-
const
|
|
68
|
+
const matchesToToken = Boolean(toToken &&
|
|
69
|
+
toChain &&
|
|
70
|
+
toToken.chainId === toChain.id &&
|
|
71
|
+
(0, address_js_1.addressesEqual)(toChain.vmType ?? 'evm', address, toToken.address));
|
|
72
|
+
const { tokenContract: knownCurrencyMatch, isChecking: isCheckingTokenContract } = (0, index_js_2.useKnownTokenContract)(toChain, address, !matchesToToken);
|
|
73
|
+
const knownTokenContract = matchesToToken ? toToken : knownCurrencyMatch;
|
|
74
|
+
const isKnownTokenContract = Boolean(knownTokenContract);
|
|
75
|
+
const isLoading = isLoadingENS || isResolvingLighter || isCheckingTokenContract;
|
|
69
76
|
(0, react_1.useEffect)(() => {
|
|
70
77
|
if (isLighterChain && isEvmInput) {
|
|
71
78
|
setAddress(resolvedLighterIndex ?? '');
|
|
@@ -101,7 +108,7 @@ const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnect
|
|
|
101
108
|
e.preventDefault();
|
|
102
109
|
}, onClick: () => {
|
|
103
110
|
setInput('');
|
|
104
|
-
}, children: (0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleXmark_1.faCircleXmark, width: 16, height: 16 }) })), isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "relay:absolute relay:right-2 relay:top-[12px]", children: (0, jsx_runtime_1.jsx)(LoadingSpinner_js_1.LoadingSpinner, {}) }))] }), isLighterError ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "Failed to resolve Lighter address" })) : isLighterChain &&
|
|
111
|
+
}, children: (0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleXmark_1.faCircleXmark, width: 16, height: 16 }) })), isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "relay:absolute relay:right-2 relay:top-[12px]", children: (0, jsx_runtime_1.jsx)(LoadingSpinner_js_1.LoadingSpinner, {}) }))] }), isKnownTokenContract ? ((0, jsx_runtime_1.jsxs)(index_js_1.Text, { color: "red", style: "subtitle2", children: ["This address is the contract for", ' ', knownTokenContract?.symbol ?? 'a token', ", not a wallet. To continue, enter a wallet address or use the token selector."] })) : isLighterError ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "Failed to resolve Lighter address" })) : isLighterChain &&
|
|
105
112
|
isEvmInput &&
|
|
106
113
|
!isResolvingLighter &&
|
|
107
114
|
!resolvedLighterIndex ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "No Lighter account found for this EVM address" })) : !address && input.length && !isLoading ? ((0, jsx_runtime_1.jsx)(index_js_1.Text, { color: "red", style: "subtitle2", children: "Not a valid address" })) : null, didResolveLighterFromEvm && resolvedLighterIndex ? ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleCheck_1.faCircleCheck, color: "#30A46C", width: 16, height: 16 }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", children: ["Lighter Account ID: ", resolvedLighterIndex] })] })) : null, !connectedAddressSet && address && isConnected ? ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faTriangleExclamation_1.faTriangleExclamation, color: "#FFA01C", width: 16, height: 16, className: "relay:shrink-0" }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle3", color: "warning", children: ["This isn't the connected wallet address. Please ensure that the address provided is accurate.", ' '] })] })) : null, !multiWalletSupportEnabled && isConnected ? (connectedAddressSet ? ((0, jsx_runtime_1.jsxs)(index_js_1.Flex, { className: "relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2", align: "center", children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faCircleCheck_1.faCircleCheck, color: "#30A46C", width: 16, height: 16 }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle3", children: "Connected Wallet" })] })) : ((0, jsx_runtime_1.jsx)(Anchor_js_1.AnchorButton, { onClick: () => {
|
|
@@ -109,14 +116,17 @@ const CustomAddressModal = ({ open, toAddress, toChain, linkedWallets, isConnect
|
|
|
109
116
|
onOpenChange(false);
|
|
110
117
|
}, children: "Use connected wallet address" }))) : null, filteredRecentCustomAddresses.length > 0 ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: "Recent addresses" }), (0, jsx_runtime_1.jsx)(index_js_1.Flex, { className: "relay:gap-2 relay:flex-wrap", align: "center", children: filteredRecentCustomAddresses.map((address) => ((0, jsx_runtime_1.jsxs)(index_js_1.Pill, { color: "transparent", bordered: true, radius: "squared", className: "relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2", onClick: () => {
|
|
111
118
|
haptic('light');
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
onAnalyticEvent?.(events_js_1.EventNames.ADDRESS_MODAL_CONFIRMED, {
|
|
119
|
+
setInput(address);
|
|
120
|
+
onAnalyticEvent?.(events_js_1.EventNames.ADDRESS_MODAL_RECENT_SELECTED, {
|
|
115
121
|
address: address,
|
|
116
122
|
context: 'custom_address'
|
|
117
123
|
});
|
|
118
|
-
}, children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faClipboard_1.faClipboard, width: 16, height: 16, color: "#9CA3AF" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: (0, truncate_js_1.truncateAddress)(address) })] }, address))) })] })) : null] }), (0, jsx_runtime_1.jsx)(index_js_1.Button, { cta: true, disabled: isLoading ||
|
|
119
|
-
|
|
124
|
+
}, children: [(0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { icon: faClipboard_1.faClipboard, width: 16, height: 16, color: "#9CA3AF" }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle2", children: (0, truncate_js_1.truncateAddress)(address) })] }, address))) })] })) : null] }), (0, jsx_runtime_1.jsx)(index_js_1.Button, { cta: true, disabled: isLoading ||
|
|
125
|
+
isKnownTokenContract ||
|
|
126
|
+
!(0, address_js_1.isValidAddress)(toChain?.vmType, address, toChain?.id), className: "relay:justify-center", onClick: () => {
|
|
127
|
+
if (!isKnownTokenContract &&
|
|
128
|
+
!isCheckingTokenContract &&
|
|
129
|
+
(0, address_js_1.isValidAddress)(toChain?.vmType, address, toChain?.id)) {
|
|
120
130
|
const isConnectedWallet = availableWallets.some((wallet) => wallet.address === address);
|
|
121
131
|
if (!isConnectedWallet && address !== connectedAddress) {
|
|
122
132
|
(0, localStorage_js_1.addCustomAddress)(address);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomAddressModal.js","sourceRoot":"","sources":["../../../../src/components/common/CustomAddressModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC, useState, useEffect, useMemo, useContext } from 'react'\nimport { Text, Flex, Button, Input, Pill } from '../primitives/index.js'\nimport { Modal } from '../common/Modal.js'\nimport { type Address, isAddress } from 'viem'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n useENSResolver,\n useWalletAddress,\n useLighterAccount\n} from '../../hooks/index.js'\nimport { isENSName } from '../../utils/ens.js'\nimport { LoadingSpinner } from '../common/LoadingSpinner.js'\nimport { EventNames } from '../../constants/events.js'\nimport type { Token } from '../../types/index.js'\nimport { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck'\nimport { faTriangleExclamation } from '@fortawesome/free-solid-svg-icons/faTriangleExclamation'\nimport { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard'\nimport { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark'\nimport { AnchorButton } from '../primitives/Anchor.js'\nimport type { AdaptedWallet, RelayChain } from '@relayprotocol/relay-sdk'\nimport type { LinkedWallet } from '../../types/index.js'\nimport { truncateAddress } from '../../utils/truncate.js'\nimport { isValidAddress } from '../../utils/address.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../providers/RelayKitProvider.js'\nimport {\n addCustomAddress,\n getCustomAddresses\n} from '../../utils/localStorage.js'\nimport { isLighterAddress } from '../../utils/lighter.js'\n\ntype Props = {\n open: boolean\n toToken?: Token\n toAddress?: string\n toChain?: RelayChain\n isConnected?: boolean\n multiWalletSupportEnabled?: boolean\n linkedWallets: LinkedWallet[]\n wallet?: AdaptedWallet\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onOpenChange: (open: boolean) => void\n onConfirmed: (address: Address | string) => void\n onClear: () => void\n}\n\nexport const CustomAddressModal: FC<Props> = ({\n open,\n toAddress,\n toChain,\n linkedWallets,\n isConnected,\n multiWalletSupportEnabled,\n wallet,\n onAnalyticEvent,\n onOpenChange,\n onConfirmed,\n onClear\n}) => {\n const haptic = useHapticEvent()\n const connectedAddress = useWalletAddress(wallet, linkedWallets)\n const [address, setAddress] = useState('')\n const [input, setInput] = useState('')\n const [recentCustomAddresses, setRecentCustomAddresses] = useState<string[]>(\n []\n )\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n\n // Lighter: allow resolving EVM address to Lighter account ID (and vice versa)\n const isLighterChain = toChain?.vmType === 'lvm'\n const isEvmInput = isAddress(input)\n const isLighterIndexInput = isLighterAddress(input)\n\n const {\n data: lighterAccount,\n isLoading: isResolvingLighter,\n isError: isLighterError\n } = useLighterAccount(\n isLighterChain && (isEvmInput || isLighterIndexInput) ? input : undefined\n )\n\n const resolvedLighterIndex = lighterAccount?.index?.toString()\n\n const didResolveLighterFromEvm =\n isLighterChain &&\n isEvmInput &&\n !!resolvedLighterIndex &&\n isLighterAddress(resolvedLighterIndex)\n\n const availableWallets = useMemo(\n () =>\n linkedWallets.filter((wallet) =>\n isValidAddress(\n toChain?.vmType,\n wallet.address,\n toChain?.id,\n wallet.connector,\n connectorKeyOverrides\n )\n ),\n [toChain, linkedWallets]\n )\n\n const filteredRecentCustomAddresses = useMemo(\n () =>\n recentCustomAddresses.filter((address) =>\n isValidAddress(toChain?.vmType, address, toChain?.id)\n ),\n [recentCustomAddresses, toChain]\n )\n\n // For Lighter: check if the EVM address (input or resolved) matches connected wallet\n const isLighterConnectedWallet =\n isLighterChain &&\n !!lighterAccount &&\n // User entered EVM address - check if it matches connected wallet\n ((isEvmInput && input.toLowerCase() === connectedAddress?.toLowerCase()) ||\n // User entered Lighter index - check if resolved l1_address matches connected wallet\n (isLighterIndexInput &&\n lighterAccount.l1_address?.toLowerCase() ===\n connectedAddress?.toLowerCase()))\n\n const connectedAddressSet =\n (!address && !toAddress) ||\n (toAddress === connectedAddress && address === connectedAddress) ||\n availableWallets.some((wallet) => wallet.address === toAddress) ||\n isLighterConnectedWallet\n\n useEffect(() => {\n if (!open) {\n setAddress('')\n setInput('')\n } else {\n if (isValidAddress(toChain?.vmType, toAddress ?? '', toChain?.id)) {\n setAddress(toAddress ? toAddress : '')\n setInput(toAddress ? toAddress : '')\n }\n // Load custom addresses when modal opens\n setRecentCustomAddresses(getCustomAddresses())\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_OPEN)\n }\n }, [open])\n\n const { data: resolvedENS, isLoading: isLoadingENS } = useENSResolver(\n isENSName(input) ? input : ''\n )\n\n const isLoading = isLoadingENS || isResolvingLighter\n\n useEffect(() => {\n if (isLighterChain && isEvmInput) {\n setAddress(resolvedLighterIndex ?? '')\n } else if (isValidAddress(toChain?.vmType, input, toChain?.id)) {\n setAddress(input)\n } else if (resolvedENS?.address) {\n setAddress(resolvedENS.address)\n } else {\n setAddress('')\n }\n }, [\n input,\n resolvedENS,\n resolvedLighterIndex,\n isLighterChain,\n isEvmInput,\n toChain\n ])\n\n return (\n <Modal\n trigger={null}\n open={open}\n onOpenChange={onOpenChange}\n className=\"relay:overflow-hidden\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:h-full relay:gap-4 relay:sm:w-[386px]\"\n >\n <Text style=\"h6\">To Address</Text>\n <Flex direction=\"column\" className=\"relay:gap-2 relay:relative\">\n <Flex\n className=\"relay:relative relay:w-full\"\n >\n <Input\n type=\"text\"\n inputMode=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n className=\"ph-no-capture relay:w-full relay:h-12\"\n inputStyle={{\n paddingRight: input.length > 0 ? '42px' : '16px'\n }}\n placeholder={\n !toChain\n ? 'Enter address'\n : toChain.vmType === 'evm'\n ? 'Address or ENS'\n : isLighterChain\n ? `${toChain.displayName} address or EVM address`\n : `Enter ${toChain.displayName} address`\n }\n value={input}\n onChange={(e) => {\n setInput((e.target as HTMLInputElement).value)\n }}\n />\n {input.length > 0 && !isLoading && (\n <Button\n color=\"ghost\"\n size=\"none\"\n className=\"relay:absolute relay:right-[8px] relay:top-1/2 relay:-translate-y-1/2 relay:!w-[24px] relay:!h-[24px] relay:!min-w-0 relay:!min-h-0 relay:!leading-none relay:p-0 relay:rounded relay:flex relay:items-center relay:justify-center relay:bg-[var(--relay-colors-gray3)] relay:!text-[color:var(--relay-colors-gray8)]\"\n onMouseDown={(e) => {\n e.preventDefault() // Prevent input from losing focus\n }}\n onClick={() => {\n setInput('')\n }}\n >\n <FontAwesomeIcon icon={faCircleXmark} width={16} height={16} />\n </Button>\n )}\n {isLoading && (\n <div className=\"relay:absolute relay:right-2 relay:top-[12px]\">\n <LoadingSpinner />\n </div>\n )}\n </Flex>\n {isLighterError ? (\n <Text color=\"red\" style=\"subtitle2\">\n Failed to resolve Lighter address\n </Text>\n ) : isLighterChain &&\n isEvmInput &&\n !isResolvingLighter &&\n !resolvedLighterIndex ? (\n <Text color=\"red\" style=\"subtitle2\">\n No Lighter account found for this EVM address\n </Text>\n ) : !address && input.length && !isLoading ? (\n <Text color=\"red\" style=\"subtitle2\">\n Not a valid address\n </Text>\n ) : null}\n\n {didResolveLighterFromEvm && resolvedLighterIndex ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">\n Lighter Account ID: {resolvedLighterIndex}\n </Text>\n </Flex>\n ) : null}\n\n {!connectedAddressSet && address && isConnected ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faTriangleExclamation}\n color=\"#FFA01C\"\n width={16}\n height={16}\n className=\"relay:shrink-0\"\n />\n <Text style=\"subtitle3\" color=\"warning\">\n This isn't the connected wallet address. Please ensure that the\n address provided is accurate.{' '}\n </Text>\n </Flex>\n ) : null}\n\n {!multiWalletSupportEnabled && isConnected ? (\n connectedAddressSet ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">Connected Wallet</Text>\n </Flex>\n ) : (\n <AnchorButton\n onClick={() => {\n onClear()\n onOpenChange(false)\n }}\n >\n Use connected wallet address\n </AnchorButton>\n )\n ) : null}\n\n {filteredRecentCustomAddresses.length > 0 ? (\n <>\n <Text style=\"subtitle2\">Recent addresses</Text>\n <Flex className=\"relay:gap-2 relay:flex-wrap\" align=\"center\">\n {filteredRecentCustomAddresses.map((address) => (\n <Pill\n key={address}\n color=\"transparent\"\n bordered\n radius=\"squared\"\n className=\"relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2\"\n onClick={() => {\n haptic('light')\n onConfirmed(address)\n onOpenChange(false)\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {\n address: address,\n context: 'custom_address'\n })\n }}\n >\n <FontAwesomeIcon\n icon={faClipboard}\n width={16}\n height={16}\n color=\"#9CA3AF\"\n />\n <Text style=\"subtitle2\">{truncateAddress(address)}</Text>\n </Pill>\n ))}\n </Flex>\n </>\n ) : null}\n </Flex>\n <Button\n cta={true}\n disabled={\n isLoading || !isValidAddress(toChain?.vmType, address, toChain?.id)\n }\n className=\"relay:justify-center\"\n onClick={() => {\n if (isValidAddress(toChain?.vmType, address, toChain?.id)) {\n // Save the address to custom addresses if it's not a connected wallet address\n const isConnectedWallet = availableWallets.some(\n (wallet) => wallet.address === address\n )\n if (!isConnectedWallet && address !== connectedAddress) {\n addCustomAddress(address)\n setRecentCustomAddresses(getCustomAddresses())\n }\n\n haptic('light')\n onConfirmed(address)\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {\n address: address,\n context: 'input'\n })\n }\n onOpenChange(false)\n }}\n data-testid=\"save-button\"\n >\n Save\n </Button>\n </Flex>\n </Modal>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CustomAddressModal.js","sourceRoot":"","sources":["../../../../src/components/common/CustomAddressModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC, useState, useEffect, useMemo, useContext } from 'react'\nimport { Text, Flex, Button, Input, Pill } from '../primitives/index.js'\nimport { Modal } from '../common/Modal.js'\nimport { type Address, isAddress } from 'viem'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n useENSResolver,\n useWalletAddress,\n useLighterAccount,\n useKnownTokenContract\n} from '../../hooks/index.js'\nimport { isENSName } from '../../utils/ens.js'\nimport { LoadingSpinner } from '../common/LoadingSpinner.js'\nimport { EventNames } from '../../constants/events.js'\nimport type { Token } from '../../types/index.js'\nimport { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck'\nimport { faTriangleExclamation } from '@fortawesome/free-solid-svg-icons/faTriangleExclamation'\nimport { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard'\nimport { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark'\nimport { AnchorButton } from '../primitives/Anchor.js'\nimport type { AdaptedWallet, RelayChain } from '@relayprotocol/relay-sdk'\nimport type { LinkedWallet } from '../../types/index.js'\nimport { truncateAddress } from '../../utils/truncate.js'\nimport { addressesEqual, isValidAddress } from '../../utils/address.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../providers/RelayKitProvider.js'\nimport {\n addCustomAddress,\n getCustomAddresses\n} from '../../utils/localStorage.js'\nimport { isLighterAddress } from '../../utils/lighter.js'\n\ntype Props = {\n open: boolean\n toToken?: Token\n toAddress?: string\n toChain?: RelayChain\n isConnected?: boolean\n multiWalletSupportEnabled?: boolean\n linkedWallets: LinkedWallet[]\n wallet?: AdaptedWallet\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onOpenChange: (open: boolean) => void\n onConfirmed: (address: Address | string) => void\n onClear: () => void\n}\n\nexport const CustomAddressModal: FC<Props> = ({\n open,\n toToken,\n toAddress,\n toChain,\n linkedWallets,\n isConnected,\n multiWalletSupportEnabled,\n wallet,\n onAnalyticEvent,\n onOpenChange,\n onConfirmed,\n onClear\n}) => {\n const haptic = useHapticEvent()\n const connectedAddress = useWalletAddress(wallet, linkedWallets)\n const [address, setAddress] = useState('')\n const [input, setInput] = useState('')\n const [recentCustomAddresses, setRecentCustomAddresses] = useState<string[]>(\n []\n )\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n\n // Lighter: allow resolving EVM address to Lighter account ID (and vice versa)\n const isLighterChain = toChain?.vmType === 'lvm'\n const isEvmInput = isAddress(input)\n const isLighterIndexInput = isLighterAddress(input)\n\n const {\n data: lighterAccount,\n isLoading: isResolvingLighter,\n isError: isLighterError\n } = useLighterAccount(\n isLighterChain && (isEvmInput || isLighterIndexInput) ? input : undefined\n )\n\n const resolvedLighterIndex = lighterAccount?.index?.toString()\n\n const didResolveLighterFromEvm =\n isLighterChain &&\n isEvmInput &&\n !!resolvedLighterIndex &&\n isLighterAddress(resolvedLighterIndex)\n\n const availableWallets = useMemo(\n () =>\n linkedWallets.filter((wallet) =>\n isValidAddress(\n toChain?.vmType,\n wallet.address,\n toChain?.id,\n wallet.connector,\n connectorKeyOverrides\n )\n ),\n [toChain, linkedWallets]\n )\n\n const filteredRecentCustomAddresses = useMemo(\n () =>\n recentCustomAddresses.filter((address) =>\n isValidAddress(toChain?.vmType, address, toChain?.id)\n ),\n [recentCustomAddresses, toChain]\n )\n\n // For Lighter: check if the EVM address (input or resolved) matches connected wallet\n const isLighterConnectedWallet =\n isLighterChain &&\n !!lighterAccount &&\n // User entered EVM address - check if it matches connected wallet\n ((isEvmInput && input.toLowerCase() === connectedAddress?.toLowerCase()) ||\n // User entered Lighter index - check if resolved l1_address matches connected wallet\n (isLighterIndexInput &&\n lighterAccount.l1_address?.toLowerCase() ===\n connectedAddress?.toLowerCase()))\n\n const connectedAddressSet =\n (!address && !toAddress) ||\n (toAddress === connectedAddress && address === connectedAddress) ||\n availableWallets.some((wallet) => wallet.address === toAddress) ||\n isLighterConnectedWallet\n\n useEffect(() => {\n if (!open) {\n setAddress('')\n setInput('')\n } else {\n if (isValidAddress(toChain?.vmType, toAddress ?? '', toChain?.id)) {\n setAddress(toAddress ? toAddress : '')\n setInput(toAddress ? toAddress : '')\n }\n // Load custom addresses when modal opens\n setRecentCustomAddresses(getCustomAddresses())\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_OPEN)\n }\n }, [open])\n\n const { data: resolvedENS, isLoading: isLoadingENS } = useENSResolver(\n isENSName(input) ? input : ''\n )\n\n // Synchronously block the selected destination token's contract address\n const matchesToToken = Boolean(\n toToken &&\n toChain &&\n toToken.chainId === toChain.id &&\n addressesEqual(toChain.vmType ?? 'evm', address, toToken.address)\n )\n\n // Asynchronously check if the address is a known token contract on the\n // destination chain\n const { tokenContract: knownCurrencyMatch, isChecking: isCheckingTokenContract } =\n useKnownTokenContract(toChain, address, !matchesToToken)\n\n const knownTokenContract = matchesToToken ? toToken : knownCurrencyMatch\n\n const isKnownTokenContract = Boolean(knownTokenContract)\n\n const isLoading =\n isLoadingENS || isResolvingLighter || isCheckingTokenContract\n\n useEffect(() => {\n if (isLighterChain && isEvmInput) {\n setAddress(resolvedLighterIndex ?? '')\n } else if (isValidAddress(toChain?.vmType, input, toChain?.id)) {\n setAddress(input)\n } else if (resolvedENS?.address) {\n setAddress(resolvedENS.address)\n } else {\n setAddress('')\n }\n }, [\n input,\n resolvedENS,\n resolvedLighterIndex,\n isLighterChain,\n isEvmInput,\n toChain\n ])\n\n return (\n <Modal\n trigger={null}\n open={open}\n onOpenChange={onOpenChange}\n className=\"relay:overflow-hidden\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:h-full relay:gap-4 relay:sm:w-[386px]\"\n >\n <Text style=\"h6\">To Address</Text>\n <Flex direction=\"column\" className=\"relay:gap-2 relay:relative\">\n <Flex\n className=\"relay:relative relay:w-full\"\n >\n <Input\n type=\"text\"\n inputMode=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n className=\"ph-no-capture relay:w-full relay:h-12\"\n inputStyle={{\n paddingRight: input.length > 0 ? '42px' : '16px'\n }}\n placeholder={\n !toChain\n ? 'Enter address'\n : toChain.vmType === 'evm'\n ? 'Address or ENS'\n : isLighterChain\n ? `${toChain.displayName} address or EVM address`\n : `Enter ${toChain.displayName} address`\n }\n value={input}\n onChange={(e) => {\n setInput((e.target as HTMLInputElement).value)\n }}\n />\n {input.length > 0 && !isLoading && (\n <Button\n color=\"ghost\"\n size=\"none\"\n className=\"relay:absolute relay:right-[8px] relay:top-1/2 relay:-translate-y-1/2 relay:!w-[24px] relay:!h-[24px] relay:!min-w-0 relay:!min-h-0 relay:!leading-none relay:p-0 relay:rounded relay:flex relay:items-center relay:justify-center relay:bg-[var(--relay-colors-gray3)] relay:!text-[color:var(--relay-colors-gray8)]\"\n onMouseDown={(e) => {\n e.preventDefault() // Prevent input from losing focus\n }}\n onClick={() => {\n setInput('')\n }}\n >\n <FontAwesomeIcon icon={faCircleXmark} width={16} height={16} />\n </Button>\n )}\n {isLoading && (\n <div className=\"relay:absolute relay:right-2 relay:top-[12px]\">\n <LoadingSpinner />\n </div>\n )}\n </Flex>\n {isKnownTokenContract ? (\n <Text color=\"red\" style=\"subtitle2\">\n This address is the contract for{' '}\n {knownTokenContract?.symbol ?? 'a token'}, not a wallet. To\n continue, enter a wallet address or use the token selector.\n </Text>\n ) : isLighterError ? (\n <Text color=\"red\" style=\"subtitle2\">\n Failed to resolve Lighter address\n </Text>\n ) : isLighterChain &&\n isEvmInput &&\n !isResolvingLighter &&\n !resolvedLighterIndex ? (\n <Text color=\"red\" style=\"subtitle2\">\n No Lighter account found for this EVM address\n </Text>\n ) : !address && input.length && !isLoading ? (\n <Text color=\"red\" style=\"subtitle2\">\n Not a valid address\n </Text>\n ) : null}\n\n {didResolveLighterFromEvm && resolvedLighterIndex ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">\n Lighter Account ID: {resolvedLighterIndex}\n </Text>\n </Flex>\n ) : null}\n\n {!connectedAddressSet && address && isConnected ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-amber2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faTriangleExclamation}\n color=\"#FFA01C\"\n width={16}\n height={16}\n className=\"relay:shrink-0\"\n />\n <Text style=\"subtitle3\" color=\"warning\">\n This isn't the connected wallet address. Please ensure that the\n address provided is accurate.{' '}\n </Text>\n </Flex>\n ) : null}\n\n {!multiWalletSupportEnabled && isConnected ? (\n connectedAddressSet ? (\n <Flex\n className=\"relay:bg-[var(--relay-colors-green2)] relay:p-2 relay:rounded-lg relay:gap-2\"\n align=\"center\"\n >\n <FontAwesomeIcon\n icon={faCircleCheck}\n color=\"#30A46C\"\n width={16}\n height={16}\n />\n <Text style=\"subtitle3\">Connected Wallet</Text>\n </Flex>\n ) : (\n <AnchorButton\n onClick={() => {\n onClear()\n onOpenChange(false)\n }}\n >\n Use connected wallet address\n </AnchorButton>\n )\n ) : null}\n\n {filteredRecentCustomAddresses.length > 0 ? (\n <>\n <Text style=\"subtitle2\">Recent addresses</Text>\n <Flex className=\"relay:gap-2 relay:flex-wrap\" align=\"center\">\n {filteredRecentCustomAddresses.map((address) => (\n <Pill\n key={address}\n color=\"transparent\"\n bordered\n radius=\"squared\"\n className=\"relay:flex relay:items-center relay:gap-[6px] relay:cursor-pointer relay:px-2\"\n onClick={() => {\n haptic('light')\n // Route recent addresses through input validation\n setInput(address)\n onAnalyticEvent?.(\n EventNames.ADDRESS_MODAL_RECENT_SELECTED,\n {\n address: address,\n context: 'custom_address'\n }\n )\n }}\n >\n <FontAwesomeIcon\n icon={faClipboard}\n width={16}\n height={16}\n color=\"#9CA3AF\"\n />\n <Text style=\"subtitle2\">{truncateAddress(address)}</Text>\n </Pill>\n ))}\n </Flex>\n </>\n ) : null}\n </Flex>\n <Button\n cta={true}\n disabled={\n isLoading ||\n isKnownTokenContract ||\n !isValidAddress(toChain?.vmType, address, toChain?.id)\n }\n className=\"relay:justify-center\"\n onClick={() => {\n if (\n !isKnownTokenContract &&\n !isCheckingTokenContract &&\n isValidAddress(toChain?.vmType, address, toChain?.id)\n ) {\n // Save the address to custom addresses if it's not a connected wallet address\n const isConnectedWallet = availableWallets.some(\n (wallet) => wallet.address === address\n )\n if (!isConnectedWallet && address !== connectedAddress) {\n addCustomAddress(address)\n setRecentCustomAddresses(getCustomAddresses())\n }\n\n haptic('light')\n onConfirmed(address)\n onAnalyticEvent?.(EventNames.ADDRESS_MODAL_CONFIRMED, {\n address: address,\n context: 'input'\n })\n }\n onOpenChange(false)\n }}\n data-testid=\"save-button\"\n >\n Save\n </Button>\n </Flex>\n </Modal>\n )\n}\n"]}
|
|
@@ -15,7 +15,8 @@ const RefundReason = ({ reasonCode }) => {
|
|
|
15
15
|
case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {
|
|
16
16
|
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the fees exceeded the expected amount. Try adjusting the slippage or amount." }));
|
|
17
17
|
}
|
|
18
|
-
case 'NO_QUOTES':
|
|
18
|
+
case 'NO_QUOTES':
|
|
19
|
+
case 'NO_INTERNAL_SWAP_ROUTES_FOUND': {
|
|
19
20
|
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because no swap routes were found for your request. Try a different token or amount." }));
|
|
20
21
|
}
|
|
21
22
|
case 'REVERSE_SWAP_FAILED': {
|
|
@@ -34,13 +35,115 @@ const RefundReason = ({ reasonCode }) => {
|
|
|
34
35
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Your transaction amount is insufficient to cover the gas cost for an automatic refund. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you need assistance.", ' '] }));
|
|
35
36
|
}
|
|
36
37
|
case 'EXECUTION_REVERTED':
|
|
38
|
+
case 'TRANSACTION_REVERTED':
|
|
39
|
+
case 'FLUID_DEX_ERROR':
|
|
37
40
|
case 'MISSING_REVERT_DATA': {
|
|
38
41
|
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there was an issue during execution. Try adjusting the slippage or amount." }));
|
|
39
42
|
}
|
|
40
|
-
case 'DEPOSIT_ADDRESS_MISMATCH':
|
|
41
43
|
case 'DEPOSIT_CHAIN_MISMATCH':
|
|
42
|
-
case '
|
|
44
|
+
case 'INCORRECT_DEPOSIT_CURRENCY':
|
|
45
|
+
case 'ORIGIN_CURRENCY_MISMATCH': {
|
|
46
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the chain or token received didn\u2019t match the quote." }));
|
|
47
|
+
}
|
|
48
|
+
case 'DOUBLE_SPEND': {
|
|
49
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Your transfer couldn\u2019t be processed because a deposit was already completed for this request. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
|
|
50
|
+
}
|
|
51
|
+
case 'TTL_EXPIRED':
|
|
52
|
+
case 'DEPOSIT_CONFIRMATION_TIMEOUT': {
|
|
53
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the deposit wasn\u2019t confirmed in time. Please try again." }));
|
|
54
|
+
}
|
|
55
|
+
case 'DEPOSIT_REORGED': {
|
|
56
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because of a temporary network issue affecting your deposit. Please try again." }));
|
|
57
|
+
}
|
|
58
|
+
case 'ORPHANED_DEPOSIT_REFUND': {
|
|
59
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your deposit couldn\u2019t be matched to an active request, so it has been refunded." }));
|
|
60
|
+
}
|
|
61
|
+
case 'BLOCKED_WALLET': {
|
|
62
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["This transaction couldn\u2019t be completed because an address associated with it didn\u2019t meet our risk management standards. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
|
|
63
|
+
}
|
|
43
64
|
case 'SOLVER_CAPACITY_EXCEEDED':
|
|
65
|
+
case 'SOLVER_BALANCE_TOO_LOW':
|
|
66
|
+
case 'SPONSOR_BALANCE_TOO_LOW': {
|
|
67
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there wasn\u2019t enough capacity available for this route right now. Please try again later." }));
|
|
68
|
+
}
|
|
69
|
+
case 'GASLESS_PERMIT_BALANCE_TOO_LOW': {
|
|
70
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because the available balance was too low, so the funds have been refunded." }));
|
|
71
|
+
}
|
|
72
|
+
case 'INSUFFICIENT_FUNDS_FOR_RENT': {
|
|
73
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because the balance wasn\u2019t enough to cover Solana network fees. Please try again with a larger amount." }));
|
|
74
|
+
}
|
|
75
|
+
case 'SWAP_IMPACT_TOO_HIGH': {
|
|
76
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the swap\u2019s price impact was too high. Try a smaller amount or a different token." }));
|
|
77
|
+
}
|
|
78
|
+
case 'INSUFFICIENT_POOL_LIQUIDITY': {
|
|
79
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there wasn\u2019t enough liquidity to complete the swap. Try a smaller amount or try again later." }));
|
|
80
|
+
}
|
|
81
|
+
case 'TRANSACTION_TOO_LARGE':
|
|
82
|
+
case 'SWAP_USES_TOO_MUCH_GAS':
|
|
83
|
+
case 'QUOTED_GAS_LIMIT_EXCEEDED':
|
|
84
|
+
case 'INVALID_GAS_PRICE': {
|
|
85
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because it couldn\u2019t be executed within network limits. Try a smaller amount or a different route." }));
|
|
86
|
+
}
|
|
87
|
+
case 'JUPITER_INVALID_TOKEN_ACCOUNT': {
|
|
88
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction could not be completed because a required Solana token account was missing or invalid. Please try again." }));
|
|
89
|
+
}
|
|
90
|
+
case 'CONTRACT_PAUSED': {
|
|
91
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the destination contract is currently paused. Please try again later." }));
|
|
92
|
+
}
|
|
93
|
+
case 'TOKEN_NOT_TRANSFERABLE':
|
|
94
|
+
case 'DESTINATION_TOKEN_TRANSFER_REJECTED':
|
|
95
|
+
case 'TRANSFER_FAILED': {
|
|
96
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the token rejected the transfer. Some tokens have transfer restrictions, taxes, or limits." }));
|
|
97
|
+
}
|
|
98
|
+
case 'TRANSFER_FROM_FAILED':
|
|
99
|
+
case 'TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE': {
|
|
100
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the token approval was insufficient for the transfer amount. Please try again." }));
|
|
101
|
+
}
|
|
102
|
+
case 'TRANSFER_AMOUNT_EXCEEDS_BALANCE':
|
|
103
|
+
case 'INSUFFICIENT_NATIVE_TOKENS_SUPPLIED':
|
|
104
|
+
case 'INCORRECT_PAYMENT':
|
|
105
|
+
case 'ZERO_SELL_AMOUNT': {
|
|
106
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the amount available didn\u2019t match what the transaction required." }));
|
|
107
|
+
}
|
|
108
|
+
case 'SIGNATURE_EXPIRED':
|
|
109
|
+
case 'INVALID_SIGNATURE':
|
|
110
|
+
case 'INVALID_NONCE':
|
|
111
|
+
case 'INVALID_SENDER':
|
|
112
|
+
case 'INVALID_SIGNER': {
|
|
113
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there was a signature or authorization issue. Please try again." }));
|
|
114
|
+
}
|
|
115
|
+
case 'ORDER_EXPIRED':
|
|
116
|
+
case 'PROTOCOL_DEADLINE_EXPIRED': {
|
|
117
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the order expired before it could be completed. Please try again." }));
|
|
118
|
+
}
|
|
119
|
+
case 'ORDER_ALREADY_FILLED': {
|
|
120
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the order was already filled by another transaction. This can happen when multiple transactions target the same order simultaneously." }));
|
|
121
|
+
}
|
|
122
|
+
case 'ORDER_IS_CANCELLED': {
|
|
123
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the order was canceled before it could be completed." }));
|
|
124
|
+
}
|
|
125
|
+
case 'MINT_NOT_ACTIVE': {
|
|
126
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the mint is not currently active. The mint may not have started yet or may have already ended." }));
|
|
127
|
+
}
|
|
128
|
+
case 'SEAPORT_INEXACT_FRACTION':
|
|
129
|
+
case 'SEAPORT_INVALID_FULFILLER': {
|
|
130
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the marketplace order couldn\u2019t be fulfilled." }));
|
|
131
|
+
}
|
|
132
|
+
case 'ACCOUNT_ABSTRACTION_INVALID_NONCE':
|
|
133
|
+
case 'ACCOUNT_ABSTRACTION_SIGNATURE_ERROR':
|
|
134
|
+
case 'ACCOUNT_ABSTRACTION_GAS_LIMIT': {
|
|
135
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because there was an issue with your smart account operation. Please try again." }));
|
|
136
|
+
}
|
|
137
|
+
case 'ERC_1155_TOO_MANY_REQUESTED':
|
|
138
|
+
case 'MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET':
|
|
139
|
+
case 'MINT_QUANTITY_EXCEEDS_MAX_SUPPLY': {
|
|
140
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Your transaction has been refunded because the requested mint quantity exceeds what\u2019s allowed for this collection." }));
|
|
141
|
+
}
|
|
142
|
+
case 'MANUAL_ADMIN_REFUND': {
|
|
143
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Your transaction has been refunded manually by the Relay team. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
|
|
144
|
+
}
|
|
145
|
+
case 'DEPOSIT_ADDRESS_MISMATCH':
|
|
146
|
+
case 'INSUFFICIENT_BALANCE_FOR_REFUND':
|
|
44
147
|
case 'UNKNOWN':
|
|
45
148
|
default: {
|
|
46
149
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["It looks like an unknown issue occurred during the transaction. Please", ' ', (0, jsx_runtime_1.jsx)(Anchor_js_1.default, { href: "https://docs.relay.link/what-is-relay#intercom", target: "_blank", children: "contact support" }), ' ', "if you have any further questions.", ' '] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefundReason.js","sourceRoot":"","sources":["../../../../src/components/common/RefundReason.tsx"],"names":[],"mappings":";;;;AACA,gFAA4C;AAS5C,MAAM,YAAY,GAAgC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACnE,IAAI,UAAU,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACtC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,iLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uCAAuC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CACL,wKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,6LAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,6KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,CACL,4MAGK,GAAG,EACN,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,4BACU,GAAG,IACzB,CACJ,CAAA;YACH,CAAC;YACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,OAAO,CACL,kLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,8JAE2B,GAAG,EAC5B,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,6BACW,GAAG,IAC1B,CACJ,CAAA;YACH,CAAC;YACD,KAAK,oBAAoB,CAAC;YAC1B,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,qLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,wBAAwB,CAAC;YAC9B,KAAK,iCAAiC,CAAC;YACvC,KAAK,0BAA0B,CAAC;YAChC,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CACL,uIAES,GAAG,EACV,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,kBAAe,YAAY,CAAA","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\nimport Anchor from '../primitives/Anchor.js'\n\ntype RefundReasonProps = {\n reasonCode: NonNullable<\n NonNullable<\n paths['/requests/v3']['get']['responses']['200']['content']['application/json']['requests']\n >[0]['data']\n >['failReason']\n}\nconst RefundReason: React.FC<RefundReasonProps> = ({ reasonCode }) => {\n if (reasonCode && reasonCode != 'N/A') {\n switch (reasonCode) {\n case 'TOO_LITTLE_RECEIVED': {\n return (\n <>\n Your transaction has been refunded because the received amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE': {\n return (\n <>\n Your transaction has been refunded because network fees increased.\n Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {\n return (\n <>\n Your transaction has been refunded because the fees exceeded the\n expected amount. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NO_QUOTES': {\n return (\n <>\n Your transaction has been refunded because no swap routes were found\n for your request. Try a different token or amount.\n </>\n )\n }\n case 'REVERSE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because the reverse swap couldn’t\n be completed. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'GENERATE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because something went wrong\n while setting up your swap. Please try again.\n </>\n )\n }\n case 'SLIPPAGE': {\n return (\n <>\n Your transaction has been refunded because the market price shifted\n more than the allowed slippage. Try adjusting your slippage settings\n or{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if the issue persists.{' '}\n </>\n )\n }\n case 'DEPOSITED_AMOUNT_TOO_LOW_TO_FILL': {\n return (\n <>\n Your transaction has been refunded because the deposited amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'AMOUNT_TOO_LOW_TO_REFUND': {\n return (\n <>\n Your transaction amount is insufficient to cover the gas cost for an\n automatic refund. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you need assistance.{' '}\n </>\n )\n }\n case 'EXECUTION_REVERTED':\n case 'MISSING_REVERT_DATA': {\n return (\n <>\n Your transaction has been refunded because there was an issue\n during execution. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'DEPOSIT_ADDRESS_MISMATCH':\n case 'DEPOSIT_CHAIN_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)\n case 'INSUFFICIENT_BALANCE_FOR_REFUND':\n case 'SOLVER_CAPACITY_EXCEEDED':\n case 'UNKNOWN':\n default: {\n return (\n <>\n It looks like an unknown issue occurred during the transaction.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n }\n }\n}\n\nexport default RefundReason\n"]}
|
|
1
|
+
{"version":3,"file":"RefundReason.js","sourceRoot":"","sources":["../../../../src/components/common/RefundReason.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\nimport Anchor from '../primitives/Anchor.js'\n\ntype RefundReasonProps = {\n reasonCode: NonNullable<\n NonNullable<\n paths['/requests/v3']['get']['responses']['200']['content']['application/json']['requests']\n >[0]['data']\n >['failReason']\n}\nconst RefundReason: React.FC<RefundReasonProps> = ({ reasonCode }) => {\n if (reasonCode && reasonCode != 'N/A') {\n switch (reasonCode) {\n case 'TOO_LITTLE_RECEIVED': {\n return (\n <>\n Your transaction has been refunded because the received amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE': {\n return (\n <>\n Your transaction has been refunded because network fees increased.\n Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {\n return (\n <>\n Your transaction has been refunded because the fees exceeded the\n expected amount. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NO_QUOTES':\n case 'NO_INTERNAL_SWAP_ROUTES_FOUND': {\n return (\n <>\n Your transaction has been refunded because no swap routes were found\n for your request. Try a different token or amount.\n </>\n )\n }\n case 'REVERSE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because the reverse swap couldn’t\n be completed. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'GENERATE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because something went wrong\n while setting up your swap. Please try again.\n </>\n )\n }\n case 'SLIPPAGE': {\n return (\n <>\n Your transaction has been refunded because the market price shifted\n more than the allowed slippage. Try adjusting your slippage settings\n or{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if the issue persists.{' '}\n </>\n )\n }\n case 'DEPOSITED_AMOUNT_TOO_LOW_TO_FILL': {\n return (\n <>\n Your transaction has been refunded because the deposited amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'AMOUNT_TOO_LOW_TO_REFUND': {\n return (\n <>\n Your transaction amount is insufficient to cover the gas cost for an\n automatic refund. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you need assistance.{' '}\n </>\n )\n }\n case 'EXECUTION_REVERTED':\n case 'TRANSACTION_REVERTED':\n case 'FLUID_DEX_ERROR':\n case 'MISSING_REVERT_DATA': {\n return (\n <>\n Your transaction has been refunded because there was an issue\n during execution. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'DEPOSIT_CHAIN_MISMATCH':\n case 'INCORRECT_DEPOSIT_CURRENCY':\n case 'ORIGIN_CURRENCY_MISMATCH': {\n return (\n <>\n Your transaction has been refunded because the chain or token\n received didn’t match the quote.\n </>\n )\n }\n case 'DOUBLE_SPEND': {\n return (\n <>\n Your transfer couldn’t be processed because a deposit was already\n completed for this request. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n case 'TTL_EXPIRED':\n case 'DEPOSIT_CONFIRMATION_TIMEOUT': {\n return (\n <>\n Your transaction has been refunded because the deposit wasn’t\n confirmed in time. Please try again.\n </>\n )\n }\n case 'DEPOSIT_REORGED': {\n return (\n <>\n Your transaction could not be completed because of a temporary\n network issue affecting your deposit. Please try again.\n </>\n )\n }\n case 'ORPHANED_DEPOSIT_REFUND': {\n return (\n <>\n Your deposit couldn’t be matched to an active request, so it has\n been refunded.\n </>\n )\n }\n case 'BLOCKED_WALLET': {\n return (\n <>\n This transaction couldn’t be completed because an address\n associated with it didn’t meet our risk management standards.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n case 'SOLVER_CAPACITY_EXCEEDED':\n case 'SOLVER_BALANCE_TOO_LOW':\n case 'SPONSOR_BALANCE_TOO_LOW': {\n return (\n <>\n Your transaction has been refunded because there wasn’t enough\n capacity available for this route right now. Please try again\n later.\n </>\n )\n }\n case 'GASLESS_PERMIT_BALANCE_TOO_LOW': {\n return (\n <>\n Your transaction could not be completed because the available\n balance was too low, so the funds have been refunded.\n </>\n )\n }\n case 'INSUFFICIENT_FUNDS_FOR_RENT': {\n return (\n <>\n Your transaction could not be completed because the balance wasn’t\n enough to cover Solana network fees. Please try again with a larger\n amount.\n </>\n )\n }\n case 'SWAP_IMPACT_TOO_HIGH': {\n return (\n <>\n Your transaction has been refunded because the swap’s price impact\n was too high. Try a smaller amount or a different token.\n </>\n )\n }\n case 'INSUFFICIENT_POOL_LIQUIDITY': {\n return (\n <>\n Your transaction has been refunded because there wasn’t enough\n liquidity to complete the swap. Try a smaller amount or try again\n later.\n </>\n )\n }\n case 'TRANSACTION_TOO_LARGE':\n case 'SWAP_USES_TOO_MUCH_GAS':\n case 'QUOTED_GAS_LIMIT_EXCEEDED':\n case 'INVALID_GAS_PRICE': {\n return (\n <>\n Your transaction has been refunded because it couldn’t be executed\n within network limits. Try a smaller amount or a different route.\n </>\n )\n }\n case 'JUPITER_INVALID_TOKEN_ACCOUNT': {\n return (\n <>\n Your transaction could not be completed because a required Solana\n token account was missing or invalid. Please try again.\n </>\n )\n }\n case 'CONTRACT_PAUSED': {\n return (\n <>\n Your transaction has been refunded because the destination contract\n is currently paused. Please try again later.\n </>\n )\n }\n case 'TOKEN_NOT_TRANSFERABLE':\n case 'DESTINATION_TOKEN_TRANSFER_REJECTED':\n case 'TRANSFER_FAILED': {\n return (\n <>\n Your transaction has been refunded because the token rejected the\n transfer. Some tokens have transfer restrictions, taxes, or limits.\n </>\n )\n }\n case 'TRANSFER_FROM_FAILED':\n case 'TRANSFER_AMOUNT_EXCEEDS_ALLOWANCE': {\n return (\n <>\n Your transaction has been refunded because the token approval was\n insufficient for the transfer amount. Please try again.\n </>\n )\n }\n case 'TRANSFER_AMOUNT_EXCEEDS_BALANCE':\n case 'INSUFFICIENT_NATIVE_TOKENS_SUPPLIED':\n case 'INCORRECT_PAYMENT':\n case 'ZERO_SELL_AMOUNT': {\n return (\n <>\n Your transaction has been refunded because the amount available\n didn’t match what the transaction required.\n </>\n )\n }\n case 'SIGNATURE_EXPIRED':\n case 'INVALID_SIGNATURE':\n case 'INVALID_NONCE':\n case 'INVALID_SENDER':\n case 'INVALID_SIGNER': {\n return (\n <>\n Your transaction has been refunded because there was a signature or\n authorization issue. Please try again.\n </>\n )\n }\n case 'ORDER_EXPIRED':\n case 'PROTOCOL_DEADLINE_EXPIRED': {\n return (\n <>\n Your transaction has been refunded because the order expired before\n it could be completed. Please try again.\n </>\n )\n }\n case 'ORDER_ALREADY_FILLED': {\n return (\n <>\n Your transaction has been refunded because the order was already\n filled by another transaction. This can happen when multiple\n transactions target the same order simultaneously.\n </>\n )\n }\n case 'ORDER_IS_CANCELLED': {\n return (\n <>\n Your transaction has been refunded because the order was canceled\n before it could be completed.\n </>\n )\n }\n case 'MINT_NOT_ACTIVE': {\n return (\n <>\n Your transaction has been refunded because the mint is not\n currently active. The mint may not have started yet or may have\n already ended.\n </>\n )\n }\n case 'SEAPORT_INEXACT_FRACTION':\n case 'SEAPORT_INVALID_FULFILLER': {\n return (\n <>\n Your transaction has been refunded because the marketplace order\n couldn’t be fulfilled.\n </>\n )\n }\n case 'ACCOUNT_ABSTRACTION_INVALID_NONCE':\n case 'ACCOUNT_ABSTRACTION_SIGNATURE_ERROR':\n case 'ACCOUNT_ABSTRACTION_GAS_LIMIT': {\n return (\n <>\n Your transaction has been refunded because there was an issue with\n your smart account operation. Please try again.\n </>\n )\n }\n case 'ERC_1155_TOO_MANY_REQUESTED':\n case 'MINT_QUANTITY_EXCEEDS_MAX_PER_WALLET':\n case 'MINT_QUANTITY_EXCEEDS_MAX_SUPPLY': {\n return (\n <>\n Your transaction has been refunded because the requested mint\n quantity exceeds what’s allowed for this collection.\n </>\n )\n }\n case 'MANUAL_ADMIN_REFUND': {\n return (\n <>\n Your transaction has been refunded manually by the Relay team.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n case 'DEPOSIT_ADDRESS_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)\n case 'INSUFFICIENT_BALANCE_FOR_REFUND':\n case 'UNKNOWN':\n default: {\n return (\n <>\n It looks like an unknown issue occurred during the transaction.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n }\n }\n}\n\nexport default RefundReason\n"]}
|
|
@@ -7,6 +7,7 @@ const useRelayClient_js_1 = tslib_1.__importDefault(require("../../hooks/useRela
|
|
|
7
7
|
const RelayKitProvider_js_1 = require("../../providers/RelayKitProvider.js");
|
|
8
8
|
const cn_js_1 = require("../../utils/cn.js");
|
|
9
9
|
const ChainIcon = ({ chainId, className, height = 14, width = 14, square = true, borderRadius = 4 }) => {
|
|
10
|
+
const [erroredSrc, setErroredSrc] = (0, react_1.useState)(null);
|
|
10
11
|
const providerOptions = (0, react_1.useContext)(RelayKitProvider_js_1.ProviderOptionsContext);
|
|
11
12
|
const client = (0, useRelayClient_js_1.default)();
|
|
12
13
|
const chain = chainId
|
|
@@ -22,7 +23,7 @@ const ChainIcon = ({ chainId, className, height = 14, width = 14, square = true,
|
|
|
22
23
|
height: height,
|
|
23
24
|
width: width,
|
|
24
25
|
borderRadius: borderRadius
|
|
25
|
-
}, children: iconUrl ? ((0, jsx_runtime_1.jsx)("img", { src: iconUrl, alt: `Chain #${chainId}`, style: {
|
|
26
|
+
}, children: iconUrl && erroredSrc !== iconUrl ? ((0, jsx_runtime_1.jsx)("img", { src: iconUrl, alt: `Chain #${chainId}`, onError: () => setErroredSrc(iconUrl ?? null), style: {
|
|
26
27
|
borderRadius: square ? borderRadius : 0,
|
|
27
28
|
width: '100%',
|
|
28
29
|
height: '100%'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainIcon.js","sourceRoot":"","sources":["../../../../src/components/primitives/ChainIcon.tsx"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"ChainIcon.js","sourceRoot":"","sources":["../../../../src/components/primitives/ChainIcon.tsx"],"names":[],"mappings":";;;;AAAA,iCAAqD;AACrD,8FAA0D;AAC1D,6EAA4E;AAC5E,6CAAsC;AAWtC,MAAM,SAAS,GAAc,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,GAAG,EAAE,EACX,KAAK,GAAG,EAAE,EACV,MAAM,GAAG,IAAI,EACb,YAAY,GAAG,CAAC,EACjB,EAAE,EAAE;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IACjE,MAAM,eAAe,GAAG,IAAA,kBAAU,EAAC,4CAAsB,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,IAAA,2BAAc,GAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,OAAO;QACnB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;QACvD,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,IAAI,GAAG,KAAK;QAChB,CAAC,CAAC,eAAe,CAAC,WAAW,KAAK,MAAM;YACtC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK;YACvC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK;QACrB,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,OAAO,GACX,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEnE,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,gCACE,SAAS,EAAE,IAAA,UAAE,EAAC,2BAA2B,EAAE,SAAS,CAAC,EACrD,KAAK,EAAE;YACL,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,YAAY;SAC3B,YAEA,OAAO,IAAI,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,CACnC,gCACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,UAAU,OAAO,EAAE,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,IAAI,IAAI,CAAC,EAC7C,KAAK,EAAE;gBACL,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM;aACf,GACD,CACH,CAAC,CAAC,CAAC,IAAI,GACJ,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAA;AAED,kBAAe,SAAS,CAAA","sourcesContent":["import { useContext, useState, type FC } from 'react'\nimport useRelayClient from '../../hooks/useRelayClient.js'\nimport { ProviderOptionsContext } from '../../providers/RelayKitProvider.js'\nimport { cn } from '../../utils/cn.js'\n\ntype Props = {\n chainId?: number\n height?: number\n width?: number\n className?: string\n square?: boolean\n borderRadius?: number\n}\n\nconst ChainIcon: FC<Props> = ({\n chainId,\n className,\n height = 14,\n width = 14,\n square = true,\n borderRadius = 4\n}) => {\n const [erroredSrc, setErroredSrc] = useState<string | null>(null)\n const providerOptions = useContext(ProviderOptionsContext)\n const client = useRelayClient()\n const chain = chainId\n ? client?.chains?.find((chain) => chain.id === chainId)\n : null\n\n const icon = chain\n ? providerOptions.themeScheme === 'dark'\n ? chain.icon?.dark || chain.icon?.light\n : chain.icon?.light\n : null\n\n const iconUrl =\n square && icon ? icon.replace('/icons/', '/icons/square/') : icon\n\n return iconUrl ? (\n <div\n className={cn('relay:flex relay:shrink-0', className)}\n style={{\n height: height,\n width: width,\n borderRadius: borderRadius\n }}\n >\n {iconUrl && erroredSrc !== iconUrl ? (\n <img\n src={iconUrl}\n alt={`Chain #${chainId}`}\n onError={() => setErroredSrc(iconUrl ?? null)}\n style={{\n borderRadius: square ? borderRadius : 0,\n width: '100%',\n height: '100%'\n }}\n />\n ) : null}\n </div>\n ) : null\n}\n\nexport default ChainIcon\n"]}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ChainTokenIcon = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
6
7
|
const ChainIcon_js_1 = tslib_1.__importDefault(require("./ChainIcon.js"));
|
|
7
8
|
const Text_js_1 = tslib_1.__importDefault(require("./Text.js"));
|
|
8
9
|
const cn_js_1 = require("../../utils/cn.js");
|
|
@@ -25,14 +26,17 @@ const SIZES = {
|
|
|
25
26
|
}
|
|
26
27
|
};
|
|
27
28
|
const ChainTokenIcon = ({ chainId, tokenlogoURI, tokenSymbol, className, size = 'md', chainRadius = 4, chainIconSize }) => {
|
|
28
|
-
const
|
|
29
|
+
const [erroredSrc, setErroredSrc] = (0, react_1.useState)(null);
|
|
30
|
+
const isValidTokenLogo = tokenlogoURI &&
|
|
31
|
+
tokenlogoURI !== 'missing.png' &&
|
|
32
|
+
erroredSrc !== tokenlogoURI;
|
|
29
33
|
const dimensions = SIZES[size];
|
|
30
34
|
const chainSize = chainIconSize ?? dimensions.chain;
|
|
31
35
|
return chainId ? ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('relay:relative relay:shrink-0 relay:overflow-hidden', className), style: {
|
|
32
36
|
width: dimensions.token,
|
|
33
37
|
height: dimensions.token,
|
|
34
38
|
borderRadius: chainRadius
|
|
35
|
-
}, children: [isValidTokenLogo ? ((0, jsx_runtime_1.jsx)("img", { alt: 'Token', src: tokenlogoURI, width: dimensions.token, height: dimensions.token, style: {
|
|
39
|
+
}, children: [isValidTokenLogo ? ((0, jsx_runtime_1.jsx)("img", { alt: 'Token', src: tokenlogoURI, width: dimensions.token, height: dimensions.token, onError: () => setErroredSrc(tokenlogoURI ?? null), style: {
|
|
36
40
|
borderRadius: 9999,
|
|
37
41
|
overflow: 'hidden'
|
|
38
42
|
} })) : tokenSymbol ? ((0, jsx_runtime_1.jsx)("div", { className: "relay:rounded-[50%] relay:bg-[var(--relay-colors-primary4)] relay:text-[color:var(--relay-colors-primary8)] relay:flex relay:items-center relay:justify-center", style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainTokenIcon.js","sourceRoot":"","sources":["../../../../src/components/primitives/ChainTokenIcon.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"ChainTokenIcon.js","sourceRoot":"","sources":["../../../../src/components/primitives/ChainTokenIcon.tsx"],"names":[],"mappings":";;;;;AAAA,iCAAyC;AACzC,0EAAsC;AACtC,gEAA4B;AAC5B,6CAAsC;AActC,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;CACO,CAAA;AAEH,MAAM,cAAc,GAAwB,CAAC,EAClD,OAAO,EACP,YAAY,EACZ,WAAW,EACX,SAAS,EACT,IAAI,GAAG,IAAI,EACX,WAAW,GAAG,CAAC,EACf,aAAa,EACd,EAAE,EAAE;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IACjE,MAAM,gBAAgB,GACpB,YAAY;QACZ,YAAY,KAAK,aAAa;QAC9B,UAAU,KAAK,YAAY,CAAA;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,aAAa,IAAI,UAAU,CAAC,KAAK,CAAA;IAEnD,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,iCACE,SAAS,EAAE,IAAA,UAAE,EACX,qDAAqD,EACrD,SAAS,CACV,EACD,KAAK,EAAE;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,UAAU,CAAC,KAAK;YACxB,YAAY,EAAE,WAAW;SAC1B,aAEA,gBAAgB,CAAC,CAAC,CAAC,CAClB,gCACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,UAAU,CAAC,KAAK,EACvB,MAAM,EAAE,UAAU,CAAC,KAAK,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC,EAClD,KAAK,EAAE;oBACL,YAAY,EAAE,IAAI;oBAClB,QAAQ,EAAE,QAAQ;iBACnB,GACD,CACH,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,gCACE,SAAS,EAAC,gKAAgK,EAC1K,KAAK,EAAE;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,MAAM,EAAE,UAAU,CAAC,KAAK;iBACzB,YAED,uBAAC,iBAAI,IAAC,KAAK,EAAC,IAAI,YAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAQ,GAC1D,CACP,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,sBAAS,IACR,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,WAAW,EACzB,SAAS,EAAC,uMAAuM,GACjN,IACE,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAA;AA7DY,QAAA,cAAc,kBA6D1B","sourcesContent":["import { type FC, useState } from 'react'\nimport ChainIcon from './ChainIcon.js'\nimport Text from './Text.js'\nimport { cn } from '../../utils/cn.js'\n\ntype Size = 'sm' | 'base' | 'md' | 'lg'\n\ntype ChainTokenProps = {\n chainId?: number\n tokenlogoURI?: string\n tokenSymbol?: string\n className?: string\n size?: Size\n chainRadius?: number\n chainIconSize?: number\n}\n\nconst SIZES = {\n sm: {\n token: 20,\n chain: 12\n },\n base: {\n token: 24,\n chain: 10\n },\n md: {\n token: 32,\n chain: 16\n },\n lg: {\n token: 40,\n chain: 18\n }\n} as const\n\nexport const ChainTokenIcon: FC<ChainTokenProps> = ({\n chainId,\n tokenlogoURI,\n tokenSymbol,\n className,\n size = 'md',\n chainRadius = 4,\n chainIconSize\n}) => {\n const [erroredSrc, setErroredSrc] = useState<string | null>(null)\n const isValidTokenLogo =\n tokenlogoURI &&\n tokenlogoURI !== 'missing.png' &&\n erroredSrc !== tokenlogoURI\n const dimensions = SIZES[size]\n const chainSize = chainIconSize ?? dimensions.chain\n\n return chainId ? (\n <div\n className={cn(\n 'relay:relative relay:shrink-0 relay:overflow-hidden',\n className\n )}\n style={{\n width: dimensions.token,\n height: dimensions.token,\n borderRadius: chainRadius\n }}\n >\n {isValidTokenLogo ? (\n <img\n alt={'Token'}\n src={tokenlogoURI}\n width={dimensions.token}\n height={dimensions.token}\n onError={() => setErroredSrc(tokenlogoURI ?? null)}\n style={{\n borderRadius: 9999,\n overflow: 'hidden'\n }}\n />\n ) : tokenSymbol ? (\n <div\n className=\"relay:rounded-[50%] relay:bg-[var(--relay-colors-primary4)] relay:text-[color:var(--relay-colors-primary8)] relay:flex relay:items-center relay:justify-center\"\n style={{\n width: dimensions.token,\n height: dimensions.token\n }}\n >\n <Text style=\"h6\">{tokenSymbol?.charAt(0).toUpperCase()}</Text>\n </div>\n ) : null}\n <ChainIcon\n chainId={chainId}\n width={chainSize}\n height={chainSize}\n borderRadius={chainRadius}\n className=\"relay:absolute relay:right-0 relay:bottom-0 relay:overflow-hidden relay:border relay:border-solid relay:border-[var(--relay-colors-modal-background)] relay:bg-[var(--relay-colors-modal-background)]\"\n />\n </div>\n ) : null\n}\n"]}
|
|
@@ -225,7 +225,7 @@ const OnrampWidget = ({ defaultWalletAddress, moonPayApiKey, moonpayOnUrlSignatu
|
|
|
225
225
|
else {
|
|
226
226
|
setOnrampModalOpen(true);
|
|
227
227
|
}
|
|
228
|
-
}, children: ctaCopy }), (0, jsx_runtime_1.jsx)(CustomAddressModal_js_1.CustomAddressModal, { open: addressModalOpen, toAddress: recipient, toChain: toChain, isConnected: (linkedWallets && linkedWallets.length > 0) || isConnected
|
|
228
|
+
}, children: ctaCopy }), (0, jsx_runtime_1.jsx)(CustomAddressModal_js_1.CustomAddressModal, { open: addressModalOpen, toToken: token, toAddress: recipient, toChain: toChain, isConnected: (linkedWallets && linkedWallets.length > 0) || isConnected
|
|
229
229
|
? true
|
|
230
230
|
: false, linkedWallets: linkedWallets ?? [], multiWalletSupportEnabled: multiWalletSupportEnabled, onAnalyticEvent: onAnalyticEvent, onOpenChange: (open) => {
|
|
231
231
|
setAddressModalOpen(open);
|