chrome-devtools-frontend 1.0.923302 → 1.0.925026

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 (320) hide show
  1. package/config/gni/all_devtools_files.gni +0 -1
  2. package/config/gni/devtools_grd_files.gni +1 -3
  3. package/config/gni/devtools_image_files.gni +1 -1
  4. package/front_end/Images/src/copy_icon.svg +79 -0
  5. package/front_end/core/common/EventTarget.ts +22 -27
  6. package/front_end/core/common/Object.ts +28 -26
  7. package/front_end/core/common/Settings.ts +9 -8
  8. package/front_end/core/i18n/locales/en-US.json +18 -39
  9. package/front_end/core/i18n/locales/en-XL.json +18 -39
  10. package/front_end/core/platform/string-utilities.ts +4 -3
  11. package/front_end/core/sdk/EmulationModel.ts +1 -1
  12. package/front_end/core/sdk/NetworkManager.ts +1 -2
  13. package/front_end/core/sdk/ResourceTreeModel.ts +2 -3
  14. package/front_end/core/sdk/RuntimeModel.ts +2 -3
  15. package/front_end/core/sdk/SourceMap.ts +74 -31
  16. package/front_end/core/sdk/TargetManager.ts +9 -8
  17. package/front_end/core/sdk/TracingManager.ts +1 -1
  18. package/front_end/entrypoints/main/MainImpl.ts +1 -1
  19. package/front_end/entrypoints/node_main/NodeMain.ts +1 -1
  20. package/front_end/generated/InspectorBackendCommands.js +9 -5
  21. package/front_end/generated/protocol-mapping.d.ts +1 -0
  22. package/front_end/generated/protocol-proxy-api.d.ts +1 -0
  23. package/front_end/generated/protocol.d.ts +13 -2
  24. package/front_end/legacy_test_runner/application_test_runner/application_test_runner.js +0 -1
  25. package/front_end/models/bindings/CompilerScriptMapping.ts +24 -6
  26. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +30 -30
  27. package/front_end/models/extensions/ExtensionServer.ts +10 -13
  28. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  29. package/front_end/models/workspace_diff/WorkspaceDiff.ts +24 -20
  30. package/front_end/panels/animation/AnimationModel.ts +6 -1
  31. package/front_end/panels/animation/AnimationTimeline.ts +2 -2
  32. package/front_end/panels/application/AppManifestView.ts +58 -20
  33. package/front_end/panels/application/ApplicationPanelCacheSection.ts +1 -59
  34. package/front_end/panels/application/ApplicationPanelSidebar.ts +15 -163
  35. package/front_end/panels/application/BackgroundServiceModel.ts +6 -1
  36. package/front_end/panels/application/BackgroundServiceView.ts +4 -4
  37. package/front_end/panels/application/DOMStorageItemsView.ts +2 -2
  38. package/front_end/panels/application/DatabaseModel.ts +6 -1
  39. package/front_end/panels/application/DatabaseTableView.ts +1 -1
  40. package/front_end/panels/application/IndexedDBModel.ts +9 -1
  41. package/front_end/panels/application/IndexedDBViews.ts +7 -8
  42. package/front_end/panels/application/ServiceWorkerCacheViews.ts +2 -2
  43. package/front_end/panels/application/ServiceWorkersView.ts +3 -3
  44. package/front_end/panels/application/StorageItemsView.ts +2 -3
  45. package/front_end/panels/application/StorageView.ts +0 -13
  46. package/front_end/panels/application/appManifestView.css +8 -0
  47. package/front_end/panels/application/application-legacy.ts +0 -3
  48. package/front_end/panels/application/application.ts +0 -4
  49. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +1 -1
  50. package/front_end/panels/console/ConsolePinPane.ts +1 -2
  51. package/front_end/panels/console/ConsoleSidebar.ts +2 -2
  52. package/front_end/panels/console/ConsoleView.ts +7 -6
  53. package/front_end/panels/console/ConsoleViewMessage.ts +4 -3
  54. package/front_end/panels/coverage/CoverageModel.ts +9 -3
  55. package/front_end/panels/coverage/CoverageView.ts +3 -2
  56. package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
  57. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +1 -1
  58. package/front_end/panels/elements/ComputedStyleWidget.ts +2 -2
  59. package/front_end/panels/elements/ElementsPanel.ts +3 -3
  60. package/front_end/panels/elements/StylePropertyTreeElement.ts +14 -4
  61. package/front_end/panels/elements/StylesSidebarPane.ts +4 -2
  62. package/front_end/panels/input/InputModel.ts +1 -1
  63. package/front_end/panels/issues/ComboBoxOfCheckBoxes.ts +2 -4
  64. package/front_end/panels/issues/HiddenIssuesRow.ts +7 -12
  65. package/front_end/panels/layers/LayerTreeModel.ts +6 -1
  66. package/front_end/panels/layers/LayersPanel.ts +3 -4
  67. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -0
  68. package/front_end/panels/media/MainView.ts +22 -19
  69. package/front_end/panels/media/MediaModel.ts +15 -7
  70. package/front_end/panels/media/PlayerMessagesView.ts +2 -4
  71. package/front_end/panels/network/NetworkPanel.ts +6 -6
  72. package/front_end/panels/network/RequestHeadersView.ts +7 -0
  73. package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -2
  74. package/front_end/panels/network/networkLogView.css +5 -0
  75. package/front_end/panels/profiler/HeapProfileView.ts +14 -4
  76. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +14 -1
  77. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +11 -3
  78. package/front_end/panels/profiler/HeapSnapshotView.ts +67 -32
  79. package/front_end/panels/profiler/LiveHeapProfileView.ts +2 -2
  80. package/front_end/panels/profiler/ProfileHeader.ts +11 -2
  81. package/front_end/panels/profiler/ProfileView.ts +3 -3
  82. package/front_end/panels/profiler/ProfilesPanel.ts +7 -6
  83. package/front_end/panels/screencast/InputModel.ts +1 -1
  84. package/front_end/panels/screencast/ScreencastView.ts +1 -1
  85. package/front_end/panels/security/SecurityModel.ts +5 -1
  86. package/front_end/panels/security/SecurityPanel.ts +1 -2
  87. package/front_end/panels/sensors/SensorsView.ts +3 -2
  88. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +6 -3
  89. package/front_end/panels/sources/CSSPlugin.ts +1 -1
  90. package/front_end/panels/sources/DebuggerPlugin.ts +6 -4
  91. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +1 -1
  92. package/front_end/panels/sources/ScriptFormatterEditorAction.ts +1 -1
  93. package/front_end/panels/sources/SourcesPanel.ts +2 -2
  94. package/front_end/panels/timeline/TimelineFlameChartView.ts +5 -8
  95. package/front_end/panels/timeline/TimelineUIUtils.ts +1 -2
  96. package/front_end/panels/web_audio/AudioContextSelector.ts +4 -6
  97. package/front_end/panels/web_audio/WebAudioModel.ts +19 -1
  98. package/front_end/panels/web_audio/WebAudioView.ts +28 -22
  99. package/front_end/panels/web_audio/graph_visualizer/graph_visualizer.ts +0 -7
  100. package/front_end/panels/web_audio/web_audio.ts +1 -23
  101. package/front_end/panels/webauthn/WebauthnPane.ts +20 -10
  102. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +598 -595
  103. package/front_end/third_party/lighthouse/locales/en-US.json +6 -0
  104. package/front_end/third_party/lighthouse/locales/en-XL.json +6 -0
  105. package/front_end/third_party/lighthouse/report/bundle.d.ts +25 -4
  106. package/front_end/third_party/lighthouse/report/bundle.js +111 -22
  107. package/front_end/third_party/lighthouse/report-assets/report.css +120 -12
  108. package/front_end/third_party/lighthouse/report-assets/report.js +10 -10
  109. package/front_end/third_party/puppeteer/README.chromium +1 -1
  110. package/front_end/third_party/puppeteer/package/CHANGELOG.md +66 -0
  111. package/front_end/third_party/puppeteer/package/README.md +34 -13
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.js +5 -5
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts +18 -2
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js +8 -3
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts +2 -2
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js +2 -2
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.d.ts +22 -6
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.d.ts.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js +14 -7
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.d.ts +1 -0
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.d.ts.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.js +10 -6
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.js.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.js +120 -0
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.js.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EvalTypes.d.ts +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EvalTypes.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js +2 -2
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.d.ts +62 -3
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.js +131 -3
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts +40 -0
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts.map +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js +76 -0
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts +53 -2
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js +82 -13
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts +2 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js +14 -2
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
  153. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PDFOptions.d.ts +5 -0
  154. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PDFOptions.d.ts.map +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PDFOptions.js.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts +1053 -29
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js +1114 -22
  159. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.d.ts.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.js +17 -6
  162. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/assert.d.ts +1 -0
  164. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/assert.d.ts.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/assert.js +6 -1
  166. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/assert.js.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.d.ts +21 -5
  168. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.d.ts.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.js +47 -28
  170. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.js.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/global.d.ts +17 -0
  172. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/global.d.ts.map +1 -0
  173. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/global.js +3 -0
  174. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/global.js.map +1 -0
  175. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js +9 -10
  177. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js +5 -2
  180. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +10 -2
  182. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.d.ts +1 -1
  184. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.js +83 -6
  186. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
  187. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  188. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.js +7 -1
  189. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  190. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.d.ts +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.d.ts.map +1 -1
  192. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js +2 -2
  193. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js.map +1 -1
  194. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.d.ts.map +1 -1
  195. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js +17 -3
  196. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js.map +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
  199. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js +5 -5
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts +18 -2
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js +8 -3
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts +2 -2
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js +2 -2
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts +22 -6
  208. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js +14 -7
  210. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts +1 -0
  212. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js +10 -6
  214. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.js +120 -0
  217. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EvalTypes.d.ts +1 -1
  219. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EvalTypes.d.ts.map +1 -1
  220. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js +2 -2
  222. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts +62 -3
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js +131 -3
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts +40 -0
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js +76 -0
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js.map +1 -1
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts +53 -2
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js +82 -13
  234. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
  235. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts +2 -1
  236. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
  237. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js +14 -2
  238. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
  239. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PDFOptions.d.ts +5 -0
  240. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PDFOptions.d.ts.map +1 -1
  241. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PDFOptions.js.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts +1053 -29
  243. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js +1115 -23
  245. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Tracing.d.ts.map +1 -1
  247. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Tracing.js +17 -6
  248. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Tracing.js.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.d.ts +1 -0
  250. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.d.ts.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.js +4 -0
  252. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.js.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.d.ts +21 -5
  254. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js +32 -13
  256. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/global.d.ts +17 -0
  258. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/global.d.ts.map +1 -0
  259. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/global.js +2 -0
  260. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/global.js.map +1 -0
  261. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
  262. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js +9 -10
  263. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
  264. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js +5 -2
  266. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +10 -2
  268. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.d.ts +1 -1
  270. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js +83 -6
  272. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  274. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.js +7 -1
  275. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  276. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.d.ts +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.d.ts.map +1 -1
  278. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js +2 -2
  279. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js.map +1 -1
  280. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.d.ts.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js +17 -3
  282. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +1 -1
  284. package/front_end/third_party/puppeteer/package/lib/types.d.ts +1382 -19726
  285. package/front_end/third_party/puppeteer/package/package.json +9 -6
  286. package/front_end/third_party/wasmparser/README.chromium +2 -2
  287. package/front_end/third_party/wasmparser/package/CHANGELOG.md +13 -0
  288. package/front_end/third_party/wasmparser/package/dist/cjs/WasmDis.js +50 -10
  289. package/front_end/third_party/wasmparser/package/dist/cjs/WasmDis.js.map +1 -1
  290. package/front_end/third_party/wasmparser/package/dist/cjs/WasmParser.d.ts +21 -4
  291. package/front_end/third_party/wasmparser/package/dist/cjs/WasmParser.js +76 -8
  292. package/front_end/third_party/wasmparser/package/dist/cjs/WasmParser.js.map +1 -1
  293. package/front_end/third_party/wasmparser/package/dist/esm/WasmDis.js +50 -10
  294. package/front_end/third_party/wasmparser/package/dist/esm/WasmDis.js.map +1 -1
  295. package/front_end/third_party/wasmparser/package/dist/esm/WasmParser.d.ts +21 -4
  296. package/front_end/third_party/wasmparser/package/dist/esm/WasmParser.js +76 -8
  297. package/front_end/third_party/wasmparser/package/dist/esm/WasmParser.js.map +1 -1
  298. package/front_end/third_party/wasmparser/package/package.json +1 -1
  299. package/front_end/third_party/wasmparser/package/src/WasmDis.ts +47 -10
  300. package/front_end/third_party/wasmparser/package/src/WasmParser.ts +75 -5
  301. package/front_end/ui/components/icon_button/iconButton.css +4 -0
  302. package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts +2 -6
  303. package/front_end/ui/legacy/FilterBar.ts +1 -1
  304. package/front_end/ui/legacy/GlassPane.ts +1 -3
  305. package/front_end/ui/legacy/SplitWidget.ts +1 -1
  306. package/front_end/ui/legacy/UIUtils.ts +3 -4
  307. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +3 -3
  308. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
  309. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +15 -6
  310. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +7 -1
  311. package/front_end/ui/legacy/components/inline_editor/SwatchPopoverHelper.ts +6 -2
  312. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
  313. package/front_end/ui/legacy/components/utils/TargetDetachedDialog.ts +1 -1
  314. package/front_end/ui/legacy/reportView.css +1 -0
  315. package/package.json +1 -1
  316. package/scripts/build/rollup.config.js +0 -5
  317. package/front_end/Images/src/exclamation_mark_circle_icon.svg +0 -65
  318. package/front_end/legacy_test_runner/application_test_runner/AppcacheTestRunner.js +0 -220
  319. package/front_end/panels/application/ApplicationCacheItemsView.ts +0 -335
  320. package/front_end/panels/application/ApplicationCacheModel.ts +0 -206
