chrome-devtools-frontend 1.0.1597448 → 1.0.1598808

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.
Files changed (143) hide show
  1. package/docs/ui_engineering.md +6 -6
  2. package/front_end/core/host/AidaClient.ts +6 -0
  3. package/front_end/core/sdk/CPUThrottlingManager.ts +5 -1
  4. package/front_end/core/sdk/CSSMatchedStyles.ts +2 -0
  5. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +28 -0
  6. package/front_end/models/ai_assistance/AiConversation.ts +40 -22
  7. package/front_end/models/ai_assistance/ChangeManager.ts +16 -0
  8. package/front_end/models/ai_assistance/ExtensionScope.ts +11 -3
  9. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +127 -0
  10. package/front_end/models/ai_assistance/agents/AiAgent.ts +35 -6
  11. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +1 -1
  12. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +11 -8
  13. package/front_end/models/ai_assistance/agents/ConversationSummaryAgent.ts +109 -0
  14. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +30 -1
  15. package/front_end/models/ai_assistance/agents/StylingAgent.ts +34 -4
  16. package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
  17. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +27 -0
  18. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +21 -0
  19. package/front_end/models/trace/Processor.ts +1 -0
  20. package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +33 -0
  21. package/front_end/models/trace/insights/CharacterSet.ts +172 -0
  22. package/front_end/models/trace/insights/Models.ts +1 -0
  23. package/front_end/models/trace/insights/types.ts +1 -0
  24. package/front_end/models/trace/types/TraceEvents.ts +17 -0
  25. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +22 -12
  26. package/front_end/panels/ai_assistance/PatchWidget.ts +1 -1
  27. package/front_end/panels/ai_assistance/components/ChatMessage.ts +131 -63
  28. package/front_end/panels/ai_assistance/components/ChatView.ts +1 -1
  29. package/front_end/panels/ai_assistance/components/MarkdownRendererWithCodeBlock.ts +18 -9
  30. package/front_end/panels/ai_assistance/components/chatMessage.css +11 -0
  31. package/front_end/panels/application/AppManifestView.ts +4 -5
  32. package/front_end/panels/application/CookieItemsView.ts +9 -15
  33. package/front_end/panels/application/DeviceBoundSessionsView.ts +20 -26
  34. package/front_end/panels/application/FrameDetailsView.ts +10 -16
  35. package/front_end/panels/application/OriginTrialTreeView.ts +2 -3
  36. package/front_end/panels/application/ReportingApiView.ts +14 -18
  37. package/front_end/panels/application/components/BackForwardCacheView.ts +3 -3
  38. package/front_end/panels/application/preloading/PreloadingView.ts +18 -3
  39. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -3
  40. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +3 -2
  41. package/front_end/panels/changes/ChangesView.ts +13 -15
  42. package/front_end/panels/console/ConsolePinPane.ts +3 -3
  43. package/front_end/panels/coverage/CoverageListView.ts +1 -1
  44. package/front_end/panels/coverage/CoverageView.ts +4 -4
  45. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +3 -3
  46. package/front_end/panels/css_overview/CSSOverviewPanel.ts +11 -15
  47. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +3 -5
  48. package/front_end/panels/elements/ElementsTreeOutline.ts +34 -8
  49. package/front_end/panels/elements/EventListenersWidget.ts +3 -2
  50. package/front_end/panels/elements/StandaloneStylesContainer.ts +21 -6
  51. package/front_end/panels/elements/StylePropertiesSection.ts +129 -1
  52. package/front_end/panels/elements/StylePropertyHighlighter.ts +3 -0
  53. package/front_end/panels/elements/StylePropertyTreeElement.ts +49 -4
  54. package/front_end/panels/elements/stylesSidebarPane.css +34 -0
  55. package/front_end/panels/issues/AffectedSelectivePermissionsInterventionView.ts +3 -5
  56. package/front_end/panels/layer_viewer/LayerDetailsView.ts +2 -1
  57. package/front_end/panels/layer_viewer/Layers3DView.ts +5 -4
  58. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +5 -6
  59. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +6 -11
  60. package/front_end/panels/network/RequestConditionsDrawer.ts +4 -4
  61. package/front_end/panels/network/RequestCookiesView.ts +5 -6
  62. package/front_end/panels/network/RequestHeadersView.ts +4 -4
  63. package/front_end/panels/network/RequestInitiatorView.ts +7 -5
  64. package/front_end/panels/network/RequestResponseView.ts +10 -15
  65. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +2 -2
  66. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +5 -6
  67. package/front_end/panels/recorder/components/RecordingView.ts +31 -36
  68. package/front_end/panels/recorder/components/StepEditor.ts +6 -7
  69. package/front_end/panels/recorder/components/StepView.ts +2 -1
  70. package/front_end/panels/search/SearchView.ts +3 -4
  71. package/front_end/panels/settings/WorkspaceSettingsTab.ts +2 -5
  72. package/front_end/panels/timeline/TimelineDetailsView.ts +8 -6
  73. package/front_end/panels/timeline/components/LiveMetricsView.ts +5 -8
  74. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +2 -7
  75. package/front_end/panels/timeline/components/insights/Cache.ts +8 -10
  76. package/front_end/panels/timeline/components/insights/CharacterSet.ts +34 -0
  77. package/front_end/panels/timeline/components/insights/DOMSize.ts +16 -20
  78. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +2 -6
  79. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +3 -4
  80. package/front_end/panels/timeline/components/insights/EventRef.ts +2 -2
  81. package/front_end/panels/timeline/components/insights/FontDisplay.ts +3 -4
  82. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +5 -7
  83. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +3 -4
  84. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +3 -4
  85. package/front_end/panels/timeline/components/insights/ImageRef.ts +2 -4
  86. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +2 -0
  87. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +5 -7
  88. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +2 -4
  89. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +3 -4
  90. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +3 -4
  91. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +7 -11
  92. package/front_end/panels/timeline/components/insights/NodeLink.ts +2 -4
  93. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +3 -4
  94. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +7 -10
  95. package/front_end/panels/timeline/components/insights/ThirdParties.ts +5 -7
  96. package/front_end/panels/timeline/components/insights/insights.ts +2 -0
  97. package/front_end/panels/web_audio/WebAudioView.ts +3 -4
  98. package/front_end/panels/webauthn/WebauthnPane.ts +2 -2
  99. package/front_end/third_party/chromium/README.chromium +1 -1
  100. package/front_end/third_party/puppeteer/README.chromium +2 -2
  101. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Realm.js +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Realm.js.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts +4 -0
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js +13 -0
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/mitt/mitt.js +2 -2
  115. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/parsel-js/parsel-js.js +1 -1
  116. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/rxjs/rxjs.js +446 -446
  117. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +166 -167
  118. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Realm.js +2 -2
  119. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Realm.js.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts +4 -0
  121. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js +12 -0
  123. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  125. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  126. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt/mitt.js +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/esm/third_party/parsel-js/parsel-js.js +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/esm/third_party/rxjs/rxjs.js +97 -97
  132. package/front_end/third_party/puppeteer/package/package.json +1 -1
  133. package/front_end/third_party/puppeteer/package/src/bidi/Realm.ts +2 -2
  134. package/front_end/third_party/puppeteer/package/src/bidi/util.ts +17 -0
  135. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  136. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  137. package/front_end/ui/components/settings/SettingCheckbox.ts +2 -0
  138. package/front_end/ui/legacy/Widget.ts +42 -6
  139. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +3 -3
  140. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +8 -8
  141. package/front_end/ui/visual_logging/Debugging.ts +0 -32
  142. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
  143. package/package.json +1 -1
