@rash2x/bridge-widget 0.1.12 → 0.1.13

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.
@@ -2,8 +2,9 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
5
- import { useTranslation } from "react-i18next";
6
- import require$$0, { useState, useCallback, useMemo, createContext, useContext, useEffect, memo, forwardRef, useRef } from "react";
5
+ import require$$0, { useEffect, useState, useCallback, useMemo, createContext, useContext, memo, forwardRef, useRef } from "react";
6
+ import { initReactI18next, useTranslation, I18nextProvider } from "react-i18next";
7
+ import i18n, { t } from "i18next";
7
8
  import { create as create$1 } from "zustand";
8
9
  import { Button } from "@/components/ui/button";
9
10
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog";
@@ -22,12 +23,76 @@ import { Switch } from "@/components/ui/switch";
22
23
  import { X } from "lucide-react";
23
24
  import { AnimatePresence, motion } from "framer-motion";
24
25
  import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "@/components/ui/accordion";
25
- import { t } from "i18next";
26
26
  import { toast, Toaster } from "sonner";
27
27
  import { BrowserProvider, Contract, parseUnits } from "ethers";
28
28
  import { isAddress, formatUnits } from "viem";
29
29
  import { TonClient, Address as Address$1, beginCell } from "@ton/ton";
30
30
  import { TronLinkAdapterName } from "@tronweb3/tronwallet-adapters";
