/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import * as dom from "../../../browser/dom.mjs";
import { IButtonStyles } from "../../../browser/ui/button/button.mjs";
import { ICountBadgeStyles } from "../../../browser/ui/countBadge/countBadge.mjs";
import { IInputBoxStyles } from "../../../browser/ui/inputbox/inputBox.mjs";
import { IKeybindingLabelStyles } from "../../../browser/ui/keybindingLabel/keybindingLabel.mjs";
import { IListRenderer, IListVirtualDelegate } from "../../../browser/ui/list/list.mjs";
import { IListOptions, IListStyles, List } from "../../../browser/ui/list/listWidget.mjs";
import { IProgressBarStyles } from "../../../browser/ui/progressbar/progressbar.mjs";
import { IToggleStyles } from "../../../browser/ui/toggle/toggle.mjs";
import { CancellationToken } from "../../../common/cancellation.mjs";
import { Color } from "../../../common/color.mjs";
import { Event } from "../../../common/event.mjs";
import { Disposable } from "../../../common/lifecycle.mjs";
import { IInputBox, IInputOptions, IKeyMods, IPickOptions, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, QuickInputHideReason, QuickPickInput } from "../common/quickInput.mjs";
import "../../../../css!./media/quickInput.mjs";
export interface IQuickInputOptions {
    idPrefix: string;
    container: HTMLElement;
    ignoreFocusOut(): boolean;
    isScreenReaderOptimized(): boolean;
    backKeybindingLabel(): string | undefined;
    setContextKey(id?: string): void;
    returnFocus(): void;
    createList<T>(user: string, container: HTMLElement, delegate: IListVirtualDelegate<T>, renderers: IListRenderer<T, any>[], options: IListOptions<T>): List<T>;
    styles: IQuickInputStyles;
}
export interface IQuickInputStyles {
    widget: IQuickInputWidgetStyles;
    inputBox: IInputBoxStyles;
    toggle: IToggleStyles;
    countBadge: ICountBadgeStyles;
    button: IButtonStyles;
    progressBar: IProgressBarStyles;
    keybindingLabel: IKeybindingLabelStyles;
    list: IListStyles & {
        pickerGroupBorder?: Color;
        pickerGroupForeground?: Color;
    };
}
export interface IQuickInputWidgetStyles {
    quickInputBackground?: Color;
    quickInputForeground?: Color;
    quickInputTitleBackground?: Color;
    widgetBorder?: Color;
    widgetShadow?: Color;
}
export declare class QuickInputController extends Disposable {
    private options;
    private static readonly MAX_WIDTH;
    private idPrefix;
    private ui;
    private dimension?;
    private titleBarOffset?;
    private comboboxAccessibility;
    private enabled;
    private readonly onDidAcceptEmitter;
    private readonly onDidCustomEmitter;
    private readonly onDidTriggerButtonEmitter;
    private keyMods;
    private controller;
    private parentElement;
    private styles;
    private onShowEmitter;
    readonly onShow: Event<void>;
    private onHideEmitter;
    readonly onHide: Event<void>;
    private previousFocusElement?;
    constructor(options: IQuickInputOptions);
    private registerKeyModsListeners;
    private getUI;
    pick<T extends IQuickPickItem, O extends IPickOptions<T>>(picks: Promise<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: O, token?: CancellationToken): Promise<(O extends {
        canPickMany: true;
    } ? T[] : T) | undefined>;
    private setValidationOnInput;
    input(options?: IInputOptions, token?: CancellationToken): Promise<string | undefined>;
    backButton: {
        iconClass: string;
        tooltip: string;
        handle: number;
    };
    createQuickPick<T extends IQuickPickItem>(): IQuickPick<T>;
    createInputBox(): IInputBox;
    private show;
    private setVisibilities;
    private setComboboxAccessibility;
    private setEnabled;
    hide(reason?: QuickInputHideReason): void;
    focus(): void;
    toggle(): void;
    navigate(next: boolean, quickNavigate?: IQuickNavigateConfiguration): void;
    accept(keyMods?: IKeyMods): Promise<void>;
    back(): Promise<void>;
    cancel(): Promise<void>;
    layout(dimension: dom.IDimension, titleBarOffset: number): void;
    private updateLayout;
    applyStyles(styles: IQuickInputStyles): void;
    private updateStyles;
    private isDisplayed;
}
