UNPKG

chrome-devtools-frontend

Version:
103 lines (76 loc) 2.43 kB
// Copyright 2016 The Chromium Authors. All rights reserved. // 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} 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>; } export class SimpleView extends VBox implements View { readonly #title: Platform.UIString.LocalizedString; readonly #viewId: Lowercase<string>; constructor(title: Platform.UIString.LocalizedString, useShadowDom?: boolean, viewId?: Lowercase<string>) { super(useShadowDom); this.#title = title; if (viewId) { if (!Platform.StringUtilities.isExtendedKebabCase(viewId)) { throw new Error(`Invalid view ID '${viewId}'`); } } this.#viewId = viewId ?? Platform.StringUtilities.toKebabCase(title); } 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; widget(): Widget; } export interface TabbedViewLocation extends ViewLocation { tabbedPane(): TabbedPane; enableMoreTabsButton(): ToolbarMenuButton; } export interface ViewLocationResolver { resolveLocation(location: string): ViewLocation|null; }