@@ -554,6 +554,12 @@
554
554
  "lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js | columnDisplayedDimensions": {
555
555
  "message": "Displayed dimensions"
556
556
  },
557
+ "lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js | failureTitle": {
558
+ "message": "Images were larger than their displayed size"
559
+ },
560
+ "lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js | title": {
561
+ "message": "Images were appropriate for their displayed size"
562
+ },
557
563
  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
558
564
  "message": "Serve images that are appropriately-sized to save cellular data and improve load time. [Learn more](https://web.dev/uses-responsive-images/)."
559
565
  },
@@ -554,6 +554,12 @@
554
554
  "lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js | columnDisplayedDimensions": {
555
555
  "message": "D̂íŝṕl̂áŷéd̂ d́îḿêńŝíôńŝ"
556
556
  },
557
+ "lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js | failureTitle": {
558
+ "message": "Îḿâǵêś ŵér̂é l̂ár̂ǵêŕ t̂h́âń t̂h́êír̂ d́îśp̂ĺâýêd́ ŝíẑé"
559
+ },
560
+ "lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js | title": {
561
+ "message": "Îḿâǵêś ŵér̂é âṕp̂ŕôṕr̂íât́ê f́ôŕ t̂h́êír̂ d́îśp̂ĺâýêd́ ŝíẑé"
562
+ },
557
563
  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
