import { ExtractPropTypes, PropType, CSSProperties, DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
import { Key, VueNode } from '../_util/type';
import { DisplayValueType, CustomTagProps, DropdownRender, Placement, RenderDOMFunc } from './BaseSelect';
import { VueTypeValidableDef } from 'vue-types';
import { AlignType } from '../vc-trigger/interface';
type ArrayElementType<T> = T extends (infer E)[] ? E : T;
export type OnActiveValue = (active: RawValueType, index: number, info?: {
    source?: 'keyboard' | 'mouse';
}) => void;
export type OnInternalSelect = (value: RawValueType, info: {
    selected: boolean;
}) => void;
export type RawValueType = string | number;
export interface LabelInValueType {
    label: any;
    originLabel?: any;
    value: RawValueType;
    /** @deprecated `key` is useless since it should always same as `value` */
    key?: Key;
}
export type DraftValueType = RawValueType | LabelInValueType | DisplayValueType | (RawValueType | LabelInValueType | DisplayValueType)[];
export type FilterFunc<OptionType> = (inputValue: string, option?: OptionType) => boolean;
export interface FieldNames {
    value?: string;
    label?: string;
    options?: string;
}
export interface BaseOptionType {
    disabled?: boolean;
    [name: string]: any;
}
export interface DefaultOptionType extends BaseOptionType {
    label?: any;
    value?: string | number | null;
    children?: Omit<DefaultOptionType, 'children'>[];
}
export type SelectHandler<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> = ((value: RawValueType | LabelInValueType, option: OptionType) => void) | ((value: ValueType, option: OptionType) => void);
export declare function selectProps<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType>(): {
    prefixCls: StringConstructor;
    id: StringConstructor;
    backfill: {
        type: BooleanConstructor;
        default: undefined;
    };
    fieldNames: PropType<FieldNames>;
    /** @deprecated Use `searchValue` instead */
    inputValue: StringConstructor;
    searchValue: StringConstructor;
    onSearch: PropType<(value: string) => void>;
    autoClearSearchValue: {
        type: BooleanConstructor;
        default: undefined;
    };
    onSelect: PropType<SelectHandler<ArrayElementType<ValueType>, OptionType>>;
    onDeselect: PropType<SelectHandler<ArrayElementType<ValueType>, OptionType>>;
    /**
     * In Select, `false` means do nothing.
     * In TreeSelect, `false` will highlight match item.
     * It's by design.
     */
    filterOption: {
        type: PropType<boolean | FilterFunc<OptionType>>;
        default: undefined;
    };
    filterSort: PropType<(optionA: OptionType, optionB: OptionType) => number>;
    optionFilterProp: StringConstructor;
    optionLabelProp: StringConstructor;
    options: PropType<OptionType[]>;
    defaultActiveFirstOption: {
        type: BooleanConstructor;
        default: undefined;
    };
    virtual: {
        type: BooleanConstructor;
        default: undefined;
    };
    listHeight: NumberConstructor;
    listItemHeight: NumberConstructor;
    menuItemSelectedIcon: VueTypeValidableDef<any>;
    mode: PropType<"combobox" | "multiple" | "tags">;
    labelInValue: {
        type: BooleanConstructor;
        default: undefined;
    };
    value: VueTypeValidableDef<any>;
    defaultValue: VueTypeValidableDef<any>;
    onChange: PropType<(value: ValueType, option: OptionType | OptionType[]) => void>;
    children: PropType<VueNode[]>;
    showSearch: {
        type: BooleanConstructor;
        default: undefined;
    };
    tagRender: {
        type: PropType<(props: CustomTagProps) => any>;
    };
    optionLabelRender: {
        type: PropType<(option: Record<string, any>) => any>;
    };
    direction: {
        type: PropType<"ltr" | "rtl">;
    };
    tabindex: NumberConstructor;
    autofocus: BooleanConstructor;
    notFoundContent: VueTypeValidableDef<any>;
    placeholder: VueTypeValidableDef<any>;
    onClear: PropType<() => void>;
    choiceTransitionName: StringConstructor;
    disabled: {
        type: BooleanConstructor;
        default: undefined;
    };
    loading: {
        type: BooleanConstructor;
        default: undefined;
    };
    open: {
        type: BooleanConstructor;
        default: undefined;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: undefined;
    };
    onDropdownVisibleChange: {
        type: PropType<(open: boolean) => void>;
    };
    getInputElement: {
        type: PropType<() => any>;
    };
    getRawInputElement: {
        type: PropType<() => any>;
    };
    maxTagTextLength: NumberConstructor;
    maxTagCount: {
        type: PropType<number | "responsive">;
    };
    maxTagPlaceholder: VueTypeValidableDef<any>;
    tokenSeparators: {
        type: PropType<string[]>;
    };
    allowClear: {
        type: BooleanConstructor;
        default: undefined;
    };
    showArrow: {
        type: BooleanConstructor;
        default: undefined;
    };
    inputIcon: VueTypeValidableDef<any>;
    clearIcon: VueTypeValidableDef<any>;
    removeIcon: VueTypeValidableDef<any>;
    animation: StringConstructor;
    transitionName: StringConstructor;
    dropdownStyle: {
        type: PropType< CSSProperties>;
    };
    dropdownClassName: StringConstructor;
    dropdownMatchSelectWidth: {
        type: PropType<boolean | number>;
        default: undefined;
    };
    dropdownRender: {
        type: PropType< DropdownRender>;
    };
    dropdownAlign: PropType< AlignType>;
    placement: {
        type: PropType< Placement>;
    };
    getPopupContainer: {
        type: PropType< RenderDOMFunc>;
    };
    showAction: {
        type: PropType<("focus" | "click")[]>;
    };
    onBlur: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onFocus: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onKeyup: PropType<(e: KeyboardEvent) => void>;
    onKeydown: PropType<(e: KeyboardEvent) => void>;
    onMousedown: PropType<(e: MouseEvent) => void>;
    onPopupScroll: PropType<(e: UIEvent) => void>;
    onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
    onMouseenter: PropType<(e: MouseEvent) => void>;
    onMouseleave: PropType<(e: MouseEvent) => void>;
    onClick: PropType<(e: MouseEvent) => void>;
};
export type SelectProps = Partial<ExtractPropTypes<ReturnType<typeof selectProps>>>;
declare const _default: DefineComponent<ExtractPropTypes<{
    prefixCls: StringConstructor;
    id: StringConstructor;
    backfill: {
        type: BooleanConstructor;
        default: undefined;
    };
    fieldNames: PropType<FieldNames>;
    /** @deprecated Use `searchValue` instead */
    inputValue: StringConstructor;
    searchValue: StringConstructor;
    onSearch: PropType<(value: string) => void>;
    autoClearSearchValue: {
        type: BooleanConstructor;
        default: undefined;
    };
    onSelect: PropType<SelectHandler<any, DefaultOptionType>>;
    onDeselect: PropType<SelectHandler<any, DefaultOptionType>>;
    /**
     * In Select, `false` means do nothing.
     * In TreeSelect, `false` will highlight match item.
     * It's by design.
     */
    filterOption: {
        type: PropType<boolean | FilterFunc<DefaultOptionType>>;
        default: undefined;
    };
    filterSort: PropType<(optionA: DefaultOptionType, optionB: DefaultOptionType) => number>;
    optionFilterProp: StringConstructor;
    optionLabelProp: StringConstructor;
    options: PropType<DefaultOptionType[]>;
    defaultActiveFirstOption: {
        type: BooleanConstructor;
        default: undefined;
    };
    virtual: {
        type: BooleanConstructor;
        default: undefined;
    };
    listHeight: NumberConstructor;
    listItemHeight: NumberConstructor;
    menuItemSelectedIcon: VueTypeValidableDef<any>;
    mode: PropType<"combobox" | "multiple" | "tags">;
    labelInValue: {
        type: BooleanConstructor;
        default: undefined;
    };
    value: VueTypeValidableDef<any>;
    defaultValue: VueTypeValidableDef<any>;
    onChange: PropType<(value: any, option: DefaultOptionType | DefaultOptionType[]) => void>;
    children: PropType<VueNode[]>;
    showSearch: {
        type: BooleanConstructor;
        default: undefined;
    };
    tagRender: {
        type: PropType<(props: CustomTagProps) => any>;
    };
    optionLabelRender: {
        type: PropType<(option: Record<string, any>) => any>;
    };
    direction: {
        type: PropType<"ltr" | "rtl">;
    };
    tabindex: NumberConstructor;
    autofocus: BooleanConstructor;
    notFoundContent: VueTypeValidableDef<any>;
    placeholder: VueTypeValidableDef<any>;
    onClear: PropType<() => void>;
    choiceTransitionName: StringConstructor;
    disabled: {
        type: BooleanConstructor;
        default: undefined;
    };
    loading: {
        type: BooleanConstructor;
        default: undefined;
    };
    open: {
        type: BooleanConstructor;
        default: undefined;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: undefined;
    };
    onDropdownVisibleChange: {
        type: PropType<(open: boolean) => void>;
    };
    getInputElement: {
        type: PropType<() => any>;
    };
    getRawInputElement: {
        type: PropType<() => any>;
    };
    maxTagTextLength: NumberConstructor;
    maxTagCount: {
        type: PropType<number | "responsive">;
    };
    maxTagPlaceholder: VueTypeValidableDef<any>;
    tokenSeparators: {
        type: PropType<string[]>;
    };
    allowClear: {
        type: BooleanConstructor;
        default: undefined;
    };
    showArrow: {
        type: BooleanConstructor;
        default: undefined;
    };
    inputIcon: VueTypeValidableDef<any>;
    clearIcon: VueTypeValidableDef<any>;
    removeIcon: VueTypeValidableDef<any>;
    animation: StringConstructor;
    transitionName: StringConstructor;
    dropdownStyle: {
        type: PropType< CSSProperties>;
    };
    dropdownClassName: StringConstructor;
    dropdownMatchSelectWidth: {
        type: PropType<boolean | number>;
        default: undefined;
    };
    dropdownRender: {
        type: PropType< DropdownRender>;
    };
    dropdownAlign: PropType< AlignType>;
    placement: {
        type: PropType< Placement>;
    };
    getPopupContainer: {
        type: PropType< RenderDOMFunc>;
    };
    showAction: {
        type: PropType<("focus" | "click")[]>;
    };
    onBlur: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onFocus: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onKeyup: PropType<(e: KeyboardEvent) => void>;
    onKeydown: PropType<(e: KeyboardEvent) => void>;
    onMousedown: PropType<(e: MouseEvent) => void>;
    onPopupScroll: PropType<(e: UIEvent) => void>;
    onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
    onMouseenter: PropType<(e: MouseEvent) => void>;
    onMouseleave: PropType<(e: MouseEvent) => void>;
    onClick: PropType<(e: MouseEvent) => void>;
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<{
    prefixCls: StringConstructor;
    id: StringConstructor;
    backfill: {
        type: BooleanConstructor;
        default: undefined;
    };
    fieldNames: PropType<FieldNames>;
    /** @deprecated Use `searchValue` instead */
    inputValue: StringConstructor;
    searchValue: StringConstructor;
    onSearch: PropType<(value: string) => void>;
    autoClearSearchValue: {
        type: BooleanConstructor;
        default: undefined;
    };
    onSelect: PropType<SelectHandler<any, DefaultOptionType>>;
    onDeselect: PropType<SelectHandler<any, DefaultOptionType>>;
    /**
     * In Select, `false` means do nothing.
     * In TreeSelect, `false` will highlight match item.
     * It's by design.
     */
    filterOption: {
        type: PropType<boolean | FilterFunc<DefaultOptionType>>;
        default: undefined;
    };
    filterSort: PropType<(optionA: DefaultOptionType, optionB: DefaultOptionType) => number>;
    optionFilterProp: StringConstructor;
    optionLabelProp: StringConstructor;
    options: PropType<DefaultOptionType[]>;
    defaultActiveFirstOption: {
        type: BooleanConstructor;
        default: undefined;
    };
    virtual: {
        type: BooleanConstructor;
        default: undefined;
    };
    listHeight: NumberConstructor;
    listItemHeight: NumberConstructor;
    menuItemSelectedIcon: VueTypeValidableDef<any>;
    mode: PropType<"combobox" | "multiple" | "tags">;
    labelInValue: {
        type: BooleanConstructor;
        default: undefined;
    };
    value: VueTypeValidableDef<any>;
    defaultValue: VueTypeValidableDef<any>;
    onChange: PropType<(value: any, option: DefaultOptionType | DefaultOptionType[]) => void>;
    children: PropType<VueNode[]>;
    showSearch: {
        type: BooleanConstructor;
        default: undefined;
    };
    tagRender: {
        type: PropType<(props: CustomTagProps) => any>;
    };
    optionLabelRender: {
        type: PropType<(option: Record<string, any>) => any>;
    };
    direction: {
        type: PropType<"ltr" | "rtl">;
    };
    tabindex: NumberConstructor;
    autofocus: BooleanConstructor;
    notFoundContent: VueTypeValidableDef<any>;
    placeholder: VueTypeValidableDef<any>;
    onClear: PropType<() => void>;
    choiceTransitionName: StringConstructor;
    disabled: {
        type: BooleanConstructor;
        default: undefined;
    };
    loading: {
        type: BooleanConstructor;
        default: undefined;
    };
    open: {
        type: BooleanConstructor;
        default: undefined;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: undefined;
    };
    onDropdownVisibleChange: {
        type: PropType<(open: boolean) => void>;
    };
    getInputElement: {
        type: PropType<() => any>;
    };
    getRawInputElement: {
        type: PropType<() => any>;
    };
    maxTagTextLength: NumberConstructor;
    maxTagCount: {
        type: PropType<number | "responsive">;
    };
    maxTagPlaceholder: VueTypeValidableDef<any>;
    tokenSeparators: {
        type: PropType<string[]>;
    };
    allowClear: {
        type: BooleanConstructor;
        default: undefined;
    };
    showArrow: {
        type: BooleanConstructor;
        default: undefined;
    };
    inputIcon: VueTypeValidableDef<any>;
    clearIcon: VueTypeValidableDef<any>;
    removeIcon: VueTypeValidableDef<any>;
    animation: StringConstructor;
    transitionName: StringConstructor;
    dropdownStyle: {
        type: PropType< CSSProperties>;
    };
    dropdownClassName: StringConstructor;
    dropdownMatchSelectWidth: {
        type: PropType<boolean | number>;
        default: undefined;
    };
    dropdownRender: {
        type: PropType< DropdownRender>;
    };
    dropdownAlign: PropType< AlignType>;
    placement: {
        type: PropType< Placement>;
    };
    getPopupContainer: {
        type: PropType< RenderDOMFunc>;
    };
    showAction: {
        type: PropType<("focus" | "click")[]>;
    };
    onBlur: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onFocus: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onKeyup: PropType<(e: KeyboardEvent) => void>;
    onKeydown: PropType<(e: KeyboardEvent) => void>;
    onMousedown: PropType<(e: MouseEvent) => void>;
    onPopupScroll: PropType<(e: UIEvent) => void>;
    onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
    onMouseenter: PropType<(e: MouseEvent) => void>;
    onMouseleave: PropType<(e: MouseEvent) => void>;
    onClick: PropType<(e: MouseEvent) => void>;
}>> & Readonly<{}>, {
    open: boolean;
    disabled: boolean;
    autofocus: boolean;
    virtual: boolean;
    dropdownMatchSelectWidth: number | boolean;
    loading: boolean;
    allowClear: boolean;
    defaultOpen: boolean;
    showSearch: boolean;
    showArrow: boolean;
    backfill: boolean;
    autoClearSearchValue: boolean;
    filterOption: boolean | FilterFunc<DefaultOptionType>;
    defaultActiveFirstOption: boolean;
    labelInValue: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
export default _default;
