chrome-devtools-frontend 1.0.1616061 → 1.0.1621064

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 (318) hide show
  1. package/AUTHORS +1 -0
  2. package/docs/checklist/README.md +8 -7
  3. package/eslint.config.mjs +7 -0
  4. package/front_end/core/common/Object.ts +11 -2
  5. package/front_end/core/dom_extension/DOMExtension.ts +11 -8
  6. package/front_end/core/host/AidaClient.ts +8 -0
  7. package/front_end/core/host/AidaGcaTranslation.ts +1 -0
  8. package/front_end/core/host/UserMetrics.ts +0 -1
  9. package/front_end/core/platform/api/HostRuntime.ts +2 -2
  10. package/front_end/core/platform/browser/HostRuntime.ts +4 -2
  11. package/front_end/core/platform/node/HostRuntime.ts +2 -2
  12. package/front_end/core/root/ExperimentNames.ts +0 -1
  13. package/front_end/core/sdk/NetworkManager.ts +30 -4
  14. package/front_end/core/sdk/NetworkRequest.ts +2 -10
  15. package/front_end/core/sdk/Resource.ts +2 -1
  16. package/front_end/core/sdk/ServerSentEventsProtocol.ts +1 -1
  17. package/front_end/core/sdk/TraceObject.ts +7 -2
  18. package/front_end/entrypoint_template.html +1 -2
  19. package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +119 -15
  20. package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +0 -2
  21. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +43 -33
  22. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +2 -1
  23. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.ts +9 -6
  24. package/front_end/entrypoints/main/MainImpl.ts +0 -2
  25. package/front_end/generated/InspectorBackendCommands.ts +8 -7
  26. package/front_end/generated/SupportedCSSProperties.js +119 -100
  27. package/front_end/generated/protocol-mapping.d.ts +1 -9
  28. package/front_end/generated/protocol-proxy-api.d.ts +1 -9
  29. package/front_end/generated/protocol.ts +24 -1
  30. package/front_end/legacy/legacy-defs.d.ts +1 -1
  31. package/front_end/models/ai_assistance/AiConversation.ts +1 -0
  32. package/front_end/models/ai_assistance/AiHistoryStorage.ts +39 -0
  33. package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -0
  34. package/front_end/models/ai_assistance/agents/ConversationSummaryAgent.ts +28 -16
  35. package/front_end/models/ai_assistance/agents/GreenDevAgent.ts +512 -0
  36. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +112 -145
  37. package/front_end/models/ai_assistance/agents/README.md +0 -5
  38. package/front_end/models/ai_assistance/agents/StylingAgent.ts +9 -16
  39. package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
  40. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +19 -1
  41. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +48 -13
  42. package/front_end/models/bindings/SymbolizedError.ts +95 -8
  43. package/front_end/models/emulation/DeviceModeModel.ts +42 -13
  44. package/front_end/models/emulation/EmulatedDevices.ts +1 -1
  45. package/front_end/models/issues_manager/IssuesManager.ts +13 -6
  46. package/front_end/models/issues_manager/IssuesManagerEvents.ts +1 -0
  47. package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
  48. package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +1 -0
  49. package/front_end/models/stack_trace/DetailedErrorStackParser.ts +49 -10
  50. package/front_end/models/stack_trace/ErrorStackParser.ts +18 -0
  51. package/front_end/models/stack_trace/StackTraceModel.ts +5 -1
  52. package/front_end/models/text_utils/ContentData.ts +71 -10
  53. package/front_end/models/trace/types/File.ts +8 -1
  54. package/front_end/models/web_mcp/WebMCPModel.ts +22 -0
  55. package/front_end/models/workspace/UISourceCode.ts +4 -4
  56. package/front_end/panels/accessibility/ARIAAttributesView.ts +4 -4
  57. package/front_end/panels/accessibility/AccessibilitySubPane.ts +3 -2
  58. package/front_end/panels/accessibility/SourceOrderView.ts +4 -4
  59. package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
  60. package/front_end/panels/ai_assistance/components/ChatInput.ts +66 -0
  61. package/front_end/panels/ai_assistance/components/ChatMessage.ts +144 -21
  62. package/front_end/panels/ai_assistance/components/ChatView.ts +43 -8
  63. package/front_end/panels/ai_assistance/components/ExportForAgentsDialog.ts +1 -0
  64. package/front_end/panels/ai_assistance/components/WalkthroughUtils.ts +74 -0
  65. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +34 -5
  66. package/front_end/panels/ai_assistance/components/chatMessage.css +11 -0
  67. package/front_end/panels/ai_assistance/components/walkthroughView.css +7 -0
  68. package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
  69. package/front_end/panels/application/CookieItemsView.ts +8 -9
  70. package/front_end/panels/application/DOMStorageItemsView.ts +3 -3
  71. package/front_end/panels/application/DeviceBoundSessionsModel.ts +7 -0
  72. package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +21 -0
  73. package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -2
  74. package/front_end/panels/application/ExtensionStorageItemsView.ts +1 -1
  75. package/front_end/panels/application/KeyValueStorageItemsView.ts +32 -14
  76. package/front_end/panels/application/ResourcesPanel.ts +5 -5
  77. package/front_end/panels/application/StorageItemsToolbar.ts +0 -19
  78. package/front_end/panels/application/WebMCPView.ts +285 -86
  79. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +4 -4
  80. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +4 -4
  81. package/front_end/panels/application/webMCPView.css +261 -182
  82. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +9 -5
  83. package/front_end/panels/changes/ChangesSidebar.ts +2 -2
  84. package/front_end/panels/changes/ChangesView.ts +9 -14
  85. package/front_end/panels/console/ConsolePanel.ts +10 -3
  86. package/front_end/panels/console/ConsoleSidebar.ts +5 -5
  87. package/front_end/panels/console/ConsoleView.ts +11 -4
  88. package/front_end/panels/console/ConsoleViewMessage.ts +1 -19
  89. package/front_end/panels/coverage/CoverageView.ts +4 -5
  90. package/front_end/panels/elements/ElementsPanel.ts +9 -12
  91. package/front_end/panels/elements/ElementsSidebarPane.ts +4 -5
  92. package/front_end/panels/elements/ElementsTreeElement.ts +61 -0
  93. package/front_end/panels/elements/ElementsTreeOutline.ts +46 -0
  94. package/front_end/panels/elements/LayersWidget.ts +2 -2
  95. package/front_end/panels/elements/MetricsSidebarPane.ts +5 -4
  96. package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
  97. package/front_end/panels/elements/StylePropertyTreeElement.ts +11 -6
  98. package/front_end/panels/elements/StylesSidebarPane.ts +4 -1
  99. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +19 -20
  100. package/front_end/panels/elements/components/ElementsBreadcrumbsUtils.ts +29 -29
  101. package/front_end/panels/elements/components/QueryContainer.ts +5 -6
  102. package/front_end/panels/elements/components/components.ts +0 -2
  103. package/front_end/panels/emulation/MediaQueryInspector.ts +4 -7
  104. package/front_end/panels/layer_viewer/LayerDetailsView.ts +4 -7
  105. package/front_end/panels/layer_viewer/Layers3DView.ts +2 -2
  106. package/front_end/panels/lighthouse/LighthouseStartView.ts +2 -2
  107. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +47 -66
  108. package/front_end/panels/network/NetworkConfigView.ts +11 -11
  109. package/front_end/panels/network/RequestConditionsDrawer.ts +6 -4
  110. package/front_end/panels/network/RequestCookiesView.ts +2 -2
  111. package/front_end/panels/network/RequestDeviceBoundSessionsView.ts +2 -2
  112. package/front_end/panels/network/RequestHeadersView.ts +2 -2
  113. package/front_end/panels/network/components/DirectSocketConnectionView.ts +4 -5
  114. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +6 -9
  115. package/front_end/panels/profiler/HeapProfileView.ts +29 -4
  116. package/front_end/panels/profiler/ProfilesPanel.ts +1 -1
  117. package/front_end/panels/protocol_monitor/JSONEditor.css +8 -1
  118. package/front_end/panels/protocol_monitor/JSONEditor.ts +7 -2
  119. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +6 -4
  120. package/front_end/panels/recorder/components/ControlButton.ts +4 -4
  121. package/front_end/panels/recorder/components/StepView.ts +6 -6
  122. package/front_end/panels/search/SearchView.ts +4 -7
  123. package/front_end/panels/sources/DebuggerPausedMessage.ts +18 -22
  124. package/front_end/panels/sources/SourcesView.ts +1 -1
  125. package/front_end/panels/sources/TabbedEditorContainer.ts +2 -2
  126. package/front_end/panels/sources/ThreadsSidebarPane.ts +2 -4
  127. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +24 -20
  128. package/front_end/panels/timeline/StatusDialog.ts +5 -8
  129. package/front_end/panels/timeline/ThirdPartyTreeView.ts +10 -0
  130. package/front_end/panels/timeline/TimelineLoader.ts +3 -4
  131. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +2 -2
  132. package/front_end/panels/timeline/components/TimelineRangeSummaryView.ts +2 -0
  133. package/front_end/panels/timeline/components/TimelineSummary.ts +9 -1
  134. package/front_end/panels/timeline/components/timelineSummary.css +4 -0
  135. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +2 -2
  136. package/front_end/panels/timeline/thirdPartyTreeView.css +8 -1
  137. package/front_end/panels/web_audio/WebAudioView.ts +5 -4
  138. package/front_end/panels/whats_new/ReleaseNoteText.ts +9 -9
  139. package/front_end/panels/whats_new/resources/WNDT.md +9 -6
  140. package/front_end/third_party/chromium/README.chromium +1 -1
  141. package/front_end/third_party/puppeteer/README.chromium +2 -2
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +41 -2
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.d.ts +13 -1
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.d.ts.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.js +21 -1
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.js.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +1 -0
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +2 -2
  153. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +5 -5
  155. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
  158. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
  159. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +1 -0
  161. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.d.ts +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.d.ts.map +1 -1
  164. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.js +2 -2
  165. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.js.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts.map +1 -1
  168. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js +52 -1
  169. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js.map +1 -1
  170. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.js.map +1 -1
  172. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +25 -0
  173. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  174. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +2 -2
  177. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +0 -1
  180. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
  182. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
  183. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  184. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  186. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/urlpattern-polyfill/urlpattern-polyfill.d.ts +1 -0
  187. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/urlpattern-polyfill/urlpattern-polyfill.js +853 -0
  188. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +91 -11
  189. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +1046 -33
  190. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +41 -2
  191. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  192. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  193. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.d.ts +13 -1
  194. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.d.ts.map +1 -1
  195. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.js +21 -1
  196. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.js.map +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +1 -0
  199. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +2 -2
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +5 -5
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +1 -0
  209. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  210. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.d.ts +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.d.ts.map +1 -1
  212. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.js +2 -2
  213. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.js.map +1 -1
  214. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js +52 -1
  217. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.d.ts.map +1 -1
  219. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.js.map +1 -1
  220. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +25 -0
  221. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  222. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +2 -2
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +0 -1
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/Mutex.d.ts +2 -2
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  234. package/front_end/third_party/puppeteer/package/lib/esm/third_party/urlpattern-polyfill/urlpattern-polyfill.d.ts +1 -0
  235. package/front_end/third_party/puppeteer/package/lib/esm/third_party/urlpattern-polyfill/urlpattern-polyfill.js +805 -0
  236. package/front_end/third_party/puppeteer/package/lib/types.d.ts +91 -11
  237. package/front_end/third_party/puppeteer/package/package.json +3 -2
  238. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +53 -11
  239. package/front_end/third_party/puppeteer/package/src/api/Extension.ts +29 -1
  240. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +1 -0
  241. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +6 -0
  242. package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -0
  243. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +1 -0
  244. package/front_end/third_party/puppeteer/package/src/cdp/Extension.ts +9 -2
  245. package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +59 -0
  246. package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +6 -1
  247. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +26 -0
  248. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +2 -0
  249. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +0 -1
  250. package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
  251. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  252. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +2 -1
  253. package/front_end/third_party/web-vitals/README.chromium +2 -2
  254. package/front_end/third_party/web-vitals/package/README.md +21 -10
  255. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onCLS.js +2 -4
  256. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.js +1 -2
  257. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.d.ts +4 -0
  258. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +44 -39
  259. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +25 -19
  260. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.js +1 -2
  261. package/front_end/third_party/web-vitals/package/dist/modules/lib/doubleRAF.js +1 -1
  262. package/front_end/third_party/web-vitals/package/dist/modules/lib/getActivationStart.js +1 -2
  263. package/front_end/third_party/web-vitals/package/dist/modules/lib/getLoadState.js +16 -18
  264. package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.js +2 -1
  265. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +1 -1
  266. package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.js +1 -1
  267. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.d.ts +1 -1
  268. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.js +1 -3
  269. package/front_end/third_party/web-vitals/package/dist/modules/lib/whenActivated.js +1 -1
  270. package/front_end/third_party/web-vitals/package/dist/modules/lib/whenIdleOrHidden.js +11 -7
  271. package/front_end/third_party/web-vitals/package/dist/modules/onCLS.js +1 -1
  272. package/front_end/third_party/web-vitals/package/dist/modules/types/inp.d.ts +4 -0
  273. package/front_end/third_party/web-vitals/package/dist/modules/types.d.ts +1 -2
  274. package/front_end/third_party/web-vitals/package/dist/modules/types.js +0 -1
  275. package/front_end/third_party/web-vitals/package/package.json +24 -27
  276. package/front_end/third_party/web-vitals/package/src/attribution/onCLS.ts +2 -7
  277. package/front_end/third_party/web-vitals/package/src/attribution/onFCP.ts +1 -2
  278. package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +49 -43
  279. package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +27 -24
  280. package/front_end/third_party/web-vitals/package/src/attribution/onTTFB.ts +1 -2
  281. package/front_end/third_party/web-vitals/package/src/lib/doubleRAF.ts +1 -1
  282. package/front_end/third_party/web-vitals/package/src/lib/getActivationStart.ts +1 -2
  283. package/front_end/third_party/web-vitals/package/src/lib/getLoadState.ts +21 -20
  284. package/front_end/third_party/web-vitals/package/src/lib/getVisibilityWatcher.ts +2 -3
  285. package/front_end/third_party/web-vitals/package/src/lib/observe.ts +1 -1
  286. package/front_end/third_party/web-vitals/package/src/lib/polyfills/interactionCountPolyfill.ts +2 -4
  287. package/front_end/third_party/web-vitals/package/src/lib/whenActivated.ts +1 -1
  288. package/front_end/third_party/web-vitals/package/src/lib/whenIdleOrHidden.ts +13 -7
  289. package/front_end/third_party/web-vitals/package/src/onCLS.ts +1 -1
  290. package/front_end/third_party/web-vitals/package/src/types/inp.ts +4 -0
  291. package/front_end/third_party/web-vitals/package/src/types.ts +1 -2
  292. package/front_end/third_party/web-vitals/patches/0001-Add-onEachInteraction-to-onINP-options.patch +13 -74
  293. package/front_end/third_party/web-vitals/rebuild.sh +3 -3
  294. package/front_end/third_party/web-vitals/web-vitals-tsconfig.json +0 -1
  295. package/front_end/ui/components/icon_button/iconButton.css +1 -0
  296. package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +6 -6
  297. package/front_end/ui/components/lists/list.css +4 -0
  298. package/front_end/ui/legacy/Dialog.ts +21 -2
  299. package/front_end/ui/legacy/SoftContextMenu.ts +3 -3
  300. package/front_end/ui/legacy/SplitWidget.ts +9 -9
  301. package/front_end/ui/legacy/TabbedPane.ts +12 -12
  302. package/front_end/ui/legacy/View.ts +24 -22
  303. package/front_end/ui/legacy/ViewManager.ts +12 -12
  304. package/front_end/ui/legacy/ViewRegistration.ts +2 -2
  305. package/front_end/ui/legacy/Widget.ts +165 -119
  306. package/front_end/ui/legacy/components/source_frame/ImageView.ts +10 -5
  307. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +9 -6
  308. package/front_end/ui/legacy/components/utils/Linkifier.ts +37 -11
  309. package/front_end/ui/legacy/components/utils/jsUtils.css +1 -0
  310. package/front_end/ui/legacy/inspectorCommon.css +0 -6
  311. package/front_end/ui/lit/render.ts +11 -9
  312. package/front_end/ui/visual_logging/KnownContextValues.ts +36 -0
  313. package/package.json +1 -1
  314. package/front_end/Images/src/dots-circle.svg +0 -10
  315. package/front_end/panels/elements/components/Helper.ts +0 -35
  316. package/front_end/third_party/web-vitals/package/dist/modules/types/polyfills.d.ts +0 -4
  317. package/front_end/third_party/web-vitals/package/dist/modules/types/polyfills.js +0 -16
  318. package/front_end/third_party/web-vitals/package/src/types/polyfills.ts +0 -24
