chrome-devtools-frontend 1.0.1683520 → 1.0.1689415

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 (661) hide show
  1. package/.agents/skills/gerrit-cli/SKILL.md +29 -8
  2. package/.agents/skills/gerrit-cli/references/commands.md +51 -18
  3. package/.agents/skills/gerrit-cli/references/workflows.md +6 -6
  4. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +43 -70
  5. package/AUTHORS +1 -0
  6. package/config/typescript/tsconfig.base.json +1 -0
  7. package/config/typescript/tsconfig.eslint.json +9 -0
  8. package/docs/contributing/issues.md +1 -1
  9. package/docs/styleguide/ux/writing.md +2 -2
  10. package/eslint.config.mjs +18 -10
  11. package/front_end/core/common/Base64.ts +1 -1
  12. package/front_end/core/common/Color.ts +28 -6
  13. package/front_end/core/common/ColorConverter.ts +12 -0
  14. package/front_end/core/common/Console.ts +2 -1
  15. package/front_end/core/common/Object.ts +2 -2
  16. package/front_end/core/common/ResourceType.ts +12 -13
  17. package/front_end/core/common/Revealer.ts +1 -1
  18. package/front_end/core/common/Settings.ts +2 -2
  19. package/front_end/core/common/TextDictionary.ts +2 -2
  20. package/front_end/core/common/Throttler.ts +1 -1
  21. package/front_end/core/host/InspectorFrontendHostAPI.ts +2 -2
  22. package/front_end/core/host/UserMetrics.ts +51 -37
  23. package/front_end/core/host/host.ts +1 -1
  24. package/front_end/core/i18n/i18nImpl.ts +1 -1
  25. package/front_end/core/platform/HostRuntime.ts +3 -3
  26. package/front_end/core/platform/KeyboardUtilities.ts +1 -1
  27. package/front_end/core/protocol_client/InspectorBackend.ts +7 -6
  28. package/front_end/core/root/Runtime.ts +4 -2
  29. package/front_end/core/sdk/AnimationModel.ts +1 -1
  30. package/front_end/core/sdk/CPUThrottlingManager.ts +198 -0
  31. package/front_end/core/sdk/CSSMetadata.ts +11 -6
  32. package/front_end/core/sdk/CSSPropertyParser.ts +5 -3
  33. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +90 -59
  34. package/front_end/core/sdk/ConsoleModel.ts +1 -1
  35. package/front_end/core/sdk/DOMModel.ts +3 -3
  36. package/front_end/core/sdk/DebuggerModel.ts +1 -1
  37. package/front_end/core/sdk/EmulationModel.ts +5 -0
  38. package/front_end/core/sdk/LayerTreeBase.ts +1 -1
  39. package/front_end/core/sdk/NetworkManager.ts +1 -1
  40. package/front_end/core/sdk/README.md +40 -0
  41. package/front_end/core/sdk/RehydratingConnection.ts +1 -1
  42. package/front_end/core/sdk/RemoteObject.ts +1 -1
  43. package/front_end/core/sdk/ResourceTreeModel.ts +2 -2
  44. package/front_end/core/sdk/SDKModel.ts +1 -1
  45. package/front_end/core/sdk/SDKSettings.ts +6 -0
  46. package/front_end/core/sdk/Script.ts +2 -1
  47. package/front_end/core/sdk/SecurityOrigin.ts +48 -0
  48. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +0 -7
  49. package/front_end/core/sdk/ServiceWorkerManager.ts +75 -17
  50. package/front_end/core/sdk/StorageBucketsModel.ts +0 -6
  51. package/front_end/core/sdk/sdk.ts +2 -0
  52. package/front_end/core/text_utils/ContentData.ts +1 -1
  53. package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +3 -1
  54. package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -1
  55. package/front_end/entrypoints/formatter_worker/ScopeParser.ts +2 -2
  56. package/front_end/entrypoints/formatter_worker/Substitute.ts +1 -1
  57. package/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.ts +1 -1
  58. package/front_end/entrypoints/inspector_main/InspectorMain.ts +1 -1
  59. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +1 -1
  60. package/front_end/entrypoints/inspector_main/nodeIcon.css +1 -1
  61. package/front_end/entrypoints/inspector_main/outermostTargetSelector.css +3 -3
  62. package/front_end/entrypoints/inspector_main/renderingOptions.css +3 -3
  63. package/front_end/entrypoints/js_app/js_app.ts +25 -9
  64. package/front_end/entrypoints/main/MainImpl.ts +2 -1
  65. package/front_end/entrypoints/main/main-meta.ts +5 -31
  66. package/front_end/entrypoints/node_app/app/nodeConnectionsPanel.css +5 -5
  67. package/front_end/entrypoints/node_app/node_app.ts +1 -1
  68. package/front_end/foundation/Universe.ts +7 -0
  69. package/front_end/generated/ARIAProperties.ts +39 -1
  70. package/front_end/generated/InspectorBackendCommands.ts +13 -22
  71. package/front_end/generated/SupportedCSSProperties.ts +60 -119
  72. package/front_end/generated/protocol-mapping.d.ts +18 -59
  73. package/front_end/generated/protocol-proxy-api.d.ts +14 -47
  74. package/front_end/generated/protocol.ts +104 -331
  75. package/front_end/models/ai_assistance/AiAgent2.ts +25 -11
  76. package/front_end/models/ai_assistance/AiConversation.ts +23 -14
  77. package/front_end/models/ai_assistance/AiHistoryStorage.ts +2 -2
  78. package/front_end/models/ai_assistance/AiUtils.ts +16 -0
  79. package/front_end/models/ai_assistance/EvaluateAction.ts +1 -1
  80. package/front_end/models/ai_assistance/README.md +1 -1
  81. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +2 -3
  82. package/front_end/models/ai_assistance/agents/AiAgent.ts +40 -25
  83. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +4 -3
  84. package/front_end/models/ai_assistance/agents/FileAgent.ts +2 -2
  85. package/front_end/models/ai_assistance/agents/NetworkAgent.ts +2 -2
  86. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1 -1
  87. package/front_end/models/ai_assistance/agents/StorageAgent.ts +13 -11
  88. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -2
  89. package/front_end/models/ai_assistance/agents/StylingAgent.ts +9 -7
  90. package/front_end/models/ai_assistance/ai_assistance.ts +12 -0
  91. package/front_end/models/ai_assistance/contexts/AccessibilityContext.ts +16 -1
  92. package/front_end/models/ai_assistance/contexts/FileContext.ts +6 -0
  93. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +150 -325
  94. package/front_end/models/ai_assistance/injected.ts +5 -3
  95. package/front_end/models/ai_assistance/performance/AIContext.ts +1 -1
  96. package/front_end/models/ai_assistance/skills/README.md +1 -1
  97. package/front_end/models/ai_assistance/skills/accessibility.md +19 -10
  98. package/front_end/models/ai_assistance/skills/network.md +13 -7
  99. package/front_end/models/ai_assistance/skills/performance.md +22 -16
  100. package/front_end/models/ai_assistance/skills/sources.md +13 -7
  101. package/front_end/models/ai_assistance/skills/storage.md +19 -18
  102. package/front_end/models/ai_assistance/skills/styling.md +30 -37
  103. package/front_end/models/ai_assistance/tools/CookieUtils.ts +120 -0
  104. package/front_end/models/ai_assistance/tools/DOMStorageUtils.ts +53 -4
  105. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +8 -32
  106. package/front_end/models/ai_assistance/tools/GetCookieValues.ts +146 -0
  107. package/front_end/models/ai_assistance/tools/GetDetailedCallTree.ts +11 -9
  108. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +17 -5
  109. package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +12 -11
  110. package/front_end/models/ai_assistance/tools/GetInsightDetails.ts +11 -11
  111. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +15 -8
  112. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +3 -3
  113. package/front_end/models/ai_assistance/tools/GetResourceContent.ts +12 -12
  114. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +3 -2
  115. package/front_end/models/ai_assistance/tools/GetStorageBreakdown.ts +132 -0
  116. package/front_end/models/ai_assistance/tools/GetStorageValues.ts +18 -5
  117. package/front_end/models/ai_assistance/tools/GetStyles.ts +3 -3
  118. package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +9 -8
  119. package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +13 -14
  120. package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +12 -10
  121. package/front_end/models/ai_assistance/tools/ListCookies.ts +93 -0
  122. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +15 -6
  123. package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +3 -3
  124. package/front_end/models/ai_assistance/tools/ListSources.ts +5 -3
  125. package/front_end/models/ai_assistance/tools/ListStorageKeys.ts +17 -5
  126. package/front_end/models/ai_assistance/tools/RecordPerformanceTrace.ts +3 -2
  127. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +4 -3
  128. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +14 -17
  129. package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +9 -8
  130. package/front_end/models/ai_assistance/tools/Tool.ts +36 -13
  131. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +41 -8
  132. package/front_end/models/badges/AiExplorerBadge.ts +3 -3
  133. package/front_end/models/badges/CodeWhispererBadge.ts +2 -2
  134. package/front_end/models/badges/DOMDetectiveBadge.ts +3 -3
  135. package/front_end/models/badges/SpeedsterBadge.ts +3 -3
  136. package/front_end/models/badges/StarterBadge.ts +4 -4
  137. package/front_end/models/bindings/CompilerScriptMapping.ts +11 -2
  138. package/front_end/models/bindings/ContentProviderBasedProject.ts +3 -2
  139. package/front_end/models/breakpoints/BreakpointManager.ts +1 -1
  140. package/front_end/models/emulation/EmulatedDevices.ts +2 -2
  141. package/front_end/models/formatter/FormatterWorkerPool.ts +2 -2
  142. package/front_end/models/formatter/ScriptFormatter.ts +1 -2
  143. package/front_end/models/geometry/GeometryImpl.ts +2 -2
  144. package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +1 -1
  145. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +3 -2
  146. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
  147. package/front_end/models/issues_manager/DOMIssuesManager.ts +144 -0
  148. package/front_end/models/issues_manager/ElementAccessibilityIssue.ts +13 -1
  149. package/front_end/models/issues_manager/GenericIssue.ts +32 -20
  150. package/front_end/models/issues_manager/IssuesManager.ts +0 -1
  151. package/front_end/models/issues_manager/StylesheetLoadingIssue.ts +1 -1
  152. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  153. package/front_end/models/javascript_metadata/{NativeFunctions.js → NativeFunctions.ts} +29 -9
  154. package/front_end/models/live-metrics/LiveMetrics.ts +9 -3
  155. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +58 -6
  156. package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +2 -62
  157. package/front_end/models/network_time_calculator/RequestTimeRanges.ts +2 -2
  158. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +5 -0
  159. package/front_end/models/persistence/IsolatedFileSystem.ts +1 -1
  160. package/front_end/models/persistence/NetworkPersistenceManager.ts +35 -6
  161. package/front_end/models/stack_trace/StackTraceImpl.ts +2 -2
  162. package/front_end/models/trace/LanternComputationData.ts +2 -3
  163. package/front_end/models/trace/extras/StackTraceForEvent.ts +3 -2
  164. package/front_end/models/trace/extras/ThirdParties.ts +9 -9
  165. package/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +7 -4
  166. package/front_end/models/trace/handlers/FramesHandler.ts +3 -3
  167. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +2 -2
  168. package/front_end/models/trace/handlers/SamplesHandler.ts +4 -2
  169. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +1 -1
  170. package/front_end/models/trace/handlers/WarningsHandler.ts +2 -2
  171. package/front_end/models/trace/helpers/Network.ts +3 -3
  172. package/front_end/models/trace/helpers/Trace.ts +1 -1
  173. package/front_end/models/trace/insights/CLSCulprits.ts +2 -1
  174. package/front_end/models/trace/insights/Cache.ts +3 -1
  175. package/front_end/models/trace/insights/CharacterSet.ts +3 -1
  176. package/front_end/models/trace/insights/DOMSize.ts +3 -1
  177. package/front_end/models/trace/insights/DocumentLatency.ts +3 -1
  178. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +3 -1
  179. package/front_end/models/trace/insights/FontDisplay.ts +2 -1
  180. package/front_end/models/trace/insights/ForcedReflow.ts +2 -1
  181. package/front_end/models/trace/insights/INPBreakdown.ts +3 -1
  182. package/front_end/models/trace/insights/ImageDelivery.ts +3 -1
  183. package/front_end/models/trace/insights/LCPBreakdown.ts +3 -1
  184. package/front_end/models/trace/insights/LCPDiscovery.ts +3 -1
  185. package/front_end/models/trace/insights/LegacyJavaScript.ts +3 -1
  186. package/front_end/models/trace/insights/ModernHTTP.ts +2 -1
  187. package/front_end/models/trace/insights/NetworkDependencyTree.ts +2 -1
  188. package/front_end/models/trace/insights/RenderBlocking.ts +5 -4
  189. package/front_end/models/trace/insights/SlowCSSSelector.ts +3 -1
  190. package/front_end/models/trace/insights/ThirdParties.ts +5 -3
  191. package/front_end/models/trace/insights/Viewport.ts +2 -1
  192. package/front_end/models/trace/lantern/simulation/Constants.ts +34 -2
  193. package/front_end/models/trace/lantern/simulation/DNSCache.ts +1 -1
  194. package/front_end/models/trace/types/TraceEvents.ts +8 -3
  195. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +2 -1
  196. package/front_end/models/workspace/WorkspaceImpl.ts +18 -2
  197. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +686 -2
  198. package/front_end/panels/accessibility/accessibilityNode.css +4 -4
  199. package/front_end/panels/accessibility/accessibilityProperties.css +1 -1
  200. package/front_end/panels/accessibility/accessibilitySidebarView.css +2 -2
  201. package/front_end/panels/accessibility/axBreadcrumbs.css +13 -13
  202. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +14 -14
  203. package/front_end/panels/ai_assistance/ExternalHandler.ts +89 -0
  204. package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -1
  205. package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
  206. package/front_end/panels/ai_assistance/components/ChatInput.ts +3 -2
  207. package/front_end/panels/ai_assistance/components/ChatView.ts +1 -1
  208. package/front_end/panels/ai_assistance/components/DisabledWidget.ts +1 -1
  209. package/front_end/panels/ai_assistance/components/ExploreWidget.ts +1 -1
  210. package/front_end/panels/ai_assistance/components/chatInput.css +12 -12
  211. package/front_end/panels/ai_assistance/components/chatMessage.css +16 -16
  212. package/front_end/panels/ai_assistance/components/chatView.css +2 -2
  213. package/front_end/panels/ai_assistance/components/exploreWidget.css +1 -1
  214. package/front_end/panels/ai_assistance/components/exportForAgentsDialog.css +4 -0
  215. package/front_end/panels/ai_assistance/components/walkthroughView.css +6 -6
  216. package/front_end/panels/animation/animationTimeline.css +62 -62
  217. package/front_end/panels/application/ApplicationPanelSidebar.ts +6 -1
  218. package/front_end/panels/application/BackgroundServiceModel.ts +4 -3
  219. package/front_end/panels/application/BackgroundServiceView.ts +290 -252
  220. package/front_end/panels/application/IndexedDBModel.ts +0 -7
  221. package/front_end/panels/application/WebMCPView.ts +15 -7
  222. package/front_end/panels/application/appManifestView.css +5 -5
  223. package/front_end/panels/application/backgroundServiceView.css +18 -2
  224. package/front_end/panels/application/components/AdsView.ts +100 -4
  225. package/front_end/panels/application/components/adsView.css +8 -5
  226. package/front_end/panels/application/components/backForwardCacheView.css +5 -5
  227. package/front_end/panels/application/components/bounceTrackingMitigationsView.css +1 -1
  228. package/front_end/panels/application/components/endpointsGrid.css +1 -1
  229. package/front_end/panels/application/components/permissionsPolicySection.css +1 -1
  230. package/front_end/panels/application/components/protocolHandlersView.css +6 -6
  231. package/front_end/panels/application/components/reportsGrid.css +1 -1
  232. package/front_end/panels/application/components/serviceWorkerRouterView.css +4 -4
  233. package/front_end/panels/application/components/trustTokensView.css +7 -7
  234. package/front_end/panels/application/cookieItemsView.css +3 -3
  235. package/front_end/panels/application/deviceBoundSessionsView.css +3 -3
  236. package/front_end/panels/application/frameDetailsReportView.css +11 -11
  237. package/front_end/panels/application/indexedDBViews.css +7 -7
  238. package/front_end/panels/application/originTrialTokenRows.css +2 -2
  239. package/front_end/panels/application/originTrialTreeView.css +3 -3
  240. package/front_end/panels/application/preloading/components/RuleSetDetailsView.css +2 -2
  241. package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +1 -1
  242. package/front_end/panels/application/preloading/components/preloadingDisabledInfobar.css +2 -2
  243. package/front_end/panels/application/preloading/components/preloadingGrid.css +2 -2
  244. package/front_end/panels/application/preloading/components/usedPreloadingView.css +7 -7
  245. package/front_end/panels/application/preloading/preloadingView.css +1 -1
  246. package/front_end/panels/application/preloading/preloadingViewDropDown.css +3 -3
  247. package/front_end/panels/application/serviceWorkerCacheViews.css +5 -5
  248. package/front_end/panels/application/serviceWorkerUpdateCycleView.css +12 -12
  249. package/front_end/panels/application/serviceWorkersView.css +15 -16
  250. package/front_end/panels/application/storageView.css +5 -5
  251. package/front_end/panels/application/webMCPView.css +9 -9
  252. package/front_end/panels/autofill/autofillView.css +4 -4
  253. package/front_end/panels/browser_debugger/categorizedBreakpointsSidebarPane.css +4 -4
  254. package/front_end/panels/browser_debugger/domBreakpointsSidebarPane.css +5 -3
  255. package/front_end/panels/browser_debugger/xhrBreakpointsSidebarPane.css +4 -4
  256. package/front_end/panels/changes/changesSidebar.css +1 -1
  257. package/front_end/panels/changes/changesView.css +1 -1
  258. package/front_end/panels/changes/combinedDiffView.css +1 -1
  259. package/front_end/panels/common/CPUThrottlingOption.ts +5 -10
  260. package/front_end/panels/common/badgeNotification.css +2 -2
  261. package/front_end/panels/common/domLinkifier.css +1 -1
  262. package/front_end/panels/common/gdpSignUpDialog.css +3 -3
  263. package/front_end/panels/common/geminiRebrandPromoDialog.css +1 -1
  264. package/front_end/panels/console/ConsolePrompt.ts +6 -3
  265. package/front_end/panels/console/ConsoleView.ts +23 -19
  266. package/front_end/panels/console/ConsoleViewMessage.ts +7 -2
  267. package/front_end/panels/console/console-meta.ts +9 -43
  268. package/front_end/panels/console/consoleContextSelector.css +2 -2
  269. package/front_end/panels/console/consolePinPane.css +9 -9
  270. package/front_end/panels/console/consolePrompt.css +5 -5
  271. package/front_end/panels/console/consoleView.css +39 -39
  272. package/front_end/panels/coverage/coverageListView.css +2 -2
  273. package/front_end/panels/css_overview/cssOverviewCompletedView.css +34 -34
  274. package/front_end/panels/css_overview/cssOverviewProcessingView.css +5 -5
  275. package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +1 -1
  276. package/front_end/panels/css_overview/cssOverviewStartView.css +17 -17
  277. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +209 -62
  278. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +4 -4
  279. package/front_end/panels/elements/DOMTreeContextMenu.ts +59 -54
  280. package/front_end/panels/elements/ElementIssueUtils.ts +10 -2
  281. package/front_end/panels/elements/ElementsPanel.ts +5 -2
  282. package/front_end/panels/elements/ElementsTreeElement.ts +212 -255
  283. package/front_end/panels/elements/ElementsTreeOutline.ts +1804 -495
  284. package/front_end/panels/elements/ShortcutTreeElement.ts +6 -3
  285. package/front_end/panels/elements/StandaloneStylesContainer.ts +5 -11
  286. package/front_end/panels/elements/StylePropertiesSection.ts +65 -8
  287. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -0
  288. package/front_end/panels/elements/StylesContainer.ts +1 -0
  289. package/front_end/panels/elements/StylesSidebarPane.ts +317 -159
  290. package/front_end/panels/elements/classesPaneWidget.css +6 -6
  291. package/front_end/panels/elements/components/stylePropertyEditor.css +7 -7
  292. package/front_end/panels/elements/computedStyleWidget.css +1 -1
  293. package/front_end/panels/elements/elementStatePaneWidget.css +8 -8
  294. package/front_end/panels/elements/elements-meta.ts +14 -0
  295. package/front_end/panels/elements/elementsPanel.css +4 -4
  296. package/front_end/panels/elements/elementsTreeOutline.css +222 -38
  297. package/front_end/panels/elements/layersWidget.css +4 -4
  298. package/front_end/panels/elements/layoutPane.css +18 -18
  299. package/front_end/panels/elements/metricsSidebarPane.css +11 -11
  300. package/front_end/panels/elements/platformFontsWidget.css +5 -5
  301. package/front_end/panels/elements/propertiesWidget.css +2 -2
  302. package/front_end/panels/elements/stylePropertiesTreeOutline.css +20 -20
  303. package/front_end/panels/elements/stylesSidebarPane.css +37 -20
  304. package/front_end/panels/emulation/deviceModeView.css +49 -49
  305. package/front_end/panels/emulation/mediaQueryInspector.css +18 -18
  306. package/front_end/panels/event_listeners/eventListenersView.css +1 -1
  307. package/front_end/panels/explain/components/consoleInsight.css +29 -29
  308. package/front_end/panels/issues/components/elementsPanelLink.css +2 -2
  309. package/front_end/panels/issues/components/hideIssuesMenu.css +1 -1
  310. package/front_end/panels/issues/issuesPane.css +2 -2
  311. package/front_end/panels/issues/issuesTree.css +50 -50
  312. package/front_end/panels/layer_viewer/Layers3DView.ts +9 -10
  313. package/front_end/panels/layer_viewer/layerDetailsView.css +1 -1
  314. package/front_end/panels/layer_viewer/layerTreeOutline.css +2 -2
  315. package/front_end/panels/layer_viewer/layers3DView.css +1 -1
  316. package/front_end/panels/layer_viewer/paintProfiler.css +1 -1
  317. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -2
  318. package/front_end/panels/media/playerListView.css +9 -9
  319. package/front_end/panels/media/playerMessagesView.css +8 -8
  320. package/front_end/panels/media/playerPropertiesView.css +6 -6
  321. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +1 -1
  322. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +9 -9
  323. package/front_end/panels/network/NetworkDataGridNode.ts +1 -0
  324. package/front_end/panels/network/NetworkPanel.ts +9 -4
  325. package/front_end/panels/network/RequestConditionsDrawer.ts +12 -12
  326. package/front_end/panels/network/RequestPayloadView.ts +78 -26
  327. package/front_end/panels/network/binaryResourceView.css +1 -1
  328. package/front_end/panels/network/components/EditableSpan.css +3 -3
  329. package/front_end/panels/network/components/HeaderSectionRow.css +14 -14
  330. package/front_end/panels/network/components/RequestHeaderSection.css +7 -7
  331. package/front_end/panels/network/components/RequestHeadersView.css +18 -18
  332. package/front_end/panels/network/components/RequestTrustTokensView.css +1 -1
  333. package/front_end/panels/network/network-meta.ts +9 -9
  334. package/front_end/panels/network/networkConfigView.css +11 -11
  335. package/front_end/panels/network/networkLogView.css +35 -35
  336. package/front_end/panels/network/networkManageCustomHeadersView.css +1 -1
  337. package/front_end/panels/network/networkPanel.css +7 -7
  338. package/front_end/panels/network/networkTimingTable.css +13 -13
  339. package/front_end/panels/network/requestConditionsDrawer.css +4 -4
  340. package/front_end/panels/network/requestCookiesView.css +5 -5
  341. package/front_end/panels/network/requestDeviceBoundSessionsView.css +1 -1
  342. package/front_end/panels/network/requestHTMLView.css +1 -1
  343. package/front_end/panels/network/requestHeadersTree.css +19 -19
  344. package/front_end/panels/network/requestInitiatorView.css +1 -1
  345. package/front_end/panels/network/requestInitiatorViewTree.css +3 -3
  346. package/front_end/panels/network/requestPayloadTree.css +5 -5
  347. package/front_end/panels/network/requestPayloadView.css +1 -1
  348. package/front_end/panels/network/resourceChunkView.css +3 -3
  349. package/front_end/panels/network/signedExchangeInfoTree.css +6 -6
  350. package/front_end/panels/profiler/heapProfiler.css +15 -15
  351. package/front_end/panels/profiler/profileLauncherView.css +10 -10
  352. package/front_end/panels/recorder/RecordingView.ts +1 -1
  353. package/front_end/panels/recorder/StepEditor.ts +86 -7
  354. package/front_end/panels/recorder/TimelineSection.ts +2 -1
  355. package/front_end/panels/recorder/createRecordingView.css +17 -17
  356. package/front_end/panels/recorder/extensionView.css +5 -5
  357. package/front_end/panels/recorder/injected/RecordingClient.ts +1 -1
  358. package/front_end/panels/recorder/models/SchemaUtils.ts +2 -2
  359. package/front_end/panels/recorder/models/ScreenshotStorage.ts +1 -1
  360. package/front_end/panels/recorder/recorderPanel.css +7 -7
  361. package/front_end/panels/recorder/recordingListView.css +12 -12
  362. package/front_end/panels/recorder/recordingView.css +47 -47
  363. package/front_end/panels/recorder/stepEditor.css +2 -2
  364. package/front_end/panels/recorder/stepView.css +20 -20
  365. package/front_end/panels/recorder/timelineSection.css +9 -9
  366. package/front_end/panels/screencast/screencastView.css +12 -12
  367. package/front_end/panels/search/searchResultsPane.css +10 -10
  368. package/front_end/panels/search/searchView.css +9 -9
  369. package/front_end/panels/security/SecurityPanel.ts +84 -54
  370. package/front_end/panels/security/SecurityPanelSidebar.ts +0 -32
  371. package/front_end/panels/security/mainView.css +26 -26
  372. package/front_end/panels/security/originView.css +15 -15
  373. package/front_end/panels/sensors/locationsSettingsTab.css +6 -6
  374. package/front_end/panels/sensors/sensors.css +28 -28
  375. package/front_end/panels/settings/KeybindsSettingsTab.ts +5 -2
  376. package/front_end/panels/settings/components/syncSection.css +5 -5
  377. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +13 -13
  378. package/front_end/panels/settings/emulation/devicesSettingsTab.css +16 -16
  379. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +2 -2
  380. package/front_end/panels/settings/keybindsSettingsTab.css +2 -2
  381. package/front_end/panels/settings/settingsScreen.css +5 -5
  382. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  383. package/front_end/panels/sources/breakpointEditDialog.css +9 -9
  384. package/front_end/panels/sources/breakpointsView.css +25 -25
  385. package/front_end/panels/sources/callStackSidebarPane.css +10 -10
  386. package/front_end/panels/sources/components/HeadersView.css +6 -6
  387. package/front_end/panels/sources/debuggerPausedMessage.css +4 -4
  388. package/front_end/panels/sources/dialog.css +2 -2
  389. package/front_end/panels/sources/navigatorTree.css +2 -2
  390. package/front_end/panels/sources/navigatorView.css +2 -2
  391. package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
  392. package/front_end/panels/sources/sourcesNavigator.css +1 -1
  393. package/front_end/panels/sources/sourcesPanel.css +2 -2
  394. package/front_end/panels/sources/sourcesView.css +1 -1
  395. package/front_end/panels/sources/threadsSidebarPane.css +5 -5
  396. package/front_end/panels/sources/watchExpressionsSidebarPane.css +8 -8
  397. package/front_end/panels/timeline/TimelineDetailsView.ts +9 -21
  398. package/front_end/panels/timeline/TimelineFlameChartView.ts +3 -5
  399. package/front_end/panels/timeline/TimelineMiniMap.ts +3 -3
  400. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +2 -6
  401. package/front_end/panels/timeline/components/CWVMetrics.ts +9 -10
  402. package/front_end/panels/timeline/components/DetailsView.ts +12 -16
  403. package/front_end/panels/timeline/components/ExportTraceOptions.ts +13 -13
  404. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +19 -19
  405. package/front_end/panels/timeline/components/IgnoreListSetting.ts +7 -9
  406. package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -3
  407. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +13 -13
  408. package/front_end/panels/timeline/components/LiveMetricsView.ts +65 -65
  409. package/front_end/panels/timeline/components/MetricCard.ts +25 -25
  410. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +22 -22
  411. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +9 -9
  412. package/front_end/panels/timeline/components/OriginMap.ts +7 -7
  413. package/front_end/panels/timeline/components/RelatedInsightChips.ts +2 -2
  414. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +19 -20
  415. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +1 -1
  416. package/front_end/panels/timeline/components/TimelineSummary.ts +2 -2
  417. package/front_end/panels/timeline/components/Utils.ts +2 -6
  418. package/front_end/panels/timeline/components/breadcrumbsUI.css +3 -3
  419. package/front_end/panels/timeline/components/exportTraceOptions.css +1 -1
  420. package/front_end/panels/timeline/components/fieldSettingsDialog.css +13 -13
  421. package/front_end/panels/timeline/components/ignoreListSetting.css +3 -3
  422. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +6 -9
  423. package/front_end/panels/timeline/components/insights/Checklist.ts +2 -2
  424. package/front_end/panels/timeline/components/insights/Table.ts +1 -1
  425. package/front_end/panels/timeline/components/liveMetricsView.css +39 -39
  426. package/front_end/panels/timeline/components/metricCard.css +20 -20
  427. package/front_end/panels/timeline/components/networkRequestDetails.css +9 -9
  428. package/front_end/panels/timeline/components/networkRequestTooltip.css +14 -14
  429. package/front_end/panels/timeline/components/networkTrackWidget.css +2 -2
  430. package/front_end/panels/timeline/components/originMap.css +4 -4
  431. package/front_end/panels/timeline/components/relatedInsightChips.css +1 -1
  432. package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +4 -4
  433. package/front_end/panels/timeline/components/sidebarInsightsTab.css +5 -5
  434. package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
  435. package/front_end/panels/timeline/components/timelineSummary.css +4 -4
  436. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +4 -4
  437. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
  438. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +6 -6
  439. package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
  440. package/front_end/panels/timeline/thirdPartyTreeView.css +5 -5
  441. package/front_end/panels/timeline/timeline-meta.ts +0 -6
  442. package/front_end/panels/timeline/timelineDetailsView.css +11 -11
  443. package/front_end/panels/timeline/timelinePanel.css +20 -20
  444. package/front_end/panels/timeline/timelineTreeView.css +8 -8
  445. package/front_end/panels/webauthn/webauthnPane.css +6 -6
  446. package/front_end/panels/whats_new/ReleaseNoteText.ts +2 -2
  447. package/front_end/third_party/chromium/README.chromium +1 -1
  448. package/front_end/third_party/i18n/i18n-impl.ts +1 -1
  449. package/front_end/third_party/puppeteer/README.chromium +2 -2
  450. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +15 -1
  451. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +42 -8
  452. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts +4 -0
  453. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts.map +1 -1
  454. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +15 -2
  455. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
  456. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts +14 -1
  457. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts.map +1 -1
  458. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js +23 -1
  459. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js.map +1 -1
  460. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  461. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  462. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  463. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  464. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts.map +1 -1
  465. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js +77 -6
  466. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js.map +1 -1
  467. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  468. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  469. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
  470. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  471. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  472. package/front_end/third_party/puppeteer/package/lib/types.d.ts +15 -1
  473. package/front_end/third_party/puppeteer/package/package.json +2 -2
  474. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +16 -2
  475. package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +36 -1
  476. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  477. package/front_end/third_party/puppeteer/package/src/injected/Poller.ts +86 -6
  478. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  479. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  480. package/front_end/third_party/web-vitals/README.chromium +2 -2
  481. package/front_end/third_party/web-vitals/package/README.md +22 -7
  482. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +6 -2
  483. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.d.ts +2 -2
  484. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +30 -3
  485. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.d.ts +14 -0
  486. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.js +19 -13
  487. package/front_end/third_party/web-vitals/package/dist/modules/lib/bindReporter.d.ts +1 -1
  488. package/front_end/third_party/web-vitals/package/dist/modules/lib/doubleRAF.js +1 -1
  489. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +3 -3
  490. package/front_end/third_party/web-vitals/package/dist/modules/lib/softNavs.js +3 -1
  491. package/front_end/third_party/web-vitals/package/dist/modules/types/lcp.d.ts +15 -1
  492. package/front_end/third_party/web-vitals/package/package.json +1 -2
  493. package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +9 -2
  494. package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +36 -5
  495. package/front_end/third_party/web-vitals/package/src/lib/InteractionManager.ts +21 -15
  496. package/front_end/third_party/web-vitals/package/src/lib/doubleRAF.ts +1 -1
  497. package/front_end/third_party/web-vitals/package/src/lib/softNavs.ts +4 -1
  498. package/front_end/third_party/web-vitals/package/src/types/lcp.ts +16 -1
  499. package/front_end/third_party/web-vitals/rebuild.sh +3 -3
  500. package/front_end/ui/comments/CommentAnchorResolver.ts +109 -4
  501. package/front_end/ui/comments/CommentOverlayManager.ts +16 -32
  502. package/front_end/ui/comments/commentsOverlay.css +6 -5
  503. package/front_end/ui/components/adorners/Adorner.ts +1 -1
  504. package/front_end/ui/components/adorners/adorner.css +6 -6
  505. package/front_end/ui/components/buttons/FloatingButton.ts +1 -1
  506. package/front_end/ui/components/buttons/button.css +9 -9
  507. package/front_end/ui/components/buttons/floatingButton.css +2 -2
  508. package/front_end/ui/components/buttons/textButton.css +12 -12
  509. package/front_end/ui/components/dialogs/Dialog.ts +1 -1
  510. package/front_end/ui/components/dialogs/dialog.css +1 -1
  511. package/front_end/ui/components/diff_view/diffView.css +3 -3
  512. package/front_end/ui/components/expandable_list/expandableList.css +9 -9
  513. package/front_end/ui/components/highlighting/HighlightElement.ts +1 -1
  514. package/front_end/ui/components/highlighting/HighlightManager.ts +4 -0
  515. package/front_end/ui/components/icon_button/iconButton.css +2 -2
  516. package/front_end/ui/components/input/checkbox.css +8 -8
  517. package/front_end/ui/components/input/textInput.css +3 -3
  518. package/front_end/ui/components/issue_counter/issueLinkIcon.css +2 -2
  519. package/front_end/ui/components/linkifier/linkifierImpl.css +1 -1
  520. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +1 -1
  521. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +1 -1
  522. package/front_end/ui/components/markdown_view/codeBlock.css +2 -2
  523. package/front_end/ui/components/markdown_view/markdownView.css +7 -7
  524. package/front_end/ui/components/menus/menuGroup.css +2 -2
  525. package/front_end/ui/components/menus/menuItem.css +2 -2
  526. package/front_end/ui/components/menus/selectMenu.css +2 -2
  527. package/front_end/ui/components/menus/selectMenuButton.css +4 -4
  528. package/front_end/ui/components/panel_feedback/panelFeedback.css +15 -15
  529. package/front_end/ui/components/panel_feedback/previewToggle.css +2 -2
  530. package/front_end/ui/components/panel_introduction_steps/panelIntroductionSteps.css +7 -7
  531. package/front_end/ui/components/report_view/report.css +3 -3
  532. package/front_end/ui/components/report_view/reportSectionDivider.css +1 -1
  533. package/front_end/ui/components/report_view/reportValue.css +1 -1
  534. package/front_end/ui/components/request_link_icon/requestLinkIcon.css +2 -2
  535. package/front_end/ui/components/settings/settingCheckbox.css +6 -6
  536. package/front_end/ui/components/text_editor/TextEditor.ts +3 -1
  537. package/front_end/ui/components/text_editor/config.ts +16 -4
  538. package/front_end/ui/kit/icons/icon.css +4 -4
  539. package/front_end/ui/kit/link/link.css +1 -1
  540. package/front_end/ui/legacy/ActionRegistration.ts +23 -23
  541. package/front_end/ui/legacy/Dialog.ts +1 -1
  542. package/front_end/ui/legacy/DockController.ts +7 -4
  543. package/front_end/ui/legacy/EmptyWidget.ts +13 -34
  544. package/front_end/ui/legacy/FilterBar.ts +4 -4
  545. package/front_end/ui/legacy/Infobar.ts +2 -2
  546. package/front_end/ui/legacy/InspectorDrawerView.ts +6 -6
  547. package/front_end/ui/legacy/InspectorView.ts +22 -27
  548. package/front_end/ui/legacy/KeyboardShortcut.ts +4 -7
  549. package/front_end/ui/legacy/ListWidget.ts +7 -7
  550. package/front_end/ui/legacy/PlusButton.ts +1 -3
  551. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +6 -6
  552. package/front_end/ui/legacy/SearchableView.ts +18 -17
  553. package/front_end/ui/legacy/ShortcutRegistry.ts +6 -3
  554. package/front_end/ui/legacy/SoftContextMenu.ts +8 -8
  555. package/front_end/ui/legacy/SoftDropDown.ts +1 -1
  556. package/front_end/ui/legacy/SuggestBox.ts +2 -2
  557. package/front_end/ui/legacy/TabbedPane.ts +10 -10
  558. package/front_end/ui/legacy/TargetCrashedScreen.ts +2 -2
  559. package/front_end/ui/legacy/Toolbar.ts +5 -5
  560. package/front_end/ui/legacy/Treeoutline.ts +1 -1
  561. package/front_end/ui/legacy/UIUtils.ts +90 -26
  562. package/front_end/ui/legacy/ViewManager.ts +1 -1
  563. package/front_end/ui/legacy/ViewRegistration.ts +7 -7
  564. package/front_end/ui/legacy/Widget.ts +5 -5
  565. package/front_end/ui/legacy/checkboxTextLabel.css +3 -3
  566. package/front_end/ui/legacy/components/color_picker/ColorFormatSpec.ts +16 -0
  567. package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +1 -0
  568. package/front_end/ui/legacy/components/color_picker/spectrum.css +90 -90
  569. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +23 -24
  570. package/front_end/ui/legacy/components/cookie_table/cookiesTable.css +1 -1
  571. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +26 -28
  572. package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +3 -7
  573. package/front_end/ui/legacy/components/inline_editor/bezierEditor.css +13 -13
  574. package/front_end/ui/legacy/components/inline_editor/colorSwatch.css +7 -7
  575. package/front_end/ui/legacy/components/inline_editor/cssAngleEditor.css +5 -5
  576. package/front_end/ui/legacy/components/inline_editor/cssShadowEditor.css +18 -18
  577. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +104 -86
  578. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +8 -6
  579. package/front_end/ui/legacy/components/object_ui/objectPopover.css +4 -4
  580. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +6 -6
  581. package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
  582. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +28 -11
  583. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +6 -6
  584. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -15
  585. package/front_end/ui/legacy/components/perf_ui/GCActionDelegate.ts +1 -1
  586. package/front_end/ui/legacy/components/perf_ui/NetworkPriorities.ts +5 -5
  587. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +5 -5
  588. package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -1
  589. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +0 -4
  590. package/front_end/ui/legacy/components/perf_ui/chartViewport.css +4 -4
  591. package/front_end/ui/legacy/components/perf_ui/filmStripView.css +6 -6
  592. package/front_end/ui/legacy/components/perf_ui/flameChart.css +7 -7
  593. package/front_end/ui/legacy/components/perf_ui/overviewGrid.css +11 -11
  594. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +4 -6
  595. package/front_end/ui/legacy/components/perf_ui/pieChart.css +6 -6
  596. package/front_end/ui/legacy/components/perf_ui/timelineGrid.css +5 -5
  597. package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +3 -3
  598. package/front_end/ui/legacy/components/source_frame/FontView.ts +2 -2
  599. package/front_end/ui/legacy/components/source_frame/ImageView.ts +13 -13
  600. package/front_end/ui/legacy/components/source_frame/JSONView.ts +1 -1
  601. package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +2 -2
  602. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +2 -2
  603. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +15 -18
  604. package/front_end/ui/legacy/components/source_frame/XMLView.ts +1 -1
  605. package/front_end/ui/legacy/components/source_frame/imageView.css +1 -1
  606. package/front_end/ui/legacy/components/source_frame/jsonView.css +1 -1
  607. package/front_end/ui/legacy/components/source_frame/resourceSourceFrame.css +1 -1
  608. package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +10 -10
  609. package/front_end/ui/legacy/components/source_frame/xmlTree.css +3 -3
  610. package/front_end/ui/legacy/components/utils/imagePreview.css +1 -1
  611. package/front_end/ui/legacy/components/utils/jsUtils.css +10 -10
  612. package/front_end/ui/legacy/dropTarget.css +2 -2
  613. package/front_end/ui/legacy/emptyWidget.css +6 -0
  614. package/front_end/ui/legacy/filter.css +19 -19
  615. package/front_end/ui/legacy/infobar.css +2 -2
  616. package/front_end/ui/legacy/inspectorCommon.css +67 -67
  617. package/front_end/ui/legacy/inspectorDrawerTabbedPane.css +1 -1
  618. package/front_end/ui/legacy/listWidget.css +5 -5
  619. package/front_end/ui/legacy/progressIndicator.css +4 -4
  620. package/front_end/ui/legacy/reportView.css +7 -7
  621. package/front_end/ui/legacy/searchableView.css +5 -5
  622. package/front_end/ui/legacy/smallBubble.css +3 -3
  623. package/front_end/ui/legacy/softContextMenu.css +4 -4
  624. package/front_end/ui/legacy/softDropDownButton.css +1 -1
  625. package/front_end/ui/legacy/splitWidget.css +9 -31
  626. package/front_end/ui/legacy/suggestBox.css +4 -4
  627. package/front_end/ui/legacy/tabbedPane.css +17 -17
  628. package/front_end/ui/legacy/textPrompt.css +2 -2
  629. package/front_end/ui/legacy/toolbar.css +4 -4
  630. package/front_end/ui/legacy/treeoutline.css +14 -14
  631. package/front_end/ui/legacy/viewContainers.css +6 -6
  632. package/front_end/ui/settings/ConsoleSettings.ts +66 -0
  633. package/front_end/ui/settings/MainSettings.ts +47 -0
  634. package/front_end/ui/settings/settings.ts +2 -0
  635. package/front_end/ui/visual_logging/KnownContextValues.ts +12 -0
  636. package/inspector_overlay/common.ts +12 -12
  637. package/inspector_overlay/css_grid_label_helpers.ts +16 -17
  638. package/inspector_overlay/drag_resize_handler.ts +2 -2
  639. package/inspector_overlay/highlight_common.ts +11 -13
  640. package/inspector_overlay/highlight_container_query.ts +2 -2
  641. package/inspector_overlay/highlight_flex_common.ts +6 -7
  642. package/inspector_overlay/highlight_grid_common.ts +3 -3
  643. package/inspector_overlay/highlight_isolated_element.ts +12 -3
  644. package/inspector_overlay/highlight_scroll_snap.ts +2 -2
  645. package/inspector_overlay/loadCSS.rollup.js +0 -1
  646. package/inspector_overlay/testing/InspectorOverlayHelpers.ts +13 -13
  647. package/inspector_overlay/tool_green_dev_anchors.ts +3 -3
  648. package/inspector_overlay/tool_highlight.ts +9 -9
  649. package/inspector_overlay/tool_paused.ts +4 -4
  650. package/inspector_overlay/tool_persistent.ts +11 -11
  651. package/inspector_overlay/tool_screenshot.ts +7 -7
  652. package/inspector_overlay/tool_source_order.ts +4 -4
  653. package/inspector_overlay/tool_viewport_size.ts +3 -3
  654. package/inspector_overlay/tool_window_controls.ts +4 -4
  655. package/mcp/mcp.ts +1 -0
  656. package/package.json +2 -2
  657. package/front_end/generated/protocol-tsconfig.json +0 -10
  658. package/front_end/panels/js_timeline/DIR_METADATA +0 -3
  659. package/front_end/panels/js_timeline/js_timeline-meta.ts +0 -193
  660. package/front_end/panels/js_timeline/js_timeline.ts +0 -1
  661. /package/front_end/entrypoints/{formatter_worker/FormatterActions.ts → formatter_actions/formatter_actions.ts} +0 -0
