@bze/bze-ui-kit 1.0.12 → 1.0.14

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.js CHANGED
@@ -3616,34 +3616,34 @@ var registerBzeEncoders = (client) => {
3616
3616
 
3617
3617
  // src/hooks/useSigningClient.ts
3618
3618
  var useSigningClient = ({ chainName }) => {
3619
- const { getSigningClient, signingClientError, wallet, chain } = (0, import_react4.useChain)(chainName != null ? chainName : getChainName());
3619
+ const { getSigningClient, signingClientError, wallet, chain, address } = (0, import_react4.useChain)(chainName != null ? chainName : getChainName());
3620
3620
  const [signingClient, setSigningClient] = (0, import_react3.useState)(null);
3621
3621
  const [isSigningClientReady, setIsSigningClientReady] = (0, import_react3.useState)(false);
3622
- const initializedForWallet = (0, import_react3.useRef)(null);
3622
+ const initializedForAddress = (0, import_react3.useRef)(null);
3623
3623
  const createSigningClient = (0, import_react3.useCallback)(async () => {
3624
3624
  return getSigningClient();
3625
3625
  }, [getSigningClient]);
3626
3626
  (0, import_react3.useEffect)(() => {
3627
- if (!wallet || !chain) {
3628
- if (initializedForWallet.current !== null) {
3627
+ if (!wallet || !chain || !address) {
3628
+ if (initializedForAddress.current !== null) {
3629
3629
  setSigningClient(null);
3630
3630
  setIsSigningClientReady(false);
3631
- initializedForWallet.current = null;
3631
+ initializedForAddress.current = null;
3632
3632
  }
3633
3633
  return;
3634
3634
  }
3635
- if (initializedForWallet.current === wallet) return;
3635
+ if (initializedForAddress.current === address) return;
3636
3636
  const load = async () => {
3637
3637
  const client = await createSigningClient();
3638
3638
  if (client) {
3639
3639
  registerBzeEncoders(client);
3640
3640
  setSigningClient(client);
3641
3641
  setIsSigningClientReady(true);
3642
- initializedForWallet.current = wallet;
3642
+ initializedForAddress.current = address;
3643
3643
  }
3644
3644
  };
3645
3645
  load();
3646
- }, [wallet, chain, createSigningClient]);
3646
+ }, [wallet, chain, address, createSigningClient]);
3647
3647
  return {
3648
3648
  signingClientError,
3649
3649
  signingClient,
@@ -3652,15 +3652,37 @@ var useSigningClient = ({ chainName }) => {
3652
3652
  };
3653
3653
 
3654
3654
  // src/hooks/useWalletHealthCheck.ts
3655
- var import_react5 = require("react");
3656
- var import_react6 = require("@interchain-kit/react");
3655
+ var import_react6 = require("react");
3656
+ var import_react7 = require("@interchain-kit/react");
3657
3657
  var import_core = require("@interchain-kit/core");
3658
+
3659
+ // src/components/toaster.tsx
3660
+ var import_react5 = require("@chakra-ui/react");
3661
+ var import_jsx_runtime = require("react/jsx-runtime");
3662
+ var toaster = (0, import_react5.createToaster)({
3663
+ placement: "top-end",
3664
+ pauseOnPageIdle: true
3665
+ });
3666
+ var Toaster = () => {
3667
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Toaster, { toaster, insetInline: { mdDown: "4" }, children: (toast) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react5.Toast.Root, { width: { md: "sm" }, children: [
3668
+ toast.type === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Spinner, { size: "sm", color: "blue.solid" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Toast.Indicator, {}),
3669
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react5.Stack, { gap: "1", flex: "1", maxWidth: "100%", children: [
3670
+ toast.title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Toast.Title, { children: toast.title }),
3671
+ toast.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Toast.Description, { children: toast.description })
3672
+ ] }),
3673
+ toast.action && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Toast.ActionTrigger, { children: toast.action.label }),
3674
+ toast.closable && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react5.Toast.CloseTrigger, {})
3675
+ ] }) }) });
3676
+ };
3677
+
3678
+ // src/hooks/useWalletHealthCheck.ts
3658
3679
  var SIGNING_CLIENT_TIMEOUT_MS = 5e3;
