chrome-devtools-frontend 1.0.1549484 → 1.0.1553956

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 (601) hide show
  1. package/docs/styleguide/ux/components.md +84 -17
  2. package/docs/styleguide/ux/images/cards.png +0 -0
  3. package/docs/ui_engineering.md +2 -2
  4. package/eslint.config.mjs +7 -0
  5. package/front_end/Images/generate-css-vars.js +8 -4
  6. package/front_end/core/common/Settings.ts +20 -8
  7. package/front_end/core/host/UserMetrics.ts +3 -1
  8. package/front_end/core/i18n/collect-ui-strings.js +19 -10
  9. package/front_end/core/i18n/generate-locales-js.js +4 -4
  10. package/front_end/core/protocol_client/CDPConnection.ts +1 -0
  11. package/front_end/core/protocol_client/InspectorBackend.ts +5 -1
  12. package/front_end/core/root/Runtime.ts +0 -12
  13. package/front_end/core/sdk/DOMModel.ts +38 -3
  14. package/front_end/core/sdk/DebuggerModel.ts +9 -4
  15. package/front_end/core/sdk/IsolateManager.ts +7 -0
  16. package/front_end/core/sdk/NetworkManager.ts +12 -10
  17. package/front_end/core/sdk/PageResourceLoader.ts +11 -4
  18. package/front_end/core/sdk/RehydratingConnection.ts +5 -2
  19. package/front_end/core/sdk/SourceMapManager.ts +12 -6
  20. package/front_end/entrypoints/main/MainImpl.ts +28 -19
  21. package/front_end/foundation/Universe.ts +7 -0
  22. package/front_end/generated/InspectorBackendCommands.ts +5 -2
  23. package/front_end/generated/SupportedCSSProperties.js +14 -0
  24. package/front_end/generated/protocol-mapping.d.ts +8 -0
  25. package/front_end/generated/protocol-proxy-api.d.ts +6 -0
  26. package/front_end/generated/protocol.ts +76 -0
  27. package/front_end/models/ai_assistance/AiConversation.ts +94 -4
  28. package/front_end/models/ai_assistance/BuiltInAi.ts +79 -5
  29. package/front_end/models/ai_assistance/agents/AiAgent.ts +30 -15
  30. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +179 -41
  31. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +5 -0
  32. package/front_end/models/ai_assistance/agents/StylingAgent.ts +62 -0
  33. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +2 -1
  34. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +1 -7
  35. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +124 -12
  36. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +125 -30
  37. package/front_end/models/ai_assistance/performance/AICallTree.ts +42 -0
  38. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +12 -0
  39. package/front_end/models/issues_manager/AttributionReportingIssue.ts +6 -8
  40. package/front_end/models/issues_manager/BounceTrackingIssue.ts +4 -14
  41. package/front_end/models/issues_manager/ClientHintIssue.ts +5 -12
  42. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -12
  43. package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +7 -14
  44. package/front_end/models/issues_manager/CookieIssue.ts +27 -30
  45. package/front_end/models/issues_manager/CorsIssue.ts +8 -17
  46. package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +5 -8
  47. package/front_end/models/issues_manager/DeprecationIssue.ts +7 -14
  48. package/front_end/models/issues_manager/ElementAccessibilityIssue.ts +7 -14
  49. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +4 -11
  50. package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +4 -11
  51. package/front_end/models/issues_manager/GenericIssue.ts +11 -16
  52. package/front_end/models/issues_manager/HeavyAdIssue.ts +4 -11
  53. package/front_end/models/issues_manager/Issue.ts +13 -4
  54. package/front_end/models/issues_manager/IssueAggregator.ts +17 -2
  55. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  56. package/front_end/models/issues_manager/LowTextContrastIssue.ts +3 -10
  57. package/front_end/models/issues_manager/MixedContentIssue.ts +7 -13
  58. package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +4 -11
  59. package/front_end/models/issues_manager/PermissionElementIssue.ts +262 -0
  60. package/front_end/models/issues_manager/PropertyRuleIssue.ts +6 -12
  61. package/front_end/models/issues_manager/QuirksModeIssue.ts +3 -10
  62. package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +7 -13
  63. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +4 -11
  64. package/front_end/models/issues_manager/SharedDictionaryIssue.ts +6 -13
  65. package/front_end/models/issues_manager/StylesheetLoadingIssue.ts +8 -13
  66. package/front_end/models/issues_manager/UnencodedDigestIssue.ts +2 -9
  67. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
  68. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  69. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  70. package/front_end/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  71. package/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  72. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
  73. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
  74. package/front_end/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
  75. package/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  76. package/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  77. package/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
  78. package/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
  79. package/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
  80. package/front_end/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
  81. package/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
  82. package/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  83. package/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  84. package/front_end/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  85. package/front_end/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
  86. package/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
  87. package/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
  88. package/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
  89. package/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
  90. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  91. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -13
  92. package/front_end/models/stack_trace/StackTraceModel.ts +37 -18
  93. package/front_end/models/trace/Processor.ts +14 -15
  94. package/front_end/models/trace/insights/Common.ts +2 -8
  95. package/front_end/models/trace/insights/types.ts +12 -2
  96. package/front_end/models/trace/types/TraceEvents.ts +4 -1
  97. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +28 -6
  98. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +9 -23
  99. package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
  100. package/front_end/panels/ai_assistance/components/ChatView.ts +78 -2
  101. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +71 -0
  102. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +126 -0
  103. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +131 -2
  104. package/front_end/panels/ai_assistance/components/chatView.css +28 -0
  105. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +33 -0
  106. package/front_end/panels/application/AppManifestView.ts +1007 -521
  107. package/front_end/panels/application/ApplicationPanelSidebar.ts +22 -38
  108. package/front_end/panels/application/BackForwardCacheTreeElement.ts +2 -2
  109. package/front_end/panels/application/BounceTrackingMitigationsTreeElement.ts +2 -2
  110. package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -5
  111. package/front_end/panels/application/InterestGroupTreeElement.ts +2 -2
  112. package/front_end/panels/application/KeyValueStorageItemsView.ts +3 -2
  113. package/front_end/panels/application/OpenedWindowDetailsView.ts +2 -2
  114. package/front_end/panels/application/OriginTrialTreeView.ts +1 -1
  115. package/front_end/panels/application/PreloadingTreeElement.ts +3 -3
  116. package/front_end/panels/application/ReportingApiTreeElement.ts +2 -2
  117. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +3 -3
  118. package/front_end/panels/application/SharedStorageListTreeElement.ts +2 -2
  119. package/front_end/panels/application/StorageBucketsTreeElement.ts +3 -3
  120. package/front_end/panels/application/StorageView.ts +2 -2
  121. package/front_end/panels/application/TrustTokensTreeElement.ts +2 -2
  122. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -2
  123. package/front_end/panels/application/components/PermissionsPolicySection.ts +1 -1
  124. package/front_end/panels/application/components/ProtocolHandlersView.ts +1 -1
  125. package/front_end/panels/application/components/SharedStorageMetadataView.ts +1 -1
  126. package/front_end/panels/application/components/TrustTokensView.ts +1 -1
  127. package/front_end/panels/application/preloading/PreloadingView.ts +46 -45
  128. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +80 -75
  129. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +169 -133
  130. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +1 -1
  131. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +74 -93
  132. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +143 -118
  133. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +52 -12
  134. package/front_end/panels/application/preloading/components/components.ts +0 -2
  135. package/front_end/panels/changes/ChangesSidebar.ts +2 -0
  136. package/front_end/panels/changes/CombinedDiffView.ts +2 -0
  137. package/front_end/panels/common/Annotation.ts +184 -0
  138. package/front_end/panels/common/AnnotationManager.ts +208 -0
  139. package/front_end/panels/common/ExtensionView.ts +47 -0
  140. package/front_end/panels/common/PersistenceUtils.ts +22 -26
  141. package/front_end/panels/common/annotation.css +40 -0
  142. package/front_end/panels/common/common.ts +2 -0
  143. package/front_end/panels/console/ConsoleInsightTeaser.ts +187 -5
  144. package/front_end/panels/console/ConsolePinPane.ts +437 -217
  145. package/front_end/panels/console/ConsolePrompt.ts +36 -227
  146. package/front_end/panels/console/ConsoleView.ts +69 -68
  147. package/front_end/panels/console/ConsoleViewMessage.ts +18 -14
  148. package/front_end/panels/console/consoleInsightTeaser.css +23 -0
  149. package/front_end/panels/console/consoleView.css +1 -1
  150. package/front_end/panels/console_counters/WarningErrorCounter.ts +2 -0
  151. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  152. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +89 -0
  153. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +5 -5
  154. package/front_end/panels/elements/ComputedStyleWidget.ts +16 -5
  155. package/front_end/panels/elements/ElementsPanel.ts +75 -0
  156. package/front_end/panels/elements/ElementsSidebarPane.ts +1 -3
  157. package/front_end/panels/elements/ElementsTreeElement.ts +459 -451
  158. package/front_end/panels/elements/ElementsTreeOutline.ts +48 -15
  159. package/front_end/panels/elements/ShortcutTreeElement.ts +2 -2
  160. package/front_end/panels/elements/StyleEditorWidget.ts +2 -2
  161. package/front_end/panels/elements/StylePropertyTreeElement.ts +21 -20
  162. package/front_end/panels/elements/StylesSidebarPane.ts +5 -6
  163. package/front_end/panels/elements/TopLayerContainer.ts +2 -2
  164. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
  165. package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +1 -1
  166. package/front_end/panels/elements/components/QueryContainer.ts +1 -1
  167. package/front_end/panels/elements/components/StylePropertyEditor.ts +1 -1
  168. package/front_end/panels/emulation/DeviceModeWrapper.ts +48 -3
  169. package/front_end/panels/emulation/MediaQueryInspector.ts +171 -125
  170. package/front_end/panels/explain/components/ConsoleInsight.ts +181 -154
  171. package/front_end/panels/explain/components/consoleInsight.css +348 -347
  172. package/front_end/panels/issues/AffectedPermissionElementsView.ts +46 -0
  173. package/front_end/panels/issues/AffectedResourcesView.ts +2 -2
  174. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +2 -2
  175. package/front_end/panels/issues/IssueKindView.ts +2 -2
  176. package/front_end/panels/issues/IssueView.ts +6 -4
  177. package/front_end/panels/issues/IssuesPane.ts +6 -0
  178. package/front_end/panels/js_timeline/js_timeline-meta.ts +4 -2
  179. package/front_end/panels/layer_viewer/LayerDetailsView.ts +165 -149
  180. package/front_end/panels/layer_viewer/Layers3DView.ts +131 -78
  181. package/front_end/panels/lighthouse/LighthouseStatusView.ts +149 -100
  182. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +91 -65
  183. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +25 -34
  184. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +1 -1
  185. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +61 -45
  186. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +171 -152
  187. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +50 -51
  188. package/front_end/panels/linear_memory_inspector/components/valueInterpreterDisplay.css +0 -13
  189. package/front_end/panels/linear_memory_inspector/components/valueInterpreterSettings.css +20 -18
  190. package/front_end/panels/media/PlayerListView.ts +1 -1
  191. package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -1
  192. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +2 -2
  193. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +2 -3
  194. package/front_end/panels/network/NetworkDataGridNode.ts +17 -9
  195. package/front_end/panels/network/NetworkFrameGrouper.ts +2 -2
  196. package/front_end/panels/network/NetworkItemView.ts +46 -7
  197. package/front_end/panels/network/NetworkLogView.ts +10 -11
  198. package/front_end/panels/network/NetworkLogViewColumns.ts +3 -3
  199. package/front_end/panels/network/NetworkPanel.ts +63 -1
  200. package/front_end/panels/network/RequestCookiesView.ts +2 -2
  201. package/front_end/panels/network/RequestInitiatorView.ts +146 -113
  202. package/front_end/panels/network/SignedExchangeInfoView.ts +2 -2
  203. package/front_end/panels/network/components/RequestHeaderSection.css +51 -50
  204. package/front_end/panels/network/components/RequestHeaderSection.ts +81 -71
  205. package/front_end/panels/network/components/RequestHeadersView.css +1 -1
  206. package/front_end/panels/network/components/RequestHeadersView.ts +26 -11
  207. package/front_end/panels/network/components/RequestTrustTokensView.css +24 -14
  208. package/front_end/panels/network/components/RequestTrustTokensView.ts +145 -142
  209. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +3 -3
  210. package/front_end/panels/profiler/IsolateSelector.ts +2 -1
  211. package/front_end/panels/profiler/ProfileDataGrid.ts +2 -2
  212. package/front_end/panels/profiler/ProfilesPanel.ts +2 -2
  213. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  214. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +49 -33
  215. package/front_end/panels/recorder/RecorderController.ts +2 -3
  216. package/front_end/panels/recorder/components/ControlButton.ts +68 -34
  217. package/front_end/panels/recorder/components/CreateRecordingView.ts +10 -7
  218. package/front_end/panels/recorder/components/ExtensionView.ts +1 -1
  219. package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
  220. package/front_end/panels/recorder/components/RecordingView.ts +82 -89
  221. package/front_end/panels/recorder/components/ReplaySection.ts +226 -145
  222. package/front_end/panels/recorder/{controllers → components}/SelectorPicker.ts +129 -52
  223. package/front_end/panels/recorder/components/StepEditor.ts +21 -67
  224. package/front_end/panels/recorder/components/StepView.ts +223 -181
  225. package/front_end/panels/recorder/components/TimelineSection.ts +69 -48
  226. package/front_end/panels/recorder/components/components.ts +2 -2
  227. package/front_end/panels/recorder/components/selectorPicker.css +14 -0
  228. package/front_end/panels/recorder/components/stepEditor.css +0 -5
  229. package/front_end/panels/recorder/components/stepView.css +196 -198
  230. package/front_end/panels/recorder/extensions/ExtensionManager.ts +4 -48
  231. package/front_end/panels/recorder/models/ScreenshotUtils.ts +17 -11
  232. package/front_end/panels/screencast/ScreencastView.ts +8 -8
  233. package/front_end/panels/search/SearchView.ts +1 -1
  234. package/front_end/panels/security/CookieControlsTreeElement.ts +2 -2
  235. package/front_end/panels/security/CookieControlsView.ts +9 -16
  236. package/front_end/panels/security/CookieReportTreeElement.ts +2 -2
  237. package/front_end/panels/security/SecurityPanel.ts +5 -5
  238. package/front_end/panels/security/SecurityPanelSidebar.ts +3 -4
  239. package/front_end/panels/settings/KeybindsSettingsTab.ts +4 -4
  240. package/front_end/panels/settings/SettingsScreen.ts +2 -3
  241. package/front_end/panels/settings/components/SyncSection.ts +0 -1
  242. package/front_end/panels/snippets/SnippetsQuickOpen.ts +16 -8
  243. package/front_end/panels/sources/BreakpointEditDialog.ts +3 -3
  244. package/front_end/panels/sources/BreakpointsView.ts +1 -1
  245. package/front_end/panels/sources/CSSPlugin.ts +6 -6
  246. package/front_end/panels/sources/CallStackSidebarPane.ts +63 -78
  247. package/front_end/panels/sources/DebuggerPausedMessage.ts +3 -3
  248. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +39 -30
  249. package/front_end/panels/sources/GoToLineQuickOpen.ts +11 -7
  250. package/front_end/panels/sources/NavigatorView.ts +2 -2
  251. package/front_end/panels/sources/OpenFileQuickOpen.ts +11 -15
  252. package/front_end/panels/sources/OutlineQuickOpen.ts +23 -26
  253. package/front_end/panels/sources/SourcesPanel.ts +1 -11
  254. package/front_end/panels/sources/SourcesView.ts +2 -2
  255. package/front_end/panels/sources/TabbedEditorContainer.ts +13 -11
  256. package/front_end/panels/sources/ThreadsSidebarPane.ts +96 -101
  257. package/front_end/panels/sources/UISourceCodeFrame.ts +5 -5
  258. package/front_end/panels/sources/threadsSidebarPane.css +6 -5
  259. package/front_end/panels/timeline/InteractionsTrackAppender.ts +2 -3
  260. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +23 -33
  261. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +4 -3
  262. package/front_end/panels/timeline/TimelineFlameChartView.ts +12 -0
  263. package/front_end/panels/timeline/TimelineHistoryManager.ts +2 -2
  264. package/front_end/panels/timeline/TimelinePanel.ts +17 -14
  265. package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +1 -1
  266. package/front_end/panels/timeline/components/IgnoreListSetting.ts +164 -142
  267. package/front_end/panels/timeline/components/InteractionBreakdown.ts +48 -28
  268. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +18 -23
  269. package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
  270. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +99 -74
  271. package/front_end/panels/timeline/components/NetworkThrottlingSelector.ts +1 -1
  272. package/front_end/panels/timeline/components/OriginMap.ts +1 -1
  273. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +9 -12
  274. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +262 -291
  275. package/front_end/panels/timeline/components/Utils.ts +25 -0
  276. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +210 -146
  277. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +8 -20
  278. package/front_end/panels/timeline/components/insights/Cache.ts +0 -9
  279. package/front_end/panels/timeline/components/insights/Checklist.ts +1 -1
  280. package/front_end/panels/timeline/components/insights/DOMSize.ts +12 -34
  281. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +0 -9
  282. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +0 -9
  283. package/front_end/panels/timeline/components/insights/EventRef.ts +47 -109
  284. package/front_end/panels/timeline/components/insights/FontDisplay.ts +0 -9
  285. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +0 -9
  286. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +0 -9
  287. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +2 -11
  288. package/front_end/panels/timeline/components/insights/ImageRef.ts +112 -0
  289. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +91 -0
  290. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +0 -9
  291. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +4 -11
  292. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +0 -9
  293. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +0 -9
  294. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +7 -22
  295. package/front_end/panels/timeline/components/insights/NodeLink.ts +68 -43
  296. package/front_end/panels/timeline/components/insights/README.md +2 -3
  297. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +0 -9
  298. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +0 -9
  299. package/front_end/panels/timeline/components/insights/ThirdParties.ts +0 -9
  300. package/front_end/panels/timeline/components/insights/Viewport.ts +7 -19
  301. package/front_end/panels/timeline/components/insights/baseInsightComponent.css +5 -0
  302. package/front_end/panels/timeline/components/insights/insights.ts +2 -0
  303. package/front_end/panels/timeline/components/interactionBreakdown.css +15 -13
  304. package/front_end/panels/timeline/enable-easter-egg.js +7 -3
  305. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
  306. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +1 -1
  307. package/front_end/panels/timeline/timeline-meta.ts +3 -2
  308. package/front_end/panels/utils/utils.ts +1 -0
  309. package/front_end/third_party/chromium/README.chromium +1 -1
  310. package/front_end/third_party/puppeteer/README.chromium +2 -2
  311. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.d.ts +96 -0
  312. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.d.ts.map +1 -0
  313. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.js +8 -0
  314. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.js.map +1 -0
  315. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +87 -0
  316. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  317. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  318. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.d.ts +2 -6
  319. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.d.ts.map +1 -1
  320. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.js +5 -24
  321. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.js.map +1 -1
  322. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +5 -0
  323. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  324. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  325. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts +1 -0
  326. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts.map +1 -1
  327. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.js.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.d.ts +18 -0
  329. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.d.ts.map +1 -0
  330. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.js +42 -0
  331. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.js.map +1 -0
  332. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +4 -1
  333. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  334. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +10 -0
  335. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.d.ts +27 -0
  337. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.d.ts.map +1 -0
  338. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.js +90 -0
  339. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.js.map +1 -0
  340. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -1
  341. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +3 -2
  343. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  344. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +4 -1
  345. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  346. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +5 -2
  347. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  348. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +4 -0
  349. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  350. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +14 -2
  351. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  352. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js +7 -0
  354. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +1 -1
  356. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.d.ts +18 -0
  358. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.d.ts.map +1 -0
  359. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.js +30 -0
  360. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.js.map +1 -0
  361. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +5 -2
  362. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  363. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +22 -3
  364. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  365. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpSession.d.ts +1 -1
  366. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpSession.d.ts.map +1 -1
  367. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.d.ts +2 -3
  368. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.d.ts.map +1 -1
  369. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.js +4 -6
  370. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.js.map +1 -1
  371. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts +2 -2
  372. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  373. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js +1 -1
  374. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
  375. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +2 -0
  376. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  377. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +8 -0
  378. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  379. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  380. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js +8 -3
  381. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js.map +1 -1
  382. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts +1 -0
  383. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts.map +1 -1
  384. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js +1 -0
  385. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js.map +1 -1
  386. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +30 -0
  387. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  388. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +15 -0
  389. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  390. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  391. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts +1 -1
  392. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  393. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -13
  394. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  395. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +5 -3
  396. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  397. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.js +17 -0
  398. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.js.map +1 -1
  399. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  400. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  401. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  402. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  403. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  404. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  405. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +221 -4
  406. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +182 -95
  407. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.d.ts +96 -0
  408. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.d.ts.map +1 -0
  409. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.js +7 -0
  410. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.js.map +1 -0
  411. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +87 -0
  412. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  413. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  414. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.d.ts +2 -6
  415. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.d.ts.map +1 -1
  416. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.js +4 -22
  417. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.js.map +1 -1
  418. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +5 -0
  419. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  420. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  421. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts +1 -0
  422. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts.map +1 -1
  423. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.js.map +1 -1
  424. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.d.ts +18 -0
  425. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.d.ts.map +1 -0
  426. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.js +38 -0
  427. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.js.map +1 -0
  428. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +4 -1
  429. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  430. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +10 -0
  431. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  432. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.d.ts +27 -0
  433. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.d.ts.map +1 -0
  434. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js +85 -0
  435. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js.map +1 -0
  436. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -1
  437. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  438. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +3 -2
  439. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  440. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +4 -1
  441. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  442. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +5 -2
  443. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  444. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +4 -0
  445. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  446. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +14 -2
  447. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  448. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts.map +1 -1
  449. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js +7 -0
  450. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js.map +1 -1
  451. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +1 -1
  452. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  453. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.d.ts +18 -0
  454. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.d.ts.map +1 -0
  455. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.js +26 -0
  456. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.js.map +1 -0
  457. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +5 -2
  458. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  459. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +22 -3
  460. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  461. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpSession.d.ts +1 -1
  462. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpSession.d.ts.map +1 -1
  463. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.d.ts +2 -3
  464. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.d.ts.map +1 -1
  465. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js +2 -4
  466. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js.map +1 -1
  467. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts +2 -2
  468. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  469. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +2 -2
  470. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
  471. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +2 -0
  472. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  473. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +8 -0
  474. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  475. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  476. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js +8 -3
  477. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js.map +1 -1
  478. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts +1 -0
  479. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts.map +1 -1
  480. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js +1 -0
  481. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js.map +1 -1
  482. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +31 -1
  483. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
  484. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +15 -0
  485. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  486. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts +1 -1
  487. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  488. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -13
  489. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  490. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +5 -3
  491. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  492. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js +16 -1
  493. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js.map +1 -1
  494. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  495. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  496. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  497. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  498. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  499. package/front_end/third_party/puppeteer/package/lib/types.d.ts +221 -4
  500. package/front_end/third_party/puppeteer/package/package.json +4 -4
  501. package/front_end/third_party/puppeteer/package/src/api/BluetoothEmulation.ts +103 -0
  502. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +96 -1
  503. package/front_end/third_party/puppeteer/package/src/api/DeviceRequestPrompt.ts +2 -10
  504. package/front_end/third_party/puppeteer/package/src/api/Page.ts +6 -0
  505. package/front_end/third_party/puppeteer/package/src/api/api.ts +1 -0
  506. package/front_end/third_party/puppeteer/package/src/bidi/BluetoothEmulation.ts +52 -0
  507. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +15 -0
  508. package/front_end/third_party/puppeteer/package/src/bidi/DeviceRequestPrompt.ts +138 -0
  509. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +7 -3
  510. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +10 -2
  511. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +30 -2
  512. package/front_end/third_party/puppeteer/package/src/bidi/util.ts +8 -0
  513. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +1 -1
  514. package/front_end/third_party/puppeteer/package/src/cdp/BluetoothEmulation.ts +47 -0
  515. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +33 -3
  516. package/front_end/third_party/puppeteer/package/src/cdp/CdpSession.ts +1 -1
  517. package/front_end/third_party/puppeteer/package/src/cdp/DeviceRequestPrompt.ts +3 -8
  518. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +2 -2
  519. package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +9 -4
  520. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +13 -0
  521. package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +8 -3
  522. package/front_end/third_party/puppeteer/package/src/cdp/cdp.ts +1 -0
  523. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +45 -1
  524. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +20 -0
  525. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +5 -17
  526. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +23 -7
  527. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  528. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  529. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +4 -0
  530. package/front_end/ui/components/adorners/Adorner.ts +20 -0
  531. package/front_end/ui/components/annotations/AnnotationRepository.ts +154 -14
  532. package/front_end/ui/components/buttons/Button.ts +1 -1
  533. package/front_end/ui/components/buttons/FloatingButton.ts +1 -1
  534. package/front_end/ui/components/highlighting/HighlightElement.ts +15 -2
  535. package/front_end/ui/components/icon_button/FileSourceIcon.ts +1 -1
  536. package/front_end/ui/components/icon_button/IconButton.ts +1 -1
  537. package/front_end/ui/components/icon_button/icon_button.ts +0 -2
  538. package/front_end/ui/components/issue_counter/IssueCounter.ts +1 -1
  539. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +1 -1
  540. package/front_end/ui/components/markdown_view/MarkdownImage.ts +3 -3
  541. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +1 -1
  542. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +1 -1
  543. package/front_end/ui/components/snackbars/Snackbars.docs.ts +0 -1
  544. package/front_end/ui/components/survey_link/SurveyLink.ts +1 -1
  545. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +12 -3
  546. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +182 -0
  547. package/front_end/ui/components/text_editor/config.ts +2 -2
  548. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  549. package/front_end/ui/helpers/OpenInNewTab.ts +5 -1
  550. package/front_end/ui/i18n/i18n.ts +9 -9
  551. package/front_end/ui/kit/cards/Card.docs.ts +43 -0
  552. package/front_end/ui/kit/icons/Icon.docs.ts +34 -0
  553. package/front_end/ui/{components/icon_button → kit/icons}/Icon.ts +4 -4
  554. package/front_end/ui/kit/kit.ts +2 -0
  555. package/front_end/ui/kit/link/Link.docs.ts +15 -0
  556. package/front_end/ui/kit/link/Link.ts +151 -0
  557. package/front_end/ui/kit/link/link.css +27 -0
  558. package/front_end/ui/legacy/EmptyWidget.ts +6 -0
  559. package/front_end/ui/legacy/Floaty.ts +442 -0
  560. package/front_end/ui/legacy/Infobar.ts +3 -3
  561. package/front_end/ui/legacy/InspectorView.ts +15 -3
  562. package/front_end/ui/legacy/ReportView.ts +1 -1
  563. package/front_end/ui/legacy/SearchableView.ts +2 -2
  564. package/front_end/ui/legacy/SelectMenu.docs.ts +0 -1
  565. package/front_end/ui/legacy/SoftContextMenu.ts +5 -5
  566. package/front_end/ui/legacy/SoftDropDown.ts +2 -2
  567. package/front_end/ui/legacy/TabbedPane.ts +139 -61
  568. package/front_end/ui/legacy/Toolbar.ts +3 -3
  569. package/front_end/ui/legacy/Treeoutline.ts +2 -2
  570. package/front_end/ui/legacy/UIUtils.ts +4 -4
  571. package/front_end/ui/legacy/ViewManager.ts +4 -4
  572. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +8 -8
  573. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +4 -4
  574. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +5 -5
  575. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +36 -36
  576. package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +2 -2
  577. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +5 -5
  578. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +3 -3
  579. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +22 -37
  580. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +31 -1
  581. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +2 -2
  582. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
  583. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +22 -29
  584. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +8 -15
  585. package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +11 -14
  586. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -11
  587. package/front_end/ui/legacy/floaty.css +77 -0
  588. package/front_end/ui/legacy/legacy.ts +2 -0
  589. package/front_end/ui/visual_logging/KnownContextValues.ts +6 -0
  590. package/inspector_overlay/loadCSS.rollup.js +5 -4
  591. package/mcp/mcp.ts +1 -0
  592. package/package.json +2 -2
  593. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +0 -99
  594. package/front_end/panels/recorder/components/SelectButton.ts +0 -304
  595. package/front_end/panels/recorder/controllers/controllers.ts +0 -7
  596. package/front_end/ui/components/chrome_link/ChromeLink.ts +0 -76
  597. package/front_end/ui/components/chrome_link/chromeLink.css +0 -12
  598. package/front_end/ui/components/chrome_link/chrome_link.ts +0 -9
  599. package/front_end/ui/components/icon_button/Icon.docs.ts +0 -78
  600. /package/front_end/panels/recorder/components/{selectButton.css → replaySection.css} +0 -0
  601. /package/front_end/ui/{components/icon_button → kit/icons}/icon.css +0 -0
