@xswap-link/sdk 0.3.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +9 -5
- package/CHANGELOG.md +10 -0
- package/README.md +2 -1
- package/dist/index.d.mts +106 -20
- package/dist/index.d.ts +106 -20
- package/dist/index.global.js +963 -164
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +105 -3564
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +105 -3534
- package/dist/index.mjs.map +1 -0
- package/nodemon.json +1 -1
- package/package.json +16 -9
- package/postcss.config.js +8 -1
- package/src/{components → assets}/icons/ArrowDownIcon.tsx +1 -2
- package/src/assets/icons/ArrowDownLongIcon.tsx +12 -0
- package/src/{components → assets}/icons/ArrowLeftIcon.tsx +1 -5
- package/src/{components → assets}/icons/ArrowRightIcon.tsx +1 -5
- package/src/assets/icons/ArrowUpIcon.tsx +12 -0
- package/src/{components → assets}/icons/ArrowUpRightIcon.tsx +1 -5
- package/src/assets/icons/CashbacklIcon.tsx +28 -0
- package/src/{components → assets}/icons/CheckIcon.tsx +1 -5
- package/src/assets/icons/ChevronDownIcon.tsx +12 -0
- package/src/assets/icons/ChevronUpIcon.tsx +7 -0
- package/src/{components → assets}/icons/CircularProgressIcon.tsx +1 -2
- package/src/assets/icons/CloseIcon.tsx +15 -0
- package/src/{components → assets}/icons/CoinsIcon.tsx +0 -2
- package/src/assets/icons/CopyIcon.tsx +15 -0
- package/src/assets/icons/DotGreenIcon.tsx +12 -0
- package/src/{components → assets}/icons/DownArrorIcon.tsx +0 -2
- package/src/{components → assets}/icons/ErrorIcon.tsx +0 -1
- package/src/assets/icons/ErrorModalStatusIcon.tsx +31 -0
- package/src/assets/icons/HelpIcon.tsx +21 -0
- package/src/assets/icons/HistoryGradientBgIcon.tsx +32 -0
- package/src/assets/icons/HistoryIcon.tsx +12 -0
- package/src/{components → assets}/icons/HourGlassIcon.tsx +1 -5
- package/src/assets/icons/Icon.tsx +5 -0
- package/src/{components → assets}/icons/InfoIcon.tsx +0 -1
- package/src/assets/icons/LinkExternalIcon.tsx +15 -0
- package/src/{components → assets}/icons/PercentageIcon.tsx +0 -1
- package/src/assets/icons/RankIcon.tsx +28 -0
- package/src/assets/icons/SettingsGradientBgIcon.tsx +32 -0
- package/src/assets/icons/SettingsIcon.tsx +12 -0
- package/src/{components → assets}/icons/SignIcon.tsx +0 -2
- package/src/{components → assets}/icons/SuccessIcon.tsx +0 -1
- package/src/assets/icons/SuccessModalStatusIcon.tsx +31 -0
- package/src/assets/icons/ThumbUpRoundedIcon.tsx +15 -0
- package/src/{components → assets}/icons/TimerIcon.tsx +0 -1
- package/src/assets/icons/TokensIcon.tsx +16 -0
- package/src/assets/icons/WaitingIcon.tsx +15 -0
- package/src/{components → assets}/icons/XMarkIcon.tsx +1 -5
- package/src/assets/icons/XPowerIcon.tsx +28 -0
- package/src/{components → assets}/icons/index.ts +16 -0
- package/src/components/Alert/index.tsx +1 -1
- package/src/components/Button/index.tsx +57 -0
- package/src/components/MessageBar/SnackMessage.tsx +32 -0
- package/src/components/MessageBar/index.tsx +44 -0
- package/src/components/Modal/index.tsx +52 -0
- package/src/components/PoweredBy/index.tsx +12 -0
- package/src/components/SafeInput/index.tsx +51 -0
- package/src/components/Skeleton/index.tsx +5 -9
- package/src/components/Spinner/index.tsx +6 -8
- package/src/components/Swap/Header/Controls/index.tsx +57 -0
- package/src/components/Swap/Header/index.tsx +16 -0
- package/src/components/Swap/HistoryView/index.tsx +34 -0
- package/src/components/Swap/SettingsView/Delivery/index.tsx +42 -0
- package/src/components/Swap/SettingsView/Slippage/index.tsx +80 -0
- package/src/components/Swap/SettingsView/index.tsx +11 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxOverview/ArrowIcon.tsx +13 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxOverview/Header/index.tsx +37 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxOverview/Steps/index.tsx +145 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxOverview/SwapPanel/index.tsx +61 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxOverview/index.tsx +291 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxResult/TokenItem/index.tsx +24 -0
- package/src/components/Swap/SwapView/ConfirmationView/TxResult/index.tsx +84 -0
- package/src/components/Swap/SwapView/ConfirmationView/index.tsx +17 -0
- package/src/components/Swap/SwapView/FeesPanel/DeliveryInfo/index.tsx +25 -0
- package/src/components/Swap/SwapView/FeesPanel/Fee/index.tsx +18 -0
- package/src/components/Swap/SwapView/FeesPanel/Fees/index.tsx +71 -0
- package/src/components/Swap/SwapView/FeesPanel/index.tsx +67 -0
- package/src/components/Swap/SwapView/SwapButton/index.tsx +154 -0
- package/src/components/Swap/SwapView/SwapPanel/AmountPanel/Balance/index.tsx +23 -0
- package/src/components/Swap/SwapView/SwapPanel/AmountPanel/index.tsx +56 -0
- package/src/components/Swap/SwapView/SwapPanel/ChainPanel/ChainPicker/ChainItem/index.tsx +70 -0
- package/src/components/Swap/SwapView/SwapPanel/ChainPanel/ChainPicker/index.tsx +62 -0
- package/src/components/Swap/SwapView/SwapPanel/ChainPanel/index.tsx +74 -0
- package/src/components/Swap/SwapView/SwapPanel/MaxPanel/index.tsx +35 -0
- package/src/components/Swap/SwapView/SwapPanel/TokenPanel/TokenPicker/QuickPickTokenItem/index.tsx +40 -0
- package/src/components/Swap/SwapView/SwapPanel/TokenPanel/TokenPicker/TokenItem/index.tsx +62 -0
- package/src/components/Swap/SwapView/SwapPanel/TokenPanel/TokenPicker/index.tsx +399 -0
- package/src/components/Swap/SwapView/SwapPanel/TokenPanel/index.tsx +104 -0
- package/src/components/Swap/SwapView/SwapPanel/index.tsx +42 -0
- package/src/components/Swap/SwapView/index.tsx +20 -0
- package/src/components/Swap/index.tsx +34 -0
- package/src/components/TextInput/index.tsx +67 -0
- package/src/components/Timer/index.tsx +57 -0
- package/src/components/ToggleButton/index.tsx +24 -0
- package/src/components/{UnknownTokenLogo/UnknownTokenLogo.tsx → TokenLogo/Unknown/index.tsx} +3 -4
- package/src/components/TokenLogo/WithChain/index.tsx +34 -0
- package/src/components/TokenLogo/index.tsx +22 -0
- package/src/components/Tooltip/index.tsx +108 -0
- package/src/components/TxConfigForm/index.tsx +63 -42
- package/src/components/TxDataCard/TokenDetails/index.tsx +30 -0
- package/src/components/TxDataCard/TxDataCardUI/index.tsx +133 -0
- package/src/components/TxDataCard/index.tsx +30 -0
- package/src/components/TxStatusButton/index.tsx +64 -108
- package/src/components/global.css +115 -4
- package/src/components/index.ts +18 -1
- package/src/config/fonts.ts +114 -0
- package/src/config/global.d.ts +4 -0
- package/src/config/init.tsx +35 -31
- package/src/constants/crosschainEstimationTimes.ts +52 -0
- package/src/constants/index.ts +8 -0
- package/src/context/GlobalDataProvider.tsx +165 -0
- package/src/context/HistoryProvider.tsx +339 -0
- package/src/context/ModalProvider.tsx +47 -0
- package/src/context/SwapProvider.tsx +664 -0
- package/src/context/TransactionProvider.tsx +86 -0
- package/src/context/TxUIWrapper.tsx +388 -0
- package/src/context/index.ts +5 -0
- package/src/contracts/abi/CustomXSwapRouter.json +953 -0
- package/src/contracts/abi/StakingStableAPR.json +1438 -0
- package/src/contracts/abi/XSwapRouter.json +1242 -0
- package/src/contracts/abi/XSwapTokenFeeDistributor.json +350 -0
- package/src/contracts/abi/index.ts +8 -0
- package/src/contracts/addresses.ts +24 -6
- package/src/fonts/Satoshi-Black.woff2 +0 -0
- package/src/fonts/Satoshi-BlackItalic.woff2 +0 -0
- package/src/fonts/Satoshi-Bold.woff2 +0 -0
- package/src/fonts/Satoshi-BoldItalic.woff2 +0 -0
- package/src/fonts/Satoshi-Light.woff2 +0 -0
- package/src/fonts/Satoshi-LightItalic.woff2 +0 -0
- package/src/fonts/Satoshi-Medium.woff2 +0 -0
- package/src/fonts/Satoshi-MediumItalic.woff2 +0 -0
- package/src/fonts/Satoshi-Regular.woff2 +0 -0
- package/src/fonts/Satoshi-RegularItalic.woff2 +0 -0
- package/src/fonts/Satoshi-Variable.woff2 +0 -0
- package/src/fonts/Satoshi-VariableItalic.woff2 +0 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/networkManagement/clientToSigner.tsx +17 -0
- package/src/hooks/networkManagement/useNetworks.ts +51 -0
- package/src/hooks/useBatchQuery.ts +46 -0
- package/src/hooks/useDebounce.tsx +28 -0
- package/src/hooks/useEvmContractApi.ts +85 -0
- package/src/hooks/usePortal.ts +79 -0
- package/src/hooks/useXPower.ts +58 -0
- package/src/models/Addresses.ts +8 -2
- package/src/models/TokenData.ts +13 -0
- package/src/models/TransactionHistory.ts +2 -0
- package/src/models/TxUIWrapper.ts +51 -0
- package/src/models/XSwapConfig.ts +1 -0
- package/src/models/index.ts +1 -0
- package/src/models/payloads/GetBalancesPayload.ts +3 -0
- package/src/models/payloads/GetFinishedLeaderboardQuestsPayload.ts +3 -0
- package/src/models/payloads/GetLeaderboardChangePayload.ts +4 -0
- package/src/models/payloads/{GetSwapTxPayload.ts → ModalIntegrationPayload.ts} +3 -1
- package/src/models/payloads/index.ts +5 -2
- package/src/services/api.ts +34 -5
- package/src/services/integrations/monitoring.ts +49 -37
- package/src/services/integrations/transactions.ts +50 -6
- package/src/utils/contracts.ts +29 -0
- package/src/utils/index.ts +3 -3
- package/src/utils/numbers.ts +14 -0
- package/src/utils/parseWeb3Error.ts +7 -3
- package/tailwind.config.js +15 -5
- package/tsconfig.json +7 -7
- package/tsup.config.ts +61 -0
- package/xswap.config.ts +1 -0
- package/dist/index.css +0 -1
- package/src/components/TxConfigForm/BalanceComponent.tsx +0 -52
- package/src/components/TxConfigForm/Button.tsx +0 -20
- package/src/components/TxConfigForm/ChainListElement.tsx +0 -36
- package/src/components/TxConfigForm/ConfirmationAmount.tsx +0 -91
- package/src/components/TxConfigForm/ConfirmationView/ErrorView.tsx +0 -38
- package/src/components/TxConfigForm/ConfirmationView/SuccessView.tsx +0 -159
- package/src/components/TxConfigForm/ConfirmationView/index.tsx +0 -149
- package/src/components/TxConfigForm/ConnectWalletPrompt.tsx +0 -21
- package/src/components/TxConfigForm/Description.tsx +0 -17
- package/src/components/TxConfigForm/ErrorField.tsx +0 -19
- package/src/components/TxConfigForm/FeesDetails.tsx +0 -117
- package/src/components/TxConfigForm/Form.tsx +0 -574
- package/src/components/TxConfigForm/History.tsx +0 -131
- package/src/components/TxConfigForm/HistoryCard.tsx +0 -182
- package/src/components/TxConfigForm/PoweredBy.tsx +0 -12
- package/src/components/TxConfigForm/Settings.tsx +0 -143
- package/src/components/TxConfigForm/Summary.tsx +0 -105
- package/src/components/TxConfigForm/SwapPanel.tsx +0 -185
- package/src/components/TxConfigForm/TokenPicker.tsx +0 -176
- package/src/components/TxConfigForm/TopBar.tsx +0 -58
- package/src/components/TxConfigForm/UsdPrice.tsx +0 -44
- package/src/components/icons/ChevronDownIcon.tsx +0 -15
- package/src/components/icons/ChevronUpIcon.tsx +0 -10
- package/src/components/icons/CloseIcon.tsx +0 -15
- package/src/components/icons/HistoryIcon.tsx +0 -16
- package/src/components/icons/SettingsIcon.tsx +0 -16
- /package/src/{components → assets}/icons/ChainlinkCCIPIcon.tsx +0 -0
- /package/src/{components → assets}/icons/SearchIcon.tsx +0 -0
- /package/src/{components → assets}/icons/XSwapBadgeIcon.tsx +0 -0
- /package/src/{components → assets}/icons/XSwapLogo.tsx +0 -0
|
@@ -7,15 +7,19 @@ import { ethers } from "ethers";
|
|
|
7
7
|
*/
|
|
8
8
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
9
|
export function parseWeb3Error(error: any): string {
|
|
10
|
-
|
|
10
|
+
let errorMessage =
|
|
11
11
|
typeof error === "string"
|
|
12
12
|
? error
|
|
13
13
|
: error?.message || "An unknown error occurred";
|
|
14
14
|
|
|
15
|
+
// attach contract's errors like "insufficient funds for gas * price + value"
|
|
16
|
+
errorMessage += error?.data?.message || "";
|
|
17
|
+
|
|
15
18
|
// User rejected the transaction
|
|
16
19
|
if (
|
|
17
|
-
errorMessage.
|
|
18
|
-
errorMessage.
|
|
20
|
+
errorMessage.match(/User denied transaction signature/i) ||
|
|
21
|
+
errorMessage.match(/User rejected the request/i) ||
|
|
22
|
+
errorMessage.match(/User rejected transaction/i)
|
|
19
23
|
) {
|
|
20
24
|
return "Transaction was cancelled.";
|
|
21
25
|
}
|
package/tailwind.config.js
CHANGED
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
/** @type {import("tailwindcss").Config} */
|
|
2
2
|
export default {
|
|
3
|
-
content: ["
|
|
3
|
+
content: ["src/components/**/*.{ts,tsx}"],
|
|
4
4
|
theme: {
|
|
5
|
+
fontFamily: {
|
|
6
|
+
body: ["'Satoshi-Medium'", "Tahoma", "Verdana", "ui-sans-serif"],
|
|
7
|
+
sans: ["Satoshi-Medium", "Tahoma", "Verdana", "ui-sans-serif"],
|
|
8
|
+
},
|
|
5
9
|
extend: {
|
|
6
10
|
colors: {
|
|
7
11
|
x_alert: "rgb(255,183,77)",
|
|
8
12
|
x_alert_light: "rgb(255,226,183)",
|
|
9
13
|
x_blue: "#3396FF",
|
|
10
14
|
x_green: "#66bb6a",
|
|
15
|
+
x_orange: "#ffa726",
|
|
11
16
|
x_grey: "#ffffff80",
|
|
12
17
|
x_error_background: "rgba(255,202,40,0.1)",
|
|
18
|
+
x_skeleton_background: "rgba(255,255,255,0.13)",
|
|
13
19
|
x_error_border: "rgba(255,111,0,1)",
|
|
14
20
|
x_blue_light: "rgba(54,129,198,1)",
|
|
15
21
|
x_blue_dark: "rgba(43,74,157,1)",
|
|
16
22
|
x_green_light: "rgba(43,74,157,1)",
|
|
17
23
|
x_green_dark: "rgba(46,125,50,1)",
|
|
24
|
+
x_swap_primary: "#e0e7fa",
|
|
25
|
+
x_swap_secondary: "#1a2b6b",
|
|
26
|
+
x_swap_secondary_active: "#e0e7fa",
|
|
18
27
|
|
|
19
28
|
x_gray_100: "#D1D3D4",
|
|
20
29
|
x_gray_200: "#90A4AE",
|
|
@@ -55,9 +64,11 @@ export default {
|
|
|
55
64
|
x_orange_500: "#FF6F00",
|
|
56
65
|
x_orange_600: "#795548",
|
|
57
66
|
},
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
minWidth: {
|
|
68
|
+
x_modal: "360px",
|
|
69
|
+
},
|
|
70
|
+
maxWidth: {
|
|
71
|
+
x_modal: "480px",
|
|
61
72
|
},
|
|
62
73
|
animation: {
|
|
63
74
|
"spin-slow": "spin 3s linear infinite",
|
|
@@ -65,5 +76,4 @@ export default {
|
|
|
65
76
|
},
|
|
66
77
|
},
|
|
67
78
|
plugins: [],
|
|
68
|
-
prefix: "xpay-",
|
|
69
79
|
};
|
package/tsconfig.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
+
"target": "es2021",
|
|
4
|
+
"jsx": "react-jsx",
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"allowJs": true,
|
|
3
7
|
"esModuleInterop": true,
|
|
8
|
+
"strict": true,
|
|
4
9
|
"skipLibCheck": true,
|
|
5
|
-
"target": "es2021",
|
|
6
10
|
"verbatimModuleSyntax": false,
|
|
7
|
-
"allowJs": true,
|
|
8
|
-
"resolveJsonModule": true,
|
|
9
11
|
"moduleDetection": "force",
|
|
10
|
-
"strict": true,
|
|
11
12
|
"noUncheckedIndexedAccess": true,
|
|
12
13
|
"moduleResolution": "Bundler",
|
|
13
|
-
"
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"noImplicitAny": false,
|
|
14
16
|
"noEmit": true,
|
|
15
|
-
"jsx": "react-jsx",
|
|
16
17
|
"paths": {
|
|
17
18
|
"@src/*": ["./src/*"],
|
|
18
|
-
"@src/global.css": ["./src/components/global.css"]
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
}
|
package/tsup.config.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { defineConfig } from "tsup";
|
|
2
|
+
|
|
3
|
+
export default defineConfig(() => {
|
|
4
|
+
return [
|
|
5
|
+
// Main build configuration
|
|
6
|
+
{
|
|
7
|
+
entry: ["src/index.ts"],
|
|
8
|
+
format: ["cjs", "esm"],
|
|
9
|
+
dts: true,
|
|
10
|
+
clean: true,
|
|
11
|
+
minify: true,
|
|
12
|
+
splitting: false,
|
|
13
|
+
sourcemap: true,
|
|
14
|
+
noExternal: ["ethers"],
|
|
15
|
+
outDir: "dist",
|
|
16
|
+
esbuildOptions(options) {
|
|
17
|
+
options.loader = {
|
|
18
|
+
...options.loader,
|
|
19
|
+
".ttf": "dataurl",
|
|
20
|
+
".eot": "dataurl",
|
|
21
|
+
".woff": "dataurl",
|
|
22
|
+
".woff2": "dataurl",
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
loader: {
|
|
26
|
+
".css": "text",
|
|
27
|
+
".eot": "file",
|
|
28
|
+
".ttf": "file",
|
|
29
|
+
".woff": "file",
|
|
30
|
+
".woff2": "file",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
// CDN build configuration
|
|
34
|
+
{
|
|
35
|
+
entry: ["src/index.ts"],
|
|
36
|
+
format: ["iife"],
|
|
37
|
+
globalName: "XPay",
|
|
38
|
+
minify: true,
|
|
39
|
+
splitting: false,
|
|
40
|
+
sourcemap: true,
|
|
41
|
+
// bundle: true,
|
|
42
|
+
outDir: "dist",
|
|
43
|
+
esbuildOptions(options) {
|
|
44
|
+
options.loader = {
|
|
45
|
+
...options.loader,
|
|
46
|
+
".ttf": "dataurl",
|
|
47
|
+
".eot": "dataurl",
|
|
48
|
+
".woff": "dataurl",
|
|
49
|
+
".woff2": "dataurl",
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
loader: {
|
|
53
|
+
".css": "text",
|
|
54
|
+
".eot": "file",
|
|
55
|
+
".ttf": "file",
|
|
56
|
+
".woff": "file",
|
|
57
|
+
".woff2": "file",
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
});
|
package/xswap.config.ts
CHANGED
package/dist/index.css
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.xpay-global-border{border:1px solid rgba(255,255,255,.1)}.xpay-fixed{position:fixed}.xpay-absolute{position:absolute}.xpay-relative{position:relative}.xpay-bottom-0{bottom:0}.xpay-bottom-5{bottom:1.25rem}.xpay-left-0{left:0}.xpay-right-0{right:0}.xpay-right-2{right:.5rem}.xpay-right-4{right:1rem}.xpay-right-\[50\%\]{right:50%}.xpay-top-0{top:0}.xpay-top-10{top:2.5rem}.xpay-top-4{top:1rem}.xpay-top-\[46px\]{top:46px}.xpay-z-10{z-index:10}.xpay-z-20{z-index:20}.xpay-z-50{z-index:50}.xpay-z-\[1\]{z-index:1}.xpay-z-\[999\]{z-index:999}.xpay-mx-0{margin-left:0;margin-right:0}.xpay-mx-1\.5{margin-left:.375rem;margin-right:.375rem}.xpay-mx-2{margin-left:.5rem;margin-right:.5rem}.xpay-mx-\[-24px\]{margin-left:-24px;margin-right:-24px}.xpay-mx-auto{margin-left:auto;margin-right:auto}.xpay-my-0{margin-top:0;margin-bottom:0}.xpay-my-3{margin-top:.75rem;margin-bottom:.75rem}.xpay-my-4{margin-top:1rem;margin-bottom:1rem}.xpay--mb-6{margin-bottom:-1.5rem}.xpay--mt-7{margin-top:-1.75rem}.xpay-mb-1{margin-bottom:.25rem}.xpay-mb-2{margin-bottom:.5rem}.xpay-mb-4{margin-bottom:1rem}.xpay-ml-1{margin-left:.25rem}.xpay-ml-2{margin-left:.5rem}.xpay-ml-2\.5{margin-left:.625rem}.xpay-mr-1{margin-right:.25rem}.xpay-mt-1{margin-top:.25rem}.xpay-mt-4{margin-top:1rem}.xpay-box-border{box-sizing:border-box}.xpay-block{display:block}.xpay-flex{display:flex}.xpay-inline-flex{display:inline-flex}.xpay-h-10{height:2.5rem}.xpay-h-14{height:3.5rem}.xpay-h-3{height:.75rem}.xpay-h-3\.5{height:.875rem}.xpay-h-4{height:1rem}.xpay-h-5{height:1.25rem}.xpay-h-6{height:1.5rem}.xpay-h-7{height:1.75rem}.xpay-h-8{height:2rem}.xpay-h-9{height:2.25rem}.xpay-h-96{height:24rem}.xpay-h-\[2px\]{height:2px}.xpay-h-\[30vh\]{height:30vh}.xpay-h-\[36px\]{height:36px}.xpay-h-\[41px\]{height:41px}.xpay-h-\[70\%\]{height:70%}.xpay-h-\[9px\]{height:9px}.xpay-h-full{height:100%}.xpay-h-px{height:1px}.xpay-max-h-\[40vh\]{max-height:40vh}.xpay-max-h-\[70\%\]{max-height:70%}.xpay-min-h-\[26px\]{min-height:26px}.xpay-w-1\/2{width:50%}.xpay-w-10{width:2.5rem}.xpay-w-12{width:3rem}.xpay-w-14{width:3.5rem}.xpay-w-20{width:5rem}.xpay-w-3\.5{width:.875rem}.xpay-w-4{width:1rem}.xpay-w-5{width:1.25rem}.xpay-w-6{width:1.5rem}.xpay-w-7{width:1.75rem}.xpay-w-8{width:2rem}.xpay-w-9{width:2.25rem}.xpay-w-\[100\%\+48px\]{width:100%+48px}.xpay-w-\[100px\]{width:100px}.xpay-w-\[15px\]{width:15px}.xpay-w-\[310px\]{width:310px}.xpay-w-\[452px\]{width:452px}.xpay-w-full{width:100%}.xpay-w-px{width:1px}.xpay-w-screen{width:100vw}.xpay-min-w-60{min-width:15rem}.xpay-min-w-\[26px\]{min-width:26px}.xpay-max-w-full{max-width:100%}.xpay-grow{flex-grow:1}.xpay-translate-x-1\/2{--tw-translate-x: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xpay-translate-x-\[12px\]{--tw-translate-x: 12px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xpay-translate-y-\[-4px\]{--tw-translate-y: -4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xpay-translate-y-\[-60\%\]{--tw-translate-y: -60%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes xpay-pulse{50%{opacity:.5}}.xpay-animate-pulse{animation:xpay-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes xpay-spin{to{transform:rotate(360deg)}}.xpay-animate-spin{animation:xpay-spin 1s linear infinite}.xpay-cursor-pointer{cursor:pointer}.xpay-flex-col{flex-direction:column}.xpay-flex-wrap{flex-wrap:wrap}.xpay-items-start{align-items:flex-start}.xpay-items-end{align-items:flex-end}.xpay-items-center{align-items:center}.xpay-justify-end{justify-content:flex-end}.xpay-justify-center{justify-content:center}.xpay-justify-between{justify-content:space-between}.xpay-gap-1{gap:.25rem}.xpay-gap-2{gap:.5rem}.xpay-gap-2\.5{gap:.625rem}.xpay-gap-3{gap:.75rem}.xpay-gap-4{gap:1rem}.xpay-overflow-auto{overflow:auto}.xpay-overflow-hidden{overflow:hidden}.xpay-overflow-scroll{overflow:scroll}.xpay-overflow-x-hidden{overflow-x:hidden}.xpay-overflow-y-scroll{overflow-y:scroll}.xpay-overflow-ellipsis,.xpay-text-ellipsis{text-overflow:ellipsis}.xpay-whitespace-nowrap{white-space:nowrap}.xpay-rounded{border-radius:.25rem}.xpay-rounded-2xl{border-radius:1rem}.xpay-rounded-3xl{border-radius:1.5rem}.xpay-rounded-full{border-radius:9999px}.xpay-rounded-lg{border-radius:.5rem}.xpay-rounded-xl{border-radius:.75rem}.xpay-border{border-width:1px}.xpay-border-2{border-width:2px}.xpay-border-solid{border-style:solid}.xpay-border-none{border-style:none}.xpay-border-\[rgba\(255\,255\,255\,0\.1\)\]{border-color:#ffffff1a}.xpay-border-\[rgba\(255\,255\,255\,0\.2\)\]{border-color:#fff3}.xpay-border-\[rgba\(54\,129\,198\,1\)\]{border-color:#3681c6}.xpay-border-\[rgba\(82\,82\,82\,1\)\]{border-color:#525252}.xpay-border-transparent{border-color:transparent}.xpay-border-x_alert{--tw-border-opacity: 1;border-color:rgb(255 183 77 / var(--tw-border-opacity))}.xpay-border-x_blue_dark{border-color:#2b4a9d}.xpay-border-x_error_border{border-color:#ff6f00}.xpay-border-x_green_dark{border-color:#2e7d32}.xpay-bg-\[\#272e40\]{--tw-bg-opacity: 1;background-color:rgb(39 46 64 / var(--tw-bg-opacity))}.xpay-bg-\[rgb\(15\,15\,15\)\]{--tw-bg-opacity: 1;background-color:rgb(15 15 15 / var(--tw-bg-opacity))}.xpay-bg-\[rgb\(35\,35\,35\)\]{--tw-bg-opacity: 1;background-color:rgb(35 35 35 / var(--tw-bg-opacity))}.xpay-bg-\[rgba\(0\,0\,0\,0\.8\)\]{background-color:#000c}.xpay-bg-\[rgba\(15\,15\,15\,1\)\]{background-color:#0f0f0f}.xpay-bg-\[rgba\(2\,2\,2\,1\)\]{background-color:#020202}.xpay-bg-\[rgba\(255\,255\,255\,0\.1\)\]{background-color:#ffffff1a}.xpay-bg-\[rgba\(255\,255\,255\,0\.15\)\]{background-color:#ffffff26}.xpay-bg-\[rgba\(255\,255\,255\,0\.3\)\]{background-color:#ffffff4d}.xpay-bg-\[rgba\(39\,39\,39\,1\)\]{background-color:#272727}.xpay-bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.xpay-bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.xpay-bg-transparent{background-color:transparent}.xpay-bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.xpay-bg-x_blue{--tw-bg-opacity: 1;background-color:rgb(51 150 255 / var(--tw-bg-opacity))}.xpay-bg-x_error_background{background-color:#ffca281a}.xpay-bg-gradient-to-l{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.xpay-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.xpay-from-\[\#3681c6\]{--tw-gradient-from: #3681c6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(54 129 198 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.xpay-from-\[rgba\(54\,129\,198\,0\.2\)\]{--tw-gradient-from: rgba(54,129,198,.2) var(--tw-gradient-from-position);--tw-gradient-to: rgba(54, 129, 198, 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.xpay-from-\[rgba\(54\,129\,198\,1\)\]{--tw-gradient-from: rgba(54,129,198,1) var(--tw-gradient-from-position);--tw-gradient-to: rgba(54, 129, 198, 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.xpay-from-\[rgba\(76\,175\,80\,0\.2\)\]{--tw-gradient-from: rgba(76,175,80,.2) var(--tw-gradient-from-position);--tw-gradient-to: rgba(76, 175, 80, 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.xpay-from-x_blue_300_20{--tw-gradient-from: #3681C633 var(--tw-gradient-from-position);--tw-gradient-to: rgb(54 129 198 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.xpay-from-x_blue_light{--tw-gradient-from: rgba(54,129,198,1) var(--tw-gradient-from-position);--tw-gradient-to: rgba(54, 129, 198, 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.xpay-to-\[\#2b4a9d\]{--tw-gradient-to: #2b4a9d var(--tw-gradient-to-position)}.xpay-to-\[rgba\(43\,74\,157\,0\.2\)\]{--tw-gradient-to: rgba(43,74,157,.2) var(--tw-gradient-to-position)}.xpay-to-\[rgba\(43\,74\,157\,1\)\]{--tw-gradient-to: rgba(43,74,157,1) var(--tw-gradient-to-position)}.xpay-to-\[rgba\(46\,125\,50\,0\.2\)\]{--tw-gradient-to: rgba(46,125,50,.2) var(--tw-gradient-to-position)}.xpay-to-x_blue_400_20{--tw-gradient-to: #2B4A9D33 var(--tw-gradient-to-position)}.xpay-to-x_blue_dark{--tw-gradient-to: rgba(43,74,157,1) var(--tw-gradient-to-position)}.xpay-bg-clip-text{background-clip:text}.xpay-fill-\[rgba\(54\,129\,198\,1\)\]{fill:#3681c6}.xpay-p-0{padding:0}.xpay-p-2{padding:.5rem}.xpay-p-3{padding:.75rem}.xpay-p-4{padding:1rem}.xpay-p-5{padding:1.25rem}.xpay-p-6{padding:1.5rem}.xpay-p-\[5px\]{padding:5px}.xpay-px-0{padding-left:0;padding-right:0}.xpay-px-12{padding-left:3rem;padding-right:3rem}.xpay-px-2{padding-left:.5rem;padding-right:.5rem}.xpay-px-3{padding-left:.75rem;padding-right:.75rem}.xpay-px-4{padding-left:1rem;padding-right:1rem}.xpay-px-\[24px\]{padding-left:24px;padding-right:24px}.xpay-py-0{padding-top:0;padding-bottom:0}.xpay-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.xpay-py-1{padding-top:.25rem;padding-bottom:.25rem}.xpay-py-2{padding-top:.5rem;padding-bottom:.5rem}.xpay-py-4{padding-top:1rem;padding-bottom:1rem}.xpay-pl-9{padding-left:2.25rem}.xpay-pt-2{padding-top:.5rem}.xpay-text-left{text-align:left}.xpay-text-center{text-align:center}.xpay-text-right{text-align:right}.xpay-align-middle{vertical-align:middle}.xpay-text-2xl{font-size:1.5rem;line-height:2rem}.xpay-text-\[10px\]{font-size:10px}.xpay-text-\[11px\]{font-size:11px}.xpay-text-\[15px\]{font-size:15px}.xpay-text-base{font-size:1rem;line-height:1.5rem}.xpay-text-sm{font-size:.875rem;line-height:1.25rem}.xpay-text-xl{font-size:1.25rem;line-height:1.75rem}.xpay-text-xs{font-size:.75rem;line-height:1rem}.xpay-font-bold{font-weight:700}.xpay-font-light{font-weight:300}.xpay-font-medium{font-weight:500}.xpay-font-normal{font-weight:400}.xpay-leading-8{line-height:2rem}.xpay-leading-\[10px\]{line-height:10px}.xpay-leading-\[16px\]{line-height:16px}.xpay-leading-\[41px\]{line-height:41px}.xpay-leading-none{line-height:1}.xpay-text-\[\#888\]{--tw-text-opacity: 1;color:rgb(136 136 136 / var(--tw-text-opacity))}.xpay-text-\[\#e0e7fa\]{--tw-text-opacity: 1;color:rgb(224 231 250 / var(--tw-text-opacity))}.xpay-text-\[\#ffa726\]{--tw-text-opacity: 1;color:rgb(255 167 38 / var(--tw-text-opacity))}.xpay-text-\[rgb\(100\,200\,100\)\]{--tw-text-opacity: 1;color:rgb(100 200 100 / var(--tw-text-opacity))}.xpay-text-\[rgb\(158\,158\,158\)\]{--tw-text-opacity: 1;color:rgb(158 158 158 / var(--tw-text-opacity))}.xpay-text-\[rgb\(250\,200\,100\)\]{--tw-text-opacity: 1;color:rgb(250 200 100 / var(--tw-text-opacity))}.xpay-text-\[rgb\(255\,100\,100\)\]{--tw-text-opacity: 1;color:rgb(255 100 100 / var(--tw-text-opacity))}.xpay-text-\[rgba\(255\,255\,255\,0\.2\)\]{color:#fff3}.xpay-text-\[rgba\(255\,255\,255\,0\.6\)\]{color:#fff9}.xpay-text-\[rgba\(54\,129\,198\,1\)\]{color:#3681c6}.xpay-text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.xpay-text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.xpay-text-transparent{color:transparent}.xpay-text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.xpay-text-x_alert_light{--tw-text-opacity: 1;color:rgb(255 226 183 / var(--tw-text-opacity))}.xpay-text-x_blue_dark{color:#2b4a9d}.xpay-text-x_green{--tw-text-opacity: 1;color:rgb(102 187 106 / var(--tw-text-opacity))}.xpay-text-x_grey{color:#ffffff80}.xpay-underline{text-decoration-line:underline}.xpay-no-underline{text-decoration-line:none}.xpay-opacity-50{opacity:.5}.xpay-opacity-60{opacity:.6}.xpay-shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.xpay-outline-none{outline:2px solid transparent;outline-offset:2px}.xpay-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.xpay{*{scrollbar-width:thin;scrollbar-color:#252525 #000}*::-webkit-scrollbar{width:4px}*::-webkit-scrollbar-track{background:#000;border-radius:4px}*::-webkit-scrollbar-thumb{background-color:#252525;border-radius:4px}}.placeholder\:xpay-text-sm::placeholder{font-size:.875rem;line-height:1.25rem}.placeholder\:xpay-text-\[rgba\(255\,255\,255\,0\.2\)\]::placeholder{color:#fff3}.last\:xpay-mb-0:last-child{margin-bottom:0}.visited\:xpay-text-white:visited{color:#fff}.hover\:xpay-cursor-pointer:hover{cursor:pointer}.hover\:xpay-bg-\[rgb\(25\,25\,25\)\]:hover{--tw-bg-opacity: 1;background-color:rgb(25 25 25 / var(--tw-bg-opacity))}.hover\:xpay-text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.focus\:xpay-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:xpay-opacity-25:disabled{opacity:.25}@media (min-width: 640px){.sm\:xpay-w-\[190px\]{width:190px}.sm\:xpay-w-\[520px\]{width:520px}.sm\:xpay-w-x_desktop{width:600px}.sm\:xpay-flex-row{flex-direction:row}.sm\:xpay-gap-5{gap:1.25rem}.sm\:xpay-p-4{padding:1rem}.sm\:xpay-text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:xpay-text-base{font-size:1rem;line-height:1.5rem}.sm\:xpay-text-sm{font-size:.875rem;line-height:1.25rem}.sm\:xpay-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 768px){.md\:xpay-p-4{padding:1rem}}@media (prefers-color-scheme: dark){.dark\:xpay-text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { MINIMUM_DISPLAYED_TOKEN_AMOUNT } from "@src/constants";
|
|
2
|
-
import { Token, TokenBalances } from "@src/models";
|
|
3
|
-
import { weiToHumanReadable } from "@src/utils";
|
|
4
|
-
import BigNumber from "bignumber.js";
|
|
5
|
-
import { FC, useMemo } from "react";
|
|
6
|
-
|
|
7
|
-
interface Props {
|
|
8
|
-
srcToken: Token | undefined;
|
|
9
|
-
balances: TokenBalances | undefined;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const BalanceComponent: FC<Props> = ({ srcToken, balances }) => {
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
14
|
-
const balanceText = useMemo(() => {
|
|
15
|
-
if (!balances || !srcToken) return "0";
|
|
16
|
-
if (balances[srcToken.address]?.toString() === "0") return "0";
|
|
17
|
-
const fullHumanReadable = weiToHumanReadable({
|
|
18
|
-
amount: balances[srcToken.address]?.toString() || "0",
|
|
19
|
-
decimals: srcToken.decimals,
|
|
20
|
-
precisionFractionalPlaces: srcToken.decimals,
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
new BigNumber(fullHumanReadable).lt(
|
|
25
|
-
MINIMUM_DISPLAYED_TOKEN_AMOUNT.toString(),
|
|
26
|
-
)
|
|
27
|
-
)
|
|
28
|
-
return `<${MINIMUM_DISPLAYED_TOKEN_AMOUNT}`;
|
|
29
|
-
|
|
30
|
-
return weiToHumanReadable({
|
|
31
|
-
amount: balances[srcToken.address]?.toString() || "0",
|
|
32
|
-
decimals: srcToken.decimals,
|
|
33
|
-
precisionFractionalPlaces: 5,
|
|
34
|
-
});
|
|
35
|
-
}, [srcToken, balances]);
|
|
36
|
-
|
|
37
|
-
return (
|
|
38
|
-
<>
|
|
39
|
-
Balance:{" "}
|
|
40
|
-
{srcToken && balances
|
|
41
|
-
? weiToHumanReadable({
|
|
42
|
-
amount: balances[srcToken.address]?.toString() || "0",
|
|
43
|
-
decimals: srcToken.decimals,
|
|
44
|
-
precisionFractionalPlaces: 4,
|
|
45
|
-
})
|
|
46
|
-
: 0}
|
|
47
|
-
<span className="xpay-bg-gradient-to-r xpay-from-x_blue_light xpay-to-x_blue_dark xpay-bg-clip-text xpay-text-transparent">
|
|
48
|
-
Max
|
|
49
|
-
</span>
|
|
50
|
-
</>
|
|
51
|
-
);
|
|
52
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { FC, ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
interface Props {
|
|
4
|
-
children: ReactNode;
|
|
5
|
-
onClick?: () => void;
|
|
6
|
-
type?: "submit" | "reset" | "button";
|
|
7
|
-
disabled?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export const Button: FC<Props> = ({ children, onClick, type, disabled }) => {
|
|
10
|
-
return (
|
|
11
|
-
<button
|
|
12
|
-
className="xpay-text-white xpay-border-none xpay-rounded-2xl xpay-text-xl xpay-py-4 xpay-cursor-pointer xpay-w-full xpay-bg-gradient-to-r xpay-from-[#3681c6] xpay-to-[#2b4a9d] disabled:xpay-opacity-25"
|
|
13
|
-
onClick={onClick}
|
|
14
|
-
type={type}
|
|
15
|
-
disabled={disabled}
|
|
16
|
-
>
|
|
17
|
-
{children}
|
|
18
|
-
</button>
|
|
19
|
-
);
|
|
20
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
2
|
-
import { Chain } from "@src/models";
|
|
3
|
-
|
|
4
|
-
interface Props {
|
|
5
|
-
chain: Chain;
|
|
6
|
-
index: number;
|
|
7
|
-
length: number;
|
|
8
|
-
setSrcChain: (chain: Chain) => void;
|
|
9
|
-
setChainListShown: (x: boolean) => void;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const ChainListElement: FC<Props> = ({
|
|
13
|
-
chain,
|
|
14
|
-
setSrcChain,
|
|
15
|
-
setChainListShown,
|
|
16
|
-
index,
|
|
17
|
-
length,
|
|
18
|
-
}) => {
|
|
19
|
-
return (
|
|
20
|
-
<div key={`${chain.ecosystem}-${chain.chainId}`}>
|
|
21
|
-
<li
|
|
22
|
-
className="xpay-bg-transparent xpay-border-none xpay-flex xpay-gap-1 xpay-items-center xpay-cursor-pointer xpay-py-2 xpay-w-full"
|
|
23
|
-
onClick={() => {
|
|
24
|
-
setSrcChain(chain);
|
|
25
|
-
setChainListShown(false);
|
|
26
|
-
}}
|
|
27
|
-
>
|
|
28
|
-
<img width={12} height={12} src={chain.image} alt={chain.displayName} />
|
|
29
|
-
{chain.displayName}
|
|
30
|
-
</li>
|
|
31
|
-
{index !== length - 1 && (
|
|
32
|
-
<div className="xpay-h-px xpay-mx-2 xpay-bg-[rgba(255,255,255,0.15)]"></div>
|
|
33
|
-
)}
|
|
34
|
-
</div>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { FC, useEffect, useMemo, useState } from "react";
|
|
2
|
-
import { weiToHumanReadable } from "@src/utils";
|
|
3
|
-
import { Chain, Token, TokenPrices } from "@src/models";
|
|
4
|
-
import { UsdPrice } from "@src/components/TxConfigForm/UsdPrice";
|
|
5
|
-
import { getPrices } from "@src/services";
|
|
6
|
-
import { UnknownTokenLogo } from "../UnknownTokenLogo/UnknownTokenLogo";
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
amount: string;
|
|
10
|
-
token?: Token;
|
|
11
|
-
chain?: Chain;
|
|
12
|
-
type: "src" | "dst";
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const ConfirmationAmount: FC<Props> = ({
|
|
16
|
-
amount,
|
|
17
|
-
token,
|
|
18
|
-
chain,
|
|
19
|
-
type,
|
|
20
|
-
}) => {
|
|
21
|
-
const [prices, setPrices] = useState<TokenPrices>();
|
|
22
|
-
|
|
23
|
-
const amountReadable = useMemo(() => {
|
|
24
|
-
return weiToHumanReadable({
|
|
25
|
-
amount: amount || "0",
|
|
26
|
-
decimals: token?.decimals || 18,
|
|
27
|
-
precisionFractionalPlaces: 8,
|
|
28
|
-
});
|
|
29
|
-
}, [amount, token]);
|
|
30
|
-
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
if (chain) {
|
|
33
|
-
getPrices({ chainId: chain.chainId, currency: "USD" }).then((prices) =>
|
|
34
|
-
setPrices(prices),
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
}, [chain]);
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<div className="xpay-flex xpay-flex-col xpay-globalBorder xpay-rounded-xl xpay-bg-gradient-to-r xpay-from-x_blue_300_20 xpay-to-x_blue_400_20 xpay-p-4 xpay-relative">
|
|
41
|
-
<div className="xpay-flex xpay-justify-between">
|
|
42
|
-
<div className="xpay-flex xpay-flex-col xpay-gap-1">
|
|
43
|
-
<p className="xpay-text-white xpay-opacity-60 xpay-text-xs sm:xpay-text-sm xpay-font-medium">
|
|
44
|
-
{type === "src" ? "You pay" : "You receive"}
|
|
45
|
-
</p>
|
|
46
|
-
<div
|
|
47
|
-
className={`xpay-flex xpay-gap-2 xpay-items-center xpay-text-xl sm:xpay-text-3xl ${
|
|
48
|
-
type === "dst"
|
|
49
|
-
? "xpay-text-[rgba(54,129,198,1)]"
|
|
50
|
-
: "xpay-text-white"
|
|
51
|
-
}`}
|
|
52
|
-
>
|
|
53
|
-
{amountReadable}
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
<UsdPrice
|
|
57
|
-
prices={prices}
|
|
58
|
-
token={token}
|
|
59
|
-
amount={amountReadable}
|
|
60
|
-
loading={false}
|
|
61
|
-
/>
|
|
62
|
-
</div>
|
|
63
|
-
<div className="xpay-flex xpay-gap-2 xpay-text-sm xpay-justify-center xpay-items-center">
|
|
64
|
-
<div className="xpay-flex xpay-flex-col xpay-justify-center xpay-items-end xpay-gap-1">
|
|
65
|
-
<p className="xpay-text-base sm:xpay-text-xl">{token?.name}</p>
|
|
66
|
-
<div className="xpay-flex xpay-justify-center xpay-items-center xpay-gap-1">
|
|
67
|
-
<p className="xpay-text-[rgba(255,255,255,0.6)] xpay-text-xs xpay-text-right">
|
|
68
|
-
{chain?.displayName}
|
|
69
|
-
</p>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<div className="xpay-w-10 xpay-h-10">
|
|
74
|
-
{token?.image ? (
|
|
75
|
-
<img
|
|
76
|
-
className="xpay-w-10 xpay-h-10"
|
|
77
|
-
src={token?.image}
|
|
78
|
-
alt={token?.name}
|
|
79
|
-
/>
|
|
80
|
-
) : (
|
|
81
|
-
<UnknownTokenLogo
|
|
82
|
-
tokenName={"?"}
|
|
83
|
-
className="xpay-w-10 xpay-h-10"
|
|
84
|
-
/>
|
|
85
|
-
)}
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
);
|
|
91
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { CloseIcon, ErrorIcon } from "@src/components/icons";
|
|
2
|
-
import { parseWeb3Error } from "@src/utils";
|
|
3
|
-
import React from "react";
|
|
4
|
-
|
|
5
|
-
type Props = {
|
|
6
|
-
txError: string | null;
|
|
7
|
-
onClose: () => void;
|
|
8
|
-
};
|
|
9
|
-
export const ErrorView = ({ txError, onClose }: Props) => {
|
|
10
|
-
return (
|
|
11
|
-
<div>
|
|
12
|
-
<div className="xpay-flex xpay-w-full xpay-justify-end xpay-items-center xpay-mx-auto xpay-p-2">
|
|
13
|
-
<div className="xpay-cursor-pointer xpay-text-white" onClick={onClose}>
|
|
14
|
-
<CloseIcon />
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<div className="xpay-flex xpay-flex-col xpay-w-full xpay-justify-center xpay-items-center xpay-mx-auto xpay-p-2 xpay-gap-4">
|
|
19
|
-
<div>
|
|
20
|
-
<ErrorIcon />
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<div className="xpay-flex xpay-flex-col">
|
|
24
|
-
<div>
|
|
25
|
-
<p className="xpay-text-2xl xpay-font-bold xpay-leading-8 xpay-text-center xpay-text-white">
|
|
26
|
-
Transaction error!
|
|
27
|
-
</p>
|
|
28
|
-
</div>
|
|
29
|
-
<div>
|
|
30
|
-
<p className="xpay-text-sm xpay-text-center xpay-text-white xpay-opacity-50">
|
|
31
|
-
{parseWeb3Error(txError)}
|
|
32
|
-
</p>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
);
|
|
38
|
-
};
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ArrowRightIcon,
|
|
3
|
-
ArrowUpRightIcon,
|
|
4
|
-
CloseIcon,
|
|
5
|
-
SuccessIcon,
|
|
6
|
-
} from "@src/components/icons";
|
|
7
|
-
import { UnknownTokenLogo } from "@src/components/UnknownTokenLogo/UnknownTokenLogo";
|
|
8
|
-
import { weiToHumanReadable } from "@src/utils";
|
|
9
|
-
import { CCIP_EXPLORER } from "@src/constants";
|
|
10
|
-
import React, { useMemo } from "react";
|
|
11
|
-
import { Chain, Route, Token } from "@src/models";
|
|
12
|
-
|
|
13
|
-
type Props = {
|
|
14
|
-
onClose: () => void;
|
|
15
|
-
txSuccessHash?: string;
|
|
16
|
-
srcChain?: Chain;
|
|
17
|
-
dstChain?: Chain;
|
|
18
|
-
isExpressDelivery: boolean;
|
|
19
|
-
srcToken?: Token;
|
|
20
|
-
amount: string;
|
|
21
|
-
dstDisplayToken?: Token;
|
|
22
|
-
dstToken?: Token;
|
|
23
|
-
route?: Route;
|
|
24
|
-
supportedChains: Chain[];
|
|
25
|
-
};
|
|
26
|
-
export const SuccessView = ({
|
|
27
|
-
onClose,
|
|
28
|
-
srcChain,
|
|
29
|
-
dstChain,
|
|
30
|
-
isExpressDelivery,
|
|
31
|
-
srcToken,
|
|
32
|
-
amount,
|
|
33
|
-
dstDisplayToken,
|
|
34
|
-
dstToken,
|
|
35
|
-
route,
|
|
36
|
-
txSuccessHash,
|
|
37
|
-
supportedChains,
|
|
38
|
-
}: Props) => {
|
|
39
|
-
const dstTokenToDisplay = useMemo(() => {
|
|
40
|
-
return dstDisplayToken ? dstDisplayToken : dstToken;
|
|
41
|
-
}, [dstDisplayToken, dstToken]);
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<div>
|
|
45
|
-
<div className="xpay-flex xpay-w-full xpay-justify-end xpay-items-center xpay-mx-auto xpay-p-2">
|
|
46
|
-
<div className="xpay-cursor-pointer xpay-text-white" onClick={onClose}>
|
|
47
|
-
<CloseIcon />
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
|
|
51
|
-
<div className="xpay-flex xpay-flex-col xpay-w-full xpay-justify-center xpay-items-center xpay-mx-auto xpay-p-2 xpay-gap-4">
|
|
52
|
-
<div>
|
|
53
|
-
<SuccessIcon />
|
|
54
|
-
</div>
|
|
55
|
-
<div className="xpay-flex xpay-flex-col">
|
|
56
|
-
<div>
|
|
57
|
-
<p className="xpay-text-2xl xpay-font-bold xpay-leading-8 xpay-text-center xpay-text-white">
|
|
58
|
-
Transaction success!
|
|
59
|
-
</p>
|
|
60
|
-
</div>
|
|
61
|
-
{srcChain?.chainId !== dstChain?.chainId ? (
|
|
62
|
-
<div>
|
|
63
|
-
<p className="xpay-text-sm xpay-text-center xpay-text-white xpay-opacity-50">
|
|
64
|
-
Approximated time of delivery:{" "}
|
|
65
|
-
{isExpressDelivery ? "30 seconds" : "30 minutes"}
|
|
66
|
-
</p>
|
|
67
|
-
</div>
|
|
68
|
-
) : (
|
|
69
|
-
<></>
|
|
70
|
-
)}
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<div className="xpay-flex xpay-gap-4 xpay-items-center">
|
|
74
|
-
<div className="xpay-flex xpay-gap-2">
|
|
75
|
-
<div className="xpay-w-10 xpay-h-10">
|
|
76
|
-
{srcToken?.image ? (
|
|
77
|
-
<img
|
|
78
|
-
className="xpay-w-10 xpay-h-10"
|
|
79
|
-
src={srcToken?.image}
|
|
80
|
-
alt={srcToken?.name}
|
|
81
|
-
/>
|
|
82
|
-
) : (
|
|
83
|
-
<UnknownTokenLogo
|
|
84
|
-
tokenName={"?"}
|
|
85
|
-
className="xpay-w-10 xpay-h-10"
|
|
86
|
-
/>
|
|
87
|
-
)}
|
|
88
|
-
</div>
|
|
89
|
-
<div className="xpay-flex xpay-flex-col xpay-items-start">
|
|
90
|
-
<div className="xpay-flex">{`${amount} ${srcToken?.symbol}`}</div>
|
|
91
|
-
<div className="xpay-text-sm xpay-text-center xpay-text-white xpay-opacity-50">
|
|
92
|
-
{srcChain?.displayName}
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
|
|
97
|
-
<div className="xpay-w-3.5 xpay-h-3.5">
|
|
98
|
-
<ArrowRightIcon />
|
|
99
|
-
</div>
|
|
100
|
-
|
|
101
|
-
<div className="xpay-flex xpay-gap-2">
|
|
102
|
-
<div className="xpay-w-10 xpay-h-10">
|
|
103
|
-
{dstTokenToDisplay?.image ? (
|
|
104
|
-
<img
|
|
105
|
-
className="xpay-w-10 xpay-h-10"
|
|
106
|
-
src={dstTokenToDisplay?.image}
|
|
107
|
-
alt={dstTokenToDisplay?.name}
|
|
108
|
-
/>
|
|
109
|
-
) : (
|
|
110
|
-
<UnknownTokenLogo
|
|
111
|
-
tokenName={"?"}
|
|
112
|
-
className="xpay-w-10 xpay-h-10"
|
|
113
|
-
/>
|
|
114
|
-
)}
|
|
115
|
-
</div>
|
|
116
|
-
<div className="xpay-flex xpay-flex-col xpay-items-start">
|
|
117
|
-
<div className="xpay-flex">
|
|
118
|
-
{weiToHumanReadable({
|
|
119
|
-
amount: route?.estAmountOut || "0",
|
|
120
|
-
decimals: dstTokenToDisplay?.decimals || 18,
|
|
121
|
-
precisionFractionalPlaces: 4,
|
|
122
|
-
})}{" "}
|
|
123
|
-
{dstTokenToDisplay?.symbol}
|
|
124
|
-
</div>
|
|
125
|
-
<div className="xpay-text-sm xpay-text-center xpay-text-white xpay-opacity-50">
|
|
126
|
-
{dstChain?.displayName}
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
|
|
132
|
-
<div>
|
|
133
|
-
<a
|
|
134
|
-
href={
|
|
135
|
-
srcChain?.chainId !== dstChain?.chainId
|
|
136
|
-
? `${CCIP_EXPLORER}/tx/${txSuccessHash}`
|
|
137
|
-
: `${
|
|
138
|
-
supportedChains.find(
|
|
139
|
-
(chain) => chain.chainId === srcChain?.chainId,
|
|
140
|
-
)?.transactionExplorer
|
|
141
|
-
}/${txSuccessHash}`
|
|
142
|
-
}
|
|
143
|
-
target="_blank"
|
|
144
|
-
rel="noreferrer"
|
|
145
|
-
className="xpay-flex xpay-items-center xpay-gap-2 xpay-font-bold xpay-no-underline xpay-cursor-pointer xpay-text-center"
|
|
146
|
-
aria-label="Show the transaction in the chain explorer"
|
|
147
|
-
>
|
|
148
|
-
<p className="xpay-bg-gradient-to-r xpay-from-x_blue_light xpay-to-x_blue_dark xpay-bg-clip-text xpay-text-transparent xpay-underline">
|
|
149
|
-
View details on Explorer
|
|
150
|
-
</p>
|
|
151
|
-
<div className="xpay-w-3.5 xpay-h-3.5 xpay-bg-gradient-to-r xpay-text-x_blue_dark">
|
|
152
|
-
<ArrowUpRightIcon />
|
|
153
|
-
</div>
|
|
154
|
-
</a>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
</div>
|
|
158
|
-
);
|
|
159
|
-
};
|