UNPKG

chrome-devtools-frontend

Version:
127 lines (98 loc) 3 kB
// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Platform from '../../core/platform/platform.js'; import type {TabbedPane} from './TabbedPane.js'; import type {ToolbarItem, ToolbarMenuButton} from './Toolbar.js'; import {ViewManager} from './ViewManager.js'; import {VBox, type Widget, type WidgetOptions} from './Widget.js'; export interface View { viewId(): string; title(): Platform.UIString.LocalizedString; isCloseable(): boolean; isPreviewFeature(): boolean; iconName(): string|undefined; isTransient(): boolean; toolbarItems(): Promise<ToolbarItem[]>; widget(): Promise<Widget>; disposeView(): void|Promise<void>; } /** * Settings to control the behavior of `SimpleView` subclasses. */ export interface SimpleViewOptions extends WidgetOptions { /** * User visible title for the view. */ title: Platform.UIString.LocalizedString; /** * Internal ID used to refer to the view. * * Note that this is also used to construct VE contexts in some places. * * Must be in extended kebab case. */ viewId: Lowercase<string>; } export class SimpleView extends VBox implements View { readonly #title: Platform.UIString.LocalizedString; readonly #viewId: Lowercase<string>; /** * Constructs a new `SimpleView` with the given `options`. * * @param options the settings for the resulting view. * @throws TypeError - if `options.viewId` is not in extended kebab case. */ constructor(options: SimpleViewOptions) { super(options); this.#title = options.title; this.#viewId = options.viewId; if (!Platform.StringUtilities.isExtendedKebabCase(this.#viewId)) { throw new TypeError(`Invalid view ID '${this.#viewId}'`); } } viewId(): string { return this.#viewId; } title(): Platform.UIString.LocalizedString { return this.#title; } isCloseable(): boolean { return false; } isTransient(): boolean { return false; } toolbarItems(): Promise<ToolbarItem[]> { return Promise.resolve([]); } widget(): Promise<Widget> { return Promise.resolve(this); } revealView(): Promise<void> { return ViewManager.instance().revealView(this); } disposeView(): void { } isPreviewFeature(): boolean { return false; } iconName(): string|undefined { return undefined; } } export interface ViewLocation { appendApplicableItems(locationName: string): void; appendView(view: View, insertBefore?: View|null): void; showView(view: View, insertBefore?: View|null, userGesture?: boolean): Promise<void>; removeView(view: View): void; isViewVisible(view: View): boolean; widget(): Widget; } export interface TabbedViewLocation extends ViewLocation { tabbedPane(): TabbedPane; enableMoreTabsButton(): ToolbarMenuButton; } export interface ViewLocationResolver { resolveLocation(location: string): ViewLocation|null; }