@@ -300,3 +300,28 @@ export function determineCompareRating(
300
300
 
301
301
  return 'similar';
302
302
  }
303
+
304
+ /**
305
+ * Returns true if LCP or INP are worse in the field than what was observed locally.
306
+ *
307
+ * CLS is ignored because the guidance of applying throttling or device emulation doesn't
308
+ * correlate as much with observing a more average user experience.
309
+ */
310
+ export function isFieldWorseThanLocal(local: {lcp?: Trace.Types.Timing.Milli, inp?: Trace.Types.Timing.Milli}, field: {
311
+ lcp?: Trace.Types.Timing.Milli,
312
+ inp?: Trace.Types.Timing.Milli,
313
+ }): boolean {
314
+ if (local.lcp !== undefined && field.lcp !== undefined) {
315
+ if (determineCompareRating('LCP', local.lcp, field.lcp) === 'better') {
316
+ return true;
317
+ }
318
+ }
319
+
320
+ if (local.inp !== undefined && field.inp !== undefined) {
321
+ if (determineCompareRating('LCP', local.inp, field.inp) === 'better') {
322
+ return true;
323
+ }
324
+ }
325
+
326
+ return false;
327
+ }
@@ -1,7 +1,7 @@
1
1
  // Copyright 2024 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
- /* eslint-disable @devtools/no-lit-render-outside-of-view */
4
+ /* eslint-disable @devtools/no-imperative-dom-api */
5
5
 
