import * as React$1 from 'react';
import React__default from 'react';
import { Config, ChainId } from '@usedapp/core';
import { Dict } from '@chakra-ui/utils';
import styleInject from '../node_modules/style-inject/dist/style-inject.es.js';
import { Interface } from '@ethersproject/abi';
import { Contract } from '@ethersproject/contracts';
import { BigNumber, BigNumberish } from '@ethersproject/bignumber';
import { CountdownProps } from 'react-countdown';
import { StakeInfo as StakeInfo$1 } from 'types/StakeInfo';
import { StakingContract as StakingContract$1 } from 'types/StakingContract';
import { InputProps } from '@chakra-ui/input';
import { RangeSliderProps } from '@chakra-ui/slider';
import { BoxProps, ModalProps, ButtonProps } from '@chakra-ui/react';
import { SquareProps, BoxProps as BoxProps$1 } from '@chakra-ui/layout';
import { As } from '@chakra-ui/system';
import { StakingContract as StakingContract$2 } from 'types';

var css_248z = "";
styleInject(css_248z);

declare type DappProviderProps = {
    chakraTheme: Dict<any>;
    dappConfig: Config;
    accessKey: string;
    chains: {
        supportedChainIds: Array<ChainId>;
        chainParams: {
            [key in ChainId]?: any;
        };
    };
    contracts?: {
        stakingAbi?: any;
        vestingAbi?: any;
        tokenAbi?: Interface;
    };
};
declare function DappProvider({ chains, chakraTheme, contracts, dappConfig, children }: React__default.PropsWithChildren<DappProviderProps>): JSX.Element;

declare const useTranslation: () => (key: string, values?: {
    [key: string]: any;
} | undefined) => string;

declare const useContracts: () => {
    stakingAbi: any;
    vestingAbi: any;
    stakingContract: (contractAddress: string) => Contract;
    tokenContract: (contractAddress: any, abi: Interface) => Contract;
};

declare const useUnstakeFee: (stakingContractAddress: string) => BigNumber | undefined;

declare const isMobile: () => boolean;

declare const getBigNumberPercentageValue: (value: BigNumberish, percentage: number) => BigNumber;
declare const formatTokenBalance: (value: BigNumberish, decimals?: number) => number;

declare const substitute: (str: string, values?: {
    [key: string]: any;
} | undefined) => string;

declare const getShortenedAddress: (address: string, shortenTo?: number) => string;

declare enum AppState {
    Active = "active",
    Connect = "connect",
    Stake = "stake",
    Withdraw = "withdraw",
    Loading = "loading"
}

interface StakingContract {
    tokenContractAddress: string;
    tokenTicker: string;
    stakingContractAddress: string;
    tokenDecimals: number;
    canRestake: boolean;
    showApr: boolean;
    rewardTicker: string;
    showConnect: boolean;
}

interface StakeInfo {
    isWithdrawing: boolean;
    tokens: BigNumber;
    rewards: BigNumber;
    rewardPerTokenPaid: BigNumber;
    withdrawalPossibleAt?: BigNumber;
}

interface VestingContract {
    tokenTicker: string;
    vestingContractAddress: string;
}

declare type LockCountdownProps = {
    date?: Date;
} & Omit<CountdownProps, "date">;
declare const LockCountdown: React.FC<LockCountdownProps>;

declare type LockedStateDetailsProps = {
    stakeInfo?: StakeInfo$1;
    unstakeFee?: BigNumberish;
    readyAt?: Date;
    onComplete: () => void;
    contract: StakingContract$1;
};
declare const LockedStateDetails: React__default.FC<LockedStateDetailsProps>;

declare type ReadyStateDetailsProps = {
    stakeInfo?: StakeInfo$1;
    contract: StakingContract$1;
};
declare const ReadyStateDetails: React__default.FC<ReadyStateDetailsProps>;

declare type SupportedWalletsProps = {};
declare const SupportedWallets: React.FC<SupportedWalletsProps>;

declare type BigNumberInputProps = {
    value: BigNumberish;
    max?: BigNumberish;
    min?: BigNumberish;
    decimals?: number;
    onChange: (value: BigNumberish) => void;
} & Omit<InputProps, "onChange" | "max" | "min" | "value">;
declare const BigNumberInput: React$1.FC<BigNumberInputProps>;

declare type BigNumberRangeSliderProps = {
    value: BigNumberish;
    max: BigNumberish;
    presetValues?: number[];
    isLocked?: boolean;
    onChange: (value: BigNumberish) => void;
} & Omit<RangeSliderProps, "value" | "onChange" | "max" | "min">;
declare const BigNumberRangeSlider: React__default.FC<BigNumberRangeSliderProps>;

declare type BorderedBoxProps = BoxProps;
declare const BorderedBox: React__default.FC<BorderedBoxProps>;

declare type FilledBoxProps = BoxProps;
declare const FilledBox: React__default.FC<FilledBoxProps>;

declare type FooterProps = {};
declare const Footer: React__default.FC<FooterProps>;

declare type IconInCircleProps = {
    icon: As<any>;
    colorScheme?: string;
} & SquareProps;
declare const IconInCircle: React.FC<IconInCircleProps>;

declare type InfoPopupProps = {
    icon?: React__default.ReactNode;
    title: string;
    description?: string;
    onClose?: () => void;
} & Omit<ModalProps, "onClose">;
declare const InfoPopup: React__default.FC<InfoPopupProps>;

declare type ModalInfoProps = {
    title: string;
    description?: string;
};
declare const ModalInfo: React__default.FC<ModalInfoProps>;

declare type SeparatorProps = BoxProps$1;
declare const Separator: React__default.FC<SeparatorProps>;

declare type SubmitButtonProps = ButtonProps;
declare const SubmitButton: React__default.FC<SubmitButtonProps>;

declare type TokenBalanceProps = {
    balance?: BigNumberish;
    decimals?: number;
};
declare const TokenBalance: React.FC<TokenBalanceProps>;

declare const TrustWalletIcon: React__default.FC<React__default.SVGProps<SVGSVGElement>>;

declare const WalletConnectIcon: React__default.FC<React__default.SVGProps<SVGSVGElement>>;

interface WalletErrorsProps {
}
declare const WalletErrors: React__default.FC<WalletErrorsProps>;

declare type ConnectViewProps = {};
declare const ConnectView: React.FC<ConnectViewProps>;

declare type WithdrawViewProps = {
    contract: StakingContract$2;
    stakeInfo?: StakeInfo$1;
};
declare const WithdrawView: React__default.FC<WithdrawViewProps>;

export { AppState, BigNumberInput, BigNumberInputProps, BigNumberRangeSlider, BorderedBox, BorderedBoxProps, ConnectView, DappProvider, DappProviderProps, FilledBox, FilledBoxProps, Footer, IconInCircle, InfoPopup, InfoPopupProps, LockCountdown, LockedStateDetails, ModalInfo, ModalInfoProps, ReadyStateDetails, Separator, StakeInfo, StakingContract, SubmitButton, SubmitButtonProps, SupportedWallets, TokenBalance, TrustWalletIcon, VestingContract, WalletConnectIcon, WalletErrors, WithdrawView, formatTokenBalance, getBigNumberPercentageValue, getShortenedAddress, isMobile, substitute, useContracts, useTranslation, useUnstakeFee };
