chrome-devtools-frontend 1.0.1555174 → 1.0.1556696
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/front_end/core/protocol_client/InspectorBackend.ts +1 -1
- package/front_end/core/root/Runtime.ts +0 -4
- package/front_end/core/sdk/DOMModel.ts +101 -7
- package/front_end/entrypoints/formatter_worker/FormatterActions.ts +2 -0
- package/front_end/entrypoints/formatter_worker/ScopeParser.ts +75 -7
- package/front_end/entrypoints/formatter_worker/Substitute.ts +1 -1
- package/front_end/generated/InspectorBackendCommands.ts +1 -1
- package/front_end/generated/protocol.ts +0 -1
- package/front_end/models/ai_assistance/AiConversation.ts +71 -10
- package/front_end/models/ai_assistance/ArtifactsManager.ts +67 -0
- package/front_end/models/ai_assistance/ConversationHandler.ts +3 -2
- package/front_end/models/ai_assistance/agents/AiAgent.ts +17 -27
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +152 -4
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -2
- package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -1
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +0 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -1
- package/front_end/{ui/components → models}/annotations/AnnotationRepository.ts +4 -4
- package/front_end/models/annotations/README.md +7 -0
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
- package/front_end/models/greendev/Prototypes.ts +56 -0
- package/front_end/models/greendev/README.md +5 -0
- package/front_end/models/greendev/greendev.ts +5 -0
- package/front_end/models/stack_trace/StackTrace.ts +13 -2
- package/front_end/models/stack_trace/StackTraceImpl.ts +81 -6
- package/front_end/models/stack_trace/StackTraceModel.ts +35 -3
- package/front_end/models/trace/extras/TraceTree.ts +4 -2
- package/front_end/models/trace/insights/LCPDiscovery.ts +0 -2
- package/front_end/models/trace/types/TraceEvents.ts +0 -1
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +116 -70
- package/front_end/panels/ai_assistance/aiAssistancePanel.css +16 -0
- package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +159 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +3 -2
- package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +7 -8
- package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +15 -8
- package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +9 -9
- package/front_end/panels/ai_assistance/components/artifactsViewer.css +15 -0
- package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +5 -6
- package/front_end/panels/application/AppManifestView.ts +263 -205
- package/front_end/panels/application/ApplicationPanelSidebar.ts +24 -57
- package/front_end/panels/application/OpenedWindowDetailsView.ts +2 -0
- package/front_end/panels/application/ServiceWorkersView.ts +2 -0
- package/front_end/panels/application/StorageView.ts +1 -0
- package/front_end/panels/application/appManifestView.css +48 -0
- package/front_end/panels/application/components/ProtocolHandlersView.ts +2 -2
- package/front_end/panels/application/preloading/PreloadingView.ts +12 -6
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +230 -237
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +96 -79
- package/front_end/panels/application/preloading/components/preloadingGrid.css +26 -29
- package/front_end/panels/application/preloading/preloadingView.css +6 -0
- package/front_end/panels/common/Annotation.ts +1 -1
- package/front_end/panels/common/AnnotationManager.ts +1 -1
- package/front_end/panels/common/ExtensionView.ts +1 -0
- package/front_end/panels/console/ConsoleContextSelector.ts +74 -9
- package/front_end/panels/console/consoleContextSelector.css +31 -29
- package/front_end/panels/coverage/coverageListView.css +59 -57
- package/front_end/panels/elements/ElementsPanel.ts +1 -1
- package/front_end/panels/elements/ElementsTreeElement.ts +39 -1
- package/front_end/panels/elements/ElementsTreeOutline.ts +23 -21
- package/front_end/panels/elements/TopLayerContainer.ts +26 -91
- package/front_end/panels/explain/components/ConsoleInsight.ts +3 -3
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +4 -8
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +148 -97
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/linearMemoryValueInterpreter.css +37 -35
- package/front_end/panels/network/NetworkItemView.ts +1 -1
- package/front_end/panels/network/NetworkLogView.ts +1 -1
- package/front_end/panels/network/NetworkPanel.ts +1 -1
- package/front_end/panels/recorder/RecorderController.ts +0 -1
- package/front_end/panels/security/SecurityPanelSidebar.ts +5 -0
- package/front_end/panels/settings/SettingsScreen.ts +133 -1
- package/front_end/panels/settings/settings-meta.ts +24 -0
- package/front_end/panels/settings/settingsScreen.css +4 -0
- package/front_end/panels/sources/UISourceCodeFrame.ts +3 -17
- package/front_end/panels/timeline/TimelineUIUtils.ts +5 -8
- package/front_end/panels/timeline/components/TimelineSummary.ts +75 -54
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +18 -26
- package/front_end/panels/timeline/components/insights/Cache.ts +12 -8
- package/front_end/panels/timeline/components/insights/DOMSize.ts +25 -21
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +7 -7
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +7 -5
- package/front_end/panels/timeline/components/insights/ForcedReflow.ts +11 -9
- package/front_end/panels/timeline/components/insights/INPBreakdown.ts +7 -6
- package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -5
- package/front_end/panels/timeline/components/insights/InsightRenderer.ts +20 -18
- package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +12 -12
- package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +7 -7
- package/front_end/panels/timeline/components/insights/ModernHTTP.ts +7 -5
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +15 -13
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +2 -2
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +15 -14
- package/front_end/panels/timeline/components/insights/Table.ts +152 -130
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +11 -9
- package/front_end/panels/timeline/components/timelineSummary.css +58 -57
- package/front_end/panels/timeline/thirdPartyTreeView.css +109 -0
- package/front_end/panels/timeline/timelineDetailsView.css +2 -4
- package/front_end/panels/timeline/timelinePanel.css +0 -110
- package/front_end/third_party/acorn/estree-legacy.d.ts +2 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/CDPSession.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/CDPSession.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +21 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +15 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/CDPSession.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/CDPSession.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +21 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/package.json +2 -2
- package/front_end/third_party/puppeteer/package/src/api/CDPSession.ts +1 -2
- package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +2 -4
- package/front_end/third_party/puppeteer/package/src/api/Frame.ts +2 -4
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +2 -4
- package/front_end/third_party/puppeteer/package/src/bidi/core/Connection.ts +3 -2
- package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +29 -10
- package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/report_view/ReportView.docs.ts +37 -0
- package/front_end/ui/components/report_view/ReportView.ts +1 -4
- package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
- package/front_end/ui/legacy/Floaty.ts +5 -9
- package/front_end/ui/legacy/InspectorView.ts +2 -1
- package/front_end/ui/legacy/ReportView.ts +5 -4
- package/front_end/ui/legacy/TabbedPane.ts +1 -1
- package/front_end/ui/legacy/ViewManager.ts +2 -32
- package/front_end/ui/legacy/Widget.ts +7 -0
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +0 -1
- package/front_end/ui/legacy/reportView.css +0 -24
- package/front_end/ui/visual_logging/KnownContextValues.ts +7 -0
- package/package.json +1 -1
- /package/front_end/{ui/components → models}/annotations/AnnotationType.ts +0 -0
- /package/front_end/{ui/components → models}/annotations/annotations.ts +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Copyright 2020 The Chromium Authors
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
|
-
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
4
|
|
|
6
5
|
import '../../../ui/kit/kit.js';
|
|
7
6
|
|
|
@@ -35,42 +34,149 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
|
35
34
|
const {render, html} = Lit;
|
|
36
35
|
const {widgetConfig} = UI.Widget;
|
|
37
36
|
|
|
38
|
-
export interface
|
|
39
|
-
value: ArrayBuffer;
|
|
40
|
-
valueTypes: Set<ValueType>;
|
|
37
|
+
export interface ViewInput {
|
|
41
38
|
endianness: Endianness;
|
|
42
|
-
|
|
39
|
+
buffer: ArrayBuffer;
|
|
40
|
+
valueTypes: Set<ValueType>;
|
|
41
|
+
valueTypeModes: Map<ValueType, ValueTypeMode>;
|
|
43
42
|
memoryLength: number;
|
|
43
|
+
showSettings: boolean;
|
|
44
44
|
onValueTypeModeChange: (type: ValueType, mode: ValueTypeMode) => void;
|
|
45
45
|
onJumpToAddressClicked: (address: number) => void;
|
|
46
46
|
onEndiannessChanged: (endianness: Endianness) => void;
|
|
47
47
|
onValueTypeToggled: (type: ValueType, checked: boolean) => void;
|
|
48
|
+
onSettingsToggle: () => void;
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
function renderEndiannessSetting(
|
|
52
|
+
onEndiannessChanged: (endianness: Endianness) => void, currentEndiannes: Endianness): Lit.TemplateResult {
|
|
53
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
54
|
+
// clang-format off
|
|
55
|
+
return html`
|
|
56
|
+
<label data-endianness-setting="true" title=${i18nString(UIStrings.changeEndianness)}>
|
|
57
|
+
<select
|
|
58
|
+
jslog=${VisualLogging.dropDown('linear-memory-inspector.endianess').track({change: true})}
|
|
59
|
+
style="border: none;"
|
|
60
|
+
data-endianness="true" @change=${(e: Event) => onEndiannessChanged((e.target as HTMLSelectElement).value as Endianness)}>
|
|
61
|
+
${[Endianness.LITTLE, Endianness.BIG].map(endianness => {
|
|
62
|
+
return html`<option value=${endianness} .selected=${currentEndiannes === endianness}
|
|
63
|
+
jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true})}>${
|
|
64
|
+
i18n.i18n.lockedString(endianness)}</option>`;
|
|
65
|
+
})}
|
|
66
|
+
</select>
|
|
67
|
+
</label>
|
|
68
|
+
`;
|
|
69
|
+
// clang-format on
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLElement): void => {
|
|
73
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
74
|
+
// clang-format off
|
|
75
|
+
render(html`
|
|
76
|
+
<style>${UI.inspectorCommonStyles}</style>
|
|
77
|
+
<style>${linearMemoryValueInterpreterStyles}</style>
|
|
78
|
+
<div class="value-interpreter">
|
|
79
|
+
<div class="settings-toolbar">
|
|
80
|
+
${renderEndiannessSetting(input.onEndiannessChanged, input.endianness)}
|
|
81
|
+
<devtools-button data-settings="true" class="toolbar-button ${input.showSettings ? '' : 'disabled'}"
|
|
82
|
+
title=${i18nString(UIStrings.toggleValueTypeSettings)} @click=${input.onSettingsToggle}
|
|
83
|
+
jslog=${VisualLogging.toggleSubpane('linear-memory-inspector.toggle-value-settings').track({ click: true })}
|
|
84
|
+
.iconName=${'gear'}
|
|
85
|
+
.toggledIconName=${'gear-filled'}
|
|
86
|
+
.toggleType=${Buttons.Button.ToggleType.PRIMARY}
|
|
87
|
+
.variant=${Buttons.Button.Variant.ICON_TOGGLE}
|
|
88
|
+
></devtools-button>
|
|
89
|
+
</div>
|
|
90
|
+
<span class="divider"></span>
|
|
91
|
+
<div>
|
|
92
|
+
${input.showSettings ?
|
|
93
|
+
html`
|
|
94
|
+
<devtools-widget .widgetConfig=${widgetConfig(ValueInterpreterSettings, {
|
|
95
|
+
valueTypes: input.valueTypes, onToggle: input.onValueTypeToggled
|
|
96
|
+
})}>
|
|
97
|
+
</devtools-widget>` :
|
|
98
|
+
html`
|
|
99
|
+
<devtools-widget .widgetConfig=${widgetConfig(ValueInterpreterDisplay, {
|
|
100
|
+
buffer: input.buffer,
|
|
101
|
+
valueTypes: input.valueTypes,
|
|
102
|
+
endianness: input.endianness,
|
|
103
|
+
valueTypeModes: input.valueTypeModes,
|
|
104
|
+
memoryLength: input.memoryLength,
|
|
105
|
+
onValueTypeModeChange: input.onValueTypeModeChange,
|
|
106
|
+
onJumpToAddressClicked: input.onJumpToAddressClicked,
|
|
107
|
+
})}>
|
|
108
|
+
</devtools-widget>`}
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
`,
|
|
112
|
+
target,
|
|
113
|
+
);
|
|
114
|
+
// clang-format on
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export type View = typeof DEFAULT_VIEW;
|
|
118
|
+
|
|
119
|
+
export class LinearMemoryValueInterpreter extends UI.Widget.Widget {
|
|
120
|
+
readonly #view: View;
|
|
56
121
|
#endianness = Endianness.LITTLE;
|
|
57
122
|
#buffer = new ArrayBuffer(0);
|
|
58
123
|
#valueTypes = new Set<ValueType>();
|
|
59
124
|
#valueTypeModeConfig = new Map<ValueType, ValueTypeMode>();
|
|
60
125
|
#memoryLength = 0;
|
|
61
126
|
#showSettings = false;
|
|
127
|
+
#onValueTypeModeChange: (type: ValueType, mode: ValueTypeMode) => void = () => {};
|
|
128
|
+
#onJumpToAddressClicked: (address: number) => void = () => {};
|
|
129
|
+
#onEndiannessChanged: (endianness: Endianness) => void = () => {};
|
|
130
|
+
#onValueTypeToggled: (type: ValueType, checked: boolean) => void = () => {};
|
|
131
|
+
|
|
132
|
+
constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
|
|
133
|
+
super(element);
|
|
134
|
+
this.#view = view;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
set buffer(value: ArrayBuffer) {
|
|
138
|
+
this.#buffer = value;
|
|
139
|
+
this.requestUpdate();
|
|
140
|
+
}
|
|
62
141
|
|
|
63
|
-
|
|
64
|
-
this.#
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
this.#
|
|
69
|
-
this
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.#
|
|
142
|
+
get buffer(): ArrayBuffer {
|
|
143
|
+
return this.#buffer;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
set valueTypes(value: Set<ValueType>) {
|
|
147
|
+
this.#valueTypes = value;
|
|
148
|
+
this.requestUpdate();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
get valueTypes(): Set<ValueType> {
|
|
152
|
+
return this.#valueTypes;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
set valueTypeModes(value: Map<ValueType, ValueTypeMode>) {
|
|
156
|
+
this.#valueTypeModeConfig = value;
|
|
157
|
+
this.requestUpdate();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
get valueTypeModes(): Map<ValueType, ValueTypeMode> {
|
|
161
|
+
return this.#valueTypeModeConfig;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
set endianness(value: Endianness) {
|
|
165
|
+
this.#endianness = value;
|
|
166
|
+
this.requestUpdate();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
get endianness(): Endianness {
|
|
170
|
+
return this.#endianness;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
set memoryLength(value: number) {
|
|
174
|
+
this.#memoryLength = value;
|
|
175
|
+
this.requestUpdate();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
get memoryLength(): number {
|
|
179
|
+
return this.#memoryLength;
|
|
74
180
|
}
|
|
75
181
|
|
|
76
182
|
get onValueTypeModeChange(): (type: ValueType, mode: ValueTypeMode) => void {
|
|
@@ -79,7 +185,7 @@ export class LinearMemoryValueInterpreter extends HTMLElement {
|
|
|
79
185
|
|
|
80
186
|
set onValueTypeModeChange(value: (type: ValueType, mode: ValueTypeMode) => void) {
|
|
81
187
|
this.#onValueTypeModeChange = value;
|
|
82
|
-
this
|
|
188
|
+
this.requestUpdate();
|
|
83
189
|
}
|
|
84
190
|
|
|
85
191
|
get onJumpToAddressClicked(): (address: number) => void {
|
|
@@ -88,7 +194,7 @@ export class LinearMemoryValueInterpreter extends HTMLElement {
|
|
|
88
194
|
|
|
89
195
|
set onJumpToAddressClicked(value: (address: number) => void) {
|
|
90
196
|
this.#onJumpToAddressClicked = value;
|
|
91
|
-
this
|
|
197
|
+
this.requestUpdate();
|
|
92
198
|
}
|
|
93
199
|
|
|
94
200
|
get onEndiannessChanged(): (endianness: Endianness) => void {
|
|
@@ -97,7 +203,7 @@ export class LinearMemoryValueInterpreter extends HTMLElement {
|
|
|
97
203
|
|
|
98
204
|
set onEndiannessChanged(value: (endianness: Endianness) => void) {
|
|
99
205
|
this.#onEndiannessChanged = value;
|
|
100
|
-
this
|
|
206
|
+
this.performUpdate();
|
|
101
207
|
}
|
|
102
208
|
|
|
103
209
|
get onValueTypeToggled(): (type: ValueType, checked: boolean) => void {
|
|
@@ -106,83 +212,28 @@ export class LinearMemoryValueInterpreter extends HTMLElement {
|
|
|
106
212
|
|
|
107
213
|
set onValueTypeToggled(value: (type: ValueType, checked: boolean) => void) {
|
|
108
214
|
this.#onValueTypeToggled = value;
|
|
109
|
-
this
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
#render(): void {
|
|
113
|
-
// Disabled until https://crbug.com/1079231 is fixed.
|
|
114
|
-
// clang-format off
|
|
115
|
-
render(html`
|
|
116
|
-
<style>${UI.inspectorCommonStyles}</style>
|
|
117
|
-
<style>${linearMemoryValueInterpreterStyles}</style>
|
|
118
|
-
<div class="value-interpreter">
|
|
119
|
-
<div class="settings-toolbar">
|
|
120
|
-
${this.#renderEndiannessSetting()}
|
|
121
|
-
<devtools-button data-settings="true" class="toolbar-button ${this.#showSettings ? '' : 'disabled'}"
|
|
122
|
-
title=${i18nString(UIStrings.toggleValueTypeSettings)} @click=${this.#onSettingsToggle}
|
|
123
|
-
jslog=${VisualLogging.toggleSubpane('linear-memory-inspector.toggle-value-settings').track({click: true})}
|
|
124
|
-
.iconName=${'gear'}
|
|
125
|
-
.toggledIconName=${'gear-filled'}
|
|
126
|
-
.toggleType=${Buttons.Button.ToggleType.PRIMARY}
|
|
127
|
-
.variant=${Buttons.Button.Variant.ICON_TOGGLE}
|
|
128
|
-
></devtools-button>
|
|
129
|
-
</div>
|
|
130
|
-
<span class="divider"></span>
|
|
131
|
-
<div>
|
|
132
|
-
${this.#showSettings ?
|
|
133
|
-
html`
|
|
134
|
-
<devtools-widget .widgetConfig=${widgetConfig(ValueInterpreterSettings, {
|
|
135
|
-
valueTypes: this.#valueTypes, onToggle: this.#onValueTypeToggled })}>
|
|
136
|
-
</devtools-widget>` :
|
|
137
|
-
html`
|
|
138
|
-
<devtools-widget .widgetConfig=${widgetConfig(ValueInterpreterDisplay, {
|
|
139
|
-
buffer: this.#buffer,
|
|
140
|
-
valueTypes: this.#valueTypes,
|
|
141
|
-
endianness: this.#endianness,
|
|
142
|
-
valueTypeModes: this.#valueTypeModeConfig,
|
|
143
|
-
memoryLength: this.#memoryLength,
|
|
144
|
-
onValueTypeModeChange: this.#onValueTypeModeChange,
|
|
145
|
-
onJumpToAddressClicked: this.#onJumpToAddressClicked,
|
|
146
|
-
})}>
|
|
147
|
-
</devtools-widget>`}
|
|
148
|
-
</div>
|
|
149
|
-
</div>
|
|
150
|
-
`,
|
|
151
|
-
this.#shadow, { host: this },
|
|
152
|
-
);
|
|
153
|
-
// clang-format on
|
|
215
|
+
this.performUpdate();
|
|
154
216
|
}
|
|
155
217
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
</label>
|
|
172
|
-
`;
|
|
173
|
-
// clang-format on
|
|
218
|
+
override performUpdate(): void {
|
|
219
|
+
const viewInput: ViewInput = {
|
|
220
|
+
endianness: this.#endianness,
|
|
221
|
+
buffer: this.#buffer,
|
|
222
|
+
valueTypes: this.#valueTypes,
|
|
223
|
+
valueTypeModes: this.#valueTypeModeConfig,
|
|
224
|
+
memoryLength: this.#memoryLength,
|
|
225
|
+
showSettings: this.#showSettings,
|
|
226
|
+
onValueTypeModeChange: this.#onValueTypeModeChange,
|
|
227
|
+
onJumpToAddressClicked: this.#onJumpToAddressClicked,
|
|
228
|
+
onEndiannessChanged: this.#onEndiannessChanged,
|
|
229
|
+
onValueTypeToggled: this.#onValueTypeToggled,
|
|
230
|
+
onSettingsToggle: this.#onSettingsToggle.bind(this),
|
|
231
|
+
};
|
|
232
|
+
this.#view(viewInput, undefined, this.contentElement);
|
|
174
233
|
}
|
|
175
234
|
|
|
176
235
|
#onSettingsToggle(): void {
|
|
177
236
|
this.#showSettings = !this.#showSettings;
|
|
178
|
-
this
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
customElements.define('devtools-linear-memory-inspector-interpreter', LinearMemoryValueInterpreter);
|
|
183
|
-
|
|
184
|
-
declare global {
|
|
185
|
-
interface HTMLElementTagNameMap {
|
|
186
|
-
'devtools-linear-memory-inspector-interpreter': LinearMemoryValueInterpreter;
|
|
237
|
+
this.requestUpdate();
|
|
187
238
|
}
|
|
188
239
|
}
|
|
@@ -47,7 +47,7 @@ const BYTE_GROUP_SIZE = 4;
|
|
|
47
47
|
export class LinearMemoryViewer extends HTMLElement {
|
|
48
48
|
readonly #shadow = this.attachShadow({mode: 'open'});
|
|
49
49
|
|
|
50
|
-
readonly #resizeObserver = new ResizeObserver(() => this.#resize());
|
|
50
|
+
readonly #resizeObserver = new ResizeObserver(() => requestAnimationFrame(this.#resize.bind(this)));
|
|
51
51
|
#isObservingResize = false;
|
|
52
52
|
|
|
53
53
|
#memory = new Uint8Array();
|
package/front_end/panels/linear_memory_inspector/components/linearMemoryValueInterpreter.css
CHANGED
|
@@ -4,44 +4,46 @@
|
|
|
4
4
|
* found in the LICENSE file.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
@scope to (devtools-widget > *) {
|
|
8
|
+
:scope {
|
|
9
|
+
flex: auto;
|
|
10
|
+
display: flex;
|
|
11
|
+
}
|
|
11
12
|
|
|
12
|
-
.value-interpreter {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
13
|
+
.value-interpreter {
|
|
14
|
+
border: 1px solid var(--sys-color-divider);
|
|
15
|
+
background-color: var(--sys-color-cdt-base-container);
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
width: 400px;
|
|
18
|
+
}
|
|
18
19
|
|
|
19
|
-
.settings-toolbar {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
20
|
+
.settings-toolbar {
|
|
21
|
+
min-height: 26px;
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-wrap: nowrap;
|
|
24
|
+
justify-content: space-between;
|
|
25
|
+
padding-left: var(--sys-size-3);
|
|
26
|
+
padding-right: var(--sys-size-3);
|
|
27
|
+
align-items: center;
|
|
28
|
+
}
|
|
28
29
|
|
|
29
|
-
.settings-toolbar-button {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
30
|
+
.settings-toolbar-button {
|
|
31
|
+
padding: 0;
|
|
32
|
+
width: 20px;
|
|
33
|
+
height: 20px;
|
|
34
|
+
border: none;
|
|
35
|
+
outline: none;
|
|
36
|
+
background-color: transparent;
|
|
37
|
+
}
|
|
37
38
|
|
|
38
|
-
.settings-toolbar-button.active devtools-icon {
|
|
39
|
-
|
|
40
|
-
}
|
|
39
|
+
.settings-toolbar-button.active devtools-icon {
|
|
40
|
+
color: var(--icon-toggled);
|
|
41
|
+
}
|
|
41
42
|
|
|
42
|
-
.divider {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
.divider {
|
|
44
|
+
display: block;
|
|
45
|
+
height: 1px;
|
|
46
|
+
margin-bottom: 12px;
|
|
47
|
+
background-color: var(--sys-color-divider);
|
|
48
|
+
}
|
|
47
49
|
}
|
|
@@ -8,10 +8,10 @@ import * as Common from '../../core/common/common.js';
|
|
|
8
8
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
9
9
|
import * as Platform from '../../core/platform/platform.js';
|
|
10
10
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
11
|
+
import * as Annotations from '../../models/annotations/annotations.js';
|
|
11
12
|
import type * as NetworkTimeCalculator from '../../models/network_time_calculator/network_time_calculator.js';
|
|
12
13
|
import * as PanelCommon from '../../panels/common/common.js';
|
|
13
14
|
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
14
|
-
import * as Annotations from '../../ui/components/annotations/annotations.js';
|
|
15
15
|
import * as LegacyWrapper from '../../ui/components/legacy_wrapper/legacy_wrapper.js';
|
|
16
16
|
import {Icon} from '../../ui/kit/kit.js';
|
|
17
17
|
import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
|
|
@@ -42,6 +42,7 @@ import * as Platform from '../../core/platform/platform.js';
|
|
|
42
42
|
import * as Root from '../../core/root/root.js';
|
|
43
43
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
44
44
|
import * as Protocol from '../../generated/protocol.js';
|
|
45
|
+
import * as Annotations from '../../models/annotations/annotations.js';
|
|
45
46
|
import * as Bindings from '../../models/bindings/bindings.js';
|
|
46
47
|
import * as HAR from '../../models/har/har.js';
|
|
47
48
|
import * as Logs from '../../models/logs/logs.js';
|
|
@@ -51,7 +52,6 @@ import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
|
51
52
|
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
52
53
|
import * as Sources from '../../panels/sources/sources.js';
|
|
53
54
|
import * as Adorners from '../../ui/components/adorners/adorners.js';
|
|
54
|
-
import * as Annotations from '../../ui/components/annotations/annotations.js';
|
|
55
55
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
56
56
|
import * as RenderCoordinator from '../../ui/components/render_coordinator/render_coordinator.js';
|
|
57
57
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
@@ -40,6 +40,7 @@ import * as Host from '../../core/host/host.js';
|
|
|
40
40
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
41
41
|
import * as Platform from '../../core/platform/platform.js';
|
|
42
42
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
43
|
+
import * as Annotations from '../../models/annotations/annotations.js';
|
|
43
44
|
import * as Logs from '../../models/logs/logs.js';
|
|
44
45
|
import * as NetworkTimeCalculator from '../../models/network_time_calculator/network_time_calculator.js';
|
|
45
46
|
import * as Trace from '../../models/trace/trace.js';
|
|
@@ -47,7 +48,6 @@ import * as Workspace from '../../models/workspace/workspace.js';
|
|
|
47
48
|
import * as PanelCommon from '../../panels/common/common.js';
|
|
48
49
|
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
49
50
|
import * as Tracing from '../../services/tracing/tracing.js';
|
|
50
|
-
import * as Annotations from '../../ui/components/annotations/annotations.js';
|
|
51
51
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
52
52
|
import * as SettingsUI from '../../ui/legacy/components/settings_ui/settings_ui.js';
|
|
53
53
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -30,7 +30,6 @@ import * as Actions from './recorder-actions/recorder-actions.js';
|
|
|
30
30
|
import recorderControllerStyles from './recorderController.css.js';
|
|
31
31
|
import * as Events from './RecorderEvents.js';
|
|
32
32
|
|
|
33
|
-
// TODO(crbug.com/391381439): Fully migrate off of Constructable Stylesheets.
|
|
34
33
|
const {html, Decorators, Directives: {ref}, LitElement} = Lit;
|
|
35
34
|
const {customElement, state} = Decorators;
|
|
36
35
|
|
|
@@ -171,6 +171,11 @@ export class SecurityPanelSidebar extends UI.Widget.VBox {
|
|
|
171
171
|
this.showLastSelectedElement();
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
// Used in web tests
|
|
175
|
+
elementsByOrigin(): Map<string, OriginTreeElement> {
|
|
176
|
+
return this.#elementsByOrigin;
|
|
177
|
+
}
|
|
178
|
+
|
|
174
179
|
showLastSelectedElement(): void {
|
|
175
180
|
if (this.#cookieControlsTreeElement &&
|
|
176
181
|
this.#securitySidebarLastItemSetting.get() === this.#cookieControlsTreeElement.elemId) {
|
|
@@ -11,13 +11,14 @@ import * as Common from '../../core/common/common.js';
|
|
|
11
11
|
import * as Host from '../../core/host/host.js';
|
|
12
12
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
13
13
|
import * as Root from '../../core/root/root.js';
|
|
14
|
+
import * as GreenDev from '../../models/greendev/greendev.js';
|
|
14
15
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
15
16
|
import * as UIHelpers from '../../ui/helpers/helpers.js';
|
|
16
17
|
import {type Card, createIcon} from '../../ui/kit/kit.js';
|
|
17
18
|
import * as SettingsUI from '../../ui/legacy/components/settings_ui/settings_ui.js';
|
|
18
19
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
19
20
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
20
|
-
import {html, render} from '../../ui/lit/lit.js';
|
|
21
|
+
import {html, nothing, render, type TemplateResult} from '../../ui/lit/lit.js';
|
|
21
22
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
22
23
|
import {PanelUtils} from '../utils/utils.js';
|
|
23
24
|
|
|
@@ -51,6 +52,11 @@ const UIStrings = {
|
|
|
51
52
|
* @description Message shown in the experiments panel to warn users about any possible unstable features.
|
|
52
53
|
*/
|
|
53
54
|
theseExperimentsCouldBeUnstable: 'Warning: These experiments could be unstable or unreliable.',
|
|
55
|
+
/**
|
|
56
|
+
* @description Message shown in the GreenDev prototypes panel to warn users about any possible unstable features.
|
|
57
|
+
*/
|
|
58
|
+
greenDevUnstable:
|
|
59
|
+
'Warning: All these features are prototype and very unstable. They exist for user testing and are not designed to be relied on.',
|
|
54
60
|
/**
|
|
55
61
|
* @description Message text content in Settings Screen of the Settings
|
|
56
62
|
*/
|
|
@@ -603,3 +609,129 @@ export interface ShowSettingsScreenOptions {
|
|
|
603
609
|
name?: string;
|
|
604
610
|
focusTabHeader?: boolean;
|
|
605
611
|
}
|
|
612
|
+
|
|
613
|
+
export class GreenDevSettingsTab extends UI.Widget.VBox implements SettingsTab {
|
|
614
|
+
#view: View;
|
|
615
|
+
|
|
616
|
+
constructor(view = GREENDEV_VIEW) {
|
|
617
|
+
super({jslog: `${VisualLogging.pane('greendev-prototypes')}`});
|
|
618
|
+
this.element.id = 'greendev-prototypes-tab-content';
|
|
619
|
+
|
|
620
|
+
this.#view = view;
|
|
621
|
+
|
|
622
|
+
this.requestUpdate();
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
highlightObject(_object: Object): void {
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
override performUpdate(): Promise<void>|void {
|
|
629
|
+
const settings = GreenDev.Prototypes.instance().settings();
|
|
630
|
+
this.#view({settings}, {}, this.element);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
interface GreenDevViewInput {
|
|
635
|
+
settings: GreenDev.GreenDevSettings;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
type View = (input: GreenDevViewInput, output: object, target: HTMLElement) => void;
|
|
639
|
+
const GREENDEV_VIEW: View = (input, _output, target) => {
|
|
640
|
+
// clang-format off
|
|
641
|
+
render(html`
|
|
642
|
+
<div class="settings-card-container">
|
|
643
|
+
<devtools-card .heading=${'GreenDev prototypes'}>
|
|
644
|
+
<div class="experiments-warning-subsection">
|
|
645
|
+
<devtools-icon .name=${'warning'}></devtools-icon>
|
|
646
|
+
<span>${i18nString(UIStrings.greenDevUnstable)}</span>
|
|
647
|
+
</div>
|
|
648
|
+
<div class="settings-experiments-block">
|
|
649
|
+
${renderPrototypeCheckboxes(input.settings, ['aiAnnotations', 'inDevToolsFloaty'])}
|
|
650
|
+
</div>
|
|
651
|
+
</devtools-card>
|
|
652
|
+
|
|
653
|
+
<devtools-card .heading=${'GreenDev widgets'}>
|
|
654
|
+
<div class="experiments-warning-subsection">
|
|
655
|
+
<devtools-icon .name=${'warning'}></devtools-icon>
|
|
656
|
+
<span>${i18nString(UIStrings.greenDevUnstable)}</span>
|
|
657
|
+
</div>
|
|
658
|
+
<div class="settings-experiments-block greendev-widgets">
|
|
659
|
+
${renderWidgetOptions(input.settings)}
|
|
660
|
+
</div>
|
|
661
|
+
</devtools-card>
|
|
662
|
+
</div>
|
|
663
|
+
`, target);
|
|
664
|
+
// clang-format on
|
|
665
|
+
};
|
|
666
|
+
|
|
667
|
+
const GREENDEV_PROTOTYPE_NAMES: Record<keyof GreenDev.GreenDevSettings, string> = {
|
|
668
|
+
inDevToolsFloaty: 'In DevTools context picker',
|
|
669
|
+
aiAnnotations: 'AI auto-annotations',
|
|
670
|
+
inlineWidgets: 'Inline widgets in AI Assistance',
|
|
671
|
+
artifactViewer: 'Widgets in the Artifact viewer'
|
|
672
|
+
};
|
|
673
|
+
|
|
674
|
+
function renderWidgetOptions(settings: GreenDev.GreenDevSettings): TemplateResult {
|
|
675
|
+
function onChange(nowActiveRadio: 'inlineWidgets'|'artifactViewer'|'none') {
|
|
676
|
+
return () => {
|
|
677
|
+
switch (nowActiveRadio) {
|
|
678
|
+
case 'inlineWidgets': {
|
|
679
|
+
settings.artifactViewer.set(false);
|
|
680
|
+
settings.inlineWidgets.set(true);
|
|
681
|
+
break;
|
|
682
|
+
}
|
|
683
|
+
case 'artifactViewer': {
|
|
684
|
+
settings.artifactViewer.set(true);
|
|
685
|
+
settings.inlineWidgets.set(false);
|
|
686
|
+
break;
|
|
687
|
+
}
|
|
688
|
+
case 'none': {
|
|
689
|
+
settings.artifactViewer.set(false);
|
|
690
|
+
settings.inlineWidgets.set(false);
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
UI.InspectorView.InspectorView.instance().displayReloadRequiredWarning(
|
|
695
|
+
i18nString(UIStrings.oneOrMoreSettingsHaveChanged));
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
// clang-format off
|
|
699
|
+
return html`
|
|
700
|
+
<p class="settings-experiment">
|
|
701
|
+
<label><input type="radio" name="widgets-choice" @change=${onChange('inlineWidgets')}>${GREENDEV_PROTOTYPE_NAMES['inlineWidgets']}</label>
|
|
702
|
+
</p>
|
|
703
|
+
<p class="settings-experiment">
|
|
704
|
+
<label><input type="radio" name="widgets-choice" @change=${onChange('artifactViewer')}>${GREENDEV_PROTOTYPE_NAMES['artifactViewer']}</label>
|
|
705
|
+
</p>
|
|
706
|
+
<p class="settings-experiment">
|
|
707
|
+
<label><input type="radio" name="widgets-choice" @change=${onChange('none')}>None</label>
|
|
708
|
+
</p>
|
|
709
|
+
`;
|
|
710
|
+
// clang-format on
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
function renderPrototypeCheckboxes(
|
|
714
|
+
settings: GreenDev.GreenDevSettings,
|
|
715
|
+
keys: Array<keyof GreenDev.GreenDevSettings>,
|
|
716
|
+
): TemplateResult {
|
|
717
|
+
const {bindToSetting} = UI.UIUtils;
|
|
718
|
+
|
|
719
|
+
function showChangeWarning(): void {
|
|
720
|
+
UI.InspectorView.InspectorView.instance().displayReloadRequiredWarning(
|
|
721
|
+
i18nString(UIStrings.oneOrMoreSettingsHaveChanged));
|
|
722
|
+
}
|
|
723
|
+
// clang-format off
|
|
724
|
+
const checkboxes = Object.keys(settings).map(name => {
|
|
725
|
+
const settingName = name as keyof GreenDev.GreenDevSettings;
|
|
726
|
+
if(!keys.includes(settingName)) {
|
|
727
|
+
return nothing;
|
|
728
|
+
}
|
|
729
|
+
const setting = settings[settingName];
|
|
730
|
+
const title = GREENDEV_PROTOTYPE_NAMES[settingName];
|
|
731
|
+
return html`<p class="settings-experiment">
|
|
732
|
+
<devtools-checkbox @change=${showChangeWarning} title=${title} ${bindToSetting(setting)}>${title}</devtools-checkbox>
|
|
733
|
+
</p>`;
|
|
734
|
+
});
|
|
735
|
+
return html`${checkboxes}`;
|
|
736
|
+
// clang-format on
|
|
737
|
+
}
|
|
@@ -24,6 +24,14 @@ const UIStrings = {
|
|
|
24
24
|
* @description Text in Settings Screen of the Settings
|
|
25
25
|
*/
|
|
26
26
|
experiments: 'Experiments',
|
|
27
|
+
/**
|
|
28
|
+
* @description Text in Settings Screen of the Settings
|
|
29
|
+
*/
|
|
30
|
+
greenDevProtoTypes: 'GreenDev',
|
|
31
|
+
/**
|
|
32
|
+
* @description Command for showing the GreenDev tab in the Settings Screen
|
|
33
|
+
*/
|
|
34
|
+
showGreenDev: 'Show GreenDev',
|
|
27
35
|
/**
|
|
28
36
|
* @description Title of Ignore list settings
|
|
29
37
|
*/
|
|
@@ -154,6 +162,22 @@ UI.ViewManager.registerViewExtension({
|
|
|
154
162
|
iconName: 'clear-list',
|
|
155
163
|
});
|
|
156
164
|
|
|
165
|
+
UI.ViewManager.registerViewExtension({
|
|
166
|
+
location: UI.ViewManager.ViewLocationValues.SETTINGS_VIEW,
|
|
167
|
+
id: 'greendev-prototypes',
|
|
168
|
+
title: i18nLazyString(UIStrings.greenDevProtoTypes),
|
|
169
|
+
commandPrompt: i18nLazyString(UIStrings.showGreenDev),
|
|
170
|
+
order: 101,
|
|
171
|
+
async loadView() {
|
|
172
|
+
const Settings = await loadSettingsModule();
|
|
173
|
+
return new Settings.SettingsScreen.GreenDevSettingsTab();
|
|
174
|
+
},
|
|
175
|
+
iconName: 'experiment',
|
|
176
|
+
condition: config => {
|
|
177
|
+
return Boolean(config?.devToolsGreenDevUi?.enabled);
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
|
|
157
181
|
UI.ViewManager.registerViewExtension({
|
|
158
182
|
location: UI.ViewManager.ViewLocationValues.SETTINGS_VIEW,
|
|
159
183
|
id: 'keybinds',
|