@@ -49,7 +49,7 @@ import * as AIAssistance from '../../models/ai_assistance/ai_assistance.js';
49
49
  import * as Badges from '../../models/badges/badges.js';
50
50
  import * as Bindings from '../../models/bindings/bindings.js';
51
51
  import type * as Elements from '../../models/elements/elements.js';
52
- import type * as IssuesManager from '../../models/issues_manager/issues_manager.js';
52
+ import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
53
53
  import * as Workspace from '../../models/workspace/workspace.js';
54
54
  import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
55
55
  import type * as Adorners from '../../ui/components/adorners/adorners.js';
@@ -65,7 +65,6 @@ import * as PanelsCommon from '../common/common.js';
65
65
  import * as Media from '../media/media.js';
66
66
 
67
67
  import * as ElementsComponents from './components/components.js';
68
- import {cssPath, jsPath, xPath} from './DOMPath.js';
69
68
  import {getElementIssueDetails} from './ElementIssueUtils.js';
70
69
  import {ElementsPanel} from './ElementsPanel.js';
71
70
  import * as ElementStatePaneWidget from './ElementStatePaneWidget.js';
@@ -73,7 +72,7 @@ import {type ElementsTreeOutline, MappedCharToEntity} from './ElementsTreeOutlin
73
72
  import {ImagePreviewPopover} from './ImagePreviewPopover.js';