31
+ const common$1 = { "connecting": "Connecting…", "initializing": "Initializing...", "loading": "Loading...", "paste": "paste", "close": "Close", "zeroPlaceholder": "0", "nativeToken": "Native Token" };
32
+ const wallets$1 = { "addTonWallet": "Add TON wallet", "addEvmWallet": "Add EVM wallet", "connectTonWallet": "Connect TON wallet", "connectEvmWallet": "Connect EVM wallet", "initializingMetamask": "Initializing MetaMask SDK...", "initializingTronlink": "Initializing TronLink...", "failedToConnectTon": "Failed to connect to TON wallet", "failedToDisconnect": "Failed to disconnect", "metamaskConnectionError": "MetaMask connection error", "failedToConnectMetamask": "Failed to connect to MetaMask", "failedToDisconnectMetamask": "Failed to disconnect from MetaMask", "selectWallet": "Select Wallet", "tonWallets": "TON", "evmWallets": "EVM", "tronWallets": "TRON", "tonKeeper": "TonKeeper", "metaMask": "WalletConnect", "tronLink": "TronLink", "addTronWallet": "Add Tron wallet", "comingSoon": "Coming Soon", "connected": "CONNECTED", "disconnect": "Disconnect", "chooseWallet": "Choose wallet", "oneWalletPerEnv": "You can only connect one wallet per environment.", "connect": "Connect", "connectTronWallet": "Connect Tron wallet", "connectWallet": "Connect wallet" };
33
+ const bridge$1 = { "sourceNetwork": "Source network", "destinationNetwork": "Destination network", "selectToken": "Select token", "selectNetwork": "Select network", "searchToken": "Search token", "searchDestinationChain": "Search destination chain", "myTokens": "My tokens", "allTokens": "All tokens", "willChangeSourceChain": "Will Change Source Chain", "noBalancesFound": "No balances found.", "noResults": "No results", "sendToAnotherAddress": "Send to another address", "youWillReceive": "You will receive", "tonAddressPlaceholder": "TON address", "evmAddressPlaceholder": "0x… EVM address", "addressDoesntMatch": "Address doesn't match the {{network}} network", "checkBeforeTransfer": "Check correctness before transfer" };
34
+ const transaction$1 = { "enterAmount": "Enter amount", "transfer": "Transfer", "getQuote": "Get quote", "failed": "Transaction Failed", "confirm": "Confirm transaction", "signTransaction": "Sign in transaction in wallet", "quoting": "Quoting...", "inProgress": "Processing...", "checkingBalance": "Checking balance...", "insufficientBalance": "Insufficient balance", "amountTooSmall": "Min {{min}}", "amountTooLarge": "Max {{max}}", "successTitle": "Success", "bridged": "Bridged", "transferTitle": "Transfer", "hash": "Hash", "route": "Route", "estTime": "Est. Time", "slippage": "Slippage", "minimumReceived": "Minimum received", "totalFee": "Total Fee", "noRouteFound": "No route found", "notEnoughGas": "Not enough gas", "noRouteFoundForSettings": "No route found for current settings.", "tryAdjustSettings": "Try disabling Gas on Destination, or adjust amount/networks.", "quoteError": "Quote error" };
35
+ const app$1 = { "stargateWidgetName": "Stargate Bridge Widget", "liveWidget": "Live Widget", "getStarted": "Get Started" };
36
+ const settings$1 = { "title": "Settings", "gasOnDestination": "Gas on destination", "slippageTolerance": "Slippage tolerance", "routePriority": "Route Priority", "highSlippageWarning": "High slippage warning", "gasPresets": { "auto": "Auto", "none": "None", "medium": "Medium", "max": "Max" }, "routePresets": { "fastest": "Fastest", "cheapest": "Cheapest", "recommended": "Recommended" } };
37
+ const en = {
38
+ common: common$1,
39
+ wallets: wallets$1,
40
+ bridge: bridge$1,
41
+ transaction: transaction$1,
42
+ app: app$1,
43
+ settings: settings$1
44
+ };
45
+ const common = { "connecting": "Подключение…", "initializing": "Инициализация...", "loading": "Загрузка...", "paste": "вставить", "close": "Закрыть", "zeroPlaceholder": "0", "nativeToken": "Нативный токен" };
46
+ const wallets = { "addTonWallet": "Добавить TON кошелёк", "addEvmWallet": "Добавить EVM кошелёк", "connectTonWallet": "Подключить TON кошелёк", "connectEvmWallet": "Подключить EVM кошелёк", "initializingMetamask": "Инициализация MetaMask SDK...", "initializingTronlink": "Инициализация TronLink...", "failedToConnectTon": "Не удалось подключиться к TON кошельку", "failedToDisconnect": "Не удалось отключиться", "metamaskConnectionError": "Ошибка подключения MetaMask", "failedToConnectMetamask": "Не удалось подключиться к MetaMask", "failedToDisconnectMetamask": "Не удалось отключиться от MetaMask", "selectWallet": "Выберите кошелёк", "tonWallets": "TON", "evmWallets": "EVM", "tronWallets": "TRON", "tonKeeper": "TonKeeper", "metaMask": "WalletConnect", "tronLink": "TronLink", "addTronWallet": "Добавить Tron кошелёк", "comingSoon": "Скоро", "connected": "ПОДКЛЮЧЕНО", "disconnect": "Отключить", "chooseWallet": "Выберите кошелёк", "oneWalletPerEnv": "Можно подключить только один кошелёк на окружение.", "connect": "Подключить", "connectTronWallet": "Подключить Tron кошелёк", "connectWallet": "Подключить кошелёк" };
47
+ const bridge = { "sourceNetwork": "Исходная сеть", "destinationNetwork": "Целевая сеть", "selectToken": "Выбрать токен", "selectNetwork": "Выбрать сеть", "searchToken": "Поиск токена", "searchDestinationChain": "Поиск целевой сети", "myTokens": "Мои токены", "allTokens": "Все токены", "willChangeSourceChain": "Сменит исходную сеть", "noBalancesFound": "Балансы не найдены.", "noResults": "Нет результатов", "sendToAnotherAddress": "Отправить на другой адрес", "youWillReceive": "Вы получите", "tonAddressPlaceholder": "TON адрес", "evmAddressPlaceholder": "0x… EVM адрес", "addressDoesntMatch": "Адрес не соответствует сети {{network}}", "checkBeforeTransfer": "Проверьте корректность перед переводом" };
48
+ const transaction = { "enterAmount": "Введите сумму", "transfer": "Перевести", "getQuote": "Получить котировку", "quoting": "Расчет котировки...", "failed": "Ошибка транзакции", "confirm": "Подтвердите транзакцию", "signTransaction": "Подпишите транзакцию в кошельке", "inProgress": "Выполнение...", "checkingBalance": "Проверка баланса...", "insufficientBalance": "Недостаточно средств", "amountTooSmall": "Минимум {{min}}", "amountTooLarge": "Максимум {{max}}", "successTitle": "Успех", "bridged": "Переведено", "transferTitle": "Перевод", "hash": "Хэш", "route": "Маршрут", "estTime": "Время", "slippage": "Проскальзывание", "minimumReceived": "Минимум к получению", "totalFee": "Общая комиссия", "noRouteFound": "Маршрут не найден", "notEnoughGas": "Недостаточно газа", "noRouteFoundForSettings": "Маршрут не найден для текущих настроек.", "tryAdjustSettings": "Попробуйте отключить Gas on Destination или измените сумму/сети.", "quoteError": "Ошибка котировки" };
49
+ const app = { "stargateWidgetName": "Виджет Stargate Bridge", "liveWidget": "Живой виджет", "getStarted": "Начало работы" };
50
+ const settings = { "title": "Настройки", "gasOnDestination": "Газ на назначении", "slippageTolerance": "Толерантность к проскальзыванию", "routePriority": "Приоритет маршрута", "highSlippageWarning": "Высокое проскальзывание", "gasPresets": { "auto": "Авто", "none": "Нет", "medium": "Средний", "max": "Макс" }, "routePresets": { "fastest": "Быстрейший", "cheapest": "Дешевейший", "recommended": "Рекомендуемый" } };
51
+ const ru = {
52
+ common,
53
+ wallets,
54
+ bridge,
55
+ transaction,
56
+ app,
57
+ settings
58
+ };
59
+ const bridgeI18n = i18n.createInstance();
60
+ const resources = {
61
+ en: {
62
+ "evaa-bridge": en
63
+ },
64
+ ru: {
65
+ "evaa-bridge": ru
66
+ }
67
+ };
68
+ bridgeI18n.use(initReactI18next).init({
69
+ resources,
70
+ lng: "en",
71
+ // Will be overridden by defaultLanguage prop
72
+ fallbackLng: "en",
73
+ debug: false,
74
+ // Use a dedicated namespace to avoid conflicts
75
+ defaultNS: "evaa-bridge",
76
+ ns: ["evaa-bridge"],
77
+ interpolation: {
78
+ escapeValue: false
79
+ // react already does escaping
80
+ }
81
+ });
82
+ function BridgeI18nProvider({
83
+ children,
84
+ defaultLanguage = "en"
85
+ }) {
86
+ useEffect(() => {
87
+ if (bridgeI18n.language !== defaultLanguage) {
88
+ bridgeI18n.changeLanguage(defaultLanguage);
89
+ }
90
+ }, [defaultLanguage]);
91
+ return /* @__PURE__ */ jsx(I18nextProvider, { i18n: bridgeI18n, children });
92
+ }
93
+ function useBridgeTranslation() {
94
+ return useTranslation("evaa-bridge", { i18n: bridgeI18n });
95
+ }
31
96
  const norm = (s) => (s ?? "").toUpperCase().replace(/₮/g, "T").replace(/[^A-Z0-9]/g, "");
