import { Trade } from '@uniswap/router-sdk';
import { Currency, CurrencyAmount, Percent, Token, TradeType } from '@uniswap/sdk-core';
import { Trade as V2Trade } from '@uniswap/v2-sdk';
import { Trade as V3Trade } from '@uniswap/v3-sdk';
import { ApprovalState } from '../useApproval';
export { ApprovalState } from '../useApproval';
export declare function useSwapRouterAddress(trade: V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | Trade<Currency, Currency, TradeType> | undefined): string | undefined;
export default function useSwapApproval(trade: V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | Trade<Currency, Currency, TradeType> | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean, amountOrCurrency?: CurrencyAmount<Currency> | Currency): [ApprovalState, () => Promise<{
    response: import("@ethersproject/abstract-provider").TransactionResponse;
    tokenAddress: string;
    spenderAddress: string;
} | undefined>];
export declare function useSwapApprovalOptimizedTrade(trade: Trade<Currency, Currency, TradeType> | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean, amountToApprove?: CurrencyAmount<Currency>): V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | Trade<Currency, Currency, TradeType> | undefined;
export declare enum ApproveOrPermitState {
    REQUIRES_APPROVAL = 0,
    PENDING_APPROVAL = 1,
    REQUIRES_SIGNATURE = 2,
    PENDING_SIGNATURE = 3,
    APPROVED = 4
}
/**
 * Returns all relevant statuses and callback functions for approvals.
 * Considers both standard approval and ERC20 permit.
 */
export declare const useApproveOrPermit: (trade: V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | Trade<Currency, Currency, TradeType> | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean, amountOrCurrency?: CurrencyAmount<Currency> | Currency) => {
    approvalState: ApproveOrPermitState;
    signatureData: import("hooks/useERC20Permit").SignatureData | null;
    handleApproveOrPermit: () => Promise<void | {
        response: import("@ethersproject/abstract-provider").TransactionResponse;
        tokenAddress: string;
        spenderAddress: string;
    }>;
};
