chrome-devtools-frontend 1.0.1362775 → 1.0.1367881

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 (860) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.stylelintrc.json +2 -1
  3. package/config/gni/devtools_grd_files.gni +14 -2
  4. package/config/gni/devtools_image_files.gni +2 -1
  5. package/docs/contributing/issues.md +15 -0
  6. package/extensions/cxx_debugging/src/ExtensionOptions.ts +0 -1
  7. package/extensions/cxx_debugging/third_party/llvm/README.chromium +1 -1
  8. package/front_end/.eslintrc.js +0 -5
  9. package/front_end/Images/src/button-magic.svg +3 -0
  10. package/front_end/Images/src/performance-panel-delete-annotation.svg +32 -0
  11. package/front_end/Images/src/performance-panel-diagram.svg +19 -14
  12. package/front_end/Images/src/performance-panel-entry-label.svg +9 -16
  13. package/front_end/Images/src/performance-panel-time-range.svg +2 -8
  14. package/front_end/core/common/AppProvider.ts +1 -1
  15. package/front_end/core/common/Object.ts +2 -7
  16. package/front_end/core/common/SettingRegistration.ts +1 -1
  17. package/front_end/core/common/Settings.ts +1 -1
  18. package/front_end/core/host/AidaClient.ts +7 -1
  19. package/front_end/core/host/InspectorFrontendHost.ts +1 -1
  20. package/front_end/core/host/ResourceLoader.ts +1 -1
  21. package/front_end/core/host/UserMetrics.ts +14 -2
  22. package/front_end/core/i18n/time-utilities.ts +7 -1
  23. package/front_end/core/platform/ArrayUtilities.ts +1 -0
  24. package/front_end/core/platform/DevToolsPath.ts +1 -1
  25. package/front_end/core/platform/Timing.ts +1 -1
  26. package/front_end/core/platform/UIString.ts +1 -1
  27. package/front_end/core/platform/UserVisibleError.ts +1 -1
  28. package/front_end/core/root/Runtime.ts +11 -2
  29. package/front_end/core/sdk/AccessibilityModel.ts +3 -4
  30. package/front_end/core/sdk/CPUProfilerModel.ts +3 -4
  31. package/front_end/core/sdk/CSSContainerQuery.ts +3 -3
  32. package/front_end/core/sdk/CSSLayer.ts +2 -2
  33. package/front_end/core/sdk/CSSMatchedStyles.test.ts +1 -0
  34. package/front_end/core/sdk/CSSMatchedStyles.ts +10 -2
  35. package/front_end/core/sdk/CSSMedia.ts +2 -2
  36. package/front_end/core/sdk/CSSMetadata.ts +21 -0
  37. package/front_end/core/sdk/CSSModel.ts +1 -0
  38. package/front_end/core/sdk/CSSProperty.ts +2 -2
  39. package/front_end/core/sdk/CSSQuery.ts +2 -2
  40. package/front_end/core/sdk/CSSRule.ts +2 -2
  41. package/front_end/core/sdk/CSSScope.ts +2 -2
  42. package/front_end/core/sdk/CSSStyleDeclaration.ts +3 -3
  43. package/front_end/core/sdk/CSSStyleSheetHeader.ts +4 -4
  44. package/front_end/core/sdk/CSSSupports.ts +2 -2
  45. package/front_end/core/sdk/CookieModel.ts +1 -1
  46. package/front_end/core/sdk/DOMDebuggerModel.ts +1 -1
  47. package/front_end/core/sdk/DebuggerModel.ts +9 -3
  48. package/front_end/core/sdk/EnhancedTracesParser.test.ts +1 -5
  49. package/front_end/core/sdk/EnhancedTracesParser.ts +2 -6
  50. package/front_end/core/sdk/EventBreakpointsModel.ts +1 -2
  51. package/front_end/core/sdk/FrameAssociated.ts +1 -1
  52. package/front_end/core/sdk/FrameManager.ts +9 -7
  53. package/front_end/core/sdk/HeapProfilerModel.ts +3 -4
  54. package/front_end/core/sdk/IsolateManager.ts +2 -3
  55. package/front_end/core/sdk/LayerTreeBase.ts +2 -2
  56. package/front_end/core/sdk/NetworkManager.ts +1 -1
  57. package/front_end/core/sdk/OverlayModel.ts +2 -2
  58. package/front_end/core/sdk/OverlayPersistentHighlighter.ts +1 -1
  59. package/front_end/core/sdk/PageLoad.ts +1 -1
  60. package/front_end/core/sdk/PageResourceLoader.ts +1 -1
  61. package/front_end/core/sdk/RemoteObject.ts +3 -3
  62. package/front_end/core/sdk/Resource.ts +2 -2
  63. package/front_end/core/sdk/ResourceTreeModel.ts +1 -1
  64. package/front_end/core/sdk/SDKModel.ts +1 -1
  65. package/front_end/core/sdk/Script.ts +5 -5
  66. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +5 -7
  67. package/front_end/core/sdk/SourceMap.ts +1 -1
  68. package/front_end/core/sdk/SourceMapManager.ts +1 -1
  69. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
  70. package/front_end/core/sdk/SourceMapScopesInfo.ts +2 -2
  71. package/front_end/core/sdk/Target.ts +3 -2
  72. package/front_end/core/sdk/TargetManager.ts +4 -1
  73. package/front_end/core/sdk/WebAuthnModel.ts +20 -0
  74. package/front_end/core/sdk/sdk-meta.ts +7 -0
  75. package/front_end/devtools_compatibility.js +3 -3
  76. package/front_end/entrypoints/formatter_worker/CSSFormatter.ts +1 -1
  77. package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +1 -1
  78. package/front_end/entrypoints/formatter_worker/IdentityFormatter.ts +1 -1
  79. package/front_end/entrypoints/formatter_worker/JSONFormatter.ts +1 -1
  80. package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +1 -1
  81. package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +1 -1
  82. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +12 -12
  83. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
  84. package/front_end/entrypoints/main/MainImpl.ts +11 -1
  85. package/front_end/generated/InspectorBackendCommands.js +5 -3
  86. package/front_end/generated/SupportedCSSProperties.js +20 -14
  87. package/front_end/generated/protocol-mapping.d.ts +10 -0
  88. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  89. package/front_end/generated/protocol.ts +32 -1
  90. package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +4 -2
  91. package/front_end/models/bindings/CSSWorkspaceBinding.ts +2 -2
  92. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -2
  93. package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +1 -1
  94. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
  95. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
  96. package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
  97. package/front_end/models/bindings/IgnoreListManager.test.ts +49 -12
  98. package/front_end/models/bindings/IgnoreListManager.ts +79 -5
  99. package/front_end/models/bindings/ResourceMapping.ts +1 -1
  100. package/front_end/models/bindings/StylesSourceMapping.ts +11 -6
  101. package/front_end/models/breakpoints/BreakpointManager.test.ts +1 -1
  102. package/front_end/models/extensions/ExtensionPanel.ts +1 -1
  103. package/front_end/models/extensions/ExtensionServer.test.ts +1 -1
  104. package/front_end/models/extensions/ExtensionServer.ts +1 -1
  105. package/front_end/models/extensions/ExtensionView.ts +1 -1
  106. package/front_end/models/extensions/LanguageExtensionEndpoint.ts +1 -1
  107. package/front_end/models/extensions/RecorderPluginManager.ts +1 -1
  108. package/front_end/models/har/Importer.ts +1 -1
  109. package/front_end/models/issues_manager/AttributionReportingIssue.ts +1 -1
  110. package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -2
  111. package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +1 -1
  112. package/front_end/models/issues_manager/CorsIssue.ts +1 -1
  113. package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
  114. package/front_end/models/issues_manager/Issue.ts +1 -1
  115. package/front_end/models/issues_manager/IssueResolver.ts +2 -2
  116. package/front_end/models/issues_manager/IssuesManager.ts +1 -1
  117. package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
  118. package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
  119. package/front_end/models/issues_manager/PropertyRuleIssue.ts +1 -1
  120. package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
  121. package/front_end/models/issues_manager/RelatedIssue.ts +1 -1
  122. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +3 -3
  123. package/front_end/models/issues_manager/SourceFrameIssuesManager.ts +1 -1
  124. package/front_end/models/issues_manager/StylesheetLoadingIssue.ts +1 -1
  125. package/front_end/models/javascript_metadata/NativeFunctions.js +69 -61
  126. package/front_end/models/live-metrics/LiveMetrics.ts +41 -34
  127. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +1 -1
  128. package/front_end/models/persistence/EditFileSystemView.ts +1 -1
  129. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +2 -3
  130. package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -3
  131. package/front_end/models/persistence/WorkspaceSettingsTab.ts +2 -2
  132. package/front_end/models/text_utils/ContentProvider.ts +3 -3
  133. package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
  134. package/front_end/models/text_utils/TextUtils.ts +1 -1
  135. package/front_end/models/text_utils/WasmDisassembly.ts +1 -1
  136. package/front_end/models/timeline_model/TimelineProfileTree.test.ts +21 -21
  137. package/front_end/models/timeline_model/TimelineProfileTree.ts +1 -1
  138. package/front_end/models/trace/ModelImpl.test.ts +1 -1
  139. package/front_end/models/trace/ModelImpl.ts +10 -27
  140. package/front_end/models/trace/Processor.test.ts +16 -15
  141. package/front_end/models/trace/Processor.ts +33 -9
  142. package/front_end/models/trace/extras/FilmStrip.ts +2 -2
  143. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +2 -2
  144. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +10 -1
  145. package/front_end/models/trace/handlers/MetaHandler.ts +4 -0
  146. package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +1 -1
  147. package/front_end/models/trace/handlers/RendererHandler.test.ts +1 -1
  148. package/front_end/models/trace/handlers/SamplesHandler.test.ts +2 -2
  149. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +5 -4
  150. package/front_end/models/trace/handlers/ScreenshotsHandler.ts +7 -5
  151. package/front_end/models/trace/handlers/Threads.ts +2 -2
  152. package/front_end/models/trace/handlers/WarningsHandler.ts +1 -1
  153. package/front_end/models/trace/helpers/Network.ts +20 -2
  154. package/front_end/models/trace/helpers/SyntheticEvents.test.ts +1 -1
  155. package/front_end/models/trace/helpers/Trace.test.ts +34 -3
  156. package/front_end/models/trace/helpers/Trace.ts +12 -0
  157. package/front_end/models/trace/helpers/TreeHelpers.test.ts +52 -0
  158. package/front_end/models/trace/helpers/TreeHelpers.ts +80 -1
  159. package/front_end/models/trace/insights/Common.ts +1 -1
  160. package/front_end/models/trace/insights/CumulativeLayoutShift.test.ts +24 -2
  161. package/front_end/models/trace/insights/CumulativeLayoutShift.ts +102 -27
  162. package/front_end/models/trace/insights/DocumentLatency.test.ts +22 -11
  163. package/front_end/models/trace/insights/DocumentLatency.ts +9 -6
  164. package/front_end/models/trace/insights/FontDisplay.ts +5 -1
  165. package/front_end/models/trace/insights/InteractionToNextPaint.ts +4 -3
  166. package/front_end/models/trace/insights/LargestContentfulPaint.test.ts +9 -1
  167. package/front_end/models/trace/insights/LargestContentfulPaint.ts +26 -6
  168. package/front_end/models/trace/insights/RenderBlocking.test.ts +10 -16
  169. package/front_end/models/trace/insights/RenderBlocking.ts +6 -4
  170. package/front_end/models/trace/insights/SlowCSSSelector.ts +3 -1
  171. package/front_end/models/trace/insights/ThirdPartyWeb.ts +15 -2
  172. package/front_end/models/trace/insights/Viewport.ts +1 -0
  173. package/front_end/models/trace/insights/types.ts +14 -11
  174. package/front_end/models/trace/lantern/graph/BaseNode.ts +2 -2
  175. package/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +4 -3
  176. package/front_end/models/trace/lantern/simulation/TCPConnection.ts +1 -1
  177. package/front_end/models/trace/lantern/testing/MetricTestUtils.ts +1 -1
  178. package/front_end/models/trace/root-causes/LayoutShift.ts +3 -20
  179. package/front_end/models/trace/types/Extensions.ts +3 -7
  180. package/front_end/models/trace/types/File.ts +2 -8
  181. package/front_end/models/trace/types/TraceEvents.ts +10 -4
  182. package/front_end/models/workspace/UISourceCode.test.ts +3 -3
  183. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  184. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
  185. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  186. package/front_end/panels/animation/AnimationModel.ts +1 -1
  187. package/front_end/panels/animation/AnimationTimeline.ts +1 -1
  188. package/front_end/panels/animation/AnimationUI.ts +1 -1
  189. package/front_end/panels/application/ApplicationPanelSidebar.test.ts +90 -0
  190. package/front_end/panels/application/ApplicationPanelSidebar.ts +123 -20
  191. package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
  192. package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
  193. package/front_end/panels/application/BounceTrackingMitigationsTreeElement.ts +1 -1
  194. package/front_end/panels/application/DOMStorageItemsView.ts +4 -2
  195. package/front_end/panels/application/ExtensionStorageItemsView.test.ts +89 -0
  196. package/front_end/panels/application/ExtensionStorageItemsView.ts +219 -0
  197. package/front_end/panels/application/ExtensionStorageModel.test.ts +12 -0
  198. package/front_end/panels/application/ExtensionStorageModel.ts +56 -13
  199. package/front_end/panels/application/IndexedDBViews.ts +14 -19
  200. package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
  201. package/front_end/panels/application/PreloadingTreeElement.ts +1 -1
  202. package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
  203. package/front_end/panels/application/ResourcesPanel.ts +18 -1
  204. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +1 -1
  205. package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
  206. package/front_end/panels/application/SharedStorageTreeElement.ts +2 -2
  207. package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
  208. package/front_end/panels/application/TrustTokensTreeElement.ts +1 -1
  209. package/front_end/panels/application/application.ts +2 -0
  210. package/front_end/panels/application/components/BackForwardCacheView.ts +76 -72
  211. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +32 -29
  212. package/front_end/panels/application/components/EndpointsGrid.ts +5 -4
  213. package/front_end/panels/application/components/FrameDetailsView.ts +110 -127
  214. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +11 -11
  215. package/front_end/panels/application/components/OriginTrialTreeView.ts +36 -34
  216. package/front_end/panels/application/components/PermissionsPolicySection.ts +31 -33
  217. package/front_end/panels/application/components/ProtocolHandlersView.ts +15 -14
  218. package/front_end/panels/application/components/ReportsGrid.ts +11 -9
  219. package/front_end/panels/application/components/ServiceWorkerRouterView.ts +0 -1
  220. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +11 -11
  221. package/front_end/panels/application/components/SharedStorageMetadataView.ts +16 -14
  222. package/front_end/panels/application/components/StackTrace.ts +18 -17
  223. package/front_end/panels/application/components/StorageMetadataView.ts +19 -18
  224. package/front_end/panels/application/components/TrustTokensView.ts +17 -16
  225. package/front_end/panels/application/preloading/PreloadingView.ts +14 -11
  226. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +7 -6
  227. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +42 -45
  228. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +13 -11
  229. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +11 -9
  230. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +5 -4
  231. package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -0
  232. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +10 -8
  233. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +20 -16
  234. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +50 -57
  235. package/front_end/panels/application/resourcesSidebar.css +0 -3
  236. package/front_end/panels/autofill/AutofillView.ts +19 -14
  237. package/front_end/panels/console/ConsoleFilter.ts +1 -1
  238. package/front_end/panels/console/ConsoleSidebar.ts +1 -1
  239. package/front_end/panels/console/ConsoleViewMessage.ts +2 -2
  240. package/front_end/panels/console/consoleView.css +4 -3
  241. package/front_end/panels/coverage/CoverageDecorationManager.ts +1 -1
  242. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  243. package/front_end/panels/css_overview/CSSOverviewController.ts +2 -2
  244. package/front_end/panels/css_overview/CSSOverviewModel.ts +2 -3
  245. package/front_end/panels/css_overview/CSSOverviewPanel.ts +5 -7
  246. package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +12 -10
  247. package/front_end/panels/elements/AccessibilityTreeUtils.ts +9 -4
  248. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +3 -3
  249. package/front_end/panels/elements/ComputedStyleWidget.ts +6 -4
  250. package/front_end/panels/elements/ElementsPanel.ts +7 -6
  251. package/front_end/panels/elements/ElementsTreeElement.ts +35 -0
  252. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  253. package/front_end/panels/elements/PropertyMatchers.test.ts +57 -0
  254. package/front_end/panels/elements/PropertyMatchers.ts +78 -1
  255. package/front_end/panels/elements/StyleEditorWidget.ts +2 -2
  256. package/front_end/panels/elements/StylePropertiesSection.test.ts +1 -0
  257. package/front_end/panels/elements/StylePropertyHighlighter.test.ts +1 -0
  258. package/front_end/panels/elements/StylePropertyHighlighter.ts +2 -2
  259. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +36 -3
  260. package/front_end/panels/elements/StylePropertyTreeElement.ts +72 -26
  261. package/front_end/panels/elements/StylesSidebarPane.test.ts +2 -0
  262. package/front_end/panels/elements/TopLayerContainer.ts +1 -2
  263. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +8 -7
  264. package/front_end/panels/elements/components/AdornerSettingsPane.ts +3 -4
  265. package/front_end/panels/elements/components/AnchorFunctionLinkSwatch.ts +8 -7
  266. package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
  267. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
  268. package/front_end/panels/elements/components/CSSQuery.ts +0 -1
  269. package/front_end/panels/elements/components/CSSVariableValueView.ts +1 -3
  270. package/front_end/panels/elements/components/ComputedStyleProperty.ts +0 -1
  271. package/front_end/panels/elements/components/ComputedStyleTrace.ts +0 -1
  272. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +15 -11
  273. package/front_end/panels/elements/components/ElementsBreadcrumbsUtils.ts +1 -1
  274. package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +6 -4
  275. package/front_end/panels/elements/components/LayoutPane.ts +8 -7
  276. package/front_end/panels/elements/components/QueryContainer.test.ts +2 -3
  277. package/front_end/panels/elements/components/QueryContainer.ts +10 -9
  278. package/front_end/panels/elements/components/StylePropertyEditor.ts +4 -4
  279. package/front_end/panels/elements/components/computedStyleProperty.css +2 -1
  280. package/front_end/panels/elements/components/cssPropertyDocsView.css +3 -2
  281. package/front_end/panels/elements/elementsTreeOutline.css +17 -0
  282. package/front_end/panels/elements/stylesSidebarPane.css +2 -2
  283. package/front_end/panels/emulation/DeviceModeWrapper.ts +1 -1
  284. package/front_end/panels/emulation/components/DeviceSizeInputElement.ts +3 -1
  285. package/front_end/panels/explain/components/ConsoleInsight.ts +47 -46
  286. package/front_end/panels/explain/components/consoleInsight.css +0 -9
  287. package/front_end/panels/freestyler/AiAgent.ts +8 -2
  288. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +201 -0
  289. package/front_end/panels/freestyler/DrJonesFileAgent.ts +196 -0
  290. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +1 -1
  291. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +34 -31
  292. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +195 -0
  293. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +193 -0
  294. package/front_end/panels/freestyler/FreestylerAgent.test.ts +177 -12
  295. package/front_end/panels/freestyler/FreestylerAgent.ts +83 -8
  296. package/front_end/panels/freestyler/FreestylerEvaluateAction.test.ts +21 -1
  297. package/front_end/panels/freestyler/FreestylerEvaluateAction.ts +3 -0
  298. package/front_end/panels/freestyler/FreestylerPanel.test.ts +16 -2
  299. package/front_end/panels/freestyler/FreestylerPanel.ts +126 -15
  300. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +21 -2
  301. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +294 -145
  302. package/front_end/panels/freestyler/components/ProvideFeedback.ts +16 -13
  303. package/front_end/panels/freestyler/components/freestylerChatUi.css +78 -26
  304. package/front_end/panels/freestyler/freestyler-meta.ts +64 -9
  305. package/front_end/panels/freestyler/freestyler.ts +2 -0
  306. package/front_end/panels/issues/AffectedResourcesView.ts +2 -2
  307. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +5 -4
  308. package/front_end/panels/issues/CorsIssueDetailsView.ts +6 -6
  309. package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
  310. package/front_end/panels/issues/IssueView.ts +2 -2
  311. package/front_end/panels/issues/components/ElementsPanelLink.ts +3 -1
  312. package/front_end/panels/issues/components/HideIssuesMenu.ts +6 -5
  313. package/front_end/panels/lighthouse/LighthouseController.ts +2 -2
  314. package/front_end/panels/lighthouse/LighthousePanel.ts +1 -1
  315. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +2 -6
  316. package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
  317. package/front_end/panels/lighthouse/LighthouseStatusView.ts +1 -1
  318. package/front_end/panels/lighthouse/LighthouseTimespanView.ts +1 -1
  319. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +8 -2
  320. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -6
  321. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.test.ts +11 -0
  322. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +26 -31
  323. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +5 -5
  324. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +11 -14
  325. package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -3
  326. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +5 -4
  327. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +0 -1
  328. package/front_end/panels/media/EventDisplayTable.ts +1 -1
  329. package/front_end/panels/media/EventTimelineView.ts +1 -1
  330. package/front_end/panels/media/PlayerDetailView.ts +3 -3
  331. package/front_end/panels/media/PlayerListView.ts +2 -2
  332. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +23 -29
  333. package/front_end/panels/network/NetworkConfigView.ts +1 -2
  334. package/front_end/panels/network/NetworkDataGridNode.ts +4 -153
  335. package/front_end/panels/network/NetworkFrameGrouper.ts +1 -1
  336. package/front_end/panels/network/NetworkItemView.ts +1 -1
  337. package/front_end/panels/network/NetworkLogView.ts +1 -1
  338. package/front_end/panels/network/NetworkLogViewColumns.ts +4 -6
  339. package/front_end/panels/network/NetworkWaterfallColumn.ts +5 -8
  340. package/front_end/panels/network/RequestBinaryResponseView.test.ts +69 -0
  341. package/front_end/panels/network/RequestBinaryResponseView.ts +67 -0
  342. package/front_end/panels/network/RequestResponseView.test.ts +28 -1
  343. package/front_end/panels/network/RequestResponseView.ts +14 -7
  344. package/front_end/panels/network/components/EditableSpan.ts +0 -1
  345. package/front_end/panels/network/components/HeaderSectionRow.test.ts +1 -1
  346. package/front_end/panels/network/components/HeaderSectionRow.ts +22 -21
  347. package/front_end/panels/network/components/RequestHeaderSection.ts +7 -7
  348. package/front_end/panels/network/components/RequestHeadersView.ts +25 -26
  349. package/front_end/panels/network/components/RequestTrustTokensView.ts +32 -35
  350. package/front_end/panels/network/components/ResponseHeaderSection.ts +8 -10
  351. package/front_end/panels/network/components/WebBundleInfoView.ts +13 -11
  352. package/front_end/panels/network/network.ts +2 -0
  353. package/front_end/panels/network/networkConfigView.css +12 -5
  354. package/front_end/panels/network/networkLogView.css +4 -15
  355. package/front_end/panels/network/requestHTMLView.css +1 -0
  356. package/front_end/panels/profiler/BottomUpProfileDataGrid.ts +3 -3
  357. package/front_end/panels/profiler/HeapProfileView.ts +1 -1
  358. package/front_end/panels/profiler/HeapProfilerPanel.ts +2 -2
  359. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +3 -3
  360. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +3 -3
  361. package/front_end/panels/profiler/HeapSnapshotProxy.ts +1 -1
  362. package/front_end/panels/profiler/ProfileLauncherView.ts +3 -3
  363. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +4 -2
  364. package/front_end/panels/protocol_monitor/components/JSONEditor.ts +22 -15
  365. package/front_end/panels/protocol_monitor/components/Toolbar.ts +4 -4
  366. package/front_end/panels/recorder/RecorderController.ts +39 -43
  367. package/front_end/panels/recorder/components/ControlButton.ts +1 -1
  368. package/front_end/panels/recorder/components/CreateRecordingView.ts +15 -15
  369. package/front_end/panels/recorder/components/ExtensionView.ts +9 -8
  370. package/front_end/panels/recorder/components/RecordingListView.ts +15 -13
  371. package/front_end/panels/recorder/components/RecordingView.ts +92 -84
  372. package/front_end/panels/recorder/components/ReplaySection.ts +6 -6
  373. package/front_end/panels/recorder/components/SelectButton.ts +21 -20
  374. package/front_end/panels/recorder/components/StartView.ts +14 -18
  375. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  376. package/front_end/panels/recorder/components/StepView.ts +20 -20
  377. package/front_end/panels/recorder/components/TimelineSection.ts +3 -2
  378. package/front_end/panels/recorder/converters/ExtensionConverter.ts +2 -2
  379. package/front_end/panels/recorder/converters/JSONConverter.ts +1 -1
  380. package/front_end/panels/recorder/converters/LighthouseConverter.ts +1 -1
  381. package/front_end/panels/recorder/converters/PuppeteerConverter.ts +1 -1
  382. package/front_end/panels/recorder/converters/PuppeteerReplayConverter.ts +1 -1
  383. package/front_end/panels/recorder/injected/RecordingClient.ts +7 -10
  384. package/front_end/panels/recorder/injected/SelectorComputer.ts +5 -5
  385. package/front_end/panels/recorder/injected/SelectorPicker.ts +2 -2
  386. package/front_end/panels/recorder/injected/Step.ts +1 -1
  387. package/front_end/panels/recorder/injected/injected.ts +1 -1
  388. package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +1 -1
  389. package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +6 -7
  390. package/front_end/panels/recorder/injected/selectors/TextSelector.ts +3 -5
  391. package/front_end/panels/recorder/injected/util.ts +1 -1
  392. package/front_end/panels/recorder/models/RecordingPlayer.ts +1 -1
  393. package/front_end/panels/recorder/models/RecordingSettings.ts +1 -4
  394. package/front_end/panels/recorder/models/RecordingStorage.ts +1 -1
  395. package/front_end/panels/recorder/models/SDKUtils.ts +3 -2
  396. package/front_end/panels/recorder/models/ScreenshotUtils.ts +1 -1
  397. package/front_end/panels/recorder/models/Section.ts +2 -2
  398. package/front_end/panels/search/SearchResultsPane.ts +1 -2
  399. package/front_end/panels/search/SearchView.ts +1 -1
  400. package/front_end/panels/security/OriginTreeElement.ts +1 -1
  401. package/front_end/panels/security/SecurityAndPrivacyPanelSidebar.ts +1 -1
  402. package/front_end/panels/security/SecurityPanelSidebarTreeElement.ts +1 -1
  403. package/front_end/panels/sensors/SensorsView.ts +16 -0
  404. package/front_end/panels/sensors/sensors.css +16 -0
  405. package/front_end/panels/settings/AISettingsTab.test.ts +41 -11
  406. package/front_end/panels/settings/AISettingsTab.ts +103 -58
  407. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +9 -0
  408. package/front_end/panels/settings/SettingsScreen.ts +1 -1
  409. package/front_end/panels/settings/components/SyncSection.ts +18 -13
  410. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +33 -30
  411. package/front_end/panels/settings/settings-meta.ts +2 -2
  412. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  413. package/front_end/panels/sources/EditingLocationHistoryManager.ts +2 -2
  414. package/front_end/panels/sources/GoToLineQuickOpen.ts +1 -1
  415. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +1 -1
  416. package/front_end/panels/sources/OutlineQuickOpen.ts +1 -1
  417. package/front_end/panels/sources/SourcesNavigator.test.ts +1 -0
  418. package/front_end/panels/sources/SourcesPanel.ts +7 -0
  419. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  420. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  421. package/front_end/panels/sources/components/BreakpointsView.ts +25 -26
  422. package/front_end/panels/sources/components/HeadersView.ts +17 -15
  423. package/front_end/panels/timeline/AnimationsTrackAppender.ts +18 -3
  424. package/front_end/panels/timeline/AnnotationHelpers.ts +1 -1
  425. package/front_end/panels/timeline/AppenderUtils.ts +1 -1
  426. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +27 -10
  427. package/front_end/panels/timeline/CountersGraph.ts +1 -1
  428. package/front_end/panels/timeline/EntriesFilter.test.ts +68 -0
  429. package/front_end/panels/timeline/EntriesFilter.ts +13 -0
  430. package/front_end/panels/timeline/EventsTimelineTreeView.ts +1 -1
  431. package/front_end/panels/timeline/InteractionsTrackAppender.ts +10 -0
  432. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +135 -1
  433. package/front_end/panels/timeline/ModificationsManager.test.ts +160 -0
  434. package/front_end/panels/timeline/ModificationsManager.ts +31 -0
  435. package/front_end/panels/timeline/TimelineDetailsView.test.ts +4 -2
  436. package/front_end/panels/timeline/TimelineDetailsView.ts +34 -12
  437. package/front_end/panels/timeline/TimelineEventOverview.ts +1 -0
  438. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +53 -0
  439. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +50 -20
  440. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +57 -0
  441. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +18 -0
  442. package/front_end/panels/timeline/TimelineFlameChartView.ts +90 -29
  443. package/front_end/panels/timeline/TimelineHistoryManager.ts +3 -1
  444. package/front_end/panels/timeline/TimelineLoader.ts +1 -1
  445. package/front_end/panels/timeline/TimelinePanel.ts +49 -37
  446. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +16 -12
  447. package/front_end/panels/timeline/TimelineTreeView.test.ts +9 -9
  448. package/front_end/panels/timeline/TimelineTreeView.ts +1 -1
  449. package/front_end/panels/timeline/TimelineUIUtils.ts +116 -41
  450. package/front_end/panels/timeline/TimingsTrackAppender.ts +1 -1
  451. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +2 -3
  452. package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +8 -7
  453. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +28 -27
  454. package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -2
  455. package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +13 -11
  456. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +217 -87
  457. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +194 -69
  458. package/front_end/panels/timeline/components/LiveMetricsView.ts +327 -141
  459. package/front_end/panels/timeline/components/MetricCard.test.ts +8 -8
  460. package/front_end/panels/timeline/components/MetricCard.ts +6 -4
  461. package/front_end/panels/timeline/components/MetricCompareStrings.ts +1 -1
  462. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +16 -13
  463. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +12 -10
  464. package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +35 -2
  465. package/front_end/panels/timeline/components/NetworkThrottlingSelector.ts +30 -13
  466. package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +74 -0
  467. package/front_end/panels/timeline/components/RelatedInsightChips.ts +92 -0
  468. package/front_end/panels/timeline/components/Sidebar.test.ts +74 -0
  469. package/front_end/panels/timeline/components/Sidebar.ts +32 -13
  470. package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +66 -0
  471. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +108 -39
  472. package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +11 -1
  473. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +70 -37
  474. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +59 -1
  475. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +90 -34
  476. package/front_end/panels/timeline/components/Utils.test.ts +65 -0
  477. package/front_end/panels/timeline/components/Utils.ts +117 -0
  478. package/front_end/panels/timeline/components/components.ts +2 -0
  479. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +67 -53
  480. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +98 -14
  481. package/front_end/panels/timeline/components/insights/EventRef.ts +92 -0
  482. package/front_end/panels/timeline/components/insights/FontDisplay.ts +24 -13
  483. package/front_end/panels/timeline/components/insights/Helpers.ts +48 -43
  484. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +20 -18
  485. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +93 -48
  486. package/front_end/panels/timeline/components/insights/LCPPhases.ts +28 -9
  487. package/front_end/panels/timeline/components/insights/NodeLink.ts +3 -1
  488. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +33 -25
  489. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +92 -15
  490. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +26 -39
  491. package/front_end/panels/timeline/components/insights/Table.ts +12 -9
  492. package/front_end/panels/timeline/components/insights/ThirdParties.ts +20 -12
  493. package/front_end/panels/timeline/components/insights/Viewport.ts +23 -20
  494. package/front_end/panels/timeline/components/insights/insights.ts +2 -0
  495. package/front_end/panels/timeline/components/insights/sidebarInsight.css +54 -9
  496. package/front_end/panels/timeline/components/insights/table.css +9 -1
  497. package/front_end/panels/timeline/components/layoutShiftDetails.css +22 -20
  498. package/front_end/panels/timeline/components/liveMetricsView.css +46 -16
  499. package/front_end/panels/timeline/components/networkRequestDetails.css +2 -1
  500. package/front_end/panels/timeline/components/relatedInsightChips.css +45 -0
  501. package/front_end/panels/timeline/components/sidebarInsightsTab.css +24 -6
  502. package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +18 -4
  503. package/front_end/panels/timeline/extensions/ExtensionUI.ts +4 -1
  504. package/front_end/panels/timeline/fixtures/traces/basic.json.gz +0 -0
  505. package/front_end/panels/timeline/fixtures/traces/many-redirects.json.gz +0 -0
  506. package/front_end/panels/timeline/fixtures/traces/missing-url.json.gz +0 -0
  507. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +40 -51
  508. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +87 -39
  509. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +13 -11
  510. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +24 -32
  511. package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +23 -24
  512. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.test.ts +42 -0
  513. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +25 -19
  514. package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +0 -14
  515. package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +16 -13
  516. package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +59 -20
  517. package/front_end/panels/timeline/timelineFlameChartView.css +3 -2
  518. package/front_end/panels/timeline/timelineFlamechartPopover.css +19 -0
  519. package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
  520. package/front_end/panels/timeline/timelinePanel.css +2 -10
  521. package/front_end/panels/timeline/track_appenders/LayoutShiftsTrackAppender.test.ts +7 -7
  522. package/front_end/panels/timeline/track_appenders/TimingsTrackAppender.test.ts +1 -1
  523. package/front_end/panels/timeline/utils/Helpers.test.ts +38 -0
  524. package/front_end/panels/timeline/utils/Helpers.ts +94 -0
  525. package/front_end/panels/timeline/utils/ImageCache.test.ts +106 -0
  526. package/front_end/panels/timeline/utils/ImageCache.ts +55 -0
  527. package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +13 -1
  528. package/front_end/panels/timeline/utils/SourceMapsResolver.ts +11 -2
  529. package/front_end/panels/timeline/utils/utils.ts +4 -0
  530. package/front_end/panels/utils/utils.ts +1 -1
  531. package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +1 -1
  532. package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +3 -9
  533. package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -4
  534. package/front_end/panels/webauthn/WebauthnPane.ts +24 -3
  535. package/front_end/testing/EnvironmentHelpers.ts +19 -4
  536. package/front_end/testing/ExtensionHelpers.ts +1 -1
  537. package/front_end/testing/LanguagePluginHelpers.ts +1 -1
  538. package/front_end/testing/MockConnection.ts +1 -1
  539. package/front_end/testing/MockIssuesManager.ts +1 -1
  540. package/front_end/testing/MockScopeChain.ts +1 -1
  541. package/front_end/testing/MutationHelpers.test.ts +6 -8
  542. package/front_end/testing/TraceHelpers.ts +3 -1
  543. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  544. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  545. package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
  546. package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
  547. package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
  548. package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
  549. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +11 -3
  550. package/front_end/third_party/codemirror.next/package.json +5 -5
  551. package/front_end/third_party/i18n/localized-string-set.ts +1 -1
  552. package/front_end/third_party/puppeteer/README.chromium +2 -2
  553. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  554. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  555. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
  556. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
  557. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +9 -9
  558. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  559. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +84 -84
  560. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  561. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  562. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  563. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  564. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +1 -2
  565. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  566. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  567. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  568. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  569. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  570. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
  571. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.js.map +1 -1
  572. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  573. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.js.map +1 -1
  574. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts.map +1 -1
  575. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js.map +1 -1
  576. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Session.d.ts.map +1 -1
  577. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Session.js.map +1 -1
  578. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  579. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
  580. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserPrompt.d.ts.map +1 -1
  581. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserPrompt.js.map +1 -1
  582. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  583. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +7 -4
  584. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  585. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  586. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +2 -3
  587. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  588. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
  589. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
  590. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts +2 -0
  591. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts.map +1 -1
  592. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js +17 -0
  593. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js.map +1 -1
  594. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
  595. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js.map +1 -1
  596. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts.map +1 -1
  597. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js +1 -2
  598. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js.map +1 -1
  599. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
  600. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +1 -1
  601. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
  602. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  603. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
  604. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  605. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
  606. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  607. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  608. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PQuerySelector.js +1 -1
  609. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PQuerySelector.js.map +1 -1
  610. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  611. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  612. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.js.map +1 -1
  613. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
  614. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
  615. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  616. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +2 -1
  617. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +114 -97
  618. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  619. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  620. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
  621. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
  622. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +9 -9
  623. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  624. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +82 -83
  625. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  626. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  627. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  628. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  629. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +2 -3
  630. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  631. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  632. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  633. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  634. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  635. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
  636. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.js.map +1 -1
  637. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  638. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.js.map +1 -1
  639. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts.map +1 -1
  640. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js.map +1 -1
  641. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Session.d.ts.map +1 -1
  642. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Session.js.map +1 -1
  643. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  644. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
  645. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserPrompt.d.ts.map +1 -1
  646. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserPrompt.js.map +1 -1
  647. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  648. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +7 -4
  649. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  650. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  651. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +3 -4
  652. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  653. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
  654. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
  655. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts +2 -0
  656. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts.map +1 -1
  657. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js +17 -0
  658. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js.map +1 -1
  659. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
  660. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js.map +1 -1
  661. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts.map +1 -1
  662. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js +1 -2
  663. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js.map +1 -1
  664. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
  665. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +1 -1
  666. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
  667. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  668. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
  669. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  670. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
  671. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  672. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  673. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PQuerySelector.js +1 -1
  674. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PQuerySelector.js.map +1 -1
  675. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  676. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.js.map +1 -1
  677. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
  678. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
  679. package/front_end/third_party/puppeteer/package/lib/types.d.ts +2 -1
  680. package/front_end/third_party/puppeteer/package/package.json +2 -2
  681. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +1 -1
  682. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +1 -1
  683. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +89 -89
  684. package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -1
  685. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +6 -2
  686. package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +1 -1
  687. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +1 -1
  688. package/front_end/third_party/puppeteer/package/src/bidi/core/Navigation.ts +1 -1
  689. package/front_end/third_party/puppeteer/package/src/bidi/core/Realm.ts +2 -2
  690. package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +1 -1
  691. package/front_end/third_party/puppeteer/package/src/bidi/core/Session.ts +1 -1
  692. package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -1
  693. package/front_end/third_party/puppeteer/package/src/bidi/core/UserPrompt.ts +1 -1
  694. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +9 -5
  695. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +7 -3
  696. package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +1 -1
  697. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +22 -1
  698. package/front_end/third_party/puppeteer/package/src/cdp/IsolatedWorld.ts +1 -1
  699. package/front_end/third_party/puppeteer/package/src/common/QueryHandler.ts +1 -3
  700. package/front_end/third_party/puppeteer/package/src/common/util.ts +2 -1
  701. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  702. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  703. package/front_end/third_party/puppeteer/package/src/injected/PQuerySelector.ts +1 -1
  704. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +1 -1
  705. package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
  706. package/front_end/third_party/puppeteer/puppeteer.ts +1 -1
  707. package/front_end/ui/components/buttons/Button.ts +18 -17
  708. package/front_end/ui/components/buttons/button.css +0 -4
  709. package/front_end/ui/components/cards/Card.test.ts +66 -0
  710. package/front_end/ui/components/cards/Card.ts +57 -0
  711. package/front_end/ui/components/cards/card.css +32 -0
  712. package/front_end/ui/components/cards/cards.ts +9 -0
  713. package/front_end/ui/components/chrome_link/ChromeLink.test.ts +5 -3
  714. package/front_end/ui/components/chrome_link/ChromeLink.ts +3 -1
  715. package/front_end/ui/components/data_grid/DataGrid.test.ts +3 -1
  716. package/front_end/ui/components/data_grid/DataGrid.ts +25 -23
  717. package/front_end/ui/components/data_grid/DataGridContextMenuUtils.ts +2 -2
  718. package/front_end/ui/components/data_grid/DataGridController.ts +9 -5
  719. package/front_end/ui/components/data_grid/DataGridEvents.ts +1 -1
  720. package/front_end/ui/components/data_grid/DataGridRenderers.ts +7 -4
  721. package/front_end/ui/components/dialogs/Dialog.ts +4 -2
  722. package/front_end/ui/components/dialogs/IconDialog.ts +9 -7
  723. package/front_end/ui/components/dialogs/ShortcutDialog.ts +10 -8
  724. package/front_end/ui/components/diff_view/DiffView.ts +9 -8
  725. package/front_end/ui/components/docs/create_breadcrumbs.ts +3 -1
  726. package/front_end/ui/components/docs/expandable_list/basic.ts +4 -2
  727. package/front_end/ui/components/docs/floating_button/basic.html +26 -0
  728. package/front_end/ui/components/docs/floating_button/basic.ts +20 -0
  729. package/front_end/ui/components/docs/freestyler/basic.ts +5 -0
  730. package/front_end/ui/components/docs/freestyler/empty_state.ts +5 -0
  731. package/front_end/ui/components/docs/icon_dialog/basic.ts +5 -3
  732. package/front_end/ui/components/docs/panel_introduction_steps/basic.ts +7 -4
  733. package/front_end/ui/components/docs/performance_panel/flamechart.html +4 -0
  734. package/front_end/ui/components/docs/performance_panel/flamechart.ts +45 -0
  735. package/front_end/ui/components/docs/recorder_select_button/basic.ts +21 -18
  736. package/front_end/ui/components/docs/report/basic.ts +19 -23
  737. package/front_end/ui/components/docs/theme_colors/basic.ts +4 -2
  738. package/front_end/ui/components/docs/tree_outline/custom-renderers.ts +4 -2
  739. package/front_end/ui/components/expandable_list/ExpandableList.test.ts +5 -3
  740. package/front_end/ui/components/expandable_list/ExpandableList.ts +6 -4
  741. package/front_end/ui/components/floating_button/FloatingButton.ts +51 -0
  742. package/front_end/ui/components/floating_button/floatingButton.css +63 -0
  743. package/front_end/ui/components/floating_button/floating_button.ts +7 -0
  744. package/front_end/ui/components/helpers/helpers.test.ts +18 -14
  745. package/front_end/ui/components/icon_button/Icon.ts +2 -2
  746. package/front_end/ui/components/icon_button/IconButton.ts +15 -10
  747. package/front_end/ui/components/issue_counter/IssueCounter.ts +5 -1
  748. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +7 -4
  749. package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +0 -1
  750. package/front_end/ui/components/linkifier/LinkifierImpl.ts +3 -1
  751. package/front_end/ui/components/markdown_view/CodeBlock.test.ts +7 -7
  752. package/front_end/ui/components/markdown_view/CodeBlock.ts +33 -41
  753. package/front_end/ui/components/markdown_view/MarkdownImage.ts +12 -9
  754. package/front_end/ui/components/markdown_view/MarkdownLink.ts +3 -1
  755. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +51 -3
  756. package/front_end/ui/components/markdown_view/MarkdownView.ts +39 -22
  757. package/front_end/ui/components/markdown_view/codeBlock.css +6 -28
  758. package/front_end/ui/components/markdown_view/markdownLink.css +1 -1
  759. package/front_end/ui/components/markdown_view/markdownView.css +4 -0
  760. package/front_end/ui/components/menus/Menu.ts +7 -5
  761. package/front_end/ui/components/menus/SelectMenu.test.ts +3 -1
  762. package/front_end/ui/components/menus/SelectMenu.ts +17 -15
  763. package/front_end/ui/components/panel_feedback/FeedbackButton.ts +5 -3
  764. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +8 -4
  765. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +6 -4
  766. package/front_end/ui/components/panel_introduction_steps/PanelIntroductionSteps.ts +3 -1
  767. package/front_end/ui/components/report_view/ReportView.test.ts +5 -3
  768. package/front_end/ui/components/report_view/ReportView.ts +9 -7
  769. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +8 -5
  770. package/front_end/ui/components/settings/SettingCheckbox.ts +14 -12
  771. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +7 -4
  772. package/front_end/ui/components/spinners/Spinner.ts +3 -1
  773. package/front_end/ui/components/split_view/SplitView.ts +3 -1
  774. package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +3 -1
  775. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +3 -2
  776. package/front_end/ui/components/survey_link/SurveyLink.ts +7 -3
  777. package/front_end/ui/components/switch/SwitchImpl.ts +3 -1
  778. package/front_end/ui/components/text_editor/TextEditorHistory.ts +2 -2
  779. package/front_end/ui/components/text_prompt/TextPrompt.ts +3 -1
  780. package/front_end/ui/components/tree_outline/TreeOutline.test.ts +8 -6
  781. package/front_end/ui/components/tree_outline/TreeOutline.ts +9 -8
  782. package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +5 -3
  783. package/front_end/ui/legacy/Context.ts +1 -1
  784. package/front_end/ui/legacy/Dialog.ts +2 -2
  785. package/front_end/ui/legacy/DockController.ts +2 -2
  786. package/front_end/ui/legacy/FilterBar.ts +1 -1
  787. package/front_end/ui/legacy/FilterSuggestionBuilder.ts +1 -1
  788. package/front_end/ui/legacy/GlassPane.ts +1 -1
  789. package/front_end/ui/legacy/Infobar.ts +1 -1
  790. package/front_end/ui/legacy/InspectorView.ts +5 -5
  791. package/front_end/ui/legacy/Panel.ts +1 -1
  792. package/front_end/ui/legacy/ShortcutRegistry.ts +1 -1
  793. package/front_end/ui/legacy/SplitWidget.test.ts +33 -1
  794. package/front_end/ui/legacy/SplitWidget.ts +62 -7
  795. package/front_end/ui/legacy/TabbedPane.ts +24 -0
  796. package/front_end/ui/legacy/Toolbar.test.ts +39 -0
  797. package/front_end/ui/legacy/Toolbar.ts +16 -17
  798. package/front_end/ui/legacy/UIUtils.ts +1 -1
  799. package/front_end/ui/legacy/View.ts +2 -2
  800. package/front_end/ui/legacy/ViewManager.ts +3 -2
  801. package/front_end/ui/legacy/ViewRegistration.ts +2 -2
  802. package/front_end/ui/legacy/Widget.ts +62 -14
  803. package/front_end/ui/legacy/XElement.ts +0 -1
  804. package/front_end/ui/legacy/XLink.test.ts +3 -1
  805. package/front_end/ui/legacy/XLink.ts +6 -4
  806. package/front_end/ui/legacy/checkboxTextLabel.css +4 -0
  807. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
  808. package/front_end/ui/legacy/components/data_grid/DataGridWithPreview.ts +21 -10
  809. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +1 -1
  810. package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +10 -7
  811. package/front_end/ui/legacy/components/inline_editor/ColorMixSwatch.ts +3 -1
  812. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +3 -1
  813. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +9 -9
  814. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +5 -4
  815. package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
  816. package/front_end/ui/legacy/components/perf_ui/FilmStripView.test.ts +9 -9
  817. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +49 -13
  818. package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -0
  819. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +1 -1
  820. package/front_end/ui/legacy/inspectorCommon.css +0 -1
  821. package/front_end/ui/legacy/themeColors.css +10 -0
  822. package/front_end/ui/legacy/toolbar.css +4 -0
  823. package/front_end/ui/legacy/treeoutline.css +0 -3
  824. package/front_end/ui/lit-html/static.test.ts +8 -8
  825. package/front_end/ui/visual_logging/Debugging.ts +1 -1
  826. package/front_end/ui/visual_logging/KnownContextValues.ts +32 -3
  827. package/front_end/ui/visual_logging/LoggingDriver.ts +1 -1
  828. package/front_end/ui/visual_logging/LoggingEvents.ts +28 -28
  829. package/front_end/ui/visual_logging/LoggingState.ts +1 -1
  830. package/front_end/ui/visual_logging/NonDomState.ts +2 -2
  831. package/front_end/ui/visual_logging/visual_logging.ts +3 -1
  832. package/inspector_overlay/css_grid_label_helpers.test.ts +103 -0
  833. package/inspector_overlay/css_grid_label_helpers.ts +63 -12
  834. package/inspector_overlay/highlight_common.ts +2 -2
  835. package/inspector_overlay/highlight_container_query.ts +1 -2
  836. package/inspector_overlay/highlight_flex_common.test.ts +1 -1
  837. package/inspector_overlay/highlight_flex_common.ts +2 -3
  838. package/inspector_overlay/highlight_grid_common.ts +10 -4
  839. package/inspector_overlay/highlight_isolated_element.ts +1 -1
  840. package/inspector_overlay/highlight_scroll_snap.ts +1 -2
  841. package/inspector_overlay/testing/InspectorOverlayHelpers.ts +1 -1
  842. package/inspector_overlay/tool_highlight.ts +4 -8
  843. package/package.json +4 -3
  844. package/scripts/devtools_paths.js +9 -2
  845. package/scripts/eslint_rules/lib/avoid_assert_equal.js +34 -7
  846. package/scripts/eslint_rules/lib/html_tagged_template.js +55 -0
  847. package/scripts/eslint_rules/lib/inline_type_imports.js +22 -23
  848. package/scripts/eslint_rules/tests/avoid_assert_equal_test.js +61 -2
  849. package/scripts/eslint_rules/tests/html_tagged_template_test.js +96 -0
  850. package/scripts/eslint_rules/tests/inline_type_imports_test.js +5 -25
  851. package/scripts/freestyler/eval/index.js +83 -47
  852. package/scripts/protocol_typescript/protocol_dts_generator.ts +1 -1
  853. package/scripts/stylelint_rules/lib/use_theme_colors.js +2 -1
  854. package/scripts/stylelint_rules/tests/use_theme_colors_test.js +16 -0
  855. package/front_end/Images/src/spark.svg +0 -3
  856. package/front_end/panels/timeline/components/insights/lcpDiscovery.css +0 -13
  857. package/scripts/eslint_rules/lib/ban_literal_devtools_component_tag_names.js +0 -40
  858. package/scripts/eslint_rules/lib/check_component_naming.js +0 -214
  859. package/scripts/eslint_rules/tests/ban_literal_devtools_component_tag_names_test.js +0 -38
  860. package/scripts/eslint_rules/tests/check_component_naming_test.js +0 -246
