import { ReactNode } from 'react';
import PropTypes from 'prop-types';
import { FormatNumberFuncOptions } from 'choerodon-ui/dataset/data-set/Field';
import { TextField, TextFieldProps } from '../text-field/TextField';
import { ValidationMessages } from '../validator/Validator';
import { FieldType } from '../data-set/enum';
import defaultFormatNumber from '../formatter/formatNumber';
import defaultFormatBigNumber from '../formatter/formatBigNumber';
import { Lang } from '../locale-context/enum';
export declare type FormatNumberFunc = (value: string, lang: string, options: Intl.NumberFormatOptions) => string;
export { FormatNumberFuncOptions };
export interface NumberFieldProps<V = number> extends TextFieldProps<V> {
    /**
     * 最小值
     */
    min?: number | string | null;
    /**
     * 最大值
     */
    max?: number | string | null;
    /**
     * 步距
     */
    step?: number | string;
    /**
     * 非严格步距
     */
    nonStrictStep?: boolean;
    /**
     * 格式器
     */
    formatter?: FormatNumberFunc;
    /**
     * 格式器参数
     */
    formatterOptions?: FormatNumberFuncOptions;
    /**
     *是否长按按钮按步距增加
     */
    longPressPlus?: boolean;
    /**
     * 小数点精度
     */
    precision?: number;
    /**
     * 千分位分组显示
     */
    numberGrouping?: boolean;
    /**
     * 是否启用UP DOWN键盘事件
     */
    keyboard?: boolean;
    /**
     * 字符值模式，支持大数字
     */
    stringMode?: boolean;
}
export declare class NumberField<T extends NumberFieldProps> extends TextField<T & NumberFieldProps> {
    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>;
        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>;
        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>;
        isFlat: PropTypes.Requireable<boolean>;
        valueChangeAction: PropTypes.Requireable<import("../text-field/enum").ValueChangeAction>;
        wait: PropTypes.Requireable<number>;
        waitType: PropTypes.Requireable<import("../core/enum").WaitType>;
        groupClassName: PropTypes.Requireable<string>;
        showLengthInfo: PropTypes.Requireable<boolean>;
        border: PropTypes.Requireable<boolean>;
        /**
         * 最小值
         */
        min: PropTypes.Requireable<string | number>;
        /**
         * 最大值
         */
        max: PropTypes.Requireable<string | number>;
        /**
         * 步距
         */
        step: PropTypes.Requireable<string | number>;
        /**
         * 非严格步距
         */
        nonStrictStep: PropTypes.Requireable<boolean>;
        /**
         * 格式器
         */
        formatter: PropTypes.Requireable<(...args: any[]) => any>;
        /**
         * 格式器参数
         */
        longPressPlus: PropTypes.Requireable<boolean>;
        /**
         * 是否开启长按步距增加
         */
        formatterOptions: PropTypes.Requireable<object>;
        /**
         * 是否启用UP DOWN键盘事件
         */
        keyboard: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        suffixCls: string;
        longPressPlus: boolean;
        max: number;
        min: number;
        clearButton: boolean;
        multiple: boolean;
        border: boolean;
        valueChangeAction: import("../text-field/enum").ValueChangeAction;
        waitType: import("../core/enum").WaitType;
        readOnly: boolean;
        disabled: boolean;
        noValidate: boolean;
        trim: import("../data-set/enum").FieldTrim;
    };
    static format: typeof defaultFormatNumber;
    static bigNumberFormat: typeof defaultFormatBigNumber;
    plusElement?: HTMLDivElement | null;
    minusElement?: HTMLDivElement | null;
    get lang(): Lang;
    get defaultValidationMessages(): ValidationMessages;
    get allowDecimal(): boolean;
    get nonStrictStep(): boolean;
    get allowNegative(): boolean;
    get min(): number | string | undefined | null;
    get max(): number | string | undefined | null;
    get value(): any | undefined;
    set value(value: any | undefined);
    get keyboard(): boolean;
    get stringMode(): boolean;
    savePlusRef(ref: any): void;
    saveMinusRef(ref: any): void;
    isLowerRange(value1: number | string, value2: number | string): boolean;
    getFieldType(): FieldType;
    getLimit(type: string): number | string | undefined | null;
    getValidatorProp(key: string): any;
    getInnerSpanButton(): ReactNode;
    getWrapperClassNames(...args: any[]): string;
    handleEnterDown(e: any): void;
    handleKeyDown(e: any): void;
    handleKeyDownUp(value: any): void;
    handleKeyDownDown(value: any): void;
    handlePlus(value: any): void;
    handleMinus(value: any): void;
    handleOncePlus(): void;
    handleOnceMinus(): void;
    getOmitPropsKeys(): string[];
    getOtherProps(): any;
    getObservableProps(props: any, context: any): any;
    stepGenerator(isPlus: boolean): IterableIterator<number | string>;
    getCurrentInputValue(): any;
    step(isPlus: boolean): void;
    afterStep(newValue: any): void;
    prepareSetValue(value: any): void;
    restrictInput(value: string): string;
    getFormatOptions(value?: number): FormatNumberFuncOptions;
    getFormatter(): any;
    getBigNumberFormatValue(value: ReactNode, numberField: boolean): ReactNode;
    processText(value: ReactNode): ReactNode;
    renderLengthInfo(): ReactNode;
}
export default class ObserverNumberField extends NumberField<NumberFieldProps> {
    static defaultProps: {
        suffixCls: string;
        longPressPlus: boolean;
        max: number;
        min: number;
        clearButton: boolean;
        multiple: boolean;
        border: boolean;
        valueChangeAction: import("../text-field/enum").ValueChangeAction;
        waitType: import("../core/enum").WaitType;
        readOnly: boolean;
        disabled: boolean;
        noValidate: boolean;
        trim: import("../data-set/enum").FieldTrim;
    };
    static format: typeof defaultFormatNumber;
    static bigNumberFormat: typeof defaultFormatBigNumber;
}