3659
3680
  var useWalletHealthCheck = (chainName) => {
3660
- const { status, getSigningClient, disconnect } = (0, import_react6.useChain)(chainName != null ? chainName : getChainName());
3661
- (0, import_react5.useEffect)(() => {
3681
+ const { status, getSigningClient, disconnect, address } = (0, import_react7.useChain)(chainName != null ? chainName : getChainName());
3682
+ (0, import_react6.useEffect)(() => {
3662
3683
  if (status !== import_core.WalletState.Connected) return;
3663
3684
  const validate = async () => {
3685
+ var _a2;
3664
3686
  try {
3665
3687
  const client = await Promise.race([
3666
3688
  getSigningClient(),
@@ -3669,9 +3691,40 @@ var useWalletHealthCheck = (chainName) => {
3669
3691
  )
3670
3692
  ]);
3671
3693
  if (!client) {
3694
+ const msg = "[useWalletHealthCheck] Signing client unavailable or timed out \u2014 wallet may be locked. Disconnecting.";
3695
+ console.error(msg);
3696
+ toaster.create({
3697
+ title: "Wallet disconnected",
3698
+ description: "Could not reach your wallet extension. Please reconnect.",
3699
+ type: "error",
3700
+ duration: 8e3,
3701
+ closable: true
3702
+ });
3672
3703
  disconnect();
3704
+ return;
3673
3705
  }
3674
- } catch (e) {
3706
+ const accounts = await ((_a2 = client.getAccounts) == null ? void 0 : _a2.call(client));
3707
+ if ((accounts == null ? void 0 : accounts.length) > 0 && accounts[0].address !== address) {
3708
+ const msg = `[useWalletHealthCheck] Address mismatch \u2014 interchain-kit cached "${address}" but signing client reports "${accounts[0].address}". Wallet was likely switched outside the UI. Disconnecting.`;
3709
+ console.error(msg);
3710
+ toaster.create({
3711
+ title: "Wallet account changed",
3712
+ description: "Your wallet account changed since your last visit. Please reconnect.",
3713
+ type: "warning",
3714
+ duration: 8e3,
3715
+ closable: true
3716
+ });
3717
+ disconnect();
3718
+ }
3719
+ } catch (err) {
3720
+ console.error("[useWalletHealthCheck] Error validating wallet connection:", err);
3721
+ toaster.create({
3722
+ title: "Wallet connection error",
3723
+ description: "Could not verify your wallet connection. Please reconnect.",
3724
+ type: "error",
3725
+ duration: 8e3,
3726
+ closable: true
3727
+ });
3675
3728
  disconnect();
3676
3729
  }
3677
3730
  };
@@ -3680,12 +3733,12 @@ var useWalletHealthCheck = (chainName) => {
3680
3733
  };
3681
3734
 
3682
3735
  // src/hooks/usePrices.ts
3683
- var import_react7 = require("react");
3736
+ var import_react8 = require("react");
3684
3737
  function useAssetPrice(denom) {
3685
3738
  const { usdPricesMap, marketsDataMap, isLoadingPrices } = useAssetsContext();
3686
- const usdDenom = (0, import_react7.useMemo)(() => getUSDCDenom(), []);
3687
- const bzeDenom = (0, import_react7.useMemo)(() => getChainNativeAssetDenom(), []);
3688
- const change = (0, import_react7.useMemo)(() => {
3739
+ const usdDenom = (0, import_react8.useMemo)(() => getUSDCDenom(), []);
3740
+ const bzeDenom = (0, import_react8.useMemo)(() => getChainNativeAssetDenom(), []);
3741
+ const change = (0, import_react8.useMemo)(() => {
3689
3742
  const marketData = marketsDataMap.get(createMarketId(denom, usdDenom));
3690
3743
  if (marketData) {
3691
3744
  return marketData.change;
@@ -3696,20 +3749,20 @@ function useAssetPrice(denom) {
3696
3749
  }
3697
3750
  return 0;
3698
3751
  }, [marketsDataMap, denom, usdDenom, bzeDenom]);
3699
- const price = (0, import_react7.useMemo)(() => {
3752
+ const price = (0, import_react8.useMemo)(() => {
3700
3753
  const zeroBN = toBigNumber(0);
3701
3754
  if (denom === "") return zeroBN;
3702
3755
  if (denom === usdDenom) return toBigNumber(1);
3703
3756
  return usdPricesMap.get(denom) || zeroBN;
3704
3757
  }, [usdPricesMap, denom, usdDenom]);
3705
- const totalUsdValue = (0, import_react7.useCallback)((amount) => {
3758
+ const totalUsdValue = (0, import_react8.useCallback)((amount) => {
3706
3759
  return price.multipliedBy(amount);
3707
3760
  }, [price]);
3708
- const uAmountUsdValue = (0, import_react7.useCallback)((amount, decimals) => {
3761
+ const uAmountUsdValue = (0, import_react8.useCallback)((amount, decimals) => {
3709
3762
  return totalUsdValue(uAmountToBigNumberAmount(amount, decimals));
3710
3763
  }, [totalUsdValue]);
3711
- const isUSDC = (0, import_react7.useMemo)(() => denom === usdDenom, [denom, usdDenom]);
3712
- const hasPrice = (0, import_react7.useMemo)(() => price.gt(0), [price]);
3764
+ const isUSDC = (0, import_react8.useMemo)(() => denom === usdDenom, [denom, usdDenom]);
3765
+ const hasPrice = (0, import_react8.useMemo)(() => price.gt(0), [price]);
3713
3766
  return {
3714
3767
  price,
3715
3768
  change,
@@ -3722,36 +3775,36 @@ function useAssetPrice(denom) {
3722
3775
  }
3723
3776
 
3724
3777
  // src/hooks/useSettings.ts
3725
- var import_react8 = require("react");
3778
+ var import_react9 = require("react");
3726
3779
  function useSettings() {
3727
- const [settings, setSettingsState] = (0, import_react8.useState)(DEFAULT_SETTINGS);
3728
- const [isLoaded, setIsLoaded] = (0, import_react8.useState)(false);
3729
- (0, import_react8.useEffect)(() => {
3780
+ const [settings, setSettingsState] = (0, import_react9.useState)(DEFAULT_SETTINGS);
3781
+ const [isLoaded, setIsLoaded] = (0, import_react9.useState)(false);
3782
+ (0, import_react9.useEffect)(() => {
3730
3783
  setSettingsState(getSettings());
3731
3784
  setIsLoaded(true);
3732
3785
  }, []);
3733
- const saveSettings = (0, import_react8.useCallback)((newSettings) => {
3786
+ const saveSettings = (0, import_react9.useCallback)((newSettings) => {
3734
3787
  setSettings(newSettings);
3735
3788
  setSettingsState(newSettings);
3736
3789
  return true;
3737
3790
  }, []);
3738
- const updateEndpoints = (0, import_react8.useCallback)((endpoints) => {
3791
+ const updateEndpoints = (0, import_react9.useCallback)((endpoints) => {
3739
3792
  const newSettings = __spreadProps(__spreadValues({}, settings), { endpoints });
3740
3793
  return saveSettings(newSettings);
3741
3794
  }, [settings, saveSettings]);
3742
- const updatePreferredFeeDenom = (0, import_react8.useCallback)((preferredFeeDenom) => {
3795
+ const updatePreferredFeeDenom = (0, import_react9.useCallback)((preferredFeeDenom) => {
3743
3796
  const newSettings = __spreadProps(__spreadValues({}, settings), { preferredFeeDenom });
3744
3797
  return saveSettings(newSettings);
3745
3798
  }, [settings, saveSettings]);
3746
- const resetToDefaults = (0, import_react8.useCallback)(() => {
3799
+ const resetToDefaults = (0, import_react9.useCallback)(() => {
3747
3800
  saveSettings(DEFAULT_SETTINGS);
3748
3801
  return true;
3749
3802
  }, [saveSettings]);
3750
- const getEndpoints = (0, import_react8.useCallback)(() => {
3803
+ const getEndpoints = (0, import_react9.useCallback)(() => {
3751
3804
  return settings.endpoints;
3752
3805
  }, [settings.endpoints]);
3753
- const defaultSettings = (0, import_react8.useMemo)(() => DEFAULT_SETTINGS, []);
3754
- const feeDenom = (0, import_react8.useMemo)(() => settings.preferredFeeDenom || getChainNativeAssetDenom(), [settings.preferredFeeDenom]);
3806
+ const defaultSettings = (0, import_react9.useMemo)(() => DEFAULT_SETTINGS, []);
3807
+ const feeDenom = (0, import_react9.useMemo)(() => settings.preferredFeeDenom || getChainNativeAssetDenom(), [settings.preferredFeeDenom]);
3755
3808
  return {
3756
3809
  settings,
3757
3810
  isLoaded,
@@ -3767,14 +3820,14 @@ function useSettings() {
3767
3820
 
3768
3821
  // src/hooks/useBalances.ts
3769
3822
  var import_bignumber8 = __toESM(require("bignumber.js"));
3770
- var import_react9 = require("react");
3823
+ var import_react10 = require("react");
3771
3824
  function useBalances() {
3772
3825
  const { balancesMap, isLoading, assetsMap, usdPricesMap } = useAssetsContext();
3773
- const balances = (0, import_react9.useMemo)(() => Array.from(balancesMap.values()), [balancesMap]);
3774
- const getBalanceByDenom = (0, import_react9.useCallback)((denom) => {
3826
+ const balances = (0, import_react10.useMemo)(() => Array.from(balancesMap.values()), [balancesMap]);
3827
+ const getBalanceByDenom = (0, import_react10.useCallback)((denom) => {
3775
3828
  return balancesMap.get(denom) || { denom, amount: (0, import_bignumber8.default)(0) };
3776
3829
  }, [balancesMap]);
3777
- const assetsBalances = (0, import_react9.useMemo)(() => {
3830
+ const assetsBalances = (0, import_react10.useMemo)(() => {
3778
3831
  const result = [];
3779
3832
  balances.map((bal) => {
3780
3833
  const asset = assetsMap.get(bal.denom);
@@ -3804,14 +3857,14 @@ function useBalances() {
3804
3857
  }
3805
3858
  function useBalance(denom) {
3806
3859
  const { balancesMap, isLoading } = useAssetsContext();
3807
- const balance = (0, import_react9.useMemo)(
3860
+ const balance = (0, import_react10.useMemo)(
3808
3861
  () => balancesMap.get(denom) || {
3809
3862
  denom,
3810
3863
  amount: (0, import_bignumber8.default)(0)
3811
3864
  },
3812
3865
  [balancesMap, denom]
3813
3866
  );
3814
- const hasAmount = (0, import_react9.useCallback)((amount) => {
3867
+ const hasAmount = (0, import_react10.useCallback)((amount) => {
3815
3868
  return balance.amount.gte(amount);
3816
3869
  }, [balance]);
3817
3870
  return {
@@ -3822,7 +3875,7 @@ function useBalance(denom) {
3822
3875
  }
3823
3876
 
3824
3877
  // src/hooks/useEpochs.ts
3825
- var import_react10 = require("react");
3878
+ var import_react11 = require("react");
3826
3879
  var import_bignumber9 = __toESM(require("bignumber.js"));
3827
3880
  var EPOCH_HOUR2 = "hour";
3828
3881
  var EPOCH_DAY2 = "day";
@@ -3842,28 +3895,28 @@ function getEpochDurationByIdentifier2(identifier) {
3842
3895
  }
3843
3896
  function useEpochs() {
3844
3897
  const { epochs, isLoading, updateEpochs } = useAssetsContext();
3845
- const getCurrentEpoch2 = (0, import_react10.useCallback)((identifier) => {
3898
+ const getCurrentEpoch2 = (0, import_react11.useCallback)((identifier) => {
3846
3899
  return epochs.get(identifier);
3847
3900
  }, [epochs]);
3848
- const hourEpochInfo = (0, import_react10.useMemo)(() => {
3901
+ const hourEpochInfo = (0, import_react11.useMemo)(() => {
3849
3902
  return epochs.get(EPOCH_HOUR2);
3850
3903
  }, [epochs]);
3851
- const dayEpochInfo = (0, import_react10.useMemo)(() => {
3904
+ const dayEpochInfo = (0, import_react11.useMemo)(() => {
3852
3905
  return epochs.get(EPOCH_DAY2);
3853
3906
  }, [epochs]);
3854
- const weekEpochInfo = (0, import_react10.useMemo)(() => {
3907
+ const weekEpochInfo = (0, import_react11.useMemo)(() => {
3855
3908
  return epochs.get(EPOCH_WEEK2);
3856
3909
  }, [epochs]);
3857
- const getHourEpochInfo2 = (0, import_react10.useCallback)(() => {
3910
+ const getHourEpochInfo2 = (0, import_react11.useCallback)(() => {
3858
3911
  return epochs.get(EPOCH_HOUR2);
3859
3912
  }, [epochs]);
3860
- const getDayEpochInfo = (0, import_react10.useCallback)(() => {
3913
+ const getDayEpochInfo = (0, import_react11.useCallback)(() => {
3861
3914
  return epochs.get(EPOCH_DAY2);
3862
3915
  }, [epochs]);
3863
- const getWeekEpochInfo2 = (0, import_react10.useCallback)(() => {
3916
+ const getWeekEpochInfo2 = (0, import_react11.useCallback)(() => {
3864
3917
  return epochs.get(EPOCH_WEEK2);
3865
3918
  }, [epochs]);
3866
- const getPeriodicEpochEndTime2 = (0, import_react10.useCallback)((identifier, modWeek = 1) => {
3919
+ const getPeriodicEpochEndTime2 = (0, import_react11.useCallback)((identifier, modWeek = 1) => {
3867
3920
  const epoch = epochs.get(identifier);
3868
3921
  if (!epoch || !epoch.current_epoch_start_time) {
3869
3922
  return void 0;
@@ -3878,13 +3931,13 @@ function useEpochs() {
3878
3931
  startAt.setTime(startAt.getTime() + duration + duration * remainingEpochs);
3879
3932
  return startAt;
3880
3933
  }, [epochs]);
3881
- const getCurrentWeekEpochEndTime2 = (0, import_react10.useCallback)(() => {
3934
+ const getCurrentWeekEpochEndTime2 = (0, import_react11.useCallback)(() => {
3882
3935
  return getPeriodicEpochEndTime2(EPOCH_WEEK2);
3883
3936
  }, [getPeriodicEpochEndTime2]);
3884
- const getPeriodicWeekEpochEndTime2 = (0, import_react10.useCallback)((modWeek = 1) => {
3937
+ const getPeriodicWeekEpochEndTime2 = (0, import_react11.useCallback)((modWeek = 1) => {
3885
3938
  return getPeriodicEpochEndTime2(EPOCH_WEEK2, modWeek);
3886
3939
  }, [getPeriodicEpochEndTime2]);
3887
- const epochsList = (0, import_react10.useMemo)(() => Array.from(epochs.values()), [epochs]);
3940
+ const epochsList = (0, import_react11.useMemo)(() => Array.from(epochs.values()), [epochs]);
3888
3941
  return {
3889
3942
  epochs: epochsList,
3890
3943
  epochsMap: epochs,
@@ -3911,22 +3964,22 @@ function useEpochsManager() {
3911
3964
  }
3912
3965
 
3913
3966
  // src/hooks/useLiquidityPools.ts
3914
- var import_react11 = require("react");
3967
+ var import_react12 = require("react");
3915
3968
  var import_bignumber10 = __toESM(require("bignumber.js"));
3916
3969
  function useLiquidityPools() {
3917
3970
  const { poolsMap, poolsDataMap, updateLiquidityPools, isLoading, assetsMap } = useAssetsContext();
3918
- const pools = (0, import_react11.useMemo)(() => {
3971
+ const pools = (0, import_react12.useMemo)(() => {
3919
3972
  return Array.from(poolsMap.values());
3920
3973
  }, [poolsMap]);
3921
3974
  const getPoolByLpDenom = (lpDenom) => {
3922
3975
  const poolId = poolIdFromPoolDenom(lpDenom);
3923
3976
  return poolsMap.get(poolId);
3924
3977
  };
3925
- const getDenomsPool = (0, import_react11.useCallback)((denomA, denomB) => {
3978
+ const getDenomsPool = (0, import_react12.useCallback)((denomA, denomB) => {
3926
3979
  const poolId = createPoolId(denomA, denomB);
3927
3980
  return poolsMap.get(poolId);
3928
3981
  }, [poolsMap]);
3929
- const liquidAssets = (0, import_react11.useMemo)(() => {
3982
+ const liquidAssets = (0, import_react12.useMemo)(() => {
3930
3983
  if (!assetsMap || assetsMap.size === 0) return [];
3931
3984
  const result = /* @__PURE__ */ new Map();
3932
3985
  pools.forEach((pool) => {
@@ -3949,12 +4002,12 @@ function useLiquidityPools() {
3949
4002
  }
3950
4003
  function useAssetLiquidityPools(denom) {
3951
4004
  const { poolsMap, poolsDataMap, isLoading } = useAssetsContext();
3952
- const assetPools = (0, import_react11.useMemo)(() => {
4005
+ const assetPools = (0, import_react12.useMemo)(() => {
3953
4006
  return Array.from(poolsMap.values()).filter(
3954
4007
  (pool) => pool.base === denom || pool.quote === denom
3955
4008
  );
3956
4009
  }, [poolsMap, denom]);
3957
- const assetPoolsData = (0, import_react11.useMemo)(() => {
4010
+ const assetPoolsData = (0, import_react12.useMemo)(() => {
3958
4011
  const newMap = /* @__PURE__ */ new Map();
3959
4012
  if (isLoading || denom === "") return newMap;
3960
4013
  assetPools.forEach((pool) => {
@@ -3965,7 +4018,7 @@ function useAssetLiquidityPools(denom) {
3965
4018
  });
3966
4019
  return newMap;
3967
4020
  }, [assetPools, poolsDataMap, isLoading, denom]);
3968
- const asset24HoursVolume = (0, import_react11.useMemo)(() => {
4021
+ const asset24HoursVolume = (0, import_react12.useMemo)(() => {
3969
4022
  let volume = (0, import_bignumber10.default)(0);
3970
4023
  if (isLoading || denom === "") return volume;
3971
4024
  assetPoolsData.forEach((poolData) => {
@@ -3987,47 +4040,47 @@ function useAssetLiquidityPools(denom) {
3987
4040
  }
3988
4041
  function useLiquidityPool(poolId) {
3989
4042
  const { balancesMap, assetsMap, poolsMap, poolsDataMap, isLoading } = useAssetsContext();
3990
- const pool = (0, import_react11.useMemo)(() => poolsMap.get(poolId), [poolsMap, poolId]);
3991
- const poolData = (0, import_react11.useMemo)(() => poolsDataMap.get(poolId), [poolsDataMap, poolId]);
3992
- const userShares = (0, import_react11.useMemo)(() => {
4043
+ const pool = (0, import_react12.useMemo)(() => poolsMap.get(poolId), [poolsMap, poolId]);
4044
+ const poolData = (0, import_react12.useMemo)(() => poolsDataMap.get(poolId), [poolsDataMap, poolId]);
4045
+ const userShares = (0, import_react12.useMemo)(() => {
3993
4046
  if (!pool) return toBigNumber(0);
3994
4047
  const balance = balancesMap.get(pool.lp_denom);
3995
4048
  if (!balance) return toBigNumber(0);
3996
4049
  return toBigNumber(balance.amount);
3997
4050
  }, [balancesMap, pool]);
3998
- const totalShares = (0, import_react11.useMemo)(() => {
4051
+ const totalShares = (0, import_react12.useMemo)(() => {
3999
4052
  if (!assetsMap || !pool) return toBigNumber(0);
4000
4053
  const sharesAsset = assetsMap.get(pool.lp_denom);
4001
4054
  if (!sharesAsset) return toBigNumber(0);
4002
4055
  return toBigNumber((sharesAsset == null ? void 0 : sharesAsset.supply) || 0);
4003
4056
  }, [assetsMap, pool]);
4004
- const userSharesPercentage = (0, import_react11.useMemo)(() => {
4057
+ const userSharesPercentage = (0, import_react12.useMemo)(() => {
4005
4058
  if (!userShares || !totalShares || totalShares.isZero()) {
4006
4059
  return toBigNumber(0);
4007
4060
  }
4008
4061
  return userShares.dividedBy(totalShares).multipliedBy(100).toFixed(2);
4009
4062
  }, [userShares, totalShares]);
4010
- const userReserveBase = (0, import_react11.useMemo)(() => {
4063
+ const userReserveBase = (0, import_react12.useMemo)(() => {
4011
4064
  if (!pool || !userShares || !totalShares || totalShares.isZero()) {
4012
4065
  return toBigNumber(0);
4013
4066
  }
4014
4067
  const reserveBase = toBigNumber(pool.reserve_base);
4015
4068
  return userShares.dividedBy(totalShares).multipliedBy(reserveBase);
4016
4069
  }, [pool, userShares, totalShares]);
4017
- const userReserveQuote = (0, import_react11.useMemo)(() => {
4070
+ const userReserveQuote = (0, import_react12.useMemo)(() => {
4018
4071
  if (!pool || !userShares || !totalShares || totalShares.isZero()) {
4019
4072
  return toBigNumber(0);
4020
4073
  }
4021
4074
  const reserveQuote = toBigNumber(pool.reserve_quote);
4022
4075
  return userShares.dividedBy(totalShares).multipliedBy(reserveQuote);
4023
4076
  }, [pool, userShares, totalShares]);
4024
- const calculateOppositeAmount = (0, import_react11.useCallback)((amount, isBase) => {
4077
+ const calculateOppositeAmount = (0, import_react12.useCallback)((amount, isBase) => {
4025
4078
  if (!pool) {
4026
4079
  return toBigNumber(0);
4027
4080
  }
4028
4081
  return calculatePoolOppositeAmount(pool, amount, isBase);
4029
4082
  }, [pool]);
4030
- const calculateSharesFromAmounts = (0, import_react11.useCallback)((baseAmount, quoteAmount) => {
4083
+ const calculateSharesFromAmounts = (0, import_react12.useCallback)((baseAmount, quoteAmount) => {
4031
4084
  if (!pool || !totalShares) {
4032
4085
  return toBigNumber(0);
4033
4086
  }
@@ -4062,11 +4115,11 @@ function useLiquidityPool(poolId) {
4062
4115
  }
4063
4116
 
4064
4117
  // src/hooks/useAssetsValue.ts
4065
- var import_react12 = require("react");
4118
+ var import_react13 = require("react");
4066
4119
  var import_bignumber11 = __toESM(require("bignumber.js"));
4067
4120
  function useAssetsValue() {
4068
4121
  const { assetsMap, usdPricesMap, balancesMap, isLoading: isLoadingPrices } = useAssetsContext();
4069
- const totalUsdValue = (0, import_react12.useCallback)((prettyBalances) => {
4122
+ const totalUsdValue = (0, import_react13.useCallback)((prettyBalances) => {
4070
4123
  let usdValue = (0, import_bignumber11.default)(0);
4071
4124
  prettyBalances.map((denomBalance) => {
4072
4125
  const assetPrice = usdPricesMap.get(denomBalance.denom);
@@ -4076,7 +4129,7 @@ function useAssetsValue() {
4076
4129
  });
4077
4130
  return usdValue;
4078
4131
  }, [usdPricesMap]);
4079
- const walletTotalUsdValue = (0, import_react12.useMemo)(() => {
4132
+ const walletTotalUsdValue = (0, import_react13.useMemo)(() => {
4080
4133
  let total = toBigNumber(0);
4081
4134
  balancesMap.forEach((balance, denom) => {
4082
4135
  const price = usdPricesMap.get(denom);
@@ -4087,14 +4140,14 @@ function useAssetsValue() {
4087
4140
  });
4088
4141
  return total;
4089
4142
  }, [balancesMap, usdPricesMap, assetsMap]);
4090
- const denomUsdValue = (0, import_react12.useCallback)((denom, uAmount) => {
4143
+ const denomUsdValue = (0, import_react13.useCallback)((denom, uAmount) => {
4091
4144
  const price = usdPricesMap.get(denom);
4092
4145
  if (!price || !price.gt(0)) return toBigNumber(0);
4093
4146
  const asset = assetsMap.get(denom);
4094
4147
  if (!asset) return toBigNumber(0);
4095
4148
  return price.multipliedBy(uAmountToBigNumberAmount(uAmount, asset.decimals));
4096
4149
  }, [usdPricesMap, assetsMap]);
4097
- const compareValues = (0, import_react12.useCallback)((a, b) => {
4150
+ const compareValues = (0, import_react13.useCallback)((a, b) => {
4098
4151
  var _a2;
4099
4152
  let aValue = (0, import_bignumber11.default)(0);
4100
4153
  const aPrice = usdPricesMap.get(a.denom);
@@ -4118,13 +4171,13 @@ function useAssetsValue() {
4118
4171
  }
4119
4172
 
4120
4173
  // src/hooks/useFeeTokens.ts
4121
- var import_react13 = require("react");
4174
+ var import_react14 = require("react");
4122
4175
  var MIN_LIQUIDITY_FOR_FEE_TOKEN = 5e10;
4123
4176
  function useFeeTokens() {
4124
4177
  const { pools, isLoading: poolsLoading } = useLiquidityPools();
4125
4178
  const { assetsMap, isLoading: assetsLoading } = useAssetsContext();
4126
4179
  const nativeDenom = getChainNativeAssetDenom();
4127
- const feeTokens = (0, import_react13.useMemo)(() => {
4180
+ const feeTokens = (0, import_react14.useMemo)(() => {
4128
4181
  if (poolsLoading || assetsLoading) {
4129
4182
  return [];
4130
4183
  }
@@ -4154,17 +4207,17 @@ function useFeeTokens() {
4154
4207
  }
4155
4208
 
4156
4209
  // src/hooks/useMarkets.ts
4157
- var import_react14 = require("react");
4210
+ var import_react15 = require("react");
4158
4211
  var import_bignumber12 = __toESM(require("bignumber.js"));
4159
4212
  function useMarkets() {
4160
4213
  const { marketsMap, marketsDataMap, updateMarkets, isLoading } = useAssetsContext();
4161
- const markets = (0, import_react14.useMemo)(() => {
4214
+ const markets = (0, import_react15.useMemo)(() => {
4162
4215
  return Array.from(marketsMap.values());
4163
4216
  }, [marketsMap]);
4164
- const marketsData = (0, import_react14.useMemo)(() => Array.from(marketsDataMap.values()), [marketsDataMap]);
4165
- const marketExists = (0, import_react14.useCallback)((marketId) => marketsMap.has(marketId), [marketsMap]);
4166
- const getMarketData = (0, import_react14.useCallback)((marketId) => marketsDataMap.get(marketId), [marketsDataMap]);
4167
- const getMarket = (0, import_react14.useCallback)((marketId) => marketsMap.get(marketId), [marketsMap]);
4217
+ const marketsData = (0, import_react15.useMemo)(() => Array.from(marketsDataMap.values()), [marketsDataMap]);
4218
+ const marketExists = (0, import_react15.useCallback)((marketId) => marketsMap.has(marketId), [marketsMap]);
4219
+ const getMarketData = (0, import_react15.useCallback)((marketId) => marketsDataMap.get(marketId), [marketsDataMap]);
4220
+ const getMarket = (0, import_react15.useCallback)((marketId) => marketsMap.get(marketId), [marketsMap]);
4168
4221
  return {
4169
4222
  markets,
4170
4223
  marketsData,
@@ -4179,9 +4232,9 @@ function useMarkets() {
4179
4232
  }
4180
4233
  function useAssetMarkets(denom) {
4181
4234
  const { isLoading, marketsMap, marketsDataMap } = useAssetsContext();
4182
- const markets = (0, import_react14.useMemo)(() => Array.from(marketsMap.values()), [marketsMap]);
4183
- const marketsData = (0, import_react14.useMemo)(() => Array.from(marketsDataMap.values()), [marketsDataMap]);
4184
- const assetMarkets = (0, import_react14.useMemo)(() => {
4235
+ const markets = (0, import_react15.useMemo)(() => Array.from(marketsMap.values()), [marketsMap]);
4236
+ const marketsData = (0, import_react15.useMemo)(() => Array.from(marketsDataMap.values()), [marketsDataMap]);
4237
+ const assetMarkets = (0, import_react15.useMemo)(() => {
4185
4238
  const baseMatches = [];
4186
4239
  const quoteMatches = [];
4187
4240
  for (const market of markets) {
@@ -4190,7 +4243,7 @@ function useAssetMarkets(denom) {
4190
4243
  }
4191
4244
  return [...baseMatches, ...quoteMatches];
4192
4245
  }, [markets, denom]);
4193
- const assetMarketsData = (0, import_react14.useMemo)(() => {
4246
+ const assetMarketsData = (0, import_react15.useMemo)(() => {
4194
4247
  const baseMatches = [];
4195
4248
  const quoteMatches = [];
4196
4249
  for (const market of marketsData) {
@@ -4199,7 +4252,7 @@ function useAssetMarkets(denom) {
4199
4252
  }
4200
4253
  return [...baseMatches, ...quoteMatches];
4201
4254
  }, [marketsData, denom]);
4202
- const asset24hTradedVolume = (0, import_react14.useMemo)(() => {
4255
+ const asset24hTradedVolume = (0, import_react15.useMemo)(() => {
4203
4256
  return assetMarketsData.reduce((acc, market) => {
4204
4257
  if (denom === market.base) {
4205
4258
  return acc.plus(market.base_volume || 0);
@@ -4218,8 +4271,8 @@ function useAssetMarkets(denom) {
4218
4271
  }
4219
4272
  function useMarket(marketId) {
4220
4273
  const { marketsMap, marketsDataMap, isLoading, assetsMap } = useAssetsContext();
4221
- const market = (0, import_react14.useMemo)(() => marketsMap.get(marketId), [marketsMap, marketId]);
4222
- const marketSymbol = (0, import_react14.useMemo)(() => {
4274
+ const market = (0, import_react15.useMemo)(() => marketsMap.get(marketId), [marketsMap, marketId]);
4275
+ const marketSymbol = (0, import_react15.useMemo)(() => {
4223
4276
  var _a2, _b2;
4224
4277
  if (isLoading) return "";
4225
4278
  if (!market) return "";
@@ -4233,9 +4286,9 @@ function useMarket(marketId) {
4233
4286
  }
4234
4287
  return `${base}/${quote}`;
4235
4288
  }, [market, isLoading, assetsMap]);
4236
- const marketData = (0, import_react14.useMemo)(() => marketsDataMap.get(marketId), [marketsDataMap, marketId]);
4237
- const marketExists = (0, import_react14.useMemo)(() => !!market, [market]);
4238
- const volume24h = (0, import_react14.useMemo)(() => {
4289
+ const marketData = (0, import_react15.useMemo)(() => marketsDataMap.get(marketId), [marketsDataMap, marketId]);
4290
+ const marketExists = (0, import_react15.useMemo)(() => !!market, [market]);
4291
+ const volume24h = (0, import_react15.useMemo)(() => {
4239
4292
  if (!marketData || !market) return toBigNumber(0);
4240
4293
  const quoteAsset = assetsMap.get(market.quote);
4241
4294
  if (!quoteAsset) return toBigNumber(0);
@@ -4261,27 +4314,6 @@ function useMarketsManager() {
4261
4314
 
4262
4315
  // src/hooks/useToast.tsx
4263
4316
  var import_react16 = require("react");
4264
-
4265
- // src/components/toaster.tsx
4266
- var import_react15 = require("@chakra-ui/react");
4267
- var import_jsx_runtime = require("react/jsx-runtime");
4268
- var toaster = (0, import_react15.createToaster)({
4269
- placement: "top-end",
4270
- pauseOnPageIdle: true
4271
- });
4272
- var Toaster = () => {
4273
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Toaster, { toaster, insetInline: { mdDown: "4" }, children: (toast) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react15.Toast.Root, { width: { md: "sm" }, children: [
4274
- toast.type === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Spinner, { size: "sm", color: "blue.solid" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Toast.Indicator, {}),
4275
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react15.Stack, { gap: "1", flex: "1", maxWidth: "100%", children: [
4276
- toast.title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Toast.Title, { children: toast.title }),
4277
- toast.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Toast.Description, { children: toast.description })
4278
- ] }),
4279
- toast.action && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Toast.ActionTrigger, { children: toast.action.label }),
4280
- toast.closable && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react15.Toast.CloseTrigger, {})
4281
- ] }) }) });
4282
- };
4283
-
4284
- // src/hooks/useToast.tsx
4285
4317
  var useToast = () => {
4286
4318
  const clickableSuccess = (0, import_react16.useCallback)((title, actionFn, actionLabel, description, duration = 5e3) => {
4287
4319
  toaster.create({