import type { CheckedStrategy } from './utils/strategyUtil';
import type { Key } from './interface';
import type { DisplayValueType } from '../vc-select/BaseSelect';
import type { ExtractPropTypes, PropType } from 'vue';
import type { VueNode } from '../_util/type';
export declare type OnInternalSelect = (value: RawValueType, info: {
    selected: boolean;
}) => void;
export declare type RawValueType = string | number;
export interface LabeledValueType {
    key?: Key;
    value?: RawValueType;
    label?: any;
    /** Only works on `treeCheckStrictly` */
    halfChecked?: boolean;
}
export declare type SelectSource = 'option' | 'selection' | 'input' | 'clear';
export declare type DraftValueType = RawValueType | LabeledValueType | (RawValueType | LabeledValueType)[];
/** @deprecated This is only used for legacy compatible. Not works on new code. */
export interface LegacyCheckedNode {
    pos: string;
    node: any;
    children?: LegacyCheckedNode[];
}
export interface ChangeEventExtra {
    /** @deprecated Please save prev value by control logic instead */
    preValue: LabeledValueType[];
    triggerValue: RawValueType;
    /** @deprecated Use `onSelect` or `onDeselect` instead. */
    selected?: boolean;
    /** @deprecated Use `onSelect` or `onDeselect` instead. */
    checked?: boolean;
    /** @deprecated This prop not work as react node anymore. */
    triggerNode: any;
    /** @deprecated This prop not work as react node anymore. */
    allCheckedNodes: LegacyCheckedNode[];
}
export interface FieldNames {
    value?: string;
    label?: string;
    children?: string;
}
export interface InternalFieldName extends Omit<FieldNames, 'label'> {
    _title: string[];
}
export interface SimpleModeConfig {
    id?: Key;
    pId?: Key;
    rootPId?: Key;
}
export interface BaseOptionType {
    disabled?: boolean;
    checkable?: boolean;
    disableCheckbox?: boolean;
    children?: BaseOptionType[];
    [name: string]: any;
}
export interface DefaultOptionType extends BaseOptionType {
    value?: RawValueType;
    title?: any;
    label?: any;
    key?: Key;
    children?: DefaultOptionType[];
}
export interface LegacyDataNode extends DefaultOptionType {
    props: any;
}
export declare function treeSelectProps<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType>(): {
    prefixCls: StringConstructor;
    id: StringConstructor;
    value: {
        type: PropType<ValueType>;
    };
    defaultValue: {
        type: PropType<ValueType>;
    };
    onChange: {
        type: PropType<(value: ValueType, labelList: any[], extra: ChangeEventExtra) => void>;
    };
    searchValue: StringConstructor;
    /** @deprecated Use `searchValue` instead */
    inputValue: StringConstructor;
    onSearch: {
        type: PropType<(value: string) => void>;
    };
    autoClearSearchValue: {
        type: BooleanConstructor;
        default: any;
    };
    filterTreeNode: {
        type: PropType<boolean | ((inputValue: string, treeNode: DefaultOptionType) => boolean)>;
        default: any;
    };
    treeNodeFilterProp: StringConstructor;
    onSelect: PropType<import("../vc-select/Select").SelectHandler<unknown, import("../select").BaseOptionType>>;
    onDeselect: PropType<import("../vc-select/Select").SelectHandler<unknown, import("../select").BaseOptionType>>;
    showCheckedStrategy: {
        type: PropType<CheckedStrategy>;
    };
    treeNodeLabelProp: StringConstructor;
    fieldNames: {
        type: PropType<FieldNames>;
    };
    multiple: {
        type: BooleanConstructor;
        default: any;
    };
    treeCheckable: {
        type: BooleanConstructor;
        default: any;
    };
    treeCheckStrictly: {
        type: BooleanConstructor;
        default: any;
    };
    labelInValue: {
        type: BooleanConstructor;
        default: any;
    };
    treeData: {
        type: PropType<OptionType[]>;
    };
    treeDataSimpleMode: {
        type: PropType<boolean | SimpleModeConfig>;
        default: any;
    };
    loadData: {
        type: PropType<(dataNode: LegacyDataNode) => Promise<unknown>>;
    };
    treeLoadedKeys: {
        type: PropType<Key[]>;
    };
    onTreeLoad: {
        type: PropType<(loadedKeys: Key[]) => void>;
    };
    treeDefaultExpandAll: {
        type: BooleanConstructor;
        default: any;
    };
    treeExpandedKeys: {
        type: PropType<Key[]>;
    };
    treeDefaultExpandedKeys: {
        type: PropType<Key[]>;
    };
    onTreeExpand: {
        type: PropType<(expandedKeys: Key[]) => void>;
    };
    virtual: {
        type: BooleanConstructor;
        default: any;
    };
    listHeight: NumberConstructor;
    listItemHeight: NumberConstructor;
    onDropdownVisibleChange: {
        type: PropType<(open: boolean) => void>;
    };
    treeLine: {
        type: (BooleanConstructor | ObjectConstructor)[];
        default: any;
    };
    treeIcon: import("vue-types").VueTypeValidableDef<any>;
    showTreeIcon: {
        type: BooleanConstructor;
        default: any;
    };
    switcherIcon: import("vue-types").VueTypeValidableDef<any>;
    treeMotion: import("vue-types").VueTypeValidableDef<any>;
    children: PropType<VueNode[]>;
    showArrow: {
        type: BooleanConstructor;
        default: any;
    };
    showSearch: {
        type: BooleanConstructor;
        default: any;
    };
    open: {
        type: BooleanConstructor;
        default: any;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: any;
    };
    disabled: {
        type: BooleanConstructor;
        default: any;
    };
    placeholder: import("vue-types").VueTypeValidableDef<any>;
    maxTagPlaceholder: {
        type: PropType<(omittedValues: DisplayValueType[]) => any>;
    };
    dropdownPopupAlign: import("vue-types").VueTypeValidableDef<any>;
    customSlots: ObjectConstructor;
    onFocus: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onBlur: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onKeydown: PropType<(e: KeyboardEvent) => void>;
    onKeyup: PropType<(e: KeyboardEvent) => void>;
    onClick: PropType<(e: MouseEvent) => void>;
    onMousedown: PropType<(e: MouseEvent) => void>;
    onMouseenter: PropType<(e: MouseEvent) => void>;
    onMouseleave: PropType<(e: MouseEvent) => void>;
    direction: {
        type: PropType<"ltr" | "rtl">;
    };
    animation: StringConstructor;
    tabindex: NumberConstructor;
    getPopupContainer: {
        type: PropType<import("../vc-select/BaseSelect").RenderDOMFunc>;
    };
    dropdownMatchSelectWidth: {
        type: PropType<number | boolean>;
        default: any;
    };
    transitionName: StringConstructor;
    showAction: {
        type: PropType<("click" | "focus")[]>;
    };
    placement: {
        type: PropType<import("../vc-select/BaseSelect").Placement>;
    };
    autofocus: BooleanConstructor;
    dropdownStyle: {
        type: PropType<import("vue").CSSProperties>;
    };
    dropdownClassName: StringConstructor;
    dropdownRender: {
        type: PropType<import("../vc-select/BaseSelect").DropdownRender>;
    };
    dropdownAlign: PropType<import("../vc-trigger/interface").AlignType>;
    loading: {
        type: BooleanConstructor;
        default: any;
    };
    onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
    removeIcon: import("vue-types").VueTypeValidableDef<any>;
    maxTagCount: {
        type: PropType<number | "responsive">;
    };
    maxTagTextLength: NumberConstructor;
    tokenSeparators: {
        type: PropType<string[]>;
    };
    tagRender: {
        type: PropType<(props: import("../vc-select/BaseSelect").CustomTagProps) => any>;
    };
    choiceTransitionName: StringConstructor;
    optionLabelRender: {
        type: PropType<(option: Record<string, any>) => any>;
    };
    notFoundContent: import("vue-types").VueTypeValidableDef<any>;
    onClear: PropType<() => void>;
    getInputElement: {
        type: PropType<() => any>;
    };
    getRawInputElement: {
        type: PropType<() => any>;
    };
    allowClear: {
        type: BooleanConstructor;
        default: any;
    };
    inputIcon: import("vue-types").VueTypeValidableDef<any>;
    clearIcon: import("vue-types").VueTypeValidableDef<any>;
    searchDropdownAutoClose: {
        type: BooleanConstructor;
        default: boolean;
    };
    onPopupScroll: PropType<(e: UIEvent) => void>;
};
export declare type TreeSelectProps = Partial<ExtractPropTypes<ReturnType<typeof treeSelectProps>>>;
declare const _default: import("vue").DefineComponent<{
    prefixCls: StringConstructor;
    id: StringConstructor;
    value: {
        type: PropType<any>;
    };
    defaultValue: {
        type: PropType<any>;
    };
    onChange: {
        type: PropType<(value: any, labelList: any[], extra: ChangeEventExtra) => void>;
    };
    searchValue: StringConstructor;
    /** @deprecated Use `searchValue` instead */
    inputValue: StringConstructor;
    onSearch: {
        type: PropType<(value: string) => void>;
    };
    autoClearSearchValue: {
        type: BooleanConstructor;
        default: any;
    };
    filterTreeNode: {
        type: PropType<boolean | ((inputValue: string, treeNode: DefaultOptionType) => boolean)>;
        default: any;
    };
    treeNodeFilterProp: StringConstructor;
    onSelect: PropType<import("../vc-select/Select").SelectHandler<unknown, import("../select").BaseOptionType>>;
    onDeselect: PropType<import("../vc-select/Select").SelectHandler<unknown, import("../select").BaseOptionType>>;
    showCheckedStrategy: {
        type: PropType<CheckedStrategy>;
    };
    treeNodeLabelProp: StringConstructor;
    fieldNames: {
        type: PropType<FieldNames>;
    };
    multiple: {
        type: BooleanConstructor;
        default: any;
    };
    treeCheckable: {
        type: BooleanConstructor;
        default: any;
    };
    treeCheckStrictly: {
        type: BooleanConstructor;
        default: any;
    };
    labelInValue: {
        type: BooleanConstructor;
        default: any;
    };
    treeData: {
        type: PropType<DefaultOptionType[]>;
    };
    treeDataSimpleMode: {
        type: PropType<boolean | SimpleModeConfig>;
        default: any;
    };
    loadData: {
        type: PropType<(dataNode: LegacyDataNode) => Promise<unknown>>;
    };
    treeLoadedKeys: {
        type: PropType<Key[]>;
    };
    onTreeLoad: {
        type: PropType<(loadedKeys: Key[]) => void>;
    };
    treeDefaultExpandAll: {
        type: BooleanConstructor;
        default: any;
    };
    treeExpandedKeys: {
        type: PropType<Key[]>;
    };
    treeDefaultExpandedKeys: {
        type: PropType<Key[]>;
    };
    onTreeExpand: {
        type: PropType<(expandedKeys: Key[]) => void>;
    };
    virtual: {
        type: BooleanConstructor;
        default: any;
    };
    listHeight: NumberConstructor;
    listItemHeight: NumberConstructor;
    onDropdownVisibleChange: {
        type: PropType<(open: boolean) => void>;
    };
    treeLine: {
        type: (BooleanConstructor | ObjectConstructor)[];
        default: any;
    };
    treeIcon: import("vue-types").VueTypeValidableDef<any>;
    showTreeIcon: {
        type: BooleanConstructor;
        default: any;
    };
    switcherIcon: import("vue-types").VueTypeValidableDef<any>;
    treeMotion: import("vue-types").VueTypeValidableDef<any>;
    children: PropType<VueNode[]>;
    showArrow: {
        type: BooleanConstructor;
        default: any;
    };
    showSearch: {
        type: BooleanConstructor;
        default: any;
    };
    open: {
        type: BooleanConstructor;
        default: any;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: any;
    };
    disabled: {
        type: BooleanConstructor;
        default: any;
    };
    placeholder: import("vue-types").VueTypeValidableDef<any>;
    maxTagPlaceholder: {
        type: PropType<(omittedValues: DisplayValueType[]) => any>;
    };
    dropdownPopupAlign: import("vue-types").VueTypeValidableDef<any>;
    customSlots: ObjectConstructor;
    onFocus: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onBlur: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onKeydown: PropType<(e: KeyboardEvent) => void>;
    onKeyup: PropType<(e: KeyboardEvent) => void>;
    onClick: PropType<(e: MouseEvent) => void>;
    onMousedown: PropType<(e: MouseEvent) => void>;
    onMouseenter: PropType<(e: MouseEvent) => void>;
    onMouseleave: PropType<(e: MouseEvent) => void>;
    direction: {
        type: PropType<"ltr" | "rtl">;
    };
    animation: StringConstructor;
    tabindex: NumberConstructor;
    getPopupContainer: {
        type: PropType<import("../vc-select/BaseSelect").RenderDOMFunc>;
    };
    dropdownMatchSelectWidth: {
        type: PropType<number | boolean>;
        default: any;
    };
    transitionName: StringConstructor;
    showAction: {
        type: PropType<("click" | "focus")[]>;
    };
    placement: {
        type: PropType<import("../vc-select/BaseSelect").Placement>;
    };
    autofocus: BooleanConstructor;
    dropdownStyle: {
        type: PropType<import("vue").CSSProperties>;
    };
    dropdownClassName: StringConstructor;
    dropdownRender: {
        type: PropType<import("../vc-select/BaseSelect").DropdownRender>;
    };
    dropdownAlign: PropType<import("../vc-trigger/interface").AlignType>;
    loading: {
        type: BooleanConstructor;
        default: any;
    };
    onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
    removeIcon: import("vue-types").VueTypeValidableDef<any>;
    maxTagCount: {
        type: PropType<number | "responsive">;
    };
    maxTagTextLength: NumberConstructor;
    tokenSeparators: {
        type: PropType<string[]>;
    };
    tagRender: {
        type: PropType<(props: import("../vc-select/BaseSelect").CustomTagProps) => any>;
    };
    choiceTransitionName: StringConstructor;
    optionLabelRender: {
        type: PropType<(option: Record<string, any>) => any>;
    };
    notFoundContent: import("vue-types").VueTypeValidableDef<any>;
    onClear: PropType<() => void>;
    getInputElement: {
        type: PropType<() => any>;
    };
    getRawInputElement: {
        type: PropType<() => any>;
    };
    allowClear: {
        type: BooleanConstructor;
        default: any;
    };
    inputIcon: import("vue-types").VueTypeValidableDef<any>;
    clearIcon: import("vue-types").VueTypeValidableDef<any>;
    searchDropdownAutoClose: {
        type: BooleanConstructor;
        default: boolean;
    };
    onPopupScroll: PropType<(e: UIEvent) => void>;
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
    prefixCls: StringConstructor;
    id: StringConstructor;
    value: {
        type: PropType<any>;
    };
    defaultValue: {
        type: PropType<any>;
    };
    onChange: {
        type: PropType<(value: any, labelList: any[], extra: ChangeEventExtra) => void>;
    };
    searchValue: StringConstructor;
    /** @deprecated Use `searchValue` instead */
    inputValue: StringConstructor;
    onSearch: {
        type: PropType<(value: string) => void>;
    };
    autoClearSearchValue: {
        type: BooleanConstructor;
        default: any;
    };
    filterTreeNode: {
        type: PropType<boolean | ((inputValue: string, treeNode: DefaultOptionType) => boolean)>;
        default: any;
    };
    treeNodeFilterProp: StringConstructor;
    onSelect: PropType<import("../vc-select/Select").SelectHandler<unknown, import("../select").BaseOptionType>>;
    onDeselect: PropType<import("../vc-select/Select").SelectHandler<unknown, import("../select").BaseOptionType>>;
    showCheckedStrategy: {
        type: PropType<CheckedStrategy>;
    };
    treeNodeLabelProp: StringConstructor;
    fieldNames: {
        type: PropType<FieldNames>;
    };
    multiple: {
        type: BooleanConstructor;
        default: any;
    };
    treeCheckable: {
        type: BooleanConstructor;
        default: any;
    };
    treeCheckStrictly: {
        type: BooleanConstructor;
        default: any;
    };
    labelInValue: {
        type: BooleanConstructor;
        default: any;
    };
    treeData: {
        type: PropType<DefaultOptionType[]>;
    };
    treeDataSimpleMode: {
        type: PropType<boolean | SimpleModeConfig>;
        default: any;
    };
    loadData: {
        type: PropType<(dataNode: LegacyDataNode) => Promise<unknown>>;
    };
    treeLoadedKeys: {
        type: PropType<Key[]>;
    };
    onTreeLoad: {
        type: PropType<(loadedKeys: Key[]) => void>;
    };
    treeDefaultExpandAll: {
        type: BooleanConstructor;
        default: any;
    };
    treeExpandedKeys: {
        type: PropType<Key[]>;
    };
    treeDefaultExpandedKeys: {
        type: PropType<Key[]>;
    };
    onTreeExpand: {
        type: PropType<(expandedKeys: Key[]) => void>;
    };
    virtual: {
        type: BooleanConstructor;
        default: any;
    };
    listHeight: NumberConstructor;
    listItemHeight: NumberConstructor;
    onDropdownVisibleChange: {
        type: PropType<(open: boolean) => void>;
    };
    treeLine: {
        type: (BooleanConstructor | ObjectConstructor)[];
        default: any;
    };
    treeIcon: import("vue-types").VueTypeValidableDef<any>;
    showTreeIcon: {
        type: BooleanConstructor;
        default: any;
    };
    switcherIcon: import("vue-types").VueTypeValidableDef<any>;
    treeMotion: import("vue-types").VueTypeValidableDef<any>;
    children: PropType<VueNode[]>;
    showArrow: {
        type: BooleanConstructor;
        default: any;
    };
    showSearch: {
        type: BooleanConstructor;
        default: any;
    };
    open: {
        type: BooleanConstructor;
        default: any;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: any;
    };
    disabled: {
        type: BooleanConstructor;
        default: any;
    };
    placeholder: import("vue-types").VueTypeValidableDef<any>;
    maxTagPlaceholder: {
        type: PropType<(omittedValues: DisplayValueType[]) => any>;
    };
    dropdownPopupAlign: import("vue-types").VueTypeValidableDef<any>;
    customSlots: ObjectConstructor;
    onFocus: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onBlur: {
        type: PropType<(e: FocusEvent) => void>;
    };
    onKeydown: PropType<(e: KeyboardEvent) => void>;
    onKeyup: PropType<(e: KeyboardEvent) => void>;
    onClick: PropType<(e: MouseEvent) => void>;
    onMousedown: PropType<(e: MouseEvent) => void>;
    onMouseenter: PropType<(e: MouseEvent) => void>;
    onMouseleave: PropType<(e: MouseEvent) => void>;
    direction: {
        type: PropType<"ltr" | "rtl">;
    };
    animation: StringConstructor;
    tabindex: NumberConstructor;
    getPopupContainer: {
        type: PropType<import("../vc-select/BaseSelect").RenderDOMFunc>;
    };
    dropdownMatchSelectWidth: {
        type: PropType<number | boolean>;
        default: any;
    };
    transitionName: StringConstructor;
    showAction: {
        type: PropType<("click" | "focus")[]>;
    };
    placement: {
        type: PropType<import("../vc-select/BaseSelect").Placement>;
    };
    autofocus: BooleanConstructor;
    dropdownStyle: {
        type: PropType<import("vue").CSSProperties>;
    };
    dropdownClassName: StringConstructor;
    dropdownRender: {
        type: PropType<import("../vc-select/BaseSelect").DropdownRender>;
    };
    dropdownAlign: PropType<import("../vc-trigger/interface").AlignType>;
    loading: {
        type: BooleanConstructor;
        default: any;
    };
    onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
    removeIcon: import("vue-types").VueTypeValidableDef<any>;
    maxTagCount: {
        type: PropType<number | "responsive">;
    };
    maxTagTextLength: NumberConstructor;
    tokenSeparators: {
        type: PropType<string[]>;
    };
    tagRender: {
        type: PropType<(props: import("../vc-select/BaseSelect").CustomTagProps) => any>;
    };
    choiceTransitionName: StringConstructor;
    optionLabelRender: {
        type: PropType<(option: Record<string, any>) => any>;
    };
    notFoundContent: import("vue-types").VueTypeValidableDef<any>;
    onClear: PropType<() => void>;
    getInputElement: {
        type: PropType<() => any>;
    };
    getRawInputElement: {
        type: PropType<() => any>;
    };
    allowClear: {
        type: BooleanConstructor;
        default: any;
    };
    inputIcon: import("vue-types").VueTypeValidableDef<any>;
    clearIcon: import("vue-types").VueTypeValidableDef<any>;
    searchDropdownAutoClose: {
        type: BooleanConstructor;
        default: boolean;
    };
    onPopupScroll: PropType<(e: UIEvent) => void>;
}>>, {
    open: boolean;
    multiple: boolean;
    disabled: boolean;
    virtual: boolean;
    dropdownMatchSelectWidth: number | boolean;
    autofocus: boolean;
    loading: boolean;
    filterTreeNode: boolean | ((inputValue: string, treeNode: DefaultOptionType) => boolean);
    treeCheckable: boolean;
    showSearch: boolean;
    defaultOpen: boolean;
    allowClear: boolean;
    showArrow: boolean;
    searchDropdownAutoClose: boolean;
    autoClearSearchValue: boolean;
    labelInValue: boolean;
    treeDefaultExpandAll: boolean;
    showTreeIcon: boolean;
    treeLine: boolean | Record<string, any>;
    treeCheckStrictly: boolean;
    treeDataSimpleMode: any;
}>;
export default _default;
