@kimafinance/kima-transaction-widget 1.3.6 → 1.3.8

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/index.cjs CHANGED
@@ -2544,11 +2544,12 @@ function useIsWalletReady() {
2544
2544
  checkChainId();
2545
2545
  }, [externalProvider, sourceChain, switchNetwork, walletChainId, isConnected]);
2546
2546
  (0, import_react76.useEffect)(() => {
2547
- if (isConnected) {
2547
+ if (isConnected && sourceChain.compatibility === "EVM" /* EVM */) {
2548
2548
  console.debug(
2549
2549
  "useIsWalletReady:EVM: Dispatching source address:",
2550
2550
  walletAddress
2551
2551
  );
2552
+ console.log("dispatching evm address: ", walletAddress);
2552
2553
  dispatch(setSourceAddress(walletAddress ?? ""));
2553
2554
  }
2554
2555
  }, [walletAddress, isConnected, dispatch]);
@@ -2627,6 +2628,12 @@ var checkPoolBalance = ({
2627
2628
  const targetToken = poolTokens.find(
2628
2629
  (token) => token.tokenSymbol === finalTargetCurrency
2629
2630
  );
2631
+ if (!targetToken) {
2632
+ return {
2633
+ isPoolAvailable: false,
2634
+ error: `${CHAIN_NAMES_TO_STRING[targetChain]} has no ${targetCurrency} pool!`
2635
+ };
2636
+ }
2630
2637
  const { amount: targetTokenBalance } = targetToken;
2631
2638
  if (parseFloat(amount) > parseFloat(targetTokenBalance))
2632
2639
  return {
@@ -2774,6 +2781,33 @@ function useEvmAllowance() {
2774
2781
  refetchInterval: 60 * 1e3,
2775
2782
  enabled
2776
2783
  });
2784
+ const signMessage = async (data) => {
2785
+ if (!walletProvider) {
2786
+ console.error("No available provider");
2787
+ return;
2788
+ }
2789
+ if (!allowanceData?.decimals) {
2790
+ console.warn("useEvmAllowance: Missing required data");
2791
+ return;
2792
+ }
2793
+ try {
2794
+ const walletClient = (0, import_viem5.createWalletClient)({
2795
+ account: walletAddress,
2796
+ chain: sourceChain,
2797
+ transport: (0, import_viem5.custom)(window.ethereum)
2798
+ // WARNING: NEED TO MAKE SURE THIS USING THE ETHEREUM OBJECT IS STABLE ENOUGH
2799
+ });
2800
+ return await walletClient.signMessage({
2801
+ account: walletAddress,
2802
+ message: `Target Address: ${data.targetAddress}
2803
+ Target Chain: ${data.targetChain}
2804
+ Target Symbol: ${data.targetSymbol}`
2805
+ });
2806
+ } catch (error) {
2807
+ console.error("useEvmAllowance: Error on signing message:", error);
2808
+ throw new Error("Error on signing message");
2809
+ }
2810
+ };
2777
2811
  const approveErc20TokenTransfer = async (isCancel = false) => {
2778
2812
  if (!walletProvider) {
2779
2813
  console.error("No available provider");
@@ -2839,6 +2873,7 @@ function useEvmAllowance() {
2839
2873
  isApproved: allowanceData?.allowance ? allowanceData.allowance >= allowanceNumber : false,
2840
2874
  approve: approveErc20TokenTransfer,
2841
2875
  isLoading,
2876
+ signMessage,
2842
2877
  refetch
2843
2878
  };
2844
2879
  }
@@ -2922,6 +2957,7 @@ var WalletProvider2 = ({
2922
2957
  return /* @__PURE__ */ import_react82.default.createElement(import_wallet_adapter_react.ConnectionProvider, { endpoint }, /* @__PURE__ */ import_react82.default.createElement(
2923
2958
  import_wallet_adapter_react.WalletProvider,
2924
2959
  {
2960
+ autoConnect: false,
2925
2961
  wallets: [
2926
2962
  new import_wallet_adapter_wallets.PhantomWalletAdapter(),
2927
2963
  new import_wallet_adapter_wallets.SolflareWalletAdapter(),
@@ -3031,7 +3067,8 @@ function useSolanaAllowance() {
3031
3067
  const { connection: internalConnection } = (0, import_wallet_adapter_react3.useConnection)();
3032
3068
  const {
3033
3069
  publicKey: internalPublicKey,
3034
- signTransaction: internalSignTransaction
3070
+ signTransaction: internalSignTransaction,
3071
+ signMessage: internalSignMessage
3035
3072
  } = (0, import_wallet_adapter_react3.useWallet)();
3036
3073
  const selectedCoin = (0, import_react_redux7.useSelector)(selectSourceCurrency);
3037
3074
  const tokenOptions = (0, import_react_redux7.useSelector)(selectTokenOptions);
@@ -3040,6 +3077,7 @@ function useSolanaAllowance() {
3040
3077
  const isSolanaProvider = sourceChain.shortName === "SOL" && externalProvider?.type === "solana" && externalProvider.provider && externalProvider.signer instanceof import_web38.PublicKey;
3041
3078
  const userPublicKey = isSolanaProvider ? externalProvider.signer : sourceChain.shortName === "SOL" ? internalPublicKey : void 0;
3042
3079
  const signTransaction = isSolanaProvider && externalProvider.provider.signTransaction ? externalProvider.provider.signTransaction : sourceChain.shortName === "SOL" ? internalSignTransaction : void 0;
3080
+ const signMessage = isSolanaProvider && externalProvider.provider.signMessage ? externalProvider.provider.signMessage : sourceChain.shortName === "SOL" ? internalSignMessage : void 0;
3043
3081
  const connection = isSolanaProvider && externalProvider.provider.connection ? externalProvider.provider.connection : sourceChain.shortName === "SOL" ? internalConnection : void 0;
3044
3082
  const {
3045
3083
  data: allowanceData,
@@ -3068,6 +3106,23 @@ function useSolanaAllowance() {
3068
3106
  staleTime: 1e3 * 60
3069
3107
  // 1 min
3070
3108
  });
3109
+ const signSolanaMessage = async (data) => {
3110
+ if (!signMessage) {
3111
+ console.warn("useSolanaAllowance: Missing Solana provider setup");
3112
+ return;
3113
+ }
3114
+ try {
3115
+ const message = `Target Address: ${data.targetAddress}
3116
+ Target Chain: ${data.targetChain}
3117
+ Target Symbol: ${data.targetSymbol}`;
3118
+ const encodedMessage = new TextEncoder().encode(message);
3119
+ const signature = await signMessage(encodedMessage);
3120
+ return `0x${Buffer.from(signature).toString("hex")}`;
3121
+ } catch (error2) {
3122
+ console.error("Error signing message:", error2);
3123
+ throw error2;
3124
+ }
3125
+ };
3071
3126
  const approveSPLTokenTransfer = async (isCancel = false) => {
3072
3127
  if (!allowanceAmount) {
3073
3128
  console.warn("useSolanaAllowance: Missing allowance amount");
@@ -3125,7 +3180,8 @@ function useSolanaAllowance() {
3125
3180
  return {
3126
3181
  ...allowanceData,
3127
3182
  isApproved: allowanceData?.allowance ? allowanceData.allowance >= allowanceNumber : false,
3128
- approve: approveSPLTokenTransfer
3183
+ approve: approveSPLTokenTransfer,
3184
+ signMessage: signSolanaMessage
3129
3185
  };
3130
3186
  }
3131
3187
 
@@ -3252,7 +3308,8 @@ var WalletProvider3 = ({ children, networkOption }) => {
3252
3308
  {
3253
3309
  adapters,
3254
3310
  onError,
3255
- onChainChanged
3311
+ onChainChanged,
3312
+ autoConnect: false
3256
3313
  },
3257
3314
  children
3258
3315
  );
@@ -3599,7 +3656,8 @@ function useTronAllowance() {
3599
3656
  const { pools } = useGetPools_default(backendUrl, networkOption);
3600
3657
  const {
3601
3658
  address: internalUserAddress,
3602
- signTransaction: internalSignTronTransaction
3659
+ signTransaction: internalSignTronTransaction,
3660
+ signMessage: internalSignMessage
3603
3661
  } = (0, import_tronwallet_adapter_react_hooks3.useWallet)();
3604
3662
  const [approvalsCount, setApprovalsCount] = (0, import_react88.useState)(0);
3605
3663
  const isTronProvider2 = sourceChain.shortName === "TRX" && externalProvider?.type === "tron" && externalProvider.provider.tronWeb instanceof import_tronweb5.TronWeb && typeof externalProvider.signer === "string";
@@ -3611,6 +3669,7 @@ function useTronAllowance() {
3611
3669
  isTronProvider2 && tronWeb.setAddress(TRON_USDK_OWNER_ADDRESS);
3612
3670
  const userAddress = isTronProvider2 ? externalProvider.signer : internalUserAddress;
3613
3671
  const signTronTransaction = isTronProvider2 ? externalProvider.provider.signTransaction : internalSignTronTransaction;
3672
+ const signMessage = isTronProvider2 ? externalProvider.provider.signMessage : internalSignMessage;
3614
3673
  const {
3615
3674
  data: allowanceData,
3616
3675
  isLoading,
@@ -3631,6 +3690,22 @@ function useTronAllowance() {
3631
3690
  staleTime: 1e3 * 60
3632
3691
  // 1 min
3633
3692
  });
3693
+ const signTronMessage = async (data) => {
3694
+ if (!tronWeb) {
3695
+ console.warn("TronWeb not initialized");
3696
+ return;
3697
+ }
3698
+ try {
3699
+ const message = `Target Address: ${data.targetAddress}
3700
+ Target Chain: ${data.targetChain}
3701
+ Target Symbol: ${data.targetSymbol}`;
3702
+ const signedMessage = await signMessage(message);
3703
+ return signedMessage;
3704
+ } catch (error2) {
3705
+ console.error("Error signing message:", error2);
3706
+ throw error2;
3707
+ }
3708
+ };
3634
3709
  const approveTrc20TokenTransfer = async (isCancel = false) => {
3635
3710
  if (!userAddress || !pools || !tronWeb || !tokenOptions || !selectedCoin || !allowanceAmount) {
3636
3711
  console.warn("Missing required data for approveTrc20TokenTransfer");
@@ -3669,7 +3744,8 @@ function useTronAllowance() {
3669
3744
  return {
3670
3745
  ...allowanceData,
3671
3746
  isApproved: allowanceData?.allowance ? allowanceData.allowance >= allowanceNumber : false,
3672
- approve: approveTrc20TokenTransfer
3747
+ approve: approveTrc20TokenTransfer,
3748
+ signMessage: signTronMessage
3673
3749
  };
3674
3750
  }
3675
3751
 
@@ -3836,10 +3912,10 @@ var KimaProvider = ({
3836
3912
  var KimaProvider_default = KimaProvider;
3837
3913
 
3838
3914
  // src/components/KimaTransactionWidget.tsx
3839
- var import_react135 = __toESM(require("react"), 1);
3915
+ var import_react136 = __toESM(require("react"), 1);
3840
3916
 
3841
3917
  // src/components/KimaWidgetWrapper.tsx
3842
- var import_react133 = __toESM(require("react"), 1);
3918
+ var import_react134 = __toESM(require("react"), 1);
3843
3919
  var import_react_redux52 = require("react-redux");
3844
3920
 
3845
3921
  // src/components/TransactionWidget.tsx
@@ -4596,12 +4672,13 @@ var AddressInput = ({
4596
4672
  const targetChain = (0, import_react_redux29.useSelector)(selectTargetChain);
4597
4673
  const { walletAddress: sourceAddress, isReady } = useIsWalletReady4();
4598
4674
  const targetAddress = (0, import_react_redux29.useSelector)(selectTargetAddress);
4599
- const isEvm = (chain) => {
4600
- return chain !== "SOL" && chain !== "TRX" && chain !== "BTC";
4675
+ const isCompatible = (sourceChain2, targetChain2) => {
4676
+ return sourceChain2.compatibility === targetChain2.compatibility;
4601
4677
  };
4602
4678
  (0, import_react113.useEffect)(() => {
4603
4679
  if (mode === "payment" /* payment */) return;
4604
- if (isEvm(sourceChain) && isEvm(targetChain)) {
4680
+ if (isCompatible(sourceChain, targetChain)) {
4681
+ if (targetAddress !== "") return;
4605
4682
  dispatch(setTargetAddress(isReady && sourceAddress ? sourceAddress : ""));
4606
4683
  return;
4607
4684
  }
@@ -5154,7 +5231,7 @@ var TransactionWidget = ({ theme }) => {
5154
5231
  };
5155
5232
 
5156
5233
  // src/components/TransferWidget.tsx
5157
- var import_react132 = __toESM(require("react"), 1);
5234
+ var import_react133 = __toESM(require("react"), 1);
5158
5235
  var import_react_redux51 = require("react-redux");
5159
5236
 
5160
5237
  // src/components/reusable/SingleForm.tsx
@@ -5325,18 +5402,8 @@ var NetworkSelector_default = import_react122.default.memo(NetworkSelector);
5325
5402
 
5326
5403
  // src/components/reusable/SingleForm.tsx
5327
5404
  var SingleForm = ({
5328
- allowance,
5329
5405
  balance,
5330
- decimals,
5331
- formStep,
5332
- onBack,
5333
- onCancelApprove,
5334
- onNext,
5335
- getButtonLabel,
5336
- isApproving,
5337
- isSigning,
5338
- isSubmitting,
5339
- isCancellingApprove
5406
+ decimals
5340
5407
  }) => {
5341
5408
  const dispatch = (0, import_react_redux43.useDispatch)();
5342
5409
  const mode = (0, import_react_redux43.useSelector)(selectMode);
@@ -5345,7 +5412,6 @@ var SingleForm = ({
5345
5412
  const { totalFeeUsd } = (0, import_react_redux43.useSelector)(selectServiceFee);
5346
5413
  const compliantOption = (0, import_react_redux43.useSelector)(selectCompliantOption);
5347
5414
  const targetCompliant = (0, import_react_redux43.useSelector)(selectTargetCompliant);
5348
- const transactionOption = (0, import_react_redux43.useSelector)(selectTransactionOption);
5349
5415
  const sourceNetwork = (0, import_react_redux43.useSelector)(selectSourceChain);
5350
5416
  const targetNetwork = (0, import_react_redux43.useSelector)(selectTargetChain);
5351
5417
  const { isReady } = useIsWalletReady4();
@@ -5379,23 +5445,16 @@ var SingleForm = ({
5379
5445
  const maxValue = (0, import_react123.useMemo)(() => {
5380
5446
  if (!balance) return 0;
5381
5447
  if (totalFeeUsd < 0) return balance;
5382
- const amountMinusFees = preciseSubtraction(balance, totalFeeUsd);
5383
- return amountMinusFees > 0 ? amountMinusFees : 0;
5448
+ return preciseSubtraction(balance, totalFeeUsd);
5384
5449
  }, [balance, totalFeeUsd, feeDeduct]);
5385
5450
  (0, import_react123.useEffect)(() => {
5386
5451
  if (!errorMessage) return;
5387
5452
  import_react_hot_toast4.toast.error(errorMessage);
5388
5453
  }, [errorMessage]);
5389
5454
  (0, import_react123.useEffect)(() => {
5390
- if (amountValue && amount != "") return;
5455
+ if (amountValue && amount !== "") return;
5391
5456
  setAmountValue(amount);
5392
5457
  }, [amount]);
5393
- (0, import_react123.useEffect)(() => {
5394
- if (!feeDeduct && maxValue < +amountValue) {
5395
- setAmountValue(maxValue.toString());
5396
- dispatch(setAmount(maxValue.toString()));
5397
- }
5398
- }, [feeDeduct]);
5399
5458
  return /* @__PURE__ */ import_react123.default.createElement("div", { className: "single-form" }, /* @__PURE__ */ import_react123.default.createElement("div", { className: "form-item" }, /* @__PURE__ */ import_react123.default.createElement("span", { className: "label" }, "Source Network:"), /* @__PURE__ */ import_react123.default.createElement("div", { className: "items" }, /* @__PURE__ */ import_react123.default.createElement(NetworkSelector_default, { type: "source" }), /* @__PURE__ */ import_react123.default.createElement(CoinDropdown_default, null))), /* @__PURE__ */ import_react123.default.createElement(
5400
5459
  "div",
5401
5460
  {
@@ -5416,27 +5475,21 @@ var SingleForm = ({
5416
5475
  theme: theme.colorMode,
5417
5476
  placeholder: "Target address"
5418
5477
  }
5419
- )) : null, mode === "bridge" /* bridge */ ? /* @__PURE__ */ import_react123.default.createElement("div", { className: `form-item ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement("span", { className: "label" }, "Amount:"), /* @__PURE__ */ import_react123.default.createElement("div", { className: `amount-label-container items ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement(
5478
+ )) : null, /* @__PURE__ */ import_react123.default.createElement("div", { className: `form-item ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement("span", { className: "label" }, "Amount:"), /* @__PURE__ */ import_react123.default.createElement("div", { className: `amount-label-container items ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement(
5420
5479
  "input",
5421
5480
  {
5422
5481
  className: `${theme.colorMode}`,
5423
5482
  type: "text",
5424
- placeholder: "Amount",
5483
+ placeholder: "Enter amount",
5425
5484
  value: amountValue || "",
5426
5485
  onChange: (e) => {
5427
5486
  const value = e.target.value;
5428
5487
  const maskedValue = value.replace(/[^0-9.]/g, "").replace(/(\..*?)\..*/g, "$1").replace(new RegExp(`(\\.\\d{${decimals}})\\d+`), "$1");
5429
- const numericValue = parseFloat(maskedValue);
5430
- if (!isNaN(numericValue) && numericValue > maxValue) {
5431
- setAmountValue(maxValue.toString());
5432
- dispatch(setAmount(maxValue.toString()));
5433
- } else {
5434
- setAmountValue(maskedValue);
5435
- dispatch(setAmount(maskedValue));
5436
- }
5488
+ setAmountValue(maskedValue);
5489
+ dispatch(setAmount(maskedValue));
5437
5490
  }
5438
5491
  }
5439
- ), /* @__PURE__ */ import_react123.default.createElement(
5492
+ ), /* @__PURE__ */ import_react123.default.createElement("div", { className: "max-disclaimer" }, /* @__PURE__ */ import_react123.default.createElement(
5440
5493
  "span",
5441
5494
  {
5442
5495
  className: "max-button",
@@ -5446,22 +5499,7 @@ var SingleForm = ({
5446
5499
  }
5447
5500
  },
5448
5501
  "Max"
5449
- ))) : /* @__PURE__ */ import_react123.default.createElement("div", { className: `form-item ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement("span", { className: "label" }, "Amount:"), /* @__PURE__ */ import_react123.default.createElement("div", { className: `amount-label-container items ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement(
5450
- "input",
5451
- {
5452
- className: `${theme.colorMode}`,
5453
- type: "number",
5454
- placeholder: "Amount",
5455
- value: transactionOption?.amount || amountValue || "",
5456
- onChange: (e) => {
5457
- let _amount = +e.target.value;
5458
- const decimal = sourceNetwork.shortName === "BTC" /* BTC */ || targetNetwork.shortName === "BTC" /* BTC */ ? 8 : 2;
5459
- setAmountValue(e.target.value);
5460
- dispatch(setAmount(_amount.toFixed(decimal)));
5461
- },
5462
- disabled: transactionOption?.amount !== void 0
5463
- }
5464
- ), /* @__PURE__ */ import_react123.default.createElement("div", { className: `coin-wrapper ${theme.colorMode}` }, /* @__PURE__ */ import_react123.default.createElement("div", { className: "icon-wrapper" }, /* @__PURE__ */ import_react123.default.createElement(TargetIcon, null)), targetCurrency))));
5502
+ ), totalFeeUsd !== -1 && /* @__PURE__ */ import_react123.default.createElement("p", null, "Est fees: $ ", totalFeeUsd, " USD")))));
5465
5503
  };
5466
5504
  var SingleForm_default = SingleForm;
5467
5505
 
@@ -5520,6 +5558,7 @@ var import_wallet_adapter_react7 = require("@solana/wallet-adapter-react");
5520
5558
  var import_wallet_adapter_base = require("@solana/wallet-adapter-base");
5521
5559
  var SolanaWalletSelect = () => {
5522
5560
  const theme = (0, import_react_redux44.useSelector)(selectTheme);
5561
+ const sourceChain = (0, import_react_redux44.useSelector)(selectSourceChain);
5523
5562
  const dispatch = (0, import_react_redux44.useDispatch)();
5524
5563
  const sliderRef = (0, import_react124.useRef)();
5525
5564
  const { wallet, wallets, select, connect, connected } = (0, import_wallet_adapter_react7.useWallet)();
@@ -5563,17 +5602,30 @@ var SolanaWalletSelect = () => {
5563
5602
  }, []);
5564
5603
  const handleWalletClick = (0, import_react124.useCallback)(
5565
5604
  (walletName) => {
5605
+ console.log(
5606
+ "SolanaWalletSelect: handleWalletClick: walletName: ",
5607
+ walletName
5608
+ );
5566
5609
  select(walletName);
5567
5610
  },
5568
5611
  [select]
5569
5612
  );
5570
5613
  (0, import_react124.useEffect)(() => {
5571
- if (connected) return;
5572
- if (wallet) {
5573
- connect();
5574
- dispatch(setSolanaConnectModal(false));
5614
+ console.log("SolanaWalletSelect: useEffect: wallet: ", wallet);
5615
+ if (!wallet) return;
5616
+ if (sourceChain.shortName !== "SOL") {
5617
+ console.log("SolanaWalletSelect: source chain is not sol...");
5618
+ return;
5619
+ }
5620
+ if (!connected) {
5621
+ console.log(
5622
+ "SolanaWalletSelect: Wallet exists but not connected, connecting wallet:",
5623
+ wallet
5624
+ );
5625
+ connect().catch((err) => console.error("Solana connect error:", err));
5575
5626
  }
5576
- }, [wallet]);
5627
+ dispatch(setSolanaConnectModal(false));
5628
+ }, [wallet, sourceChain]);
5577
5629
  return /* @__PURE__ */ import_react124.default.createElement("div", { className: `wallet-select` }, /* @__PURE__ */ import_react124.default.createElement("div", { className: "slide-area hide-scrollbar", ref: sliderRef }, /* @__PURE__ */ import_react124.default.createElement("div", { className: "wallet-container" }, detected.map((wallet2, index) => /* @__PURE__ */ import_react124.default.createElement(
5578
5630
  "div",
5579
5631
  {
@@ -5615,7 +5667,7 @@ var AccountDetailsModal = () => {
5615
5667
  solanaWalletDisconnect();
5616
5668
  dispatch(setAccountDetailsModal(false));
5617
5669
  };
5618
- if (sourceChain !== "SOL") return;
5670
+ if (sourceChain.shortName !== "SOL") return;
5619
5671
  return /* @__PURE__ */ import_react125.default.createElement(
5620
5672
  "div",
5621
5673
  {
@@ -5687,7 +5739,7 @@ var AccountDetailsModal2 = () => {
5687
5739
  const { balance: tronBalance } = useGetTrxBalance_default();
5688
5740
  const selectedNetwork = (0, import_react_redux47.useSelector)(selectSourceChain);
5689
5741
  const networkDetails = (0, import_react127.useMemo)(
5690
- () => networkOptions.find(({ id }) => id === selectedNetwork),
5742
+ () => networkOptions.find(({ id }) => id === selectedNetwork.shortName),
5691
5743
  [selectedNetwork]
5692
5744
  );
5693
5745
  const explorerUrl = (0, import_react127.useMemo)(() => {
@@ -5697,7 +5749,7 @@ var AccountDetailsModal2 = () => {
5697
5749
  tronWalletDisconnect();
5698
5750
  dispatch(setAccountDetailsModal(false));
5699
5751
  };
5700
- if (sourcheChain !== "TRX") return;
5752
+ if (sourcheChain.shortName !== "TRX") return;
5701
5753
  return /* @__PURE__ */ import_react127.default.createElement(
5702
5754
  "div",
5703
5755
  {
@@ -5716,7 +5768,7 @@ var AccountDetailsModal2 = () => {
5716
5768
  fill: theme.colorMode === "light" ? "black" : "white"
5717
5769
  }
5718
5770
  )
5719
- )))), /* @__PURE__ */ import_react127.default.createElement("div", { className: "modal-content" }, /* @__PURE__ */ import_react127.default.createElement("div", { className: "summary" }, networkDetails && /* @__PURE__ */ import_react127.default.createElement(networkDetails.icon, { width: 60, height: 60 }), /* @__PURE__ */ import_react127.default.createElement("div", { className: "address" }, /* @__PURE__ */ import_react127.default.createElement("h2", null, getShortenedAddress(walletAddress || "")), /* @__PURE__ */ import_react127.default.createElement(CopyButton_default, { text: walletAddress })), /* @__PURE__ */ import_react127.default.createElement("h3", null, tronBalance, " ", selectedNetwork)), /* @__PURE__ */ import_react127.default.createElement(SecondaryButton_default, { className: "block-explorer" }, /* @__PURE__ */ import_react127.default.createElement(ExternalLink_default, { className: "link", to: explorerUrl }, /* @__PURE__ */ import_react127.default.createElement(Explorer_default, { fill: "#778DA3" }), /* @__PURE__ */ import_react127.default.createElement("p", null, "Block explorer"), /* @__PURE__ */ import_react127.default.createElement(ExternalUrl_default, { fill: "#778DA3" }))), /* @__PURE__ */ import_react127.default.createElement(PrimaryButton_default, { clickHandler: handleDisconnect }, "Disconnect")))
5771
+ )))), /* @__PURE__ */ import_react127.default.createElement("div", { className: "modal-content" }, /* @__PURE__ */ import_react127.default.createElement("div", { className: "summary" }, networkDetails && /* @__PURE__ */ import_react127.default.createElement(networkDetails.icon, { width: 60, height: 60 }), /* @__PURE__ */ import_react127.default.createElement("div", { className: "address" }, /* @__PURE__ */ import_react127.default.createElement("h2", null, getShortenedAddress(walletAddress || "")), /* @__PURE__ */ import_react127.default.createElement(CopyButton_default, { text: walletAddress })), /* @__PURE__ */ import_react127.default.createElement("h3", null, tronBalance, " ", selectedNetwork.shortName)), /* @__PURE__ */ import_react127.default.createElement(SecondaryButton_default, { className: "block-explorer" }, /* @__PURE__ */ import_react127.default.createElement(ExternalLink_default, { className: "link", to: explorerUrl }, /* @__PURE__ */ import_react127.default.createElement(Explorer_default, { fill: "#778DA3" }), /* @__PURE__ */ import_react127.default.createElement("p", null, "Block explorer"), /* @__PURE__ */ import_react127.default.createElement(ExternalUrl_default, { fill: "#778DA3" }))), /* @__PURE__ */ import_react127.default.createElement(PrimaryButton_default, { clickHandler: handleDisconnect }, "Disconnect")))
5720
5772
  );
5721
5773
  };
5722
5774
  var AccountDetailsModal_default2 = AccountDetailsModal2;
@@ -5847,7 +5899,8 @@ var useValidateTransaction = ({
5847
5899
  sourceCompliant,
5848
5900
  targetCompliant,
5849
5901
  mode,
5850
- pools
5902
+ pools,
5903
+ formStep
5851
5904
  }) => {
5852
5905
  const maxValue = (0, import_react130.useMemo)(() => {
5853
5906
  if (!balance) return 0;
@@ -5895,24 +5948,22 @@ var useValidateTransaction = ({
5895
5948
  };
5896
5949
  }
5897
5950
  }
5898
- console.log("useValidate:amount: ", amount);
5899
- console.log("useValidate:maxValue ", maxValue);
5900
- if (+amount < totalFeeUsd) {
5951
+ if (+amount > balance && formStep === 0) {
5901
5952
  return {
5902
- error: "ValidationError" /* Error */,
5903
- message: "Fees are greater than the amount to transfer"
5953
+ error: "Warning" /* Warning */,
5954
+ message: "The entered amount exceeds your available balance. This transaction is likely to fail. Proceed with caution."
5904
5955
  };
5905
5956
  }
5906
- if (+amount > maxValue) {
5957
+ if (+amount > maxValue && formStep === 0) {
5907
5958
  return {
5908
- error: "ValidationError" /* Error */,
5909
- message: `Amount exceeds the maximum allowed value [$${maxValue}]`
5959
+ error: "Warning" /* Warning */,
5960
+ message: "The entered amount exceeds the maximum transferable amount (available balance minus transaction fees). Reduce the amount or allow fees to be deducted from the transferred amount. Otherwise, your transaction may fail. Proceed with caution."
5910
5961
  };
5911
5962
  }
5912
- if (balance < +amount) {
5963
+ if (+amount < totalFeeUsd && formStep === 0) {
5913
5964
  return {
5914
- error: "ValidationError" /* Error */,
5915
- message: "Insufficient balance for the transaction"
5965
+ error: "Warning" /* Warning */,
5966
+ message: "Transaction fees exceed the transfer amount. This may result in an ineffective transaction. Proceed with caution."
5916
5967
  };
5917
5968
  }
5918
5969
  if (!isApproved && isSubmitting) {
@@ -5957,7 +6008,7 @@ var useSubmitTransaction = ({
5957
6008
  }) => {
5958
6009
  const dispatch = (0, import_react_redux50.useDispatch)();
5959
6010
  const [isSubmitting, setSubmitting] = (0, import_react131.useState)(false);
5960
- const submitTransaction = async () => {
6011
+ const submitTransaction = async (signature) => {
5961
6012
  try {
5962
6013
  setSubmitting(true);
5963
6014
  const params = JSON.stringify({
@@ -5974,7 +6025,8 @@ var useSubmitTransaction = ({
5974
6025
  htlcCreationVout: 0,
5975
6026
  htlcExpirationTimestamp: "0",
5976
6027
  htlcVersion: "",
5977
- senderPubKey: ""
6028
+ senderPubKey: "",
6029
+ options: signature
5978
6030
  });
5979
6031
  const transactionResult = await fetchWrapper.post(
5980
6032
  `${backendUrl}/submit`,
@@ -6066,6 +6118,31 @@ function useDisconnectWallet4() {
6066
6118
  return mainConnection ? { disconnectWallet: mainConnection.disconnectWallet } : defaultDisconnect;
6067
6119
  }
6068
6120
 
6121
+ // src/components/reusable/WarningModal.tsx
6122
+ var import_react132 = __toESM(require("react"), 1);
6123
+ var WarningModal = ({
6124
+ message,
6125
+ onAcknowledge,
6126
+ onCancel
6127
+ }) => {
6128
+ return /* @__PURE__ */ import_react132.default.createElement("div", { className: "warning-modal-overlay" }, /* @__PURE__ */ import_react132.default.createElement("div", { className: "warning-modal" }, /* @__PURE__ */ import_react132.default.createElement("h3", null, "Warning"), /* @__PURE__ */ import_react132.default.createElement("p", null, message), /* @__PURE__ */ import_react132.default.createElement("div", { className: "warning-modal-buttons" }, /* @__PURE__ */ import_react132.default.createElement(
6129
+ SecondaryButton_default,
6130
+ {
6131
+ className: "warning-modal-cancel",
6132
+ clickHandler: onCancel
6133
+ },
6134
+ "Cancel"
6135
+ ), /* @__PURE__ */ import_react132.default.createElement(
6136
+ PrimaryButton_default,
6137
+ {
6138
+ className: "warning-modal-acknowledge",
6139
+ clickHandler: onAcknowledge
6140
+ },
6141
+ "Acknowledge"
6142
+ ))));
6143
+ };
6144
+ var WarningModal_default = WarningModal;
6145
+
6069
6146
  // src/components/TransferWidget.tsx
6070
6147
  var TransferWidget = ({
6071
6148
  theme,
@@ -6074,8 +6151,9 @@ var TransferWidget = ({
6074
6151
  paymentTitleOption
6075
6152
  }) => {
6076
6153
  const dispatch = (0, import_react_redux51.useDispatch)();
6077
- const mainRef = (0, import_react132.useRef)(null);
6078
- const [formStep, setFormStep] = (0, import_react132.useState)(0);
6154
+ const mainRef = (0, import_react133.useRef)(null);
6155
+ const [formStep, setFormStep] = (0, import_react133.useState)(0);
6156
+ const [warningModalOpen, setWarningModalOpen] = (0, import_react133.useState)(null);
6079
6157
  const dAppOption = (0, import_react_redux51.useSelector)(selectDappOption);
6080
6158
  const mode = (0, import_react_redux51.useSelector)(selectMode);
6081
6159
  const transactionOption = (0, import_react_redux51.useSelector)(selectTransactionOption);
@@ -6098,15 +6176,15 @@ var TransferWidget = ({
6098
6176
  const networkOptions3 = (0, import_react_redux51.useSelector)(selectNetworkOption);
6099
6177
  const feeDeduct = (0, import_react_redux51.useSelector)(selectFeeDeduct);
6100
6178
  const { keplrHandler, closeHandler } = useKimaContext();
6101
- const [isCancellingApprove, setCancellingApprove] = (0, import_react132.useState)(false);
6102
- const [isApproving, setApproving] = (0, import_react132.useState)(false);
6103
- const [isSigning, setSigning] = (0, import_react132.useState)(false);
6179
+ const [isCancellingApprove, setCancellingApprove] = (0, import_react133.useState)(false);
6180
+ const [isApproving, setApproving] = (0, import_react133.useState)(false);
6181
+ const [isSigning, setSigning] = (0, import_react133.useState)(false);
6104
6182
  const pendingTxs = (0, import_react_redux51.useSelector)(selectPendingTxs);
6105
6183
  const networks = (0, import_react_redux51.useSelector)(selectNetworks);
6106
6184
  const { width: windowWidth } = useWidth_default();
6107
6185
  const { disconnectWallet } = useDisconnectWallet4();
6108
6186
  const { balance } = useBalance2();
6109
- const { allowance, isApproved, approve, decimals } = useAllowance({
6187
+ const { allowance, isApproved, approve, decimals, signMessage } = useAllowance({
6110
6188
  setApproving,
6111
6189
  setCancellingApprove
6112
6190
  });
@@ -6137,7 +6215,8 @@ var TransferWidget = ({
6137
6215
  compliantOption,
6138
6216
  mode,
6139
6217
  pools,
6140
- feeDeduct
6218
+ feeDeduct,
6219
+ formStep
6141
6220
  });
6142
6221
  const { submitTransaction, isSubmitting } = useSubmitTransaction_default({
6143
6222
  amount: BigInt(submitAmount ?? "0"),
@@ -6154,7 +6233,7 @@ var TransferWidget = ({
6154
6233
  const handleSubmit = async () => {
6155
6234
  const { error, message: validationMessage } = validate(true);
6156
6235
  if (error === "ValidationError" /* Error */) {
6157
- return import_react_hot_toast5.toast.error(validationMessage, { icon: /* @__PURE__ */ import_react132.default.createElement(Error_default, null) });
6236
+ return import_react_hot_toast5.toast.error(validationMessage, { icon: /* @__PURE__ */ import_react133.default.createElement(Error_default, null) });
6158
6237
  }
6159
6238
  if (error === "ApprovalNeeded" /* ApprovalNeeded */) {
6160
6239
  return approve();
@@ -6163,18 +6242,30 @@ var TransferWidget = ({
6163
6242
  keplrHandler && keplrHandler(sourceAddress);
6164
6243
  return;
6165
6244
  }
6166
- const { success, message: submitMessage } = await submitTransaction();
6167
- if (!success) return import_react_hot_toast5.toast.error(submitMessage, { icon: /* @__PURE__ */ import_react132.default.createElement(Error_default, null) });
6245
+ const signature = await signMessage?.({
6246
+ targetAddress,
6247
+ targetChain: targetChain.shortName,
6248
+ targetSymbol: targetCurrency
6249
+ });
6250
+ const { success, message: submitMessage } = await submitTransaction(
6251
+ JSON.stringify({ signature })
6252
+ );
6253
+ if (!success) return import_react_hot_toast5.toast.error(submitMessage, { icon: /* @__PURE__ */ import_react133.default.createElement(Error_default, null) });
6168
6254
  };
6169
6255
  const onNext = () => {
6170
- const { error, message } = validate();
6256
+ const { error, message: validationMessage } = validate();
6257
+ if (error === "Warning" /* Warning */ && formStep === 0) {
6258
+ console.log("validationError: Warning: ", validationMessage);
6259
+ setWarningModalOpen({ message: validationMessage });
6260
+ return;
6261
+ }
6171
6262
  if (error !== "ValidationError" /* Error */ && !formStep) {
6172
6263
  return setFormStep(1);
6173
6264
  }
6174
6265
  if (error !== "ValidationError" /* Error */ && formStep > 0) {
6175
6266
  return handleSubmit();
6176
6267
  }
6177
- import_react_hot_toast5.toast.error(message, { icon: /* @__PURE__ */ import_react132.default.createElement(Error_default, null) });
6268
+ import_react_hot_toast5.toast.error(validationMessage, { icon: /* @__PURE__ */ import_react133.default.createElement(Error_default, null) });
6178
6269
  mainRef.current?.click();
6179
6270
  };
6180
6271
  const onBack = () => {
@@ -6231,10 +6322,10 @@ var TransferWidget = ({
6231
6322
  }
6232
6323
  await disconnectWallet();
6233
6324
  };
6234
- (0, import_react132.useEffect)(() => {
6325
+ (0, import_react133.useEffect)(() => {
6235
6326
  dispatch(setTheme(theme));
6236
6327
  }, [theme]);
6237
- return /* @__PURE__ */ import_react132.default.createElement(
6328
+ return /* @__PURE__ */ import_react133.default.createElement(
6238
6329
  "div",
6239
6330
  {
6240
6331
  className: `kima-card ${theme.colorMode}`,
@@ -6242,14 +6333,28 @@ var TransferWidget = ({
6242
6333
  background: theme.colorMode === "light" /* light */ ? theme.backgroundColorLight : theme.backgroundColorDark
6243
6334
  }
6244
6335
  },
6245
- mode === "payment" /* payment */ && !transactionOption && /* @__PURE__ */ import_react132.default.createElement("h2", { className: "invalid-option-banner" }, "We're unable to process your payment. Please ensure the necessary transaction details are provided. Contact support if the issue persists."),
6246
- /* @__PURE__ */ import_react132.default.createElement("div", { className: "transfer-card" }, /* @__PURE__ */ import_react132.default.createElement("div", { className: "kima-card-header" }, /* @__PURE__ */ import_react132.default.createElement("div", { className: "topbar" }, /* @__PURE__ */ import_react132.default.createElement("div", { className: "title" }, /* @__PURE__ */ import_react132.default.createElement("h3", null, formStep === 0 ? titleOption?.initialTitle ? titleOption.initialTitle : mode === "payment" /* payment */ ? "New Purchase" : "New Transfer" : titleOption?.confirmTitle ? titleOption.confirmTitle : mode === "payment" /* payment */ ? "Confirm Purchase" : "Transfer Details")), /* @__PURE__ */ import_react132.default.createElement("div", { className: "control-buttons" }, pendingTxs > 0 ? /* @__PURE__ */ import_react132.default.createElement(TxButton_default, { theme }) : null, /* @__PURE__ */ import_react132.default.createElement(
6336
+ warningModalOpen && /* @__PURE__ */ import_react133.default.createElement(
6337
+ WarningModal_default,
6338
+ {
6339
+ message: warningModalOpen.message,
6340
+ onAcknowledge: () => {
6341
+ setWarningModalOpen(null);
6342
+ setFormStep(1);
6343
+ },
6344
+ onCancel: () => {
6345
+ setWarningModalOpen(null);
6346
+ setFormStep(0);
6347
+ }
6348
+ }
6349
+ ),
6350
+ mode === "payment" /* payment */ && !transactionOption && /* @__PURE__ */ import_react133.default.createElement("h2", { className: "invalid-option-banner" }, "We're unable to process your payment. Please ensure the necessary transaction details are provided. Contact support if the issue persists."),
6351
+ /* @__PURE__ */ import_react133.default.createElement("div", { className: "transfer-card" }, /* @__PURE__ */ import_react133.default.createElement("div", { className: "kima-card-header" }, /* @__PURE__ */ import_react133.default.createElement("div", { className: "topbar" }, /* @__PURE__ */ import_react133.default.createElement("div", { className: "title" }, /* @__PURE__ */ import_react133.default.createElement("h3", null, formStep === 0 ? titleOption?.initialTitle ? titleOption.initialTitle : mode === "payment" /* payment */ ? "New Purchase" : "New Transfer" : titleOption?.confirmTitle ? titleOption.confirmTitle : mode === "payment" /* payment */ ? "Confirm Purchase" : "Transfer Details")), /* @__PURE__ */ import_react133.default.createElement("div", { className: "control-buttons" }, pendingTxs > 0 ? /* @__PURE__ */ import_react133.default.createElement(TxButton_default, { theme }) : null, /* @__PURE__ */ import_react133.default.createElement(
6247
6352
  ExternalLink_default,
6248
6353
  {
6249
6354
  to: helpURL ? helpURL : "https://docs.kima.network/kima-network/try-kima-with-the-demo-app"
6250
6355
  },
6251
- /* @__PURE__ */ import_react132.default.createElement("div", { className: "menu-button" }, "I need help")
6252
- ), formStep === 0 && mode !== "payment" /* payment */ && /* @__PURE__ */ import_react132.default.createElement(
6356
+ /* @__PURE__ */ import_react133.default.createElement("div", { className: "menu-button" }, "I need help")
6357
+ ), formStep === 0 && mode !== "payment" /* payment */ && /* @__PURE__ */ import_react133.default.createElement(
6253
6358
  "button",
6254
6359
  {
6255
6360
  className: "reset-button",
@@ -6257,7 +6362,7 @@ var TransferWidget = ({
6257
6362
  disabled: isApproving || isSubmitting || isSigning
6258
6363
  },
6259
6364
  "Reset"
6260
- ))), mode === "payment" /* payment */ && paymentTitleOption?.title && /* @__PURE__ */ import_react132.default.createElement("h4", { className: "subtitle" }, paymentTitleOption.title)), /* @__PURE__ */ import_react132.default.createElement("div", { className: "kima-card-content", ref: mainRef }, formStep === 0 ? /* @__PURE__ */ import_react132.default.createElement(
6365
+ ))), mode === "payment" /* payment */ && paymentTitleOption?.title && /* @__PURE__ */ import_react133.default.createElement("h4", { className: "subtitle" }, paymentTitleOption.title)), /* @__PURE__ */ import_react133.default.createElement("div", { className: "kima-card-content", ref: mainRef }, formStep === 0 ? /* @__PURE__ */ import_react133.default.createElement(
6261
6366
  SingleForm_default,
6262
6367
  {
6263
6368
  ...{
@@ -6275,7 +6380,7 @@ var TransferWidget = ({
6275
6380
  isCancellingApprove
6276
6381
  }
6277
6382
  }
6278
- ) : /* @__PURE__ */ import_react132.default.createElement(
6383
+ ) : /* @__PURE__ */ import_react133.default.createElement(
6279
6384
  ConfirmDetails_default,
6280
6385
  {
6281
6386
  ...{
@@ -6294,12 +6399,12 @@ var TransferWidget = ({
6294
6399
  isApproved
6295
6400
  }
6296
6401
  }
6297
- )), /* @__PURE__ */ import_react132.default.createElement(
6402
+ )), /* @__PURE__ */ import_react133.default.createElement(
6298
6403
  "div",
6299
6404
  {
6300
6405
  className: `kima-card-footer ${mode === "bridge" /* bridge */ && formStep !== 0 && "confirm"}`
6301
6406
  },
6302
- /* @__PURE__ */ import_react132.default.createElement("div", { className: `button-group` }, formStep !== 0 && /* @__PURE__ */ import_react132.default.createElement(
6407
+ /* @__PURE__ */ import_react133.default.createElement("div", { className: `button-group` }, formStep !== 0 && /* @__PURE__ */ import_react133.default.createElement(
6303
6408
  SecondaryButton_default,
6304
6409
  {
6305
6410
  clickHandler: onBack,
@@ -6307,7 +6412,7 @@ var TransferWidget = ({
6307
6412
  disabled: isApproving || isSubmitting || isSigning
6308
6413
  },
6309
6414
  formStep > 0 ? "Back" : "Cancel"
6310
- ), allowance > 0 && formStep !== 0 ? /* @__PURE__ */ import_react132.default.createElement(
6415
+ ), allowance > 0 && formStep !== 0 ? /* @__PURE__ */ import_react133.default.createElement(
6311
6416
  SecondaryButton_default,
6312
6417
  {
6313
6418
  clickHandler: onCancelApprove,
@@ -6316,7 +6421,7 @@ var TransferWidget = ({
6316
6421
  disabled: isCancellingApprove || isApproving || isSubmitting || isSigning
6317
6422
  },
6318
6423
  isCancellingApprove ? "Cancelling Approval" : "Cancel Approve"
6319
- ) : null, /* @__PURE__ */ import_react132.default.createElement(
6424
+ ) : null, /* @__PURE__ */ import_react133.default.createElement(
6320
6425
  PrimaryButton_default,
6321
6426
  {
6322
6427
  clickHandler: onNext,
@@ -6325,7 +6430,7 @@ var TransferWidget = ({
6325
6430
  },
6326
6431
  getButtonLabel()
6327
6432
  ))
6328
- ), /* @__PURE__ */ import_react132.default.createElement(SolanaWalletConnectModal_default, null), /* @__PURE__ */ import_react132.default.createElement(TronWalletConnectModal_default, null), /* @__PURE__ */ import_react132.default.createElement(
6433
+ ), /* @__PURE__ */ import_react133.default.createElement(SolanaWalletConnectModal_default, null), /* @__PURE__ */ import_react133.default.createElement(TronWalletConnectModal_default, null), /* @__PURE__ */ import_react133.default.createElement(
6329
6434
  import_react_hot_toast5.Toaster,
6330
6435
  {
6331
6436
  position: "top-right",
@@ -6350,12 +6455,12 @@ var TransferWidget = ({
6350
6455
  }
6351
6456
  }
6352
6457
  }
6353
- ), /* @__PURE__ */ import_react132.default.createElement("div", { className: "floating-footer" }, /* @__PURE__ */ import_react132.default.createElement("div", { className: `items ${theme.colorMode}` }, /* @__PURE__ */ import_react132.default.createElement("span", null, "Powered by"), /* @__PURE__ */ import_react132.default.createElement(FooterLogo_default, { width: 50, fill: "black" }), /* @__PURE__ */ import_react132.default.createElement("strong", null, "Network"))))
6458
+ ), /* @__PURE__ */ import_react133.default.createElement("div", { className: "floating-footer" }, /* @__PURE__ */ import_react133.default.createElement("div", { className: `items ${theme.colorMode}` }, /* @__PURE__ */ import_react133.default.createElement("span", null, "Powered by"), /* @__PURE__ */ import_react133.default.createElement(FooterLogo_default, { width: 50, fill: "black" }), /* @__PURE__ */ import_react133.default.createElement("strong", null, "Network"))))
6354
6459
  );
6355
6460
  };
6356
6461
 
6357
6462
  // src/components/KimaWidgetWrapper.tsx
6358
- var import_react134 = require("@reown/appkit/react");
6463
+ var import_react135 = require("@reown/appkit/react");
6359
6464
  var KimaWidgetWrapper = ({
6360
6465
  mode,
6361
6466
  txId,
@@ -6372,12 +6477,12 @@ var KimaWidgetWrapper = ({
6372
6477
  const { kimaBackendUrl } = useKimaContext();
6373
6478
  const submitted = (0, import_react_redux52.useSelector)(selectSubmitted);
6374
6479
  const dispatch = (0, import_react_redux52.useDispatch)();
6375
- const { setThemeMode, setThemeVariables } = (0, import_react134.useAppKitTheme)();
6480
+ const { setThemeMode, setThemeVariables } = (0, import_react135.useAppKitTheme)();
6376
6481
  const { data: chainData } = useChainData(kimaBackendUrl);
6377
6482
  const { data: envOptions } = useGetEnvOptions({ kimaBackendUrl });
6378
6483
  const networkOption = envOptions?.env;
6379
6484
  const kimaExplorer = envOptions?.kimaExplorer || "https://explorer.sardis.kima.network";
6380
- (0, import_react133.useEffect)(() => {
6485
+ (0, import_react134.useEffect)(() => {
6381
6486
  dispatch(setTheme(theme));
6382
6487
  setThemeMode(theme.colorMode === "light" /* light */ ? "light" : "dark");
6383
6488
  setThemeVariables({
@@ -6420,11 +6525,11 @@ var KimaWidgetWrapper = ({
6420
6525
  dispatch(setSubmitted(false));
6421
6526
  }
6422
6527
  }, [theme, transactionOption, mode, networkOption, chainData]);
6423
- (0, import_react133.useEffect)(() => {
6528
+ (0, import_react134.useEffect)(() => {
6424
6529
  if (!chainData?.length) return;
6425
6530
  indexPluginsByChain(chainData);
6426
6531
  }, [chainData]);
6427
- return submitted ? /* @__PURE__ */ import_react133.default.createElement(TransactionWidget, { theme }) : /* @__PURE__ */ import_react133.default.createElement(
6532
+ return submitted ? /* @__PURE__ */ import_react134.default.createElement(TransactionWidget, { theme }) : /* @__PURE__ */ import_react134.default.createElement(
6428
6533
  TransferWidget,
6429
6534
  {
6430
6535
  theme,
@@ -6457,13 +6562,13 @@ var KimaTransactionWidget = ({
6457
6562
  kimaBackendUrl
6458
6563
  });
6459
6564
  const { data: chainData, isLoading: isLoadingChainData } = useChainData(kimaBackendUrl);
6460
- (0, import_react135.useEffect)(() => {
6565
+ (0, import_react136.useEffect)(() => {
6461
6566
  if (!isLoadingChainData && chainData) {
6462
6567
  dispatch(setSourceChain(chainData[0]));
6463
6568
  dispatch(setTargetChain(chainData[1]));
6464
6569
  }
6465
6570
  }, [chainData]);
6466
- return isLoadingEnvs || isLoadingChainData ? /* @__PURE__ */ import_react135.default.createElement(ring_default, null) : /* @__PURE__ */ import_react135.default.createElement(
6571
+ return isLoadingEnvs || isLoadingChainData ? /* @__PURE__ */ import_react136.default.createElement(ring_default, null) : /* @__PURE__ */ import_react136.default.createElement(
6467
6572
  KimaWidgetWrapper_default,
6468
6573
  {
6469
6574
  ...{