558
564
  "message": "Ŝér̂v́ê ím̂áĝéŝ t́ĥát̂ ár̂é âṕp̂ŕôṕr̂íât́êĺŷ-śîźêd́ t̂ó ŝáv̂é ĉél̂ĺûĺâŕ d̂át̂á âńd̂ ím̂ṕr̂óv̂é l̂óâd́ t̂ím̂é. [L̂éâŕn̂ ḿôŕê](https://web.dev/uses-responsive-images/)."
559
565
  },
@@ -1,5 +1,5 @@
1
1
 
2
- export type ComponentName = '3pFilter' | 'audit' | 'categoryHeader' | 'chevron' | 'clump' | 'crc' | 'crcChain' | 'elementScreenshot' | 'envItem' | 'footer' | 'gauge' | 'gaugePwa' | 'heading' | 'metric' | 'metricsToggle' | 'opportunity' | 'opportunityHeader' | 'scorescale' | 'scoresWrapper' | 'snippet' | 'snippetContent' | 'snippetHeader' | 'snippetLine' | 'topbar' | 'warningsToplevel';
2
+ export type ComponentName = '3pFilter' | 'audit' | 'categoryHeader' | 'chevron' | 'clump' | 'crc' | 'crcChain' | 'elementScreenshot' | 'envItem' | 'footer' | 'fraction' | 'gauge' | 'gaugePwa' | 'heading' | 'metric' | 'metricsToggle' | 'opportunity' | 'opportunityHeader' | 'scorescale' | 'scoresWrapper' | 'snippet' | 'snippetContent' | 'snippetHeader' | 'snippetLine' | 'topbar' | 'warningsToplevel';
3
3
  export type I18n<T> = any;