74
73
  import {getRegisteredDecorators, type MarkerDecorator, type MarkerDecoratorRegistration} from './MarkerDecorator.js';
75
74
 
76
- const {html, nothing, render, Directives: {ref, repeat}} = Lit;
75
+ const {html, nothing, render, Directives: {classMap, ref, repeat, until}} = Lit;
77
76
  const {animateOn} = UI.UIUtils;
78
77
 
79
78
  const UIStrings = {
@@ -268,6 +267,7 @@ export interface ViewInput {
268
267
  updateRecord: Elements.ElementUpdateRecord.ElementUpdateRecord|null;
269
268
  onHighlightSearchResults: () => void;
270
269
  onExpand: () => void;
270
+ issues?: IssuesManager.Issue.Issue[];
271
271
 
272
272
  containerAdornerActive: boolean;
273
273
  flexAdornerActive: boolean;
@@ -360,7 +360,7 @@ export interface Decoration {
360
360
 
361
361
  const DOM_UPDATE_ANIMATION_CLASS_NAME = 'dom-update-highlight';
362
362
 
363
- function handleAdornerKeydown(cb: (event: Event) => void): (event: KeyboardEvent) => void {
363
+ export function handleAdornerKeydown(cb: (event: Event) => void): (event: KeyboardEvent) => void {
364
364
  return (event: KeyboardEvent) => {
365
365
  if (event.code === 'Enter' || event.code === 'Space') {
366
366
  cb(event);
@@ -379,10 +379,12 @@ function renderTitle(
379
379
  updateRecord: Elements.ElementUpdateRecord.ElementUpdateRecord|null,
380
380
  onUpdateSearchHighlight: () => void,
381
381
  onExpand: () => void,
382
+ issues?: IssuesManager.Issue.Issue[],
382
383
  ): Lit.LitTemplate {
383
384
  switch (node.nodeType()) {
384
385
  case Node.ATTRIBUTE_NODE:
385
- return renderAttribute({name: node.name as string, value: node.value as string}, updateRecord, true, node);
386
+ return renderAttribute({name: node.name as string, value: node.value as string}, updateRecord, true, node,
387
+ issues);
386
388
 
387
389
  case Node.ELEMENT_NODE: {
388
390
  if (node.pseudoType()) {
@@ -396,10 +398,10 @@ function renderTitle(
396
398
 
397
399
  const tagName = node.nodeNameInCorrectCase();
398
400
  if (isClosingTag) {
399
- return renderTag(node, tagName, true, expanded, true, updateRecord);
401
+ return renderTag(node, tagName, true, expanded, true, updateRecord, issues);
400
402
  }
401
403
 
402
- const openingTag = renderTag(node, tagName, false, expanded, false, updateRecord);
404
+ const openingTag = renderTag(node, tagName, false, expanded, false, updateRecord, issues);
403
405
 
404
406
  if (isExpandable) {
405
407
  if (!expanded) {
@@ -407,7 +409,7 @@ function renderTitle(
407
409
  {clickHandler: onExpand} as
408
410
  ElementsComponents.ElementsTreeExpandButton
409
411
  .ElementsTreeExpandButtonData}></devtools-elements-tree-expand-button><span style="font-size: 0;"
410
- >…</span>\u200B${renderTag(node, tagName, true, expanded, false, updateRecord)}`;
412
+ >…</span>\u200B${renderTag(node, tagName, true, expanded, false, updateRecord, issues)}`;
411
413
  }
412
414
  return openingTag;
413
415
  }
@@ -429,14 +431,13 @@ function renderTitle(
429
431
 
430
432
  return html`${openingTag}<span class="webkit-html-text-node" jslog=${
431
433
  VisualLogging.value('text-node').track({change: true, dblclick: true})} ${
432
- animateOn(
433
- Boolean((updateRecord?.hasChangedChildren() || updateRecord?.isCharDataModified())),
434
- DOM_UPDATE_ANIMATION_CLASS_NAME)} ${renderTextNode}></span>\u200B${
435
- renderTag(node, tagName, true, expanded, false, updateRecord)}`;
434
+ animateOn(Boolean((updateRecord?.hasChangedChildren() || updateRecord?.isCharDataModified())),
435
+ DOM_UPDATE_ANIMATION_CLASS_NAME)} ${renderTextNode}></span>\u200B${
436
+ renderTag(node, tagName, true, expanded, false, updateRecord, issues)}`;
436
437
  }
437
438
 
438
439
  if (isXMLMimeType || !ForbiddenClosingTagElements.has(tagName)) {
439
- return html`${openingTag}${renderTag(node, tagName, true, expanded, false, updateRecord)}`;
440
+ return html`${openingTag}${renderTag(node, tagName, true, expanded, false, updateRecord, issues)}`;
440
441
  }
441
442
  return openingTag;
442
443
  }
@@ -609,9 +610,9 @@ function renderLinkifiedValue(value: string, node: SDK.DOMModel.DOMNode): Lit.Te
609
610
  const relationPromisesCache = new WeakMap<SDK.DOMModel.DOMNode, Map<string, Promise<string|Lit.LitTemplate>>>();
610
611
  const relatedElementsCache = new WeakMap<SDK.DOMModel.DOMNode, Map<string, SDK.DOMModel.DOMNode|null>>();
611
612
 
612
- function renderAttribute(
613
- attr: {name: string, value?: string}, updateRecord: Elements.ElementUpdateRecord.ElementUpdateRecord|null,
614
- isDiff: boolean, node: SDK.DOMModel.DOMNode): Lit.LitTemplate {
613
+ function renderAttribute(attr: {name: string, value?: string},
614
+ updateRecord: Elements.ElementUpdateRecord.ElementUpdateRecord|null, isDiff: boolean,
615
+ node: SDK.DOMModel.DOMNode, issues?: IssuesManager.Issue.Issue[]): Lit.LitTemplate {
615
616
  const name = attr.name;
616
617
  const value = attr.value || '';
617
618
  const forceValue = isDiff;
@@ -716,9 +717,15 @@ function renderAttribute(
716
717
  dblclick: true,
717
718
  });
718
719
 
719
- return html`<span class="webkit-html-attribute" jslog=${jslog}><span class="webkit-html-attribute-name"
720
+ const hasAttributeIssues = Boolean(issues?.some(issue => getElementIssueDetails(issue)?.attribute === name));
721
+ const attributeNameClasses = {
722
+ 'webkit-html-attribute-name': true,
723
+ 'violating-element': hasAttributeIssues,
724
+ };
725
+
726
+ return html`<span class="webkit-html-attribute" jslog=${jslog}><span class=${classMap(attributeNameClasses)}
720
727
  ${animateOn(Boolean(updateRecord?.isAttributeModified(name) && !hasText), DOM_UPDATE_ANIMATION_CLASS_NAME)}>${
721
- linkifyName && relationPromise ? Lit.Directives.until(relationPromise, name) : name}</span>${
728
+ linkifyName && relationPromise ? until(relationPromise, name) : name}</span>${
722
729
  hasText ?
723
730
  html`=\u200B"<span class="webkit-html-attribute-value" ${
724
731
  animateOn(Boolean(updateRecord?.isAttributeModified(name) && hasText),
@@ -726,16 +733,15 @@ function renderAttribute(
726
733
  ${valueType === ValueType.SRC ? renderLinkifiedValue(value, node) : nothing}
727
734
  ${
728
735
  valueType === ValueType.SRCSET ? renderLinkifiedSrcset(Common.Srcset.parseSrcset(value), node) : nothing}
729
- ${linkifyValue && relationPromise ? Lit.Directives.until(relationPromise, value) : nothing}
736
+ ${linkifyValue && relationPromise ? until(relationPromise, value) : nothing}
730
737
  </span>"` :
731
738
  nothing}</span>`;
732
739
  }
733
740
 
734
- function renderTag(
735
- node: SDK.DOMModel.DOMNode, tagName: string, isClosingTag: boolean, expanded: boolean,
736
- isDistinctTreeElement: boolean,
737
- updateRecord: Elements.ElementUpdateRecord.ElementUpdateRecord|null): Lit.LitTemplate {
738
- const classMap = {
741
+ function renderTag(node: SDK.DOMModel.DOMNode, tagName: string, isClosingTag: boolean, expanded: boolean,
742
+ isDistinctTreeElement: boolean, updateRecord: Elements.ElementUpdateRecord.ElementUpdateRecord|null,
743
+ issues?: IssuesManager.Issue.Issue[]): Lit.LitTemplate {
744
+ const tagClasses = {
739
745
  'webkit-html-tag': true,
740
746
  close: isClosingTag && isDistinctTreeElement,
741
747
  };
@@ -757,14 +763,22 @@ function renderTag(
757
763
  });
758
764
 
759
765
  const tagNameClass = isClosingTag ? 'webkit-html-close-tag-name' : 'webkit-html-tag-name';
766
+ const hasTagIssues = !isClosingTag && Boolean(issues?.some(issue => {
767
+ const details = getElementIssueDetails(issue);
768
+ return Boolean(details && !details.attribute);
769
+ }));
770
+ const tagNameClasses = {
771
+ [tagNameClass]: true,
772
+ 'violating-element': hasTagIssues,
773
+ };
760
774
  const tagString = (isClosingTag ? '/' : '') + tagName;
761
775
  const jslog = !isClosingTag ? VisualLogging.value('tag-name').track({change: true, dblclick: true}) : '';
762
776
 
763
777
  return html`<span
764
- class=${Lit.Directives.classMap(classMap)} ${setAriaLabel}
765
- >&lt;<span class=${tagNameClass} jslog=${jslog || nothing} ${
778
+ class=${classMap(tagClasses)} ${setAriaLabel}
779
+ >&lt;<span class=${classMap(tagNameClasses)} jslog=${jslog || nothing} ${
766
780
  animateOn(hasUpdates, DOM_UPDATE_ANIMATION_CLASS_NAME)}>${tagString}</span>${
767
- attributes.map(attr => html` ${renderAttribute(attr, updateRecord, false, node)}`)}&gt;</span>\u200B`;
781
+ attributes.map(attr => html` ${renderAttribute(attr, updateRecord, false, node, issues)}`)}&gt;</span>\u200B`;
768
782
  }
769
783
 
770
784
  function maybeRenderAdAdorner(input: ViewInput): Lit.TemplateResult|typeof nothing {
@@ -848,11 +862,12 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
848
862
  input.updateRecord,
849
863
  input.onHighlightSearchResults,
850
864
  input.onExpand,
865
+ input.issues,
851
866
  )}</span>` : nothing}
852
867
  ${input.isHovered || input.isSelected ? html`
853
868
  <div class="selection fill ${input.editorState ? 'hidden' : ''}" style=${`margin-left: ${-input.indent}px`}></div>
854
869
  ` : nothing}
855
- <div class=${Lit.Directives.classMap(gutterContainerClasses)}
870
+ <div class=${classMap(gutterContainerClasses)}
856
871
  style="left: ${-input.indent}px"
857
872
  @click=${input.onGutterClick}>
858
873
  <devtools-icon name="dots-horizontal"></devtools-icon>
@@ -866,10 +881,14 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
866
881
  ${hasAdorners ? html`<div class="adorner-container ${(input.editorState) ? 'hidden' : ''}">
867
882
  ${maybeRenderAdAdorner(input)}
868
883
  ${input.showViewSourceAdorner ? html`<devtools-adorner
884
+ class="clickable"
885
+ role=button
886
+ tabindex=0
869
887
  .name=${ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE}
870
- jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE)}
888
+ jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE).track({ click: true })}
871
889
  aria-label=${i18nString(UIStrings.viewSourceCode)}
872
890
  @click=${input.onViewSourceAdornerClick}
891
+ @keydown=${handleAdornerKeydown(input.onViewSourceAdornerClick)}
873
892
  ${adornerRef()}>
874
893
  <span>${ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE}</span>
875
894
  </devtools-adorner>` : nothing}
@@ -1001,7 +1020,9 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
1001
1020
  </span>
1002
1021
  </devtools-adorner>`: nothing}
1003
1022
  ${input.showStartingStyleAdorner ? html`<devtools-adorner
1004
- class="starting-style"
1023
+ class="starting-style clickable"
1024
+ role=button
1025
+ tabindex=0
1005
1026
  .name=${ElementsComponents.AdornerManager.RegisteredAdorners.STARTING_STYLE}
1006
1027
  jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.STARTING_STYLE).track({ click: true })}
1007
1028
  active=${input.startingStyleAdornerActive}
@@ -1035,7 +1056,9 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
1035
1056
  </span>
1036
1057
  </devtools-adorner>`: nothing}
1037
1058
  ${input.showScrollSnapAdorner ? html`<devtools-adorner
1038
- class="scroll-snap"
1059
+ class="scroll-snap clickable"
1060
+ role=button
1061
+ tabindex=0
1039
1062
  .name=${ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP}
1040
1063
  jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP).track({ click: true })}
1041
1064
  active=${input.scrollSnapAdornerActive}
@@ -1077,7 +1100,19 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
1077
1100
 
1078
1101
  type View = typeof DEFAULT_VIEW;
1079
1102
 
1103
+ export interface InitialEditState {
1104
+ attributeName?: string;
1105
+ isNewAttribute?: boolean;
1106
+ isProcessingInstruction?: boolean;
1107
+ isTextNode?: boolean;
1108
+ isEditAsHTML?: boolean;
1109
+ editAsHTMLCallback?: (success: boolean) => void;
1110
+ }
1111
+
1080
1112
  export class ElementsTreeWidget extends UI.Widget.Widget {
1113
+ static override readonly INJECT = [IssuesManager.DOMIssuesManager.DOMIssuesManager] as const;
1114
+ #domIssuesManager?: IssuesManager.DOMIssuesManager.DOMIssuesManager;
1115
+
1081
1116
  #node!: SDK.DOMModel.DOMNode;
1082
1117
  isClosingTag = false;
1083
1118
  #expanded = false;
@@ -1087,6 +1122,8 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1087
1122
  disableEdits = false;
1088
1123
  showAIButton = false;
1089
1124
  isDOMNodeSelected = false;
1125
+ initialEdit?: InitialEditState|null;
1126
+ onInitialEditCompleted?: () => void;
1090
1127
 
1091
1128
  expand?: () => void;
1092
1129
  collapse?: () => void;
@@ -1096,23 +1133,18 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1096
1133
  childCount?: () => number;
1097
1134
  closingTagElement?: () => Element | null;
1098
1135
  updateShadowRootDepth?: (depth: number) => void;
1099
- computeLeftIndent?: () => number;
1136
+ computeLeftIndent?: number|(() => number);
1100
1137
  setChildrenListElementVisible?: (visible: boolean) => void;
1101
1138
 
1102
1139
  findStartTagWidget?: () => ElementsTreeWidget | null;
1103
1140
  selectDOMNode?: (node: SDK.DOMModel.DOMNode, selectedByUser?: boolean) => void;
1104
1141
  revealInTopLayer?: (node: SDK.DOMModel.DOMNode) => void;
1105
- showContextMenu?: (event: Event) => void;
1142
+ showContextMenu?: (event: Event, widget?: ElementsTreeWidget) => void;
1106
1143
  populateTreeElement?: () => Promise<void>;
1107
- updateNodeElementToIssue?: (nodeElement: Element, issues: IssuesManager.Issue.Issue[]) => void;
1108
- performCopyOrCut?: (isCut: boolean, node: SDK.DOMModel.DOMNode, isElement?: boolean) => void;
1109
- duplicateNode?: (node: SDK.DOMModel.DOMNode) => void;
1110
- pasteNode?: (node: SDK.DOMModel.DOMNode) => void;
1111
- canPaste?: (node: SDK.DOMModel.DOMNode) => boolean;
1112
1144
  toggleHideElement?: (node: SDK.DOMModel.DOMNode) => Promise<void>;
1113
1145
  isToggledToHidden?: (node: SDK.DOMModel.DOMNode) => boolean;
1114
- selectNodeAfterEdit?: (wasExpanded: boolean, error: string|null,
1115
- newNode: SDK.DOMModel.DOMNode|null) => ElementsTreeWidget | null;
1146
+ selectNodeAfterEdit?: (wasExpanded: boolean, error: string|null, newNode: SDK.DOMModel.DOMNode|null,
1147
+ moveDirection?: string) => void;
1116
1148
  runPendingUpdates?: () => void;
1117
1149
  focusOutline?: () => void;
1118
1150
  setMultilineEditing?: (multilineEditing: EditorHandles|null) => void;
@@ -1120,10 +1152,10 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1120
1152
 
1121
1153
  #view: View;
1122
1154
 
1123
- private searchQuery: string|null;
1155
+ #searchQuery: string|null = null;
1124
1156
  #expandedChildrenLimit: number;
1125
- private readonly decorationsThrottler: Common.Throttler.Throttler;
1126
- private inClipboard: boolean;
1157
+ #decorationsThrottler = new Common.Throttler.Throttler(100);
1158
+ inClipboard = false;
1127
1159
  #hovered: boolean;
1128
1160
  editing: EditorHandles|null;
1129
1161
  #editorRef?: TextEditor.TextEditor.TextEditor;
@@ -1133,8 +1165,6 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1133
1165
  #editorState: CodeMirror.EditorState|null = null;
1134
1166
  #editorWidth: number|null = null;
1135
1167
  expandAllButtonElement: UI.TreeOutline.TreeElement|null;
1136
- #elementIssues = new Map<string, IssuesManager.Issue.Issue>();
1137
- #nodeElementToIssue = new Map<Element, IssuesManager.Issue.Issue[]>();
1138
1168
  #highlights: Range[] = [];
1139
1169
 
1140
1170
  #adornersThrottler = new Common.Throttler.Throttler(100);
@@ -1165,6 +1195,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1165
1195
  this.#node = node;
1166
1196
  if (!this.isClosingTag) {
1167
1197
  void this.#updateAdorners();
1198
+ this.updateDecorations();
1168
1199
  }
1169
1200
  }
1170
1201
 
@@ -1174,6 +1205,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1174
1205
 
1175
1206
  set expanded(expanded: boolean) {
1176
1207
  this.#expanded = expanded;
1208
+ this.updateDecorations();
1177
1209
  this.requestUpdate();
1178
1210
  }
1179
1211
 
@@ -1195,6 +1227,18 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1195
1227
  this.requestUpdate();
1196
1228
  }
1197
1229
 
1230
+ get searchQuery(): string|null {
1231
+ return this.#searchQuery;
1232
+ }
1233
+
1234
+ set searchQuery(query: string|null) {
1235
+ if (this.#searchQuery === query) {
1236
+ return;
1237
+ }
1238
+ this.#searchQuery = query;
1239
+ this.requestUpdate();
1240
+ }
1241
+
1198
1242
  get tagTypeContext(): TagTypeContext {
1199
1243
  if (this.isClosingTag) {
1200
1244
  return {tagType: TagType.CLOSING};
@@ -1205,13 +1249,31 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1205
1249
  };
1206
1250
  }
1207
1251
 
1208
- constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
1252
+ get issues(): IssuesManager.Issue.Issue[] {
1253
+ // The widget is currently created for non-widget ElementsTreeElement so
1254
+ // the domIssuesManager can be empty, relying on the manual resolution.
1255
+ if (!this.#domIssuesManager) {
1256
+ const universe = UI.Widget.lookupUniverseForElement(this.contentElement);
1257
+ if (universe) {
1258
+ this.#domIssuesManager = universe.get(IssuesManager.DOMIssuesManager.DOMIssuesManager);
1259
+ if (this.node?.id) {
1260
+ this.#domIssuesManager.subscribeByNodeId(this.node.id, this.#onDOMIssueUpdated);
1261
+ }
1262
+ }
1263
+ }
1264
+ return this.#domIssuesManager?.issuesForNode(this.node) ?? [];
1265
+ }
1266
+
1267
+ constructor(
1268
+ element?: HTMLElement,
1269
+ [domIssuesManager]: UI.Widget.WidgetDependencies<typeof ElementsTreeWidget>|[undefined] = [undefined],
1270
+ view: View = DEFAULT_VIEW,
1271
+ ) {
1209
1272
  super(element);
1273
+ this.#domIssuesManager = domIssuesManager;
1210
1274
  this.#view = view;
1211
1275
 
1212
- this.searchQuery = null;
1213
1276
  this.#expandedChildrenLimit = InitialChildrenLimit;
1214
- this.decorationsThrottler = new Common.Throttler.Throttler(100);
1215
1277
 
1216
1278
  this.inClipboard = false;
1217
1279
  this.#hovered = false;
@@ -1280,6 +1342,14 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1280
1342
 
1281
1343
  #clearDOMNextUpdate = false;
1282
1344
 
1345
+ override wasShown(): void {
1346
+ super.wasShown();
1347
+ if (!this.isClosingTag) {
1348
+ void this.#updateAdorners();
1349
+ this.updateDecorations();
1350
+ }
1351
+ }
1352
+
1283
1353
  override performUpdate(): void {
1284
1354
  // Skip updating when in-place editing (not HTML editing indicated by the
1285
1355
  // editorState) is happening. Doing an update would break editing
@@ -1287,6 +1357,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1287
1357
  if (this.editing && !this.#editorState) {
1288
1358
  return;
1289
1359
  }
1360
+ this.updateDecorations();
1290
1361
  if (this.#clearDOMNextUpdate) {
1291
1362
  this.#clearDOMNextUpdate = false;
1292
1363
  Lit.render(Lit.nothing, this.contentElement, {host: this});
@@ -1330,7 +1401,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1330
1401
  decorations: this.#decorations,
1331
1402
  descendantDecorations: this.#expanded ? [] : this.#descendantDecorations,
1332
1403
  decorationsTooltip: this.#decorationsTooltip,
1333
- indent: this.computeLeftIndent ? this.computeLeftIndent() : 0,
1404
+ indent: this.#getLeftIndent(),
1334
1405
  showScrollSnapAdorner: Boolean(this.#layout?.hasScroll) && !isClosingTag,
1335
1406
  scrollSnapAdornerActive: this.#scrollSnapAdornerActive,
1336
1407
  showSlotAdorner: Boolean(this.node.assignedSlot) && !isClosingTag,
@@ -1352,7 +1423,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1352
1423
  },
1353
1424
  topLayerIndex: this.node.topLayerIndex(),
1354
1425
  onViewSourceAdornerClick: this.disableEdits ? () => {} : this.revealHTMLInSources.bind(this),
1355
- onGutterClick: this.showContextMenu ? (event: Event) => this.showContextMenu?.(event) : () => {},
1426
+ onGutterClick: this.showContextMenu ? (event: Event) => this.showContextMenu?.(event, this) : () => {},
1356
1427
  onContainerAdornerClick: this.disableEdits ? () => {} : (event: Event) => this.#onContainerAdornerClick(event),
1357
1428
  onFlexAdornerClick: this.disableEdits ? () => {} : (event: Event) => this.#onFlexAdornerClick(event),
1358
1429
  onGridAdornerClick: this.disableEdits ? () => {} : (event: Event) => this.#onGridAdornerClick(event),
@@ -1382,6 +1453,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1382
1453
  },
1383
1454
  editorState: this.#editorState,
1384
1455
  editorWidth: this.#editorWidth,
1456
+ issues: this.issues,
1385
1457
  },
1386
1458
  output, this.contentElement);
1387
1459
 
@@ -1389,6 +1461,30 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1389
1461
  if (this.#updateRecord) {
1390
1462
  this.#updateRecord = null;
1391
1463
  }
1464
+ if (this.#searchQuery && !this.editing) {
1465
+ this.#highlightSearchResults();
1466
+ } else if (!this.#searchQuery && this.#highlights.length) {
1467
+ this.hideSearchHighlights();
1468
+ }
1469
+ if (this.initialEdit) {
1470
+ const edit = this.initialEdit;
1471
+ this.initialEdit = null;
1472
+ this.onInitialEditCompleted?.();
1473
+ if (edit.isEditAsHTML) {
1474
+ this.toggleEditAsHTML(edit.editAsHTMLCallback);
1475
+ } else if (edit.isProcessingInstruction) {
1476
+ this.startEditingProcessingInstructionValue();
1477
+ } else if (edit.isTextNode) {
1478
+ const textNode = this.contentElement.querySelector('.webkit-html-text-node');
1479
+ if (textNode) {
1480
+ this.startEditingTextNode(textNode);
1481
+ }
1482
+ } else if (edit.isNewAttribute) {
1483
+ this.addNewAttribute();
1484
+ } else if (edit.attributeName) {
1485
+ this.triggerEditAttribute(edit.attributeName);
1486
+ }
1487
+ }
1392
1488
  }
1393
1489
 
1394
1490
  async #onCustomElementAdornerClick(event: Event): Promise<void> {
@@ -1560,121 +1656,6 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1560
1656
  this.requestUpdate();
1561
1657
  }
1562
1658
 
1563
- addIssue(newIssue: IssuesManager.Issue.Issue): void {
1564
- if (this.#elementIssues.has(newIssue.primaryKey())) {
1565
- return;
1566
- }
1567
-
1568
- this.#elementIssues.set(newIssue.primaryKey(), newIssue);
1569
- this.#applyIssueStyleAndTooltip(newIssue);
1570
- }
1571
-
1572
- #applyIssueStyleAndTooltip(issue: IssuesManager.Issue.Issue): void {
1573
- const elementIssueDetails = getElementIssueDetails(issue);
1574
- if (!elementIssueDetails) {
1575
- return;
1576
- }
1577
-
1578
- if (elementIssueDetails.attribute) {
1579
- this.#highlightViolatingAttr(elementIssueDetails.attribute, issue);
1580
- } else {
1581
- this.#highlightTagAsViolating(issue);
1582
- }
1583
- }
1584
-
1585
- get issuesByNodeElement(): Map<Element, IssuesManager.Issue.Issue[]> {
1586
- return this.#nodeElementToIssue;
1587
- }
1588
-
1589
- #highlightViolatingAttr(name: string, issue: IssuesManager.Issue.Issue): void {
1590
- const tag = this.contentElement.querySelectorAll('.webkit-html-tag')[0];
1591
- const attributes = tag.getElementsByClassName('webkit-html-attribute');
1592
- for (const attribute of attributes) {
1593
- if (attribute.getElementsByClassName('webkit-html-attribute-name')[0].textContent === name) {
1594
- const attributeElement = attribute.getElementsByClassName('webkit-html-attribute-name')[0];
1595
- attributeElement.classList.add('violating-element');
1596
- this.#recordAndNotifyIssue(attributeElement, issue);
1597
- }
1598
- }
1599
- }
1600
-
1601
- #highlightTagAsViolating(issue: IssuesManager.Issue.Issue): void {
1602
- const tagElement = this.contentElement.querySelectorAll('.webkit-html-tag-name')[0];
1603
- tagElement.classList.add('violating-element');
1604
- this.#recordAndNotifyIssue(tagElement, issue);
1605
- }
1606
-
1607
- #recordAndNotifyIssue(nodeElement: Element, issue: IssuesManager.Issue.Issue): void {
1608
- let issues = this.#nodeElementToIssue.get(nodeElement);
1609
- if (!issues) {
1610
- issues = [];
1611
- this.#nodeElementToIssue.set(nodeElement, issues);
1612
- }
1613
- issues.push(issue);
1614
- this.updateNodeElementToIssue?.(nodeElement, issues);
1615
- }
1616
-
1617
- removeIssue(issue: IssuesManager.Issue.Issue): void {
1618
- if (!this.#elementIssues.has(issue.primaryKey())) {
1619
- return;
1620
- }
1621
-
1622
- this.#removeIssueStyleAndTooltip(issue);
1623
- this.#elementIssues.delete(issue.primaryKey());
1624
- }
1625
-
1626
- #removeIssueStyleAndTooltip(issue: IssuesManager.Issue.Issue): void {
1627
- const elementIssueDetails = getElementIssueDetails(issue);
1628
- if (!elementIssueDetails) {
1629
- return;
1630
- }
1631
-
1632
- if (elementIssueDetails.attribute) {
1633
- this.#undoHighlightViolatingAttr(elementIssueDetails.attribute, issue);
1634
- } else {
1635
- this.#undoHighlightTagAsViolating(issue);
1636
- }
1637
- }
1638
-
1639
- #undoHighlightViolatingAttr(name: string, issue: IssuesManager.Issue.Issue): void {
1640
- const violatingAttributes = this.contentElement.querySelectorAll('.webkit-html-attribute-name.violating-element');
1641
- for (const attributeElement of violatingAttributes) {
1642
- if (attributeElement.textContent === name) {
1643
- this.#removeFromNodeElementToIssue(attributeElement, issue);
1644
- if (!this.#nodeElementToIssue.has(attributeElement)) {
1645
- attributeElement.classList.remove('violating-element');
1646
- }
1647
- }
1648
- }
1649
- }
1650
-
1651
- #undoHighlightTagAsViolating(issue: IssuesManager.Issue.Issue): void {
1652
- const tagElement = this.contentElement.querySelectorAll('.webkit-html-tag-name')[0];
1653
- if (!tagElement) {
1654
- return;
1655
- }
1656
-
1657
- this.#removeFromNodeElementToIssue(tagElement, issue);
1658
- if (!this.#nodeElementToIssue.has(tagElement)) {
1659
- tagElement.classList.remove('violating-element');
1660
- }
1661
- }
1662
-
1663
- #removeFromNodeElementToIssue(nodeElement: Element, issue: IssuesManager.Issue.Issue): void {
1664
- let issues = this.#nodeElementToIssue.get(nodeElement);
1665
- if (!issues) {
1666
- return;
1667
- }
1668
-
1669
- issues = issues.filter(i => i !== issue);
1670
- if (issues.length === 0) {
1671
- this.#nodeElementToIssue.delete(nodeElement);
1672
- } else {
1673
- this.#nodeElementToIssue.set(nodeElement, issues);
1674
- }
1675
- this.updateNodeElementToIssue?.(nodeElement, issues);
1676
- }
1677
-
1678
1659
  expandedChildrenLimit(): number {
1679
1660
  return this.#expandedChildrenLimit;
1680
1661
  }
