import { default as React, ReactNode } from 'react';
import { Token } from '../types/index';
import { OrderFlowType } from '../hooks/apis/common/quote/types';
import { Chain } from '../store/globalSlice';
import { SupportedLocale } from './LocalizationProvider';

export interface Theme {
    /** @default 420 */
    width?: "full" | number;
    /** @default base */
    borderRadius?: "none" | "sm" | "base" | "md" | "lg";
    fonts?: {
        primary?: string;
        secondary?: string;
    };
    /** Supports hex and rgb formats - #FFFFFF or rgb(255, 255, 255) */
    colors?: {
        text?: {
            primary?: string;
            secondary?: string;
            button?: string;
            theme?: string;
            accent1?: string;
            accent2?: string;
            accent3?: string;
            accent4?: string;
        };
        bg?: {
            layer1?: string;
            layer2?: string;
            layer3?: string;
            accent1?: string;
            accent3?: string;
            accent4?: string;
            main?: string;
            theme?: string;
        };
        border?: {
            strong?: string;
            theme?: string;
        };
        icon?: {
            primary?: string;
            secondary?: string;
            theme?: string;
        };
    };
}
type EventData = {
    title: string;
    message: string;
    action: "APPROVAL" | "SIGN" | "TRANSACTION";
    data?: string;
};
export interface EventHandlers {
    onFromTokenChange?: (value: Token) => void;
    onToTokenChange?: (value: Token) => void;
    onFromChainChange?: (value: Chain) => void;
    onToChainChange?: (value: Chain) => void;
    onEvent?: (eventType: "success" | "error" | "warning", eventData: EventData) => void;
    onOpenWalletConnect?: (network: "solana" | "eip155") => void;
    onSwapInitiated?: (data: {
        chainId: number;
        hash: string;
        type: OrderFlowType<"solana">;
    }) => void;
    logError?: (error: unknown, context?: Record<string, unknown>) => void;
}
export interface BungeeConfig {
    apiKey: string;
    baseUrl?: string;
    theme?: Theme;
    rpcs?: {
        solana?: string;
        eip155?: string;
    };
    initialValues?: {
        fromChain?: number;
        inputTokens?: string[];
        toChain?: number;
        outputTokens?: string[];
        amount?: string[];
        outputRatio?: number[];
        locale?: SupportedLocale;
        sortPreference?: "fast" | "best";
        swapSlippage?: number;
    };
    supportedTokens?: {
        from?: {
            [chainId: string]: string[];
        };
        to?: {
            [chainId: string]: string[];
        };
    };
    supportedChains?: {
        from?: number[];
        to?: number[];
    };
    eventHandlers?: EventHandlers;
    features?: {
        /**
         * To show/hide the toasts within widget
         * @default true
         */
        internalToasts?: boolean;
        autoRouting?: boolean;
        refuel?: boolean;
        internalTxHistory?: boolean;
    };
    includeDexes?: string[];
    excludeDexes?: string[];
    includeBridges?: string[];
    excludeBridges?: string[];
    feeParams?: {
        feeTakerAddress?: string;
        feePercent?: number;
    };
    destinationPayload?: string;
    openTxItem?: number;
    removeBranding?: boolean;
}
export declare const WidgetConfigContext: React.Context<BungeeConfig | null>;
export declare const ConfigProvider: ({ children, config, }: {
    children: ReactNode;
    config: BungeeConfig | null;
}) => import("react/jsx-runtime").JSX.Element;
export {};