4
4
  export type CRCSegment = {
5
5
  node: any[string];
@@ -343,9 +343,12 @@ declare class CategoryRenderer {
343
343
  /**
344
344
  * @param {LH.ReportResult.Category} category
345
345
  * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
346
+ * @param {{gatherMode: LH.Result.GatherMode}=} options
346
347
  * @return {DocumentFragment}
347
348
  */
348
- renderCategoryHeader(category: any, groupDefinitions: Record<string, any>): DocumentFragment;
349
+ renderCategoryHeader(category: any, groupDefinitions: Record<string, any>, options?: {
350
+ gatherMode: any;
351
+ } | undefined): DocumentFragment;
349
352
  /**
350
353
  * Renders the group container for a group of audits. Individual audit elements can be added
351
354
  * directly to the returned element.
@@ -384,12 +387,26 @@ declare class CategoryRenderer {
384
387
  auditRefs: Array<any>;
385
388
  description?: string;
386
389
  }): Element;
390
+ /**
391
+ * @param {LH.ReportResult.Category} category
392
+ * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
393
+ * @param {{gatherMode: LH.Result.GatherMode}=} options
394
+ * @return {DocumentFragment}
395
+ */
396
+ renderCategoryScore(category: any, groupDefinitions: Record<string, any>, options?: {
397
+ gatherMode: any;
398
+ } | undefined): DocumentFragment;
387
399
  /**
388
400
  * @param {LH.ReportResult.Category} category
389
401
  * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
390
402
  * @return {DocumentFragment}
391
403
  */
392
404
  renderScoreGauge(category: any, groupDefinitions: Record<string, any>): DocumentFragment;
405
+ /**
406
+ * @param {LH.ReportResult.Category} category
407
+ * @return {DocumentFragment}
408
+ */
409
+ renderCategoryFraction(category: any): DocumentFragment;
393
410
  /**
394
411
  * Returns true if an LH category has any non-"notApplicable" audits.
395
412
  * @param {LH.ReportResult.Category} category
@@ -433,12 +450,16 @@ declare class CategoryRenderer {
433
450
  * ├── …
434
451
  * ⋮
435
452
  * @param {LH.ReportResult.Category} category
436
- * @param {Object<string, LH.Result.ReportGroup>} [groupDefinitions]
453
+ * @param {Object<string, LH.Result.ReportGroup>=} groupDefinitions
454
+ * @param {{environment?: 'PSI', gatherMode: LH.Result.GatherMode}=} options
437
455
  * @return {Element}
438
456
  */
439
457
  render(category: any, groupDefinitions?: {
440
458
  [x: string]: any;
441
- }): Element;
459
+ } | undefined, options?: {
460
+ environment?: 'PSI';
461
+ gatherMode: any;
462
+ } | undefined): Element;
442
463
  /**
443
464
  * Create a non-semantic span used for hash navigation of categories
444
465
  * @param {Element} element
@@ -848,6 +848,24 @@ function createFooterComponent(dom) {
848
848
  return el0;
849
849
  }
850
850
 
851
+ /**
852
+ * @param {DOM} dom
853
+ */
854
+ function createFractionComponent(dom) {
855
+ const el0 = dom.document().createDocumentFragment();
856
+ const el1 = dom.createElement('a', 'lh-fraction__wrapper');
857
+ el1.setAttribute('href', '#');
858
+ const el2 = dom.createElement('div', 'lh-fraction__content-wrapper');
859
+ const el3 = dom.createElement('div', 'lh-fraction__content');
860
+ const el4 = dom.createElement('div', 'lh-fraction__background');
861
+ el3.append(' ', el4, ' ');
862
+ el2.append(' ', el3, ' ');
863
+ const el5 = dom.createElement('div', 'lh-fraction__label');
864
+ el1.append(' ', el2, ' ', el5, ' ');
865
+ el0.append(el1);
866
+ return el0;
867
+ }
868
+
851
869
  /**
852
870
  * @param {DOM} dom
853
871
  */