@@ -1703,6 +1684,9 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1703
1684
  this.#onPersistentGridOverlayStateChanged, this);
1704
1685
  this.node.addEventListener(SDK.DOMModel.DOMNodeEvents.SCROLL_SNAP_OVERLAY_STATE_CHANGED,
1705
1686
  this.#onPersistentScrollSnapOverlayStateChanged, this);
1687
+ if (this.#domIssuesManager && this.node.id) {
1688
+ this.#domIssuesManager.subscribeByNodeId(this.node.id, this.#onDOMIssueUpdated);
1689
+ }
1706
1690
  }
1707
1691
  }
1708
1692
 
@@ -1771,6 +1755,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1771
1755
  indent: 0,
1772
1756
  editorState: null,
1773
1757
  editorWidth: null,
1758
+ issues: [],
1774
1759
  },
1775
1760
  {}, this.contentElement);
1776
1761
  }
@@ -1794,8 +1779,15 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1794
1779
  this.#onPersistentGridOverlayStateChanged, this);
1795
1780
  this.node.removeEventListener(SDK.DOMModel.DOMNodeEvents.SCROLL_SNAP_OVERLAY_STATE_CHANGED,
1796
1781
  this.#onPersistentScrollSnapOverlayStateChanged, this);
1782
+ if (this.#domIssuesManager && this.node.id) {
1783
+ this.#domIssuesManager.unsubscribeByNodeId(this.node.id, this.#onDOMIssueUpdated);
1784
+ }
1797
1785
  }