@@ -2,6 +2,13 @@
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
4
 
5
+ import '../../../ui/components/icon_button/icon_button.js';
6
+ import './CPUThrottlingSelector.js';
7
+ import './FieldSettingsDialog.js';
8
+ import './NetworkThrottlingSelector.js';
9
+ import '../../../ui/components/menus/menus.js';
10
+ import './MetricCard.js';
11
+
5
12
  import * as Common from '../../../core/common/common.js';
6
13
  import * as i18n from '../../../core/i18n/i18n.js';
7
14
  import type * as SDK from '../../../core/sdk/sdk.js';
@@ -10,28 +17,27 @@ import * as EmulationModel from '../../../models/emulation/emulation.js';
10
17
  import * as LiveMetrics from '../../../models/live-metrics/live-metrics.js';
11
18
  import * as Buttons from '../../../ui/components/buttons/buttons.js';
12
19
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
13
- import * as IconButton from '../../../ui/components/icon_button/icon_button.js';
14
20
  import * as LegacyWrapper from '../../../ui/components/legacy_wrapper/legacy_wrapper.js';
15
- import * as Menus from '../../../ui/components/menus/menus.js';
16
- import * as Settings from '../../../ui/components/settings/settings.js';
17
- import * as Components from '../../../ui/legacy/components/utils/utils.js';
21
+ import type * as Menus from '../../../ui/components/menus/menus.js';
22
+ import * as Coordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
23
+ import type * as Settings from '../../../ui/components/settings/settings.js';
18
24
  import * as UI from '../../../ui/legacy/legacy.js';