@@ -76,7 +76,7 @@ interface ViewInput {
76
76
  onSelectionChanged: (selectedFilter: ConsoleFilter) => void;
77
77
  }
78
78
 
79
- export type View = (input: ViewInput, output: object, target: HTMLElement) => void;
79
+ export type View = (input: ViewInput, output: object, target: HTMLElement|DocumentFragment) => void;
80
80
  export const DEFAULT_VIEW: View = (input, output, target) => {
81
81
  render(
82
82
  html`<devtools-tree
@@ -115,7 +115,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
115
115
  </li>`)}
116
116
  </ul>`}
117
117
  ></devtools-tree>`,
118
- target);
118
+ target, {container: {attributes: {jslog: `${VisualLogging.pane('sidebar').track({resize: true})}`}}});
119
119
  };
120
120
 
121
121
  export class ConsoleFilterGroup {
@@ -173,7 +173,8 @@ const CONSOLE_API_PARSED_FILTERS = [{
173
173
  regex: undefined,
174
174
  }];
175
175
 
176
- export class ConsoleSidebar extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox>(UI.Widget.VBox) {
176
+ export class ConsoleSidebar extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox<ShadowRoot>>(
177
+ UI.Widget.VBox) {
177
178
  #view: View;
178
179
  readonly #groups = [
179
180
  new ConsoleFilterGroup(GroupName.ALL, [], ConsoleFilter.allLevelsFilterValue()),
@@ -189,8 +190,7 @@ export class ConsoleSidebar extends Common.ObjectWrapper.eventMixin<EventTypes,
189
190
 
190
191
  constructor(element?: HTMLElement, view = DEFAULT_VIEW) {
191
192
  super(element, {
192
- jslog: `${VisualLogging.pane('sidebar').track({resize: true})}`,
193
- useShadowDom: true,
193
+ useShadowDom: 'pure',
194
194
  });
195
195
  this.#view = view;
196
196
  this.setMinimumSize(125, 0);
@@ -1959,15 +1959,22 @@ export class ConsoleViewFilter {
1959
1959
  export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
1960
1960
  handleAction(_context: UI.Context.Context, actionId: string): boolean {
1961
1961
  switch (actionId) {
1962
- case 'console.toggle':
1963
- if (ConsoleView.instance().hasFocus() && UI.InspectorView.InspectorView.instance().drawerVisible()) {
1964
- UI.InspectorView.InspectorView.instance().closeDrawer();
1962
+ case 'console.toggle': {
1963
+ const inspectorView = UI.InspectorView.InspectorView.instance();
1964
+ const consoleView = ConsoleView.instance();
1965
+ if (inspectorView.drawerVisible() && !inspectorView.isDrawerMinimized() && consoleView.isShowing() &&
1966
+ consoleView.hasFocus()) {
1967
+ inspectorView.minimizeDrawer();
1965
1968
  return true;
1966
1969
  }
1970
+ if (inspectorView.drawerVisible() && inspectorView.isDrawerMinimized()) {
1971
+ inspectorView.setDrawerMinimized(false);
1972
+ }
1967
1973
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.bringToFront();
1968
1974
  Common.Console.Console.instance().show();
1969
- ConsoleView.instance().focusPrompt();
1975
+ consoleView.focusPrompt();
1970
1976
  return true;
1977
+ }
1971
1978
  case 'console.clear':
1972
1979
  ConsoleView.instance().clearConsole();
1973
1980
  return true;
@@ -238,24 +238,6 @@ export const getMessageForElement = (element: Element): ConsoleViewMessage|undef
238
238
  return elementToMessage.get(element);
239
239
  };
240
240
 
241
- /**
242
- * Combines the error description (essentially the `Error#stack` property value)
243
- * with the `issueSummary`.
244
- *
245
- * @param description the `description` property of the `Error` remote object.
246
- * @param issueSummary the optional `issueSummary` of the `exceptionMetaData`.
247
- * @returns the enriched description.
248
- * @see https://goo.gle/devtools-reduce-network-noise-design
249
- */
250
- export const concatErrorDescriptionAndIssueSummary = (description: string, issueSummary: string): string => {
251
- // Insert the issue summary right after the error message.
252
- const pos = description.indexOf('\n');
253
- const prefix = pos === -1 ? description : description.substring(0, pos);
254
- const suffix = pos === -1 ? '' : description.substring(pos);
255
- description = `${prefix}. ${issueSummary}${suffix}`;
256
- return description;
257
- };
258
-
259
241
  // This value reflects the 18px min-height of .console-message.
260
242
  // Keep in sync with consoleView.css.
261
243
  const defaultConsoleRowHeight = 18;
@@ -1948,7 +1930,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
1948
1930
 
1949
1931
  const issueSummary = exceptionDetails?.exceptionMetaData?.issueSummary;
1950
1932
  if (typeof issueSummary === 'string') {
1951
- string = concatErrorDescriptionAndIssueSummary(string, issueSummary);
1933
+ string = StackTrace.ErrorStackParser.concatErrorDescriptionAndIssueSummary(string, issueSummary);
1952
1934
  }
1953
1935
 
1954
1936
  const linkInfos = StackTrace.ErrorStackParser.parseSourcePositionsFromErrorStack(runtimeModel, string);
@@ -153,7 +153,7 @@ export interface CoverageViewOutput {
153
153
  focusResults: () => void;
154
154
  }
155
155
 
156
- export type View = (input: CoverageViewInput, output: CoverageViewOutput, target: HTMLElement) => void;
156
+ export type View = (input: CoverageViewInput, output: CoverageViewOutput, target: DocumentFragment) => void;
157
157
 
158
158
  export const DEFAULT_VIEW: View = (input, output, target) => {
159
159
  // clang-format off
@@ -234,7 +234,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
234
234
  <div class="coverage-message">
235
235
  ${input.statusMessage}
236
236
  </div>
237
- </div>`, target);
237
+ </div>`, target, {container: {attributes: {jslog: `${VisualLogging.panel('coverage').track({resize: true})}`}}});
238
238
  // clang-format on
239
239
  };
240
240
 
@@ -282,7 +282,7 @@ function renderReloadPromptPage(message: Common.UIString.LocalizedString, classN
282
282
  // clang-format on
283
283
  }
284
284
 
285
- export class CoverageView extends UI.Widget.VBox {
285
+ export class CoverageView extends UI.Widget.VBox<ShadowRoot> {
286
286
  #model: CoverageModel|null;
287
287
  #decorationManager: CoverageDecorationManager|null;
288
288
  readonly #coverageTypeComboBoxSetting: Common.Settings.Setting<number>;
@@ -303,8 +303,7 @@ export class CoverageView extends UI.Widget.VBox {
303
303
 
304
304
  constructor(view: View = DEFAULT_VIEW) {
305
305
  super({
306
- jslog: `${VisualLogging.panel('coverage').track({resize: true})}`,
307
- useShadowDom: true,
306
+ useShadowDom: 'pure',
308
307
  delegatesFocus: true,
309
308
  });
310
309
  this.registerRequiredCSS(coverageViewStyles);
@@ -544,16 +544,15 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
544
544
  }
545
545
 
546
546
  if (selectedNode) {
547
- const activeNode = ElementsComponents.Helper.legacyNodeToElementsComponentsNode(selectedNode);
548
- const crumbs = [activeNode];
547
+ const crumbs = [selectedNode];
549
548
 
550
549
  for (let current: (SDK.DOMModel.DOMNode|null) = selectedNode.parentNode; current; current = current.parentNode) {
551
- crumbs.push(ElementsComponents.Helper.legacyNodeToElementsComponentsNode(current));
550
+ crumbs.push(current);
552
551
  }
553
552
 
554
553
  this.breadcrumbs.data = {
555
554
  crumbs,
556
- selectedNode: ElementsComponents.Helper.legacyNodeToElementsComponentsNode(selectedNode),
555
+ selectedNode,
557
556
  };
558
557
 
559
558
  if (this.accessibilityTreeView) {
@@ -938,16 +937,14 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
938
937
  */
939
938
 
940
939
  // Get the current set of active crumbs
941
- const activeNode = ElementsComponents.Helper.legacyNodeToElementsComponentsNode(selectedNode);
942
- const existingCrumbs = [activeNode];
940
+ const existingCrumbs = [selectedNode];
943
941
  for (let current: (SDK.DOMModel.DOMNode|null) = selectedNode.parentNode; current; current = current.parentNode) {
944
- existingCrumbs.push(ElementsComponents.Helper.legacyNodeToElementsComponentsNode(current));
942
+ existingCrumbs.push(current);
945
943
  }
946
944
 
947
945
  /* Get the change nodes from the event & convert them to breadcrumb nodes */
948
- const newNodes = nodes.map(ElementsComponents.Helper.legacyNodeToElementsComponentsNode);
949
- const nodesThatHaveChangedMap = new Map<number, ElementsComponents.Helper.DOMNode>();
950
- newNodes.forEach(crumb => nodesThatHaveChangedMap.set(crumb.id, crumb));
946
+ const nodesThatHaveChangedMap = new Map<Protocol.DOM.NodeId, SDK.DOMModel.DOMNode>();
947
+ nodes.forEach(crumb => nodesThatHaveChangedMap.set(crumb.id, crumb));
951
948
 
952
949
  /* Loop over our existing crumbs, and if any have an ID that matches an ID from the new nodes
953
950
  * that we have, use the new node, rather than the one we had, because it's changed.
@@ -959,12 +956,12 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
959
956
 
960
957
  this.breadcrumbs.data = {
961
958
  crumbs: newSetOfCrumbs,
962
- selectedNode: activeNode,
959
+ selectedNode,
963
960
  };
964
961
  }
965
962
 
966
963
  private crumbNodeSelected(event: ElementsComponents.ElementsBreadcrumbs.NodeSelectedEvent): void {
967
- this.selectDOMNode(event.legacyDomNode, true);
964
+ this.selectDOMNode(event.node, true);
968
965
  }
969
966
 
970
967
  private leaveUserAgentShadowDOM(node: SDK.DOMModel.DOMNode): SDK.DOMModel.DOMNode {
@@ -7,13 +7,12 @@ import type * as SDK from '../../core/sdk/sdk.js';
7
7
  import * as ComputedStyle from '../../models/computed_style/computed_style.js';
8
8
  import * as UI from '../../ui/legacy/legacy.js';
9
9
 
10
- export class ElementsSidebarPane extends UI.Widget.VBox {
10
+ export class ElementsSidebarPane<ContentTypeT extends HTMLElement|DocumentFragment = HTMLElement> extends
11
+ UI.Widget.VBox<ContentTypeT> {
11
12
  protected computedStyleModelInternal: ComputedStyle.ComputedStyleModel.ComputedStyleModel;
12
13
  constructor(
13
- computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel, options: UI.Widget.WidgetOptions = {}) {
14
- options.useShadowDom = options.useShadowDom ?? true;
15
- options.classes = options.classes ?? [];
16
- options.classes.push('flex-none');
14
+ computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel,
15
+ options: UI.Widget.WidgetOptions<ContentTypeT>) {
17
16
  super(options);
18
17
  this.computedStyleModelInternal = computedStyleModel;
19
18
  this.computedStyleModelInternal.addEventListener(
@@ -1586,6 +1586,67 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
1586
1586
  this.treeOutline?.updateNodeElementToIssue(nodeElement, issues);
1587
1587
  }
1588
1588
 
1589
+ removeIssue(issue: IssuesManager.Issue.Issue): void {
1590
+ if (!this.#elementIssues.has(issue.primaryKey())) {
1591
+ return;
1592
+ }
1593
+
1594
+ this.#removeIssueStyleAndTooltip(issue);
1595
+ this.#elementIssues.delete(issue.primaryKey());
1596
+ }
1597
+
1598
+ #removeIssueStyleAndTooltip(issue: IssuesManager.Issue.Issue): void {
1599
+ const elementIssueDetails = getElementIssueDetails(issue);
1600
+ if (!elementIssueDetails) {
1601
+ return;
1602
+ }
1603
+
1604
+ if (elementIssueDetails.attribute) {
1605
+ this.#undoHighlightViolatingAttr(elementIssueDetails.attribute, issue);
1606
+ } else {
1607
+ this.#undoHighlightTagAsViolating(issue);
1608
+ }
1609
+ }
1610
+
1611
+ #undoHighlightViolatingAttr(name: string, issue: IssuesManager.Issue.Issue): void {
1612
+ const violatingAttributes = this.listItemElement.querySelectorAll('.webkit-html-attribute-name.violating-element');
1613
+ for (const attributeElement of violatingAttributes) {
1614
+ if (attributeElement.textContent === name) {
1615
+ this.#removeFromNodeElementToIssue(attributeElement, issue);
1616
+ if (!this.#nodeElementToIssue.has(attributeElement)) {
1617
+ attributeElement.classList.remove('violating-element');
1618
+ }
1619
+ }
1620
+ }
1621
+ }
1622
+
1623
+ #undoHighlightTagAsViolating(issue: IssuesManager.Issue.Issue): void {
1624
+ const tagElement = this.listItemElement.getElementsByClassName('webkit-html-tag-name')[0];
1625
+ if (!tagElement) {
1626
+ return;
1627
+ }
1628
+
1629
+ this.#removeFromNodeElementToIssue(tagElement, issue);
1630
+ if (!this.#nodeElementToIssue.has(tagElement)) {
1631
+ tagElement.classList.remove('violating-element');
1632
+ }
1633
+ }
1634
+
1635
+ #removeFromNodeElementToIssue(nodeElement: Element, issue: IssuesManager.Issue.Issue): void {
1636
+ let issues = this.#nodeElementToIssue.get(nodeElement);
1637
+ if (!issues) {
1638
+ return;
1639
+ }
1640
+
1641
+ issues = issues.filter(i => i !== issue);
1642
+ if (issues.length === 0) {
1643
+ this.#nodeElementToIssue.delete(nodeElement);
1644
+ } else {
1645
+ this.#nodeElementToIssue.set(nodeElement, issues);
1646
+ }
1647
+ this.treeOutline?.updateNodeElementToIssue(nodeElement, issues);
1648
+ }
1649
+
1589
1650
  expandedChildrenLimit(): number {
1590
1651
  return this.#expandedChildrenLimit;
1591
1652
  }
@@ -639,6 +639,8 @@ export class ElementsTreeOutline extends
639
639
 
640
640
  this.#issuesManager = IssuesManager.IssuesManager.IssuesManager.instance();
641
641
  this.#issuesManager.addEventListener(IssuesManager.IssuesManager.Events.ISSUE_ADDED, this.#onIssueAdded, this);
642
+ this.#issuesManager.addEventListener(
643
+ IssuesManager.IssuesManager.Events.ISSUE_HIDDEN_STATUS_UPDATED, this.#onIssueHiddenStatusUpdated, this);
642
644
 
643
645
  this.treeElementByNode = new WeakMap();
644
646
  const shadowContainer = document.createElement('div');
@@ -774,6 +776,20 @@ export class ElementsTreeOutline extends
774
776
  void this.#addTreeElementIssue(event.data.issue);
775
777
  }
776
778
 
779
+ #onIssueHiddenStatusUpdated(
780
+ event: Common.EventTarget.EventTargetEvent<IssuesManager.IssuesManager.IssueHiddenStatusUpdatedEvent>): void {
781
+ const issue = event.data.issue;
782
+ if (!issue) {
783
+ return;
784
+ }
785
+
786
+ if (issue.isHidden()) {
787
+ void this.#removeTreeElementIssue(issue);
788
+ return;
789
+ }
790
+ void this.#addTreeElementIssue(issue);
791
+ }
792
+
777
793
  #addAllElementIssues(): void {
778
794
  if (!this.#issuesManager) {
779
795
  return;
@@ -784,6 +800,10 @@ export class ElementsTreeOutline extends
784
800
  }
785
801
 
786
802
  async #addTreeElementIssue(issue: IssuesManager.Issue.Issue): Promise<void> {
803
+ if (issue.isHidden()) {
804
+ return;
805
+ }
806
+
787
807
  const elementIssueDetails = getElementIssueDetails(issue);
788
808
  if (!elementIssueDetails) {
789
809
  return;
@@ -810,6 +830,28 @@ export class ElementsTreeOutline extends
810
830
  }
811
831
  }
812
832
 
833
+ async #removeTreeElementIssue(issue: IssuesManager.Issue.Issue): Promise<void> {
834
+ const elementIssueDetails = getElementIssueDetails(issue);
835
+ if (!elementIssueDetails) {
836
+ return;
837
+ }
838
+ const {nodeId} = elementIssueDetails;
839
+ if (!this.rootDOMNode || !nodeId) {
840
+ return;
841
+ }
842
+ const deferredDOMNode = new SDK.DOMModel.DeferredDOMNode(this.rootDOMNode.domModel().target(), nodeId);
843
+ const node = await deferredDOMNode.resolvePromise();
844
+
845
+ if (!node) {
846
+ return;
847
+ }
848
+
849
+ const treeElement = this.findTreeElement(node);
850
+ if (treeElement) {
851
+ treeElement.removeIssue(issue);
852
+ }
853
+ }
854
+
813
855
  deindentSingleNode(): void {
814
856
  const firstChild = this.firstChild();
815
857
  if (!firstChild || (firstChild && !firstChild.isExpandable())) {
@@ -818,6 +860,10 @@ export class ElementsTreeOutline extends
818
860
  }
819
861
 
820
862
  updateNodeElementToIssue(element: Element, issues: IssuesManager.Issue.Issue[]): void {
863
+ if (!issues || issues.length === 0) {
864
+ this.#nodeElementToIssues.delete(element);
865
+ return;
866
+ }
821
867
  this.#nodeElementToIssues.set(element, issues);
822
868
  }
823
869
 
@@ -73,7 +73,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, output: ViewOutput, target: HTMLEl
73
73
  .data=${data}></devtools-tree-outline>
74
74
  </div>
75
75
  `;
76
- render(template, target);
76
+ render(template, target, {container: {attributes: {jslog: `${VisualLogging.pane('css-layers')}`}}});
77
77
  };
78
78
 
79
79
  let layersWidgetInstance: LayersWidget;
@@ -84,7 +84,7 @@ export class LayersWidget extends UI.Widget.Widget {
84
84
  #layerToReveal: string|null = null;
85
85
 
86
86
  constructor(view: View = DEFAULT_VIEW) {
87
- super({jslog: `${VisualLogging.pane('css-layers')}`});
87
+ super();
88
88
  this.#view = view;
89
89
  }
90
90
 
@@ -53,7 +53,7 @@ interface ViewInput {
53
53
  onStartEditing: (target: Element, box: string, styleProperty: string, computedStyle: Map<string, string>) => void;
54
54
  }
55
55
 
56
- type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
56
+ type View = (input: ViewInput, output: undefined, target: HTMLElement|DocumentFragment) => void;
57
57
 
58
58
  const DEFAULT_VIEW: View = (input, output, target) => {
59
59
  const {style, highlightedMode, node, contentWidth, contentHeight, onHighlightNode, onStartEditing} = input;
@@ -177,11 +177,12 @@ const DEFAULT_VIEW: View = (input, output, target) => {
177
177
  <div class="metrics ${!node ? 'collapsed' : ''}" @mouseover=${(e: Event) => { e.consume(); onHighlightNode(true, 'all'); }}
178
178
  @mouseleave=${(e: Event) => { e.consume(); onHighlightNode(false, 'all'); }}>
179
179
  ${previousBox}
180
- </div>`, target);
180
+ </div>`,
181
+ target, {container: {classes: ['flex-none'], attributes: {jslog: `${VisualLogging.section('styles-metrics')}`}}});
181
182
  // clang-format on
182
183
  };
183
184
 
184
- export class MetricsSidebarPane extends ElementsSidebarPane {
185
+ export class MetricsSidebarPane extends ElementsSidebarPane<ShadowRoot> {
185
186
  originalPropertyData: SDK.CSSProperty.CSSProperty|null;
186
187
  previousPropertyDataCandidate: SDK.CSSProperty.CSSProperty|null;
187
188
  private inlineStyle: SDK.CSSStyleDeclaration.CSSStyleDeclaration|null;
@@ -191,7 +192,7 @@ export class MetricsSidebarPane extends ElementsSidebarPane {
191
192
  private view: View;
192
193
 
193
194
  constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel, view = DEFAULT_VIEW) {
194
- super(computedStyleModel, {jslog: `${VisualLogging.pane('styles-metrics')}`});
195
+ super(computedStyleModel, {useShadowDom: 'pure'});
195
196
  this.registerRequiredCSS(metricsSidebarPaneStyles);
196
197
 
197
198
  this.originalPropertyData = null;
@@ -1181,7 +1181,7 @@ export class StylePropertiesSection {
1181
1181
 
1182
1182
  const containerElement = new ElementsComponents.QueryContainer.QueryContainer();
1183
1183
  containerElement.data = {
1184
- container: ElementsComponents.Helper.legacyNodeToElementsComponentsNode(container.containerNode),
1184
+ container: container.containerNode,
1185
1185
  queryName: containerQuery.name,
1186
1186
  onContainerLinkClick: event => {
1187
1187
  event.preventDefault();
@@ -3655,15 +3655,20 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
3655
3655
  return;
3656
3656
  }
3657
3657
  this.#clearGhostTextInValue();
3658
- this.valueElement.createChild('span', 'ghost-value-prediction').textContent = text;
3658
+ if (this.value) {
3659
+ // If there is an existing value, and user is editing the name field
3660
+ // which leads to a new value suggestion, then the previous value should no
3661
+ // longer be valid.
3662
+ this.listItemElement.classList.add('not-parsed-ok', 'invalid-property-value');
3663
+ }
3664
+ const ghostTextElement = document.createElement('span');
3665
+ ghostTextElement.classList.add('ghost-value-prediction');
3666
+ ghostTextElement.textContent = text;
3667
+ this.valueElement.insertAdjacentElement('afterend', ghostTextElement);
3659
3668
  }
3660
3669
 
3661
3670
  #clearGhostTextInValue(): void {
3662
- if (!this.valueElement) {
3663
- return;
3664
- }
3665
- const ghostElement = this.valueElement.querySelector('.ghost-value-prediction');
3666
- ghostElement?.remove();
3671
+ this.listItemElement.querySelector('.ghost-value-prediction')?.remove();
3667
3672
  }
3668
3673
  }
3669
3674
 
@@ -224,7 +224,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
224
224
  #aiCodeCompletionSummaryToolbar?: PanelsCommon.AiCodeCompletionSummaryToolbar;
225
225
 
226
226
  constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel) {
227
- super(computedStyleModel, {delegatesFocus: true});
227
+ super(computedStyleModel, {delegatesFocus: true, useShadowDom: true, classes: ['flex-none']});
228
228
  this.setMinimumSize(96, 26);
229
229
  this.registerRequiredCSS(stylesSidebarPaneStyles);
230
230
  Common.Settings.Settings.instance().moduleSetting('text-editor-indent').addChangeListener(this.requestUpdate, this);
@@ -2261,6 +2261,9 @@ export class CSSPropertyPrompt extends UI.TextPrompt.TextPrompt {
2261
2261
  return;
2262
2262
  }
2263
2263
 
2264
+ if (!this.queryRange) {
2265
+ this.queryRange = new TextUtils.TextRange.TextRange(0, 0, 0, this.text().length);
2266
+ }
2264
2267
  this.treeElement.section().activeAiSuggestion = {
2265
2268
  text: args.text,
2266
2269
  properties: this.#getAiSuggestedProperties(args.text),
@@ -7,7 +7,7 @@ import '../../../ui/kit/kit.js';
7
7
  import '../../../ui/components/node_text/node_text.js';
8
8
 
9
9
  import * as i18n from '../../../core/i18n/i18n.js';
10
- import type * as SDK from '../../../core/sdk/sdk.js';
10
+ import * as SDK from '../../../core/sdk/sdk.js';
11
11
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
12
12
  import * as RenderCoordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
13
13
  import * as Lit from '../../../ui/lit/lit.js';
@@ -15,7 +15,6 @@ import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
15
15
 
16
16
  import elementsBreadcrumbsStyles from './elementsBreadcrumbs.css.js';
17
17
  import {crumbsToRender, type UserScrollPosition} from './ElementsBreadcrumbsUtils.js';
18
- import type {DOMNode} from './Helper.js';
19
18
 
20
19
  const {html} = Lit;
21
20
 
@@ -39,25 +38,25 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
39
38
 
40
39
  export class NodeSelectedEvent extends Event {
41
40
  static readonly eventName = 'breadcrumbsnodeselected';
42
- legacyDomNode: SDK.DOMModel.DOMNode;
41
+ node: SDK.DOMModel.DOMNode;
43
42
 
44
- constructor(node: DOMNode) {
43
+ constructor(node: SDK.DOMModel.DOMNode) {
45
44
  super(NodeSelectedEvent.eventName, {});
46
- this.legacyDomNode = node.legacyDomNode;
45
+ this.node = node;
47
46
  }
48
47
  }
49
48
 
50
49
  export interface ElementsBreadcrumbsData {
51
- selectedNode: DOMNode|null;
52
- crumbs: DOMNode[];
50
+ selectedNode: SDK.DOMModel.DOMNode|null;
51
+ crumbs: SDK.DOMModel.DOMNode[];
53
52
  }
54
53
 
55
54
  export class ElementsBreadcrumbs extends HTMLElement {
56
55
  readonly #shadow = this.attachShadow({mode: 'open'});
57
56
  readonly #resizeObserver = new ResizeObserver(() => this.#checkForOverflowOnResize());
58
57
 
59
- #crumbsData: readonly DOMNode[] = [];
60
- #selectedDOMNode: Readonly<DOMNode>|null = null;
58
+ #crumbsData: readonly SDK.DOMModel.DOMNode[] = [];
59
+ #selectedDOMNode: SDK.DOMModel.DOMNode|null = null;
61
60
  #overflowing = false;
62
61
  #userScrollPosition: UserScrollPosition = 'start';
63
62
  #isObservingResize = false;
@@ -75,7 +74,7 @@ export class ElementsBreadcrumbs extends HTMLElement {
75
74
  this.#resizeObserver.disconnect();
76
75
  }
77
76
 
78
- #onCrumbClick(node: DOMNode): (event: Event) => void {
77
+ #onCrumbClick(node: SDK.DOMModel.DOMNode): (event: Event) => void {
79
78
  return (event: Event): void => {
80
79
  event.preventDefault();
81
80
  this.dispatchEvent(new NodeSelectedEvent(node));
@@ -121,20 +120,20 @@ export class ElementsBreadcrumbs extends HTMLElement {
121
120
  void this.#updateScrollState(crumbWindow);
122
121
  }
123
122
 
124
- #onCrumbMouseMove(node: DOMNode): () => void {
125
- return (): void => node.highlightNode();
123
+ #onCrumbMouseMove(node: SDK.DOMModel.DOMNode): () => void {
124
+ return (): void => node.highlight();
126
125
  }
127
126
 
128
- #onCrumbMouseLeave(node: DOMNode): () => void {
129
- return (): void => node.clearHighlight();
127
+ #onCrumbMouseLeave(): void {
128
+ SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
130
129
  }
131
130
 
132
- #onCrumbFocus(node: DOMNode): () => void {
133
- return (): void => node.highlightNode();
131
+ #onCrumbFocus(node: SDK.DOMModel.DOMNode): () => void {
132
+ return (): void => node.highlight();
134
133
  }
135
134
 
136
- #onCrumbBlur(node: DOMNode): () => void {
137
- return (): void => node.clearHighlight();
135
+ #onCrumbBlur(): void {
136
+ SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
138
137
  }
139
138
 
140
139
  #engageResizeObserver(): void {
@@ -306,9 +305,9 @@ export class ElementsBreadcrumbs extends HTMLElement {
306
305
  jslog=${VisualLogging.item().track({click:true, resize:true})}
307
306
  @click=${this.#onCrumbClick(crumb.node)}
308
307
  @mousemove=${this.#onCrumbMouseMove(crumb.node)}
309
- @mouseleave=${this.#onCrumbMouseLeave(crumb.node)}
308
+ @mouseleave=${this.#onCrumbMouseLeave}
310
309
  @focus=${this.#onCrumbFocus(crumb.node)}
311
- @blur=${this.#onCrumbBlur(crumb.node)}
310
+ @blur=${this.#onCrumbBlur}
312
311
  >
313
312
  <devtools-node-text data-node-title=${crumb.title.main} .data=${{
314
313
  nodeTitle: crumb.title.main,
@@ -3,8 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as i18n from '../../../core/i18n/i18n.js';
6
-
7
- import type {DOMNode} from './Helper.js';
6
+ import type * as SDK from '../../../core/sdk/sdk.js';
8
7
 
9
8
  const UIStrings = {
10
9
  /**
@@ -21,8 +20,7 @@ export type UserScrollPosition = 'start'|'middle'|'end';
21
20
  export interface Crumb {
22
21
  title: CrumbTitle;
23
22
  selected: boolean;
24
- node: DOMNode;
25
- originalNode: unknown;
23
+ node: SDK.DOMModel.DOMNode;
26
24
  }
27
25
 
28
26
  export interface CrumbTitle {
@@ -30,25 +28,25 @@ export interface CrumbTitle {
30
28
  extras: {id?: string, classes?: string[]};
31
29
  }
32
30
 
33
- export const crumbsToRender = (crumbs: readonly DOMNode[], selectedNode: Readonly<DOMNode>|null): Crumb[] => {
34
- if (!selectedNode) {
35
- return [];
36
- }
31
+ export const crumbsToRender =
32
+ (crumbs: readonly SDK.DOMModel.DOMNode[], selectedNode: SDK.DOMModel.DOMNode|null): Crumb[] => {
33
+ if (!selectedNode) {
34
+ return [];
35
+ }
37
36
 
38
- return crumbs
39
- .filter(crumb => {
40
- return crumb.nodeType !== Node.DOCUMENT_NODE;
41
- })
42
- .map(crumb => {
43
- return {
44
- title: determineElementTitle(crumb),
45
- selected: crumb.id === selectedNode.id,
46
- node: crumb,
47
- originalNode: crumb.legacyDomNode,
48
- };
49
- })
50
- .reverse();
51
- };
37
+ return crumbs
38
+ .filter(crumb => {
39
+ return crumb.nodeType() !== Node.DOCUMENT_NODE;
40
+ })
41
+ .map(crumb => {
42
+ return {
43
+ title: determineElementTitle(crumb),
44
+ selected: crumb.id === selectedNode.id,
45
+ node: crumb,
46
+ };
47
+ })
48
+ .reverse();
49
+ };
52
50
 
53
51
  const makeCrumbTitle = (main: string, extras = {}): CrumbTitle => {
54
52
  return {
@@ -57,13 +55,15 @@ const makeCrumbTitle = (main: string, extras = {}): CrumbTitle => {
57
55
  };
58
56
  };
59
57
 
60
- export const determineElementTitle = (domNode: DOMNode): CrumbTitle => {
61
- switch (domNode.nodeType) {
58
+ export const determineElementTitle = (domNode: SDK.DOMModel.DOMNode): CrumbTitle => {
59
+ const nodeType = domNode.nodeType();
60
+ switch (nodeType) {
62
61
  case Node.ELEMENT_NODE: {
63
- if (domNode.pseudoType) {
64
- return makeCrumbTitle('::' + domNode.pseudoType);
62
+ const pseudoType = domNode.pseudoType();
63
+ if (pseudoType) {
64
+ return makeCrumbTitle('::' + pseudoType);
65
65
  }
66
- const crumbTitle = makeCrumbTitle(domNode.nodeNameNicelyCased);
66
+ const crumbTitle = makeCrumbTitle(domNode.nodeNameInCorrectCase());
67
67
 
68
68
  const id = domNode.getAttribute('id');
69
69
  if (id) {
@@ -86,8 +86,8 @@ export const determineElementTitle = (domNode: DOMNode): CrumbTitle => {
86
86
  case Node.DOCUMENT_TYPE_NODE:
87
87
  return makeCrumbTitle('<!doctype>');
88
88
  case Node.DOCUMENT_FRAGMENT_NODE:
89
- return makeCrumbTitle(domNode.shadowRootType ? '#shadow-root' : domNode.nodeNameNicelyCased);
89
+ return makeCrumbTitle(domNode.shadowRootType() ? '#shadow-root' : domNode.nodeNameInCorrectCase());
90
90
  default:
91
- return makeCrumbTitle(domNode.nodeNameNicelyCased);
91
+ return makeCrumbTitle(domNode.nodeNameInCorrectCase());
92
92
  }
93
93
  };