import { WalletProviderName, GetBalanceResult, NetworkInfo, TokenInfo, SwapDirection } from '@imtbl/checkout-sdk';
import { Exchange } from '@imtbl/dex-sdk';
export interface SwapState {
    exchange: Exchange | null;
    walletProviderName: WalletProviderName | null;
    network: NetworkInfo | null;
    tokenBalances: GetBalanceResult[];
    supportedTopUps: TopUpFeature | null;
    allowedTokens: TokenInfo[];
    autoProceed: boolean;
}
export interface TopUpFeature {
    isOnRampEnabled?: boolean;
    isSwapEnabled?: boolean;
    isBridgeEnabled?: boolean;
}
export declare const initialSwapState: SwapState;
export interface SwapContextState {
    swapState: SwapState;
    swapDispatch: React.Dispatch<SwapAction>;
}
export interface SwapAction {
    payload: ActionPayload;
}
type ActionPayload = SetExchangePayload | SetWalletProviderNamePayload | SetNetworkPayload | SetSupportedTopUpPayload | SetTokenBalancesPayload | SetAllowedTokensPayload | SetAutoProceedPayload;
export declare enum SwapActions {
    SET_EXCHANGE = "SET_EXCHANGE",
    SET_WALLET_PROVIDER_NAME = "SET_WALLET_PROVIDER_NAME",
    SET_NETWORK = "SET_NETWORK",
    SET_SUPPORTED_TOP_UPS = "SET_SUPPORTED_TOP_UPS",
    SET_TOKEN_BALANCES = "SET_TOKEN_BALANCES",
    SET_ALLOWED_TOKENS = "SET_ALLOWED_TOKENS",
    SET_AUTO_PROCEED = "SET_AUTO_PROCEED"
}
export interface SetExchangePayload {
    type: SwapActions.SET_EXCHANGE;
    exchange: Exchange;
}
export interface SetWalletProviderNamePayload {
    type: SwapActions.SET_WALLET_PROVIDER_NAME;
    walletProviderName: WalletProviderName;
}
export interface SetNetworkPayload {
    type: SwapActions.SET_NETWORK;
    network: NetworkInfo;
}
export interface SetTokenBalancesPayload {
    type: SwapActions.SET_TOKEN_BALANCES;
    tokenBalances: GetBalanceResult[];
}
export interface SetSupportedTopUpPayload {
    type: SwapActions.SET_SUPPORTED_TOP_UPS;
    supportedTopUps: TopUpFeature;
}
export interface SetAllowedTokensPayload {
    type: SwapActions.SET_ALLOWED_TOKENS;
    allowedTokens: TokenInfo[];
}
export interface SetAutoProceedPayload {
    type: SwapActions.SET_AUTO_PROCEED;
    autoProceed: boolean;
    direction: SwapDirection;
}
export declare const SwapContext: import("react").Context<SwapContextState>;
export type Reducer<S, A> = (prevState: S, action: A) => S;
export declare const swapReducer: Reducer<SwapState, SwapAction>;
export {};
