chrome-devtools-frontend 1.0.1376716 → 1.0.1380117

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 (434) hide show
  1. package/config/gni/devtools_grd_files.gni +15 -7
  2. package/config/gni/devtools_image_files.gni +2 -0
  3. package/front_end/Images/src/animation.svg +3 -0
  4. package/front_end/Images/src/brush-2.svg +3 -0
  5. package/front_end/core/common/SettingRegistration.ts +1 -1
  6. package/front_end/core/host/AidaClient.ts +1 -0
  7. package/front_end/core/host/InspectorFrontendHost.ts +4 -0
  8. package/front_end/core/i18n/ByteUtilities.test.ts +34 -0
  9. package/front_end/core/i18n/ByteUtilities.ts +65 -0
  10. package/front_end/core/i18n/NumberFormatter.ts +75 -0
  11. package/front_end/core/i18n/i18n.ts +4 -0
  12. package/front_end/core/i18n/time-utilities.test.ts +20 -2
  13. package/front_end/core/i18n/time-utilities.ts +125 -86
  14. package/front_end/core/platform/NumberUtilities.test.ts +3 -26
  15. package/front_end/core/platform/NumberUtilities.ts +0 -20
  16. package/front_end/core/root/Runtime.ts +6 -3
  17. package/front_end/core/sdk/CPUThrottlingManager.ts +4 -0
  18. package/front_end/core/sdk/CSSContainerQuery.test.ts +10 -16
  19. package/front_end/core/sdk/CSSContainerQuery.ts +3 -15
  20. package/front_end/core/sdk/CSSMatchedStyles.test.ts +4 -0
  21. package/front_end/core/sdk/CSSMatchedStyles.ts +5 -5
  22. package/front_end/core/sdk/CSSModel.ts +18 -0
  23. package/front_end/core/sdk/CSSPropertyParser.test.ts +16 -1
  24. package/front_end/core/sdk/CSSPropertyParser.ts +2 -2
  25. package/front_end/core/sdk/sdk-meta.ts +8 -0
  26. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +3 -3
  27. package/front_end/generated/ARIAProperties.js +4 -0
  28. package/front_end/generated/InspectorBackendCommands.js +8 -6
  29. package/front_end/generated/SupportedCSSProperties.js +17 -4
  30. package/front_end/generated/protocol-mapping.d.ts +15 -1
  31. package/front_end/generated/protocol-proxy-api.d.ts +14 -1
  32. package/front_end/generated/protocol.ts +26 -2
  33. package/front_end/models/extensions/ExtensionAPI.ts +9 -1
  34. package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +2 -0
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -21
  36. package/front_end/models/live-metrics/web-vitals-injected/{rollup.config.js → rollup.config.mjs} +1 -1
  37. package/front_end/models/persistence/EditFileSystemView.ts +19 -9
  38. package/front_end/models/persistence/WorkspaceSettingsTab.ts +50 -54
  39. package/front_end/models/persistence/editFileSystemView.css +35 -15
  40. package/front_end/models/persistence/workspaceSettingsTab.css +21 -87
  41. package/front_end/models/timeline_model/timeline_model.ts +0 -6
  42. package/front_end/models/trace/Processor.test.ts +18 -17
  43. package/front_end/models/trace/Processor.ts +10 -14
  44. package/front_end/models/trace/README.md +0 -1
  45. package/front_end/models/{timeline_model → trace/extras}/TimelineJSProfile.ts +19 -29
  46. package/front_end/models/{timeline_model/TimelineModelFilter.test.ts → trace/extras/TraceFilter.test.ts} +15 -17
  47. package/front_end/models/trace/extras/TraceFilter.ts +62 -0
  48. package/front_end/models/{timeline_model/TimelineProfileTree.test.ts → trace/extras/TraceTree.test.ts} +44 -43
  49. package/front_end/models/{timeline_model/TimelineProfileTree.ts → trace/extras/TraceTree.ts} +65 -59
  50. package/front_end/models/trace/extras/extras.ts +3 -0
  51. package/front_end/models/trace/handlers/AnimationHandler.ts +0 -8
  52. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -11
  53. package/front_end/models/trace/handlers/FramesHandler.test.ts +1 -6
  54. package/front_end/models/trace/handlers/FramesHandler.ts +1 -14
  55. package/front_end/models/trace/handlers/GPUHandler.test.ts +0 -2
  56. package/front_end/models/trace/handlers/GPUHandler.ts +1 -25
  57. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +3 -0
  58. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +0 -1
  59. package/front_end/models/trace/handlers/InitiatorsHandler.ts +0 -20
  60. package/front_end/models/trace/handlers/InvalidationsHandler.test.ts +0 -1
  61. package/front_end/models/trace/handlers/InvalidationsHandler.ts +0 -18
  62. package/front_end/models/trace/handlers/LargestImagePaintHandler.test.ts +2 -2
  63. package/front_end/models/trace/handlers/LargestImagePaintHandler.ts +63 -3
  64. package/front_end/models/trace/handlers/LargestTextPaintHandler.ts +3 -0
  65. package/front_end/models/trace/handlers/LayerTreeHandler.test.ts +0 -2
  66. package/front_end/models/trace/handlers/LayerTreeHandler.ts +1 -18
  67. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +0 -3
  68. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +1 -20
  69. package/front_end/models/trace/handlers/MemoryHandler.test.ts +0 -1
  70. package/front_end/models/trace/handlers/MemoryHandler.ts +3 -0
  71. package/front_end/models/trace/handlers/MetaHandler.test.ts +1 -32
  72. package/front_end/models/trace/handlers/MetaHandler.ts +2 -30
  73. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +0 -26
  74. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +4 -23
  75. package/front_end/models/trace/handlers/PageFramesHandler.ts +3 -0
  76. package/front_end/models/trace/handlers/RendererHandler.test.ts +0 -4
  77. package/front_end/models/trace/handlers/RendererHandler.ts +1 -24
  78. package/front_end/models/trace/handlers/SamplesHandler.test.ts +0 -5
  79. package/front_end/models/trace/handlers/SamplesHandler.ts +0 -26
  80. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +0 -1
  81. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +3 -0
  82. package/front_end/models/trace/handlers/ServerTimingsHandler.ts +1 -16
  83. package/front_end/models/trace/handlers/Threads.test.ts +1 -2
  84. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -27
  85. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +16 -25
  86. package/front_end/models/trace/handlers/UserTimingsHandler.ts +0 -17
  87. package/front_end/models/trace/handlers/WorkersHandler.test.ts +0 -1
  88. package/front_end/models/trace/handlers/WorkersHandler.ts +0 -23
  89. package/front_end/models/trace/handlers/types.ts +1 -8
  90. package/front_end/models/trace/insights/{CumulativeLayoutShift.test.ts → CLSCulprits.test.ts} +21 -21
  91. package/front_end/models/trace/insights/{CumulativeLayoutShift.ts → CLSCulprits.ts} +24 -5
  92. package/front_end/models/trace/insights/Common.ts +5 -55
  93. package/front_end/models/trace/insights/DocumentLatency.test.ts +2 -2
  94. package/front_end/models/trace/insights/DocumentLatency.ts +26 -6
  95. package/front_end/models/trace/insights/FontDisplay.ts +24 -5
  96. package/front_end/models/trace/insights/InteractionToNextPaint.test.ts +1 -1
  97. package/front_end/models/trace/insights/InteractionToNextPaint.ts +26 -6
  98. package/front_end/models/trace/insights/LCPDiscovery.test.ts +58 -0
  99. package/front_end/models/trace/insights/LCPDiscovery.ts +101 -0
  100. package/front_end/models/trace/insights/{LargestContentfulPaint.test.ts → LCPPhases.test.ts} +6 -28
  101. package/front_end/models/trace/insights/{LargestContentfulPaint.ts → LCPPhases.ts} +37 -38
  102. package/front_end/models/trace/insights/{InsightRunners.ts → Models.ts} +4 -3
  103. package/front_end/models/trace/insights/RenderBlocking.test.ts +1 -1
  104. package/front_end/models/trace/insights/RenderBlocking.ts +33 -28
  105. package/front_end/models/trace/insights/SlowCSSSelector.ts +26 -5
  106. package/front_end/models/trace/insights/{ThirdPartyWeb.test.ts → ThirdParties.test.ts} +3 -3
  107. package/front_end/models/trace/insights/{ThirdPartyWeb.ts → ThirdParties.ts} +24 -5
  108. package/front_end/models/trace/insights/Viewport.test.ts +1 -1
  109. package/front_end/models/trace/insights/Viewport.ts +27 -9
  110. package/front_end/models/trace/insights/insights.ts +1 -1
  111. package/front_end/models/trace/insights/types.ts +11 -9
  112. package/front_end/models/trace/types/TraceEvents.ts +51 -22
  113. package/front_end/panels/application/SharedStorageItemsView.test.ts +3 -3
  114. package/front_end/panels/application/SharedStorageItemsView.ts +5 -3
  115. package/front_end/panels/application/StorageView.ts +3 -3
  116. package/front_end/panels/application/components/StorageMetadataView.ts +1 -2
  117. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +34 -31
  118. package/front_end/panels/coverage/CoverageView.ts +3 -3
  119. package/front_end/panels/elements/ComputedStyleModel.ts +9 -2
  120. package/front_end/panels/elements/ComputedStyleWidget.test.ts +72 -0
  121. package/front_end/panels/elements/ComputedStyleWidget.ts +12 -0
  122. package/front_end/panels/elements/ElementStatePaneWidget.test.ts +84 -30
  123. package/front_end/panels/elements/ElementStatePaneWidget.ts +42 -24
  124. package/front_end/panels/elements/ElementsTreeElement.ts +24 -11
  125. package/front_end/panels/elements/MetricsSidebarPane.ts +12 -7
  126. package/front_end/panels/elements/PropertyMatchers.ts +3 -0
  127. package/front_end/panels/elements/StylePropertiesSection.ts +15 -6
  128. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +3 -1
  129. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -3
  130. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  131. package/front_end/panels/explain/components/ConsoleInsight.ts +8 -18
  132. package/front_end/panels/freestyler/AiAgent.test.ts +58 -1
  133. package/front_end/panels/freestyler/AiAgent.ts +58 -3
  134. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +99 -23
  135. package/front_end/panels/freestyler/DrJonesFileAgent.ts +53 -20
  136. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +15 -7
  137. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +36 -15
  138. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +6 -6
  139. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +48 -8
  140. package/front_end/panels/freestyler/FreestylerAgent.test.ts +15 -14
  141. package/front_end/panels/freestyler/FreestylerAgent.ts +52 -8
  142. package/front_end/panels/freestyler/FreestylerPanel.test.ts +539 -39
  143. package/front_end/panels/freestyler/FreestylerPanel.ts +349 -215
  144. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +126 -34
  145. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +320 -268
  146. package/front_end/panels/freestyler/components/UserActionRow.ts +156 -47
  147. package/front_end/panels/freestyler/components/freestylerChatUi.css +69 -34
  148. package/front_end/panels/freestyler/components/userActionRow.css +40 -67
  149. package/front_end/panels/freestyler/freestyler-meta.ts +3 -11
  150. package/front_end/panels/issues/components/HideIssuesMenu.ts +2 -11
  151. package/front_end/panels/layer_viewer/LayerDetailsView.ts +1 -2
  152. package/front_end/panels/layer_viewer/PaintProfilerView.ts +5 -5
  153. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +46 -0
  154. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +26 -17
  155. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +25 -19
  156. package/front_end/panels/network/BinaryResourceView.ts +6 -7
  157. package/front_end/panels/network/EventSourceMessagesView.ts +1 -1
  158. package/front_end/panels/network/NetworkDataGridNode.ts +3 -3
  159. package/front_end/panels/network/NetworkLogView.ts +7 -8
  160. package/front_end/panels/network/RequestTimingView.test.ts +35 -1
  161. package/front_end/panels/network/RequestTimingView.ts +96 -0
  162. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -2
  163. package/front_end/panels/network/networkTimingTable.css +2 -1
  164. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
  165. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  166. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  167. package/front_end/panels/profiler/HeapTimelineOverview.ts +12 -12
  168. package/front_end/panels/profiler/IsolateSelector.ts +3 -4
  169. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +1 -1
  170. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +7 -6
  171. package/front_end/panels/profiler/ProfileView.ts +1 -1
  172. package/front_end/panels/recorder/components/RecordingView.ts +2 -2
  173. package/front_end/panels/recorder/injected/{rollup.config.js → rollup.config.mjs} +1 -1
  174. package/front_end/panels/recorder/recorderController.css +0 -4
  175. package/front_end/panels/security/CookieReportTreeElement.ts +1 -9
  176. package/front_end/panels/security/CookieReportView.ts +120 -0
  177. package/front_end/panels/security/SecurityPanel.ts +8 -2
  178. package/front_end/panels/security/cookieReportView.css +46 -0
  179. package/front_end/panels/security/sidebar.css +1 -2
  180. package/front_end/panels/sensors/LocationsSettingsTab.ts +26 -11
  181. package/front_end/panels/sensors/locationsSettingsTab.css +18 -18
  182. package/front_end/panels/settings/AISettingsTab.ts +6 -15
  183. package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -1
  184. package/front_end/panels/settings/SettingsScreen.ts +61 -56
  185. package/front_end/panels/settings/aiSettingsTab.css +3 -14
  186. package/front_end/panels/settings/components/SyncSection.ts +1 -2
  187. package/front_end/panels/settings/components/syncSection.css +0 -10
  188. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +3 -1
  189. package/front_end/panels/settings/keybindsSettingsTab.css +7 -10
  190. package/front_end/panels/settings/settingsScreen.css +27 -125
  191. package/front_end/panels/sources/DebuggerPlugin.ts +9 -4
  192. package/front_end/panels/sources/NavigatorView.ts +11 -13
  193. package/front_end/panels/timeline/ActiveFilters.ts +3 -4
  194. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -2
  195. package/front_end/panels/timeline/CountersGraph.ts +2 -4
  196. package/front_end/panels/timeline/EventsTimelineTreeView.ts +7 -8
  197. package/front_end/panels/timeline/README.md +2 -1
  198. package/front_end/panels/timeline/TimelineController.ts +14 -4
  199. package/front_end/panels/timeline/TimelineEventOverview.ts +3 -4
  200. package/front_end/panels/timeline/TimelineFilters.ts +3 -4
  201. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +1 -1
  202. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -10
  203. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -2
  204. package/front_end/panels/timeline/TimelineFlameChartView.ts +21 -12
  205. package/front_end/panels/timeline/TimelineLoader.test.ts +1 -2
  206. package/front_end/panels/timeline/TimelineLoader.ts +3 -4
  207. package/front_end/panels/timeline/TimelineMiniMap.ts +10 -0
  208. package/front_end/panels/timeline/TimelinePanel.ts +20 -8
  209. package/front_end/panels/timeline/TimelineTreeView.test.ts +12 -13
  210. package/front_end/panels/timeline/TimelineTreeView.ts +35 -40
  211. package/front_end/panels/timeline/TimelineUIUtils.test.ts +2 -2
  212. package/front_end/panels/timeline/TimelineUIUtils.ts +12 -14
  213. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +6 -7
  214. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +3 -3
  215. package/front_end/panels/timeline/components/LiveMetricsView.ts +14 -26
  216. package/front_end/panels/timeline/components/MetricCard.test.ts +1 -1
  217. package/front_end/panels/timeline/components/MetricCard.ts +46 -0
  218. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +3 -4
  219. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +2 -0
  220. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +41 -36
  221. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +19 -33
  222. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +29 -40
  223. package/front_end/panels/timeline/components/insights/FontDisplay.ts +17 -23
  224. package/front_end/panels/timeline/components/insights/Helpers.ts +12 -16
  225. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +14 -26
  226. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +25 -37
  227. package/front_end/panels/timeline/components/insights/LCPPhases.ts +20 -47
  228. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +19 -28
  229. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
  230. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +18 -31
  231. package/front_end/panels/timeline/components/insights/Table.ts +5 -3
  232. package/front_end/panels/timeline/components/insights/ThirdParties.ts +18 -25
  233. package/front_end/panels/timeline/components/insights/Viewport.ts +14 -25
  234. package/front_end/panels/timeline/components/liveMetricsView.css +5 -13
  235. package/front_end/panels/timeline/components/metricCard.css +11 -0
  236. package/front_end/panels/timeline/components/sidebarInsightsTab.css +1 -1
  237. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +5 -5
  238. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +13 -12
  239. package/front_end/panels/timeline/timelineFlameChartView.css +1 -1
  240. package/front_end/panels/timeline/utils/AICallTree.test.ts +105 -0
  241. package/front_end/panels/timeline/utils/AICallTree.ts +25 -24
  242. package/front_end/testing/EnvironmentHelpers.ts +5 -18
  243. package/front_end/testing/InsightHelpers.ts +4 -4
  244. package/front_end/testing/TraceHelpers.ts +1 -1
  245. package/front_end/third_party/puppeteer/README.chromium +2 -2
  246. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +2 -3
  247. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +14 -3
  250. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +16 -2
  252. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts +34 -5
  254. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js +51 -2
  256. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  258. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +10 -8
  259. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  260. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  262. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts +14 -4
  264. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js +57 -23
  266. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts +1 -1
  268. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +13 -10
  270. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts +15 -4
  272. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js +55 -26
  274. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts +0 -8
  276. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js +2 -11
  278. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +2 -1
  280. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +5 -2
  282. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +7 -0
  284. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  285. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
  286. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  287. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -1
  288. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +5 -3
  289. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
  292. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +0 -3
  293. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
  294. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  296. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  297. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  298. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  299. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  300. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  301. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  303. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts +14 -0
  304. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  305. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js +18 -0
  306. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js.map +1 -0
  307. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +51 -10
  308. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +215 -97
  309. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +2 -3
  310. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  311. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  312. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +14 -3
  313. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  314. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +16 -2
  315. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  316. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +34 -5
  317. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  318. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js +51 -2
  319. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js.map +1 -1
  320. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  321. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +10 -8
  322. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  323. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  324. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  325. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  326. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts +14 -4
  327. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js +57 -23
  329. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js.map +1 -1
  330. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts +1 -1
  331. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  332. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +13 -10
  333. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  334. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts +15 -4
  335. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js +55 -26
  337. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js.map +1 -1
  338. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts +0 -8
  339. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  340. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js +1 -9
  341. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js.map +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +2 -1
  343. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  344. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +5 -2
  345. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
  346. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +7 -0
  347. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  348. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
  349. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  350. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -1
  351. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +5 -3
  352. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +1 -1
  354. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +0 -3
  356. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  358. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  360. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  362. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  363. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  364. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts +14 -0
  365. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  366. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js +15 -0
  367. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js.map +1 -0
  368. package/front_end/third_party/puppeteer/package/lib/types.d.ts +51 -10
  369. package/front_end/third_party/puppeteer/package/package.json +4 -4
  370. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +2 -3
  371. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +21 -3
  372. package/front_end/third_party/puppeteer/package/src/api/Input.ts +57 -8
  373. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +9 -7
  374. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
  375. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +72 -31
  376. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +14 -9
  377. package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +71 -26
  378. package/front_end/third_party/puppeteer/package/src/common/CallbackRegistry.ts +1 -15
  379. package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +8 -1
  380. package/front_end/third_party/puppeteer/package/src/common/Errors.ts +7 -0
  381. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +9 -9
  382. package/front_end/third_party/puppeteer/package/src/environment.ts +1 -4
  383. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  384. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  385. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  386. package/front_end/third_party/puppeteer/package/src/util/incremental-id-generator.ts +20 -0
  387. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
  388. package/front_end/ui/components/buttons/Button.test.ts +14 -0
  389. package/front_end/ui/components/buttons/Button.ts +27 -4
  390. package/front_end/ui/components/cards/card.css +7 -4
  391. package/front_end/ui/components/dialogs/Dialog.ts +2 -4
  392. package/front_end/ui/components/dialogs/ShortcutDialog.ts +15 -13
  393. package/front_end/ui/components/dialogs/dialog.css +2 -6
  394. package/front_end/ui/components/dialogs/shortcutDialog.css +33 -41
  395. package/front_end/ui/components/docs/freestyler/basic.ts +6 -8
  396. package/front_end/ui/components/docs/freestyler/empty_state.ts +6 -8
  397. package/front_end/ui/components/docs/performance_panel/track_example.html +1 -1
  398. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +39 -17
  399. package/front_end/ui/components/markdown_view/MarkdownView.ts +77 -14
  400. package/front_end/ui/components/markdown_view/markdownView.css +15 -0
  401. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -2
  402. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  403. package/front_end/ui/legacy/InplaceEditor.ts +18 -14
  404. package/front_end/ui/legacy/TabbedPane.ts +0 -14
  405. package/front_end/ui/legacy/UIUtils.ts +0 -7
  406. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +7 -2
  407. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
  408. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +20 -11
  409. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.test.ts +19 -0
  410. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +1 -1
  411. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +1 -1
  412. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +5 -22
  413. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +129 -100
  414. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +4 -2
  415. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.test.ts +9 -4
  416. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +6 -6
  417. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +22 -4
  418. package/front_end/ui/legacy/components/perf_ui/flameChart.css +0 -2
  419. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.test.ts +49 -0
  420. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +23 -46
  421. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  422. package/front_end/ui/legacy/components/utils/ImagePreview.ts +1 -1
  423. package/front_end/ui/legacy/textPrompt.css +1 -1
  424. package/front_end/ui/legacy/toolbar.css +4 -5
  425. package/front_end/ui/visual_logging/KnownContextValues.ts +174 -0
  426. package/front_end/ui/visual_logging/LoggingConfig.ts +6 -2
  427. package/package.json +7 -6
  428. package/scripts/build/ninja/bundle.gni +3 -3
  429. package/scripts/build/{rollup.config.js → rollup.config.mjs} +4 -4
  430. package/scripts/devtools_paths.py +8 -4
  431. package/scripts/eslint_rules/tests/check_test_definitions_test.js +8 -3
  432. package/scripts/tools/update_goldens_v2.py +1 -1
  433. package/front_end/models/timeline_model/TimelineModelFilter.ts +0 -61
  434. /package/front_end/Images/{rollup.config.js → rollup.config.mjs} +0 -0