19
25
  import * as LitHtml from '../../../ui/lit-html/lit-html.js';
26
+ import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
20
27
  import * as MobileThrottling from '../../mobile_throttling/mobile_throttling.js';
21
28
 
22
- import {CPUThrottlingSelector} from './CPUThrottlingSelector.js';
23
- import {FieldSettingsDialog} from './FieldSettingsDialog.js';
24
29
  import liveMetricsViewStyles from './liveMetricsView.css.js';
25
- import {MetricCard, type MetricCardData} from './MetricCard.js';
30
+ import type {MetricCardData} from './MetricCard.js';
26
31
  import metricValueStyles from './metricValueStyles.css.js';
27
- import {NetworkThrottlingSelector} from './NetworkThrottlingSelector.js';
28
- import {INP_THRESHOLDS, renderMetricValue} from './Utils.js';
32
+ import {CLS_THRESHOLDS, INP_THRESHOLDS, renderMetricValue} from './Utils.js';
29
33
 
30
34
  const {html, nothing, Directives} = LitHtml;
31
35
  const {until} = Directives;
32
36
 
33
37
  type DeviceOption = CrUXManager.DeviceScope|'AUTO';
34
38
 
39
+ const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
40
+
35
41
  const DEVICE_OPTION_LIST: DeviceOption[] = ['AUTO', ...CrUXManager.DEVICE_SCOPE_LIST];