1798
1786
 
1787
+ #onDOMIssueUpdated = (): void => {
1788
+ this.performUpdate();
1789
+ };
1790
+
1799
1791
  #onScrollableFlagUpdated(): void {
1800
1792
  void this.#updateAdorners();
1801
1793
  }
@@ -1980,7 +1972,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
1980
1972
  return UI.ActionRegistry.ActionRegistry.instance().hasAction('freestyler.elements-floating-button');
1981
1973
  }
1982
1974
 
1983
- private startEditing(): boolean|undefined {
1975
+ startEditing(): boolean|undefined {
1984
1976
  if (!this.isDOMNodeSelected) {
1985
1977
  return;
1986
1978
  }
@@ -2339,7 +2331,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2339
2331
 
2340
2332
  function resize(this: ElementsTreeWidget): void {
2341
2333
  if (this.visibleWidth) {
2342
- this.#editorWidth = this.visibleWidth() - (this.computeLeftIndent ? this.computeLeftIndent() : 0) - 30;
2334
+ this.#editorWidth = this.visibleWidth() - this.#getLeftIndent() - 30;
2343
2335
  this.requestUpdate();
2344
2336
  }
2345
2337
  }
@@ -2352,7 +2344,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2352
2344
  }
2353
2345
 
2354
2346
  function dispose(this: ElementsTreeWidget): void {
2355
- if (!this.#editorRef) {
2347
+ if (!this.editing && !this.#editorState) {
2356
2348
  return;
2357
2349
  }
2358
2350
  this.editing = null;
@@ -2378,6 +2370,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2378
2370
  moveDirection: string,
2379
2371
  ): void {
2380
2372
  this.editing = null;
2373
+ this.#clearDOMNextUpdate = true;
2381
2374
 
2382
2375
  function moveToNextAttributeIfNeeded(this: ElementsTreeWidget, error?: string|null): void {
2383
2376
  if (error) {
@@ -2499,10 +2492,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2499
2492
  }
2500
2493
 
2501
2494
  Badges.UserBadges.instance().recordAction(Badges.BadgeAction.DOM_ELEMENT_OR_ATTRIBUTE_EDITED);
2502
- const newWidget = this.selectNodeAfterEdit(wasExpanded, error, newNode);
2503
- if (newWidget) {
2504
- moveToNextAttributeIfNeeded.call(newWidget);
2505
- }
2495
+ this.selectNodeAfterEdit(wasExpanded, error, newNode, moveDirection);
2506
2496
  });
2507
2497
  }
2508
2498
 
@@ -2561,18 +2551,20 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2561
2551
  this.performUpdate();
2562
2552
  this.updateDecorations();
2563
2553
 
2564
- // If there is an issue with this node, make sure to update it.
2565
- for (const issue of this.#elementIssues.values()) {
2566
- this.#applyIssueStyleAndTooltip(issue);
2567
- }
2568
-
2569
2554
  this.#highlightSearchResults();
2570
2555
  }