@@ -2,6 +2,7 @@
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 * as Common from '../../../core/common/common.js';
5
6
  import * as Host from '../../../core/host/host.js';
6
7
  import * as i18n from '../../../core/i18n/i18n.js';
7
8
  import type * as Platform from '../../../core/platform/platform.js';
@@ -55,12 +56,21 @@ const UIStringsNotTranslate = {
55
56
  * issue with the AI assistance message.
56
57
  */
57
58
  report: 'Report legal issue',
59
+ /**
60
+ * @description The title of the button for scrolling to see next suggestions
61
+ */
62
+ scrollToNext: 'Scroll to next suggestions',
63
+ /**
64
+ * @description The title of the button for scrolling to see previous suggestions
65
+ */
66
+ scrollToPrevious: 'Scroll to previous suggestions',
58
67
  };
59
68
 
60
69
  const lockedString = i18n.i18n.lockedString;
61
70
 
62
71
  const REPORT_URL = 'https://support.google.com/legal/troubleshooter/1114905?hl=en#ts=1115658%2C13380504' as
63
72
  Platform.DevToolsPath.UrlString;
73
+ const SCROLL_ROUNDING_OFFSET = 1;
64
74
  export interface UserActionRowProps {
65
75
  showRateButtons: boolean;
66
76
  onFeedbackSubmit: (rate: Host.AidaClient.Rating, feedback?: string) => void;
@@ -75,6 +85,11 @@ export class UserActionRow extends HTMLElement {
75
85
  #isShowingFeedbackForm = false;
76
86
  #currentRating?: Host.AidaClient.Rating;
77
87
  #isSubmitButtonDisabled = true;
88
+ #suggestionsScrollContainerRef = LitHtml.Directives.createRef<HTMLElement>();
89
+ #suggestionsLeftScrollButtonContainerRef = LitHtml.Directives.createRef<HTMLElement>();
90
+ #suggestionsRightScrollButtonContainerRef = LitHtml.Directives.createRef<HTMLElement>();
91
+ #suggestionsResizeObserver = new ResizeObserver(() => this.#handleSuggestionsScrollOrResize());
92
+ #suggestionsEvaluateLayoutThrottler = new Common.Throttler.Throttler(50);
78
93
 
79
94
  constructor(props: UserActionRowProps) {
80
95
  super();
@@ -84,15 +99,51 @@ export class UserActionRow extends HTMLElement {
84
99
  set props(props: UserActionRowProps) {
85
100
  this.#props = props;
86
101
  this.#render();
102
+ this.#evaluateSuggestionsLayout();
87
103
  }
88
104
 
89
105
  connectedCallback(): void {
90
106
  this.#shadow.adoptedStyleSheets = [userActionRowStyles, Input.textInputStyles];
91
107
  this.#render();
108
+ this.#evaluateSuggestionsLayout();
109
+
110
+ if (this.#suggestionsScrollContainerRef.value) {
111
+ this.#suggestionsResizeObserver.observe(this.#suggestionsScrollContainerRef.value);
112
+ }
92
113
  }
93
114
 
115
+ disconnectedCallback(): void {
116
+ this.#suggestionsResizeObserver.disconnect();
117
+ }
118
+
119
+ #handleSuggestionsScrollOrResize = (): void => {
120
+ void this.#suggestionsEvaluateLayoutThrottler.schedule(() => {
121
+ this.#evaluateSuggestionsLayout();
122
+ return Promise.resolve();
123
+ });
124
+ };
125
+
126
+ #scrollSuggestionsScrollContainer = (direction: 'left'|'right'): void => {
127
+ const suggestionsScrollContainer = this.#suggestionsScrollContainerRef.value;
128
+ if (!suggestionsScrollContainer) {
129
+ return;
130
+ }
131
+
132
+ suggestionsScrollContainer.scroll({
133
+ top: 0,
134
+ left: direction === 'left' ? suggestionsScrollContainer.scrollLeft - suggestionsScrollContainer.clientWidth :
135
+ suggestionsScrollContainer.scrollLeft + suggestionsScrollContainer.clientWidth,
136
+ behavior: 'smooth',
137
+ });
138
+ };
139
+
94
140
  #handleRateClick(rating: Host.AidaClient.Rating): void {
