@ton/appkit-react 1.0.0-alpha.1 → 1.0.0-alpha.2
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/esm/components/shared/amount-preview/amount-preview.js +17 -0
- package/dist/esm/components/shared/amount-preview/amount-preview.js.map +1 -0
- package/dist/esm/components/shared/amount-preview/amount-preview.module.css +40 -0
- package/dist/esm/components/shared/amount-preview/index.js +9 -0
- package/dist/esm/components/shared/amount-preview/index.js.map +1 -0
- package/dist/esm/components/shared/flow-preview/flow-preview.js +24 -0
- package/dist/esm/components/shared/flow-preview/flow-preview.js.map +1 -0
- package/dist/esm/components/shared/flow-preview/flow-preview.module.css +37 -0
- package/dist/esm/components/shared/flow-preview/index.js +9 -0
- package/dist/esm/components/shared/flow-preview/index.js.map +1 -0
- package/dist/esm/components/ui/logo/logo.module.css +1 -3
- package/dist/esm/features/staking/components/staking-confirm-modal/index.js +9 -0
- package/dist/esm/features/staking/components/staking-confirm-modal/index.js.map +1 -0
- package/dist/esm/features/staking/components/staking-confirm-modal/staking-confirm-modal.js +46 -0
- package/dist/esm/features/staking/components/staking-confirm-modal/staking-confirm-modal.js.map +1 -0
- package/dist/esm/features/staking/components/staking-confirm-modal/staking-confirm-modal.module.css +11 -0
- package/dist/esm/features/staking/components/staking-widget-provider/staking-widget-provider.js +27 -4
- package/dist/esm/features/staking/components/staking-widget-provider/staking-widget-provider.js.map +1 -1
- package/dist/esm/features/staking/components/staking-widget-provider/use-staking-validation.js +12 -3
- package/dist/esm/features/staking/components/staking-widget-provider/use-staking-validation.js.map +1 -1
- package/dist/esm/features/staking/components/staking-widget-ui/staking-widget-ui.js +16 -4
- package/dist/esm/features/staking/components/staking-widget-ui/staking-widget-ui.js.map +1 -1
- package/dist/esm/features/staking/hooks/use-build-stake-transaction.js +2 -2
- package/dist/esm/features/staking/hooks/use-build-stake-transaction.js.map +1 -1
- package/dist/esm/features/staking/utils/map-staking-error.js +6 -4
- package/dist/esm/features/staking/utils/map-staking-error.js.map +1 -1
- package/dist/esm/features/swap/components/swap-confirm-modal/index.js +9 -0
- package/dist/esm/features/swap/components/swap-confirm-modal/index.js.map +1 -0
- package/dist/esm/features/swap/components/swap-confirm-modal/swap-confirm-modal.js +12 -0
- package/dist/esm/features/swap/components/swap-confirm-modal/swap-confirm-modal.js.map +1 -0
- package/dist/esm/features/swap/components/swap-confirm-modal/swap-confirm-modal.module.css +7 -0
- package/dist/esm/features/swap/components/swap-widget-provider/swap-widget-provider.js +28 -6
- package/dist/esm/features/swap/components/swap-widget-provider/swap-widget-provider.js.map +1 -1
- package/dist/esm/features/swap/components/swap-widget-provider/use-swap-validation.js +12 -3
- package/dist/esm/features/swap/components/swap-widget-provider/use-swap-validation.js.map +1 -1
- package/dist/esm/features/swap/components/swap-widget-ui/swap-widget-ui.js +16 -4
- package/dist/esm/features/swap/components/swap-widget-ui/swap-widget-ui.js.map +1 -1
- package/dist/esm/features/swap/utils/map-swap-error.js +5 -3
- package/dist/esm/features/swap/utils/map-swap-error.js.map +1 -1
- package/dist/esm/locales/en.js +9 -0
- package/dist/esm/locales/en.js.map +1 -1
- package/dist/esm/styles/index.css +2 -2
- package/dist/types/components/shared/amount-preview/amount-preview.d.ts +24 -0
- package/dist/types/components/shared/amount-preview/amount-preview.d.ts.map +1 -0
- package/dist/types/components/shared/amount-preview/index.d.ts +9 -0
- package/dist/types/components/shared/amount-preview/index.d.ts.map +1 -0
- package/dist/types/components/shared/flow-preview/flow-preview.d.ts +18 -0
- package/dist/types/components/shared/flow-preview/flow-preview.d.ts.map +1 -0
- package/dist/types/components/shared/flow-preview/index.d.ts +9 -0
- package/dist/types/components/shared/flow-preview/index.d.ts.map +1 -0
- package/dist/types/features/staking/components/staking-confirm-modal/index.d.ts +9 -0
- package/dist/types/features/staking/components/staking-confirm-modal/index.d.ts.map +1 -0
- package/dist/types/features/staking/components/staking-confirm-modal/staking-confirm-modal.d.ts +23 -0
- package/dist/types/features/staking/components/staking-confirm-modal/staking-confirm-modal.d.ts.map +1 -0
- package/dist/types/features/staking/components/staking-widget-provider/staking-widget-provider.d.ts.map +1 -1
- package/dist/types/features/staking/components/staking-widget-provider/use-staking-validation.d.ts +3 -1
- package/dist/types/features/staking/components/staking-widget-provider/use-staking-validation.d.ts.map +1 -1
- package/dist/types/features/staking/components/staking-widget-ui/staking-widget-ui.d.ts.map +1 -1
- package/dist/types/features/staking/hooks/use-build-stake-transaction.d.ts +3 -2
- package/dist/types/features/staking/hooks/use-build-stake-transaction.d.ts.map +1 -1
- package/dist/types/features/staking/utils/map-staking-error.d.ts +5 -3
- package/dist/types/features/staking/utils/map-staking-error.d.ts.map +1 -1
- package/dist/types/features/swap/components/swap-confirm-modal/index.d.ts +9 -0
- package/dist/types/features/swap/components/swap-confirm-modal/index.d.ts.map +1 -0
- package/dist/types/features/swap/components/swap-confirm-modal/swap-confirm-modal.d.ts +26 -0
- package/dist/types/features/swap/components/swap-confirm-modal/swap-confirm-modal.d.ts.map +1 -0
- package/dist/types/features/swap/components/swap-widget-provider/swap-widget-provider.d.ts.map +1 -1
- package/dist/types/features/swap/components/swap-widget-provider/use-swap-validation.d.ts +4 -1
- package/dist/types/features/swap/components/swap-widget-provider/use-swap-validation.d.ts.map +1 -1
- package/dist/types/features/swap/components/swap-widget-ui/swap-widget-ui.d.ts.map +1 -1
- package/dist/types/features/swap/utils/map-swap-error.d.ts +4 -2
- package/dist/types/features/swap/utils/map-swap-error.d.ts.map +1 -1
- package/dist/types/libs/i18n.d.ts +9 -0
- package/dist/types/libs/i18n.d.ts.map +1 -1
- package/dist/types/locales/en.d.ts +9 -0
- package/dist/types/locales/en.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/components/shared/amount-preview/amount-preview.tsx +74 -0
- package/src/components/shared/amount-preview/index.ts +9 -0
- package/src/components/shared/flow-preview/flow-preview.tsx +64 -0
- package/src/components/shared/flow-preview/index.ts +9 -0
- package/src/features/staking/components/staking-confirm-modal/index.ts +9 -0
- package/src/features/staking/components/staking-confirm-modal/staking-confirm-modal.tsx +121 -0
- package/src/features/staking/components/staking-widget-provider/staking-widget-provider.tsx +39 -4
- package/src/features/staking/components/staking-widget-provider/use-staking-validation.ts +14 -2
- package/src/features/staking/components/staking-widget-ui/staking-widget-ui.tsx +28 -3
- package/src/features/staking/hooks/use-build-stake-transaction.ts +7 -2
- package/src/features/staking/utils/map-staking-error.ts +6 -4
- package/src/features/swap/components/swap-confirm-modal/index.ts +9 -0
- package/src/features/swap/components/swap-confirm-modal/swap-confirm-modal.tsx +75 -0
- package/src/features/swap/components/swap-widget-provider/swap-widget-provider.tsx +40 -6
- package/src/features/swap/components/swap-widget-provider/use-swap-validation.ts +17 -2
- package/src/features/swap/components/swap-widget-ui/swap-widget-ui.tsx +30 -3
- package/src/features/swap/utils/map-swap-error.ts +5 -3
- package/src/locales/en.ts +9 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { calcFiatValue, formatLargeValue } from '@ton/appkit';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { Logo } from '../../ui/logo';
|
|
5
|
+
import { TonIconCircle } from '../../ui/icons';
|
|
6
|
+
import { getDisplayAmount } from '../../../features/swap/utils/get-display-amount';
|
|
7
|
+
import styles from './amount-preview.module.css';
|
|
8
|
+
const formatFiatDelta = (delta) => {
|
|
9
|
+
const sign = delta > 0 ? '+' : '';
|
|
10
|
+
return `(${sign}${(delta * 100).toFixed(2)}%)`;
|
|
11
|
+
};
|
|
12
|
+
export const AmountPreview = ({ amount, token, fiatSymbol = '$', fiatDelta, className, ...props }) => {
|
|
13
|
+
const displayAmount = getDisplayAmount(amount, token?.decimals);
|
|
14
|
+
const fiatValue = token?.rate ? formatLargeValue(calcFiatValue(amount || '0', token.rate), 2, 2) : null;
|
|
15
|
+
return (_jsxs("div", { className: clsx(styles.container, className), ...props, children: [_jsxs("div", { className: styles.amountRow, children: [_jsx("span", { className: styles.amount, children: displayAmount }), token && (_jsxs("span", { className: styles.tokenTag, children: [token.address === 'ton' ? (_jsx(TonIconCircle, { size: 24 })) : (_jsx(Logo, { size: 24, src: token.logo, fallback: token.symbol?.[0] ?? '?', alt: token.symbol })), _jsx("span", { className: styles.symbol, children: token.symbol })] }))] }), fiatValue !== null && (_jsxs("div", { className: styles.fiat, children: [_jsxs("span", { children: [fiatSymbol, " ", fiatValue] }), fiatDelta !== undefined && _jsx("span", { className: styles.fiatDelta, children: formatFiatDelta(fiatDelta) })] }))] }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=amount-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount-preview.js","sourceRoot":"","sources":["../../../../../src/components/shared/amount-preview/amount-preview.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,MAAM,MAAM,6BAA6B,CAAC;AAgBjD,MAAM,eAAe,GAAG,CAAC,KAAa,EAAU,EAAE;IAC9C,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,OAAO,IAAI,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EAClD,MAAM,EACN,KAAK,EACL,UAAU,GAAG,GAAG,EAChB,SAAS,EACT,SAAS,EACT,GAAG,KAAK,EACX,EAAE,EAAE;IACD,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExG,OAAO,CACH,eAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,KAAM,KAAK,aACxD,eAAK,SAAS,EAAE,MAAM,CAAC,SAAS,aAC5B,eAAM,SAAS,EAAE,MAAM,CAAC,MAAM,YAAG,aAAa,GAAQ,EACrD,KAAK,IAAI,CACN,gBAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,aAC3B,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CACvB,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,GAAI,CAC9B,CAAC,CAAC,CAAC,CACA,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,GAAI,CAC7F,EACD,eAAM,SAAS,EAAE,MAAM,CAAC,MAAM,YAAG,KAAK,CAAC,MAAM,GAAQ,IAClD,CACV,IACC,EACL,SAAS,KAAK,IAAI,IAAI,CACnB,eAAK,SAAS,EAAE,MAAM,CAAC,IAAI,aACvB,2BACK,UAAU,OAAG,SAAS,IACpB,EACN,SAAS,KAAK,SAAS,IAAI,eAAM,SAAS,EAAE,MAAM,CAAC,SAAS,YAAG,eAAe,CAAC,SAAS,CAAC,GAAQ,IAChG,CACT,IACC,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: 4px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.amountRow {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: 8px;
|
|
12
|
+
color: var(--ta-color-text);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.amount {
|
|
16
|
+
composes: display from "../../../styles/typography.module.css";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.tokenTag {
|
|
20
|
+
display: inline-flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
gap: 6px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.symbol {
|
|
26
|
+
composes: bodySemibold from "../../../styles/typography.module.css";
|
|
27
|
+
color: var(--ta-color-text);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.fiat {
|
|
31
|
+
composes: bodyRegular from "../../../styles/typography.module.css";
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: 4px;
|
|
35
|
+
color: var(--ta-color-text-secondary);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.fiatDelta {
|
|
39
|
+
color: var(--ta-color-text-tertiary);
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/shared/amount-preview/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { calcFiatValue } from '@ton/appkit';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { ChevronDownIcon } from '../../ui/icons';
|
|
5
|
+
import { AmountPreview } from '../amount-preview';
|
|
6
|
+
import styles from './flow-preview.module.css';
|
|
7
|
+
/**
|
|
8
|
+
* Returns the relative fiat delta between paying `fromFiat` and receiving `toFiat`,
|
|
9
|
+
* or `undefined` when either side lacks fiat data.
|
|
10
|
+
*/
|
|
11
|
+
const calcFiatDelta = (fromFiat, toFiat) => {
|
|
12
|
+
const from = parseFloat(fromFiat);
|
|
13
|
+
const to = parseFloat(toFiat);
|
|
14
|
+
if (!from || !to)
|
|
15
|
+
return undefined;
|
|
16
|
+
return (to - from) / from;
|
|
17
|
+
};
|
|
18
|
+
export const FlowPreview = ({ fromAmount, toAmount, fromToken, toToken, fiatSymbol = '$', className, ...props }) => {
|
|
19
|
+
const fromFiat = calcFiatValue(fromAmount || '0', fromToken?.rate);
|
|
20
|
+
const toFiat = calcFiatValue(toAmount || '0', toToken?.rate);
|
|
21
|
+
const fiatDelta = calcFiatDelta(fromFiat, toFiat);
|
|
22
|
+
return (_jsxs("div", { className: clsx(styles.container, className), ...props, children: [_jsx(AmountPreview, { amount: fromAmount, token: fromToken, fiatSymbol: fiatSymbol }), _jsxs("div", { className: styles.separator, children: [_jsx("span", { className: styles.separatorLine }), _jsx("span", { className: styles.arrowBadge, children: _jsx(ChevronDownIcon, { size: 16 }) })] }), _jsx(AmountPreview, { amount: toAmount, token: toToken, fiatSymbol: fiatSymbol, fiatDelta: fiatDelta })] }));
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=flow-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-preview.js","sourceRoot":"","sources":["../../../../../src/components/shared/flow-preview/flow-preview.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAU/C;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAsB,EAAE;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACnC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,EAC9C,UAAU,EACV,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,GAAG,GAAG,EAChB,SAAS,EACT,GAAG,KAAK,EACX,EAAE,EAAE;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElD,OAAO,CACH,eAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,KAAM,KAAK,aACxD,KAAC,aAAa,IAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAI,EAE/E,eAAK,SAAS,EAAE,MAAM,CAAC,SAAS,aAC5B,eAAM,SAAS,EAAE,MAAM,CAAC,aAAa,GAAI,EACzC,eAAM,SAAS,EAAE,MAAM,CAAC,UAAU,YAC9B,KAAC,eAAe,IAAC,IAAI,EAAE,EAAE,GAAI,GAC1B,IACL,EAEN,KAAC,aAAa,IAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAI,IAC/F,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
align-items: stretch;
|
|
5
|
+
gap: 12px;
|
|
6
|
+
padding: 8px 0 4px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.separator {
|
|
10
|
+
position: relative;
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: center;
|
|
14
|
+
height: 32px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.separatorLine {
|
|
18
|
+
position: absolute;
|
|
19
|
+
left: 0;
|
|
20
|
+
right: 0;
|
|
21
|
+
top: 50%;
|
|
22
|
+
height: 1px;
|
|
23
|
+
background-color: var(--ta-color-background-tertiary);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.arrowBadge {
|
|
27
|
+
position: relative;
|
|
28
|
+
display: inline-flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
justify-content: center;
|
|
31
|
+
width: 32px;
|
|
32
|
+
height: 32px;
|
|
33
|
+
border-radius: 50%;
|
|
34
|
+
border: 1px solid var(--ta-color-background-tertiary);
|
|
35
|
+
background-color: var(--ta-color-background);
|
|
36
|
+
color: var(--ta-color-text-tertiary);
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/shared/flow-preview/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,gBAAgB,CAAC"}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
.logoFallback {
|
|
22
|
+
composes: labelMedium from "../../../styles/typography.module.css";
|
|
22
23
|
width: 100%;
|
|
23
24
|
height: 100%;
|
|
24
25
|
display: flex;
|
|
@@ -26,7 +27,4 @@
|
|
|
26
27
|
justify-content: center;
|
|
27
28
|
background-color: var(--ta-color-background-tertiary);
|
|
28
29
|
color: var(--ta-color-text);
|
|
29
|
-
font-size: 15px;
|
|
30
|
-
line-height: 1;
|
|
31
|
-
font-weight: 500;
|
|
32
30
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-confirm-modal/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Modal } from '../../../../components/ui/modal/modal';
|
|
3
|
+
import { Button } from '../../../../components/ui/button';
|
|
4
|
+
import { AmountPreview } from '../../../../components/shared/amount-preview';
|
|
5
|
+
import { FlowPreview } from '../../../../components/shared/flow-preview';
|
|
6
|
+
import { useJettonInfo } from '../../../jettons';
|
|
7
|
+
import { useI18n } from '../../../settings/hooks/use-i18n';
|
|
8
|
+
import { StakingInfo } from '../staking-info';
|
|
9
|
+
import styles from './staking-confirm-modal.module.css';
|
|
10
|
+
/**
|
|
11
|
+
* Adapter from staking-domain token shape (`StakingTokenInfo`) to the shared
|
|
12
|
+
* `AppkitUIToken` shape consumed by AmountPreview/FlowPreview. `name` is taken
|
|
13
|
+
* from the resolved jetton metadata when available, falling back to ticker.
|
|
14
|
+
*/
|
|
15
|
+
const toUIToken = (token, jettonInfo, network) => {
|
|
16
|
+
if (!token || !network)
|
|
17
|
+
return undefined;
|
|
18
|
+
return {
|
|
19
|
+
symbol: token.ticker,
|
|
20
|
+
name: jettonInfo?.name ?? token.ticker,
|
|
21
|
+
decimals: token.decimals,
|
|
22
|
+
address: token.address,
|
|
23
|
+
logo: token.address === 'ton' ? undefined : jettonInfo?.image,
|
|
24
|
+
network,
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export const StakingConfirmModal = ({ open, onClose, onConfirm, direction, network, quote, providerInfo, providerMetadata, isProviderInfoLoading, isQuoteLoading, }) => {
|
|
28
|
+
const { t } = useI18n();
|
|
29
|
+
const stakeAddress = providerMetadata?.stakeToken.address;
|
|
30
|
+
const receiveAddress = providerMetadata?.receiveToken?.address;
|
|
31
|
+
const { data: stakeJettonInfo } = useJettonInfo({
|
|
32
|
+
address: stakeAddress,
|
|
33
|
+
query: { enabled: !!stakeAddress && stakeAddress !== 'ton' },
|
|
34
|
+
});
|
|
35
|
+
const { data: receiveJettonInfo } = useJettonInfo({
|
|
36
|
+
address: receiveAddress,
|
|
37
|
+
query: { enabled: !!receiveAddress && receiveAddress !== 'ton' },
|
|
38
|
+
});
|
|
39
|
+
const stakeToken = toUIToken(providerMetadata?.stakeToken, stakeJettonInfo, network);
|
|
40
|
+
const receiveToken = toUIToken(providerMetadata?.receiveToken, receiveJettonInfo, network);
|
|
41
|
+
const title = direction === 'stake' ? t('staking.confirmStakingTitle') : t('staking.confirmUnstakingTitle');
|
|
42
|
+
const amountIn = quote?.amountIn ?? '0';
|
|
43
|
+
const amountOut = quote?.amountOut ?? '0';
|
|
44
|
+
return (_jsxs(Modal, { open: open, onOpenChange: (isOpen) => !isOpen && onClose(), title: title, children: [direction === 'stake' ? (_jsx(AmountPreview, { className: styles.singleAmount, amount: amountIn, token: stakeToken })) : (_jsx(FlowPreview, { fromAmount: amountIn, toAmount: amountOut, fromToken: receiveToken, toToken: stakeToken })), _jsx(StakingInfo, { className: styles.info, quote: quote, isQuoteLoading: isQuoteLoading, providerInfo: providerInfo, providerMetadata: providerMetadata, isProviderInfoLoading: isProviderInfoLoading, direction: direction }), _jsx(Button, { className: styles.confirmButton, variant: "fill", size: "l", fullWidth: true, onClick: onConfirm, children: t('staking.confirm') })] }));
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=staking-confirm-modal.js.map
|
package/dist/esm/features/staking/components/staking-confirm-modal/staking-confirm-modal.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staking-confirm-modal.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-confirm-modal/staking-confirm-modal.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/features/staking/components/staking-widget-provider/staking-widget-provider.js
CHANGED
|
@@ -6,7 +6,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*
|
|
8
8
|
*/
|
|
9
|
-
import { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
|
9
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
|
10
10
|
import { calcMaxSpendable, formatUnits, getTonShortfall, setDefaultStakingProvider, validateNumericString, } from '@ton/appkit';
|
|
11
11
|
import { UnstakeMode } from '@ton/appkit';
|
|
12
12
|
import { useNetwork } from '../../../network';
|
|
@@ -105,8 +105,27 @@ export const StakingWidgetProvider = ({ children, network: networkProp }) => {
|
|
|
105
105
|
network,
|
|
106
106
|
query: { refetchInterval: 5000 },
|
|
107
107
|
});
|
|
108
|
-
const { mutateAsync: buildTransaction } = useBuildStakeTransaction();
|
|
109
|
-
const { mutateAsync: sendTransaction, isPending:
|
|
108
|
+
const { mutateAsync: buildTransaction, isPending: isBuildingTransaction, error: buildError, reset: resetBuild, } = useBuildStakeTransaction({ mutation: { networkMode: 'always' } });
|
|
109
|
+
const { mutateAsync: sendTransaction, isPending: isSendingPending, error: sendMutationError, reset: resetSend, } = useSendTransaction({ mutation: { networkMode: 'always' } });
|
|
110
|
+
const isSendingTransaction = isBuildingTransaction || isSendingPending;
|
|
111
|
+
const sendError = sendMutationError ?? buildError;
|
|
112
|
+
const resetSendError = useCallback(() => {
|
|
113
|
+
resetBuild();
|
|
114
|
+
resetSend();
|
|
115
|
+
}, [resetBuild, resetSend]);
|
|
116
|
+
// Drop the previous send error when the user changes anything that invalidates it —
|
|
117
|
+
// the next attempt is conceptually a new stake, no need to keep the old message on screen.
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
resetSendError();
|
|
120
|
+
}, [direction, amount, isReversed, resetSendError]);
|
|
121
|
+
// Auto-clear the send error after a short delay so a stale failure doesn't linger in the
|
|
122
|
+
// submit button — the user is expected to act on it within seconds or move on.
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
if (!sendError)
|
|
125
|
+
return;
|
|
126
|
+
const id = setTimeout(resetSendError, 5000);
|
|
127
|
+
return () => clearTimeout(id);
|
|
128
|
+
}, [sendError, resetSendError]);
|
|
110
129
|
const amountDecimals = useMemo(() => {
|
|
111
130
|
const unstakeDecimals = isReversed
|
|
112
131
|
? providerMetadata?.stakeToken.decimals
|
|
@@ -124,7 +143,10 @@ export const StakingWidgetProvider = ({ children, network: networkProp }) => {
|
|
|
124
143
|
isReversed,
|
|
125
144
|
network,
|
|
126
145
|
}, 500);
|
|
127
|
-
const { data: quote, isFetching: isQuoteLoading, error: quoteError, } = useStakingQuote({
|
|
146
|
+
const { data: quote, isFetching: isQuoteLoading, error: quoteError, } = useStakingQuote({
|
|
147
|
+
...quoteParamsDebounced,
|
|
148
|
+
query: { enabled: isNetworkSupported, networkMode: 'always', retry: false, gcTime: 0 },
|
|
149
|
+
});
|
|
128
150
|
const reversedAmount = useMemo(() => {
|
|
129
151
|
if (direction === 'unstake' && isReversed)
|
|
130
152
|
return quote?.amountIn || '0';
|
|
@@ -194,6 +216,7 @@ export const StakingWidgetProvider = ({ children, network: networkProp }) => {
|
|
|
194
216
|
amountDebounced: quoteParamsDebounced.amount || '',
|
|
195
217
|
balance,
|
|
196
218
|
quoteError,
|
|
219
|
+
sendError,
|
|
197
220
|
direction,
|
|
198
221
|
stakedBalance: stakedBalanceData?.stakedBalance,
|
|
199
222
|
quote,
|
package/dist/esm/features/staking/components/staking-widget-provider/staking-widget-provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staking-widget-provider.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-widget-provider/staking-widget-provider.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"staking-widget-provider.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-widget-provider/staking-widget-provider.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/features/staking/components/staking-widget-provider/use-staking-validation.js
CHANGED
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
import { useMemo } from 'react';
|
|
9
9
|
import { hasTooManyDecimals, isAmountExceedingBalance } from '../../../../utils/validate-amount';
|
|
10
10
|
import { mapStakingError } from '../../utils/map-staking-error';
|
|
11
|
-
export const useStakingValidation = ({ amount, amountDebounced, balance, quote, quoteError, direction, amountDecimals, isReversed, stakedBalance, isNetworkSupported, }) => {
|
|
12
|
-
|
|
11
|
+
export const useStakingValidation = ({ amount, amountDebounced, balance, quote, quoteError, sendError, direction, amountDecimals, isReversed, stakedBalance, isNetworkSupported, }) => {
|
|
12
|
+
// Input-side validation that blocks submission. `sendError` is intentionally NOT considered
|
|
13
|
+
// here — a previous failed attempt shouldn't lock the button against a retry.
|
|
14
|
+
const blockingError = useMemo(() => {
|
|
13
15
|
if (!isNetworkSupported)
|
|
14
16
|
return 'defi.unsupportedNetwork';
|
|
15
17
|
if ((parseFloat(amount) || 0) <= 0)
|
|
@@ -42,7 +44,14 @@ export const useStakingValidation = ({ amount, amountDebounced, balance, quote,
|
|
|
42
44
|
quote,
|
|
43
45
|
amountDecimals,
|
|
44
46
|
]);
|
|
45
|
-
|
|
47
|
+
// The user-visible error: build/send failure (most recent user action) wins over background
|
|
48
|
+
// validation noise; falls back to validation when no send error is active.
|
|
49
|
+
const error = useMemo(() => {
|
|
50
|
+
if (sendError)
|
|
51
|
+
return mapStakingError(sendError, 'staking.sendFailed');
|
|
52
|
+
return blockingError;
|
|
53
|
+
}, [sendError, blockingError]);
|
|
54
|
+
const canSubmit = (parseFloat(amount) || 0) > 0 && blockingError === null && quote !== undefined;
|
|
46
55
|
return { error, canSubmit };
|
|
47
56
|
};
|
|
48
57
|
//# sourceMappingURL=use-staking-validation.js.map
|
package/dist/esm/features/staking/components/staking-widget-provider/use-staking-validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-staking-validation.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-widget-provider/use-staking-validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"use-staking-validation.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-widget-provider/use-staking-validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAiBhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACjC,MAAM,EACN,eAAe,EACf,OAAO,EACP,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,kBAAkB,GACQ,EAAE,EAAE;IAC9B,4FAA4F;IAC5F,8EAA8E;IAC9E,MAAM,aAAa,GAAkB,OAAO,CAAC,GAAG,EAAE;QAC9C,IAAI,CAAC,kBAAkB;YAAE,OAAO,yBAAyB,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAEhD,IAAI,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC;YAAE,OAAO,yBAAyB,CAAC;QAEjF,IAAI,SAAS,KAAK,OAAO,IAAI,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YACrE,OAAO,6BAA6B,CAAC;QACzC,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,qFAAqF;YACrF,wDAAwD;YACxD,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7D,IAAI,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC1D,OAAO,6BAA6B,CAAC;YACzC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;QAEtE,OAAO,IAAI,CAAC;IAChB,CAAC,EAAE;QACC,kBAAkB;QAClB,MAAM;QACN,OAAO;QACP,UAAU;QACV,eAAe;QACf,SAAS;QACT,aAAa;QACb,UAAU;QACV,KAAK;QACL,cAAc;KACjB,CAAC,CAAC;IAEH,4FAA4F;IAC5F,2EAA2E;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAgB,GAAG,EAAE;QACtC,IAAI,SAAS;YAAE,OAAO,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QACvE,OAAO,aAAa,CAAC;IACzB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,aAAa,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;IAEjG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -6,12 +6,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*
|
|
8
8
|
*/
|
|
9
|
-
import { useMemo, useState } from 'react';
|
|
9
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
10
10
|
import clsx from 'clsx';
|
|
11
11
|
import { CenteredAmountInput } from '../../../../components/ui/centered-amount-input';
|
|
12
12
|
import { Tabs, TabsList, TabsTrigger, TabsContent } from '../../../../components/ui/tabs';
|
|
13
13
|
import { useI18n } from '../../../settings/hooks/use-i18n';
|
|
14
14
|
import { StakingBalanceBlock } from '../staking-balance-block';
|
|
15
|
+
import { StakingConfirmModal } from '../staking-confirm-modal';
|
|
15
16
|
import { StakingInfo } from '../staking-info';
|
|
16
17
|
import { SelectUnstakeMode } from '../select-unstake-mode';
|
|
17
18
|
import { StakingSettingsModal } from '../staking-settings-modal';
|
|
@@ -23,14 +24,25 @@ import { SettingsButton } from '../../../../components/shared/settings-button';
|
|
|
23
24
|
export const StakingWidgetUI = ({ amount, canSubmit, isQuoteLoading, error, providerInfo, providerMetadata, stakingProvider, stakingProviders, setStakingProviderId, network, isProviderInfoLoading, setAmount, direction, quote, sendTransaction, isSendingTransaction, unstakeMode, setUnstakeMode, stakedBalance, isStakedBalanceLoading, onChangeDirection, isReversed, toggleReversed, reversedAmount, onMaxClick, balance, isBalanceLoading, isLowBalanceWarningOpen, lowBalanceMode, lowBalanceRequiredTon, onLowBalanceChange, onLowBalanceCancel, className, ...props }) => {
|
|
24
25
|
const { t } = useI18n();
|
|
25
26
|
const [isSettingsOpen, setIsSettingsOpen] = useState(false);
|
|
27
|
+
const [isConfirmOpen, setIsConfirmOpen] = useState(false);
|
|
26
28
|
const receiveToken = providerMetadata?.receiveToken;
|
|
27
29
|
const stakeToken = providerMetadata?.stakeToken;
|
|
28
30
|
const buttonText = useMemo(() => {
|
|
31
|
+
if (isSendingTransaction || isQuoteLoading)
|
|
32
|
+
return t('staking.loading');
|
|
29
33
|
if (error)
|
|
30
34
|
return t(error);
|
|
31
35
|
return direction === 'stake' ? t('staking.continue') : t('staking.unstake');
|
|
32
|
-
}, [error, direction, t]);
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
}, [isSendingTransaction, isQuoteLoading, error, direction, t]);
|
|
37
|
+
// Close the modal immediately; the build/send result (including errors) is surfaced
|
|
38
|
+
// back in the widget's main button via the `error` from the provider.
|
|
39
|
+
const handleConfirm = useCallback(() => {
|
|
40
|
+
setIsConfirmOpen(false);
|
|
41
|
+
sendTransaction().catch(() => {
|
|
42
|
+
// Error is captured by the mutation and shown through the validator's `error` output.
|
|
43
|
+
});
|
|
44
|
+
}, [sendTransaction]);
|
|
45
|
+
const submitActions = (_jsxs("div", { className: styles.actions, children: [_jsx(ButtonWithConnect, { variant: "fill", size: "l", fullWidth: true, disabled: !canSubmit || isQuoteLoading || isSendingTransaction, onClick: () => setIsConfirmOpen(true), children: buttonText }), _jsx(SettingsButton, { onClick: () => setIsSettingsOpen(true) })] }));
|
|
46
|
+
return (_jsxs("div", { className: clsx(styles.widget, className), ...props, children: [_jsxs(Tabs, { defaultValue: direction, onValueChange: (value) => onChangeDirection(value), children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "stake", children: t('staking.stake') }), _jsx(TabsTrigger, { value: "unstake", children: t('staking.unstake') })] }), _jsx(TabsContent, { className: styles.tab, value: "stake", children: _jsxs("div", { className: styles.content, children: [_jsxs("div", { className: styles.inputSection, children: [_jsx(CenteredAmountInput, { value: amount, onValueChange: setAmount, ticker: stakeToken?.ticker }), receiveToken && (_jsx(AmountReversed, { value: reversedAmount, ticker: receiveToken.ticker, decimals: receiveToken.decimals }))] }), _jsx(StakingBalanceBlock, { direction: "stake", providerMetadata: providerMetadata, stakedBalance: stakedBalance?.stakedBalance, isStakedBalanceLoading: isStakedBalanceLoading, balance: balance, isBalanceLoading: isBalanceLoading, onMaxClick: onMaxClick }), submitActions] }) }), _jsx(TabsContent, { value: "unstake", children: _jsxs("div", { className: styles.content, children: [_jsxs("div", { className: styles.inputSection, children: [_jsx(CenteredAmountInput, { value: amount, onValueChange: setAmount, ticker: !isReversed && receiveToken ? receiveToken.ticker : stakeToken?.ticker }), receiveToken && (_jsx(AmountReversed, { value: reversedAmount, ticker: isReversed ? receiveToken.ticker : (stakeToken?.ticker ?? ''), decimals: isReversed ? receiveToken.decimals : stakeToken?.decimals, onChangeDirection: providerMetadata?.supportsReversedQuote ? toggleReversed : undefined }))] }), _jsx(StakingBalanceBlock, { direction: "unstake", providerMetadata: providerMetadata, stakedBalance: stakedBalance?.stakedBalance, isStakedBalanceLoading: isStakedBalanceLoading, balance: balance, isBalanceLoading: isBalanceLoading, onMaxClick: onMaxClick }), submitActions, _jsx(SelectUnstakeMode, { value: unstakeMode, onValueChange: setUnstakeMode, providerInfo: providerInfo, providerMetadata: providerMetadata })] }) })] }), _jsx(StakingInfo, { className: styles.info, quote: quote, isQuoteLoading: isQuoteLoading, providerInfo: providerInfo, providerMetadata: providerMetadata, isProviderInfoLoading: isProviderInfoLoading, direction: direction }), _jsx(LowBalanceModal, { open: isLowBalanceWarningOpen, mode: lowBalanceMode, requiredTon: lowBalanceRequiredTon, onChange: onLowBalanceChange, onCancel: onLowBalanceCancel }), _jsx(StakingSettingsModal, { open: isSettingsOpen, onClose: () => setIsSettingsOpen(false), provider: stakingProvider, providers: stakingProviders, onProviderChange: setStakingProviderId, network: network }), _jsx(StakingConfirmModal, { open: isConfirmOpen, onClose: () => setIsConfirmOpen(false), onConfirm: handleConfirm, direction: direction, network: network, quote: quote, providerInfo: providerInfo, providerMetadata: providerMetadata, isProviderInfoLoading: isProviderInfoLoading, isQuoteLoading: isQuoteLoading })] }));
|
|
35
47
|
};
|
|
36
48
|
//# sourceMappingURL=staking-widget-ui.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staking-widget-ui.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-widget-ui/staking-widget-ui.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"staking-widget-ui.js","sourceRoot":"","sources":["../../../../../../src/features/staking/components/staking-widget-ui/staking-widget-ui.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,8 @@ import { useMutation } from '../../../libs/query';
|
|
|
11
11
|
/**
|
|
12
12
|
* Hook to build stake transaction
|
|
13
13
|
*/
|
|
14
|
-
export const useBuildStakeTransaction = () => {
|
|
14
|
+
export const useBuildStakeTransaction = (parameters) => {
|
|
15
15
|
const appKit = useAppKit();
|
|
16
|
-
return useMutation(buildStakeTransactionMutationOptions(appKit));
|
|
16
|
+
return useMutation(buildStakeTransactionMutationOptions(appKit, parameters));
|
|
17
17
|
};
|
|
18
18
|
//# sourceMappingURL=use-build-stake-transaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-build-stake-transaction.js","sourceRoot":"","sources":["../../../../../src/features/staking/hooks/use-build-stake-transaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-build-stake-transaction.js","sourceRoot":"","sources":["../../../../../src/features/staking/hooks/use-build-stake-transaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAQ3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWlD;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACpC,UAAwD,EACb,EAAE;IAC7C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,WAAW,CAAC,oCAAoC,CAAU,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1F,CAAC,CAAC"}
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
import { StakingError, StakingErrorCode } from '@ton/appkit';
|
|
9
9
|
import { mapDefiError } from '../../../utils/map-defi-error';
|
|
10
10
|
/**
|
|
11
|
-
* Map a thrown staking error to an i18n key. Tries staking-specific codes first, falls back to
|
|
12
|
-
* shared {@link mapDefiError} for base DeFi codes, and finally to
|
|
11
|
+
* Map a thrown staking error to an i18n key. Tries staking-specific codes first, falls back to
|
|
12
|
+
* the shared {@link mapDefiError} for base DeFi codes, and finally to the caller-provided
|
|
13
|
+
* {@link fallback} (defaults to `staking.quoteError`, but send-time callers should pass
|
|
14
|
+
* `staking.sendFailed`).
|
|
13
15
|
*/
|
|
14
|
-
export const mapStakingError = (error) => {
|
|
16
|
+
export const mapStakingError = (error, fallback = 'staking.quoteError') => {
|
|
15
17
|
if (error instanceof StakingError) {
|
|
16
18
|
switch (error.code) {
|
|
17
19
|
case StakingErrorCode.InvalidParams:
|
|
@@ -20,6 +22,6 @@ export const mapStakingError = (error) => {
|
|
|
20
22
|
return 'staking.unsupportedOperation';
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
|
-
return mapDefiError(error) ??
|
|
25
|
+
return mapDefiError(error) ?? fallback;
|
|
24
26
|
};
|
|
25
27
|
//# sourceMappingURL=map-staking-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-staking-error.js","sourceRoot":"","sources":["../../../../../src/features/staking/utils/map-staking-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"map-staking-error.js","sourceRoot":"","sources":["../../../../../src/features/staking/utils/map-staking-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,WAAmB,oBAAoB,EAAU,EAAE;IAC/F,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAChC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,gBAAgB,CAAC,aAAa;gBAC/B,OAAO,uBAAuB,CAAC;YACnC,KAAK,gBAAgB,CAAC,oBAAoB;gBACtC,OAAO,8BAA8B,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/features/swap/components/swap-confirm-modal/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Modal } from '../../../../components/ui/modal/modal';
|
|
3
|
+
import { Button } from '../../../../components/ui/button';
|
|
4
|
+
import { FlowPreview } from '../../../../components/shared/flow-preview';
|
|
5
|
+
import { useI18n } from '../../../settings/hooks/use-i18n';
|
|
6
|
+
import { SwapInfo } from '../swap-info';
|
|
7
|
+
import styles from './swap-confirm-modal.module.css';
|
|
8
|
+
export const SwapConfirmModal = ({ open, onClose, onConfirm, fromToken, toToken, fromAmount, toAmount, fiatSymbol, quote, swapProvider, slippage, isQuoteLoading, }) => {
|
|
9
|
+
const { t } = useI18n();
|
|
10
|
+
return (_jsxs(Modal, { open: open, onOpenChange: (isOpen) => !isOpen && onClose(), title: t('swap.confirmTitle'), children: [_jsx(FlowPreview, { fromAmount: fromAmount, toAmount: toAmount, fromToken: fromToken ?? undefined, toToken: toToken ?? undefined, fiatSymbol: fiatSymbol }), _jsx(SwapInfo, { className: styles.info, quote: quote, provider: swapProvider, toToken: toToken, slippage: slippage, isQuoteLoading: isQuoteLoading }), _jsx(Button, { className: styles.confirmButton, variant: "fill", size: "l", fullWidth: true, onClick: onConfirm, children: t('swap.confirm') })] }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=swap-confirm-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swap-confirm-modal.js","sourceRoot":"","sources":["../../../../../../src/features/swap/components/swap-confirm-modal/swap-confirm-modal.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,MAAM,MAAM,iCAAiC,CAAC;AAiBrD,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EACxD,IAAI,EACJ,OAAO,EACP,SAAS,EACT,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,cAAc,GACjB,EAAE,EAAE;IACD,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,OAAO,CACH,MAAC,KAAK,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,mBAAmB,CAAC,aAC5F,KAAC,WAAW,IACR,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,IAAI,SAAS,EACjC,OAAO,EAAE,OAAO,IAAI,SAAS,EAC7B,UAAU,EAAE,UAAU,GACxB,EAEF,KAAC,QAAQ,IACL,SAAS,EAAE,MAAM,CAAC,IAAI,EACtB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,GAChC,EAEF,KAAC,MAAM,IAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,GAAG,EAAC,SAAS,QAAC,OAAO,EAAE,SAAS,YACxF,CAAC,CAAC,cAAc,CAAC,GACb,IACL,CACX,CAAC;AACN,CAAC,CAAC"}
|