2571
2556
 
2557
+ #getLeftIndent(): number {
2558
+ if (typeof this.computeLeftIndent === 'function') {
2559
+ return this.computeLeftIndent();
2560
+ }
2561
+ return this.computeLeftIndent ?? 0;
2562
+ }
2563
+
2572
2564
  updateDecorations(): void {
2573
2565
  // Important to keep the entire tree node row as a clickable area for that
2574
2566
  // node.
2575
- this.element.style.setProperty('--indent', (this.computeLeftIndent ? this.computeLeftIndent() : 0) + 'px');
2567
+ this.element.style.setProperty('--indent', this.#getLeftIndent() + 'px');
2576
2568
 
2577
2569
  if (this.isClosingTag) {
2578
2570
  return;
@@ -2582,7 +2574,7 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2582
2574
  return;
2583
2575
  }
2584
2576
 
2585
- void this.decorationsThrottler.schedule(this.#updateDecorations.bind(this));
2577
+ void this.#decorationsThrottler.schedule(this.#updateDecorations.bind(this));
2586
2578
  }
2587
2579
 
2588
2580
  #updateDecorations(): Promise<void> {
@@ -2624,15 +2616,23 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2624
2616
  return Promise.all(promises).then(updateDecorationsUI.bind(this));
2625
2617
 
2626
2618
  function updateDecorationsUI(this: ElementsTreeWidget): void {
2627
- this.#decorations = decorations;
2628
- this.#descendantDecorations = descendantDecorations;
2619
+ if (!this.isShowing()) {
2620
+ return;
2621
+ }
2629
2622
 
2630
2623
  if (!decorations.length && !descendantDecorations.length) {
2631
- this.#decorationsTooltip = '';
2632
- this.requestUpdate();
2624
+ if (this.#decorations.length || this.#descendantDecorations.length || this.#decorationsTooltip) {
2625
+ this.#decorations = [];
2626
+ this.#descendantDecorations = [];
2627
+ this.#decorationsTooltip = '';
2628
+ this.requestUpdate();
2629
+ }
2633
2630
  return;
2634
2631
  }
2635
2632
 
2633
+ this.#decorations = decorations;
2634
+ this.#descendantDecorations = descendantDecorations;
2635
+
2636
2636
  const tooltip: string[] = [];
2637
2637
  for (const decoration of decorations) {
2638
2638
  tooltip.push(decoration.title);
@@ -2695,53 +2695,6 @@ export class ElementsTreeWidget extends UI.Widget.Widget {
2695
2695
  void node.getOuterHTML().then(this.startEditingAsHTML.bind(this, commitChange, disposeCallback));
2696
2696
  }
2697
2697
 
2698
- copyCSSPath(): void {
2699
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(cssPath(this.node, true));
2700
- }
2701
-
2702
- copyJSPath(): void {
2703
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(jsPath(this.node, true));
2704
- }
2705
-
2706
- copyXPath(): void {
2707
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(xPath(this.node, true));
2708
- }
2709
-
2710
- copyFullXPath(): void {
2711
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(xPath(this.node, false));
2712
- }
2713
-
2714
- async copyStyles(): Promise<void> {
2715
- const node = this.node;
2716
- const cssModel = node.domModel().cssModel();
2717
- const cascade = await cssModel.cachedMatchedCascadeForNode(node);
2718
- if (!cascade) {
2719
- return;
2720
- }
2721
-
2722
- const indent = Common.Settings.Settings.instance().moduleSetting('text-editor-indent').get();
2723
- const lines: string[] = [];
2724
- for (const style of cascade.nodeStyles().reverse()) {
2725
- for (const property of style.leadingProperties()) {
2726
- if (!property.parsedOk || property.disabled || !property.activeInStyle() || property.implicit) {
2727
- continue;
2728
- }
2729
- if (cascade.isInherited(style) && !SDK.CSSMetadata.cssMetadata().isPropertyInherited(property.name)) {
2730
- continue;
2731
- }
2732
- if (style.parentRule?.isUserAgent()) {
2733
- continue;
2734
- }
2735
- if (cascade.propertyState(property) !== SDK.CSSMatchedStyles.PropertyState.ACTIVE) {
2736
- continue;
2737
- }
2738
- lines.push(`${indent}${property.name}: ${property.value};`);
2739
- }
2740
- }
2741
-
2742
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(lines.join('\n'));
2743
- }
2744
-
2745
2698
  #highlightSearchResults(): void {
2746
2699
  this.hideSearchHighlights();
2747
2700
 
@@ -2859,7 +2812,10 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2859
2812
  };
2860
2813
  }
2861
2814
 
2862
- constructor(node: SDK.DOMModel.DOMNode, isClosingTag?: boolean) {
2815
+ constructor(
2816
+ node: SDK.DOMModel.DOMNode,
2817
+ isClosingTag?: boolean,
2818
+ ) {
2863
2819
  super();
2864
2820
  this.nodeInternal = node;
2865
2821
  this.#isClosingTag = Boolean(isClosingTag);
@@ -2874,6 +2830,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2874
2830
  this.widgetWrapper = document.createElement('div');
2875
2831
  this.widgetWrapper.style.display = 'contents';
2876
2832
  this.title = this.widgetWrapper;
2833
+ this.listItemElement.draggable = true;
2877
2834
  this.widget = new ElementsTreeWidget();
2878
2835
  this.widget.isClosingTag = this.#isClosingTag;
2879
2836
  this.widget.node = this.nodeInternal;
@@ -2942,16 +2899,8 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2942
2899
  this.widget.hideSearchHighlights();
2943
2900
  }
2944
2901
  copyStyles(): Promise<void> {
2945
- return this.widget.copyStyles();
2946
- }
2947
- addIssue(issue: IssuesManager.Issue.Issue): void {
2948
- this.widget.addIssue(issue);
2949
- }
2950
- get issuesByNodeElement(): Map<Element, IssuesManager.Issue.Issue[]> {
2951
- return this.widget.issuesByNodeElement;
2952
- }
2953
- removeIssue(issue: IssuesManager.Issue.Issue): void {
2954
- this.widget.removeIssue(issue);
2902
+ const outline = this.treeOutline as ElementsTreeOutline | null;
2903
+ return outline?.domTreeWidget?.copyStyles(this.nodeInternal) ?? Promise.resolve();
2955
2904
  }
2956
2905
  setInClipboard(inClipboard: boolean): void {
2957
2906
  this.widget.setInClipboard(inClipboard);
@@ -2972,6 +2921,9 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2972
2921
  highlightAttribute(name: string): void {
2973
2922
  this.widget.highlightAttribute(name);
2974
2923
  }
2924
+ startEditing(): boolean|undefined {
2925
+ return this.widget.startEditing();
2926
+ }
2975
2927
  startEditingAttribute(attribute: Element, elementForSelection: Element): boolean {
2976
2928
  return this.widget.startEditingAttribute(attribute, elementForSelection);
2977
2929
  }
@@ -2982,16 +2934,20 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2982
2934
  this.widget.editAsHTML();
2983
2935
  }
2984
2936
  copyCSSPath(): void {
2985
- this.widget.copyCSSPath();
2937
+ const outline = this.treeOutline as ElementsTreeOutline | null;
2938
+ outline?.domTreeWidget?.copyCSSPath(this.nodeInternal);
2986
2939
  }
2987
2940
  copyJSPath(): void {
2988
- this.widget.copyJSPath();
2941
+ const outline = this.treeOutline as ElementsTreeOutline | null;
2942
+ outline?.domTreeWidget?.copyJSPath(this.nodeInternal);
2989
2943
  }
2990
2944
  copyXPath(): void {
2991
- this.widget.copyXPath();
2945
+ const outline = this.treeOutline as ElementsTreeOutline | null;
2946
+ outline?.domTreeWidget?.copyXPath(this.nodeInternal);
2992
2947
  }
2993
2948
  copyFullXPath(): void {
2994
- this.widget.copyFullXPath();
2949
+ const outline = this.treeOutline as ElementsTreeOutline | null;
2950
+ outline?.domTreeWidget?.copyFullXPath(this.nodeInternal);
2995
2951
  }
2996
2952
  hasEditableNode(): boolean {
2997
2953
  return this.widget.hasEditableNode();
@@ -3036,21 +2992,17 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
3036
2992
  this.widget.revealInTopLayer = node => outline.revealInTopLayer(node);
3037
2993
  this.widget.showContextMenu = event => void outline.showContextMenu(this, event);
3038
2994
  this.widget.populateTreeElement = async () => await outline.populateTreeElement(this);
3039
- this.widget.updateNodeElementToIssue = (el, issues) => outline.updateNodeElementToIssue(el, issues);
3040
- this.widget.performCopyOrCut = (isCut, node, isElement) => outline.performCopyOrCut(isCut, node, isElement);
3041
- this.widget.duplicateNode = node => outline.duplicateNode(node);
3042
- this.widget.pasteNode = node => outline.pasteNode(node);
3043
- this.widget.canPaste = node => outline.canPaste(node);
3044
2995
  this.widget.toggleHideElement = node => outline.toggleHideElement(node);
3045
2996
  this.widget.isToggledToHidden = node => outline.isToggledToHidden(node);
3046
- this.widget.selectNodeAfterEdit = (wasExpanded, error, newNode) => {
3047
- const newTreeItem = outline.selectNodeAfterEdit(wasExpanded, error, newNode);
3048
- return newTreeItem?.widget ?? null;
2997
+ this.widget.selectNodeAfterEdit = (wasExpanded, error, newNode, moveDirection) => {
2998
+ outline.domTreeWidget?.selectNodeAfterEdit(wasExpanded, error, newNode, moveDirection);
3049
2999
  };
3050
3000
  this.widget.runPendingUpdates = () => outline.runPendingUpdates();
3051
3001
  this.widget.focusOutline = () => outline.focus();
3052
- this.widget.setMultilineEditing = multilineEditing => outline.setMultilineEditing(multilineEditing);
3053
- this.widget.visibleWidth = () => outline.visibleWidth();
3002
+ this.widget.setMultilineEditing = multilineEditing => {
3003
+ outline.domTreeWidget?.setMultilineEditing(multilineEditing);
3004
+ };
3005
+ this.widget.visibleWidth = () => outline.domTreeWidget?.visibleWidth ?? outline.visibleWidth();
3054
3006
  }
3055
3007
  }
3056
3008
 
@@ -3110,6 +3062,11 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
3110
3062
 
3111
3063
  override onenter(): boolean {
3112
3064
  this.#syncOutlineProperties();
3065
+ const outline = this.treeOutline as ElementsTreeOutline | null;
3066
+ if (outline?.domTreeWidget) {
3067
+ outline.domTreeWidget.startEditing(this.nodeInternal);
3068
+ return true;
3069
+ }
3113
3070
  return this.widget.onenter();
3114
3071
  }
3115
3072