/// <reference types="lodash" />
import React, { CSSProperties, ReactNode } from 'react';
import PropTypes from 'prop-types';
import { IReactionDisposer } from 'mobx';
import Menu from '../../../lib/rc-components/menu';
import { Tooltip as OptionTooltip } from '../core/enum';
import TriggerField, { TriggerFieldPopupContentProps, TriggerFieldProps } from '../trigger-field/TriggerField';
import { ValidationMessages } from '../validator/Validator';
import Option, { OptionProps } from '../option/Option';
import OptGroup from '../option/OptGroup';
import DataSet from '../data-set/DataSet';
import Record from '../data-set/Record';
import { Renderer } from '../field/FormField';
import Field from '../data-set/Field';
import { ButtonProps } from '../button/Button';
import { TextFieldProps } from '../text-field/TextField';
import { ValueChangeAction } from '../text-field/enum';
import { Action } from '../trigger/enum';
export declare function isSearchTextEmpty(text: string | string[] | undefined): text is undefined;
export declare const DISABLED_FIELD = "__disabled";
export declare const MORE_KEY = "__more__";
declare function defaultOnOption({ record }: {
    record: any;
}): {
    disabled: any;
};
export declare function getItemKey(record: Record, text: ReactNode, value: any): string;
export declare type onOptionProps = {
    dataSet: DataSet;
    record: Record;
};
export declare type SearchMatcher = string | ((props: SearchMatcherProps) => boolean);
export interface SearchMatcherProps {
    record: Record;
    text: string | string[];
    value: any;
    props: any;
    textField: string;
    valueField: string;
}
export declare type ParamMatcher = string | ((props: ParamMatcherProps) => string | object);
export interface ParamMatcherProps {
    record: Record | undefined;
    key: string;
    text: string | string[] | undefined;
    textField: string;
    valueField: string;
}
export interface SelectPopupContentProps extends TriggerFieldPopupContentProps {
    dataSet: DataSet;
    textField: string;
    valueField: string;
    field?: Field | undefined;
    record?: Record | undefined;
    content: ReactNode;
}
export interface SelectProps extends TriggerFieldProps<SelectPopupContentProps> {
    /**
     * 复合输入值
     * @default false
     */
    combo?: boolean;
    /**
     * 常用项
     */
    commonItem?: string[];
    /**
     * 常用项标签超出最大数量时的占位描述
     */
    maxCommonTagPlaceholder?: ReactNode | ((omittedValues: any[]) => ReactNode);
    /**
     * 常用项标签最大数量
     */
    maxCommonTagCount?: number;
    /**
     * 常用项标签文案最大长度
     */
    maxCommonTagTextLength?: number;
    /**
     * 可搜索
     * @default false
     */
    searchable?: boolean;
    /**
     * 搜索框在 Popup 中显示
     * @default false
     */
    searchFieldInPopup?: boolean;
    /**
     * 搜索框的属性
     */
    searchFieldProps?: TextFieldProps;
    /**
     * 搜索匹配器。 当为字符串时，作为lookup的参数名来重新请求值列表。
     */
    searchMatcher?: SearchMatcher;
    /**
     * 参数匹配器。 当为字符串时，参数拼接。
     */
    paramMatcher?: ParamMatcher;
    /**
     * 选项过滤
     * @param {Record} record
     * @return {boolean}
     */
    optionsFilter?: (record: Record, index: number, records: Record[]) => boolean;
    /**
     * 当选项改变时，检查并清除不在选项中的值
     * @default true
     */
    checkValueOnOptionsChange?: boolean;
    /**
     * 下拉框匹配输入框宽度
     * @default true
     */
    dropdownMatchSelectWidth?: boolean;
    /**
     * 多选时显示全选按钮;
     * @default true
     */
    selectAllButton?: boolean | ((buttons: ButtonProps[]) => ButtonProps[]);
    /**
     * 多选是否开启反选
     * @default false
     */
    reverse?: boolean;
    /**
     * 下拉框菜单样式名
     */
    dropdownMenuStyle?: CSSProperties;
    /**
     * 选项数据源
     */
    options?: DataSet;
    /**
     * 是否为原始值
     * true - 选项中valueField对应的值
     * false - 选项值对象
     */
    primitiveValue?: boolean;
    /**
     * 渲染Option文本的钩子
     * @example
     * ```js
     * <Select
     *   {...props}
     *   optionRenderer={({ record, text, value }) => text + '$'}
     * />
     * ```
     */
    optionRenderer?: Renderer;
    /**
     * 渲染分页 Item 内容
     */
    pagingOptionContent?: string | ReactNode;
    /**
     * 当下拉列表为空时显示的内容
     */
    notFoundContent?: ReactNode;
    /**
     * 设置选项属性，如 disabled;
     */
    onOption: (props: onOptionProps) => OptionProps;
    /**
     * 下拉时自动重新查询
     */
    noCache?: boolean;
    /**
     * 用tooltip显示选项内容
     * 可选值：`none` `always` `overflow`
     */
    optionTooltip?: OptionTooltip;
    /**
     * 是否默认高亮第一个选项
     * @default true
     */
    defaultActiveFirstOption?: boolean;
}
export declare class Select<T extends SelectProps = SelectProps> extends TriggerField<T> {
    static displayName: string;
    static propTypes: {
        id: PropTypes.Requireable<string>;
        size: PropTypes.Requireable<import("../core/enum").Size>;
        suffixCls: PropTypes.Requireable<string>;
        prefixCls: PropTypes.Requireable<string>;
        title: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        disabled: PropTypes.Requireable<boolean>;
        hidden: PropTypes.Requireable<boolean>;
        autoFocus: PropTypes.Requireable<boolean>;
        accessKey: PropTypes.Requireable<string | boolean>;
        dir: PropTypes.Requireable<string>;
        contentEditable: PropTypes.Requireable<string | boolean>;
        draggable: PropTypes.Requireable<string | boolean>;
        style: PropTypes.Requireable<object>;
        className: PropTypes.Requireable<string>;
        tabIndex: PropTypes.Requireable<number>;
        lang: PropTypes.Requireable<string>;
        spellCheck: PropTypes.Requireable<boolean>; /**
         * 过滤器
         * @default false
         */
        onFocus: PropTypes.Requireable<(...args: any[]) => any>;
        onBlur: PropTypes.Requireable<(...args: any[]) => any>;
        onClick: PropTypes.Requireable<(...args: any[]) => any>;
        onDoubleClick: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseUp: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseDown: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseMove: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseOut: PropTypes.Requireable<(...args: any[]) => any>;
        onContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyUp: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyPress: PropTypes.Requireable<(...args: any[]) => any>;
        dataSet: PropTypes.Requireable<object>;
        _inTable: PropTypes.Requireable<boolean>;
        type: PropTypes.Requireable<string>;
        name: PropTypes.Requireable<string>;
        value: PropTypes.Requireable<any>;
        defaultValue: PropTypes.Requireable<any>;
        required: PropTypes.Requireable<boolean>;
        readOnly: PropTypes.Requireable<boolean>;
        form: PropTypes.Requireable<string>;
        dataIndex: PropTypes.Requireable<number>;
        multiple: PropTypes.Requireable<boolean>;
        range: PropTypes.Requireable<boolean | (string | null | undefined)[]>;
        rowSpan: PropTypes.Requireable<number>;
        /**
         * 过滤器
         * @default false
         */
        newLine: PropTypes.Requireable<boolean>;
        colSpan: PropTypes.Requireable<number>;
        validator: PropTypes.Requireable<(...args: any[]) => any>;
        onInvalid: PropTypes.Requireable<(...args: any[]) => any>;
        help: PropTypes.Requireable<string>;
        showHelp: PropTypes.Requireable<import("../field/enum").ShowHelp>;
        renderer: PropTypes.Requireable<(...args: any[]) => any>;
        validationRenderer: PropTypes.Requireable<(...args: any[]) => any>;
        maxTagPlaceholder: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        maxTagCount: PropTypes.Requireable<number>;
        maxTagTextLength: PropTypes.Requireable<number>;
        pristine: PropTypes.Requireable<boolean>;
        trim: PropTypes.Requireable<import("../data-set/enum").FieldTrim>;
        onBeforeChange: PropTypes.Requireable<(...args: any[]) => any>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onInput: PropTypes.Requireable<(...args: any[]) => any>;
        onEnterDown: PropTypes.Requireable<(...args: any[]) => any>;
        fieldClassName: PropTypes.Requireable<string>;
        highlight: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        highlightRenderer: PropTypes.Requireable<(...args: any[]) => any>;
        useColon: PropTypes.Requireable<boolean>;
        showValidation: PropTypes.Requireable<string>;
        placeholder: PropTypes.Requireable<string | (string | null | undefined)[]>;
        minLength: PropTypes.Requireable<number>;
        maxLength: PropTypes.Requireable<number>;
        pattern: PropTypes.Requireable<string | object>;
        autoComplete: PropTypes.Requireable<string>;
        prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        suffix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        clearButton: PropTypes.Requireable<boolean>;
        addonBefore: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        /**
         * 常用项标签超出最大数量时的占位描述
         */
        addonBeforeStyle: PropTypes.Requireable<object>;
        addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        addonAfterStyle: PropTypes.Requireable<object>;
        restrict: PropTypes.Requireable<string | object>; /**
         * 搜索框在 Popup 中显示
         * @default false
         */
        isFlat: PropTypes.Requireable<boolean>;
        valueChangeAction: PropTypes.Requireable<ValueChangeAction>;
        wait: PropTypes.Requireable<number>;
        waitType: PropTypes.Requireable<import("../core/enum").WaitType>;
        groupClassName: PropTypes.Requireable<string>;
        showLengthInfo: PropTypes.Requireable<boolean>;
        border: PropTypes.Requireable<boolean>; /**
         * 下拉框匹配输入框宽度
         * @default true
         */
        popupContent: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        popupCls: PropTypes.Requireable<string>;
        popupStyle: PropTypes.Requireable<object>;
        popupPlacement: PropTypes.Requireable<string>;
        trigger: React.Requireable<any>;
        triggerShowDelay: PropTypes.Requireable<number>;
        triggerHiddenDelay: PropTypes.Requireable<number>;
        onPopupHiddenChange: PropTypes.Requireable<(...args: any[]) => any>;
        getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
        getPopupAlignTarget: PropTypes.Requireable<(...args: any[]) => any>;
        tabIntoPopupContent: PropTypes.Requireable<boolean>;
        viewMode: PropTypes.Requireable<string>;
        /**
         * 复合输入值
         * @default false
         */
        combo: PropTypes.Requireable<boolean>;
        /**
         * 常用项
         * @default undefined
         */
        commonItem: PropTypes.Requireable<any[]>;
        /**
         * 多值标签超出最大数量时的占位描述
         */
        maxCommonTagPlaceholder: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        /**
         * 多值标签最大数量
         */
        maxCommonTagCount: PropTypes.Requireable<number>;
        /**
         * 多值标签文案最大长度
         */
        maxCommonTagTextLength: PropTypes.Requireable<number>;
        /**
         * 过滤器
         * @default false
         */
        searchable: PropTypes.Requireable<boolean>;
        /**
         * 搜索匹配器。 当为字符串时，作为lookup的参数名来重新请求值列表。
         */
        searchMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
        /**
         * 参数匹配器。 当为字符串时，参数拼接。
         */
        paramMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
        /**
         * 是否为原始值
         * true - 选项中valueField对应的值
         * false - 选项值对象
         */
        primitiveValue: PropTypes.Requireable<boolean>;
        /**
         * 渲染Option文本的钩子
         * @example
         * ```js
         * <Select
         *   {...props}
         *   optionRenderer={({ dataSet, record, text, value }) => text + '$'}
         * />
         * ```
         */
        optionRenderer: PropTypes.Requireable<(...args: any[]) => any>;
        /**
         * 当下拉列表为空时显示的内容
         */
        notFoundContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        /**
         * 渲染分页 Item 内容
         */
        pagingOptionContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        /**
         * 设置选项属性，如 disabled;
         */
        onOption: PropTypes.Requireable<(...args: any[]) => any>;
        /**
         * 下拉时自动重新查询
         */
        noCache: PropTypes.Requireable<boolean>;
        /**
         * 下拉框匹配输入框宽度
         * @default true
         */
        dropdownMatchSelectWidth: PropTypes.Requireable<boolean>;
        /**
         * 多选时显示全选按钮;
         * @default true
         */
        selectAllButton: PropTypes.Requireable<boolean | ((...args: any[]) => any)>;
        /**
         * 多选是否开启反选
         * @default false
         */
        reverse: PropTypes.Requireable<boolean>;
        /**
         * 用tooltip显示选项内容
         * 可选值：`none` `always` `overflow`
         */
        optionTooltip: PropTypes.Requireable<string>;
        /**
         * 是否默认高亮第一个选项
         * @default true
         */
        defaultActiveFirstOption: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        suffixCls: string;
        combo: boolean;
        checkValueOnOptionsChange: boolean;
        onOption: typeof defaultOnOption;
        selectAllButton: boolean;
        clearButton: boolean;
        popupPlacement: string;
        triggerShowDelay: number;
        triggerHiddenDelay: number;
        viewMode: string;
        multiple: boolean;
        border: boolean;
        valueChangeAction: ValueChangeAction;
        waitType: import("../core/enum").WaitType;
        readOnly: boolean;
        disabled: boolean;
        noValidate: boolean;
        trim: import("../data-set/enum").FieldTrim;
    };
    static Option: typeof Option;
    static OptGroup: typeof OptGroup;
    static __PRO_SELECT: boolean;
    comboOptions?: DataSet;
    menu?: Menu | null;
    $searchText?: string | string[] | undefined;
    get searchText(): string | string[] | undefined;
    set searchText(searchText: string | string[] | undefined);
    get searchMatcher(): SearchMatcher;
    get paramMatcher(): ParamMatcher;
    get defaultValidationMessages(): ValidationMessages;
    get textField(): string;
    get valueField(): string;
    get currentComboOption(): Record | undefined;
    get filteredOptions(): Record[];
    get optionsWithCombo(): Record[];
    get cascadeOptions(): Record[];
    get searchable(): boolean;
    get multiple(): boolean;
    get menuMultiple(): boolean;
    get options(): DataSet;
    get primitive(): boolean;
    checkValueReaction?: IReactionDisposer;
    checkComboReaction?: IReactionDisposer;
    saveMenu(node: any): void;
    getSearchFieldProps(): TextFieldProps;
    isSearchFieldInPopup(): boolean | undefined;
    isEmpty(): boolean;
    isEditable(): boolean;
    checkValue(): void;
    checkCombo(): void;
    clearCheckValue(): void;
    clearCheckCombo(): void;
    clearReaction(): void;
    componentWillMount(): void;
    componentWillUnmount(): void;
    componentWillReceiveProps(nextProps: any, nextContext: any): void;
    componentDidUpdate(): void;
    getOmitPropsKeys(): string[];
    getObservableProps(props: any, context: any): any;
    getMenuPrefixCls(): string;
    renderMultipleHolder(): JSX.Element | undefined;
    getNotFoundContent(): T["notFoundContent"];
    getPagingOptionContent(): T["pagingOptionContent"];
    getOtherNextNode(): ReactNode;
    getMenuItem({ record, text, value }: {
        record: any;
        text: any;
        value: any;
    }): string | ReactNode;
    getMenu(menuProps?: object): ReactNode;
    /**
     * 增加lov popupContent 回调参数 用于控制对应交互
     */
    getPopupProps(): SelectPopupContentProps;
    getPopupClassName(defaultClassName: string | undefined): string | undefined;
    get dropdownMatchSelectWidth(): boolean | undefined;
    get defaultActiveFirstOption(): boolean | undefined;
    get selectReverse(): boolean | undefined;
    get loading(): boolean;
    handlePopupSearch(value: any): void;
    renderSearchFieldPrefix(_props: any): ReactNode;
    renderSearchField(props?: any): ReactNode;
    renderSelectAll(): ReactNode | void;
    getPopupContent(): ReactNode;
    getPopupStyleFromAlign(target: any): CSSProperties | undefined;
    getDefaultAction(): Action[];
    getTriggerIconFont(): string;
    handleKeyDown(e: any): void;
    isMultipleBlockDisabled(v: any): any;
    handleKeyDownFirstLast(e: any, menu: Menu, direction: number): void;
    handleKeyDownPrevNext(e: any, menu: Menu, direction: number): void;
    handleKeyDownEsc(e: any): void;
    handleKeyDownSpace(e: any): void;
    handleBlur(e: any): void;
    expand(): void;
    syncValueOnBlur(value: any): void;
    findByTextWithValue(text: any, data: Record[]): Record | undefined;
    findByText(text: any): Record | undefined;
    findByValue(value: any): Record | undefined;
    isSelected(record: Record): boolean;
    generateComboOption(value: string | any[], callback?: (text: string) => void): void;
    createComboOption(value: any): void;
    removeComboOptions(): void;
    removeComboOption(record?: Record): void;
    handlePopupAnimateAppear(): void;
    getValueKey(v: any): any;
    handlePopupAnimateEnd(_key: any, _exists: any): void;
    handleMenuClick({ key, item: { props: { value }, }, }: {
        key: any;
        item: {
            props: {
                value: any;
            };
        };
    }): void;
    handleCommonItemClick(value: any): void;
    handleOptionSelect(record: Record | Record[]): void;
    handleOptionUnSelect(record: Record | Record[]): void;
    handleSearch(_text?: string | string[] | undefined): void;
    setText(text?: string): void;
    doSearch: ((value?: string | string[] | undefined) => void) & import("lodash").Cancelable;
    getSearchPara(searchMatcher: string, value?: string | string[] | undefined): object;
    searchRemote(text?: string | string[] | undefined): void;
    /**
     * 该方法会被onChange和onCompositionend触发
     * @param e 改变事件
     */
    handleChange(e: any): void;
    processRecordToObject(record: Record): any;
    processObjectValue(value: any, textField: any): any;
    processLookupValue(value: any): React.ReactNode;
    processValue(value: any): ReactNode;
    clear(): void;
    setRangeTarget(target: any): void;
    resetFilter(): void;
    reset(): void;
    unChoose(record?: Record | Record[] | null): void;
    choose(record?: Record | Record[] | null): void;
    chooseAll(): void;
    /**
     * 反选
     */
    chooseRe(): void;
    unChooseAll(): void;
    handlePopupHiddenChange(hidden: boolean): void;
    processSelectedData(): Promise<void>;
    searchData(data: Record[]): Record[];
    matchRecordBySearch(record: Record, text: string | string[]): boolean;
    renderLengthInfo(_maxLength?: number): ReactNode;
}
export default class ObserverSelect extends Select<SelectProps> {
    static defaultProps: {
        suffixCls: string;
        combo: boolean;
        checkValueOnOptionsChange: boolean;
        onOption: typeof defaultOnOption;
        selectAllButton: boolean;
        clearButton: boolean;
        popupPlacement: string;
        triggerShowDelay: number;
        triggerHiddenDelay: number;
        viewMode: string;
        multiple: boolean;
        border: boolean;
        valueChangeAction: ValueChangeAction;
        waitType: import("../core/enum").WaitType;
        readOnly: boolean;
        disabled: boolean;
        noValidate: boolean;
        trim: import("../data-set/enum").FieldTrim;
    };
    static Option: typeof Option;
    static OptGroup: typeof OptGroup;
    static __PRO_SELECT: boolean;
}
export {};
