@imtbl/sdk 1.76.0 → 1.76.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/dist/{blockchain_data-BBXNY5bu.js → blockchain_data-Cbpk_9xM.js} +2 -2
- package/dist/blockchain_data.js +3 -3
- package/dist/browser/checkout/{AddTokensWidget-Ov8QlKCk.js → AddTokensWidget-B0aMPpaf.js} +352 -351
- package/dist/browser/checkout/{BridgeWidget-FBnDhhqK.js → BridgeWidget-B2xMuXIe.js} +9 -9
- package/dist/browser/checkout/{CommerceWidget-BWSOXt1Z.js → CommerceWidget-mvSR60zJ.js} +17 -17
- package/dist/browser/checkout/{CryptoFiatProvider-CI8GAJs8.js → CryptoFiatProvider-DuUL-g05.js} +1 -1
- package/dist/browser/checkout/{FeesBreakdown-CYOq1UYb.js → FeesBreakdown-ux_kv2hV.js} +1 -1
- package/dist/browser/checkout/{HandoverContent-BGe-FSBI.js → HandoverContent-CjAdkJyP.js} +1 -1
- package/dist/browser/checkout/{OnRampWidget-yWeBoNXM.js → OnRampWidget-CPBxu5mW.js} +3 -3
- package/dist/browser/checkout/{SaleWidget-u7Vt_hEK.js → SaleWidget-C_z2mvby.js} +14 -14
- package/dist/browser/checkout/{SpendingCapHero-BKUOW3vH.js → SpendingCapHero-DZ2h3c0I.js} +1 -1
- package/dist/browser/checkout/{SwapWidget-B7y0JomC.js → SwapWidget-C46tSXSg.js} +9 -9
- package/dist/browser/checkout/{TokenImage-1PBGOvLH.js → TokenImage-DVwKafFC.js} +1 -1
- package/dist/browser/checkout/{TopUpView-DHdxY5JT.js → TopUpView-Domn-Qcd.js} +3 -3
- package/dist/browser/checkout/{WalletApproveHero-35dcfo4w.js → WalletApproveHero-BuDyraLc.js} +3 -3
- package/dist/browser/checkout/{WalletWidget-Y9iR990Q.js → WalletWidget-CBUNHu8H.js} +4 -4
- package/dist/browser/checkout/{auto-track-Cg6kkwOx.js → auto-track-B4CZrwEV.js} +1 -1
- package/dist/browser/checkout/{index-Cga-0Avd.js → index-7xV-Pj_F.js} +1 -1
- package/dist/browser/checkout/{index-DpyMYzyv.js → index-Bphp6vfp.js} +2 -2
- package/dist/browser/checkout/{index-CNE2GoPm.js → index-C4rT0Sv6.js} +19 -19
- package/dist/browser/checkout/{index-DBGBKN_L.js → index-C9QxRl74.js} +1 -1
- package/dist/browser/checkout/{index-Czt3GvNk.js → index-CN_1RCxb.js} +1 -1
- package/dist/browser/checkout/{index-BT973-4Q.js → index-CRlimiZc.js} +1 -1
- package/dist/browser/checkout/{index-jI6ZFdoK.js → index-D_SSOEje.js} +1 -1
- package/dist/browser/checkout/{index-D7I7TIGd.js → index-Jl4iGdbj.js} +1 -1
- package/dist/browser/checkout/{index-C-kBUpgB.js → index-W518Tkp4.js} +1 -1
- package/dist/browser/checkout/{index-Cy_x51ga.js → index-u3PvSxx0.js} +1 -1
- package/dist/browser/checkout/{index.umd-DFEUUd9m.js → index.umd-C3XaSuZ6.js} +1 -1
- package/dist/browser/checkout/sdk.js +4 -4
- package/dist/browser/checkout/{useInterval-C_sHli0I.js → useInterval-Daykm58W.js} +1 -1
- package/dist/browser/checkout/widgets-esm.js +1 -1
- package/dist/browser/checkout/widgets.js +346 -345
- package/dist/{checkout-BVe_DYsB.js → checkout-BBw3jFMf.js} +34 -32
- package/dist/checkout.js +5 -5
- package/dist/{config-Bw1VvH0V.js → config-Cmi9x3Q6.js} +1 -1
- package/dist/config.js +1 -1
- package/dist/{index-CXburu7G.js → index-Bw2yzYg3.js} +1 -1
- package/dist/{index-CwlDox7X.js → index-C85kemJl.js} +1 -1
- package/dist/{index-Cd5Vu7wl.js → index-DFL3nZz6.js} +1 -1
- package/dist/{index-CALqWbUf.js → index-DGxS9oho.js} +4 -4
- package/dist/{index-B2vxU1RS.js → index-DZGolhBr.js} +1 -1
- package/dist/{index-Djlp0kzp.js → index-u5tNvD21.js} +3 -3
- package/dist/index.browser.js +4 -4
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +36 -34
- package/dist/index.js +14 -14
- package/dist/last_updated.json +1 -0
- package/dist/{minting_backend-DkDu72pB.js → minting_backend-B3sWDYVL.js} +3 -3
- package/dist/minting_backend.js +5 -5
- package/dist/{orderbook-BrLZ1jCD.js → orderbook-B0GH6rPV.js} +1 -1
- package/dist/orderbook.js +2 -2
- package/dist/{passport-B3y6qXgF.js → passport-Sc9Ko92d.js} +3 -3
- package/dist/passport.js +4 -4
- package/dist/{webhook-BhYpOSI6.js → webhook-CZoH-2Ow.js} +1 -1
- package/dist/webhook.js +2 -2
- package/dist/{x-CF0pLl5u.js → x-CBHSFDCr.js} +3 -3
- package/dist/x.js +4 -4
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r as reactExports, I as IMTBLWidgetEvents, A as AddTokensEventType, w as getDefaultExportFromCjs, x as commonjsGlobal,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { H as HandoverContent } from './HandoverContent-
|
|
5
|
-
import { C as Contract } from './index-
|
|
6
|
-
import { F as FeesBreakdown } from './FeesBreakdown-
|
|
1
|
+
import { r as reactExports, I as IMTBLWidgetEvents, A as AddTokensEventType, w as getDefaultExportFromCjs, x as commonjsGlobal, y as useProvidersContext, z as useAnalytics, U as UserJourney, D as isPassportProvider, F as BigNumber, o as jsx, p as jsxs, G as Box, u as useTranslation, H as Drawer, J as Divider, K as Heading, M as Button, N as WalletDrawer, Q as UnableToConnectDrawer, R as Fragment, T as WalletProviderRdns, X as removeSpace, Y as getProviderSlugFromRdns, Z as Web3Provider, _ as connectEIP6963Provider, $ as identifyUser, a0 as ConnectEIP6963ProviderError, a1 as ProvidersContextActions, a2 as MenuItem, j as ChainId, a3 as commonjsRequire, a4 as getRemoteImage, a5 as vFlex, a6 as OnboardingPagination, a7 as ViewContext, a8 as useHandover, a9 as HandoverTarget, aa as EventTargetContext, V as ViewActions, ab as getRemoteRive, ac as Trans, ad as Link, ae as Body, af as keyframes, ag as getDefaultTokenImage, ah as TokenFilterTypes, h as getL2ChainId, ai as isNativeToken, aj as getTokenImageByAddress, ak as SmartClone, al as FramedImage, am as FramedIcon, an as ButtCon, ao as TextInput, ap as VerticalMenu, aq as EllipsizedText, ar as Tooltip, as as Sticker, at as tokenValueFormat, au as DEFAULT_TOKEN_FORMATTING_DECIMALS, av as Stack, aw as hFlex, ax as centerFlexChildren, ay as Icon, az as Badge, aA as getRemoteVideo, aB as FramedVideo, aC as listVariants, aD as motion, aE as listItemVariants, aF as Banner, aG as fetchRiskAssessment, aH as isAddressSanctioned, aI as useInjectedProviders, aJ as trackFlow, aK as HeroFormControl, aL as SimpleLayout, m as SharedViews, aM as orchestrationEvents, aN as HeroTextInput, aO as requireSecp256k1$1, aP as requireLib_commonjs, aQ as require$$0$2, aR as bech32$2, aS as bnExports$1, aT as require$$0$3, aU as getAugmentedNamespace, aV as require$$0$4, aW as minimalisticAssert, aX as require$$2, aY as hash$6, aZ as trackError, a_ as MaxUint256, a$ as merge$2, b0 as SvgIcon, b1 as WalletWarningHero, b2 as Environment, b3 as t, b4 as PriceDisplay, L as LoadingView, b5 as useTheme, b6 as viewReducer, b7 as initialViewState, b8 as isValidAddress, b9 as amountInputValidation, ba as CloudImage, E as ErrorView, bb as ServiceUnavailableErrorView } from './index-C4rT0Sv6.js';
|
|
2
|
+
import { r as retry, T as TokenImage } from './TokenImage-DVwKafFC.js';
|
|
3
|
+
import { f as formatUnits, p as parseUnits } from './index-D_SSOEje.js';
|
|
4
|
+
import { H as HandoverContent } from './HandoverContent-CjAdkJyP.js';
|
|
5
|
+
import { C as Contract } from './index-W518Tkp4.js';
|
|
6
|
+
import { F as FeesBreakdown } from './FeesBreakdown-ux_kv2hV.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* The function `useInterval` sets up an interval that repeatedly calls a given callback function with
|
|
@@ -1285,240 +1285,6 @@ Object.defineProperty(gas, "__esModule", { value: true });
|
|
|
1285
1285
|
|
|
1286
1286
|
} (dist$3));
|
|
1287
1287
|
|
|
1288
|
-
var FiatOptionType;
|
|
1289
|
-
(function (FiatOptionType) {
|
|
1290
|
-
FiatOptionType["CREDIT"] = "credit";
|
|
1291
|
-
FiatOptionType["DEBIT"] = "debit";
|
|
1292
|
-
})(FiatOptionType || (FiatOptionType = {}));
|
|
1293
|
-
var RiveStateMachineInput;
|
|
1294
|
-
(function (RiveStateMachineInput) {
|
|
1295
|
-
RiveStateMachineInput[RiveStateMachineInput["START"] = 0] = "START";
|
|
1296
|
-
RiveStateMachineInput[RiveStateMachineInput["WAITING"] = 1] = "WAITING";
|
|
1297
|
-
RiveStateMachineInput[RiveStateMachineInput["PROCESSING"] = 2] = "PROCESSING";
|
|
1298
|
-
RiveStateMachineInput[RiveStateMachineInput["COMPLETED"] = 3] = "COMPLETED";
|
|
1299
|
-
RiveStateMachineInput[RiveStateMachineInput["ERROR"] = 4] = "ERROR";
|
|
1300
|
-
})(RiveStateMachineInput || (RiveStateMachineInput = {}));
|
|
1301
|
-
var AddTokensErrorTypes;
|
|
1302
|
-
(function (AddTokensErrorTypes) {
|
|
1303
|
-
AddTokensErrorTypes["DEFAULT"] = "DEFAULT_ERROR";
|
|
1304
|
-
AddTokensErrorTypes["INVALID_PARAMETERS"] = "INVALID_PARAMETERS";
|
|
1305
|
-
AddTokensErrorTypes["SERVICE_BREAKDOWN"] = "SERVICE_BREAKDOWN";
|
|
1306
|
-
AddTokensErrorTypes["TRANSACTION_FAILED"] = "TRANSACTION_FAILED";
|
|
1307
|
-
AddTokensErrorTypes["UNRECOGNISED_CHAIN"] = "UNRECOGNISED_CHAIN";
|
|
1308
|
-
AddTokensErrorTypes["PROVIDER_ERROR"] = "PROVIDER_ERROR";
|
|
1309
|
-
AddTokensErrorTypes["WALLET_FAILED"] = "WALLET_FAILED";
|
|
1310
|
-
AddTokensErrorTypes["WALLET_REJECTED"] = "WALLET_REJECTED";
|
|
1311
|
-
AddTokensErrorTypes["WALLET_REJECTED_NO_FUNDS"] = "WALLET_REJECTED_NO_FUNDS";
|
|
1312
|
-
AddTokensErrorTypes["WALLET_POPUP_BLOCKED"] = "WALLET_POPUP_BLOCKED";
|
|
1313
|
-
AddTokensErrorTypes["ENVIRONMENT_ERROR"] = "ENVIRONMENT_ERROR";
|
|
1314
|
-
AddTokensErrorTypes["ROUTE_ERROR"] = "ROUTE_ERROR";
|
|
1315
|
-
})(AddTokensErrorTypes || (AddTokensErrorTypes = {}));
|
|
1316
|
-
var AddTokensExperiments;
|
|
1317
|
-
(function (AddTokensExperiments) {
|
|
1318
|
-
AddTokensExperiments["PRESELECTED_TOKEN"] = "addTokensPreselectedToken";
|
|
1319
|
-
})(AddTokensExperiments || (AddTokensExperiments = {}));
|
|
1320
|
-
|
|
1321
|
-
function FiatOption({ type, onClick, disabled = false, size = 'small', rc = jsx("span", {}), }) {
|
|
1322
|
-
const { t } = useTranslation();
|
|
1323
|
-
const icon = {
|
|
1324
|
-
[FiatOptionType.DEBIT]: 'BankCard',
|
|
1325
|
-
[FiatOptionType.CREDIT]: 'Craft',
|
|
1326
|
-
};
|
|
1327
|
-
const handleClick = () => {
|
|
1328
|
-
onClick?.(type);
|
|
1329
|
-
};
|
|
1330
|
-
const menuItemProps = {
|
|
1331
|
-
disabled,
|
|
1332
|
-
emphasized: true,
|
|
1333
|
-
onClick: disabled ? undefined : handleClick,
|
|
1334
|
-
size,
|
|
1335
|
-
rc,
|
|
1336
|
-
};
|
|
1337
|
-
return (jsxs(MenuItem, { ...menuItemProps, children: [jsx(MenuItem.FramedIcon, { icon: icon[type], variant: "bold", emphasized: false }), jsx(MenuItem.Label, { children: t(`views.ADD_TOKENS.drawer.options.${type}.heading`) }), jsx(MenuItem.Caption, { children: t(`views.ADD_TOKENS.drawer.options.${type}.${disabled ? 'disabledCaption' : 'caption'}`) }), !disabled && jsx(MenuItem.IntentIcon, {})] }));
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
function getDurationFormatted(estimatedRouteDuration, minutesText, minuteText, secondText) {
|
|
1341
|
-
const seconds = estimatedRouteDuration;
|
|
1342
|
-
if (seconds >= 60) {
|
|
1343
|
-
const minutes = Math.round(seconds / 60);
|
|
1344
|
-
return minutes === 1 ? `1 ${minuteText}` : `${minutes} ${minutesText}`;
|
|
1345
|
-
}
|
|
1346
|
-
return `${seconds.toFixed(0)}${secondText}`;
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
|
-
/**
|
|
1350
|
-
* Get the total fees for a route
|
|
1351
|
-
*/
|
|
1352
|
-
function getTotalRouteFees(route) {
|
|
1353
|
-
const [fees, feesUsd] = route?.route.estimate.feeCosts.reduce(([acc, accUsd], fee) => [
|
|
1354
|
-
acc + parseFloat(fee.amount),
|
|
1355
|
-
accUsd + parseFloat(fee.amountUsd),
|
|
1356
|
-
], [0, 0]) ?? [0, 0];
|
|
1357
|
-
const [gasFees, gasFeesUsd] = route?.route.estimate.gasCosts.reduce(([acc, accUsd], fee) => [
|
|
1358
|
-
acc + parseFloat(fee.amount),
|
|
1359
|
-
accUsd + parseFloat(fee.amountUsd),
|
|
1360
|
-
], [0, 0]) ?? [0, 0];
|
|
1361
|
-
const totalFees = fees + gasFees;
|
|
1362
|
-
const totalFeesUsd = feesUsd + gasFeesUsd;
|
|
1363
|
-
return {
|
|
1364
|
-
fees,
|
|
1365
|
-
feesUsd,
|
|
1366
|
-
gasFees,
|
|
1367
|
-
gasFeesUsd,
|
|
1368
|
-
totalFees,
|
|
1369
|
-
totalFeesUsd,
|
|
1370
|
-
};
|
|
1371
|
-
}
|
|
1372
|
-
|
|
1373
|
-
/**
|
|
1374
|
-
* Formats a number to a string with a maximum number of decimals
|
|
1375
|
-
* removing trailing zeros
|
|
1376
|
-
*/
|
|
1377
|
-
const getFormattedAmounts = (value, maxDecimals = DEFAULT_TOKEN_FORMATTING_DECIMALS) => {
|
|
1378
|
-
const amount = typeof value === 'number' ? value : parseFloat(value);
|
|
1379
|
-
if (Number.isNaN(amount)) {
|
|
1380
|
-
return '-.--';
|
|
1381
|
-
}
|
|
1382
|
-
if (amount > 0 && amount < 1) {
|
|
1383
|
-
return tokenValueFormat(value, maxDecimals).replace(/\.?0+$/, '');
|
|
1384
|
-
}
|
|
1385
|
-
return tokenValueFormat(amount, maxDecimals);
|
|
1386
|
-
};
|
|
1387
|
-
/**
|
|
1388
|
-
* Converts a crypto amount to a formatted string
|
|
1389
|
-
*/
|
|
1390
|
-
function getFormattedNumber(value, decimals, maxDecimals = 5) {
|
|
1391
|
-
const amount = String(value);
|
|
1392
|
-
let formattedValue = '';
|
|
1393
|
-
try {
|
|
1394
|
-
if (Number.isNaN(amount) || !decimals) {
|
|
1395
|
-
throw new Error('Invalid amount or decimals');
|
|
1396
|
-
}
|
|
1397
|
-
formattedValue = formatUnits(BigNumber.from(amount), decimals)
|
|
1398
|
-
.toString();
|
|
1399
|
-
}
|
|
1400
|
-
catch {
|
|
1401
|
-
return '-.--';
|
|
1402
|
-
}
|
|
1403
|
-
return getFormattedAmounts(formattedValue, maxDecimals);
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
|
-
const emptyRouteBalance = {
|
|
1407
|
-
routeBalance: getFormattedAmounts(''),
|
|
1408
|
-
routeBalanceUsd: getFormattedAmounts(''),
|
|
1409
|
-
fromAmount: getFormattedAmounts(''),
|
|
1410
|
-
fromAmountUsd: getFormattedAmounts(''),
|
|
1411
|
-
};
|
|
1412
|
-
function getRouteAndTokenBalances(routeData) {
|
|
1413
|
-
if (!routeData) {
|
|
1414
|
-
return emptyRouteBalance;
|
|
1415
|
-
}
|
|
1416
|
-
const usdPrice = routeData?.route.route.estimate.fromToken.usdPrice;
|
|
1417
|
-
if (!usdPrice) {
|
|
1418
|
-
return emptyRouteBalance;
|
|
1419
|
-
}
|
|
1420
|
-
const { balance } = routeData.amountData;
|
|
1421
|
-
const routeBalance = getFormattedNumber(balance.balance, balance?.decimals, balance?.decimals);
|
|
1422
|
-
const routeBalanceUsd = (parseFloat(routeBalance) * usdPrice).toString();
|
|
1423
|
-
const fromAmount = getFormattedNumber(routeData.route.route.estimate.fromAmount, routeData.route.route.estimate.fromToken.decimals);
|
|
1424
|
-
const fromAmountUsd = getFormattedAmounts(routeData.route.route.estimate.fromAmountUSD ?? '');
|
|
1425
|
-
return {
|
|
1426
|
-
fromAmount,
|
|
1427
|
-
fromAmountUsd,
|
|
1428
|
-
routeBalance: getFormattedAmounts(routeBalance),
|
|
1429
|
-
routeBalanceUsd: getFormattedAmounts(routeBalanceUsd),
|
|
1430
|
-
};
|
|
1431
|
-
}
|
|
1432
|
-
|
|
1433
|
-
function RouteOption({ routeData, onClick, chains, disabled = false, isFastest = false, size = 'small', rc = jsx("span", {}), selected = false, }) {
|
|
1434
|
-
const { t } = useTranslation();
|
|
1435
|
-
const { fromToken } = routeData.amountData;
|
|
1436
|
-
const { estimate } = routeData.route.route;
|
|
1437
|
-
const chain = chains?.find((c) => c.id === fromToken.chainId);
|
|
1438
|
-
const estimatedDurationFormatted = getDurationFormatted(estimate.estimatedRouteDuration, t('views.ADD_TOKENS.routeSelection.minutesText'), t('views.ADD_TOKENS.routeSelection.minuteText'), t('views.ADD_TOKENS.routeSelection.secondsText'));
|
|
1439
|
-
const { totalFeesUsd } = reactExports.useMemo(() => getTotalRouteFees(routeData.route), [routeData]);
|
|
1440
|
-
const { routeBalanceUsd, fromAmount, fromAmountUsd } = reactExports.useMemo(() => getRouteAndTokenBalances(routeData), [routeData]);
|
|
1441
|
-
const handleClick = () => {
|
|
1442
|
-
onClick(routeData);
|
|
1443
|
-
};
|
|
1444
|
-
const menuItemProps = {
|
|
1445
|
-
selected,
|
|
1446
|
-
disabled,
|
|
1447
|
-
emphasized: true,
|
|
1448
|
-
rc,
|
|
1449
|
-
size,
|
|
1450
|
-
onClick: disabled ? undefined : handleClick,
|
|
1451
|
-
};
|
|
1452
|
-
return (jsxs(MenuItem, { ...menuItemProps, children: [jsx(MenuItem.Label, { children: fromToken.name }), chain && (jsxs(Sticker, { position: { x: 'right', y: 'bottom' }, children: [jsx(Sticker.FramedImage, { use: jsx("img", { src: chain.iconUrl, alt: chain.name }), size: "xSmall" }), jsx(MenuItem.FramedImage, { circularFrame: true, use: jsx("img", { src: fromToken.iconUrl, alt: fromToken.name }) })] })), jsxs(MenuItem.Caption, { children: [`${t('views.ADD_TOKENS.fees.balance')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${routeBalanceUsd}`, routeData.isInsufficientGas && (jsxs(Fragment, { children: [jsx("br", {}), jsx("span", { style: { color: '#FF637F' }, children: t('views.ADD_TOKENS.noGasRouteMessage', {
|
|
1453
|
-
token: routeData.route.route.estimate.gasCosts[0].token.symbol,
|
|
1454
|
-
}) })] }))] }), jsx(MenuItem.PriceDisplay, { price: fromAmount, children: jsx(MenuItem.PriceDisplay.Caption, { children: `${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${fromAmountUsd}` }) }), jsxs(MenuItem.BottomSlot, { children: [jsx(MenuItem.BottomSlot.Divider, {}), jsxs(Stack, { rc: jsx("span", {}), direction: "row", justifyContent: "space-between", sx: {
|
|
1455
|
-
w: '100%',
|
|
1456
|
-
}, children: [jsxs(Body, { sx: {
|
|
1457
|
-
...hFlex,
|
|
1458
|
-
...centerFlexChildren,
|
|
1459
|
-
gap: 'base.spacing.x1',
|
|
1460
|
-
c: 'base.color.text.body.secondary',
|
|
1461
|
-
}, size: "xSmall", children: [jsx(Icon, { icon: "Countdown", sx: {
|
|
1462
|
-
w: 'base.icon.size.200',
|
|
1463
|
-
fill: 'base.color.text.body.secondary',
|
|
1464
|
-
}, variant: "bold" }), estimatedDurationFormatted] }), jsxs(Body, { size: "xSmall", sx: { ...hFlex, ...centerFlexChildren }, children: [isFastest && (jsx(Badge, { badgeContent: t('views.ADD_TOKENS.routeSelection.fastestBadge'), variant: "emphasis", sx: { mr: 'base.spacing.x2' } })), `${t('views.ADD_TOKENS.fees.fee')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')}
|
|
1465
|
-
$${getFormattedAmounts(totalFeesUsd)}`] })] })] })] }));
|
|
1466
|
-
}
|
|
1467
|
-
|
|
1468
|
-
const defaultFiatOptions = [
|
|
1469
|
-
FiatOptionType.DEBIT,
|
|
1470
|
-
FiatOptionType.CREDIT,
|
|
1471
|
-
];
|
|
1472
|
-
function Options({ checkout, routes, chains, onCardClick, onRouteClick, size, showOnrampOption, insufficientBalance, selectedIndex, }) {
|
|
1473
|
-
const { t } = useTranslation();
|
|
1474
|
-
// @NOTE: early exit with loading related UI, when the
|
|
1475
|
-
// routes are not yet available
|
|
1476
|
-
if (!routes?.length && !insufficientBalance) {
|
|
1477
|
-
return (jsxs(Stack, { sx: { pt: 'base.spacing.x3' }, alignItems: "stretch", gap: "base.spacing.x1", children: [jsx(MenuItem, { shimmer: "withBottomSlot", size: "small", emphasized: true }), jsx(MenuItem, { shimmer: "withBottomSlot", size: "small", emphasized: true }), jsxs(Body, { sx: { textAlign: 'center', mt: 'base.spacing.x6' }, size: "small", children: [t('views.ADD_TOKENS.drawer.options.loadingText1'), jsx("br", {}), t('views.ADD_TOKENS.drawer.options.loadingText2')] }), jsx(FramedVideo, { mimeType: "video/mp4", videoUrl: getRemoteVideo(checkout.config.environment, '/loading_bubble-small.mp4'), sx: { alignSelf: 'center', mt: 'base.spacing.x2' }, size: "large", circularFrame: true })] }));
|
|
1478
|
-
}
|
|
1479
|
-
const noRoutes = !(!insufficientBalance || routes?.length);
|
|
1480
|
-
return (jsxs(Stack, { sx: { py: 'base.spacing.x3' }, alignItems: "stretch", gap: "base.spacing.x1", testId: "options-list", justifyContent: "center", rc: jsx(motion.div, { variants: listVariants, initial: "hidden", animate: "show" }), children: [routes?.map((routeData, index) => (jsx(RouteOption, { size: size, routeData: routeData, chains: chains, onClick: () => onRouteClick(routeData, index), isFastest: index === 0, selected: index === selectedIndex, rc: jsx(motion.div, { variants: listItemVariants }) }, `route-option-${routeData.amountData.fromToken.chainId}-${routeData.amountData.fromToken.address}`))), noRoutes && (jsxs(Banner, { children: [jsx(Banner.Icon, { icon: "InformationCircle" }), jsx(Banner.Title, { children: t('views.ADD_TOKENS.drawer.options.noRoutes.heading') }), jsx(Banner.Caption, { children: t('views.ADD_TOKENS.drawer.options.noRoutes.caption') })] })), showOnrampOption && (jsxs(Fragment, { children: [jsx(Divider, { size: "xSmall", sx: { my: 'base.spacing.x2' }, children: t('views.ADD_TOKENS.drawer.options.moreOptionsDividerText') }), defaultFiatOptions.map((type, idx) => (jsx(FiatOption, { type: type, size: size, onClick: onCardClick, rc: jsx(motion.div, { custom: idx, variants: listItemVariants }) }, `fiat-option-${type}`)))] }))] }));
|
|
1481
|
-
}
|
|
1482
|
-
|
|
1483
|
-
function OptionsDrawer({ checkout, routes, visible, onClose, onRouteClick, onCardClick, showOnrampOption,
|
|
1484
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1485
|
-
showSwapOption,
|
|
1486
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1487
|
-
showBridgeOption, insufficientBalance, }) {
|
|
1488
|
-
const { t } = useTranslation();
|
|
1489
|
-
const { track } = useAnalytics();
|
|
1490
|
-
const { addTokensState: { id, chains }, } = reactExports.useContext(AddTokensContext);
|
|
1491
|
-
const { providersState: { fromProviderInfo, fromAddress }, } = useProvidersContext();
|
|
1492
|
-
const selectedRouteIndex = reactExports.useRef(0);
|
|
1493
|
-
const handleOnRouteClick = (route, index) => {
|
|
1494
|
-
selectedRouteIndex.current = index;
|
|
1495
|
-
onRouteClick(route);
|
|
1496
|
-
};
|
|
1497
|
-
reactExports.useEffect(() => {
|
|
1498
|
-
if (!visible) {
|
|
1499
|
-
return;
|
|
1500
|
-
}
|
|
1501
|
-
track({
|
|
1502
|
-
userJourney: UserJourney.ADD_TOKENS,
|
|
1503
|
-
screen: 'InputScreen',
|
|
1504
|
-
control: 'RoutesMenu',
|
|
1505
|
-
controlType: 'MenuItem',
|
|
1506
|
-
action: 'Opened',
|
|
1507
|
-
extras: {
|
|
1508
|
-
contextId: id,
|
|
1509
|
-
showOnrampOption: Boolean(showOnrampOption),
|
|
1510
|
-
showSwapOption: Boolean(showSwapOption),
|
|
1511
|
-
insufficientBalance: Boolean(insufficientBalance),
|
|
1512
|
-
routesAvailable: routes?.length ?? 0,
|
|
1513
|
-
},
|
|
1514
|
-
});
|
|
1515
|
-
}, [visible]);
|
|
1516
|
-
return (jsx(Drawer, { size: "full", visible: visible, showHeaderBar: false, onCloseDrawer: onClose, children: jsxs(Drawer.Content, { rc: jsx(motion.div, { variants: listVariants, initial: "hidden", animate: "show" }), sx: {
|
|
1517
|
-
pt: 'base.spacing.x3',
|
|
1518
|
-
px: 'base.spacing.x3',
|
|
1519
|
-
}, children: [jsxs(MenuItem, { size: "xSmall", children: [jsx(MenuItem.FramedImage, { padded: true, emphasized: true, use: (jsx("img", { src: fromProviderInfo?.icon, alt: fromProviderInfo?.name })), sx: { mx: 'base.spacing.x2' } }), jsx(MenuItem.Label, { children: t('views.ADD_TOKENS.drawer.options.heading') }), jsxs(MenuItem.Caption, { children: [fromProviderInfo?.name, ' • ', jsx(EllipsizedText, { text: fromAddress ?? '', sx: { c: 'inherit', fontSize: 'inherit' } })] }), jsx(MenuItem.StatefulButtCon, { icon: "ChevronExpand", onClick: onClose })] }), jsx(Options, { size: "small", checkout: checkout, routes: routes, chains: chains, onCardClick: onCardClick, onRouteClick: handleOnRouteClick, showOnrampOption: showOnrampOption, insufficientBalance: insufficientBalance, selectedIndex: selectedRouteIndex.current })] }) }));
|
|
1520
|
-
}
|
|
1521
|
-
|
|
1522
1288
|
const delay = (ms) => new Promise((resolve) => {
|
|
1523
1289
|
setTimeout(resolve, ms);
|
|
1524
1290
|
});
|
|
@@ -1779,70 +1545,30 @@ const useRoutes = () => {
|
|
|
1779
1545
|
};
|
|
1780
1546
|
};
|
|
1781
1547
|
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
return (jsxs(SelectedRouteOptionContainer, { onClick: handleOnClick, selected: withSelectedWallet, children: [jsx(MenuItem.FramedVideo, { videoUrl: getRemoteVideo(checkout.config.environment, '/loading_bubble-small.mp4'), padded: true, mimeType: "video/mp4", circularFrame: true }), jsx(MenuItem.Caption, { children: t('views.ADD_TOKENS.routeSelection.loadingText') })] }));
|
|
1807
|
-
}
|
|
1808
|
-
if ((!routeData && !loading) || insufficientBalance) {
|
|
1809
|
-
let icon = 'Sparkle';
|
|
1810
|
-
let copy = '';
|
|
1811
|
-
if (insufficientBalance) {
|
|
1812
|
-
icon = 'InformationCircle';
|
|
1813
|
-
copy = t('views.ADD_TOKENS.routeSelection.noRoute');
|
|
1814
|
-
}
|
|
1815
|
-
if (insufficientBalancePayWithCard) {
|
|
1816
|
-
icon = 'BankCard';
|
|
1817
|
-
copy = t('views.ADD_TOKENS.routeSelection.payWithCard');
|
|
1818
|
-
}
|
|
1819
|
-
return (jsxs(SelectedRouteOptionContainer, { onClick: handleOnClick, selected: withSelectedWallet, children: [jsx(MenuItem.FramedIcon, { icon: icon, variant: "bold", circularFrame: true, emphasized: false }), jsx(MenuItem.Caption, { children: copy })] }));
|
|
1820
|
-
}
|
|
1821
|
-
return (jsxs(SelectedRouteOptionContainer, { onClick: handleOnClick, selected: withSelectedWallet, children: [chain && (jsxs(Sticker, { position: { x: 'rightInside', y: 'bottomInside' }, children: [jsxs(Tooltip, { size: "small", children: [jsx(Tooltip.Target, { children: jsx(Sticker.FramedImage, { use: jsx("img", { src: chain.iconUrl, alt: chain.name }), size: "xSmall" }) }), jsx(Tooltip.Content, { id: "route_tooltip_content", children: chain.name })] }), jsx(MenuItem.FramedImage, { circularFrame: true, padded: true, use: jsx("img", { src: fromToken?.iconUrl, alt: fromToken?.name }) })] })), jsxs(Stack, { direction: "row", justifyContent: "space-between", alignItems: "center", sx: { w: '100%' }, children: [jsxs(Stack, { gap: "0px", children: [jsx(MenuItem.Label, { children: fromToken?.name }), jsxs(MenuItem.Caption, { children: [`${t('views.ADD_TOKENS.fees.balance')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${routeBalanceUsd}`, routeData?.isInsufficientGas && (jsxs(Fragment, { children: [jsx("br", {}), jsx("span", { style: { color: '#FF637F' }, children: t('views.ADD_TOKENS.noGasRouteMessage', {
|
|
1822
|
-
token: routeData.route.route.estimate.gasCosts[0].token.symbol,
|
|
1823
|
-
}) })] }))] })] }), jsx(MenuItem.PriceDisplay, { price: fromAmount, children: jsx(MenuItem.PriceDisplay.Caption, { children: `${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${fromAmountUsd}` }) })] })] }));
|
|
1824
|
-
}
|
|
1825
|
-
|
|
1826
|
-
const disabledStyles = {
|
|
1827
|
-
cursor: 'not-allowed',
|
|
1828
|
-
bg: 'base.color.translucent.inverse.800',
|
|
1829
|
-
};
|
|
1830
|
-
function SelectedWallet({ label, caption, children, onClick, providerInfo, chainInfo, disabled, sx, }) {
|
|
1831
|
-
const selected = !!children && providerInfo?.rdns;
|
|
1832
|
-
const size = selected ? 'xSmall' : 'small';
|
|
1833
|
-
const getMenuItemImage = () => {
|
|
1834
|
-
const menuItemImage = !providerInfo?.icon ? (jsx(MenuItem.FramedIcon, { icon: "Wallet", variant: "bold", emphasized: false })) : (jsx(MenuItem.FramedImage, { padded: true, sx: { mx: selected ? 'base.spacing.x2' : undefined }, use: jsx("img", { src: providerInfo.icon, alt: providerInfo.name }) }));
|
|
1835
|
-
if (chainInfo && providerInfo?.rdns) {
|
|
1836
|
-
return (jsxs(Sticker, { position: { x: 'rightInside', y: 'bottomInside' }, children: [jsxs(Tooltip, { size: "small", children: [jsx(Tooltip.Target, { children: jsx(Sticker.FramedImage, { use: jsx("img", { src: chainInfo.iconUrl, alt: chainInfo.name }), size: "xSmall", sx: { bottom: 'base.spacing.x2', right: 'base.spacing.x2' } }) }), jsx(Tooltip.Content, { id: "route_tooltip_content", children: chainInfo.name })] }), menuItemImage] }));
|
|
1837
|
-
}
|
|
1838
|
-
return menuItemImage;
|
|
1839
|
-
};
|
|
1840
|
-
return (jsxs(MenuItem, { size: size, disabled: disabled, emphasized: !disabled, onClick: disabled ? undefined : onClick, sx: {
|
|
1841
|
-
py: selected ? 'base.spacing.x3' : undefined,
|
|
1842
|
-
...(disabled ? disabledStyles : {}),
|
|
1843
|
-
...sx,
|
|
1844
|
-
}, children: [getMenuItemImage(), jsx(MenuItem.Label, { children: label }), providerInfo?.name ? (jsxs(MenuItem.Caption, { children: [providerInfo?.name, ' • ', jsx(EllipsizedText, { text: providerInfo.address ?? '', sx: { c: 'inherit', fontSize: 'inherit' } })] })) : (jsx(MenuItem.Caption, { children: caption })), jsx(MenuItem.BottomSlot, { children: children })] }));
|
|
1845
|
-
}
|
|
1548
|
+
var FiatOptionType;
|
|
1549
|
+
(function (FiatOptionType) {
|
|
1550
|
+
FiatOptionType["CREDIT"] = "credit";
|
|
1551
|
+
FiatOptionType["DEBIT"] = "debit";
|
|
1552
|
+
})(FiatOptionType || (FiatOptionType = {}));
|
|
1553
|
+
var AddTokensErrorTypes;
|
|
1554
|
+
(function (AddTokensErrorTypes) {
|
|
1555
|
+
AddTokensErrorTypes["DEFAULT"] = "DEFAULT_ERROR";
|
|
1556
|
+
AddTokensErrorTypes["INVALID_PARAMETERS"] = "INVALID_PARAMETERS";
|
|
1557
|
+
AddTokensErrorTypes["SERVICE_BREAKDOWN"] = "SERVICE_BREAKDOWN";
|
|
1558
|
+
AddTokensErrorTypes["TRANSACTION_FAILED"] = "TRANSACTION_FAILED";
|
|
1559
|
+
AddTokensErrorTypes["UNRECOGNISED_CHAIN"] = "UNRECOGNISED_CHAIN";
|
|
1560
|
+
AddTokensErrorTypes["PROVIDER_ERROR"] = "PROVIDER_ERROR";
|
|
1561
|
+
AddTokensErrorTypes["WALLET_FAILED"] = "WALLET_FAILED";
|
|
1562
|
+
AddTokensErrorTypes["WALLET_REJECTED"] = "WALLET_REJECTED";
|
|
1563
|
+
AddTokensErrorTypes["WALLET_REJECTED_NO_FUNDS"] = "WALLET_REJECTED_NO_FUNDS";
|
|
1564
|
+
AddTokensErrorTypes["WALLET_POPUP_BLOCKED"] = "WALLET_POPUP_BLOCKED";
|
|
1565
|
+
AddTokensErrorTypes["ENVIRONMENT_ERROR"] = "ENVIRONMENT_ERROR";
|
|
1566
|
+
AddTokensErrorTypes["ROUTE_ERROR"] = "ROUTE_ERROR";
|
|
1567
|
+
})(AddTokensErrorTypes || (AddTokensErrorTypes = {}));
|
|
1568
|
+
var AddTokensExperiments;
|
|
1569
|
+
(function (AddTokensExperiments) {
|
|
1570
|
+
AddTokensExperiments["PRESELECTED_TOKEN"] = "addTokensPreselectedToken";
|
|
1571
|
+
})(AddTokensExperiments || (AddTokensExperiments = {}));
|
|
1846
1572
|
|
|
1847
1573
|
function WarningHero() {
|
|
1848
1574
|
return (jsx(Box, { testId: "warning-hero", sx: {
|
|
@@ -4942,6 +4668,15 @@ const EXECUTE_TXN_ANIMATION = '/swapping_coins.riv';
|
|
|
4942
4668
|
const TOKEN_PRIORITY_ORDER = ['IMX', 'USDC', 'ETH'];
|
|
4943
4669
|
const TOOLKIT_SQUID_URL = 'https://toolkit.immutable.com/squid-bridge/';
|
|
4944
4670
|
|
|
4671
|
+
var RiveStateMachineInput;
|
|
4672
|
+
(function (RiveStateMachineInput) {
|
|
4673
|
+
RiveStateMachineInput[RiveStateMachineInput["START"] = 0] = "START";
|
|
4674
|
+
RiveStateMachineInput[RiveStateMachineInput["WAITING"] = 1] = "WAITING";
|
|
4675
|
+
RiveStateMachineInput[RiveStateMachineInput["PROCESSING"] = 2] = "PROCESSING";
|
|
4676
|
+
RiveStateMachineInput[RiveStateMachineInput["COMPLETED"] = 3] = "COMPLETED";
|
|
4677
|
+
RiveStateMachineInput[RiveStateMachineInput["ERROR"] = 4] = "ERROR";
|
|
4678
|
+
})(RiveStateMachineInput || (RiveStateMachineInput = {}));
|
|
4679
|
+
|
|
4945
4680
|
const useError = (environment) => {
|
|
4946
4681
|
const { viewDispatch } = reactExports.useContext(ViewContext);
|
|
4947
4682
|
const { page } = useAnalytics();
|
|
@@ -5231,11 +4966,6 @@ function TokenDrawerMenu({ checkout, config, toTokenAddress, addTokensState, add
|
|
|
5231
4966
|
&& tokenChoiceOptions.map((token) => (jsxs(MenuItem, { size: "medium", onClick: () => handleTokenChange(token), selected: isSelected(token), emphasized: true, children: [jsx(MenuItem.FramedImage, { circularFrame: true, use: (jsx(TokenImage, { src: token.icon, name: token.name, defaultImage: defaultTokenImage })), emphasized: false }), jsx(MenuItem.Label, { children: token.symbol }), token.symbol !== token.name && (jsx(MenuItem.Caption, { children: token.name }))] }, token.name))) })] })] }));
|
|
5232
4967
|
}
|
|
5233
4968
|
|
|
5234
|
-
const checkSanctionedAddresses = async (addresses, config) => {
|
|
5235
|
-
const result = await fetchRiskAssessment(addresses, config);
|
|
5236
|
-
return isAddressSanctioned(result);
|
|
5237
|
-
};
|
|
5238
|
-
|
|
5239
4969
|
function NoGasHero() {
|
|
5240
4970
|
return (jsx(Box, { testId: "no-gas-hero", children: jsxs("svg", { width: "431", height: "243", viewBox: "0 0 431 243", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("path", { d: "M143.152 175.023C143.116 180.739 146.858 186.445 154.383 190.79C161.909 195.135 171.795 197.295 181.697 197.274C191.598 197.254 201.51 195.053 209.093 190.677C216.675 186.301 220.484 180.574 220.52 174.863V185.172C220.484 190.888 216.67 196.609 209.093 200.986C201.51 205.362 191.598 207.563 181.697 207.583C171.795 207.604 161.909 205.444 154.383 201.099C146.858 196.754 143.116 191.048 143.152 185.332V175.023Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M181.697 197.275C171.795 197.295 161.909 195.135 154.383 190.79C146.858 186.445 143.116 180.739 143.152 175.023V185.332C143.116 191.048 146.858 196.754 154.383 201.099C161.909 205.444 171.795 207.604 181.697 207.583V197.275Z", fill: "#0D0D0D" }), jsx("path", { d: "M181.964 197.301C203.329 197.167 220.585 187.059 220.508 174.724C220.43 162.389 203.048 152.499 181.683 152.633C160.319 152.767 143.063 162.875 143.14 175.21C143.218 187.545 160.6 197.435 181.964 197.301Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M176.573 168.751L176.382 167.359L175.717 162.535L179.202 160.499L180.46 169.725C180.46 169.725 178.661 169.648 178.058 169.627C177.253 169.591 176.614 169.215 176.573 168.756V168.751ZM161.496 170.849C161.496 170.849 175.094 171.472 179.63 171.483C180.346 171.483 180.754 171.787 180.81 172.194C181.027 173.689 181.016 173.72 181.016 173.72L158.033 172.874L161.496 170.849ZM188.8 180.622L188.99 182.013L189.655 186.838L186.171 188.874L184.913 179.647C184.913 179.647 186.712 179.725 187.315 179.745C188.119 179.781 188.758 180.158 188.8 180.616V180.622ZM181.357 176.215C181.851 179.957 183.32 190.539 183.32 190.539L179.578 192.729L177.692 178.395C177.63 177.936 176.991 177.57 176.213 177.55L151.559 176.653L155.161 174.544L179.991 175.467C180.676 175.519 181.3 175.818 181.362 176.209L181.357 176.215ZM203.825 178.555L186.923 177.905L186.042 177.848C185.248 177.818 184.599 177.436 184.558 176.977L182.073 158.818L185.666 156.715L187.836 174.797C187.877 175.256 188.526 175.637 189.32 175.668L207.577 176.359L203.825 178.555ZM210.449 174.684C210.449 174.684 196.799 174.153 192.243 173.977C191.722 173.957 191.253 173.787 190.995 173.539C190.872 173.39 190.794 173.189 190.779 173.029L190.671 171.849L213.856 172.694L210.449 174.689V174.684Z", fill: "#0D0D0D" }), jsx("path", { d: "M143.152 159.559C143.116 165.276 146.858 170.982 154.383 175.327C161.909 179.672 171.795 181.832 181.697 181.811C191.598 181.791 201.51 179.59 209.093 175.214C216.675 170.837 220.484 165.111 220.52 159.4V169.709C220.484 175.425 216.67 181.146 209.093 185.523C201.51 189.899 191.598 192.1 181.697 192.12C171.795 192.141 161.909 189.981 154.383 185.636C146.858 181.291 143.116 175.585 143.152 169.868V159.559Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M181.697 181.811C171.795 181.832 161.909 179.672 154.383 175.327C146.858 170.982 143.116 165.276 143.152 159.56V169.869C143.116 175.585 146.858 181.291 154.383 185.636C161.909 189.981 171.795 192.141 181.697 192.12V181.811Z", fill: "#0D0D0D" }), jsx("path", { d: "M181.964 181.838C203.329 181.704 220.585 171.595 220.508 159.261C220.43 146.926 203.048 137.036 181.683 137.17C160.319 137.304 143.063 147.412 143.14 159.747C143.218 172.082 160.6 181.972 181.964 181.838Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M176.573 153.287L176.382 151.895L175.717 147.071L179.202 145.035L180.46 154.261C180.46 154.261 178.661 154.184 178.058 154.163C177.253 154.127 176.614 153.751 176.573 153.292V153.287ZM161.496 155.385C161.496 155.385 175.094 156.009 179.63 156.019C180.346 156.019 180.754 156.323 180.81 156.73C181.027 158.225 181.016 158.256 181.016 158.256L158.033 157.411L161.496 155.385ZM188.8 165.158L188.99 166.549L189.655 171.374L186.171 173.41L184.913 164.183C184.913 164.183 186.712 164.261 187.315 164.282C188.119 164.318 188.758 164.694 188.8 165.153V165.158ZM181.357 160.751C181.851 164.493 183.32 175.075 183.32 175.075L179.578 177.266L177.692 162.931C177.63 162.472 176.991 162.106 176.213 162.086L151.559 161.189L155.161 159.081L179.991 160.003C180.676 160.055 181.3 160.354 181.362 160.745L181.357 160.751ZM203.825 163.091L186.923 162.441L186.042 162.385C185.248 162.354 184.599 161.972 184.558 161.514L182.073 143.354L185.666 141.251L187.836 159.333C187.877 159.792 188.526 160.173 189.32 160.204L207.577 160.895L203.825 163.091ZM210.449 159.22C210.449 159.22 196.799 158.689 192.243 158.514C191.722 158.493 191.253 158.323 190.995 158.076C190.872 157.926 190.794 157.725 190.779 157.565L190.671 156.385L213.856 157.23L210.449 159.225V159.22Z", fill: "#0D0D0D" }), jsx("path", { d: "M143.152 144.096C143.116 149.812 146.858 155.518 154.383 159.864C161.909 164.209 171.795 166.369 181.697 166.348C191.598 166.327 201.51 164.126 209.093 159.75C216.675 155.374 220.484 149.647 220.52 143.936V154.245C220.484 159.962 216.67 165.683 209.093 170.059C201.51 174.435 191.598 176.636 181.697 176.657C171.795 176.678 161.909 174.518 154.383 170.173C146.858 165.827 143.116 160.121 143.152 154.405V144.096Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M181.697 166.348C171.795 166.369 161.909 164.209 154.383 159.864C146.858 155.518 143.116 149.813 143.152 144.096V154.405C143.116 160.121 146.858 165.827 154.383 170.173C161.909 174.518 171.795 176.678 181.697 176.657V166.348Z", fill: "#0D0D0D" }), jsx("path", { d: "M181.964 166.374C203.329 166.24 220.585 156.132 220.508 143.797C220.43 131.463 203.048 121.572 181.683 121.707C160.319 121.841 143.063 131.949 143.14 144.284C143.218 156.618 160.6 166.509 181.964 166.374Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M176.573 137.824L176.382 136.432L175.717 131.608L179.202 129.572L180.46 138.798C180.46 138.798 178.661 138.721 178.058 138.7C177.253 138.664 176.614 138.288 176.573 137.829V137.824ZM161.496 139.922C161.496 139.922 175.094 140.546 179.63 140.556C180.346 140.556 180.754 140.86 180.81 141.267C181.027 142.762 181.016 142.793 181.016 142.793L158.033 141.948L161.496 139.922ZM188.8 149.695L188.99 151.087L189.655 155.911L186.171 157.947L184.913 148.721C184.913 148.721 186.712 148.798 187.315 148.819C188.119 148.855 188.758 149.231 188.8 149.69V149.695ZM181.357 145.288C181.851 149.03 183.32 159.612 183.32 159.612L179.578 161.803L177.692 147.468C177.63 147.009 176.991 146.643 176.213 146.623L151.559 145.726L155.161 143.618L179.991 144.54C180.676 144.592 181.3 144.891 181.362 145.283L181.357 145.288ZM203.825 147.628L186.923 146.978L186.042 146.922C185.248 146.891 184.599 146.509 184.558 146.051L182.073 127.891L185.666 125.788L187.836 143.87C187.877 144.329 188.526 144.71 189.32 144.741L207.577 145.432L203.825 147.628ZM210.449 143.757C210.449 143.757 196.799 143.226 192.243 143.051C191.722 143.03 191.253 142.86 190.995 142.613C190.872 142.463 190.794 142.262 190.779 142.102L190.671 140.922L213.856 141.767L210.449 143.762V143.757Z", fill: "#0D0D0D" }), jsx("path", { d: "M143.152 128.632C143.116 134.349 146.858 140.055 154.383 144.4C161.909 148.745 171.795 150.905 181.697 150.884C191.598 150.864 201.51 148.663 209.093 144.287C216.675 139.91 220.484 134.184 220.52 128.473V138.782C220.484 144.498 216.67 150.219 209.093 154.596C201.51 158.972 191.598 161.173 181.697 161.193C171.795 161.214 161.909 159.054 154.383 154.709C146.858 150.364 143.116 144.658 143.152 138.941V128.632Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M181.697 150.884C171.795 150.905 161.909 148.745 154.383 144.4C146.858 140.055 143.116 134.349 143.152 128.633V138.942C143.116 144.658 146.858 150.364 154.383 154.709C161.909 159.054 171.795 161.214 181.697 161.193V150.884Z", fill: "#0D0D0D" }), jsx("path", { d: "M181.964 150.911C203.329 150.777 220.585 140.668 220.508 128.334C220.43 115.999 203.048 106.109 181.683 106.243C160.319 106.377 143.063 116.485 143.14 128.82C143.218 141.155 160.6 151.045 181.964 150.911Z", fill: "#F7F7F7", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M217.788 148.205C202.374 174.772 202.374 203.421 217.788 212.188C233.202 220.955 258.19 206.526 273.604 179.959C289.018 153.392 289.018 124.743 273.604 115.976C258.19 107.209 233.202 121.638 217.788 148.205ZM228.948 154.556C236.24 141.987 247.097 133.954 255.9 133.695L224.324 188.126C220.122 180.463 221.656 167.124 228.948 154.556ZM262.437 173.608C255.145 186.177 244.288 194.21 235.484 194.469L267.061 140.038C271.263 147.701 269.729 161.04 262.437 173.608Z", fill: "#FF637F", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M273.612 115.976L260.777 108.565C245.363 99.7984 220.374 114.227 204.96 140.801C189.546 167.368 189.546 196.018 204.96 204.785L217.795 212.195C202.381 203.429 202.381 174.779 217.795 148.212C233.202 121.638 258.19 107.209 273.605 115.983", fill: "#FF637F" }), jsx("path", { d: "M273.612 115.976L260.777 108.565C245.363 99.7984 220.374 114.227 204.96 140.801C189.546 167.368 189.546 196.018 204.96 204.785L217.795 212.195C202.381 203.429 202.381 174.779 217.795 148.212C233.202 121.638 258.19 107.209 273.605 115.983", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M228.948 154.555C236.24 141.987 247.097 133.954 255.901 133.695L224.324 188.126C220.122 180.463 221.656 167.124 228.948 154.555Z", fill: "#0D0D0D", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M262.444 173.616C255.152 186.184 244.296 194.217 235.492 194.476L267.068 140.045C271.27 147.708 269.736 161.047 262.444 173.616Z", fill: "#0D0D0D", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M204.953 140.794C189.539 167.361 189.539 196.011 204.953 204.777L217.788 212.188C202.374 203.421 202.374 174.772 217.788 148.205L204.953 140.794Z", fill: "#0D0D0D", stroke: "#0D0D0D", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] }) }));
|
|
5241
4971
|
}
|
|
@@ -5267,6 +4997,277 @@ function NotEnoughGasDrawer({ visible, routeData, onTryAgainClick, onToolkitClic
|
|
|
5267
4997
|
}, children: [jsx(Button, { sx: { width: '100%', mb: 'base.spacing.x4' }, testId: "non-passport-cta-button", variant: "primary", size: "large", onClick: onTryAgainClick, children: t('views.ADD_TOKENS.noGasDrawer.primaryAction') }), jsx(Button, { sx: { width: '100%', marginBottom: 'base.spacing.x10' }, testId: "non-passport-cta-button", variant: "tertiary", size: "large", onClick: onToolkitClick, children: t('views.ADD_TOKENS.noGasDrawer.secondaryAction', { token: tokenName }) })] })] }) }));
|
|
5268
4998
|
}
|
|
5269
4999
|
|
|
5000
|
+
const disabledStyles = {
|
|
5001
|
+
cursor: 'not-allowed',
|
|
5002
|
+
bg: 'base.color.translucent.inverse.800',
|
|
5003
|
+
};
|
|
5004
|
+
function SelectedWallet({ label, caption, children, onClick, providerInfo, chainInfo, disabled, sx, }) {
|
|
5005
|
+
const selected = !!children && providerInfo?.rdns;
|
|
5006
|
+
const size = selected ? 'xSmall' : 'small';
|
|
5007
|
+
const getMenuItemImage = () => {
|
|
5008
|
+
const menuItemImage = !providerInfo?.icon ? (jsx(MenuItem.FramedIcon, { icon: "Wallet", variant: "bold", emphasized: false })) : (jsx(MenuItem.FramedImage, { padded: true, sx: { mx: selected ? 'base.spacing.x2' : undefined }, use: jsx("img", { src: providerInfo.icon, alt: providerInfo.name }) }));
|
|
5009
|
+
if (chainInfo && providerInfo?.rdns) {
|
|
5010
|
+
return (jsxs(Sticker, { position: { x: 'rightInside', y: 'bottomInside' }, children: [jsxs(Tooltip, { size: "small", children: [jsx(Tooltip.Target, { children: jsx(Sticker.FramedImage, { use: jsx("img", { src: chainInfo.iconUrl, alt: chainInfo.name }), size: "xSmall", sx: { bottom: 'base.spacing.x2', right: 'base.spacing.x2' } }) }), jsx(Tooltip.Content, { id: "route_tooltip_content", children: chainInfo.name })] }), menuItemImage] }));
|
|
5011
|
+
}
|
|
5012
|
+
return menuItemImage;
|
|
5013
|
+
};
|
|
5014
|
+
return (jsxs(MenuItem, { size: size, disabled: disabled, emphasized: !disabled, onClick: disabled ? undefined : onClick, sx: {
|
|
5015
|
+
py: selected ? 'base.spacing.x3' : undefined,
|
|
5016
|
+
...(disabled ? disabledStyles : {}),
|
|
5017
|
+
...sx,
|
|
5018
|
+
}, children: [getMenuItemImage(), jsx(MenuItem.Label, { children: label }), providerInfo?.name ? (jsxs(MenuItem.Caption, { children: [providerInfo?.name, ' • ', jsx(EllipsizedText, { text: providerInfo.address ?? '', sx: { c: 'inherit', fontSize: 'inherit' } })] })) : (jsx(MenuItem.Caption, { children: caption })), jsx(MenuItem.BottomSlot, { children: children })] }));
|
|
5019
|
+
}
|
|
5020
|
+
|
|
5021
|
+
/**
|
|
5022
|
+
* Formats a number to a string with a maximum number of decimals
|
|
5023
|
+
* removing trailing zeros
|
|
5024
|
+
*/
|
|
5025
|
+
const getFormattedAmounts = (value, maxDecimals = DEFAULT_TOKEN_FORMATTING_DECIMALS) => {
|
|
5026
|
+
const amount = typeof value === 'number' ? value : parseFloat(value);
|
|
5027
|
+
if (Number.isNaN(amount)) {
|
|
5028
|
+
return '-.--';
|
|
5029
|
+
}
|
|
5030
|
+
if (amount > 0 && amount < 1) {
|
|
5031
|
+
return tokenValueFormat(value, maxDecimals).replace(/\.?0+$/, '');
|
|
5032
|
+
}
|
|
5033
|
+
return tokenValueFormat(amount, maxDecimals);
|
|
5034
|
+
};
|
|
5035
|
+
/**
|
|
5036
|
+
* Converts a crypto amount to a formatted string
|
|
5037
|
+
*/
|
|
5038
|
+
function getFormattedNumber(value, decimals, maxDecimals = 5) {
|
|
5039
|
+
const amount = String(value);
|
|
5040
|
+
let formattedValue = '';
|
|
5041
|
+
try {
|
|
5042
|
+
if (Number.isNaN(amount) || !decimals) {
|
|
5043
|
+
throw new Error('Invalid amount or decimals');
|
|
5044
|
+
}
|
|
5045
|
+
formattedValue = formatUnits(BigNumber.from(amount), decimals)
|
|
5046
|
+
.toString();
|
|
5047
|
+
}
|
|
5048
|
+
catch {
|
|
5049
|
+
return '-.--';
|
|
5050
|
+
}
|
|
5051
|
+
return getFormattedAmounts(formattedValue, maxDecimals);
|
|
5052
|
+
}
|
|
5053
|
+
|
|
5054
|
+
const emptyRouteBalance = {
|
|
5055
|
+
routeBalance: getFormattedAmounts(''),
|
|
5056
|
+
routeBalanceUsd: getFormattedAmounts(''),
|
|
5057
|
+
fromAmount: getFormattedAmounts(''),
|
|
5058
|
+
fromAmountUsd: getFormattedAmounts(''),
|
|
5059
|
+
};
|
|
5060
|
+
function getRouteAndTokenBalances(routeData) {
|
|
5061
|
+
if (!routeData) {
|
|
5062
|
+
return emptyRouteBalance;
|
|
5063
|
+
}
|
|
5064
|
+
const usdPrice = routeData?.route.route.estimate.fromToken.usdPrice;
|
|
5065
|
+
if (!usdPrice) {
|
|
5066
|
+
return emptyRouteBalance;
|
|
5067
|
+
}
|
|
5068
|
+
const { balance } = routeData.amountData;
|
|
5069
|
+
const routeBalance = getFormattedNumber(balance.balance, balance?.decimals, balance?.decimals);
|
|
5070
|
+
const routeBalanceUsd = (parseFloat(routeBalance) * usdPrice).toString();
|
|
5071
|
+
const fromAmount = getFormattedNumber(routeData.route.route.estimate.fromAmount, routeData.route.route.estimate.fromToken.decimals);
|
|
5072
|
+
const fromAmountUsd = getFormattedAmounts(routeData.route.route.estimate.fromAmountUSD ?? '');
|
|
5073
|
+
return {
|
|
5074
|
+
fromAmount,
|
|
5075
|
+
fromAmountUsd,
|
|
5076
|
+
routeBalance: getFormattedAmounts(routeBalance),
|
|
5077
|
+
routeBalanceUsd: getFormattedAmounts(routeBalanceUsd),
|
|
5078
|
+
};
|
|
5079
|
+
}
|
|
5080
|
+
|
|
5081
|
+
/**
|
|
5082
|
+
* Get the total fees for a route
|
|
5083
|
+
*/
|
|
5084
|
+
function getTotalRouteFees(route) {
|
|
5085
|
+
const [fees, feesUsd] = route?.route.estimate.feeCosts.reduce(([acc, accUsd], fee) => [
|
|
5086
|
+
acc + parseFloat(fee.amount),
|
|
5087
|
+
accUsd + parseFloat(fee.amountUsd),
|
|
5088
|
+
], [0, 0]) ?? [0, 0];
|
|
5089
|
+
const [gasFees, gasFeesUsd] = route?.route.estimate.gasCosts.reduce(([acc, accUsd], fee) => [
|
|
5090
|
+
acc + parseFloat(fee.amount),
|
|
5091
|
+
accUsd + parseFloat(fee.amountUsd),
|
|
5092
|
+
], [0, 0]) ?? [0, 0];
|
|
5093
|
+
const totalFees = fees + gasFees;
|
|
5094
|
+
const totalFeesUsd = feesUsd + gasFeesUsd;
|
|
5095
|
+
return {
|
|
5096
|
+
fees,
|
|
5097
|
+
feesUsd,
|
|
5098
|
+
gasFees,
|
|
5099
|
+
gasFeesUsd,
|
|
5100
|
+
totalFees,
|
|
5101
|
+
totalFeesUsd,
|
|
5102
|
+
};
|
|
5103
|
+
}
|
|
5104
|
+
|
|
5105
|
+
function getDurationFormatted(estimatedRouteDuration, minutesText, minuteText, secondText) {
|
|
5106
|
+
const seconds = estimatedRouteDuration;
|
|
5107
|
+
if (seconds >= 60) {
|
|
5108
|
+
const minutes = Math.round(seconds / 60);
|
|
5109
|
+
return minutes === 1 ? `1 ${minuteText}` : `${minutes} ${minutesText}`;
|
|
5110
|
+
}
|
|
5111
|
+
return `${seconds.toFixed(0)}${secondText}`;
|
|
5112
|
+
}
|
|
5113
|
+
|
|
5114
|
+
function RouteOption({ routeData, onClick, chains, disabled = false, isFastest = false, size = 'small', rc = jsx("span", {}), selected = false, }) {
|
|
5115
|
+
const { t } = useTranslation();
|
|
5116
|
+
const { fromToken } = routeData.amountData;
|
|
5117
|
+
const { estimate } = routeData.route.route;
|
|
5118
|
+
const chain = chains?.find((c) => c.id === fromToken.chainId);
|
|
5119
|
+
const estimatedDurationFormatted = getDurationFormatted(estimate.estimatedRouteDuration, t('views.ADD_TOKENS.routeSelection.minutesText'), t('views.ADD_TOKENS.routeSelection.minuteText'), t('views.ADD_TOKENS.routeSelection.secondsText'));
|
|
5120
|
+
const { totalFeesUsd } = reactExports.useMemo(() => getTotalRouteFees(routeData.route), [routeData]);
|
|
5121
|
+
const { routeBalanceUsd, fromAmount, fromAmountUsd } = reactExports.useMemo(() => getRouteAndTokenBalances(routeData), [routeData]);
|
|
5122
|
+
const handleClick = () => {
|
|
5123
|
+
onClick(routeData);
|
|
5124
|
+
};
|
|
5125
|
+
const menuItemProps = {
|
|
5126
|
+
selected,
|
|
5127
|
+
disabled,
|
|
5128
|
+
emphasized: true,
|
|
5129
|
+
rc,
|
|
5130
|
+
size,
|
|
5131
|
+
onClick: disabled ? undefined : handleClick,
|
|
5132
|
+
};
|
|
5133
|
+
return (jsxs(MenuItem, { ...menuItemProps, children: [jsx(MenuItem.Label, { children: fromToken.name }), chain && (jsxs(Sticker, { position: { x: 'right', y: 'bottom' }, children: [jsx(Sticker.FramedImage, { use: jsx("img", { src: chain.iconUrl, alt: chain.name }), size: "xSmall" }), jsx(MenuItem.FramedImage, { circularFrame: true, use: jsx("img", { src: fromToken.iconUrl, alt: fromToken.name }) })] })), jsxs(MenuItem.Caption, { children: [`${t('views.ADD_TOKENS.fees.balance')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${routeBalanceUsd}`, routeData.isInsufficientGas && (jsxs(Fragment, { children: [jsx("br", {}), jsx("span", { style: { color: '#FF637F' }, children: t('views.ADD_TOKENS.noGasRouteMessage', {
|
|
5134
|
+
token: routeData.route.route.estimate.gasCosts[0].token.symbol,
|
|
5135
|
+
}) })] }))] }), jsx(MenuItem.PriceDisplay, { price: fromAmount, children: jsx(MenuItem.PriceDisplay.Caption, { children: `${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${fromAmountUsd}` }) }), jsxs(MenuItem.BottomSlot, { children: [jsx(MenuItem.BottomSlot.Divider, {}), jsxs(Stack, { rc: jsx("span", {}), direction: "row", justifyContent: "space-between", sx: {
|
|
5136
|
+
w: '100%',
|
|
5137
|
+
}, children: [jsxs(Body, { sx: {
|
|
5138
|
+
...hFlex,
|
|
5139
|
+
...centerFlexChildren,
|
|
5140
|
+
gap: 'base.spacing.x1',
|
|
5141
|
+
c: 'base.color.text.body.secondary',
|
|
5142
|
+
}, size: "xSmall", children: [jsx(Icon, { icon: "Countdown", sx: {
|
|
5143
|
+
w: 'base.icon.size.200',
|
|
5144
|
+
fill: 'base.color.text.body.secondary',
|
|
5145
|
+
}, variant: "bold" }), estimatedDurationFormatted] }), jsxs(Body, { size: "xSmall", sx: { ...hFlex, ...centerFlexChildren }, children: [isFastest && (jsx(Badge, { badgeContent: t('views.ADD_TOKENS.routeSelection.fastestBadge'), variant: "emphasis", sx: { mr: 'base.spacing.x2' } })), `${t('views.ADD_TOKENS.fees.fee')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')}
|
|
5146
|
+
$${getFormattedAmounts(totalFeesUsd)}`] })] })] })] }));
|
|
5147
|
+
}
|
|
5148
|
+
|
|
5149
|
+
function FiatOption({ type, onClick, disabled = false, size = 'small', rc = jsx("span", {}), }) {
|
|
5150
|
+
const { t } = useTranslation();
|
|
5151
|
+
const icon = {
|
|
5152
|
+
[FiatOptionType.DEBIT]: 'BankCard',
|
|
5153
|
+
[FiatOptionType.CREDIT]: 'Craft',
|
|
5154
|
+
};
|
|
5155
|
+
const handleClick = () => {
|
|
5156
|
+
onClick?.(type);
|
|
5157
|
+
};
|
|
5158
|
+
const menuItemProps = {
|
|
5159
|
+
disabled,
|
|
5160
|
+
emphasized: true,
|
|
5161
|
+
onClick: disabled ? undefined : handleClick,
|
|
5162
|
+
size,
|
|
5163
|
+
rc,
|
|
5164
|
+
};
|
|
5165
|
+
return (jsxs(MenuItem, { ...menuItemProps, children: [jsx(MenuItem.FramedIcon, { icon: icon[type], variant: "bold", emphasized: false }), jsx(MenuItem.Label, { children: t(`views.ADD_TOKENS.drawer.options.${type}.heading`) }), jsx(MenuItem.Caption, { children: t(`views.ADD_TOKENS.drawer.options.${type}.${disabled ? 'disabledCaption' : 'caption'}`) }), !disabled && jsx(MenuItem.IntentIcon, {})] }));
|
|
5166
|
+
}
|
|
5167
|
+
|
|
5168
|
+
const defaultFiatOptions = [
|
|
5169
|
+
FiatOptionType.DEBIT,
|
|
5170
|
+
FiatOptionType.CREDIT,
|
|
5171
|
+
];
|
|
5172
|
+
function RouteOptions({ checkout, routes, chains, onCardClick, onRouteClick, size, showOnrampOption, insufficientBalance, selectedIndex, }) {
|
|
5173
|
+
const { t } = useTranslation();
|
|
5174
|
+
// @NOTE: early exit with loading related UI, when the
|
|
5175
|
+
// routes are not yet available
|
|
5176
|
+
if (!routes?.length && !insufficientBalance) {
|
|
5177
|
+
return (jsxs(Stack, { sx: { pt: 'base.spacing.x3' }, alignItems: "stretch", gap: "base.spacing.x1", children: [jsx(MenuItem, { shimmer: "withBottomSlot", size: "small", emphasized: true }), jsx(MenuItem, { shimmer: "withBottomSlot", size: "small", emphasized: true }), jsxs(Body, { sx: { textAlign: 'center', mt: 'base.spacing.x6' }, size: "small", children: [t('views.ADD_TOKENS.drawer.options.loadingText1'), jsx("br", {}), t('views.ADD_TOKENS.drawer.options.loadingText2')] }), jsx(FramedVideo, { mimeType: "video/mp4", videoUrl: getRemoteVideo(checkout.config.environment, '/loading_bubble-small.mp4'), sx: { alignSelf: 'center', mt: 'base.spacing.x2' }, size: "large", circularFrame: true })] }));
|
|
5178
|
+
}
|
|
5179
|
+
const noRoutes = !(!insufficientBalance || routes?.length);
|
|
5180
|
+
return (jsxs(Stack, { sx: { py: 'base.spacing.x3' }, alignItems: "stretch", gap: "base.spacing.x1", testId: "options-list", justifyContent: "center", rc: jsx(motion.div, { variants: listVariants, initial: "hidden", animate: "show" }), children: [routes?.map((routeData, index) => (jsx(RouteOption, { size: size, routeData: routeData, chains: chains, onClick: () => onRouteClick(routeData, index), isFastest: index === 0, selected: index === selectedIndex, rc: jsx(motion.div, { variants: listItemVariants }) }, `route-option-${routeData.amountData.fromToken.chainId}-${routeData.amountData.fromToken.address}`))), noRoutes && (jsxs(Banner, { children: [jsx(Banner.Icon, { icon: "InformationCircle" }), jsx(Banner.Title, { children: t('views.ADD_TOKENS.drawer.options.noRoutes.heading') }), jsx(Banner.Caption, { children: t('views.ADD_TOKENS.drawer.options.noRoutes.caption') })] })), showOnrampOption && (jsxs(Fragment, { children: [jsx(Divider, { size: "xSmall", sx: { my: 'base.spacing.x2' }, children: t('views.ADD_TOKENS.drawer.options.moreOptionsDividerText') }), defaultFiatOptions.map((type, idx) => (jsx(FiatOption, { type: type, size: size, onClick: onCardClick, rc: jsx(motion.div, { custom: idx, variants: listItemVariants }) }, `fiat-option-${type}`)))] }))] }));
|
|
5181
|
+
}
|
|
5182
|
+
|
|
5183
|
+
function RouteOptionsDrawer({ checkout, routes, visible, onClose, onRouteClick, onCardClick, showOnrampOption,
|
|
5184
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5185
|
+
showSwapOption,
|
|
5186
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5187
|
+
showBridgeOption, insufficientBalance, }) {
|
|
5188
|
+
const { t } = useTranslation();
|
|
5189
|
+
const { track } = useAnalytics();
|
|
5190
|
+
const { addTokensState: { id, chains }, } = reactExports.useContext(AddTokensContext);
|
|
5191
|
+
const { providersState: { fromProviderInfo, fromAddress }, } = useProvidersContext();
|
|
5192
|
+
const selectedRouteIndex = reactExports.useRef(0);
|
|
5193
|
+
const handleOnRouteClick = (route, index) => {
|
|
5194
|
+
selectedRouteIndex.current = index;
|
|
5195
|
+
onRouteClick(route);
|
|
5196
|
+
};
|
|
5197
|
+
reactExports.useEffect(() => {
|
|
5198
|
+
if (!visible) {
|
|
5199
|
+
return;
|
|
5200
|
+
}
|
|
5201
|
+
track({
|
|
5202
|
+
userJourney: UserJourney.ADD_TOKENS,
|
|
5203
|
+
screen: 'InputScreen',
|
|
5204
|
+
control: 'RoutesMenu',
|
|
5205
|
+
controlType: 'MenuItem',
|
|
5206
|
+
action: 'Opened',
|
|
5207
|
+
extras: {
|
|
5208
|
+
contextId: id,
|
|
5209
|
+
showOnrampOption: Boolean(showOnrampOption),
|
|
5210
|
+
showSwapOption: Boolean(showSwapOption),
|
|
5211
|
+
insufficientBalance: Boolean(insufficientBalance),
|
|
5212
|
+
routesAvailable: routes?.length ?? 0,
|
|
5213
|
+
},
|
|
5214
|
+
});
|
|
5215
|
+
}, [visible]);
|
|
5216
|
+
return (jsx(Drawer, { size: "full", visible: visible, showHeaderBar: false, onCloseDrawer: onClose, children: jsxs(Drawer.Content, { rc: jsx(motion.div, { variants: listVariants, initial: "hidden", animate: "show" }), sx: {
|
|
5217
|
+
pt: 'base.spacing.x3',
|
|
5218
|
+
px: 'base.spacing.x3',
|
|
5219
|
+
}, children: [jsxs(MenuItem, { size: "xSmall", children: [jsx(MenuItem.FramedImage, { padded: true, emphasized: true, use: (jsx("img", { src: fromProviderInfo?.icon, alt: fromProviderInfo?.name })), sx: { mx: 'base.spacing.x2' } }), jsx(MenuItem.Label, { children: t('views.ADD_TOKENS.drawer.options.heading') }), jsxs(MenuItem.Caption, { children: [fromProviderInfo?.name, ' • ', jsx(EllipsizedText, { text: fromAddress ?? '', sx: { c: 'inherit', fontSize: 'inherit' } })] }), jsx(MenuItem.StatefulButtCon, { icon: "ChevronExpand", onClick: onClose })] }), jsx(RouteOptions, { size: "small", checkout: checkout, routes: routes, chains: chains, onCardClick: onCardClick, onRouteClick: handleOnRouteClick, showOnrampOption: showOnrampOption, insufficientBalance: insufficientBalance, selectedIndex: selectedRouteIndex.current })] }) }));
|
|
5220
|
+
}
|
|
5221
|
+
|
|
5222
|
+
function SelectedRouteOptionContainer({ children, onClick, selected, }) {
|
|
5223
|
+
return (jsx(Stack, { direction: "row", alignItems: "center", gap: "base.spacing.x4", sx: {
|
|
5224
|
+
ml: ({ base }) => (selected
|
|
5225
|
+
? `calc(${base.spacing.x12} * -1)`
|
|
5226
|
+
: `calc(${base.spacing.x16} * -1)`),
|
|
5227
|
+
w: ({ base }) => (selected
|
|
5228
|
+
? `calc(100% + (${base.spacing.x12}))`
|
|
5229
|
+
: `calc(100% + (${base.spacing.x16}))`),
|
|
5230
|
+
}, rc: jsx("span", { ...(onClick ? { onClick } : {}) }), children: children }));
|
|
5231
|
+
}
|
|
5232
|
+
function SelectedRouteOption({ checkout, routeData, chains, loading = false, withSelectedWallet = false, insufficientBalance = false, showOnrampOption = false, onClick, }) {
|
|
5233
|
+
const { t } = useTranslation();
|
|
5234
|
+
const { fromToken } = routeData?.amountData ?? {};
|
|
5235
|
+
const chain = chains?.find((c) => c.id === fromToken?.chainId);
|
|
5236
|
+
const { routeBalanceUsd, fromAmount, fromAmountUsd } = reactExports.useMemo(() => getRouteAndTokenBalances(routeData), [routeData]);
|
|
5237
|
+
const insufficientBalancePayWithCard = insufficientBalance && showOnrampOption;
|
|
5238
|
+
const handleOnClick = reactExports.useCallback((event) => {
|
|
5239
|
+
event.stopPropagation();
|
|
5240
|
+
if (!loading && !routeData && !insufficientBalancePayWithCard)
|
|
5241
|
+
return false;
|
|
5242
|
+
onClick?.(event);
|
|
5243
|
+
return true;
|
|
5244
|
+
}, [onClick, loading, routeData]);
|
|
5245
|
+
if (!routeData && loading) {
|
|
5246
|
+
return (jsxs(SelectedRouteOptionContainer, { onClick: handleOnClick, selected: withSelectedWallet, children: [jsx(MenuItem.FramedVideo, { videoUrl: getRemoteVideo(checkout.config.environment, '/loading_bubble-small.mp4'), padded: true, mimeType: "video/mp4", circularFrame: true }), jsx(MenuItem.Caption, { children: t('views.ADD_TOKENS.routeSelection.loadingText') })] }));
|
|
5247
|
+
}
|
|
5248
|
+
if ((!routeData && !loading) || insufficientBalance) {
|
|
5249
|
+
let icon = 'Sparkle';
|
|
5250
|
+
let copy = '';
|
|
5251
|
+
if (insufficientBalance) {
|
|
5252
|
+
icon = 'InformationCircle';
|
|
5253
|
+
copy = t('views.ADD_TOKENS.routeSelection.noRoute');
|
|
5254
|
+
}
|
|
5255
|
+
if (insufficientBalancePayWithCard) {
|
|
5256
|
+
icon = 'BankCard';
|
|
5257
|
+
copy = t('views.ADD_TOKENS.routeSelection.payWithCard');
|
|
5258
|
+
}
|
|
5259
|
+
return (jsxs(SelectedRouteOptionContainer, { onClick: handleOnClick, selected: withSelectedWallet, children: [jsx(MenuItem.FramedIcon, { icon: icon, variant: "bold", circularFrame: true, emphasized: false }), jsx(MenuItem.Caption, { children: copy })] }));
|
|
5260
|
+
}
|
|
5261
|
+
return (jsxs(SelectedRouteOptionContainer, { onClick: handleOnClick, selected: withSelectedWallet, children: [chain && (jsxs(Sticker, { position: { x: 'rightInside', y: 'bottomInside' }, children: [jsxs(Tooltip, { size: "small", children: [jsx(Tooltip.Target, { children: jsx(Sticker.FramedImage, { use: jsx("img", { src: chain.iconUrl, alt: chain.name }), size: "xSmall" }) }), jsx(Tooltip.Content, { id: "route_tooltip_content", children: chain.name })] }), jsx(MenuItem.FramedImage, { circularFrame: true, padded: true, use: jsx("img", { src: fromToken?.iconUrl, alt: fromToken?.name }) })] })), jsxs(Stack, { direction: "row", justifyContent: "space-between", alignItems: "center", sx: { w: '100%' }, children: [jsxs(Stack, { gap: "0px", children: [jsx(MenuItem.Label, { children: fromToken?.name }), jsxs(MenuItem.Caption, { children: [`${t('views.ADD_TOKENS.fees.balance')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${routeBalanceUsd}`, routeData?.isInsufficientGas && (jsxs(Fragment, { children: [jsx("br", {}), jsx("span", { style: { color: '#FF637F' }, children: t('views.ADD_TOKENS.noGasRouteMessage', {
|
|
5262
|
+
token: routeData.route.route.estimate.gasCosts[0].token.symbol,
|
|
5263
|
+
}) })] }))] })] }), jsx(MenuItem.PriceDisplay, { price: fromAmount, children: jsx(MenuItem.PriceDisplay.Caption, { children: `${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${fromAmountUsd}` }) })] })] }));
|
|
5264
|
+
}
|
|
5265
|
+
|
|
5266
|
+
const checkSanctionedAddresses = async (addresses, config) => {
|
|
5267
|
+
const result = await fetchRiskAssessment(addresses, config);
|
|
5268
|
+
return isAddressSanctioned(result);
|
|
5269
|
+
};
|
|
5270
|
+
|
|
5270
5271
|
function AddTokens({ checkout, toAmount, config, toTokenAddress, showOnrampOption = true, showSwapOption = true, showBridgeOption = true, onCloseButtonClick, showBackButton, onBackButtonClick, }) {
|
|
5271
5272
|
const inputRef = reactExports.useRef(null);
|
|
5272
5273
|
const { fetchRoutesWithRateLimit, resetRoutes } = useRoutes();
|
|
@@ -5694,7 +5695,7 @@ function AddTokens({ checkout, toAmount, config, toTokenAddress, showOnrampOptio
|
|
|
5694
5695
|
: {}, label: t('views.ADD_TOKENS.walletSelection.to.label'), caption: t('views.ADD_TOKENS.walletSelection.to.caption'), providerInfo: {
|
|
5695
5696
|
...toProviderInfo,
|
|
5696
5697
|
address: toAddress,
|
|
5697
|
-
}, chainInfo: getChainInfo(), onClick: () => setShowDeliverToDrawer(true), disabled: lockedToProvider })] }), jsx(Button, { testId: "add-tokens-button", size: "large", variant: readyToReview ? 'primary' : 'secondary', disabled: !readyToReview, onClick: handleReviewClick, sx: { opacity: readyToReview ? 1 : 0.5 }, children: t('views.ADD_TOKENS.review.buttonText') }), jsx(SquidFooter, {}), jsx(PayWithWalletDrawer, { visible: showPayWithDrawer, walletOptions: walletOptions, onClose: () => setShowPayWithDrawer(false), onPayWithCard: handleCardClick, onConnect: handleWalletConnected, insufficientBalance: insufficientBalance, showOnRampOption: shouldShowOnRampOption || !selectedToken }), jsx(
|
|
5698
|
+
}, chainInfo: getChainInfo(), onClick: () => setShowDeliverToDrawer(true), disabled: lockedToProvider })] }), jsx(Button, { testId: "add-tokens-button", size: "large", variant: readyToReview ? 'primary' : 'secondary', disabled: !readyToReview, onClick: handleReviewClick, sx: { opacity: readyToReview ? 1 : 0.5 }, children: t('views.ADD_TOKENS.review.buttonText') }), jsx(SquidFooter, {}), jsx(PayWithWalletDrawer, { visible: showPayWithDrawer, walletOptions: walletOptions, onClose: () => setShowPayWithDrawer(false), onPayWithCard: handleCardClick, onConnect: handleWalletConnected, insufficientBalance: insufficientBalance, showOnRampOption: shouldShowOnRampOption || !selectedToken }), jsx(RouteOptionsDrawer, { checkout: checkout, routes: routes, showOnrampOption: shouldShowOnRampOption, showSwapOption: showSwapOption, showBridgeOption: showBridgeOption, visible: showOptionsDrawer, onClose: () => setShowOptionsDrawer(false), onCardClick: handleCardClick, onRouteClick: handleRouteClick, insufficientBalance: insufficientBalance }), jsx(DeliverToWalletDrawer, { visible: showDeliverToDrawer, walletOptions: walletOptions, onClose: handleDeliverToClose, onConnect: handleWalletConnected }), jsx(OnboardingDrawer, { environment: checkout?.config.environment })] })] }), jsx(NotEnoughGasDrawer, { visible: showNotEnoughGasDrawer, routeData: selectedRouteData, onTryAgainClick: () => setShowNotEnoughGasDrawer(false), onToolkitClick: handleToolkitClick })] }));
|
|
5698
5699
|
}
|
|
5699
5700
|
|
|
5700
5701
|
var dist$2 = {};
|
|
@@ -173024,6 +173025,47 @@ function SquidIcon({ sx = {}, className, }) {
|
|
|
173024
173025
|
d: "M23.7183 11.2782C23.8008 10.984 23.8565 10.6787 23.8891 10.3676C23.8891 10.3691 23.8896 10.371 23.8896 10.371C23.7207 9.12732 23.3616 7.94412 22.8423 6.85164C22.9051 7.21308 22.9464 7.61484 22.9738 8.08236C23.0458 9.30588 22.5907 11.2187 21.829 12.267C21.1258 13.2347 19.5394 14.1476 18.0279 13.3417C17.2296 12.916 16.3743 11.2883 17.3319 7.87404C17.8498 6.02796 18.0979 3.95148 16.825 2.19084C15.7546 0.710036 13.7962 0.331317 12.1051 0.793076C9.99025 1.37052 8.81665 3.03948 8.33569 5.10972C7.99345 6.58092 8.22145 8.07132 8.80657 9.4806C9.80833 11.8936 11.1394 12.6486 11.1835 14.7428C11.1979 15.4321 11.1456 16.8059 12.1935 16.7056C13.1856 16.6105 13.0627 15.484 12.8467 14.7865C12.5117 13.7036 11.6357 12.7878 10.8139 11.3776C10.1986 10.322 9.79105 9.54924 9.70369 8.37036C9.61345 7.14684 9.94801 5.80812 10.6618 4.7382C11.3237 3.74604 12.7459 2.80956 14.1999 3.49068C14.7298 3.73884 15.0533 4.19772 15.2055 4.6926C15.6821 6.24588 15.0634 7.76364 14.9079 9.67308C14.6487 12.8526 16.7928 17.2144 20.9165 15.1955C22.2413 14.548 23.2776 12.8521 23.7183 11.2782Z", fill: "black" })] }));
|
|
173025
173026
|
}
|
|
173026
173027
|
|
|
173028
|
+
/**
|
|
173029
|
+
* Find a chain by its id
|
|
173030
|
+
* @param chainId - The id of the chain to find
|
|
173031
|
+
* @param chains - The chains to search through
|
|
173032
|
+
* @returns The chain with the matching id, or undefined if no chain is found
|
|
173033
|
+
*/
|
|
173034
|
+
function findChainById(chainId, chains) {
|
|
173035
|
+
return chains?.find((chain) => chain.id === chainId);
|
|
173036
|
+
}
|
|
173037
|
+
/**
|
|
173038
|
+
* Get the chains from the route
|
|
173039
|
+
* @param chains - The chains to search through
|
|
173040
|
+
* @param route - The route to get the chains from
|
|
173041
|
+
* @returns The chains from the route
|
|
173042
|
+
*/
|
|
173043
|
+
const getRouteChains = (chains, route) => ({
|
|
173044
|
+
fromChain: findChainById(route?.route.estimate.fromToken.chainId, chains),
|
|
173045
|
+
toChain: findChainById(route?.route.estimate.toToken.chainId, chains),
|
|
173046
|
+
});
|
|
173047
|
+
|
|
173048
|
+
const convertToNetworkChangeableProvider = async (provider) => new Web3Provider(provider.provider, 'any');
|
|
173049
|
+
|
|
173050
|
+
function AddressMissmatchDrawer({ visible, onClick, }) {
|
|
173051
|
+
const { t } = useTranslation();
|
|
173052
|
+
return (jsx(Drawer, { size: "full", visible: visible, showHeaderBar: false, children: jsxs(Drawer.Content, { children: [jsx(WalletWarningHero, {}), jsxs(Box, { sx: { px: 'base.spacing.x6' }, children: [jsx(Heading, { sx: {
|
|
173053
|
+
marginTop: 'base.spacing.x6',
|
|
173054
|
+
marginBottom: 'base.spacing.x2',
|
|
173055
|
+
textAlign: 'center',
|
|
173056
|
+
}, children: t('views.ADD_TOKENS.error.addressMismatch.heading') }), jsx(Body, { size: "medium", sx: {
|
|
173057
|
+
display: 'block',
|
|
173058
|
+
textAlign: 'center',
|
|
173059
|
+
color: 'base.color.text.body.secondary',
|
|
173060
|
+
marginBottom: 'base.spacing.x21',
|
|
173061
|
+
}, children: t('views.ADD_TOKENS.error.addressMismatch.body') })] }), jsx(Box, { sx: {
|
|
173062
|
+
display: 'flex',
|
|
173063
|
+
flexDirection: 'column',
|
|
173064
|
+
paddingX: 'base.spacing.x6',
|
|
173065
|
+
width: '100%',
|
|
173066
|
+
}, children: jsx(Button, { sx: { width: '100%', marginBottom: 'base.spacing.x10' }, testId: "non-passport-cta-button", variant: "primary", size: "large", onClick: onClick, children: t('views.ADD_TOKENS.error.addressMismatch.buttonText') }) })] }) }));
|
|
173067
|
+
}
|
|
173068
|
+
|
|
173027
173069
|
function RouteFees({ visible, onClose, routeData, totalAmount, totalFiatAmount, }) {
|
|
173028
173070
|
const { t } = useTranslation();
|
|
173029
173071
|
const feeCosts = reactExports.useMemo(() => routeData?.route.estimate.feeCosts.map((fee) => ({
|
|
@@ -173061,47 +173103,6 @@ function RouteFees({ visible, onClose, routeData, totalAmount, totalFiatAmount,
|
|
|
173061
173103
|
return (jsx(FeesBreakdown, { visible: visible, loading: !routeData, fees: [...feeCosts, ...gasCosts], tokenSymbol: tokenSymbol, totalAmount: getFormattedNumber(totalAmount, feesToken?.decimals), totalFiatAmount: getFormattedAmounts(totalFiatAmount), onCloseDrawer: onClose }));
|
|
173062
173104
|
}
|
|
173063
173105
|
|
|
173064
|
-
function AddressMissmatchDrawer({ visible, onClick, }) {
|
|
173065
|
-
const { t } = useTranslation();
|
|
173066
|
-
return (jsx(Drawer, { size: "full", visible: visible, showHeaderBar: false, children: jsxs(Drawer.Content, { children: [jsx(WalletWarningHero, {}), jsxs(Box, { sx: { px: 'base.spacing.x6' }, children: [jsx(Heading, { sx: {
|
|
173067
|
-
marginTop: 'base.spacing.x6',
|
|
173068
|
-
marginBottom: 'base.spacing.x2',
|
|
173069
|
-
textAlign: 'center',
|
|
173070
|
-
}, children: t('views.ADD_TOKENS.error.addressMismatch.heading') }), jsx(Body, { size: "medium", sx: {
|
|
173071
|
-
display: 'block',
|
|
173072
|
-
textAlign: 'center',
|
|
173073
|
-
color: 'base.color.text.body.secondary',
|
|
173074
|
-
marginBottom: 'base.spacing.x21',
|
|
173075
|
-
}, children: t('views.ADD_TOKENS.error.addressMismatch.body') })] }), jsx(Box, { sx: {
|
|
173076
|
-
display: 'flex',
|
|
173077
|
-
flexDirection: 'column',
|
|
173078
|
-
paddingX: 'base.spacing.x6',
|
|
173079
|
-
width: '100%',
|
|
173080
|
-
}, children: jsx(Button, { sx: { width: '100%', marginBottom: 'base.spacing.x10' }, testId: "non-passport-cta-button", variant: "primary", size: "large", onClick: onClick, children: t('views.ADD_TOKENS.error.addressMismatch.buttonText') }) })] }) }));
|
|
173081
|
-
}
|
|
173082
|
-
|
|
173083
|
-
/**
|
|
173084
|
-
* Find a chain by its id
|
|
173085
|
-
* @param chainId - The id of the chain to find
|
|
173086
|
-
* @param chains - The chains to search through
|
|
173087
|
-
* @returns The chain with the matching id, or undefined if no chain is found
|
|
173088
|
-
*/
|
|
173089
|
-
function findChainById(chainId, chains) {
|
|
173090
|
-
return chains?.find((chain) => chain.id === chainId);
|
|
173091
|
-
}
|
|
173092
|
-
/**
|
|
173093
|
-
* Get the chains from the route
|
|
173094
|
-
* @param chains - The chains to search through
|
|
173095
|
-
* @param route - The route to get the chains from
|
|
173096
|
-
* @returns The chains from the route
|
|
173097
|
-
*/
|
|
173098
|
-
const getRouteChains = (chains, route) => ({
|
|
173099
|
-
fromChain: findChainById(route?.route.estimate.fromToken.chainId, chains),
|
|
173100
|
-
toChain: findChainById(route?.route.estimate.toToken.chainId, chains),
|
|
173101
|
-
});
|
|
173102
|
-
|
|
173103
|
-
const convertToNetworkChangeableProvider = async (provider) => new Web3Provider(provider.provider, 'any');
|
|
173104
|
-
|
|
173105
173106
|
const dividerSx = {
|
|
173106
173107
|
content: "''",
|
|
173107
173108
|
pos: 'absolute',
|