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 Worker// For now sections are fixed and cannot be extended by plugins. 16*6dbdd20aSAndroid Build Coastguard Workerexport const SIDEBAR_SECTIONS = { 17*6dbdd20aSAndroid Build Coastguard Worker navigation: { 18*6dbdd20aSAndroid Build Coastguard Worker title: 'Navigation', 19*6dbdd20aSAndroid Build Coastguard Worker summary: 'Open or record a new trace', 20*6dbdd20aSAndroid Build Coastguard Worker }, 21*6dbdd20aSAndroid Build Coastguard Worker current_trace: { 22*6dbdd20aSAndroid Build Coastguard Worker title: 'Current Trace', 23*6dbdd20aSAndroid Build Coastguard Worker summary: 'Actions on the current trace', 24*6dbdd20aSAndroid Build Coastguard Worker }, 25*6dbdd20aSAndroid Build Coastguard Worker convert_trace: { 26*6dbdd20aSAndroid Build Coastguard Worker title: 'Convert trace', 27*6dbdd20aSAndroid Build Coastguard Worker summary: 'Convert to other formats', 28*6dbdd20aSAndroid Build Coastguard Worker }, 29*6dbdd20aSAndroid Build Coastguard Worker example_traces: { 30*6dbdd20aSAndroid Build Coastguard Worker title: 'Example Traces', 31*6dbdd20aSAndroid Build Coastguard Worker summary: 'Open an example trace', 32*6dbdd20aSAndroid Build Coastguard Worker }, 33*6dbdd20aSAndroid Build Coastguard Worker support: { 34*6dbdd20aSAndroid Build Coastguard Worker title: 'Support', 35*6dbdd20aSAndroid Build Coastguard Worker summary: 'Documentation & Bugs', 36*6dbdd20aSAndroid Build Coastguard Worker }, 37*6dbdd20aSAndroid Build Coastguard Worker} as const; 38*6dbdd20aSAndroid Build Coastguard Worker 39*6dbdd20aSAndroid Build Coastguard Workerexport type SidebarSections = keyof typeof SIDEBAR_SECTIONS; 40*6dbdd20aSAndroid Build Coastguard Worker 41*6dbdd20aSAndroid Build Coastguard Workerexport interface SidebarManager { 42*6dbdd20aSAndroid Build Coastguard Worker readonly enabled: boolean; 43*6dbdd20aSAndroid Build Coastguard Worker 44*6dbdd20aSAndroid Build Coastguard Worker /** 45*6dbdd20aSAndroid Build Coastguard Worker * Adds a new menu item to the sidebar. 46*6dbdd20aSAndroid Build Coastguard Worker * All entries must map to a command. This will allow the shortcut and 47*6dbdd20aSAndroid Build Coastguard Worker * optional shortcut to be displayed on the UI. 48*6dbdd20aSAndroid Build Coastguard Worker */ 49*6dbdd20aSAndroid Build Coastguard Worker addMenuItem(menuItem: SidebarMenuItem): void; 50*6dbdd20aSAndroid Build Coastguard Worker 51*6dbdd20aSAndroid Build Coastguard Worker /** 52*6dbdd20aSAndroid Build Coastguard Worker * Gets the current visibility of the sidebar. 53*6dbdd20aSAndroid Build Coastguard Worker */ 54*6dbdd20aSAndroid Build Coastguard Worker get visible(): boolean; 55*6dbdd20aSAndroid Build Coastguard Worker 56*6dbdd20aSAndroid Build Coastguard Worker /** 57*6dbdd20aSAndroid Build Coastguard Worker * Toggles the visibility of the sidebar. Can only be called when 58*6dbdd20aSAndroid Build Coastguard Worker * `sidebarEnabled` returns `ENABLED`. 59*6dbdd20aSAndroid Build Coastguard Worker */ 60*6dbdd20aSAndroid Build Coastguard Worker toggleVisibility(): void; 61*6dbdd20aSAndroid Build Coastguard Worker} 62*6dbdd20aSAndroid Build Coastguard Worker 63*6dbdd20aSAndroid Build Coastguard Workerexport type SidebarMenuItem = { 64*6dbdd20aSAndroid Build Coastguard Worker readonly section: SidebarSections; 65*6dbdd20aSAndroid Build Coastguard Worker readonly sortOrder?: number; 66*6dbdd20aSAndroid Build Coastguard Worker 67*6dbdd20aSAndroid Build Coastguard Worker // The properties below can be mutated by passing a callback rather than a 68*6dbdd20aSAndroid Build Coastguard Worker // direct value. The callback is invoked on every render frame, keep it cheap. 69*6dbdd20aSAndroid Build Coastguard Worker // readonly text: string | (() => string); 70*6dbdd20aSAndroid Build Coastguard Worker readonly icon?: string | (() => string); 71*6dbdd20aSAndroid Build Coastguard Worker readonly tooltip?: string | (() => string); 72*6dbdd20aSAndroid Build Coastguard Worker readonly cssClass?: string | (() => string); // Without trailing '.'. 73*6dbdd20aSAndroid Build Coastguard Worker 74*6dbdd20aSAndroid Build Coastguard Worker // If false or omitted the item works normally. 75*6dbdd20aSAndroid Build Coastguard Worker // If true the item is striken through and the action/href will be a no-op. 76*6dbdd20aSAndroid Build Coastguard Worker // If a string, the item acts as disabled and clicking on it shows a popup 77*6dbdd20aSAndroid Build Coastguard Worker // that shows the returned text (the string has "disabled reason" semantic); 78*6dbdd20aSAndroid Build Coastguard Worker readonly disabled?: string | boolean | (() => string | boolean); 79*6dbdd20aSAndroid Build Coastguard Worker 80*6dbdd20aSAndroid Build Coastguard Worker // One of the three following arguments must be specified. 81*6dbdd20aSAndroid Build Coastguard Worker} & ( 82*6dbdd20aSAndroid Build Coastguard Worker | { 83*6dbdd20aSAndroid Build Coastguard Worker /** The text of the menu entry. Required. */ 84*6dbdd20aSAndroid Build Coastguard Worker readonly text: string | (() => string); 85*6dbdd20aSAndroid Build Coastguard Worker 86*6dbdd20aSAndroid Build Coastguard Worker /** 87*6dbdd20aSAndroid Build Coastguard Worker * The URL to navigate to. It can be either: 88*6dbdd20aSAndroid Build Coastguard Worker * - A local route (e.g. ''#!/query'). 89*6dbdd20aSAndroid Build Coastguard Worker * - An absolute URL (e.g. 'https://example.com'). In this case the link will 90*6dbdd20aSAndroid Build Coastguard Worker * be open in a target=_blank new tag. 91*6dbdd20aSAndroid Build Coastguard Worker */ 92*6dbdd20aSAndroid Build Coastguard Worker readonly href: string; 93*6dbdd20aSAndroid Build Coastguard Worker } 94*6dbdd20aSAndroid Build Coastguard Worker | { 95*6dbdd20aSAndroid Build Coastguard Worker /** The text of the menu entry. Required. */ 96*6dbdd20aSAndroid Build Coastguard Worker readonly text: string | (() => string); 97*6dbdd20aSAndroid Build Coastguard Worker 98*6dbdd20aSAndroid Build Coastguard Worker /** 99*6dbdd20aSAndroid Build Coastguard Worker * The function that will be invoked when clicking. If the function returns 100*6dbdd20aSAndroid Build Coastguard Worker * a promise, a spinner will be drawn next to the sidebar entry until the 101*6dbdd20aSAndroid Build Coastguard Worker * promise resolves. 102*6dbdd20aSAndroid Build Coastguard Worker */ 103*6dbdd20aSAndroid Build Coastguard Worker readonly action: () => unknown | Promise<unknown>; 104*6dbdd20aSAndroid Build Coastguard Worker 105*6dbdd20aSAndroid Build Coastguard Worker /** Optional. If omitted href = '#'. */ 106*6dbdd20aSAndroid Build Coastguard Worker readonly href?: string; 107*6dbdd20aSAndroid Build Coastguard Worker } 108*6dbdd20aSAndroid Build Coastguard Worker | { 109*6dbdd20aSAndroid Build Coastguard Worker /** Optional. If omitted uses the command name. */ 110*6dbdd20aSAndroid Build Coastguard Worker readonly text?: string | (() => string); 111*6dbdd20aSAndroid Build Coastguard Worker 112*6dbdd20aSAndroid Build Coastguard Worker /** The ID of the command that will be invoked when clicking */ 113*6dbdd20aSAndroid Build Coastguard Worker readonly commandId: string; 114*6dbdd20aSAndroid Build Coastguard Worker } 115*6dbdd20aSAndroid Build Coastguard Worker); 116