36
42
 
37
43
  const RTT_COMPARISON_THRESHOLD = 200;
@@ -46,10 +52,18 @@ const UIStrings = {
46
52
  * @description Title of a view that shows performance metrics from the local environment.
47
53
  */
48
54
  localMetrics: 'Local metrics',
55
+ /**
56
+ * @description Accessible label for a section that logs user interactions and layout shifts. A layout shift is an event that shifts content in the layout of the page causing a jarring experience for the user.
57
+ */
58
+ eventLogs: 'Interaction and layout shift logs section',
49
59
  /**
50
60
  * @description Title of a section that lists user interactions.
51
61
  */
52
62
  interactions: 'Interactions',
63
+ /**
64
+ * @description Title of a section that lists layout shifts. A layout shift is an event that shifts content in the layout of the page causing a jarring experience for the user.
65
+ */
66
+ layoutShifts: 'Layout shifts',
53
67
  /**
54
68
  * @description Title of a sidebar section that shows options for the user to take after using the main view.
55
69
  */
@@ -172,7 +186,23 @@ const UIStrings = {
172
186
  /**
173
187
  * @description Text label for a link to the Largest Contentful Paint (LCP) related page element. This element represents the largest content on the page. "LCP" should not be translated.
174
188
  */
175
- lcpElement: 'LCP Element',
189
+ lcpElement: 'LCP element',
190
+ /**
191
+ * @description Text label for a button that reveals the user interaction associated with the Interaction to Next Paint (INP) performance metric. "INP" should not be translated.
192
+ */
193
+ inpInteractionLink: 'INP interaction',
194
+ /**
195
+ * @description Text label for a button that reveals the cluster of layout shift events that affected the page content the most. A cluster is a group of layout shift events that occur in quick succession.
196
+ */
197
+ worstCluster: 'Worst cluster',
198
+ /**
199
+ * @description [ICU Syntax] Text content of a button that reveals the cluster of layout shift events that affected the page content the most. A layout shift is an event that shifts content in the layout of the page causing a jarring experience for the user. This text will indicate how many shifts were in the cluster.
200
+ * @example {3} shiftCount
201
+ */
202
+ numShifts: `{shiftCount, plural,
203
+ =1 {{shiftCount} shift}
204
+ other {{shiftCount} shifts}
205
+ }`,
176
206
  /**
177
207
  * @description Label for a a range of dates that represents the period of time a set of field data is collected from.
178
208
  */
@@ -212,9 +242,9 @@ const UIStrings = {
212
242
  interactionExcluded:
213
243
  'INP is calculated using the 98th percentile of interaction delays, so some interaction delays may be larger than the INP value.',
214
244
  /**
215
- * @description Tooltip for a button that will remove everything from a log that lists user interactions that happened on the page.
245
+ * @description Tooltip for a button that will remove everything from the currently selected log.
216
246
  */
217
- clearInteractionsLog: 'Clear interactions log',
247
+ clearCurrentLog: 'Clear the current log',
218
248
  /**
219
249
  * @description Title for an expandable section that contains more information about real user environments. This message is meant to prompt the user to understand the conditions experienced by real users.
220
250
  */
@@ -255,19 +285,23 @@ const UIStrings = {
255
285
  * @description Tooltip text for a button that reveals the user interaction associated with the Interaction to Next Paint (INP) performance metric.
256
286
  */
257
287
  showInpInteraction: 'Go to the INP interaction.',
288
+ /**
289
+ * @description Tooltip text for a button that reveals the cluster of layout shift events that affected the page content the most. A layout shift is an event that shifts content in the layout of the page causing a jarring experience for the user. A cluster is a group of layout shift events that occur in quick succession.
290
+ */
291
+ showClsCluster: 'Go to worst layout shift cluster.',
258
292
  };
259
293
 
260
294
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/LiveMetricsView.ts', UIStrings);
261
295
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
262
296
 
263
297
  export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableComponent {
264
- static readonly litTagName = LitHtml.literal`devtools-live-metrics-view`;
265
298
  readonly #shadow = this.attachShadow({mode: 'open'});
266
299
 
267
300
  #lcpValue?: LiveMetrics.LCPValue;
268
301
  #clsValue?: LiveMetrics.CLSValue;
269
302
  #inpValue?: LiveMetrics.INPValue;
270
303
  #interactions: LiveMetrics.Interaction[] = [];
304
+ #layoutShifts: LiveMetrics.LayoutShift[] = [];
271
305
 
272
306
  #cruxPageResult?: CrUXManager.PageResult;
273
307
 
@@ -277,29 +311,17 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
277
311
  #toggleRecordAction: UI.ActionRegistration.Action;
278
312
  #recordReloadAction: UI.ActionRegistration.Action;
279
313
 
314
+ #logsEl?: LiveMetricsLogs;
280
315
  #tooltipContainerEl?: Element;
281
316
  #interactionsListEl?: HTMLElement;
282
- #interactionsListScrolling = false;
317
+ #layoutShiftsListEl?: HTMLElement;
318
+ #listIsScrolling = false;
283
319
 
284
320
  constructor() {
285
321
  super();
286
322
 
287
323
  this.#toggleRecordAction = UI.ActionRegistry.ActionRegistry.instance().getAction('timeline.toggle-recording');
288
324
  this.#recordReloadAction = UI.ActionRegistry.ActionRegistry.instance().getAction('timeline.record-reload');
289
-
290
- const interactionRevealer = new InteractionRevealer(this);
291
-
292
- Common.Revealer.registerRevealer({
293
- contextTypes() {
294
- return [LiveMetrics.Interaction];
295
- },
296
- destination: Common.Revealer.RevealerDestination.TIMELINE_PANEL,
297
- async loadRevealer() {
298
- return interactionRevealer;
299
- },
300
- });
301
-
302
- this.#render();
303
325
  }
304
326
 
305
327
  #onMetricStatus(event: {data: LiveMetrics.StatusEvent}): void {
@@ -307,13 +329,25 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
307
329
  this.#clsValue = event.data.cls;
308
330
  this.#inpValue = event.data.inp;
309
331
 
332
+ const hasNewLS = this.#layoutShifts.length < event.data.layoutShifts.length;
333
+ this.#layoutShifts = [...event.data.layoutShifts];
334
+
310
335
  const hasNewInteraction = this.#interactions.length < event.data.interactions.length;
311
336
  this.#interactions = [...event.data.interactions];
312
337
 
313
338
  const renderPromise = ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
314
339
 
315
- const listEl = this.#interactionsListEl;
316
- if (!hasNewInteraction || !listEl) {
340
+ if (hasNewInteraction && this.#interactionsListEl) {
341
+ this.#keepScrolledToBottom(renderPromise, this.#interactionsListEl);
342
+ }
343
+
344
+ if (hasNewLS && this.#layoutShiftsListEl) {
345
+ this.#keepScrolledToBottom(renderPromise, this.#layoutShiftsListEl);
346
+ }
347
+ }
348
+
349
+ #keepScrolledToBottom(renderPromise: Promise<void>, listEl: HTMLElement): void {
350
+ if (!listEl.checkVisibility()) {
317
351
  return;
318
352
  }
319
353
 
@@ -323,15 +357,15 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
323
357
  // However, if a new item appears while the animation for a previous item is still going,
324
358
  // then we should "finish" the scroll by sending another scroll command even if the scroll position
325
359
  // the element hasn't scrolled all the way to the bottom yet.
326
- if (!isAtBottom && !this.#interactionsListScrolling) {
360
+ if (!isAtBottom && !this.#listIsScrolling) {
327
361
  return;
328
362
  }
329
363
 
330
364
  void renderPromise.then(() => {
331
365
  requestAnimationFrame(() => {
332
- this.#interactionsListScrolling = true;
366
+ this.#listIsScrolling = true;
333
367
  listEl.addEventListener('scrollend', () => {
334
- this.#interactionsListScrolling = false;
368
+ this.#listIsScrolling = false;
335
369
  }, {once: true});
336
370
  listEl.scrollTo({top: listEl.scrollHeight, behavior: 'smooth'});
337
371
  });
@@ -381,6 +415,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
381
415
  this.#clsValue = liveMetrics.clsValue;
382
416
  this.#inpValue = liveMetrics.inpValue;
383
417
  this.#interactions = liveMetrics.interactions;
418
+ this.#layoutShifts = liveMetrics.layoutShifts;
384
419
  void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
385
420
  }
386
421
 
@@ -415,7 +450,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
415
450
 
416
451
  // clang-format off
417
452
  return html`
418
- <${MetricCard.litTagName} .data=${{
453
+ <devtools-metric-card .data=${{
419
454
  metric: 'LCP',
420
455
  localValue: this.#lcpValue?.value,
421
456
  fieldValue: fieldData?.percentiles?.p75,
@@ -435,7 +470,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
435
470
  </div>
436
471
  `
437
472
  : nothing}
438
- </${MetricCard.litTagName}>
473
+ </devtools-metric-card>
439
474
  `;
440
475
  // clang-format on
441
476
  }
@@ -443,16 +478,31 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
443
478
  #renderClsCard(): LitHtml.LitTemplate {
444
479
  const fieldData = this.#getFieldMetricData('cumulative_layout_shift');
445
480
 
481
+ const clusterIds = new Set(this.#clsValue?.clusterShiftIds || []);
482
+ const clusterIsVisible =
483
+ clusterIds.size > 0 && this.#layoutShifts.some(layoutShift => clusterIds.has(layoutShift.uniqueLayoutShiftId));
484
+
446
485
  // clang-format off
447
486
  return html`
448
- <${MetricCard.litTagName} .data=${{
487
+ <devtools-metric-card .data=${{
449
488
  metric: 'CLS',
450
489
  localValue: this.#clsValue?.value,
451
490
  fieldValue: fieldData?.percentiles?.p75,
452
491
  histogram: fieldData?.histogram,
453
492
  tooltipContainer: this.#tooltipContainerEl,
454
493
  } as MetricCardData}>
455
- </${MetricCard.litTagName}>
494
+ ${clusterIsVisible ? html`
495
+ <div class="related-info" slot="extra-info">
496
+ <span class="related-info-label">${i18nString(UIStrings.worstCluster)}</span>
497
+ <button
498
+ class="link-to-log"
499
+ title=${i18nString(UIStrings.showClsCluster)}
500
+ @click=${() => this.#revealLayoutShiftCluster(clusterIds)}
501
+ jslog=${VisualLogging.action('timeline.landing.show-cls-cluster').track({click: true})}
502
+ >${i18nString(UIStrings.numShifts, {shiftCount: clusterIds.size})}</button>
503
+ </div>
504
+ ` : nothing}
505
+ </devtools-metric-card>
456
506
  `;
457
507
  // clang-format on
458
508
  }
@@ -463,21 +513,9 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
463
513
  const interaction =
464
514
  this.#interactions.find(interaction => interaction.uniqueInteractionId === this.#inpValue?.uniqueInteractionId);
465
515
 
466
- let interactionLink;
467
- if (interaction) {
468
- interactionLink = Components.Linkifier.Linkifier.linkifyRevealable(
469
- interaction,
470
- interaction.interactionType,
471
- undefined,
472
- i18nString(UIStrings.showInpInteraction),
473
- 'link-to-interaction',
474
- );
475
- interactionLink.tabIndex = 0;
476
- }
477
-
478
516
  // clang-format off
479
517
  return html`
480
- <${MetricCard.litTagName} .data=${{
518
+ <devtools-metric-card .data=${{
481
519
  metric: 'INP',
482
520
  localValue: this.#inpValue?.value,
483
521
  fieldValue: fieldData?.percentiles?.p75,
@@ -489,13 +527,18 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
489
527
  [i18nString(UIStrings.presentationDelay), phases.presentationDelay],
490
528
  ],
491
529
  } as MetricCardData}>
492
- ${interactionLink ? html`
530
+ ${interaction ? html`
493
531
  <div class="related-info" slot="extra-info">
494
- <span class="related-info-label">INP interaction</span>
495
- ${interactionLink}
532
+ <span class="related-info-label">${i18nString(UIStrings.inpInteractionLink)}</span>
533
+ <button
534
+ class="link-to-log"
535
+ title=${i18nString(UIStrings.showInpInteraction)}
536
+ @click=${() => this.#revealInteraction(interaction)}
537
+ jslog=${VisualLogging.action('timeline.landing.show-inp-interaction').track({click: true})}
538
+ >${interaction.interactionType}</button>
496
539
  </div>
497
540
  ` : nothing}
498
- </${MetricCard.litTagName}>
541
+ </devtools-metric-card>
499
542
  `;
500
543
  // clang-format on
501
544
  }
@@ -508,7 +551,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
508
551
  // clang-format off
509
552
  return html`
510
553
  <div class="record-action">
511
- <${Buttons.Button.Button.litTagName} @click=${onClick} .data=${{
554
+ <devtools-button @click=${onClick} .data=${{
512
555
  variant: Buttons.Button.Variant.TEXT,
513
556
  size: Buttons.Button.Size.REGULAR,
514
557
  iconName: action.icon(),
@@ -516,7 +559,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
516
559
  jslogContext: action.id(),
517
560
  } as Buttons.Button.ButtonData}>
518
561
  ${action.title()}
519
- </${Buttons.Button.Button.litTagName}>
562
+ </devtools-button>
520
563
  <span class="shortcut-label">${UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutTitleForAction(action.id())}</span>
521
564
  </div>
522
565
  `;
@@ -611,24 +654,24 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
611
654
  </details>
612
655
  ` : nothing}
613
656
  <div class="environment-option">
614
- <${CPUThrottlingSelector.litTagName}></${CPUThrottlingSelector.litTagName}>
657
+ <devtools-cpu-throttling-selector></devtools-cpu-throttling-selector>
615
658
  </div>
616
659
  <div class="environment-option">
617
- <${NetworkThrottlingSelector.litTagName}></${NetworkThrottlingSelector.litTagName}>
660
+ <devtools-network-throttling-selector></devtools-network-throttling-selector>
618
661
  </div>
619
662
  <div class="environment-option">
620
- <${Settings.SettingCheckbox.SettingCheckbox.litTagName}
663
+ <setting-checkbox
621
664
  class="network-cache-setting"
622
665
  .data=${{
623
666
  setting: Common.Settings.Settings.instance().moduleSetting('cache-disabled'),
624
667
  textOverride: i18nString(UIStrings.disableNetworkCache),
625
668
  } as Settings.SettingCheckbox.SettingCheckboxData}
626
- ></${Settings.SettingCheckbox.SettingCheckbox.litTagName}>
627
- <${IconButton.Icon.Icon.litTagName}
669
+ ></setting-checkbox>
670
+ <devtools-icon
628
671
  class="setting-hint"
629
672
  name="help"
630
673
  title=${i18nString(UIStrings.networkCacheExplanation)}
631
- ></${IconButton.Icon.Icon.litTagName}>
674
+ ></devtools-icon>
632
675
  </div>
633
676
  `;
634
677
  // clang-format on
@@ -669,7 +712,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
669
712
  const shouldDisable = !this.#cruxPageResult?.['url-ALL'] && !this.#cruxPageResult?.['origin-ALL'];
670
713
 
671
714
  return html`
672
- <${Menus.SelectMenu.SelectMenu.litTagName}
715
+ <devtools-select-menu
673
716
  id="page-scope-select"
674
717
  class="field-data-option"
675
718
  @selectmenuselected=${this.#onPageScopeMenuItemSelected}
@@ -682,19 +725,19 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
682
725
  .disabled=${shouldDisable}
683
726
  title=${accessibleTitle}
684
727
  >
685
- <${Menus.Menu.MenuItem.litTagName}
728
+ <devtools-menu-item
686
729
  .value=${'url'}
687
730
  .selected=${this.#fieldPageScope === 'url'}
688
731
  >
689
732
  ${urlLabel}
690
- </${Menus.Menu.MenuItem.litTagName}>
691
- <${Menus.Menu.MenuItem.litTagName}
733
+ </devtools-menu-item>
734
+ <devtools-menu-item
692
735
  .value=${'origin'}
693
736
  .selected=${this.#fieldPageScope === 'origin'}
694
737
  >
695
738
  ${originLabel}
696
- </${Menus.Menu.MenuItem.litTagName}>
697
- </${Menus.SelectMenu.SelectMenu.litTagName}>
739
+ </devtools-menu-item>
740
+ </devtools-select-menu>
698
741
  `;
699
742
  }
700
743
 
@@ -767,7 +810,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
767
810
 
768
811
  // clang-format off
769
812
  return html`
770
- <${Menus.SelectMenu.SelectMenu.litTagName}
813
+ <devtools-select-menu
771
814
  id="device-scope-select"
772
815
  class="field-data-option"
773
816
  @selectmenuselected=${this.#onDeviceOptionMenuItemSelected}
@@ -782,15 +825,15 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
782
825
  >
783
826
  ${DEVICE_OPTION_LIST.map(deviceOption => {
784
827
  return html`
785
- <${Menus.Menu.MenuItem.litTagName}
828
+ <devtools-menu-item
786
829
  .value=${deviceOption}
787
830
  .selected=${this.#fieldDeviceOption === deviceOption}
788
831
  >
789
832
  ${this.#getLabelForDeviceOption(deviceOption)}
790
- </${Menus.Menu.MenuItem.litTagName}>
833
+ </devtools-menu-item>
791
834
  `;
792
835
  })}
793
- </${Menus.SelectMenu.SelectMenu.litTagName}>
836
+ </devtools-select-menu>
794
837
  `;
795
838
  // clang-format on
796
839
  }
@@ -869,68 +912,161 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
869
912
  `;
870
913
  }
871
914
 
872
- #clearInteractionsLog(): void {
873
- LiveMetrics.LiveMetrics.instance().clearInteractions();
915
+ #renderLogSection(): LitHtml.LitTemplate {
916
+ // clang-format off
917
+ return html`
918
+ <section class="logs-section" aria-label=${i18nString(UIStrings.eventLogs)}>
919
+ <devtools-live-metrics-logs
920
+ on-render=${ComponentHelpers.Directives.nodeRenderedCallback(node => {
921
+ this.#logsEl = node as LiveMetricsLogs;
922
+ })}
923
+ >
924
+ ${this.#renderInteractionsLog()}
925
+ ${this.#renderLayoutShiftsLog()}
926
+ </devtools-live-metrics-logs>
927
+ </section>
928
+ `;
929
+ // clang-format on
930
+ }
931
+
932
+ async #revealInteraction(interaction: LiveMetrics.Interaction): Promise<void> {
933
+ const interactionEl = this.#shadow.getElementById(interaction.uniqueInteractionId);
934
+ if (!interactionEl || !this.#logsEl) {
935
+ return;
936
+ }
937
+
938
+ const success = this.#logsEl.selectTab('interactions');
939
+ if (!success) {
940
+ return;
941
+ }
942
+
943
+ await coordinator.write(() => {
944
+ interactionEl.scrollIntoView({
945
+ block: 'center',
946
+ });
947
+ interactionEl.focus();
948
+ UI.UIUtils.runCSSAnimationOnce(interactionEl, 'highlight');
949
+ });
874
950
  }
875
951
 
876
- #renderInteractionsSection(): LitHtml.LitTemplate {
952
+ #renderInteractionsLog(): LitHtml.LitTemplate {
877
953
  if (!this.#interactions.length) {
878
954
  return LitHtml.nothing;
879
955
  }
880
956
 
881
957
  // clang-format off
882
958
  return html`
883
- <section class="interactions-section" aria-labelledby="interactions-section-title">
884
- <h2 id="interactions-section-title" class="section-title">
885
- ${i18nString(UIStrings.interactions)}
886
- <${Buttons.Button.Button.litTagName}
887
- class="interactions-clear"
888
- title=${i18nString(UIStrings.clearInteractionsLog)}
889
- @click=${this.#clearInteractionsLog}
890
- .data=${{
891
- variant: Buttons.Button.Variant.ICON,
892
- size: Buttons.Button.Size.REGULAR,
893
- iconName: 'clear',
894
- } as Buttons.Button.ButtonData}></${Buttons.Button.Button.litTagName}>
895
- </h2>
896
- <ol class="interactions-list"
897
- on-render=${ComponentHelpers.Directives.nodeRenderedCallback(node => {
898
- this.#interactionsListEl = node as HTMLElement;
899
- })}
900
- >
901
- ${this.#interactions.map(interaction => {
902
- const metricValue = renderMetricValue(
903
- 'timeline.landing.interaction-event-timing',
904
- interaction.duration,
905
- INP_THRESHOLDS,
906
- v => i18n.TimeUtilities.millisToString(v),
907
- {dim: true},
908
- );
909
-
910
- const isP98Excluded = this.#inpValue && this.#inpValue.value < interaction.duration;
911
- const isInp = this.#inpValue?.uniqueInteractionId === interaction.uniqueInteractionId;
912
-
913
- return html`
914
- <li id=${interaction.uniqueInteractionId} class="interaction" tabindex="-1">
915
- <span class="interaction-type">
916
- ${interaction.interactionType}
917
- ${isInp ?
918
- html`<span class="interaction-inp-chip" title=${i18nString(UIStrings.inpInteraction)}>INP</span>`
919
- : nothing}
920
- </span>
921
- <span class="interaction-node">${
922
- interaction.node && until(Common.Linkifier.Linkifier.linkify(interaction.node))}</span>
923
- ${isP98Excluded ? html`<${IconButton.Icon.Icon.litTagName}
924
- class="interaction-info"
925
- name="info"
926
- title=${i18nString(UIStrings.interactionExcluded)}
927
- ></${IconButton.Icon.Icon.litTagName}>` : nothing}
928
- <span class="interaction-duration">${metricValue}</span>
929
- </li>
930
- `;
931
- })}
932
- </ol>
933
- </section>
959
+ <ol class="log"
960
+ slot="interactions-log-content"
961
+ on-render=${ComponentHelpers.Directives.nodeRenderedCallback(node => {
962
+ this.#interactionsListEl = node as HTMLElement;
963
+ })}
964
+ >
965
+ ${this.#interactions.map(interaction => {
966
+ const metricValue = renderMetricValue(
967
+ 'timeline.landing.interaction-event-timing',
968
+ interaction.duration,
969
+ INP_THRESHOLDS,
970
+ v => i18n.TimeUtilities.preciseMillisToString(v),
971
+ {dim: true},
972
+ );
973
+
974
+ const isP98Excluded = this.#inpValue && this.#inpValue.value < interaction.duration;
975
+ const isInp = this.#inpValue?.uniqueInteractionId === interaction.uniqueInteractionId;
976
+
977
+ return html`
978
+ <li id=${interaction.uniqueInteractionId} class="log-item interaction" tabindex="-1">
979
+ <span class="interaction-type">
980
+ ${interaction.interactionType}
981
+ ${isInp ?
982
+ html`<span class="interaction-inp-chip" title=${i18nString(UIStrings.inpInteraction)}>INP</span>`
983
+ : nothing}
984
+ </span>
985
+ <span class="interaction-node">${
986
+ interaction.node && until(Common.Linkifier.Linkifier.linkify(interaction.node))}</span>
987
+ ${isP98Excluded ? html`<devtools-icon
988
+ class="interaction-info"
989
+ name="info"
990
+ title=${i18nString(UIStrings.interactionExcluded)}
991
+ ></devtools-icon>` : nothing}
992
+ <span class="interaction-duration">${metricValue}</span>
993
+ </li>
994
+ `;
995
+ })}
996
+ </ol>
997
+ `;
998
+ // clang-format on
999
+ }
1000
+
1001
+ async #revealLayoutShiftCluster(clusterIds: Set<LiveMetrics.LayoutShift['uniqueLayoutShiftId']>): Promise<void> {
1002
+ if (!this.#logsEl) {
1003
+ return;
1004
+ }
1005
+
1006
+ const layoutShiftEls: HTMLElement[] = [];
1007
+ for (const shiftId of clusterIds) {
1008
+ const layoutShiftEl = this.#shadow.getElementById(shiftId);
1009
+ if (layoutShiftEl) {
1010
+ layoutShiftEls.push(layoutShiftEl);
1011
+ }
1012
+ }
1013
+
1014
+ if (!layoutShiftEls.length) {
1015
+ return;
1016
+ }
1017
+
1018
+ const success = this.#logsEl.selectTab('layout-shifts');
1019
+ if (!success) {
1020
+ return;
1021
+ }
1022
+
1023
+ await coordinator.write(() => {
1024
+ layoutShiftEls[0].scrollIntoView({
1025
+ block: 'start',
1026
+ });
1027
+ layoutShiftEls[0].focus();
1028
+ for (const layoutShiftEl of layoutShiftEls) {
1029
+ UI.UIUtils.runCSSAnimationOnce(layoutShiftEl, 'highlight');
1030
+ }
1031
+ });
1032
+ }
1033
+
1034
+ #renderLayoutShiftsLog(): LitHtml.LitTemplate {
1035
+ if (!this.#layoutShifts.length) {
1036
+ return LitHtml.nothing;
1037
+ }
1038
+
1039
+ // clang-format off
1040
+ return html`
1041
+ <ol class="log"
1042
+ slot="layout-shifts-log-content"
1043
+ on-render=${ComponentHelpers.Directives.nodeRenderedCallback(node => {
1044
+ this.#layoutShiftsListEl = node as HTMLElement;
1045
+ })}
1046
+ >
1047
+ ${this.#layoutShifts.map(layoutShift => {
1048
+ const metricValue = renderMetricValue(
1049
+ 'timeline.landing.layout-shift-event-score',
1050
+ layoutShift.score,
1051
+ CLS_THRESHOLDS,
1052
+ // CLS value is 2 decimal places, but individual shift scores tend to be much smaller
1053
+ // so we expand the precision here.
1054
+ v => v.toFixed(4),
1055
+ {dim: true},
1056
+ );
1057
+
1058
+ return html`
1059
+ <li id=${layoutShift.uniqueLayoutShiftId} class="log-item layout-shift" tabindex="-1">
1060
+ <div class="layout-shift-score">Layout shift score: ${metricValue}</div>
1061
+ <div class="layout-shift-nodes">
1062
+ ${layoutShift.affectedNodes.map(({node}) => html`
1063
+ <div class="layout-shift-node">${until(Common.Linkifier.Linkifier.linkify(node))}</div>
1064
+ `)}
1065
+ </div>
1066
+ </li>
1067
+ `;
1068
+ })}
1069
+ </ol>
934
1070
  `;
935
1071
  // clang-format on
936
1072
  }
@@ -963,7 +1099,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
963
1099
  </div>
964
1100
  </div>
965
1101
  ${this.#renderDataDescriptions()}
966
- ${this.#renderInteractionsSection()}
1102
+ ${this.#renderLogSection()}
967
1103
  </main>
968
1104
  <aside class="next-steps" aria-labelledby="next-steps-section-title">
969
1105
  <h2 id="next-steps-section-title" class="section-title">${i18nString(UIStrings.nextSteps)}</h2>
@@ -973,7 +1109,7 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
973
1109
  ${this.#renderPageScopeSetting()}
974
1110
  ${this.#renderDeviceScopeSetting()}
975
1111
  <div class="field-setup-buttons">
976
- <${FieldSettingsDialog.litTagName}></${FieldSettingsDialog.litTagName}>
1112
+ <devtools-field-settings-dialog></devtools-field-settings-dialog>
977
1113
  </div>
978
1114
  </div>
979
1115
  <div id="recording-settings" class="settings-card">
@@ -994,31 +1130,81 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
994
1130
  // clang-format on
995
1131
  }
996
1132
 
997
- export class InteractionRevealer implements Common.Revealer.Revealer<LiveMetrics.Interaction> {
998
- #view: LiveMetricsView;
1133
+ class LiveMetricsLogs extends UI.Widget.WidgetElement<UI.Widget.Widget> {
1134
+ #tabbedPane?: UI.TabbedPane.TabbedPane;
999
1135
 
1000
- constructor(view: LiveMetricsView) {
1001
- this.#view = view;
1136
+ constructor() {
1137
+ super();
1138
+ this.style.display = 'contents';
1002
1139
  }
1003
1140
 
1004
- async reveal(interaction: LiveMetrics.Interaction): Promise<void> {
1005
- const interactionEl = this.#view.shadowRoot?.getElementById(interaction.uniqueInteractionId);
1006
- if (!interactionEl) {
1007
- return;
1141
+ /**
1142
+ * Returns `true` if selecting the tab was successful.
1143
+ */
1144
+ selectTab(tabId: string): boolean {
1145
+ if (!this.#tabbedPane) {
1146
+ return false;
1008
1147
  }
1148
+ return this.#tabbedPane.selectTab(tabId);
1149
+ }
1009
1150
 
1010
- interactionEl.scrollIntoView({
1011
- block: 'center',
1012
- });
1013
- interactionEl.focus();
1014
- UI.UIUtils.runCSSAnimationOnce(interactionEl, 'highlight');
1151
+ #clearCurrentLog(): void {
1152
+ const liveMetrics = LiveMetrics.LiveMetrics.instance();
1153
+
1154
+ switch (this.#tabbedPane?.selectedTabId) {
1155
+ case 'interactions':
1156
+ liveMetrics.clearInteractions();
1157
+ break;
1158
+ case 'layout-shifts':
1159
+ liveMetrics.clearLayoutShifts();
1160
+ break;
1161
+ }
1162
+ }
1163
+
1164
+ override createWidget(): UI.Widget.Widget {
1165
+ // We need a generic widget with a shadow DOM as the container widget so that we can take advantage
1166
+ // of web component slots. Passing `this` into the container widget will make `this` the root element
1167
+ // of that widget.
1168
+ //
1169
+ // Any children of the root element `this` will be matched to the slots defined within the container
1170
+ // widget's shadow DOM.
1171
+ const containerWidget = new UI.Widget.Widget(true, undefined, this);
1172
+ containerWidget.contentElement.style.display = 'contents';
1173
+
1174
+ this.#tabbedPane = new UI.TabbedPane.TabbedPane();
1175
+
1176
+ // Taking advantage of web component slots allows us to render updates in the lit templates defined in the
1177
+ // main component. This should be more performant and doesn't require us to inject live metrics styles twice.
1178
+ const interactionsSlot = document.createElement('slot');
1179
+ interactionsSlot.name = 'interactions-log-content';
1180
+ const interactionsTab = UI.Widget.Widget.getOrCreateWidget(interactionsSlot);
1181
+ this.#tabbedPane.appendTab(
1182
+ 'interactions', i18nString(UIStrings.interactions), interactionsTab, undefined, undefined, undefined, undefined,
1183
+ undefined, 'timeline.landing.interactions-log');
1184
+
1185
+ const layoutShiftsSlot = document.createElement('slot');
1186
+ layoutShiftsSlot.name = 'layout-shifts-log-content';
1187
+ const layoutShiftsTab = UI.Widget.Widget.getOrCreateWidget(layoutShiftsSlot);
1188
+ this.#tabbedPane.appendTab(
1189
+ 'layout-shifts', i18nString(UIStrings.layoutShifts), layoutShiftsTab, undefined, undefined, undefined,
1190
+ undefined, undefined, 'timeline.landing.layout-shifts-log');
1191
+
1192
+ const clearButton = new UI.Toolbar.ToolbarButton(
1193
+ i18nString(UIStrings.clearCurrentLog), 'clear', undefined, 'timeline.landing.clear-log');
1194
+ clearButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.#clearCurrentLog, this);
1195
+ this.#tabbedPane.rightToolbar().appendToolbarItem(clearButton);
1196
+ this.#tabbedPane.show(containerWidget.contentElement);
1197
+
1198
+ return containerWidget;
1015
1199
  }
1016
1200
  }
1017
1201
 
1018
1202
  customElements.define('devtools-live-metrics-view', LiveMetricsView);
1203
+ customElements.define('devtools-live-metrics-logs', LiveMetricsLogs);
1019
1204
 
1020
1205
  declare global {
1021
1206
  interface HTMLElementTagNameMap {
1022
1207
  'devtools-live-metrics-view': LiveMetricsView;
1208
+ 'devtools-live-metrics-logs': LiveMetricsLogs;
1023
1209
  }
1024
1210
  }