xref: /aosp_15_r20/external/perfetto/ui/src/widgets/common.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2023 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 Workerimport {assertUnreachable} from '../base/logging';
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Worker// This file contains interfaces for attributes for various HTML elements.
18*6dbdd20aSAndroid Build Coastguard Worker// They are typically used by widgets which pass attributes down to their
19*6dbdd20aSAndroid Build Coastguard Worker// internal child, to provide a type-safe interface to users of those widgets.
20*6dbdd20aSAndroid Build Coastguard Worker// Note: This is a non-exhaustive list, and is added to when required.
21*6dbdd20aSAndroid Build Coastguard Worker// Feel free to add any missing attributes as they arise.
22*6dbdd20aSAndroid Build Coastguard Workerexport type Style = string | Partial<CSSStyleDeclaration>;
23*6dbdd20aSAndroid Build Coastguard Worker
24*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLAttrs {
25*6dbdd20aSAndroid Build Coastguard Worker  readonly ref?: string; // This is a common attribute used in Perfetto.
26*6dbdd20aSAndroid Build Coastguard Worker  readonly style?: Style;
27*6dbdd20aSAndroid Build Coastguard Worker  readonly id?: string;
28*6dbdd20aSAndroid Build Coastguard Worker  readonly title?: string;
29*6dbdd20aSAndroid Build Coastguard Worker  readonly className?: string;
30*6dbdd20aSAndroid Build Coastguard Worker  readonly onclick?: (e: PointerEvent) => void;
31*6dbdd20aSAndroid Build Coastguard Worker  readonly onmouseover?: (e: MouseEvent) => void;
32*6dbdd20aSAndroid Build Coastguard Worker  readonly onmouseout?: (e: MouseEvent) => void;
33*6dbdd20aSAndroid Build Coastguard Worker  readonly onmousedown?: (e: MouseEvent) => void;
34*6dbdd20aSAndroid Build Coastguard Worker  readonly onmouseup?: (e: MouseEvent) => void;
35*6dbdd20aSAndroid Build Coastguard Worker  readonly onmousemove?: (e: MouseEvent) => void;
36*6dbdd20aSAndroid Build Coastguard Worker  readonly onload?: (e: Event) => void;
37*6dbdd20aSAndroid Build Coastguard Worker}
38*6dbdd20aSAndroid Build Coastguard Worker
39*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLFocusableAttrs extends HTMLAttrs {
40*6dbdd20aSAndroid Build Coastguard Worker  readonly onblur?: (e: FocusEvent) => void;
41*6dbdd20aSAndroid Build Coastguard Worker  readonly onfocus?: (e: FocusEvent) => void;
42*6dbdd20aSAndroid Build Coastguard Worker}
43*6dbdd20aSAndroid Build Coastguard Worker
44*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLInputAttrs extends HTMLFocusableAttrs {
45*6dbdd20aSAndroid Build Coastguard Worker  readonly disabled?: boolean;
46*6dbdd20aSAndroid Build Coastguard Worker  readonly type?: string;
47*6dbdd20aSAndroid Build Coastguard Worker  readonly onchange?: (e: Event) => void;
48*6dbdd20aSAndroid Build Coastguard Worker  readonly oninput?: (e: KeyboardEvent) => void;
49*6dbdd20aSAndroid Build Coastguard Worker  readonly onkeydown?: (e: KeyboardEvent) => void;
50*6dbdd20aSAndroid Build Coastguard Worker  readonly onkeyup?: (e: KeyboardEvent) => void;
51*6dbdd20aSAndroid Build Coastguard Worker  readonly value?: string;
52*6dbdd20aSAndroid Build Coastguard Worker  readonly placeholder?: string;
53*6dbdd20aSAndroid Build Coastguard Worker}
54*6dbdd20aSAndroid Build Coastguard Worker
55*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLCheckboxAttrs extends HTMLInputAttrs {
56*6dbdd20aSAndroid Build Coastguard Worker  readonly checked?: boolean;
57*6dbdd20aSAndroid Build Coastguard Worker}
58*6dbdd20aSAndroid Build Coastguard Worker
59*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLButtonAttrs extends HTMLInputAttrs {}
60*6dbdd20aSAndroid Build Coastguard Worker
61*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLAnchorAttrs extends HTMLAttrs {
62*6dbdd20aSAndroid Build Coastguard Worker  readonly href?: string;
63*6dbdd20aSAndroid Build Coastguard Worker  readonly target?: string;
64*6dbdd20aSAndroid Build Coastguard Worker}
65*6dbdd20aSAndroid Build Coastguard Worker
66*6dbdd20aSAndroid Build Coastguard Workerexport interface HTMLLabelAttrs extends HTMLAttrs {
67*6dbdd20aSAndroid Build Coastguard Worker  readonly for?: string;
68*6dbdd20aSAndroid Build Coastguard Worker}
69*6dbdd20aSAndroid Build Coastguard Worker
70*6dbdd20aSAndroid Build Coastguard Workerexport enum Intent {
71*6dbdd20aSAndroid Build Coastguard Worker  None = 'none',
72*6dbdd20aSAndroid Build Coastguard Worker  Primary = 'primary',
73*6dbdd20aSAndroid Build Coastguard Worker}
74*6dbdd20aSAndroid Build Coastguard Worker
75*6dbdd20aSAndroid Build Coastguard Workerexport function classForIntent(intent: Intent): string | undefined {
76*6dbdd20aSAndroid Build Coastguard Worker  switch (intent) {
77*6dbdd20aSAndroid Build Coastguard Worker    case Intent.None:
78*6dbdd20aSAndroid Build Coastguard Worker      return undefined;
79*6dbdd20aSAndroid Build Coastguard Worker    case Intent.Primary:
80*6dbdd20aSAndroid Build Coastguard Worker      return 'pf-intent-primary';
81*6dbdd20aSAndroid Build Coastguard Worker    default:
82*6dbdd20aSAndroid Build Coastguard Worker      return assertUnreachable(intent);
83*6dbdd20aSAndroid Build Coastguard Worker  }
84*6dbdd20aSAndroid Build Coastguard Worker}
85