/**
 * Copyright (c) 2015 ZenPayroll
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
import React from 'react';
import PropTypes from 'prop-types';
declare type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
export interface AlwaysMaskedFieldProps extends InputProps {
    mask: string;
    translations?: {
        [char: string]: RegExp;
    };
    value?: string;
    onComplete?: (val: string) => void;
    valueLink?: {
        value: string;
        requestChange: (newVal: string) => void;
    };
    onChange?: (e: {
        target: {
            id?: string;
            name?: string;
            value: string;
        };
    }) => void;
    inputRef?: (node: HTMLInputElement | null) => any;
}
interface MaskedFieldState {
    value: string;
}
declare class AlwaysMaskedField extends React.Component<AlwaysMaskedFieldProps, MaskedFieldState> {
    static propTypes: {
        mask: PropTypes.Requireable<string>;
        translations: PropTypes.Requireable<{
            [x: string]: RegExp | null | undefined;
        }>;
        value: PropTypes.Requireable<string>;
        placeholder: PropTypes.Requireable<string>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onComplete: PropTypes.Requireable<(...args: any[]) => any>;
        onFocus: PropTypes.Requireable<(...args: any[]) => any>;
        onBlur: PropTypes.Requireable<(...args: any[]) => any>;
        valueLink: PropTypes.Requireable<PropTypes.InferProps<{
            value: PropTypes.Validator<string>;
            requestChange: PropTypes.Validator<(...args: any[]) => any>;
        }>>;
    };
    static defaultProps: {
        mask: undefined;
        translations: undefined;
        value: undefined;
        placeholder: undefined;
        onChange: undefined;
        onKeyDown: undefined;
        onComplete: undefined;
        onFocus: undefined;
        onBlur: undefined;
        valueLink: undefined;
    };
    private buffer;
    private firstNonMaskIdx;
    private cursorPos;
    private input;
    constructor(props: Readonly<AlwaysMaskedFieldProps>);
    componentDidMount(): void;
    componentDidUpdate({ value: prevValue }: AlwaysMaskedFieldProps): void;
    private getSelection;
    private getPropsValue;
    private getPattern;
    private setSelection;
    private setValue;
    private handleFocus;
    private handleBlur;
    private handleKeyDown;
    private handleChange;
    private resetBuffer;
    private initialBuffer;
    private bufferString;
    private isBufferEmpty;
    private isBufferFull;
    private nextNonMaskIdx;
    private prevNonMaskIdx;
    private callOnChange;
    private callOnComplete;
    private maskedValue;
    render(): JSX.Element;
}
export default AlwaysMaskedField;