6
6
  import '../../../../ui/components/markdown_view/markdown_view.js';
7
7
 
@@ -12,7 +12,6 @@ import * as Badges from '../../../../models/badges/badges.js';
12
12
  import type {InsightModel} from '../../../../models/trace/insights/types.js';
13
13
  import type * as Trace from '../../../../models/trace/trace.js';
14
14
  import * as Buttons from '../../../../ui/components/buttons/buttons.js';
15
- import * as ComponentHelpers from '../../../../ui/components/helpers/helpers.js';
16
15
  import * as UI from '../../../../ui/legacy/legacy.js';
17
16
  import * as Lit from '../../../../ui/lit/lit.js';
18
17
  import * as VisualLogging from '../../../../ui/visual_logging/visual_logging.js';
@@ -66,6 +65,136 @@ const UIStrings = {
66
65
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/insights/BaseInsightComponent.ts', UIStrings);
67
66
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
68
67
 
68
+ interface ViewInput {
69
+ internalName: string;
70
+ model: InsightModel;
71
+ selected: boolean;
72
+ isAIAssistanceContext: boolean;
73
+ canShowAskAI: boolean;
74
+ estimatedSavingsString: string|null;
75
+ estimatedSavingsAriaLabel: string|null;
76
+ renderContent: () => Lit.LitTemplate;
77
+ dispatchInsightToggle: () => void;
78
+ onHeaderKeyDown: () => void;
79
+ onAskAIButtonClick: () => void;
80
+ }
81
+
82
+ type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
83
+
84
+ const DEFAULT_VIEW: View = (input, output, target) => {
85
+ const {
86
+ internalName,
87
+ model,
88
+ selected,
89
+ estimatedSavingsString,
90
+ estimatedSavingsAriaLabel,
91
+ isAIAssistanceContext,
92
+ canShowAskAI,
93
+ dispatchInsightToggle,
94
+ renderContent,
95
+ onHeaderKeyDown,
96
+ onAskAIButtonClick,
97
+ } = input;
98
+
99
+ const containerClasses = Lit.Directives.classMap({
100
+ insight: true,
101
+ closed: !selected || isAIAssistanceContext,
102
+ 'ai-assistance-context': isAIAssistanceContext,
103
+ });
104
+
105
+ let ariaLabel = `${i18nString(UIStrings.viewDetails, {PH1: model.title})}`;
106
+ if (estimatedSavingsAriaLabel) {
107
+ // space prefix is deliberate to add a gap after the view details text
108
+ ariaLabel += ` ${estimatedSavingsAriaLabel}`;
109
+ }
110
+
111
+ function renderInsightContent(): Lit.LitTemplate {
112
+ if (!selected) {
113
+ return Lit.nothing;
114
+ }
115
+
116
+ const aiLabel = 'Debug with AI';
117
+ const ariaLabel = `Ask AI about ${model.title} insight`;
118
+ const content = renderContent();
119
+
120
+ // clang-format off
121
+ return html`
122
+ <div class="insight-body">
123
+ <div class="insight-description">${md(model.description)}</div>
124
+ <div class="insight-content">${content}</div>
125
+ ${canShowAskAI ? html`
126
+ <div class="ask-ai-btn-wrap">
127
+ <devtools-button class="ask-ai"
128
+ .variant=${Buttons.Button.Variant.OUTLINED}
129
+ .iconName=${'smart-assistant'}
130
+ data-insights-ask-ai
131
+ jslog=${VisualLogging.action(`timeline.insight-ask-ai.${internalName}`).track({click: true})}
132
+ @click=${onAskAIButtonClick}
133
+ aria-label=${ariaLabel}
134
+ >${aiLabel}</devtools-button>
135
+ </div>
136
+ `: Lit.nothing}
137
+ </div>`;
138
+ // clang-format on
139
+ }
140
+
141
+ function renderHoverIcon(): Lit.LitTemplate {
142
+ if (isAIAssistanceContext) {
143
+ return Lit.nothing;
144
+ }
145
+
146
+ const containerClasses = Lit.Directives.classMap({
147
+ 'insight-hover-icon': true,
148
+ active: selected,
149
+ });
150
+
151
+ // clang-format off
152
+ return html`
153
+ <div class=${containerClasses} inert>
154
+ <devtools-button .data=${{
155
+ variant: Buttons.Button.Variant.ICON,
156
+ iconName: 'chevron-down',
157
+ size: Buttons.Button.Size.SMALL,
158
+ } as Buttons.Button.ButtonData}
159
+ ></devtools-button>
160
+ </div>
161
+ `;
162
+ // clang-format on
163
+ }
164
+
165
+ // clang-format off
166
+ Lit.render(html`
167
+ <style>${baseInsightComponentStyles}</style>
168
+ <div class=${containerClasses}>
169
+ <header @click=${dispatchInsightToggle}
170
+ @keydown=${onHeaderKeyDown}
171
+ jslog=${VisualLogging.action(`timeline.toggle-insight.${internalName}`).track({click: true})}
172
+ data-insight-header-title=${model?.title}
173
+ tabIndex="0"
174
+ role="button"
175
+ aria-expanded=${selected}
176
+ aria-label=${ariaLabel}
177
+ >
178
+ ${renderHoverIcon()}
179
+ <h3 class="insight-title">${model?.title}</h3>
180
+ ${estimatedSavingsString ?
181
+ html`
182
+ <slot name="insight-savings" class="insight-savings">
183
+ <span title=${estimatedSavingsAriaLabel ?? ''}>${estimatedSavingsString}</span>
184
+ </slot>
185
+ </div>`
186
+ : Lit.nothing}
187
+ </header>
188
+ ${renderInsightContent()}
189
+ </div>
190
+ `, target);
191
+ // clang-format on
192
+
193
+ if (selected) {
194
+ requestAnimationFrame(() => requestAnimationFrame(() => target.scrollIntoViewIfNeeded()));
195
+ }
196
+ };
197
+
69
198
  export interface BaseInsightData {
70
199
  /** The trace bounds for the insight set that contains this insight. */
71
200
  bounds: Trace.Types.Timing.TraceWindowMicro|null;
@@ -73,26 +202,32 @@ export interface BaseInsightData {
73
202
  insightSetKey: string|null;
74
203
  }
75
204
 
76
- export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLElement {
205
+ export abstract class BaseInsightComponent<T extends InsightModel> extends UI.Widget.Widget {
206
+ #view: View;
77
207
  abstract internalName: string;
78
208
 
79
- // So we can use the TypeScript BaseInsight class without getting warnings
80
- // about litTagName. Every child should overwrite this.
81
- static readonly litTagName = Lit.StaticHtml.literal``;
82
- protected readonly shadow = this.attachShadow({mode: 'open'});
83
-
84
209
  // This flag tracks if the Insights AI feature is enabled within Chrome for
85
210
  // the active user.
86
211
  #askAiEnabled = false;
87
-
212
+ // Tracks if this component is rendered withing the AI assistance panel.
213
+ // Currently only relevant to GreenDev.
214
+ #isAIAssistanceContext = false;
88
215
  #selected = false;
89
216
  #model: T|null = null;
90
217
  #agentFocus: AIAssistance.AIContext.AgentFocus|null = null;
91
218
  #fieldMetrics: Trace.Insights.Common.CrUXFieldMetricResults|null = null;
219
+ #parsedTrace: Trace.TraceModel.ParsedTrace|null = null;
220
+ #initialOverlays: Trace.Types.Overlays.Overlay[]|null = null;
221
+
222
+ constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
223
+ super(element, {useShadowDom: true});
224
+ this.#view = view;
225
+ }
92
226
 
93
227
  get model(): T|null {
94
228
  return this.#model;
95
229
  }
230
+
96
231
  protected data: BaseInsightData = {
97
232
  bounds: null,
98
233
  insightSetKey: null,
@@ -102,11 +237,6 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
102
237
  selectedRowEl: null,
103
238
  selectionIsSticky: false,
104
239
  };
105
- #initialOverlays: Trace.Types.Overlays.Overlay[]|null = null;
106
-
107
- protected scheduleRender(): void {
108
- void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
109
- }
110
240
 
111
241
  // Insights that do support the AI feature can override this to return true.
112
242
  // The "Ask AI" button will only be shown for an Insight if this
@@ -116,37 +246,49 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
116
246
  return false;
117
247
  }
118
248
 
119
- connectedCallback(): void {
120
- this.setAttribute('jslog', `${VisualLogging.section(`timeline.insights.${this.internalName}`)}`);
249
+ override wasShown(): void {
250
+ super.wasShown();
251
+
121
252
  // Used for unit test purposes when querying the DOM.
122
- this.dataset.insightName = this.internalName;
253
+ this.element.dataset.insightName = this.internalName;
123
254
 
124
255
  const {devToolsAiAssistancePerformanceAgent} = Root.Runtime.hostConfig;
125
256
  this.#askAiEnabled = Boolean(devToolsAiAssistancePerformanceAgent?.enabled);
126
257
  }
127
258
 
259
+ set isAIAssistanceContext(isAIAssistanceContext: boolean) {
260
+ this.#isAIAssistanceContext = isAIAssistanceContext;
261
+ this.requestUpdate();
262
+ }
263
+
128
264
  set selected(selected: boolean) {
129
265
  if (!this.#selected && selected) {
130
266
  const options = this.getOverlayOptionsForInitialOverlays();
131
- this.dispatchEvent(new SidebarInsight.InsightProvideOverlays(this.getInitialOverlays(), options));
267
+ this.element.dispatchEvent(new SidebarInsight.InsightProvideOverlays(this.getInitialOverlays(), options));
132
268
  }
133
269
 
134
- this.#selected = selected;
135
- void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
270
+ if (this.#selected !== selected) {
271
+ this.#selected = selected;
272
+ this.requestUpdate();
273
+ }
136
274
  }
137
275
 
138
276
  get selected(): boolean {
139
277
  return this.#selected;
140
278
  }
141
279
 
280
+ set parsedTrace(trace: Trace.TraceModel.ParsedTrace|null) {
281
+ this.#parsedTrace = trace;
282
+ }
283
+
142
284
  set model(model: T) {
143
285
  this.#model = model;
144
- void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
286
+ this.requestUpdate();
145
287
  }
146
288
 
147
289
  set insightSetKey(insightSetKey: string|null) {
148
290
  this.data.insightSetKey = insightSetKey;
149
- void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
291
+ this.requestUpdate();
150
292
  }
151
293
 
152
294
  get bounds(): Trace.Types.Timing.TraceWindowMicro|null {
@@ -155,7 +297,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
155
297
 
156
298
  set bounds(bounds: Trace.Types.Timing.TraceWindowMicro|null) {
157
299
  this.data.bounds = bounds;
158
- void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
300
+ this.requestUpdate();
159
301
  }
160
302
 
161
303
  set agentFocus(agentFocus: AIAssistance.AIContext.AgentFocus) {
@@ -175,14 +317,27 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
175
317
  }
176
318
 
177
319
  #dispatchInsightToggle(): void {
178
- if (!this.data.insightSetKey || !this.model) {
320
+ if (!this.data.insightSetKey || !this.#model) {
179
321
  // Shouldn't happen, but needed to satisfy TS.
180
322
  return;
181
323
  }
182
324
 
325
+ if (this.#parsedTrace && UI.Floaty.enabled()) {
326
+ const floatyHandled = UI.Floaty.onFloatyClick({
327
+ type: UI.Floaty.FloatyContextTypes.PERFORMANCE_INSIGHT,
328
+ data: {
329
+ insight: this.#model,
330
+ trace: this.#parsedTrace,
331
+ }
332
+ });
333
+ if (floatyHandled) {
334
+ return;
335
+ }
336
+ }
337
+
183
338
  const focus = UI.Context.Context.instance().flavor(AIAssistance.AIContext.AgentFocus);
184
339
  if (this.#selected) {
185
- this.dispatchEvent(new SidebarInsight.InsightDeactivated());
340
+ this.element.dispatchEvent(new SidebarInsight.InsightDeactivated());
186
341
 
187
342
  // Clear agent (but only if currently focused on an insight).
188
343
  if (focus) {
@@ -192,7 +347,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
192
347
  }
193
348
 
194
349
  if (focus) {
195
- UI.Context.Context.instance().setFlavor(AIAssistance.AIContext.AgentFocus, focus.withInsight(this.model));
350
+ UI.Context.Context.instance().setFlavor(AIAssistance.AIContext.AgentFocus, focus.withInsight(this.#model));
196
351
  }
197
352
 
198
353
  Badges.UserBadges.instance().recordAction(Badges.BadgeAction.PERFORMANCE_INSIGHT_CLICKED);
@@ -201,34 +356,14 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
201
356
  this.sharedTableState.selectedRowEl = null;
202
357
  this.sharedTableState.selectionIsSticky = false;
203
358
 
204
- this.dispatchEvent(new SidebarInsight.InsightActivated(this.model, this.data.insightSetKey));
205
- }
206
-
207
- #renderHoverIcon(insightIsActive: boolean): Lit.TemplateResult {
208
- // clang-format off
209
- const containerClasses = Lit.Directives.classMap({
210
- 'insight-hover-icon': true,
211
- active: insightIsActive,
212
- });
213
- return html`
214
- <div class=${containerClasses} inert>
215
- <devtools-button .data=${{
216
- variant: Buttons.Button.Variant.ICON,
217
- iconName: 'chevron-down',
218
- size: Buttons.Button.Size.SMALL,
219
- } as Buttons.Button.ButtonData}
220
- ></devtools-button>
221
- </div>
222
-
223
- `;
224
- // clang-format on
359
+ this.element.dispatchEvent(new SidebarInsight.InsightActivated(this.#model, this.data.insightSetKey));
225
360
  }
226
361
 
227
362
  /**
228
363
  * Ensure that if the user presses enter or space on a header, we treat it
229
364
  * like a click and toggle the insight.
230
365
  */
231
- #handleHeaderKeyDown(event: KeyboardEvent): void {
366
+ #onHeaderKeyDown(event: KeyboardEvent): void {
232
367
  if (event.key === 'Enter' || event.key === ' ') {
233
368
  event.preventDefault();
234
369
  event.stopPropagation();
@@ -252,12 +387,12 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
252
387
  }
253
388
 
254
389
  if (!overlays) {
255
- this.dispatchEvent(new SidebarInsight.InsightProvideOverlays(
390
+ this.element.dispatchEvent(new SidebarInsight.InsightProvideOverlays(
256
391
  this.getInitialOverlays(), this.getOverlayOptionsForInitialOverlays()));
257
392
  return;
258
393
  }
259
394
 
260
- this.dispatchEvent(new SidebarInsight.InsightProvideOverlays(overlays, options));
395
+ this.element.dispatchEvent(new SidebarInsight.InsightProvideOverlays(overlays, options));
261
396
  }
262
397
 
263
398
  getInitialOverlays(): Trace.Types.Overlays.Overlay[] {
@@ -270,17 +405,30 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
270
405
  }
271
406
 
272
407
  protected createOverlays(): Trace.Types.Overlays.Overlay[] {
273
- return this.model?.createOverlays?.() ?? [];
408
+ return this.#model?.createOverlays?.() ?? [];
274
409
  }
275
410
 
276
411
  protected abstract renderContent(): Lit.LitTemplate;
277
412
 
278
- #render(): void {
279
- if (!this.model) {
413
+ override performUpdate(): void {
414
+ if (!this.#model) {
280
415
  return;
281
416
  }
282
417
 
283
- this.#renderWithContent();
418
+ const input: ViewInput = {
419
+ internalName: this.internalName,
420
+ model: this.#model,
421
+ selected: this.#selected,
422
+ estimatedSavingsString: this.getEstimatedSavingsString(),
423
+ estimatedSavingsAriaLabel: this.#getEstimatedSavingsAriaLabel(),
424
+ isAIAssistanceContext: this.#isAIAssistanceContext,
425
+ canShowAskAI: this.#canShowAskAI(),
426
+ dispatchInsightToggle: () => this.#dispatchInsightToggle(),
427
+ renderContent: () => this.renderContent(),
428
+ onHeaderKeyDown: () => this.#onHeaderKeyDown,
429
+ onAskAIButtonClick: () => this.#onAskAIButtonClick(),
430
+ };
431
+ this.#view(input, undefined, this.contentElement);
284
432
  }
285
433
 
286
434
  getEstimatedSavingsTime(): Trace.Types.Timing.Milli|null {
@@ -288,7 +436,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
288
436
  }
289
437
 
290
438
  getEstimatedSavingsBytes(): number|null {
291
- return this.model?.wastedBytes ?? null;
439
+ return this.#model?.wastedBytes ?? null;
292
440
  }
293
441
 
294
442
  #getEstimatedSavingsTextParts(): {bytesString?: string, timeString?: string} {
@@ -331,7 +479,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
331
479
  return null;
332
480
  }
333
481
 
334
- #getEstimatedSavingsString(): string|null {
482
+ getEstimatedSavingsString(): string|null {
335
483
  const {bytesString, timeString} = this.#getEstimatedSavingsTextParts();
336
484
 
337
485
  if (timeString && bytesString) {
@@ -354,7 +502,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
354
502
  return null;
355
503
  }
356
504
 
357
- #askAIButtonClick(): void {
505
+ #onAskAIButtonClick(): void {
358
506
  if (!this.#agentFocus) {
359
507
  return;
360
508
  }
@@ -367,7 +515,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
367
515
 
368
516
  let focus = UI.Context.Context.instance().flavor(AIAssistance.AIContext.AgentFocus);
369
517
  if (focus) {
370
- focus = focus.withInsight(this.model);
518
+ focus = focus.withInsight(this.#model);
371
519
  } else {
372
520
  focus = this.#agentFocus;
373
521
  }
@@ -379,98 +527,14 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends HTMLE
379
527
  }
380
528
 
381
529
  #canShowAskAI(): boolean {
530
+ if (this.#isAIAssistanceContext) {
531
+ return false;
532
+ }
533
+
382
534
  const aiAvailable = Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue !==
383
535
  Root.Runtime.GenAiEnterprisePolicyValue.DISABLE &&
384
536
  this.#askAiEnabled && Root.Runtime.hostConfig.aidaAvailability?.enabled === true;
385
537
 
386
538
  return aiAvailable && this.hasAskAiSupport();
387
539
  }
388
-
389
- #renderInsightContent(insightModel: T): Lit.LitTemplate {
390
- if (!this.#selected) {
391
- return Lit.nothing;
392
- }
393
-
394
- const aiLabel = Root.Runtime.hostConfig.devToolsAiDebugWithAi?.enabled ||
395
- Root.Runtime.hostConfig.devToolsAiSubmenuPrompts?.enabled ?
396
- 'Debug with AI' :
397
- 'Ask AI';
398
- const ariaLabel = `${aiLabel} about ${insightModel.title} insight`;
399
- // Only render the insight body content if it is selected.
400
- // To avoid re-rendering triggered from elsewhere.
401
- const content = this.renderContent();
402
- // clang-format off
403
- return html`
404
- <div class="insight-body">
405
- <div class="insight-description">${md(insightModel.description)}</div>
406
- <div class="insight-content">${content}</div>
407
- ${this.#canShowAskAI() ? html`
408
- <div class="ask-ai-btn-wrap">
409
- <devtools-button class="ask-ai"
410
- .variant=${Buttons.Button.Variant.OUTLINED}
411
- .iconName=${'smart-assistant'}
412
- data-insights-ask-ai
413
- jslog=${VisualLogging.action(`timeline.insight-ask-ai.${this.internalName}`).track({click: true})}
414
- @click=${this.#askAIButtonClick}
415
- aria-label=${ariaLabel}
416
- >${aiLabel}</devtools-button>
417
- </div>
418
- `: Lit.nothing}
419
- </div>`;
420
- // clang-format on
421
- }
422
-
423
- #renderWithContent(): void {
424
- if (!this.#model) {
425
- Lit.render(Lit.nothing, this.shadow, {host: this});
426
- return;
427
- }
428
-
429
- const containerClasses = Lit.Directives.classMap({
430
- insight: true,
431
- closed: !this.#selected,
432
- });
433
- const estimatedSavingsString = this.#getEstimatedSavingsString();
434
- const estimatedSavingsAriaLabel = this.#getEstimatedSavingsAriaLabel();
435
-
436
- let ariaLabel = `${i18nString(UIStrings.viewDetails, {PH1: this.#model.title})}`;
437
- if (estimatedSavingsAriaLabel) {
438
- // space prefix is deliberate to add a gap after the view details text
439
- ariaLabel += ` ${estimatedSavingsAriaLabel}`;
440
- }
441
-
442
- // clang-format off
443
- const output = html`
444
- <style>${baseInsightComponentStyles}</style>
445
- <div class=${containerClasses}>
446
- <header @click=${this.#dispatchInsightToggle}
447
- @keydown=${this.#handleHeaderKeyDown}
448
- jslog=${VisualLogging.action(`timeline.toggle-insight.${this.internalName}`).track({click: true})}
449
- data-insight-header-title=${this.#model?.title}
450
- tabIndex="0"
451
- role="button"
452
- aria-expanded=${this.#selected}
453
- aria-label=${ariaLabel}
454
- >
455
- ${this.#renderHoverIcon(this.#selected)}
456
- <h3 class="insight-title">${this.#model?.title}</h3>
457
- ${estimatedSavingsString ?
458
- html`
459
- <slot name="insight-savings" class="insight-savings">
460
- <span title=${estimatedSavingsAriaLabel ?? ''}>${estimatedSavingsString}</span>
461
- </slot>
462
- </div>`
463
- : Lit.nothing}
464
- </header>
465
- ${this.#renderInsightContent(this.#model)}
466
- </div>
467
- `;
468
- // clang-format on
469
-
470
- Lit.render(output, this.shadow, {host: this});
471
-
472
- if (this.#selected) {
473
- requestAnimationFrame(() => requestAnimationFrame(() => this.scrollIntoViewIfNeeded()));
474
- }
475
- }
476
540
  }
@@ -2,23 +2,21 @@
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 './NodeLink.js';
6
-
7
5
  import * as i18n from '../../../../core/i18n/i18n.js';
6
+ import type * as Platform from '../../../../core/platform/platform.js';
8
7
  import type {CLSCulpritsInsightModel} from '../../../../models/trace/insights/CLSCulprits.js';
9
8
  import * as Trace from '../../../../models/trace/trace.js';
10
9
  import * as Lit from '../../../../ui/lit/lit.js';
11
10
 
12
11
  import {BaseInsightComponent} from './BaseInsightComponent.js';
13
12
  import {EventReferenceClick} from './EventRef.js';
14
- import type * as NodeLink from './NodeLink.js';
13
+ import {nodeLink} from './NodeLink.js';
15
14
 
16
15
  const {UIStrings, i18nString} = Trace.Insights.Models.CLSCulprits;
17
16
 
18
17
  const {html} = Lit;
19
18
 
20
19
  export class CLSCulprits extends BaseInsightComponent<CLSCulpritsInsightModel> {
21
- static override readonly litTagName = Lit.StaticHtml.literal`devtools-performance-cls-culprits`;
22
20
  override internalName = 'cls-culprits';
23
21
 
24
22
  protected override hasAskAiSupport(): boolean {
@@ -34,7 +32,7 @@ export class CLSCulprits extends BaseInsightComponent<CLSCulpritsInsightModel> {
34
32
  }
35
33
 
36
34
  #clickEvent(event: Trace.Types.Events.Event): void {
37
- this.dispatchEvent(new EventReferenceClick(event));
35
+ this.element.dispatchEvent(new EventReferenceClick(event));
38
36
  }
39
37
 
40
38
  #renderCulpritsSection(culprits: Trace.Insights.Models.CLSCulprits.LayoutShiftItem[]): Lit.LitTemplate {
@@ -52,13 +50,11 @@ export class CLSCulprits extends BaseInsightComponent<CLSCulpritsInsightModel> {
52
50
  return html`
53
51
  <li>
54
52
  ${culprit.description}
55
- <devtools-performance-node-link
56
- .data=${{
57
- backendNodeId: culprit.backendNodeId,
58
- frame: culprit.frame,
59
- fallbackUrl: culprit.url,
60
- } as NodeLink.NodeLinkData}>
61
- </devtools-performance-node-link>
53
+ ${nodeLink({
54
+ backendNodeId: culprit.backendNodeId,
55
+ frame: culprit.frame,
56
+ fallbackUrl: culprit.url as Platform.DevToolsPath.UrlString,
57
+ })}
62
58
  </li>`;
63
59
  }
64
60
 
@@ -94,11 +90,3 @@ export class CLSCulprits extends BaseInsightComponent<CLSCulpritsInsightModel> {
94
90
  // clang-format on
95
91
  }
96
92
  }
97
-
98
- declare global {
99
- interface HTMLElementTagNameMap {
100
- 'devtools-performance-cls-culprits': CLSCulprits;
101
- }
102
- }
103
-
104
- customElements.define('devtools-performance-cls-culprits', CLSCulprits);
@@ -18,7 +18,6 @@ const {UIStrings, i18nString, createOverlayForRequest} = Trace.Insights.Models.C
18
18
  const {html} = Lit;
19
19
 
20
20
  export class Cache extends BaseInsightComponent<CacheInsightModel> {
21
- static override readonly litTagName = Lit.StaticHtml.literal`devtools-performance-cache`;
22
21
  override internalName = 'cache';
23
22
 
24
23
  protected override hasAskAiSupport(): boolean {
@@ -68,11 +67,3 @@ export class Cache extends BaseInsightComponent<CacheInsightModel> {
68
67
  // clang-format on
69
68
  }
70
69
  }
71
-
72
- declare global {
73
- interface HTMLElementTagNameMap {
74
- 'devtools-performance-cache': Cache;
75
- }
76
- }
77
-
78
- customElements.define('devtools-performance-cache', Cache);
@@ -7,7 +7,7 @@
7
7
  * @file A list of pass/fail conditions for an insight.
8
8
  */
9
9
 
10
- import '../../../../ui/components/icon_button/icon_button.js';
10
+ import '../../../../ui/kit/kit.js';
11
11
 
12
12
  import * as i18n from '../../../../core/i18n/i18n.js';
13
13
  import type * as Trace from '../../../../models/trace/trace.js';