/// <reference types="react" />
import * as react_jsx_runtime from 'react/jsx-runtime';
import { JsonRpcProvider } from '@ethersproject/providers';
import { Provider } from '@web3-react/types';
import { Currency } from '@uniswap/sdk-core';
import { BigNumberish } from 'ethers';

/**
 * List of all the networks supported by the Uniswap Interface
 */
declare enum SupportedChainId {
    MAINNET = 1,
    ROPSTEN = 3,
    RINKEBY = 4,
    GOERLI = 5,
    KOVAN = 42,
    ARBITRUM_ONE = 42161,
    ARBITRUM_RINKEBY = 421611,
    OPTIMISM = 10,
    OPTIMISM_GOERLI = 420,
    POLYGON = 137,
    POLYGON_MUMBAI = 80001,
    CELO = 42220,
    CELO_ALFAJORES = 44787,
    BNB = 56,
    BASE = 8453,
    ETHEREUM_SEPOLIA = 11155111
}

type JsonRpcConnectionMap = {
    [chainId: number]: string | string[] | JsonRpcProvider | JsonRpcProvider[];
};

interface ProviderProps {
    defaultChainId?: SupportedChainId;
    jsonRpcUrlMap?: JsonRpcConnectionMap;
    /**
     * If null, no auto-connection (MetaMask or WalletConnect) will be attempted.
     * This is appropriate for integrations which wish to control the connected provider.
     */
    provider?: Provider | JsonRpcProvider | null;
}

interface Gaps {
    xs: string;
    sm: string;
    md: string;
    lg: string;
    lgplus: string;
    xl: string;
}
type BorderRadius = {
    xsmall: number;
    small: number;
    medium: number;
    large: number;
};
interface Attributes {
    borderRadius: BorderRadius;
    grids: Gaps;
    font: {
        family: string;
    };
}
interface Colors {
    surfacesAndElevation: {
        pageBackground: string;
        elevation1: string;
        elevation2: string;
        elevation3: string;
    };
    borders: {
        borders: string;
        dividers: string;
        dividerBlank: string;
    };
    text: {
        primary: string;
        secondary: string;
        tertiary: string;
        color: string;
        gain: string;
        loss: string;
    };
    components: {
        icon: {
            icon: string;
        };
        button: {
            primary: {
                background: string;
                foreground: string;
                hoverAndFocusBackground: string;
                hoverAndFocusForeground: string;
                disabledBackground: string;
                disabledForeground: string;
            };
            secondary: {
                foreground: string;
                hoverAndFocusBackground: string;
                hoverAndFocusForeground: string;
                disabledBorder: string;
                disabledForeground: string;
                border: string;
                hoverAndFocusBorder: string;
                background: string;
            };
            ghost: {
                background: string;
                hoverAndFocusBackground: string;
                hoverAndFocusForeground: string;
                disabledBackground: string;
            };
        };
        badge: {
            neutralBackground: string;
            neutralForeground: string;
            alertBackground: string;
            alertForeground: string;
        };
        inputFieldCurrencyField: {
            background: string;
            border: string;
            foreground: string;
            typeAndActiveForeground: string;
            disabledForeground: string;
            filledBackground: string;
            filledForeground: string;
        };
        dropdown: {
            background: string;
            foreground: string;
            hoverForeground: string;
            hoverBackground: string;
        };
        chip: {
            background: string;
            foreground: string;
        };
        toggle: {
            activeDefaultBackground: string;
            activeDefaultForeground: string;
            inactiveDefaultBackground: string;
        };
        tooltip: {
            background: string;
            foreground: string;
        };
        textButton: {
            primary: {
                default: string;
            };
            tertiary: {
                default: string;
            };
        };
        graph: {
            main: string;
        };
    };
}
interface Theme extends Colors, Attributes {
}

declare const tealLight: Colors;
declare const tealDark: Colors;

declare const orangeLight: Colors;
declare const orangeDark: Colors;

declare const defaultTheme: Theme;

interface WidgetProps extends ProviderProps {
    theme: Theme;
}

type PoolKey = {
    currency0: Currency;
    currency1: Currency;
    fee: BigNumberish;
    tickSpacing: BigNumberish;
    hooks: string;
};

interface InputRestrictions {
    min?: string;
    max?: string;
    pattern?: string;
    required?: boolean;
}
interface BaseProps {
    name: string;
    description?: string;
}
interface BaseInputField extends BaseProps {
    type: string;
    defaultValue?: string;
    restrictions?: InputRestrictions;
}
interface Tuple extends BaseProps {
    fields: InputField[];
}
type InputField = BaseInputField | Tuple;

type PoolInfo = {
    chainId: number;
    poolKey: PoolKey;
};
type HookInfo = {
    address: string;
    name: string;
    abbr: string;
    desc: string;
    inputFields: InputField[];
    overrideInputFields?: boolean;
};
type LPWidgetProps = {
    poolInfos: PoolInfo[];
    hookInfos: HookInfo[];
    currencyIconMap: Record<string, string>;
    onPoolSelect?: (poolKey: PoolKey) => void;
    hookData?: string;
};

type UniswapEasyProps = WidgetProps & LPWidgetProps;
declare function UniswapEasy(props: UniswapEasyProps): react_jsx_runtime.JSX.Element;

export { type Attributes, type BaseInputField, type Colors, type HookInfo, type InputField, type PoolInfo, type PoolKey, type Theme, type Tuple, UniswapEasy, type UniswapEasyProps, defaultTheme, orangeDark, orangeLight, tealDark, tealLight };
