xref: /aosp_15_r20/external/perfetto/ui/src/public/omnibox.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker//
3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker//
7*6dbdd20aSAndroid Build Coastguard Worker//      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker//
9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerexport interface OmniboxManager {
16*6dbdd20aSAndroid Build Coastguard Worker  /**
17*6dbdd20aSAndroid Build Coastguard Worker   * Turns the omnibox into an interactive prompt for the user. Think of
18*6dbdd20aSAndroid Build Coastguard Worker   * window.prompt() but non-modal and more integrated with the UI.
19*6dbdd20aSAndroid Build Coastguard Worker   *
20*6dbdd20aSAndroid Build Coastguard Worker   * @param text - The question showed to the user (e.g. "Select a process to
21*6dbdd20aSAndroid Build Coastguard Worker   * jump to").
22*6dbdd20aSAndroid Build Coastguard Worker   * @param choices - If defined, it shows a list of options in a select-box
23*6dbdd20aSAndroid Build Coastguard Worker   * fashion, where the user can move with Up/Down arrows. If omitted the input
24*6dbdd20aSAndroid Build Coastguard Worker   * is free-form, like in the case of window.prompt().
25*6dbdd20aSAndroid Build Coastguard Worker   * @returns If `options` === undefined, returns the free-form user input. If
26*6dbdd20aSAndroid Build Coastguard Worker   * `options` was provided, returns the selected choice. Returns undefined if
27*6dbdd20aSAndroid Build Coastguard Worker   * the user dismisses the prompt by pressing Esc or clicking elsewhere.
28*6dbdd20aSAndroid Build Coastguard Worker   *
29*6dbdd20aSAndroid Build Coastguard Worker   * Example:
30*6dbdd20aSAndroid Build Coastguard Worker   * ```ts
31*6dbdd20aSAndroid Build Coastguard Worker   * // Free-form string
32*6dbdd20aSAndroid Build Coastguard Worker   * const name = await prompt('Enter your name');
33*6dbdd20aSAndroid Build Coastguard Worker   *
34*6dbdd20aSAndroid Build Coastguard Worker   * // Simple list of choices
35*6dbdd20aSAndroid Build Coastguard Worker   * const value = await prompt('Choose a color...', ['red', 'blue', 'green']);
36*6dbdd20aSAndroid Build Coastguard Worker   *
37*6dbdd20aSAndroid Build Coastguard Worker   * // Each choice is an object
38*6dbdd20aSAndroid Build Coastguard Worker   * const value = await prompt('Choose from an enum...', {
39*6dbdd20aSAndroid Build Coastguard Worker   *   values: [
40*6dbdd20aSAndroid Build Coastguard Worker   *     {x: MyEnum.Foo, name: 'foo'},
41*6dbdd20aSAndroid Build Coastguard Worker   *     {x: MyEnum.Bar, name: 'bar'},
42*6dbdd20aSAndroid Build Coastguard Worker   *   ],
43*6dbdd20aSAndroid Build Coastguard Worker   *   getName: (e) => e.name,
44*6dbdd20aSAndroid Build Coastguard Worker   * );
45*6dbdd20aSAndroid Build Coastguard Worker   * ```
46*6dbdd20aSAndroid Build Coastguard Worker   */
47*6dbdd20aSAndroid Build Coastguard Worker  prompt(
48*6dbdd20aSAndroid Build Coastguard Worker    text: string,
49*6dbdd20aSAndroid Build Coastguard Worker    choices?: ReadonlyArray<string>,
50*6dbdd20aSAndroid Build Coastguard Worker  ): Promise<string | undefined>;
51*6dbdd20aSAndroid Build Coastguard Worker  prompt<T>(text: string, choices: PromptChoices<T>): Promise<T | undefined>;
52*6dbdd20aSAndroid Build Coastguard Worker}
53*6dbdd20aSAndroid Build Coastguard Worker
54*6dbdd20aSAndroid Build Coastguard Workerexport interface PromptChoices<T> {
55*6dbdd20aSAndroid Build Coastguard Worker  values: ReadonlyArray<T>;
56*6dbdd20aSAndroid Build Coastguard Worker  getName: (x: T) => string;
57*6dbdd20aSAndroid Build Coastguard Worker}
58