| // Copyright (C) 2023 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. |
| |
| import {assertUnreachable} from '../base/logging'; |
| |
| // This file contains interfaces for attributes for various HTML elements. |
| // They are typically used by widgets which pass attributes down to their |
| // internal child, to provide a type-safe interface to users of those widgets. |
| // Note: This is a non-exhaustive list, and is added to when required. |
| // Feel free to add any missing attributes as they arise. |
| export type Style = string | Partial<CSSStyleDeclaration>; |
| |
| export interface HTMLAttrs { |
| ref?: string; // This is a common attribute used in Perfetto. |
| style?: Style; |
| id?: string; |
| title?: string; |
| className?: string; |
| onclick?: (e: PointerEvent) => void; |
| onmouseover?: (e: MouseEvent) => void; |
| onmouseout?: (e: MouseEvent) => void; |
| onmousedown?: (e: MouseEvent) => void; |
| onmouseup?: (e: MouseEvent) => void; |
| onmousemove?: (e: MouseEvent) => void; |
| onload?: (e: Event) => void; |
| } |
| |
| export interface HTMLInputAttrs extends HTMLAttrs { |
| disabled?: boolean; |
| type?: string; |
| onchange?: (e: Event) => void; |
| oninput?: (e: KeyboardEvent) => void; |
| onkeydown?: (e: KeyboardEvent) => void; |
| onkeyup?: (e: KeyboardEvent) => void; |
| value?: string; |
| placeholder?: string; |
| } |
| |
| export interface HTMLCheckboxAttrs extends HTMLInputAttrs { |
| checked?: boolean; |
| } |
| |
| export interface HTMLButtonAttrs extends HTMLInputAttrs {} |
| |
| export interface HTMLAnchorAttrs extends HTMLAttrs { |
| href?: string; |
| target?: string; |
| } |
| |
| export interface HTMLLabelAttrs extends HTMLAttrs { |
| for?: string; |
| } |
| |
| export enum Intent { |
| None = 'none', |
| Primary = 'primary', |
| } |
| |
| export function classForIntent(intent: Intent): string | undefined { |
| switch (intent) { |
| case Intent.None: |
| return undefined; |
| case Intent.Primary: |
| return 'pf-intent-primary'; |
| default: |
| return assertUnreachable(intent); |
| } |
| } |