/// <reference types="node" />
import { EventEmitter } from 'events';
import { PromptChoice, PromptContract, EnumPromptOptions, TextPromptOptions, PromptEventOptions, TogglePromptOptions, ChoicePromptOptions, BooleanPromptOptions, MultiplePromptOptions, AutoCompletePromptOptions } from './Contracts';
export declare const icons: {
    pointer: string;
};
/**
 * Base class extended by [[Enquirer]] and [[Emitter]] classes to have
 * common interface.
 */
export declare abstract class Prompt extends EventEmitter implements PromptContract {
    protected abstract prompt(options: any): Promise<any>;
    on(event: 'prompt', callback: (options: PromptEventOptions) => any): this;
    on(event: 'prompt:error', callback: (message: string) => any): this;
    on(event: 'prompt:answer', callback: (message: any) => any): this;
    /**
     * Prompts for text input
     */
    ask<Result extends any = string>(title: string, options?: TextPromptOptions<Result>): Promise<Result>;
    /**
     * Prompts for text input
     */
    enum<Result extends any = string[]>(title: string, options?: EnumPromptOptions<Result>): Promise<Result>;
    /**
     * Prompts for text input but mangles the output (for password)
     */
    secure<Result extends any = string>(title: string, options?: TextPromptOptions<Result>): Promise<Result>;
    /**
     * Asks for `Y/n`
     */
    confirm<Result extends any = boolean>(title: string, options?: BooleanPromptOptions<Result>): Promise<Result>;
    /**
     * Similar to [[this.confirm]] but with custom toggle options
     */
    toggle<Result extends any = boolean>(title: string, choices: [string, string], options?: TogglePromptOptions<Result>): Promise<Result>;
    /**
     * Prompts for text input
     */
    choice<Choice extends string, Result extends any = Choice>(title: string, choices: readonly (Choice | PromptChoice<Choice>)[], options?: ChoicePromptOptions<Choice, Result>): Promise<Result>;
    /**
     * Prompts for text input
     */
    multiple<Choice extends string, Result extends any = Choice[]>(title: string, choices: readonly (Choice | PromptChoice<Choice>)[], options?: MultiplePromptOptions<Choice, Result>): Promise<Result>;
    /**
     * Prompts for text input
     */
    autocomplete<Choice extends string, Multiple extends boolean = false, Result extends any = Multiple extends true ? Choice[] : Choice>(title: string, choices: readonly Choice[], options?: AutoCompletePromptOptions<Choice, Multiple, Result>): Promise<Result>;
}
