import * as inquirer from "inquirer";
import { IEntryValidator } from "../ops/i-entry-validator";
export type EntryValue = string | number | boolean;
export type choice<T extends EntryValue> = T | {
    name: string;
    value?: T;
};
/** User interaction parameters for capturing a reference to a physical folder. */
export declare class FolderSelectionOptions {
    /** The path under which the user is allowed to navigate (optional: Defaults to the current path).
     * This path is also acts as the parent folder from which any relative path gets derived. */
    root?: string;
    /** The folder to begin the search within (optional: defaults to the current path) */
    startingPath?: string;
    /** Causes the selection to be returned as a path relative to "root" (optional: defaults to false).  */
    asRelative?: boolean;
}
/** User interaction parameters for capturing a reference to a physical file. */
export declare class FileSelectionOptions extends FolderSelectionOptions {
    /** List of file extensions (without the period '.') on which to filter the available files. */
    extensions?: string[];
}
/** Provides direct interaction with the user. */
export interface IUserInputProvider {
    /** Renders a message to the user (DOES NOT LOG the message). */
    userMessage(message: string): void;
    /** @param id Identifies the prompt for internal use, esp in mocking.  This value never renders to the user. */
    prompt<T extends EntryValue>(id: string, prompt: string, required?: boolean, defaultValue?: T, validator?: IEntryValidator<T>): Promise<T | undefined>;
    /** @param id Identifies the prompt for internal use, esp in mocking.  This value never renders to the user. */
    promptPassword(id: string, prompt: string, defaultValue?: string, validator?: IEntryValidator<string>): Promise<string>;
    /**
     * @param id Identifies the prompt for internal use, esp in mocking.  This value never renders to the user.
     * @param loop (optional, defaults to true) Setting to false will disable continuous circular scrolling through the available select choices.
    */
    promptSelect<T extends EntryValue>(id: string, prompt: string, choices: choice<T>[], multiSelect?: boolean, loop?: boolean | undefined): Promise<T | undefined>;
    promptSelect<T extends EntryValue>(id: string, prompt: string, choices: choice<T>[], multiSelect?: boolean, loop?: boolean | undefined, validator?: (input: T, answers?: inquirer.Answers | undefined) => boolean | string): Promise<T | undefined>;
    /** Enables the user to retrieves a reference to a single existing file on the local machine.
     * @param id Identifies the prompt for internal use, esp in mocking.  This value never renders to the user. */
    promptSelectFile(id: string, prompt: string, fileOptions: FileSelectionOptions): Promise<string>;
    /** Enables the user to retrieves a reference to a single existing folder on the local machine.
     * @param id Identifies the prompt for internal use, esp in mocking.  This value never renders to the user. */
    promptSelectFolder(id: string, prompt: string, folderOptions: FolderSelectionOptions): Promise<string>;
    /**
     * @param id Identifies the prompt for internal use, esp in mocking.  This value never renders to the user.
     * @param prompt The message to print for the user.
     * @param defaultValue defaults to TRUE.  */
    promptConfirm(id: string, prompt: string, defaultValue?: boolean): Promise<boolean>;
    /** Opens the given url in a new default browser window.
     * @param url fully-qualified web address to open (including protocol, eg: "http://somewhere.com").
    */
    openUrl(url: string): Promise<void>;
    /** Renders a graphic in the console indicating that an action is processing or waiting.  */
    startSpinner(userMessage: string): void;
    /** Removes the pending indicator in the console.  */
    stopSpinner(userMessage: string): void;
}