@@ -41,7 +41,7 @@ const UIStrings = {
41
41
  const str_ =
42
42
  i18n.i18n.registerUIStrings('panels/linear_memory_inspector/components/LinearMemoryInspector.ts', UIStrings);
43
43
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
44
- const {widgetConfig} = UI.Widget;
44
+ const {widget} = UI.Widget;
45
45
 
46
46
  /**
47
47
  * If the LinearMemoryInspector only receives a portion
@@ -162,13 +162,12 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: Record<string, unknown>,
162
162
  @addressinputchanged=${input.onAddressChange}
163
163
  @pagenavigation=${input.onNavigatePage}
164
164
  @historynavigation=${input.onNavigateHistory}></devtools-linear-memory-inspector-navigator>
165
- <devtools-widget .widgetConfig=${widgetConfig(LinearMemoryHighlightChipList, {
165
+ ${widget(LinearMemoryHighlightChipList, {
166
166
  highlightInfos: highlightedMemoryAreas,
167
167
  focusedMemoryHighlight,
168
168
  jumpToAddress: (address: number) => input.onJumpToAddress(address),
169
169
  deleteHighlight: input.onDeleteMemoryHighlight,
170
- })}>
171
- </devtools-widget>
170
+ })}
172
171
  <devtools-linear-memory-inspector-viewer
173
172
  .data=${
174
173
  {
@@ -186,7 +185,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: Record<string, unknown>,
186
185
  ${
187
186
  input.hideValueInspector ? nothing : html`
188
187
  <div class="value-interpreter">
189
- <devtools-widget .widgetConfig=${widgetConfig(LinearMemoryValueInterpreter, {
188
+ ${widget(LinearMemoryValueInterpreter, {
190
189
  buffer: input.memory
191
190
  .slice(
192
191
  input.address - input.memoryOffset,
@@ -201,7 +200,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: Record<string, unknown>,
201
200
  onJumpToAddressClicked: input.onJumpToAddress,
202
201
  onValueTypeToggled: input.onValueTypeToggled,
203
202
  onEndiannessChanged: input.onEndiannessChanged,
204
- })}></devtools-widget>
203
+ })}
205
204
  </div>`}
206
205
  `,
207
206
  target);
@@ -32,7 +32,7 @@ const str_ =
32
32
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
33
33
 
34
34
  const {render, html} = Lit;
35
- const {widgetConfig} = UI.Widget;
35
+ const {widget} = UI.Widget;
36
36
 
37
37
  export interface ViewInput {
38
38
  endianness: Endianness;
@@ -89,14 +89,10 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLE
89
89
  </div>
90
90
  <span class="divider"></span>
91
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, {
92
+ ${input.showSettings
93
+ ? widget(ValueInterpreterSettings, {
94
+ valueTypes: input.valueTypes, onToggle: input.onValueTypeToggled})
95
+ : widget(ValueInterpreterDisplay, {
100
96
  buffer: input.buffer,
101
97
  valueTypes: input.valueTypes,
102
98
  endianness: input.endianness,
@@ -104,8 +100,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLE
104
100
  memoryLength: input.memoryLength,
105
101
  onValueTypeModeChange: input.onValueTypeModeChange,
106
102
  onJumpToAddressClicked: input.onJumpToAddressClicked,
107
- })}>
108
- </devtools-widget>`}
103
+ })}
109
104
  </div>
110
105
  </div>
111
106
  `,
@@ -24,7 +24,7 @@ import * as PanelUtils from '../utils/utils.js';
24
24
  import requestConditionsDrawerStyles from './requestConditionsDrawer.css.js';
25
25
 
26
26
  const {ref, live} = Directives;
27
- const {widgetConfig} = UI.Widget;
27
+ const {widget} = UI.Widget;
28
28
 
29
29
  const UIStrings = {
30
30
  /**
@@ -175,7 +175,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
175
175
  ${i18nString(UIStrings.addRule)}
176
176
  </devtools-button>
177
177
  </div>
178
- <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(UI.Widget.VBox)}>
178
+ <devtools-widget ${widget(UI.Widget.VBox)}>
179
179
  ${input.list.element}
180
180
  </devtools-widget>
181
181
  `,
@@ -271,7 +271,7 @@ function renderItem(
271
271
  <devtools-widget
272
272
  class=conditions-selector
273
273
  title=${i18nString(UIStrings.requestConditionsLabel)}
274
- .widgetConfig=${UI.Widget.widgetConfig(
274
+ ${widget(
275
275
  MobileThrottling.NetworkThrottlingSelector.NetworkThrottlingSelectorWidget, {
276
276
  variant:
277
277
  MobileThrottling.NetworkThrottlingSelector.NetworkThrottlingSelect.Variant.INDIVIDUAL_REQUEST_CONDITIONS,
@@ -282,7 +282,7 @@ function renderItem(
282
282
  })}></devtools-widget>
283
283
  <devtools-widget
284
284
  ?disabled=${!editable || !originalOrUpgradedURLPattern}
285
- .widgetConfig=${widgetConfig(AffectedCountWidget, {condition, lookUpRequestCount})}></devtools-widget>`;
285
+ ${widget(AffectedCountWidget, {condition, lookUpRequestCount})}></devtools-widget>`;
286
286
  // clang-format on
287
287
  }
288
288
 
@@ -14,6 +14,7 @@ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
14
14
 
15
15
  import requestCookiesViewStyles from './requestCookiesView.css.js';
16
16
  const {render, html} = Lit;
17
+ const {widget} = UI.Widget;
17
18
 
18
19
  const UIStrings = {
19
20
  /**
@@ -93,10 +94,8 @@ export const DEFAULT_VIEW: ViewFunction = (input, _output, target) => {
93
94
  <style>${requestCookiesViewStyles}</style>
94
95
  <style>${UI.inspectorCommonStyles}</style>
95
96
  <div class="request-cookies-view">
96
- ${input.gotCookies ? Lit.nothing : html`
97
- <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(UI.EmptyWidget.EmptyWidget, {
98
- header: i18nString(UIStrings.thisRequestHasNoCookies)})}></devtools-widget>
99
- `}
97
+ ${input.gotCookies ? Lit.nothing : widget(UI.EmptyWidget.EmptyWidget, {
98
+ header: i18nString(UIStrings.thisRequestHasNoCookies)})}
100
99
 
101
100
  <div class=${input.requestCookies.cookies.length || input.hasBlockedCookies ? '' : 'hidden'}>
102
101
  <span class="request-cookies-title" title=${i18nString(UIStrings.cookiesThatWereSentToTheServerIn)}>
@@ -114,7 +113,7 @@ export const DEFAULT_VIEW: ViewFunction = (input, _output, target) => {
114
113
  </div>
115
114
 
116
115
  ${input.requestCookies.cookies.length > 0 ? html`
117
- <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(CookieTable.CookiesTable.CookiesTable, {
116
+ <devtools-widget ${widget(CookieTable.CookiesTable.CookiesTable, {
118
117
  cookiesData: input.requestCookies,
119
118
  inline: true
120
119
  })} class="cookie-table cookies-panel-item"></devtools-widget>
@@ -132,7 +131,7 @@ export const DEFAULT_VIEW: ViewFunction = (input, _output, target) => {
132
131
  </div>
133
132
 
134
133
  ${input.responseCookies.cookies.length ? html`
135
- <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(CookieTable.CookiesTable.CookiesTable, {
134
+ <devtools-widget ${widget(CookieTable.CookiesTable.CookiesTable, {
136
135
  cookiesData: input.responseCookies,
137
136
  inline: true })} class="cookie-table cookies-panel-item"></devtools-widget>
138
137
  ` : Lit.nothing}
@@ -21,6 +21,7 @@ import * as NetworkComponents from './components/components.js';
21
21
  import {ShowMoreDetailsWidget} from './ShowMoreDetailsWidget.js';
22
22
 
23
23
  const {render, html} = Lit;
24
+ const {widget} = UI.Widget;
24
25
 
25
26
  const UIStrings = {
26
27
  /**
@@ -210,8 +211,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
210
211
  contents: (input.showRequestHeadersText && requestHeadersText) ?
211
212
  renderRawHeaders(requestHeadersText) :
212
213
  html`
213
- <devtools-widget .widgetConfig=${
214
- UI.Widget.widgetConfig(NetworkComponents.RequestHeaderSection.RequestHeaderSection, {
214
+ <devtools-widget ${widget(NetworkComponents.RequestHeaderSection.RequestHeaderSection, {
215
215
  request: input.request,
216
216
  toReveal: input.toReveal,
217
217
  })} jslog=${VisualLogging.section('request-headers')}></devtools-widget>`
@@ -392,8 +392,8 @@ function renderHeaderOverridesLink(input: ViewInput): Lit.LitTemplate {
392
392
  }
393
393
 
394
394
  function renderRawHeaders(text: string): Lit.TemplateResult {
395
- return html`<div class="row raw-headers-row"><devtools-widget class=raw-headers .widgetConfig=${
396
- UI.Widget.widgetConfig(ShowMoreDetailsWidget, {text})}></devtools-widget></div>`;
395
+ return html`<div class="row raw-headers-row"><devtools-widget class=raw-headers
396
+ ${widget(ShowMoreDetailsWidget, {text})}></devtools-widget></div>`;
397
397
  }
398
398
 
399
399
  function renderGeneralRow(
@@ -16,7 +16,7 @@ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
16
16
  import requestInitiatorViewStyles from './requestInitiatorView.css.js';
17
17
  import requestInitiatorViewTreeStyles from './requestInitiatorViewTree.css.js';
18
18
 
19
- const {widgetConfig} = UI.Widget;
19
+ const {widget} = UI.Widget;
20
20
 
21
21
  const UIStrings = {
22
22
  /**
@@ -59,19 +59,21 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLE
59
59
  if (!input.stackTrace) {
60
60
  return html`${nothing}`;
61
61
  }
62
+ // clang-format off
62
63
  return html`
63
64
  <li role="treeitem" class="request-initiator-view-section-title" aria-expanded="true" open>
64
65
  ${i18nString(UIStrings.requestCallStack)}
65
66
  <ul role="group">
66
67
  <li role="treeitem">
67
- <devtools-widget .widgetConfig=${widgetConfig(Components.JSPresentationUtils.StackTracePreviewContent, {
68
- options: {tabStops: true},
69
- stackTrace: input.stackTrace,
70
- })}></devtools-widget>
68
+ ${widget(Components.JSPresentationUtils.StackTracePreviewContent, {
69
+ options: {tabStops: true},
70
+ stackTrace: input.stackTrace,
71
+ })}
71
72
  </li>
72
73
  </ul>
73
74
  </li>
74
75
  `;
76
+ // clang-format on
75
77
  };
76
78
 
77
79
  const renderInitiatorNodes =
@@ -43,43 +43,38 @@ export interface ViewOutput {
43
43
  revealPosition: (position: SourceFrame.SourceFrame.RevealPosition) => Promise<void>;
44
44
  }
45
45
 
46
- const widgetConfig = UI.Widget.widgetConfig;
47
- const widgetRef = UI.Widget.widgetRef;
46
+ const {widgetRef, widget} = UI.Widget;
48
47
  type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
49
48
 
50
49
  export const DEFAULT_VIEW: View = (input: ViewInput, output: ViewOutput, target: HTMLElement): void => {
51
- let widget;
50
+ let widgetTemplate;
52
51
  if (TextUtils.StreamingContentData.isError(input.contentData)) {
53
52
  // clang-format off
54
- widget = html`<devtools-widget
55
- .widgetConfig=${widgetConfig(element => new UI.EmptyWidget.EmptyWidget(
53
+ widgetTemplate = html`${widget(element => new UI.EmptyWidget.EmptyWidget(
56
54
  i18nString(UIStrings.failedToLoadResponseData), (input.contentData as {error: string}).error,
57
- element))}></devtools-widget>`;
55
+ element))}`;
58
56
  // clang-format on
59
57
  } else if (input.request.statusCode === 204 || input.request.failed) {
60
58
  // clang-format off
61
- widget = html`<devtools-widget
62
- .widgetConfig=${widgetConfig(element => new UI.EmptyWidget.EmptyWidget(
59
+ widgetTemplate = html`${widget(element => new UI.EmptyWidget.EmptyWidget(
63
60
  i18nString(UIStrings.noPreview), i18nString(UIStrings.thisRequestHasNoResponseData),
64
- element))}></devtools-widget>`;
61
+ element))}`;
65
62
  // clang-format on
66
63
  } else if (input.renderAsText) {
67
64
  // clang-format off
68
- widget = html`<devtools-widget
69
- .widgetConfig=${widgetConfig(element => new SourceFrame.ResourceSourceFrame.SearchableContainer(
65
+ widgetTemplate = html`<devtools-widget ${widget(element => new SourceFrame.ResourceSourceFrame.SearchableContainer(
70
66
  input.request, input.mimeType, element))}
71
67
  ${widgetRef(SourceFrame.ResourceSourceFrame.SearchableContainer, widget => {output.revealPosition = widget.revealPosition.bind(widget);})}></devtools-widget>`;
72
68
  // clang-format on
73
69
  } else {
74
70
  // clang-format off
75
- widget = html`<devtools-widget
76
- .widgetConfig=${widgetConfig(element => new BinaryResourceView(
71
+ widgetTemplate = html`${widget(element => new BinaryResourceView(
77
72
  input.contentData as TextUtils.StreamingContentData.StreamingContentData, input.request.url(),
78
- input.request.resourceType(), element))}></devtools-widget>`;
73
+ input.request.resourceType(), element))}`;
79
74
  // clang-format on
80
75
  }
81
76
 
82
- render(widget, target);
77
+ render(widgetTemplate, target);
83
78
  };
84
79
 
85
80
  export class RequestResponseView extends UI.Widget.VBox {
@@ -58,7 +58,7 @@ const UIStrings = {
58
58
  } as const;
59
59
  const str_ = i18n.i18n.registerUIStrings('panels/performance_monitor/PerformanceMonitor.ts', UIStrings);
60
60
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
61
- const {widgetConfig} = UI.Widget;
61
+ const {widget} = UI.Widget;
62
62
  const {classMap, ref} = Directives;
63
63
 
64
64
  interface PerformanceMonitorInput {
@@ -81,7 +81,7 @@ type PerformanceMonitorView = (input: PerformanceMonitorInput, output: Performan
81
81
  const DEFAULT_VIEW: PerformanceMonitorView = (input, output, target) => {
82
82
  // clang-format off
83
83
  render(html`
84
- <devtools-widget .widgetConfig=${widgetConfig(ControlPane, {
84
+ <devtools-widget ${widget(ControlPane, {
85
85
  onMetricChanged: input.onMetricChanged,
86
86
  chartsInfo: input.chartsInfo,
87
87
  metrics: input.metrics
@@ -22,7 +22,7 @@ import {Events as JSONEditorEvents, JSONEditor, type Parameter} from './JSONEdit
22
22
  import protocolMonitorStyles from './protocolMonitor.css.js';
23
23
 
24
24
  const {styleMap} = Directives;
25
- const {widgetConfig, widgetRef} = UI.Widget;
25
+ const {widget, widgetRef} = UI.Widget;
26
26
  const UIStrings = {
27
27
  /**
28
28
  * @description Text for one or a group of functions
@@ -303,7 +303,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
303
303
  </tr>`)}
304
304
  </table>
305
305
  </devtools-data-grid>
306
- <devtools-widget .widgetConfig=${widgetConfig(InfoWidget, {
306
+ <devtools-widget ${widget(InfoWidget, {
307
307
  request: input.selectedMessage?.params,
308
308
  response: input.selectedMessage?.result || input.selectedMessage?.error,
309
309
  type: !input.selectedMessage ? undefined :
@@ -349,7 +349,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
349
349
  </devtools-toolbar>
350
350
  </div>
351
351
  <devtools-widget slot="sidebar"
352
- .widgetConfig=${widgetConfig(JSONEditor, { metadataByCommand, typesByName, enumsByName})}
352
+ ${widget(JSONEditor, { metadataByCommand, typesByName, enumsByName})}
353
353
  ${widgetRef(JSONEditor, e => {output.editorWidget = e;})}>
354
354
  </devtools-widget>
355
355
  </devtools-split-view>`,
@@ -675,7 +675,7 @@ type InfoWidgetView = (input: InfoWidgetViewInput, output: undefined, target: HT
675
675
 
676
676
  const INFO_WIDGET_VIEW: InfoWidgetView = (input, _output, target) => {
677
677
  // clang-format off
678
- render(html`<devtools-widget .widgetConfig=${widgetConfig(UI.TabbedPane.TabbedPane, {
678
+ render(widget(UI.TabbedPane.TabbedPane, {
679
679
  tabs: [
680
680
  {
681
681
  id: 'request',
@@ -696,8 +696,7 @@ const INFO_WIDGET_VIEW: InfoWidgetView = (input, _output, target) => {
696
696
  SourceFrame.JSONView.JSONView.createViewSync(input.response || null),
697
697
  selected: input.selectedTab === 'response',
698
698
  }
699
- ]})}>
700
- </devtools-widget>`, target);
699
+ ]}), target);
701
700
  // clang-format on
702
701
  };
703
702
 
@@ -37,6 +37,7 @@ import {
37
37
  } from './StepView.js';
38
38
 
39
39
  const {html} = Lit;
40
+ const {widget} = UI.Widget;
40
41
 
41
42
  const UIStrings = {
42
43
  /**
@@ -525,15 +526,12 @@ function renderReplayOrAbortButton(input: ViewInput): Lit.LitTemplate {
525
526
  }
526
527
 
527
528
  // clang-format off
528
- return html`<devtools-widget
529
- .widgetConfig=${UI.Widget.widgetConfig(ReplaySection, {
530
- settings: input.recorderSettings,
531
- replayExtensions: input.replayExtensions,
532
- onStartReplay: input.onTogglePlaying,
533
- disabled: input.replayState.isPlaying,
534
- })}
535
- >
536
- </devtools-widget>`;
529
+ return html`${widget(ReplaySection, {
530
+ settings: input.recorderSettings,
531
+ replayExtensions: input.replayExtensions,
532
+ onStartReplay: input.onTogglePlaying,
533
+ disabled: input.replayState.isPlaying,
534
+ })}`;
537
535
  // clang-format on
538
536
  }
539
537
 
@@ -571,32 +569,29 @@ function renderSections(input: ViewInput): Lit.LitTemplate {
571
569
  </div>
572
570
  <div class="content">
573
571
  <div class="steps">
574
- <devtools-widget
575
- .widgetConfig=${UI.Widget.widgetConfig(StepView, {
576
- section,
577
- state: input.getSectionState(section),
578
- isStartOfGroup: true,
579
- isEndOfGroup: section.steps.length === 0,
580
- isFirstSection: i === 0,
581
- isLastSection:
582
- i === input.sections.length - 1 &&
583
- section.steps.length === 0,
584
- isSelected:
585
- input.selectedStep === (section.causingStep || null),
586
- sectionIndex: i,
587
- isRecording: input.isRecording,
588
- isPlaying: input.replayState.isPlaying,
589
- error:
590
- input.getSectionState(section) === State.ERROR
591
- ? (input.currentError ?? undefined)
592
- : undefined,
593
- hasBreakpoint: false,
594
- removable: input.recording.steps.length > 1 && Boolean(section.causingStep),
595
- onStepClick: input.onStepClick,
596
- onStepHover: input.onStepHover,
597
- })}
598
- >
599
- </devtools-widget>
572
+ ${widget(StepView, {
573
+ section,
574
+ state: input.getSectionState(section),
575
+ isStartOfGroup: true,
576
+ isEndOfGroup: section.steps.length === 0,
577
+ isFirstSection: i === 0,
578
+ isLastSection:
579
+ i === input.sections.length - 1 &&
580
+ section.steps.length === 0,
581
+ isSelected:
582
+ input.selectedStep === (section.causingStep || null),
583
+ sectionIndex: i,
584
+ isRecording: input.isRecording,
585
+ isPlaying: input.replayState.isPlaying,
586
+ error:
587
+ input.getSectionState(section) === State.ERROR
588
+ ? (input.currentError ?? undefined)
589
+ : undefined,
590
+ hasBreakpoint: false,
591
+ removable: input.recording.steps.length > 1 && Boolean(section.causingStep),
592
+ onStepClick: input.onStepClick,
593
+ onStepHover: input.onStepHover,
594
+ })}
600
595
  ${section.steps.map(step => {
601
596
  const stepIndex = input.recording.steps.indexOf(step);
602
597
  return html`
@@ -653,7 +648,7 @@ function renderSections(input: ViewInput): Lit.LitTemplate {
653
648
  )}
654
649
  </div>
655
650
  `;
656
- // clang-format on
651
+ // clang-format on
657
652
  }
658
653
 
659
654
  function renderHeader(input: ViewInput): Lit.LitTemplate {
@@ -32,6 +32,7 @@ import {
32
32
  const {html, Decorators, Directives, LitElement} = Lit;
33
33
  const {customElement, property, state} = Decorators;
34
34
  const {live} = Directives;
35
+ const {widget} = UI.Widget;
35
36
 
36
37
  type StepFor<Type> = Extract<Models.Schema.Step, {type: Type}>;
37
38
  type Attribute = Keys<Models.Schema.Step>;
@@ -778,13 +779,11 @@ export class StepEditor extends LitElement {
778
779
  return html`<div class="attribute" data-attribute="selectors" jslog=${VisualLogging.treeItem('selectors')}>
779
780
  <div class="row">
780
781
  <div>selectors<span class="separator">:</span></div>
781
- <devtools-widget
782
- .widgetConfig=${UI.Widget.widgetConfig(SelectorPicker, {
783
- disabled: this.disabled,
784
- onSelectorPicked: this.#handleSelectorPicked,
785
- onAttributeRequested: this.#handleAttributeRequested,
786
- })}
787
- ></devtools-widget>
782
+ ${widget(SelectorPicker, {
783
+ disabled: this.disabled,
784
+ onSelectorPicked: this.#handleSelectorPicked,
785
+ onAttributeRequested: this.#handleAttributeRequested,
786
+ })}
788
787
  ${this.#renderDeleteButton('selectors')}
789
788
  </div>
790
789
  ${this.state.selectors.map((selector, index, selectors) => {
@@ -19,6 +19,7 @@ import stepViewStyles from './stepView.css.js';
19
19
  import {TimelineSection} from './TimelineSection.js';
20
20
 
21
21
  const {html} = Lit;
22
+ const {widget} = UI.Widget;
22
23
 
23
24
  const UIStrings = {
24
25
  /**
@@ -396,7 +397,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
396
397
  html`
397
398
  <style>${stepViewStyles}</style>
398
399
  <div>
399
- <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(TimelineSection, {
400
+ <devtools-widget ${widget(TimelineSection, {
400
401
  isFirstSection: input.isFirstSection,
401
402
  isLastSection: input.isLastSection,
402
403
  isStartOfGroup: input.isStartOfGroup,
@@ -107,7 +107,7 @@ const UIStrings = {
107
107
  const str_ = i18n.i18n.registerUIStrings('panels/search/SearchView.ts', UIStrings);
108
108
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
109
109
  const {ref, live} = Directives;
110
- const {widgetConfig, widgetRef} = UI.Widget;
110
+ const {widget, widgetRef} = UI.Widget;
111
111
 
112
112
  export interface SearchViewInput {
113
113
  query: string;
@@ -246,13 +246,12 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
246
246
  </div>
247
247
  <div class="search-results" @keydown=${onPanelKeyDown}>
248
248
  ${searchResults.length
249
- ? html`<devtools-widget .widgetConfig=${widgetConfig(SearchResultsPane, {searchResults, searchConfig})}
249
+ ? html`<devtools-widget ${widget(SearchResultsPane, {searchResults, searchConfig})}
250
250
  ${widgetRef(SearchResultsPane, w => {
251
251
  output.showAllMatches = () => void w.showAllMatches();
252
252
  output.collapseAllResults = () => void w.collapseAllResults(); })}>
253
253
  </devtools-widget>`
254
- : html`<devtools-widget .widgetConfig=${widgetConfig(UI.EmptyWidget.EmptyWidget, {header, text})}>
255
- </devtools-widget>`}
254
+ : widget(UI.EmptyWidget.EmptyWidget, {header, text})}
256
255
  </div>
257
256
  <div class="search-toolbar-summary" @keydown=${onPanelKeyDown}>
258
257
  <div class="search-message">${searchMessage}</div>
@@ -41,6 +41,7 @@ const UIStrings = {
41
41
  } as const;
42
42
  const str_ = i18n.i18n.registerUIStrings('panels/settings/WorkspaceSettingsTab.ts', UIStrings);
43
43
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
44
+ const {widget} = UI.Widget;
44
45
 
45
46
  export interface WorkspaceSettingsTabInput {
46
47
  excludePatternSetting: Common.Settings.RegExpSetting;
@@ -70,11 +71,7 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
70
71
  <devtools-card heading=${fileSystem.displayName}>
71
72
  <devtools-icon name="folder" slot="heading-prefix"></devtools-icon>
72
73
  <div class="mapping-view-container">
73
- <devtools-widget .widgetConfig=${
74
- UI.Widget.widgetConfig(
75
- EditFileSystemView,
76
- {fileSystem: fileSystem.fileSystem})}>
77
- </devtools-widget>
74
+ ${widget(EditFileSystemView, {fileSystem: fileSystem.fileSystem})}
78
75
  </div>
79
76
  <devtools-button
80
77
  slot="heading-suffix"
@@ -72,6 +72,8 @@ const UIStrings = {
72
72
  } as const;
73
73
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelineDetailsView.ts', UIStrings);
74
74
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
75
+ const {widget} = UI.Widget;
76
+
75
77
  export class TimelineDetailsPane extends
76
78
  Common.ObjectWrapper.eventMixin<TimelineTreeView.EventTypes, typeof UI.Widget.VBox>(UI.Widget.VBox) {
77
79
  private readonly detailsLinkifier: Components.Linkifier.Linkifier;
@@ -612,8 +614,8 @@ const SUMMARY_DEFAULT_VIEW: View = (input, _output, target) => {
612
614
  <style>${detailsViewStyles}</style>
613
615
  ${Directives.until(renderSelectedEventDetails(input))}
614
616
  ${input.selectedRange ? generateRangeSummaryDetails(input) : nothing}
615
- <devtools-widget data-related-insight-chips .widgetConfig=${
616
- UI.Widget.widgetConfig(TimelineComponents.RelatedInsightChips.RelatedInsightChips, {
617
+ <devtools-widget data-related-insight-chips ${widget(
618
+ TimelineComponents.RelatedInsightChips.RelatedInsightChips, {
617
619
  activeEvent: input.selectedEvent,
618
620
  eventToInsightsMap: input.eventToRelatedInsightsMap,
619
621
  })}></devtools-widget>
@@ -685,8 +687,8 @@ async function renderSelectedEventDetails(
685
687
  Trace.Types.Events.isSyntheticLayoutShiftCluster(selectedEvent)) {
686
688
  // clang-format off
687
689
  return html`
688
- <devtools-widget data-layout-shift-details .widgetConfig=${
689
- UI.Widget.widgetConfig(TimelineComponents.LayoutShiftDetails.LayoutShiftDetails, {
690
+ <devtools-widget data-layout-shift-details ${widget(
691
+ TimelineComponents.LayoutShiftDetails.LayoutShiftDetails, {
690
692
  event: selectedEvent,
691
693
  parsedTrace: input.parsedTrace,
692
694
  isFreshRecording: traceRecordingIsFresh,
@@ -698,8 +700,8 @@ async function renderSelectedEventDetails(
698
700
  if (Trace.Types.Events.isSyntheticNetworkRequest(selectedEvent)) {
699
701
  // clang-format off
700
702
  return html`
701
- <devtools-widget data-network-request-details .widgetConfig=${
702
- UI.Widget.widgetConfig(TimelineComponents.NetworkRequestDetails.NetworkRequestDetails, {
703
+ <devtools-widget data-network-request-details ${widget(
704
+ TimelineComponents.NetworkRequestDetails.NetworkRequestDetails, {
703
705
  request: selectedEvent,
704
706
  entityMapper: input.entityMapper,
705
707
  target: input.target,
@@ -41,7 +41,7 @@ import metricValueStyles from './metricValueStyles.css.js';
41
41
  import {CLS_THRESHOLDS, INP_THRESHOLDS, renderMetricValue} from './Utils.js';
42
42
 
43
43
  const {html, nothing} = Lit;
44
- const {widgetConfig} = UI.Widget;
44
+ const {widget} = UI.Widget;
45
45
 
46
46
  type DeviceOption = CrUXManager.DeviceScope|'AUTO';
47
47
 
@@ -485,8 +485,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
485
485
  <div class="related-info" slot="extra-info">
486
486
  <span class="related-info-label">${i18nString(UIStrings.lcpElement)}</span>
487
487
  <span class="related-info-link">
488
- <devtools-widget .widgetConfig=${widgetConfig(PanelsCommon.DOMLinkifier.DOMNodeLink, {node: this.#lcpValue?.nodeRef})}>
489
- </devtools-widget>
488
+ ${widget(PanelsCommon.DOMLinkifier.DOMNodeLink, {node: this.#lcpValue?.nodeRef})}
490
489
  </span>
491
490
  </div>
492
491
  `
@@ -650,7 +649,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
650
649
  </ul>
651
650
  ` : nothing}
652
651
  <div class="environment-option">
653
- <devtools-widget .widgetConfig=${widgetConfig(CPUThrottlingSelector, {recommendedOption: recs.cpuOption})}></devtools-widget>
652
+ ${widget(CPUThrottlingSelector, {recommendedOption: recs.cpuOption})}
654
653
  </div>
655
654
  <div class="environment-option">
656
655
  <devtools-network-throttling-selector .recommendedConditions=${recs.networkConditions}></devtools-network-throttling-selector>
@@ -1003,8 +1002,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
1003
1002
  : nothing}
1004
1003
  </span>
1005
1004
  <span class="interaction-node">
1006
- <devtools-widget .widgetConfig=${widgetConfig(PanelsCommon.DOMLinkifier.DOMNodeLink, {node: interaction.nodeRef})}>
1007
- </devtools-widget>
1005
+ ${widget(PanelsCommon.DOMLinkifier.DOMNodeLink, {node: interaction.nodeRef})}
1008
1006
  </span>
1009
1007
  ${isP98Excluded ? html`<devtools-icon
1010
1008
  class="interaction-info"
@@ -1113,8 +1111,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
1113
1111
  <div class="layout-shift-nodes">
1114
1112
  ${layoutShift.affectedNodeRefs.map(node => html`
1115
1113
  <div class="layout-shift-node">
1116
- <devtools-widget .widgetConfig=${widgetConfig(PanelsCommon.DOMLinkifier.DOMNodeLink, {node})}>
1117
- </devtools-widget>
1114
+ ${widget(PanelsCommon.DOMLinkifier.DOMNodeLink, {node})}
1118
1115
  </div>
1119
1116
  `)}
1120
1117
  </div>
@@ -26,6 +26,7 @@ const UIStrings = {
26
26
 
27
27
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/SidebarSingleInsightSet.ts', UIStrings);
28
28
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
29
+ const {widget} = UI.Widget;
29
30
 
30
31
  export interface SidebarSingleInsightSetData {
31
32
  insightSetKey: Trace.Types.Events.NavigationId|null;
@@ -62,13 +63,7 @@ const DEFAULT_VIEW: View = (input, output, target) => {
62
63
  if (!insightSetKey || !parsedTrace) {
63
64
  return Lit.nothing;
64
65
  }
65
- const metricsWidgetConfig = UI.Widget.widgetConfig(CWVMetrics, {
66
- data: {
67
- insightSetKey,
68
- parsedTrace,
69
- }
70
- });
71
- return html`<devtools-widget .widgetConfig=${metricsWidgetConfig}></devtools-widget>`;
66
+ return html`${widget(CWVMetrics, {data: {insightSetKey, parsedTrace}})}`;
72
67
  }
73
68
 
74
69
  function renderInsights(): Lit.LitTemplate {