import $ from "inquirer";
declare const normalize: (input: string) => string;
declare const Validation: {
    characters: (value: any) => true | "[Warning] Input Value Required (String)" | "[Error] Incorrect Input Type - Expected (String)";
    digit: (value: any) => true | "[Warning] Input Value Required (Digit)" | "[Error] Incorrect Input Type - Expected (Number)";
    empty: (value: any) => boolean;
    valid: (value: any) => boolean;
    message: (value: string) => string;
    name: (value: any) => true | "[Warning] Input Value Required (Human Identifiable Name)" | "[Error] Incorrect Input Type - Expected (String, Human Identifiable Name)";
};
declare type Asynchronous = (input: string | number | any) => Promise<boolean>;
/***
 * Note that the following class is meant to act only as
 * a meta definition for inheritance; it cannot be used
 * as context for a prompt.
 */
declare class Abstract {
    name: string;
    message: string;
    validate?: Asynchronous;
    private readonly default;
    private readonly defaults?;
    constructor(name: string, message: string, defaults?: any, validation?: Function | Asynchronous);
}
/***
 * For validations, either create an asynchronous class
 * or elect to import the Validation object.
 *
 * @example
 * import Question, { Field, Validation } from "./question";
 *
 * const validation = async ($: any) => {
 *     const result = await new Promise( (resolve) => {
 *         setTimeout( () => resolve($), 10000 );
 *     } );
 *
 *     return Validation.digit( result );
 * };
 *
 * const Name = Field.initialize( "name", "Name", "Jacob" );
 * const Surname = Field.initialize( "surname", "Last-Name", "Sanders" );
 * const Age = Field.initialize( "age", "Age", null, validation);
 *
 * const questions = [
 *     Name,
 *     Surname,
 *     Age
 * ];
 *
 * Question.prompt( questions ).then( (answers) => {
 *     console.log( JSON.stringify( answers, null, 4 ) );
 * } );
 *
 */
declare class Field extends Abstract {
    private readonly type;
    private constructor();
    static initialize(name: string, message: string, defaults?: string | null, validation?: Function | Asynchronous): Field;
}
/***
 * For validations, either create an asynchronous class
 * or elect to import the Validation object.
 *
 * @example
 * import Question, { Title, Validation } from "./question";
 *
 * const validation = async ($: any) => {
 *     const result = await new Promise( (resolve) => {
 *         setTimeout( () => resolve($), 10000 );
 *     } );
 *
 *     return Validation.digit( result );
 * };
 *
 * const Name = Title.initialize( "name", "Name", "Jacob" );
 * const Surname = Title.initialize( "surname", "Last-Name", "Sanders" );
 * const Age = Title.initialize( "age", "Age", null, validation);
 *
 * const questions = [
 *     Name,
 *     Surname,
 *     Age
 * ];
 *
 * Question.prompt( questions ).then( (answers) => {
 *     console.log( JSON.stringify( answers, null, 4 ) );
 * } );
 *
 */
declare class Title extends Abstract {
    private readonly type;
    private constructor();
    static initialize(name: string, message: string, defaults?: string | null, validation?: Function | Asynchronous): Title;
}
/***
 * For validations, either create an asynchronous class
 * or elect to import the Validation object.
 *
 * @example
 * import Question, { Input, Selectable, Validation } from "./question";
 *
 * const validation = async ($: any) => {
 *     const result = await new Promise( (resolve) => {
 *         setTimeout( () => resolve($), 10000 );
 *     } );
 *
 *     return Validation.digit( result );
 * };
 *
 * const Name = Input.initialize( "name", "Name", "Jacob" );
 * const Surname = Input.initialize( "surname", "Last-Name", "Sanders" );
 * const Age = Input.initialize( "age", "Age", null, validation);
 *
 * const List = Selectable.initialize("list", "Selection", ["Test-1", "Test-2"]);
 *
 * const questions = [
 *     Name,
 *     Surname,
 *     Age,
 *
 *     List
 * ];
 *
 * Question.prompt( questions ).then( (answers) => {
 *     console.log( JSON.stringify( answers, null, 4 ) );
 * } );
 *
 */
declare class Selectable extends Abstract {
    private choices;
    private readonly type;
    private constructor();
    static initialize(name: string, message: string, array: string[], defaults?: string | null, validation?: Function | Asynchronous): Selectable;
}
declare class Password extends Abstract {
    private readonly type;
    private constructor();
    static initialize(name: string, message: string, defaults?: string | null, validation?: Function | Asynchronous): Password;
}
declare const Question: $.Inquirer;
export { Field, Title, Password, Selectable, Validation, Question, normalize };
export default Question;