95
141
  if (this.#currentRating === rating) {
142
+ this.#currentRating = undefined;
143
+ this.#isShowingFeedbackForm = false;
144
+ // This effectively reset the user rating
145
+ this.#props.onFeedbackSubmit(Host.AidaClient.Rating.SENTIMENT_UNSPECIFIED);
146
+ this.#render();
96
147
  return;
97
148
  }
98
149
 
@@ -122,36 +173,42 @@ export class UserActionRow extends HTMLElement {
122
173
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(REPORT_URL);
123
174
  };
124
175
 
125
- #renderButtons(): LitHtml.TemplateResult {
176
+ #renderButtons(): LitHtml.LitTemplate {
126
177
  // clang-format off
127
- return html`
178
+ const rateButtons = html`
128
179
  <devtools-button
129
- .data=${{
130
- variant: Buttons.Button.Variant.ICON,
131
- size: Buttons.Button.Size.SMALL,
132
- iconName: 'thumb-up',
133
- toggledIconName: 'thumb-up-filled',
134
- toggled: this.#currentRating === Host.AidaClient.Rating.POSITIVE,
135
- toggleType: Buttons.Button.ToggleType.PRIMARY,
136
- title: lockedString(UIStringsNotTranslate.thumbsUp),
137
- jslogContext: 'thumbs-up',
138
- } as Buttons.Button.ButtonData}
139
- @click=${() => this.#handleRateClick(Host.AidaClient.Rating.POSITIVE)}
140
- ></devtools-button>
141
- <devtools-button
142
- .data=${{
143
- variant: Buttons.Button.Variant.ICON,
144
- size: Buttons.Button.Size.SMALL,
145
- iconName: 'thumb-down',
146
- toggledIconName: 'thumb-down-filled',
147
- toggled: this.#currentRating === Host.AidaClient.Rating.NEGATIVE,
148
- toggleType: Buttons.Button.ToggleType.PRIMARY,
149
- title: lockedString(UIStringsNotTranslate.thumbsDown),
150
- jslogContext: 'thumbs-down',
151
- } as Buttons.Button.ButtonData}
152
- @click=${() => this.#handleRateClick(Host.AidaClient.Rating.NEGATIVE)}
153
- ></devtools-button>
154
- <div class="vertical-separator"></div>
180
+ .data=${{
181
+ variant: Buttons.Button.Variant.ICON,
182
+ size: Buttons.Button.Size.SMALL,
183
+ iconName: 'thumb-up',
184
+ toggledIconName: 'thumb-up-filled',
185
+ toggled: this.#currentRating === Host.AidaClient.Rating.POSITIVE,
186
+ toggleType: Buttons.Button.ToggleType.PRIMARY,
187
+ title: lockedString(UIStringsNotTranslate.thumbsUp),
188
+ jslogContext: 'thumbs-up',
189
+ } as Buttons.Button.ButtonData}
190
+ @click=${() => this.#handleRateClick(Host.AidaClient.Rating.POSITIVE)}
191
+ ></devtools-button>
192
+ <devtools-button
193
+ .data=${{
194
+ variant: Buttons.Button.Variant.ICON,
195
+ size: Buttons.Button.Size.SMALL,
196
+ iconName: 'thumb-down',
197
+ toggledIconName: 'thumb-down-filled',
198
+ toggled: this.#currentRating === Host.AidaClient.Rating.NEGATIVE,
199
+ toggleType: Buttons.Button.ToggleType.PRIMARY,
200
+ title: lockedString(UIStringsNotTranslate.thumbsDown),
201
+ jslogContext: 'thumbs-down',
202
+ } as Buttons.Button.ButtonData}
203
+ @click=${() => this.#handleRateClick(Host.AidaClient.Rating.NEGATIVE)}
204
+ ></devtools-button>
205
+ <div class="vertical-separator"></div>`;
206
+ // clang-format off
207
+
208
+ // clang-format off
209
+ return html`
210
+ <div class="rate-buttons">
211
+ ${this.#props.showRateButtons ? rateButtons : LitHtml.nothing}
155
212
  <devtools-button
156
213
  .data=${
157
214
  {
@@ -164,7 +221,7 @@ export class UserActionRow extends HTMLElement {
164
221
  }
165
222
  @click=${this.#handleReportClick}
166
223
  ></devtools-button>
167
- `;
224
+ </div>`;
168
225
  // clang-format on
169
226
  }
170
227
 
@@ -177,7 +234,27 @@ export class UserActionRow extends HTMLElement {
177
234
  }
178
235
  };
179
236
 
237
+ #evaluateSuggestionsLayout = (): void => {
238
+ const suggestionsScrollContainer = this.#suggestionsScrollContainerRef.value;
239
+ const leftScrollButtonContainer = this.#suggestionsLeftScrollButtonContainerRef.value;
240
+ const rightScrollButtonContainer = this.#suggestionsRightScrollButtonContainerRef.value;
241
+ if (!suggestionsScrollContainer || !leftScrollButtonContainer || !rightScrollButtonContainer) {
242
+ return;
243
+ }
244
+
245
+ const shouldShowLeftButton = suggestionsScrollContainer.scrollLeft > SCROLL_ROUNDING_OFFSET;
246
+ const shouldShowRightButton =
247
+ suggestionsScrollContainer.scrollLeft + suggestionsScrollContainer.offsetWidth + SCROLL_ROUNDING_OFFSET <
248
+ suggestionsScrollContainer.scrollWidth;
249
+ leftScrollButtonContainer.classList.toggle('hidden', !shouldShowLeftButton);
250
+ rightScrollButtonContainer.classList.toggle('hidden', !shouldShowRightButton);
251
+ };
252
+
180
253
  #renderFeedbackForm(): LitHtml.LitTemplate {
254
+ if (!this.#isShowingFeedbackForm) {
255
+ return LitHtml.nothing;
256
+ }
257
+
181
258
  // clang-format off
182
259
  return html`
183
260
  <form class="feedback-form" @submit=${this.#handleSubmit}>
@@ -232,30 +309,62 @@ export class UserActionRow extends HTMLElement {
232
309
  // clang-format on
233
310
  }
234
311
 
312
+ #renderSuggestions(): LitHtml.LitTemplate {
313
+ if (!this.#props.suggestions) {
314
+ return LitHtml.nothing;
315
+ }
316
+ // clang-format off
317
+ return html`<div class="suggestions-container">
318
+ <div class="scroll-button-container left hidden" ${LitHtml.Directives.ref(this.#suggestionsLeftScrollButtonContainerRef)}>
319
+ <devtools-button
320
+ class='scroll-button'
321
+ .data=${{
322
+ variant: Buttons.Button.Variant.ICON,
323
+ size: Buttons.Button.Size.SMALL,
324
+ iconName: 'chevron-left',
325
+ title: lockedString(UIStringsNotTranslate.scrollToPrevious),
326
+ jslogContext: 'chevron-left',
327
+ } as Buttons.Button.ButtonData}
328
+ @click=${() => this.#scrollSuggestionsScrollContainer('left')}
329
+ ></devtools-button>
330
+ </div>
331
+ <div class="suggestions-scroll-container" @scroll=${this.#handleSuggestionsScrollOrResize} ${LitHtml.Directives.ref(this.#suggestionsScrollContainerRef)}>
332
+ ${this.#props.suggestions?.map(suggestion => html`<devtools-button
333
+ class='suggestion'
334
+ .data=${{
335
+ variant: Buttons.Button.Variant.OUTLINED,
336
+ title: suggestion,
337
+ jslogContext: 'suggestion',
338
+ } as Buttons.Button.ButtonData}
339
+ @click=${() => this.#props.handleSuggestionClick(suggestion)}
340
+ >${suggestion}</devtools-button>`)}
341
+ </div>
342
+ <div class="scroll-button-container right hidden" ${LitHtml.Directives.ref(this.#suggestionsRightScrollButtonContainerRef)}>
343
+ <devtools-button
344
+ class='scroll-button'
345
+ .data=${{
346
+ variant: Buttons.Button.Variant.ICON,
347
+ size: Buttons.Button.Size.SMALL,
348
+ iconName: 'chevron-right',
349
+ title: lockedString(UIStringsNotTranslate.scrollToNext),
350
+ jslogContext: 'chevron-right',
351
+ } as Buttons.Button.ButtonData}
352
+ @click=${() => this.#scrollSuggestionsScrollContainer('right')}
353
+ ></devtools-button>
354
+ </div>
355
+ </div>`;
356
+ // clang-format on
357
+ }
358
+
235
359
  #render(): void {
236
360
  // clang-format off
237
361
  LitHtml.render(
238
362
  html`
239
363
  <div class="feedback">
240
- <div class="rate-buttons">
241
- ${this.#props.showRateButtons ? this.#renderButtons() : LitHtml.nothing}
242
- </div>
243
- ${this.#props.suggestions ?
244
- html`<div class="suggestions">
245
- ${this.#props.suggestions?.map(suggestion => html`<devtools-button
246
- .data=${{
247
- variant: Buttons.Button.Variant.OUTLINED,
248
- title: suggestion,
249
- jslogContext: 'suggestion',
250
- } as Buttons.Button.ButtonData}
251
- @click=${() => this.#props.handleSuggestionClick(suggestion)}
252
- >${suggestion}</devtools-button>`)}
253
- </div>` : LitHtml.nothing}
364
+ ${this.#renderButtons()}
365
+ ${this.#renderSuggestions()}
254
366
  </div>
255
- ${this.#isShowingFeedbackForm
256
- ? this.#renderFeedbackForm()
257
- : LitHtml.nothing
258
- }
367
+ ${this.#renderFeedbackForm()}
259
368
  `,
260
369
  this.#shadow,
261
370
  {host: this},
@@ -47,7 +47,8 @@
47
47
  /* 688px is the max width of the input form + left and right paddings: var(--sys-size-36) + 2 * var(--sys-size-5) */
48
48
  /* stylelint-disable-next-line at-rule-no-unknown */
49
49
  @container (width > 688px) {
50
- --half-scrollbar-width: calc((100cqw - 100%) / 2); /* stylelint-disable-line unit-no-unknown */
50
+ /* stylelint-disable-next-line unit-no-unknown */
51
+ --half-scrollbar-width: calc((100cqw - 100%) / 2);
51
52
 
52
53
  margin-left: var(--half-scrollbar-width);
53
54
  margin-right: calc(-1 * var(--half-scrollbar-width));
@@ -62,6 +63,20 @@
62
63
  }
63
64
  }
64
65
 
66
+ .chat-readonly-container {
67
+ display: flex;
68
+ width: 100%;
69
+ max-width: var(--sys-size-36);
70
+ justify-content: center;
71
+ align-items: center;
72
+ background-color: var(--sys-color-surface3);
73
+ font: var(--sys-typescale-body4-regular);
74
+ padding: var(--sys-size-5) 0;
75
+ border-radius: var(--sys-shape-corner-medium-small);
76
+ margin-bottom: var(--sys-size-5);
77
+ color: var(--sys-color-on-surface-subtle);
78
+ }
79
+
65
80
  .chat-input-container {
66
81
  margin: var(--sys-size-4) 0;
67
82
  width: 100%;
@@ -104,6 +119,11 @@
104
119
  color: var(--sys-color-state-disabled);
105
120
  background-color: var(--sys-color-state-disabled-container);
106
121
  border-color: transparent;
122
+
123
+ &::placeholder {
124
+ color: var(--sys-color-on-surface-subtle);
125
+ opacity: 100%;
126
+ }
107
127
  }
108
128
  }
109
129
 
@@ -138,7 +158,8 @@
138
158
  /* 688px is the max width of the input form + left and right paddings: var(--sys-size-36) + 2 * var(--sys-size-5) */
139
159
  /* stylelint-disable-next-line at-rule-no-unknown */
140
160
  @container (width > 688px) {
141
- --half-scrollbar-width: calc((100cqw - 100%) / 2); /* stylelint-disable-line unit-no-unknown */
161
+ /* stylelint-disable-next-line unit-no-unknown */
162
+ --half-scrollbar-width: calc((100cqw - 100%) / 2);
142
163
 
143
164
  margin-left: var(--half-scrollbar-width);
144
165
  margin-right: calc(-1 * var(--half-scrollbar-width));
@@ -264,35 +285,6 @@
264
285
  }
265
286
  }
266
287
 
267
- .no-agent-message {
268
- user-select: text;
269
- cursor: initial;
270
- display: flex;
271
- flex-direction: column;
272
- gap: var(--sys-size-5);
273
- width: 100%;
274
- padding: var(--sys-size-7) var(--sys-size-5);
275
- height: 100%;
276
-
277
- .header {
278
- display: flex;
279
- align-items: center;
280
- height: var(--sys-size-11);
281
- gap: var(--sys-size-4);
282
-
283
- h2 {
284
- font: var(--sys-typescale-body4-bold);
285
- }
286
- }
287
-
288
- .instructions {
289
- display: flex;
290
- flex-direction: column;
291
- gap: var(--sys-size-6);
292
- line-height: 18px;
293
- }
294
- }
295
-
296
288
  .indicator {
297
289
  color: var(--sys-color-green-bright);
298
290
  }
@@ -488,14 +480,16 @@ main {
488
480
  align-items: center;
489
481
  justify-content: center;
490
482
  font: var(--sys-typescale-headline4);
491
- gap: var(--sys-size-11);
483
+ gap: var(--sys-size-8);
492
484
  padding: var(--sys-size-3);
485
+ max-width: var(--sys-size-33);
493
486
 
494
487
  /* Prevents the container from jumping when the scrollbar is shown */
495
488
  /* 688px is the max width of the input form + left and right paddings: var(--sys-size-36) + 2 * var(--sys-size-5) */
496
489
  /* stylelint-disable-next-line at-rule-no-unknown */
497
490
  @container (width > 688px) {
498
- --half-scrollbar-width: calc((100cqw - 100%) / 2); /* stylelint-disable-line unit-no-unknown */
491
+ /* stylelint-disable-next-line unit-no-unknown */
492
+ --half-scrollbar-width: calc((100cqw - 100%) / 2);
499
493
 
500
494
  margin-left: var(--half-scrollbar-width);
501
495
  margin-right: calc(-1 * var(--half-scrollbar-width));
@@ -528,9 +522,14 @@ main {
528
522
  h1 {
529
523
  font: var(--sys-typescale-headline4);
530
524
  }
525
+
526
+ p {
527
+ text-align: center;
528
+ font: var(--sys-typescale-body4-regular);
529
+ }
531
530
  }
532
531
 
533
- .suggestions {
532
+ .empty-state-content {
534
533
  display: flex;
535
534
  flex-direction: column;
536
535
  gap: var(--sys-size-5);
@@ -540,6 +539,42 @@ main {
540
539
  }
541
540
  }
542
541
 
542
+ .feature-card {
543
+ display: flex;
544
+ padding: var(--sys-size-4) var(--sys-size-6);
545
+ gap: 10px;
546
+ background-color: var(--sys-color-surface2);
547
+ border-radius: var(--sys-shape-corner-medium-small);
548
+ width: 100%;
549
+ align-items: center;
550
+
551
+ .feature-card-icon {
552
+ min-width: var(--sys-size-12);
553
+ min-height: var(--sys-size-12);
554
+ display: flex;
555
+ justify-content: center;
556
+ align-items: center;
557
+ background-color: var(--sys-color-tonal-container);
558
+ border-radius: var(--sys-shape-corner-full);
559
+
560
+ devtools-icon {
561
+ width: 18px;
562
+ height: 18px;
563
+ }
564
+ }
565
+
566
+ .feature-card-content {
567
+ h3 {
568
+ font: var(--sys-typescale-body3-medium);
569
+ }
570
+
571
+ p {
572
+ font: var(--sys-typescale-body4-regular);
573
+ line-height: 18px;
574
+ }
575
+ }
576
+ }
577
+
543
578
  .disabled-view {
544
579
  display: flex;
545
580
  max-width: var(--sys-size-34);
@@ -16,7 +16,7 @@
16
16
  display: flex;
17
17
  gap: var(--sys-size-8);
18
18
  justify-content: space-between;
19
- align-items: flex-end;
19
+ align-items: center;
20
20
  }
21
21
 
22
22
  .rate-buttons {
@@ -71,79 +71,52 @@
71
71
  display: inline-block;
72
72
  }
73
73
 
74
- /*
75
- Scroll driven animation below is used for generating shadows
76
- when the `.suggestions` area is scrollable.
77
- */
78
- .suggestions {
79
- display: flex;
80
- overflow-y: hidden;
81
- overflow-x: auto;
82
- scrollbar-width: none;
83
- gap: var(--sys-size-3);
84
- scroll-timeline: --scroll-timeline x; /* stylelint-disable-line property-no-unknown */
85
- animation: detect-scroll;
86
- animation-timeline: --scroll-timeline; /* stylelint-disable-line property-no-unknown */
87
- animation-fill-mode: none;
74
+ .suggestions-container {
75
+ overflow: hidden;
88
76
  position: relative;
89
- }
90
-
91
- .suggestions::before,
92
- .suggestions::after {
93
- content: "";
94
- display: block;
95
- position: sticky;
96
- min-width: var(--sys-size-3);
97
- height: var(--sys-size-11);
98
- left: 0;
99
- right: 0;
100
- z-index: 999;
101
- animation-name: reveal;
102
- animation-timeline: --scroll-timeline; /* stylelint-disable-line property-no-unknown */
103
- animation-fill-mode: both;
104
- }
77
+ display: flex;
105
78
 
106
- .suggestions::before {
107
- top: 0;
108
- visibility: var(--visibility-if-can-scroll, hidden);
109
- animation-range: var(--sys-size-6) var(--sys-size-11); /* stylelint-disable-line property-no-unknown */
110
- background:
111
- radial-gradient(
112
- farthest-side at 0 50%,
113
- var(--app-color-scroll-area-shadow-start),
114
- transparent
115
- );
116
- }
79
+ .suggestions-scroll-container {
80
+ display: flex;
81
+ overflow: auto hidden;
82
+ scrollbar-width: none;
83
+ gap: var(--sys-size-3);
84
+ padding-right: var(--sys-size-1);
85
+ }
117
86
 
118
- .suggestions::after {
119
- bottom: 0;
120
- visibility: var(--visibility-if-can-scroll, hidden);
121
- animation-direction: reverse;
122
- /* stylelint-disable-next-line property-no-unknown */
123
- animation-range:
124
- calc(100% - var(--sys-size-11))
125
- calc(100% - var(--sys-size-6));
126
- background:
127
- radial-gradient(
128
- farthest-side at 100% 50%,
129
- var(--app-color-scroll-area-shadow-start),
130
- transparent
131
- );
132
- }
87
+ .scroll-button-container {
88
+ position: absolute;
89
+ top: 0;
90
+ height: 100%;
91
+ display: flex;
92
+ align-items: center;
93
+ width: var(--sys-size-15);
94
+ z-index: 999;
95
+ }
133
96
 
134
- @keyframes reveal {
135
- 0% {
136
- opacity: 0%;
97
+ .scroll-button-container.hidden {
98
+ display: none;
137
99
  }
138
100
 
139
- 100% {
140
- opacity: 100%;
101
+ .scroll-button-container.left {
102
+ left: 0;
103
+ background:
104
+ linear-gradient(
105
+ 90deg,
106
+ var(--sys-color-cdt-base-container) 0%,
107
+ var(--sys-color-cdt-base-container) 50%,
108
+ transparent
109
+ );
141
110
  }
142
- }
143
111
 
144
- @keyframes detect-scroll {
145
- from,
146
- to {
147
- --visibility-if-can-scroll: visible;
112
+ .scroll-button-container.right {
113
+ right: 0;
114
+ background:
115
+ linear-gradient(
116
+ 90deg,
117
+ transparent,
118
+ var(--sys-color-cdt-base-container) 50%
119
+ );
120
+ justify-content: flex-end;
148
121
  }
149
122
  }
@@ -82,21 +82,15 @@ function isFreestylerFeatureAvailable(config?: Root.Runtime.HostConfig): boolean
82
82
  }
83
83
 
84
84
  function isDrJonesNetworkFeatureAvailable(config?: Root.Runtime.HostConfig): boolean {
85
- return (config?.aidaAvailability?.enabled &&
86
- (config?.devToolsExplainThisResourceDogfood?.enabled ||
87
- config?.devToolsAiAssistanceNetworkAgent?.enabled)) === true;
85
+ return (config?.aidaAvailability?.enabled && (config?.devToolsAiAssistanceNetworkAgent?.enabled)) === true;
88
86
  }
89
87
 
90
88
  function isDrJonesPerformanceFeatureAvailable(config?: Root.Runtime.HostConfig): boolean {
91
- return (config?.aidaAvailability?.enabled &&
92
- (config?.devToolsAiAssistancePerformanceAgentDogfood?.enabled ||
93
- config?.devToolsAiAssistancePerformanceAgent?.enabled)) === true;
89
+ return (config?.aidaAvailability?.enabled && (config?.devToolsAiAssistancePerformanceAgent?.enabled)) === true;
94
90
  }
95
91
 
96
92
  function isDrJonesFileFeatureAvailable(config?: Root.Runtime.HostConfig): boolean {
97
- return (config?.aidaAvailability?.enabled &&
98
- (config?.devToolsAiAssistanceFileAgentDogfood?.enabled || config?.devToolsAiAssistanceFileAgent?.enabled)) ===
99
- true;
93
+ return (config?.aidaAvailability?.enabled && (config?.devToolsAiAssistanceFileAgent?.enabled)) === true;
100
94
  }
101
95
 
102
96
  function isAnyFeatureAvailable(config?: Root.Runtime.HostConfig): boolean {
@@ -206,7 +200,6 @@ UI.ActionRegistration.registerActionExtension({
206
200
  contextTypes(): [] {
207
201
  return [];
208
202
  },
209
- setting,
210
203
  category: UI.ActionRegistration.ActionCategory.GLOBAL,
211
204
  title: i18nLazyString(UIStrings.askAi),
212
205
  async loadActionDelegate() {
@@ -236,7 +229,6 @@ UI.ActionRegistration.registerActionExtension({
236
229
  contextTypes() {
237
230
  return [];
238
231
  },
239
- setting,
240
232
  category: UI.ActionRegistration.ActionCategory.GLOBAL,
241
233
  title: i18nLazyString(UIStrings.askAi),
242
234
  async loadActionDelegate() {
@@ -43,7 +43,7 @@ export class HideIssuesMenu extends HTMLElement {
43
43
  this.#shadow.adoptedStyleSheets = [hideIssuesMenuStyles];
44
44
  }
45
45
 
46
- onMenuOpen(event: MouseEvent): void {
46
+ onMenuOpen(event: Event): void {
47
47
  event.stopPropagation();
48
48
  const buttonElement = this.#shadow.querySelector('devtools-button');
49
49
  const contextMenu = new UI.ContextMenu.ContextMenu(event, {
@@ -55,14 +55,6 @@ export class HideIssuesMenu extends HTMLElement {
55
55
  void contextMenu.show();
56
56
  }
57
57
 
58
- onKeydown(event: KeyboardEvent): void {
59
- if (event.key === 'Enter' || event.key === 'Space') {
60
- // Make sure we don't propagate 'Enter' or 'Space' key events to parents,
61
- // so that these get turned into 'click' events properly.
62
- event.stopImmediatePropagation();
63
- }
64
- }
65
-
66
58
  #render(): void {
67
59
  // Disabled until https://crbug.com/1079231 is fixed.
68
60
  // clang-format off
@@ -71,8 +63,7 @@ export class HideIssuesMenu extends HTMLElement {
71
63
  .data=${{variant: Buttons.Button.Variant.ICON,iconName: 'dots-vertical', title: i18nString(UIStrings.tooltipTitle)} as Buttons.Button.ButtonData}
72
64
  .jslogContext=${'hide-issues'}
73
65
  class="hide-issues-menu-btn"
74
- @click=${this.onMenuOpen}
75
- @keydown=${this.onKeydown}></devtools-button>
66
+ @click=${this.onMenuOpen}></devtools-button>
76
67
  `, this.#shadow, {host: this});
77
68
  }
78
69
  }
@@ -30,7 +30,6 @@
30
30
 
31
31
  import * as Common from '../../core/common/common.js';
32
32
  import * as i18n from '../../core/i18n/i18n.js';
33
- import * as Platform from '../../core/platform/platform.js';
34
33
  import * as SDK from '../../core/sdk/sdk.js';
35
34
  import type * as Protocol from '../../generated/protocol.js';
36
35
  import * as UI from '../../ui/legacy/legacy.js';
@@ -316,7 +315,7 @@ export class LayerDetailsView extends Common.ObjectWrapper.eventMixin<EventTypes
316
315
  this.paintCountCell.parentElement.classList.toggle('hidden', !layer.paintCount());
317
316
  }
318
317
  this.paintCountCell.textContent = String(layer.paintCount());
319
- this.memoryEstimateCell.textContent = Platform.NumberUtilities.bytesToString(layer.gpuMemoryUsage());
318
+ this.memoryEstimateCell.textContent = i18n.ByteUtilities.bytesToString(layer.gpuMemoryUsage());
320
319
  void layer.requestCompositingReasons().then(this.updateCompositingReasons.bind(this));
321
320
  this.scrollRectsCell.removeChildren();
322
321
  layer.scrollRects().forEach(this.createScrollRectElement.bind(this));