32
97
  const POPULAR_ORDER = [
33
98
  "USDT",
@@ -808,7 +873,7 @@ const routePresets = [
808
873
  RoutePriority.RECOMMENDED
809
874
  ];
810
875
  const SettingModal = ({ isOpen, onClose }) => {
811
- const { t: t2 } = useTranslation();
876
+ const { t: t2 } = useBridgeTranslation();
812
877
  const { toChain } = useChainsStore();
813
878
  const { tokens } = useTokensStore();
814
879
  const {
@@ -1435,7 +1500,7 @@ const TokenSelectModal = ({
1435
1500
  items,
1436
1501
  onChangeAsset
1437
1502
  }) => {
1438
- const { t: t2 } = useTranslation();
1503
+ const { t: t2 } = useBridgeTranslation();
1439
1504
  const {
1440
1505
  query,
1441
1506
  setQuery,
@@ -1669,7 +1734,7 @@ const SelectTokenButton = ({
1669
1734
  onClick,
1670
1735
  token
1671
1736
  }) => {
1672
- const { t: t2 } = useTranslation();
1737
+ const { t: t2 } = useBridgeTranslation();
1673
1738
  const label = useMemo(() => {
1674
1739
  return token?.symbol ?? t2("bridge.selectToken");
1675
1740
  }, [token, t2]);
@@ -1699,7 +1764,7 @@ const SelectTokenButton = ({
1699
1764
  );
1700
1765
  };
1701
1766
  const FormHeaderComponent = () => {
1702
- const { t: t2 } = useTranslation();
1767
+ const { t: t2 } = useBridgeTranslation();
1703
1768
  const { isOpen, onClose, onOpen } = useModal();
1704
1769
  const {
1705
1770
  isOpen: isOpenSettings,
@@ -2204,7 +2269,7 @@ const SelectNetworkButton = ({
2204
2269
  onClick,
2205
2270
  network
2206
2271
  }) => {
2207
- const { t: t2 } = useTranslation();
2272
+ const { t: t2 } = useBridgeTranslation();
2208
2273
  const label = useMemo(() => {
2209
2274
  return network?.name ?? t2("bridge.selectNetwork");
2210
2275
  }, [network, t2]);
@@ -2301,7 +2366,7 @@ const ChainSelectModal = ({
2301
2366
  allowedItems,
2302
2367
  onChangeChain
2303
2368
  }) => {
2304
- const { t: t2 } = useTranslation();
2369
+ const { t: t2 } = useBridgeTranslation();
2305
2370
  const [query, setQuery] = useState("");
2306
2371
  const [isFocused, setIsFocused] = useState(false);
2307
2372
  const { setFromChain, chains, fromChain, toChain } = useChainsStore();
@@ -2446,7 +2511,7 @@ const WalletButton = ({
2446
2511
  wallet,
2447
2512
  addressType
2448
2513
  }) => {
2449
- const { t: t2 } = useTranslation();
2514
+ const { t: t2 } = useBridgeTranslation();
2450
2515
  const { onOpen } = useWalletSelectModal();
2451
2516
  const { chainRegistry } = useChainStrategies();
2452
2517
  const walletType = mapWalletToType(wallet);
@@ -2633,7 +2698,7 @@ const tonNormalize = (addr) => {
2633
2698
  }
2634
2699
  };
2635
2700
  const ToggleRow = ({ enabled, onToggle }) => {
2636
- const { t: t2 } = useTranslation();
2701
+ const { t: t2 } = useBridgeTranslation();
2637
2702
  const { toChain } = useChainsStore();
2638
2703
  const { dstAddress } = useAddresses();
2639
2704
  const { setCustomDstAddress, clearCustomDstAddress } = useCustomAddressStore();
@@ -2859,7 +2924,7 @@ function getRouteDisplayName(route) {
2859
2924
  return route.split(/[/\-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
2860
2925
  }
2861
2926
  const Details = () => {
2862
- const { t: t2 } = useTranslation();
2927
+ const { t: t2 } = useBridgeTranslation();
2863
2928
  const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();
2864
2929
  const { toChain, fromChain, chains } = useChainsStore();
2865
2930
  const { quote, status } = useBridgeQuoteStore();
@@ -3505,7 +3570,7 @@ function useSilentValidations(amountString) {
3505
3570
  return validationResult;
3506
3571
  }
3507
3572
  const SubmitButton = () => {
3508
- const { t: t2 } = useTranslation();
3573
+ const { t: t2 } = useBridgeTranslation();
3509
3574
  const { chainRegistry } = useChainStrategies();
3510
3575
  const { srcAddress, dstAddress } = useAddresses();
3511
3576
  const { quote, status, inputAmount, noRoute } = useBridgeQuoteStore();
@@ -3600,13 +3665,22 @@ const SubmitButton = () => {
3600
3665
  }
3601
3666
  };
3602
3667
  const disabled = isBusy || amountNum <= 0 || status === "loading" || isBalanceLoading || hasInsufficientBalance || hasAmountTooLarge || !gas.hasEnoughGas || noRoute || !isValidForTransfer;
3603
- return /* @__PURE__ */ jsx(Button, { onClick: handleClick, disabled, className: "w-full mt-4", children: label });
3668
+ return /* @__PURE__ */ jsx(
3669
+ Button,
3670
+ {
3671
+ onClick: handleClick,
3672
+ disabled,
3673
+ size: "lg",
3674
+ className: "w-full mt-4",
3675
+ children: label
3676
+ }
3677
+ );
3604
3678
  };
3605
3679
  function short(addr) {
3606
3680
  return addr.slice(0, 4) + "…" + addr.slice(-4);
3607
3681
  }
3608
3682
  const WalletSelectModal = () => {
3609
- const { t: t2 } = useTranslation();
3683
+ const { t: t2 } = useBridgeTranslation();
3610
3684
  const { isOpen, onClose } = useWalletSelectModal();
3611
3685
  const { connect, connectors, isPending } = useConnect();
3612
3686
  const { chainRegistry } = useChainStrategies();
@@ -5465,7 +5539,7 @@ var fireworksExports = requireFireworks();
5465
5539
  const Fireworks = /* @__PURE__ */ getDefaultExportFromCjs(fireworksExports);
5466
5540
  const SuccessStep = () => {
5467
5541
  const { current, reset } = useTransactionStore();
5468
- const { t: t2 } = useTranslation();
5542
+ const { t: t2 } = useBridgeTranslation();
5469
5543
  const metadata = current?.metadata;
5470
5544
  const srcTxHash = current?.srcTxHash;
5471
5545
  const handleCopyHash = () => {
@@ -5684,7 +5758,7 @@ const useCountdown = (initialSeconds) => {
5684
5758
  };
5685
5759
  };
5686
5760
  const ConfirmStep = () => {
5687
- const { t: t2 } = useTranslation();
5761
+ const { t: t2 } = useBridgeTranslation();
5688
5762
  const { formatTime } = useCountdown(90);
5689
5763
  return /* @__PURE__ */ jsx(Card, { className: "flex flex-col border-none h-full bg-background overflow-hidden rounded-none md:rounded-lg", children: /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col relative gap-4 py-10 px-8 flex-1 items-center justify-start text-center noise", children: [
5690
5764
  /* @__PURE__ */ jsx(TransactionConfirmVector, {}),
@@ -6659,12 +6733,12 @@ class TonChainStrategy {
6659
6733
  payload: msg.payload
6660
6734
  })
6661
6735
  );
6662
- const transaction = {
6736
+ const transaction2 = {
6663
6737
  validUntil: Math.floor(Date.now() / 1e3) + TON_CONFIG.validUntil,
6664
6738
  messages: tonMessages
6665
6739
  };
6666
6740
  const result = await this.config.tonConnectUI.sendTransaction(
6667
- transaction
6741
+ transaction2
6668
6742
  );
6669
6743
  return {
6670
6744
  chainKey: "ton",
@@ -7483,7 +7557,7 @@ const EvaaBridgeWithProviders = (props) => {
7483
7557
  useEffect(() => {
7484
7558
  setTronConnected(!!tronConnected);
7485
7559
  }, [tronConnected, setTronConnected]);
7486
- return /* @__PURE__ */ jsx(
7560
+ return /* @__PURE__ */ jsx(BridgeI18nProvider, { defaultLanguage: props.defaultLanguage, children: /* @__PURE__ */ jsx(
7487
7561
  ChainStrategyProvider,
7488
7562
  {
7489
7563
  evmWallet: {
@@ -7508,7 +7582,7 @@ const EvaaBridgeWithProviders = (props) => {
7508
7582
  tonApiKey: props.tonApiKey,
7509
7583
  children: /* @__PURE__ */ jsx(EvaaBridgeContent, { ...props })
7510
7584
  }
7511
- );
7585
+ ) });
7512
7586
  };
7513
7587
  const EvaaBridgeContent = ({
7514
7588
  className,
@@ -7516,7 +7590,7 @@ const EvaaBridgeContent = ({
7516
7590
  onAmountChange,
7517
7591
  onChainChange
7518
7592
  } = {}) => {
7519
- const { t: t2 } = useTranslation();
7593
+ const { t: t2 } = useBridgeTranslation();
7520
7594
  useTokensRequest();
7521
7595
  useChainsRequest();
7522
7596
  const [sendToAnother, setSendToAnother] = useState(false);