@@ -1000,10 +1018,11 @@ function createMetricComponent(dom) {
1000
1018
  const el0 = dom.document().createDocumentFragment();
1001
1019
  const el1 = dom.createElement('div', 'lh-metric');
1002
1020
  const el2 = dom.createElement('div', 'lh-metric__innerwrap');
1003
- const el3 = dom.createElement('span', 'lh-metric__title');
1004
- const el4 = dom.createElement('div', 'lh-metric__value');
1005
- const el5 = dom.createElement('div', 'lh-metric__description');
1006
- el2.append(' ', el3, ' ', el4, ' ', el5, ' ');
1021
+ const el3 = dom.createElement('div', 'lh-metric__icon');
1022
+ const el4 = dom.createElement('span', 'lh-metric__title');
1023
+ const el5 = dom.createElement('div', 'lh-metric__value');
1024
+ const el6 = dom.createElement('div', 'lh-metric__description');
1025
+ el2.append(' ', el3, ' ', el4, ' ', el5, ' ', el6, ' ');
1007
1026
  el1.append(' ', el2, ' ');
1008
1027
  el0.append(el1);
1009
1028
  return el0;
@@ -1391,7 +1410,7 @@ function createWarningsToplevelComponent(dom) {
1391
1410
  }
1392
1411
 
1393
1412
 
1394
- /** @typedef {'3pFilter'|'audit'|'categoryHeader'|'chevron'|'clump'|'crc'|'crcChain'|'elementScreenshot'|'envItem'|'footer'|'gauge'|'gaugePwa'|'heading'|'metric'|'metricsToggle'|'opportunity'|'opportunityHeader'|'scorescale'|'scoresWrapper'|'snippet'|'snippetContent'|'snippetHeader'|'snippetLine'|'topbar'|'warningsToplevel'} ComponentName */
1413
+ /** @typedef {'3pFilter'|'audit'|'categoryHeader'|'chevron'|'clump'|'crc'|'crcChain'|'elementScreenshot'|'envItem'|'footer'|'fraction'|'gauge'|'gaugePwa'|'heading'|'metric'|'metricsToggle'|'opportunity'|'opportunityHeader'|'scorescale'|'scoresWrapper'|'snippet'|'snippetContent'|'snippetHeader'|'snippetLine'|'topbar'|'warningsToplevel'} ComponentName */
1395
1414
  /**
1396
1415
  * @param {DOM} dom
1397
1416
  * @param {ComponentName} componentName
@@ -1409,6 +1428,7 @@ function createComponent(dom, componentName) {
1409
1428
  case 'elementScreenshot': return createElementScreenshotComponent(dom);
1410
1429
  case 'envItem': return createEnvItemComponent(dom);
1411
1430
  case 'footer': return createFooterComponent(dom);
1431
+ case 'fraction': return createFractionComponent(dom);
1412
1432
  case 'gauge': return createGaugeComponent(dom);
1413
1433
  case 'gaugePwa': return createGaugePwaComponent(dom);
1414
1434
  case 'heading': return createHeadingComponent(dom);
@@ -1859,13 +1879,14 @@ class CategoryRenderer {
1859
1879
  /**
1860
1880
  * @param {LH.ReportResult.Category} category
1861
1881
  * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
1882
+ * @param {{gatherMode: LH.Result.GatherMode}=} options
1862
1883
  * @return {DocumentFragment}
1863
1884
  */
1864
- renderCategoryHeader(category, groupDefinitions) {
1885
+ renderCategoryHeader(category, groupDefinitions, options) {
1865
1886
  const component = this.dom.createComponent('categoryHeader');
1866
1887
 
1867
1888
  const gaugeContainerEl = this.dom.find('.lh-score__gauge', component);
1868
- const gaugeEl = this.renderScoreGauge(category, groupDefinitions);
1889
+ const gaugeEl = this.renderCategoryScore(category, groupDefinitions, options);
1869
1890
  gaugeContainerEl.appendChild(gaugeEl);
1870
1891
 
1871
1892
  if (category.description) {
@@ -1999,6 +2020,19 @@ class CategoryRenderer {
1999
2020
  return clumpElement;
2000
2021
  }
2001
2022
 
2023
+ /**
2024
+ * @param {LH.ReportResult.Category} category
2025
+ * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
2026
+ * @param {{gatherMode: LH.Result.GatherMode}=} options
2027
+ * @return {DocumentFragment}
2028
+ */
2029
+ renderCategoryScore(category, groupDefinitions, options) {
2030
+ if (options && (options.gatherMode === 'snapshot' || options.gatherMode === 'timespan')) {
2031
+ return this.renderCategoryFraction(category);
2032
+ }
2033
+ return this.renderScoreGauge(category, groupDefinitions);
2034
+ }
2035
+
2002
2036
  /**
2003
2037
  * @param {LH.ReportResult.Category} category
2004
2038
  * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
@@ -2041,6 +2075,44 @@ class CategoryRenderer {
2041
2075
  return tmpl;
2042
2076
  }
2043
2077
 
2078
+ /**
2079
+ * @param {LH.ReportResult.Category} category
2080
+ * @return {DocumentFragment}
2081
+ */
2082
+ renderCategoryFraction(category) {
2083
+ const tmpl = this.dom.createComponent('fraction');
2084
+ const wrapper = this.dom.find('a.lh-fraction__wrapper', tmpl);
2085
+ this.dom.safelySetHref(wrapper, `#${category.id}`);
2086
+
2087
+ const numAudits = category.auditRefs.length;
2088
+
2089
+ let numPassed = 0;
2090
+ let totalWeight = 0;
2091
+ for (const auditRef of category.auditRefs) {
2092
+ totalWeight += auditRef.weight;
2093
+ if (Util.showAsPassed(auditRef.result)) numPassed++;
2094
+ }
2095
+
2096
+ const fraction = numPassed / numAudits;
2097
+ const content = this.dom.find('.lh-fraction__content', tmpl);
2098
+ const text = this.dom.createElement('span');
2099
+ text.textContent = `${numPassed}/${numAudits}`;
2100
+ content.appendChild(text);
2101
+
2102
+ let rating = Util.calculateRating(fraction);
2103
+
2104
+ // If none of the available audits can affect the score, a rating isn't useful.
2105
+ // The flow report should display the fraction with neutral icon and coloring in this case.
2106
+ if (totalWeight === 0) {
2107
+ rating = 'null';
2108
+ }
2109
+
2110
+ wrapper.classList.add(`lh-fraction__wrapper--${rating}`);
2111
+
2112
+ this.dom.find('.lh-fraction__label', tmpl).textContent = category.title;
2113
+ return tmpl;
2114
+ }
2115
+
2044
2116
  /**
2045
2117
  * Returns true if an LH category has any non-"notApplicable" audits.
2046
2118
  * @param {LH.ReportResult.Category} category
@@ -2122,13 +2194,14 @@ class CategoryRenderer {
2122
2194
  * ├── …
2123
2195
  * ⋮
2124
2196
  * @param {LH.ReportResult.Category} category
2125
- * @param {Object<string, LH.Result.ReportGroup>} [groupDefinitions]
2197
+ * @param {Object<string, LH.Result.ReportGroup>=} groupDefinitions
2198
+ * @param {{environment?: 'PSI', gatherMode: LH.Result.GatherMode}=} options
2126
2199
  * @return {Element}
2127
2200
  */
2128
- render(category, groupDefinitions = {}) {
2201
+ render(category, groupDefinitions = {}, options) {
2129
2202
  const element = this.dom.createElement('div', 'lh-category');
2130
2203
  this.createPermalinkSpan(element, category.id);
2131
- element.appendChild(this.renderCategoryHeader(category, groupDefinitions));
2204
+ element.appendChild(this.renderCategoryHeader(category, groupDefinitions, options));
2132
2205
 
2133
2206
  // Top level clumps for audits, in order they will appear in the report.
2134
2207
  /** @type {Map<TopLevelClumpId, Array<LH.ReportResult.AuditRef>>} */
@@ -3924,20 +3997,20 @@ class PerformanceCategoryRenderer extends CategoryRenderer {
3924
3997
  /**
3925
3998
  * @param {LH.ReportResult.Category} category
3926
3999
  * @param {Object<string, LH.Result.ReportGroup>} groups
3927
- * @param {'PSI'=} environment 'PSI' and undefined are the only valid values
4000
+ * @param {{gatherMode: LH.Result.GatherMode, environment?: 'PSI'}=} options
3928
4001
  * @return {Element}
3929
4002
  * @override
3930
4003
  */
3931
- render(category, groups, environment) {
4004
+ render(category, groups, options) {
3932
4005
  const strings = Util.i18n.strings;
3933
4006
  const element = this.dom.createElement('div', 'lh-category');
3934
- if (environment === 'PSI') {
4007
+ if (options && options.environment === 'PSI') {
3935
4008
  const gaugeEl = this.dom.createElement('div', 'lh-score__gauge');
3936
- gaugeEl.appendChild(this.renderScoreGauge(category, groups));
4009
+ gaugeEl.appendChild(this.renderCategoryScore(category, groups, options));
3937
4010
  element.appendChild(gaugeEl);
3938
4011
  } else {
3939
4012
  this.createPermalinkSpan(element, category.id);
3940
- element.appendChild(this.renderCategoryHeader(category, groups));
4013
+ element.appendChild(this.renderCategoryHeader(category, groups, options));
3941
4014
  }
3942
4015
 
3943
4016
  // Metrics.
@@ -4180,11 +4253,21 @@ class PwaCategoryRenderer extends CategoryRenderer {
4180
4253
  }
4181
4254
 
4182
4255
  /**
4256
+ * Alias for backcompat.
4183
4257
  * @param {LH.ReportResult.Category} category
4184
4258
  * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
4185
4259
  * @return {DocumentFragment}
4186
4260
  */
4187
4261
  renderScoreGauge(category, groupDefinitions) {
4262
+ return this.renderCategoryScore(category, groupDefinitions);
4263
+ }
4264
+
4265
+ /**
4266
+ * @param {LH.ReportResult.Category} category
4267
+ * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
4268
+ * @return {DocumentFragment}
4269
+ */
4270
+ renderCategoryScore(category, groupDefinitions) {
4188
4271
  // Defer to parent-gauge style if category error.
4189
4272
  if (category.score === null) {
4190
4273
  return super.renderScoreGauge(category, groupDefinitions);
@@ -4469,11 +4552,15 @@ class ReportRenderer {
4469
4552
 
4470
4553
  for (const category of Object.values(report.categories)) {
4471
4554
  const renderer = specificCategoryRenderers[category.id] || categoryRenderer;
4472
- const categoryGauge = renderer.renderScoreGauge(category, report.categoryGroups || {});
4555
+ const categoryGauge = renderer.renderCategoryScore(
4556
+ category,
4557
+ report.categoryGroups || {},
4558
+ {gatherMode: report.gatherMode}
4559
+ );
4473
4560
 
4474
4561
  if (Util.isPluginCategory(category.id)) {
4475
4562
  pluginGauges.push(categoryGauge);
4476
- } else if (renderer.renderScoreGauge === categoryRenderer.renderScoreGauge) {
4563
+ } else if (renderer.renderCategoryScore === categoryRenderer.renderCategoryScore) {
4477
4564
  // The renderer for default categories is just the default CategoryRenderer.
4478
4565
  // If the functions are equal, then renderer is an instance of CategoryRenderer.
4479
4566
  // For example, the PWA category uses PwaCategoryRenderer, which overrides
@@ -4547,12 +4634,17 @@ class ReportRenderer {
4547
4634
  }
4548
4635
 
4549
4636
  const categories = reportSection.appendChild(this._dom.createElement('div', 'lh-categories'));
4637
+ const categoryOptions = {gatherMode: report.gatherMode};
4550
4638
  for (const category of Object.values(report.categories)) {
4551
4639
  const renderer = specificCategoryRenderers[category.id] || categoryRenderer;
4552
4640
  // .lh-category-wrapper is full-width and provides horizontal rules between categories.
4553
4641
  // .lh-category within has the max-width: var(--report-width);
4554
4642
  const wrapper = renderer.dom.createChildOf(categories, 'div', 'lh-category-wrapper');
4555
- wrapper.appendChild(renderer.render(category, report.categoryGroups));
4643
+ wrapper.appendChild(renderer.render(
4644
+ category,
4645
+ report.categoryGroups,
4646
+ categoryOptions
4647
+ ));
4556
4648
  }
4557
4649
 
4558
4650
  const reportFragment = this._dom.createFragment();
@@ -5565,16 +5657,14 @@ class ReportUIFeatures {
5565
5657
  return !thirdPartyFilterAuditExclusions.includes(containingAudit.id);
5566
5658
  });
5567
5659
 
5568
- tablesWithUrls.forEach((tableEl, index) => {
5660
+ tablesWithUrls.forEach((tableEl) => {
5569
5661
  const rowEls = getTableRows(tableEl);
5570
5662
  const thirdPartyRows = this._getThirdPartyRows(rowEls, this.json.finalUrl);
5571
5663
 
5572
5664
  // create input box
5573
5665
  const filterTemplate = this._dom.createComponent('3pFilter');
5574
5666
  const filterInput = this._dom.find('input', filterTemplate);
5575
- const id = `lh-3p-filter-label--${index}`;
5576
5667
 
5577
- filterInput.id = id;
5578
5668
  filterInput.addEventListener('change', e => {
5579
5669
  const shouldHideThirdParty = e.target instanceof HTMLInputElement && !e.target.checked;
5580
5670
  let even = true;
@@ -5596,7 +5686,6 @@ class ReportUIFeatures {
5596
5686
  }
5597
5687
  });
5598
5688
 
5599
- this._dom.find('label', filterTemplate).setAttribute('for', id);
5600
5689
  this._dom.find('.lh-3p-filter-count', filterTemplate).textContent =
5601
5690
  `${thirdPartyRows.length}`;
5602
5691
  this._dom.find('.lh-3p-ui-string', filterTemplate).textContent =
@@ -104,8 +104,8 @@
104
104
  --icon-square-size: calc(var(--score-icon-size) * 0.88);
105
105
  --image-preview-size: 48px;
106
106
  --metric-toggle-lines-fill: #7F7F7F;
107
+ --metric-value-font-size: 28px;
107
108
  --metrics-toggle-background-color: var(--color-gray-200);
108
- --screenshot-overlay-background: rgba(0, 0, 0, 0.3);
109
109
  --plugin-badge-background-color: var(--color-white);
110
110
  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);
111
111
  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);
@@ -130,9 +130,11 @@
130
130
  --score-icon-margin-right: 12px;
131
131
  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);
132
132
  --score-icon-size: 12px;
133
+ --score-icon-size-big: 16px;
133
134
  --scores-container-padding: 20px 0 20px 0;
134
135
  --scorescale-height: 6px;
135
136
  --scorescale-width: 18px;
137
+ --screenshot-overlay-background: rgba(0, 0, 0, 0.3);
136
138
  --section-padding-vertical: 12px;
137
139
  --snippet-background-color: var(--color-gray-50);
138
140
  --snippet-color: #0938C2;
@@ -677,7 +679,11 @@
677
679
 
678
680
  .lh-metric__innerwrap {
679
681
  display: grid;
680
- grid-template-columns: var(--audit-description-padding-left) 10fr 3fr;
682
+ /**
683
+ * Icon -- Metric Name
684
+ * -- Metric Value
685
+ */
686
+ grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;
681
687
  align-items: center;
682
688
  padding: 10px 0;
683
689
  }
@@ -703,14 +709,30 @@
703
709
  .lh-metric__description {
704
710
  display: none;
705
711
  grid-column-start: 2;
706
- grid-column-end: 3;
712
+ grid-column-end: 4;
707
713
  color: var(--report-text-color-secondary);
708
714
  }
709
715
 
710
716
  .lh-metric__value {
717
+ font-size: var(--metric-value-font-size);
718
+ margin: calc(var(--default-padding) / 2) 0;
711
719
  white-space: nowrap; /* No wrapping between metric value and the icon */
712
720
  font-weight: 500;
713
- justify-self: end;
721
+ grid-column-start: 2;
722
+ }
723
+
724
+ /* Change the grid to 3 columns for narrow viewport. */
725
+ @media screen and (max-width: 535px) {
726
+ .lh-metric__innerwrap {
727
+ /**
728
+ * Icon -- Metric Name -- Metric Value
729
+ */
730
+ grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;
731
+ }
732
+ .lh-metric__value {
733
+ justify-self: end;
734
+ grid-column-start: unset;
735
+ }
714
736
  }
715
737
 
716
738
  /* No-JS toggle switch */
@@ -777,7 +799,7 @@
777
799
  flex: 1;
778
800
  }
779
801
 
780
- .lh-metric .lh-metric__innerwrap::before,
802
+ .lh-metric__icon,
781
803
  .lh-scorescale-range::before {
782
804
  content: '';
783
805
  width: var(--score-icon-size);
@@ -789,7 +811,7 @@
789
811
  .lh-metric--pass .lh-metric__value {
790
812
  color: var(--color-pass-secondary);
791
813
  }
792
- .lh-metric--pass .lh-metric__innerwrap::before {
814
+ .lh-metric--pass .lh-metric__icon {
793
815
  border-radius: 100%;
794
816
  background: var(--color-pass);
795
817
  }
@@ -797,7 +819,7 @@
797
819
  .lh-metric--average .lh-metric__value {
798
820
  color: var(--color-average-secondary);
799
821
  }
800
- .lh-metric--average .lh-metric__innerwrap::before {
822
+ .lh-metric--average .lh-metric__icon {
801
823
  background: var(--color-average);
802
824
  width: var(--icon-square-size);
803
825
  height: var(--icon-square-size);
@@ -806,8 +828,8 @@
806
828
  .lh-metric--fail .lh-metric__value {
807
829
  color: var(--color-fail-secondary);
808
830
  }
809
- .lh-metric--fail .lh-metric__innerwrap::before,
810
- .lh-metric--error .lh-metric__innerwrap::before {
831
+ .lh-metric--fail .lh-metric__icon,
832
+ .lh-metric--error .lh-metric__icon {
811
833
  border-left: calc(var(--score-icon-size) / 2) solid transparent;
812
834
  border-right: calc(var(--score-icon-size) / 2) solid transparent;
813
835
  border-bottom: var(--score-icon-size) solid var(--color-fail);
@@ -1153,6 +1175,80 @@
1153
1175
  stroke: var(--color-not-applicable);
1154
1176
  }
1155
1177
 
1178
+ .lh-fraction__wrapper .lh-fraction__content::before {
1179
+ content: '';
1180
+ height: var(--score-icon-size);
1181
+ width: var(--score-icon-size);
1182
+ margin: var(--score-icon-margin);
1183
+ display: inline-block;
1184
+ }
1185
+ .lh-fraction__wrapper--pass .lh-fraction__content {
1186
+ color: var(--color-pass);
1187
+ }
1188
+ .lh-fraction__wrapper--pass .lh-fraction__background {
1189
+ background-color: var(--color-pass);
1190
+ }
1191
+ .lh-fraction__wrapper--pass .lh-fraction__content::before {
1192
+ background-color: var(--color-pass);
1193
+ border-radius: 50%;
1194
+ }
1195
+ .lh-fraction__wrapper--average .lh-fraction__content {
1196
+ color: var(--color-average);
1197
+ }
1198
+ .lh-fraction__wrapper--average .lh-fraction__background {
1199
+ background-color: var(--color-average);
1200
+ }
1201
+ .lh-fraction__wrapper--average .lh-fraction__content::before {
1202
+ background-color: var(--color-average);
1203
+ }
1204
+ .lh-fraction__wrapper--fail .lh-fraction__content {
1205
+ color: var(--color-fail);
1206
+ }
1207
+ .lh-fraction__wrapper--fail .lh-fraction__background {
1208
+ background-color: var(--color-fail);
1209
+ }
1210
+ .lh-fraction__wrapper--fail .lh-fraction__content::before {
1211
+ border-left: calc(var(--score-icon-size) / 2) solid transparent;
1212
+ border-right: calc(var(--score-icon-size) / 2) solid transparent;
1213
+ border-bottom: var(--score-icon-size) solid var(--color-fail);
1214
+ }
1215
+ .lh-fraction__wrapper--null .lh-fraction__content {
1216
+ color: var(--color-gray-700);
1217
+ }
1218
+ .lh-fraction__wrapper--null .lh-fraction__background {
1219
+ background-color: var(--color-gray-700);
1220
+ }
1221
+ .lh-fraction__wrapper--null .lh-fraction__content::before {
1222
+ border-radius: 50%;
1223
+ border: 2px solid var(--color-gray-700);
1224
+ }
1225
+
1226
+ .lh-fraction__background {
1227
+ position: absolute;
1228
+ height: 100%;
1229
+ width: 100%;
1230
+ border-radius: calc(var(--gauge-circle-size) / 2);
1231
+ opacity: 0.1;
1232
+ z-index: -1;
1233
+ }
1234
+
1235
+ .lh-fraction__content-wrapper {
1236
+ height: var(--gauge-circle-size);
1237
+ display: flex;
1238
+ align-items: center;
1239
+ }
1240
+
1241
+ .lh-fraction__content {
1242
+ display: flex;
1243
+ position: relative;
1244
+ align-items: center;
1245
+ justify-content: center;
1246
+ font-size: var(--gauge-label-font-size);
1247
+ width: max-content;
1248
+ padding: 1em;
1249
+ min-width: 6em;
1250
+ }
1251
+
1156
1252
  .lh-gauge {
1157
1253
  stroke-linecap: round;
1158
1254
  width: var(--gauge-circle-size);
@@ -1181,6 +1277,10 @@
1181
1277
  .lh-category .lh-gauge__svg-wrapper {
1182
1278
  --gauge-circle-size: var(--gauge-circle-size-big);
1183
1279
  }
1280
+ .lh-category .lh-fraction__wrapper {
1281
+ --gauge-circle-size: var(--gauge-circle-size-big);
1282
+ --score-icon-size: var(--score-icon-size-big)
1283
+ }
1184
1284
 
1185
1285
  /* The plugin badge overlay */
1186
1286
  .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {
@@ -1225,7 +1325,8 @@
1225
1325
  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);
1226
1326
  }
1227
1327
 
1228
- .lh-gauge__wrapper {
1328
+ .lh-gauge__wrapper,
1329
+ .lh-fraction__wrapper {
1229
1330
  position: relative;
1230
1331
  display: flex;
1231
1332
  align-items: center;
@@ -1240,7 +1341,8 @@
1240
1341
  will-change: opacity; /* Only using for layer promotion */
1241
1342
  }
1242
1343
 
1243
- .lh-gauge__label {
1344
+ .lh-gauge__label,
1345
+ .lh-fraction__label {
1244
1346
  font-size: var(--gauge-label-font-size);
1245
1347
  line-height: var(--gauge-label-line-height);
1246
1348
  margin-top: 10px;
@@ -1249,16 +1351,22 @@
1249
1351
  }
1250
1352
 
1251
1353
  /* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */
1252
- .lh-category .lh-gauge__label {
1354
+ .lh-category .lh-gauge__label,
1355
+ .lh-category .lh-fraction__label {
1253
1356
  --gauge-label-font-size: var(--gauge-label-font-size-big);
1254
1357
  --gauge-label-line-height: var(--gauge-label-line-height-big);
1255
1358
  margin-top: 14px;
1256
1359
  }
1360
+ .lh-category .lh-fraction__content {
1361
+ --gauge-label-font-size: var(--gauge-label-font-size-big);
1362
+ }
1257
1363
 
1258
1364
 
1259
1365
  .lh-scores-header .lh-gauge__wrapper,
1366
+ .lh-scores-header .lh-fraction__wrapper,
1260
1367
  .lh-scores-header .lh-gauge--pwa__wrapper,
1261
1368
  .lh-sticky-header .lh-gauge__wrapper,
1369
+ .lh-sticky-header .lh-fraction__wrapper,
1262
1370
  .lh-sticky-header .lh-gauge--pwa__wrapper {
1263
1371
  width: var(--gauge-wrapper-width);
1264
1372
  }