import { BigNumber, BigNumberish } from 'ethers';
import { Token, TokenTypes } from './token';
import { TokenAmount, TokenAmounts } from './token-amount';
export interface TokenAmountWithMinObject {
    token: TokenTypes;
    amount: string;
    amountMin: string;
}
export type TokenAmountWithMinPair = [TokenTypes, string, string];
export declare class TokenAmountWithMin {
    readonly token: Token;
    amount: string;
    amountMin: string;
    constructor(token: TokenTypes, amount?: string, amountMin?: string);
    constructor(tokenAmount: TokenAmountWithMin | TokenAmountWithMinObject | TokenAmountWithMinPair | TokenAmount);
    static from(tokenAmount: TokenAmountWithMinTypes): TokenAmountWithMin;
    static precise(amount: string, decimals: number): string;
    get amountWei(): BigNumber;
    get amountMinWei(): BigNumber;
    precise(amount: string): string;
    precise(tokenAmount: TokenAmountWithMin): string;
    set(amount: string, amountMin?: string): TokenAmountWithMin;
    set(tokenAmount: TokenAmountWithMin): TokenAmountWithMin;
    setWei(amountWei: BigNumberish, amountMinWei?: BigNumberish): this;
    add(amount: string, amountMin?: string): TokenAmountWithMin;
    add(tokenAmount: TokenAmountWithMin): TokenAmountWithMin;
    add(tokenAmount: TokenAmount): TokenAmountWithMin;
    addWei(amountWei: BigNumberish, amountMinWei?: BigNumberish): this;
    sub(amount: string, amountMin?: string): TokenAmountWithMin;
    sub(tokenAmount: TokenAmountWithMin): TokenAmountWithMin;
    subWei(amountWei: BigNumberish, amountMinWei?: BigNumberish): this;
    get isZero(): boolean;
    eq(amount: string, amountMin?: string): boolean;
    eq(tokenAmount: TokenAmountWithMin): boolean;
    gt(amount: string, amountMin?: string): boolean;
    gt(tokenAmount: TokenAmountWithMin): boolean;
    gte(amount: string, amountMin?: string): boolean;
    gte(tokenAmount: TokenAmountWithMin): boolean;
    lt(amount: string, amountMin?: string): boolean;
    lt(tokenAmount: TokenAmountWithMin): boolean;
    lte(amount: string, amountMin?: string): boolean;
    lte(tokenAmount: TokenAmountWithMin): boolean;
    toObject(): TokenAmountWithMinObject;
    toValues(): [string, BigNumber, BigNumber];
    clone(): TokenAmountWithMin;
}
export type TokenAmountWithMinTypes = TokenAmountWithMinObject | TokenAmountWithMinPair | TokenAmountWithMin | TokenAmount;
export declare function isTokenAmountWithMinObject(v: any): v is TokenAmountWithMinObject;
export declare function isTokenAmountWithMinPair(v: any): v is TokenAmountWithMinPair;
export declare function isTokenAmountWithMin(v: any): v is TokenAmountWithMin;
export declare function isTokenAmountWithMinTypes(v: any): v is TokenAmountWithMinTypes;
export declare class TokenAmountsWithMin {
    tokenAmountMap: Record<string, TokenAmountWithMin>;
    constructor(tokenAmounts: TokenAmountWithMinTypes[]);
    constructor(...tokenAmounts: TokenAmountWithMinTypes[]);
    static from(tokenAmounts: TokenAmountsWithMinTypes): TokenAmountsWithMin;
    static fromTokenAmounts(tokenAmounts: TokenAmounts): TokenAmountsWithMin;
    get length(): number;
    at(index: number): TokenAmountWithMin;
    get(token: TokenTypes): TokenAmountWithMin;
    set(token: TokenTypes, amount: string): TokenAmountsWithMin;
    set(tokenAmount: TokenAmountWithMinTypes): TokenAmountsWithMin;
    has(token: TokenTypes): boolean;
    add(token: TokenTypes, amount: string): TokenAmountsWithMin;
    add(tokenAmount: TokenAmountWithMinTypes): TokenAmountsWithMin;
    sub(token: TokenTypes, amount: string): TokenAmountsWithMin;
    sub(tokenAmount: TokenAmountWithMinTypes): TokenAmountsWithMin;
    toArray(): TokenAmountWithMin[];
    toObject(): TokenAmountWithMinObject[];
    toJSON(): TokenAmountWithMinObject[];
    toValues(): [string[], BigNumber[], BigNumber[]];
    compact(): TokenAmountsWithMin;
    get isEmpty(): boolean;
    get native(): TokenAmountWithMin | undefined;
    get erc20(): TokenAmountsWithMin;
    get tokens(): Token[];
    forEach(callbackfn: (value: TokenAmountWithMin, index: number, array: TokenAmountsWithMin) => void): void;
    map<U>(callbackfn: (value: TokenAmountWithMin, index: number, array: TokenAmountsWithMin) => U): U[];
    merge(sources: TokenAmountsWithMin | TokenAmountsWithMin[]): TokenAmountsWithMin;
}
export type TokenAmountsWithMinTypes = TokenAmountWithMinTypes[] | TokenAmountsWithMin;
export declare function isTokenAmountsWithMin(v: any): v is TokenAmountsWithMin;
export declare function isTokenAmountsWithMinTypes(v: any): v is TokenAmountsWithMinTypes;
