/// <reference types="react" />
import { IAutofillProps, IAutofill } from './Autofill.types';
import { BaseComponent, KeyCodes } from '../../Utilities';
export interface IAutofillState {
    displayValue?: string;
}
export declare class Autofill extends BaseComponent<IAutofillProps, IAutofillState> implements IAutofill {
    static defaultProps: {
        enableAutofillOnKeyPress: KeyCodes[];
    };
    private _inputElement;
    private _autoFillEnabled;
    private _value;
    constructor(props: IAutofillProps);
    readonly cursorLocation: number | null;
    readonly isValueSelected: boolean;
    readonly value: string;
    readonly selectionStart: number | null;
    readonly selectionEnd: number | null;
    readonly inputElement: HTMLInputElement | null;
    componentWillReceiveProps(nextProps: IAutofillProps): void;
    componentDidUpdate(): void;
    render(): JSX.Element;
    focus(): void;
    clear(): void;
    private _onCompositionStart;
    private _onCompositionEnd;
    private _onClick;
    private _onKeyDown;
    private _onInputChanged;
    private _onChanged;
    private _getCurrentInputValue(ev?);
    /**
     * Attempts to enable autofill. Whether or not autofill is enabled depends on the input value,
     * whether or not any text is selected, and only if the new input value is longer than the old input value.
     * Autofill should never be set to true if the value is composing. Once compositionEnd is called, then
     * it should be completed.
     * See https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent for more information on composition.
     * @param newValue
     * @param oldValue
     * @param isComposing if true then the text is actively being composed and it has not completed.
     * @param isComposed if the text is a composed text value.
     */
    private _tryEnableAutofill(newValue, oldValue, isComposing?, isComposed?);
    private _notifyInputChange(newValue);
    /**
     * Updates the current input value as well as getting a new display value.
     * @param newValue The new value from the input
     */
    private _updateValue;
    /**
     * Returns a string that should be used as the display value.
     * It evaluates this based on whether or not the suggested value starts with the input value
     * and whether or not autofill is enabled.
     * @param inputValue the value that the input currently has.
     * @param suggestedDisplayValue the possible full value
     */
    private _getDisplayValue(inputValue, suggestedDisplayValue?);
    private _doesTextStartWith(text, startWith);
}
/**
 *  Legacy, @deprecated, do not use.
 */
export declare class BaseAutoFill extends Autofill {
}
