blob: 6f707c979930f5ad04de811166559fdc8e26ba89 [file] [log] [blame] [edit]
// Copyright (C) 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
export interface OmniboxManager {
/**
* Turns the omnibox into an interactive prompt for the user. Think of
* window.prompt() but non-modal and more integrated with the UI.
*
* @param text - The question showed to the user (e.g. "Select a process to
* jump to").
* @param choices - If defined, it shows a list of options in a select-box
* fashion, where the user can move with Up/Down arrows. If omitted the input
* is free-form, like in the case of window.prompt().
* @returns If `options` === undefined, returns the free-form user input. If
* `options` was provided, returns the selected choice. Returns undefined if
* the user dismisses the prompt by pressing Esc or clicking elsewhere.
*
* Example:
* ```ts
* // Free-form string
* const name = await prompt('Enter your name');
*
* // Simple list of choices
* const value = await prompt('Choose a color...', ['red', 'blue', 'green']);
*
* // Each choice is an object
* const value = await prompt('Choose from an enum...', {
* values: [
* {x: MyEnum.Foo, name: 'foo'},
* {x: MyEnum.Bar, name: 'bar'},
* ],
* getName: (e) => e.name,
* );
* ```
*/
prompt(
text: string,
choices?: ReadonlyArray<string>,
): Promise<string | undefined>;
prompt<T>(text: string, choices: PromptChoices<T>): Promise<T | undefined>;
}
export interface PromptChoices<T> {
values: ReadonlyArray<T>;
getName: (x: T) => string;
}