export type SelectValueType = number | string;
export type SelectOptionType<T extends SelectValueType = SelectValueType> = {
    value: T;
    label?: string;
    prefix?: React.ReactElement;
    suffix?: React.ReactElement;
    className?: string;
    style?: React.CSSProperties;
    [k: string]: any;
    onClick?: (value: T) => void;
    onMouseEnter?: (value: T) => void;
};
export type SelectGroup<T extends SelectValueType> = {
    id: string;
    label: React.ReactNode;
    options: SelectOptionType<T>[];
    [k: string]: any;
};
export type BaseSelectProps<T extends SelectValueType> = {
    options: SelectOptionType<T>[] | SelectGroup<T>[];
    className?: string;
    style?: React.CSSProperties;
    placeholder?: string;
    disabled?: boolean;
    wrapperClassName?: string;
    wrapperStyle?: React.CSSProperties;
} & Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange' | 'defaultValue' | 'value' | 'children'>;
export type SelectProps<T extends SelectValueType> = {
    defaultValue?: T;
    value?: T;
    allowClear?: boolean;
    onChange?: (value?: T) => void;
} & BaseSelectProps<T>;
export type MultipleSelectProps<T extends SelectValueType> = {
    defaultValue?: T[];
    value?: T[];
    showSearch?: boolean;
    onChange?: (value: T[]) => void;
} & BaseSelectProps<T>;
export interface SelectPanelProps<T extends SelectValueType, O extends SelectOptionType<T>> {
    value?: T;
    wrapperClassName?: string;
    wrapperStyle?: React.CSSProperties;
    options: SelectOptionType<T>[] | SelectGroup<T>[];
    onClickItem?: (item: O) => void;
}
