import { ReactNode } from 'react';
import { StyleKeys } from './constants';
import { OptionItemProps } from '../components/OptionItem';
export interface ExtraState {
    [key: string]: any;
}
export declare type StyleKey = keyof typeof StyleKeys;
declare type StyleFunction = (base: {}, state: DropdownStyleDependantState, extraState?: {}) => {};
export declare type GetStyleFunction = (key: StyleKey, extraState?: ExtraState) => string;
export declare type OptionRendererFunction = (props: OptionItemProps, getStyle: GetStyleFunction, index: number) => JSX.Element;
export declare type OnOptionClicked = (option: Option, shouldClose?: boolean) => void;
export declare type ItemRenderer = (props: OptionItemProps, index: number) => JSX.Element;
export interface DropdownStyle {
    Arrow?: StyleFunction;
    DropdownButton?: StyleFunction;
    DisplayedValue?: StyleFunction;
    DropdownWrapper?: StyleFunction;
    GroupContainer?: StyleFunction;
    GroupHeading?: StyleFunction;
    GroupDivider?: StyleFunction;
    OptionContainer?: StyleFunction;
    OptionItem?: StyleFunction;
}
export interface Option {
    ariaLabel?: string;
    className?: string;
    title?: string;
    value: string;
    iconClass?: string;
}
export interface OptionGroup {
    label: string;
    groupOptions: Option[];
}
export declare type DropdownOption = Option | OptionGroup;
export interface DropdownStyleDependantState {
    open: boolean;
    focusedIndex: number;
    dropdownFocused: boolean;
}
export interface DropdownState extends DropdownStyleDependantState {
    searchTerm: string;
}
export interface DropdownProps {
    ariaDescribedBy: string;
    ariaLabel: string;
    ariaLabelledBy: string;
    ariaRequired: boolean;
    arrowRenderer: (open: boolean) => ReactNode;
    className: string;
    centerText: boolean;
    contentClassName: string;
    defaultOpen: boolean;
    disabled: boolean;
    height: number;
    hideArrow: boolean;
    id: string;
    maxContentHeight: number;
    openUp: boolean;
    options: DropdownOption[];
    optionItemRenderer: OptionRendererFunction;
    pageKeyTraverseSize: number;
    placeholder: string;
    searchable: boolean;
    value: string;
    selectedValueClassName: string;
    onChange: (option: Option) => void;
    style: DropdownStyle;
    width: number;
    loading: boolean;
}
export {};
