chrome-devtools-frontend 1.0.1579812 → 1.0.1581708

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 (351) hide show
  1. package/agents/prompts/creating-a-model.md +51 -0
  2. package/agents/prompts/merging-devtools-module.md +144 -0
  3. package/agents/prompts/ui-widgets.md +351 -0
  4. package/agents/prompts/verification.md +2 -1
  5. package/docs/contributing/README.md +5 -6
  6. package/docs/contributing/changes.md +1 -2
  7. package/docs/feature-specs/elements-tree-edit-html.md +14 -0
  8. package/docs/feature-specs/elements-tree-node-title.md +46 -0
  9. package/docs/styleguide/ux/README.md +1 -1
  10. package/front_end/core/host/UserMetrics.ts +3 -7
  11. package/front_end/core/root/Runtime.ts +0 -1
  12. package/front_end/core/sdk/NetworkManager.ts +0 -35
  13. package/front_end/core/sdk/OverlayModel.ts +12 -0
  14. package/front_end/core/sdk/StorageKeyManager.ts +6 -1
  15. package/front_end/core/sdk/Target.ts +4 -2
  16. package/front_end/devtools_compatibility.js +4 -0
  17. package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
  18. package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +536 -0
  19. package/front_end/entrypoints/greendev_floaty/floaty.css +298 -0
  20. package/front_end/entrypoints/greendev_floaty/floaty.html +38 -0
  21. package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +422 -0
  22. package/front_end/entrypoints/inspector_main/InspectorMain.ts +0 -38
  23. package/front_end/entrypoints/node_app/app/NodeMain.ts +19 -1
  24. package/front_end/entrypoints/node_app/node_app.ts +34 -0
  25. package/front_end/generated/InspectorBackendCommands.ts +9 -3
  26. package/front_end/generated/SupportedCSSProperties.js +39 -31
  27. package/front_end/generated/protocol-mapping.d.ts +12 -0
  28. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  29. package/front_end/generated/protocol.ts +56 -2
  30. package/front_end/models/ai_assistance/AiConversation.ts +10 -0
  31. package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -0
  32. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +24 -2
  33. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +104 -9
  34. package/front_end/{panels/elements → models/computed_style}/ComputedStyleModel.ts +26 -0
  35. package/front_end/models/computed_style/computed_style.ts +9 -0
  36. package/front_end/models/issues_manager/CookieIssue.ts +0 -28
  37. package/front_end/models/issues_manager/CorsIssue.ts +11 -14
  38. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +3 -5
  39. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +102 -6
  40. package/front_end/panels/ai_assistance/components/ChatInput.ts +15 -2
  41. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -0
  42. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  43. package/front_end/panels/application/ApplicationPanelSidebar.ts +13 -11
  44. package/front_end/panels/application/DOMStorageModel.ts +1 -1
  45. package/front_end/panels/application/ResourcesPanel.ts +10 -5
  46. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +0 -1
  47. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -4
  48. package/front_end/panels/autofill/AutofillView.ts +1 -1
  49. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +0 -1
  50. package/front_end/panels/changes/changesSidebar.css +5 -0
  51. package/front_end/panels/common/AiCodeCompletionTeaser.ts +13 -3
  52. package/front_end/panels/common/ExtensionPanel.ts +4 -0
  53. package/front_end/panels/common/FreDialog.ts +4 -0
  54. package/front_end/panels/common/aiCodeCompletionTeaser.css +6 -0
  55. package/front_end/panels/console/ConsoleViewMessage.ts +0 -1
  56. package/front_end/panels/console_counters/WarningErrorCounter.ts +16 -10
  57. package/front_end/panels/coverage/CoverageListView.ts +18 -3
  58. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +11 -0
  59. package/front_end/panels/elements/ComputedStyleWidget.ts +67 -45
  60. package/front_end/panels/elements/ElementsPanel.ts +4 -3
  61. package/front_end/panels/elements/ElementsSidebarPane.ts +11 -8
  62. package/front_end/panels/elements/ElementsTreeElement.ts +0 -1
  63. package/front_end/panels/elements/ElementsTreeOutline.ts +25 -15
  64. package/front_end/panels/elements/LayoutPane.ts +7 -8
  65. package/front_end/panels/elements/MetricsSidebarPane.ts +2 -2
  66. package/front_end/panels/elements/PlatformFontsWidget.ts +24 -9
  67. package/front_end/panels/elements/PropertiesWidget.ts +3 -6
  68. package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
  69. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
  70. package/front_end/panels/elements/components/StylePropertyEditor.ts +1 -2
  71. package/front_end/panels/elements/elements.ts +1 -3
  72. package/front_end/panels/greendev/GreenDevPanel.css +282 -0
  73. package/front_end/panels/greendev/GreenDevPanel.ts +337 -0
  74. package/front_end/panels/greendev/GreenDevShared.ts +13 -0
  75. package/front_end/panels/greendev/greendev-meta.ts +52 -0
  76. package/front_end/panels/greendev/greendev.ts +9 -0
  77. package/front_end/panels/issues/CorsIssueDetailsView.ts +4 -4
  78. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  79. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
  80. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
  81. package/front_end/panels/media/PlayerListView.ts +1 -1
  82. package/front_end/panels/network/NetworkLogViewColumns.ts +1 -2
  83. package/front_end/panels/network/RequestInitiatorView.ts +8 -11
  84. package/front_end/panels/network/RequestTimingView.ts +1 -1
  85. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  86. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  87. package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
  88. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  89. package/front_end/panels/security/SecurityPanel.ts +0 -4
  90. package/front_end/panels/security/SecurityPanelSidebar.ts +2 -42
  91. package/front_end/panels/security/security-meta.ts +2 -14
  92. package/front_end/panels/security/security.ts +0 -4
  93. package/front_end/panels/settings/KeybindsSettingsTab.ts +5 -5
  94. package/front_end/panels/sources/OutlineQuickOpen.ts +19 -0
  95. package/front_end/panels/sources/SourcesSearchScope.ts +2 -1
  96. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  97. package/front_end/panels/timeline/TimelinePanel.ts +25 -0
  98. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
  99. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
  100. package/front_end/third_party/chromium/README.chromium +1 -1
  101. package/front_end/third_party/lighthouse/README.chromium +2 -2
  102. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +145 -144
  103. package/front_end/third_party/lighthouse/report/bundle.js +12 -5
  104. package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +2 -2
  105. package/front_end/third_party/puppeteer/README.chromium +2 -2
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +35 -0
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +19 -0
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +16 -1
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +21 -0
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +6 -0
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts +13 -1
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js +56 -36
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +2 -2
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +32 -8
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +5 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +32 -2
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -2
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +20 -0
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +2 -1
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +25 -8
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts +2 -0
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js +23 -0
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +10 -6
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts +29 -0
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +46 -6
  153. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +5 -1
  155. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +18 -0
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js +2 -2
  159. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +13 -1
  162. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js +2 -2
  164. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +7 -2
  166. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +43 -7
  168. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts +10 -1
  170. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js +34 -4
  172. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +1 -1
  174. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +1 -1
  180. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  182. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +1 -0
  184. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  186. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -0
  187. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  188. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +4 -0
  189. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  190. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +2 -2
  192. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
  193. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  194. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  195. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  196. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +129 -3
  199. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +233 -65
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +35 -0
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +19 -0
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +16 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +21 -0
  210. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +6 -0
  212. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts +13 -1
  214. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js +56 -36
  216. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js.map +1 -1
  217. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +2 -2
  218. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  219. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +30 -6
  220. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +5 -1
  222. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +32 -2
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -2
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +20 -0
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +2 -1
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +25 -8
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts +2 -0
  234. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  235. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js +23 -0
  236. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  237. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
  238. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  239. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +10 -6
  240. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  241. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -1
  243. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts +29 -0
  245. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +46 -6
  247. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +5 -1
  249. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  250. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +19 -1
  251. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  252. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js +3 -3
  253. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
  254. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +14 -2
  256. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js +3 -3
  258. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js.map +1 -1
  259. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +7 -2
  260. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +43 -8
  262. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts +10 -1
  264. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js +31 -3
  266. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +1 -1
  268. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  270. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  272. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +1 -1
  274. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  276. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +1 -0
  277. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  278. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -0
  280. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +4 -0
  282. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  284. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +2 -2
  285. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
  286. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  287. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  288. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  289. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/types.d.ts +129 -3
  291. package/front_end/third_party/puppeteer/package/package.json +4 -4
  292. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +46 -0
  293. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +21 -0
  294. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/src/api/Page.ts +23 -0
  296. package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +88 -56
  297. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +33 -8
  298. package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +61 -3
  299. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +23 -2
  300. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +29 -8
  301. package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +30 -0
  302. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +13 -2
  303. package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -0
  304. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +85 -8
  305. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +36 -1
  306. package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +5 -5
  307. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +23 -2
  308. package/front_end/third_party/puppeteer/package/src/cdp/JSHandle.ts +3 -3
  309. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +60 -8
  310. package/front_end/third_party/puppeteer/package/src/cdp/utils.ts +36 -3
  311. package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +1 -1
  312. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  313. package/front_end/third_party/puppeteer/package/src/injected/XPathQuerySelector.ts +1 -1
  314. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +1 -0
  315. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
  316. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +4 -0
  317. package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +8 -6
  318. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  319. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  320. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +12 -7
  321. package/front_end/ui/components/text_editor/AutocompleteHistory.ts +2 -1
  322. package/front_end/ui/components/text_editor/TextEditorHistory.ts +1 -1
  323. package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
  324. package/front_end/ui/legacy/ListControl.ts +27 -1
  325. package/front_end/ui/legacy/ListWidget.ts +1 -1
  326. package/front_end/ui/legacy/SearchableView.ts +5 -2
  327. package/front_end/ui/legacy/SoftContextMenu.ts +1 -2
  328. package/front_end/ui/legacy/Treeoutline.ts +1 -2
  329. package/front_end/ui/legacy/UIUtils.ts +17 -7
  330. package/front_end/ui/legacy/Widget.ts +15 -0
  331. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
  332. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -1
  333. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -1
  334. package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
  335. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  336. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +4 -2
  337. package/front_end/ui/visual_logging/KnownContextValues.ts +15 -0
  338. package/inspector_overlay/main.ts +18 -3
  339. package/inspector_overlay/tool_green_dev_anchors.css +54 -0
  340. package/inspector_overlay/tool_green_dev_anchors.ts +164 -0
  341. package/inspector_overlay/tool_persistent.ts +14 -0
  342. package/mcp/mcp.ts +1 -0
  343. package/package.json +1 -1
  344. package/docs/contributing/design.md +0 -166
  345. package/docs/design_guidelines.md +0 -1
  346. package/front_end/panels/security/CookieControlsTreeElement.ts +0 -21
  347. package/front_end/panels/security/CookieControlsView.ts +0 -447
  348. package/front_end/panels/security/CookieReportTreeElement.ts +0 -21
  349. package/front_end/panels/security/CookieReportView.ts +0 -549
  350. package/front_end/panels/security/cookieControlsView.css +0 -139
  351. package/front_end/panels/security/cookieReportView.css +0 -90
@@ -37,9 +37,13 @@ export class ResourcesPanel extends UI.Panel.PanelWithSidebar {
37
37
  private cookieView: CookieItemsView|null;
38
38
  private deviceBoundSessionsView: DeviceBoundSessionsView|null;
39
39
  private readonly sidebar: ApplicationPanelSidebar;
40
+ mode: 'default'|'node' = 'default';
40
41
 
41
- private constructor() {
42
+ private constructor(
43
+ mode: 'default'|'node' = 'default',
44
+ ) {
42
45
  super('resources');
46
+ this.mode = mode;
43
47
  this.registerRequiredCSS(resourcesPanelStyles);
44
48
 
45
49
  this.resourcesLastSelectedItemSetting =
@@ -68,11 +72,12 @@ export class ResourcesPanel extends UI.Panel.PanelWithSidebar {
68
72
  }
69
73
 
70
74
  static instance(opts: {
71
- forceNew: boolean|null,
72
- } = {forceNew: null}): ResourcesPanel {
73
- const {forceNew} = opts;
75
+ forceNew?: boolean|null,
76
+ mode?: 'default'|'node',
77
+ } = {forceNew: null, mode: 'default'}): ResourcesPanel {
78
+ const {forceNew, mode} = opts;
74
79
  if (!resourcesPanelInstance || forceNew) {
75
- resourcesPanelInstance = new ResourcesPanel();
80
+ resourcesPanelInstance = new ResourcesPanel(mode);
76
81
  }
77
82
 
78
83
  return resourcesPanelInstance;
@@ -180,7 +180,6 @@ export class ServiceWorkerUpdateCycleView {
180
180
  const tr = this.tableElement.createChild('tr', 'service-worker-update-timeline');
181
181
  tr.setAttribute('jslog', `${VisualLogging.treeItem('update-timeline').track({
182
182
  click: true,
183
- resize: true,
184
183
  keydown: 'ArrowLeft|ArrowRight|ArrowUp|ArrowDown|Enter|Space',
185
184
  })}`);
186
185
  this.rows.push(tr);
@@ -353,7 +353,7 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
353
353
  }
354
354
  const rows = [html`<div>${i18nString(UIStrings.framesPerIssue, {n: frames.length})}</div>`];
355
355
  rows.push(...frames.map(url => html`<div class="text-ellipsis" title=${url}
356
- jslog=${VisualLogging.treeItem().track({resize: true})}>${url}</div>`));
356
+ jslog=${VisualLogging.treeItem()}>${url}</div>`));
357
357
  return html`
358
358
  <div class="details-list"
359
359
  jslog=${VisualLogging.tree('frames-per-issue')}>
@@ -361,9 +361,7 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
361
361
  rows,
362
362
  title: i18nString(UIStrings.framesPerIssue, {n: frames.length}),
363
363
  } as ExpandableList.ExpandableList.ExpandableListData}
364
- jslog=${VisualLogging.treeItem().track({
365
- resize: true
366
- })}></devtools-expandable-list>
364
+ jslog=${VisualLogging.treeItem()}></devtools-expandable-list>
367
365
  </div>
368
366
  `;
369
367
  }
@@ -144,7 +144,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
144
144
  // clang-format off
145
145
  return html`
146
146
  <span class=${spanClasses}
147
- jslog=${VisualLogging.item('matched-address-item').track({hover: true, resize: true})}
147
+ jslog=${VisualLogging.item('matched-address-item').track({hover: true})}
148
148
  @mouseenter=${() => input.onHighlightMatchesInAddress(startIndex)}
149
149
  @mouseleave=${input.onClearHighlightedMatches}>
150
150
  ${templateLines}
@@ -238,7 +238,6 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
238
238
  listItemElement.setAttribute('jslog', `${VisualLogging.item().track({
239
239
  click: true,
240
240
  dblclick: true,
241
- resize: true,
242
241
  keydown: 'ArrowUp|ArrowDown|PageUp|PageDown|Enter|Space',
243
242
  })}`);
244
243
  return listItemElement;
@@ -14,6 +14,11 @@ devtools-icon {
14
14
  margin-right: var(--sys-size-4);
15
15
  }
16
16
 
17
+ .tree-element-title > div {
18
+ display: flex;
19
+ align-items: center;
20
+ }
21
+
17
22
  .navigator-sm-script-tree-item devtools-icon,
18
23
  .navigator-script-tree-item devtools-icon,
19
24
  .navigator-snippet-tree-item devtools-icon {
@@ -73,12 +73,12 @@ const UIStringsNotTranslate = {
73
73
  * @description Code generation disclaimer item text for the fre dialog.
74
74
  */
75
75
  freDisclaimerDescribeCodeInComment:
76
- 'In Console or Sources, describe the code you need in a comment, then press Ctrl+I to generate it.',
76
+ 'In Console or Sources, describe the code you need in a comment, then press ctrl+i to generate it.',
77
77
  /**
78
78
  * @description Code generation disclaimer item text for the fre dialog.
79
79
  */
80
80
  freDisclaimerDescribeCodeInCommentForMacOs:
81
- 'In Console or Sources, describe the code you need in a comment, then press Cmd+I to generate it.',
81
+ 'In Console or Sources, describe the code you need in a comment, then press cmd+i to generate it.',
82
82
  /**
83
83
  * @description Privacy disclaimer item text for the fre dialog.
84
84
  */
@@ -140,7 +140,17 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
140
140
  <span>${lockedString(UIStringsNotTranslate.i)}</span>
141
141
  </span>
142
142
  </span>&nbsp;${lockedString(UIStringsNotTranslate.toTurnOnCodeSuggestions)}&nbsp;
143
- <span role="button" class="ai-code-completion-teaser-dismiss" @click=${input.onDismiss}
143
+ <span role="button" class="ai-code-completion-teaser-dismiss"
144
+ tabindex="0"
145
+ @click=${input.onDismiss}
146
+ @keydown=${(e: KeyboardEvent) => {
147
+ // Handle Enter and Space events to make dismiss button accessible for only keyboard users.
148
+ if (e.key === 'Enter' || e.key === ' ') {
149
+ input.onDismiss(e);
150
+ e.stopPropagation();
151
+ e.preventDefault();
152
+ }
153
+ }}
144
154
  jslog=${VisualLogging.action('ai-code-completion-teaser.dismiss').track({click: true})}>
145
155
  ${lockedString(UIStringsNotTranslate.dontShowAgain)}
146
156
  </span>
@@ -52,6 +52,10 @@ export class ExtensionPanel extends UI.Panel.Panel implements UI.SearchableView.
52
52
  this.id, Extensions.ExtensionAPI.PrivateAPI.Panels.SearchAction.PerformSearch, query);
53
53
  }
54
54
 
55
+ supportsMatchCounts(): boolean {
56
+ return false;
57
+ }
58
+
55
59
  jumpToNextSearchResult(): void {
56
60
  this.server.notifySearchAction(this.id, Extensions.ExtensionAPI.PrivateAPI.Panels.SearchAction.NextSearchResult);
57
61
  }
@@ -54,6 +54,7 @@ export class FreDialog {
54
54
  if (ariaLabel) {
55
55
  dialog.setAriaLabel(ariaLabel);
56
56
  }
57
+ dialog.contentElement.tabIndex = -1;
57
58
  const result = Promise.withResolvers<boolean>();
58
59
  // clang-format off
59
60
  Lit.render(html`
@@ -131,6 +132,9 @@ export class FreDialog {
131
132
  dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
132
133
  dialog.setDimmed(true);
133
134
  dialog.show();
135
+ // Explicitly calling focus as `dialog.show()` does not put the FRE
136
+ // dialog in focus.
137
+ dialog.contentElement.focus();
134
138
 
135
139
  return result.promise;
136
140
  }
@@ -26,6 +26,12 @@
26
26
  .ai-code-completion-teaser-dismiss {
27
27
  text-decoration: underline;
28
28
  cursor: pointer;
29
+
30
+ &:focus-visible {
31
+ border-radius: var(--sys-shape-corner-extra-small);
32
+ outline: var(--sys-size-2) solid var(--sys-color-state-focus-ring);
33
+ outline-offset: 0;
34
+ }
29
35
  }
30
36
 
31
37
  .ai-code-completion-teaser-action {
@@ -1425,7 +1425,6 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
1425
1425
  this.elementInternal.className = 'console-message-wrapper';
1426
1426
  this.elementInternal.setAttribute('jslog', `${VisualLogging.item('console-message').track({
1427
1427
  click: true,
1428
- resize: true,
1429
1428
  keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End',
1430
1429
  })}`);
1431
1430
  this.elementInternal.removeChildren();
@@ -12,9 +12,11 @@ import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
12
12
  import type * as IconButton from '../../ui/components/icon_button/icon_button.js';
13
13
  import * as IssueCounter from '../../ui/components/issue_counter/issue_counter.js';
14
14
  import * as UI from '../../ui/legacy/legacy.js';
15
- import {html, nothing, render} from '../../ui/lit/lit.js';
15
+ import * as Lit from '../../ui/lit/lit.js';
16
16
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
17
17
 
18
+ const {html, nothing, render} = Lit;
19
+
18
20
  const UIStrings = {
19
21
  /**
20
22
  * @description The console error count in the Warning Error Counter shown in the main toolbar (top-left in DevTools). The error count refers to the number of errors currently present in the JavaScript console.
@@ -95,21 +97,25 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
95
97
 
96
98
  render(
97
99
  html`<div class="status-buttons"
98
- ><icon-button
100
+ >${
101
+ errors + warnings ? html`<icon-button
99
102
  .data=${iconData}
100
103
  title=${consoleTitle}
101
- class=${'small' + warnings || errors ? nothing as unknown as string : 'hidden'}
104
+ class=${'small'}
102
105
  jslog=${VisualLogging.counter('console').track({
103
- click: true
104
- })}
105
- ></icon-button><devtools-issue-counter
106
- class=${'main-toolbar' + (issues ? '' : ' hidden')}
106
+ click: true
107
+ })}
108
+ ></icon-button>` :
109
+ nothing}${
110
+ issues ? html`<devtools-issue-counter
111
+ class=${'main-toolbar'}
107
112
  title=${issuesTitle}
108
113
  .data=${issueCounterData}
109
114
  jslog=${VisualLogging.counter('issue').track({
110
- click: true
111
- })}
112
- ></devtools-issue-counter></div>`,
115
+ click: true
116
+ })}
117
+ ></devtools-issue-counter>` :
118
+ nothing}</div>`,
113
119
  target);
114
120
  };
115
121
 
@@ -3,18 +3,20 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import '../../ui/components/highlighting/highlighting.js';
6
- import '../../ui/legacy/components/data_grid/data_grid.js';
7
6
 
8
7
  import * as Common from '../../core/common/common.js';
9
8
  import * as i18n from '../../core/i18n/i18n.js';
10
9
  import type * as Platform from '../../core/platform/platform.js';
11
10
  import * as Workspace from '../../models/workspace/workspace.js';
11
+ import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
12
12
  import * as UI from '../../ui/legacy/legacy.js';
13
13
  import {Directives, html, nothing, render, type TemplateResult} from '../../ui/lit/lit.js';
14
14
 
15
15
  import coverageListViewStyles from './coverageListView.css.js';
16
16
  import {CoverageType} from './CoverageModel.js';
17
17
 
18
+ const {ifExpanded} = DataGrid;
19
+
18
20
  export interface CoverageListItem {
19
21
  url: Platform.DevToolsPath.UrlString;
20
22
  type: CoverageType;
@@ -143,7 +145,10 @@ interface ViewInput {
143
145
  selectedUrl: Platform.DevToolsPath.UrlString|null;
144
146
  maxSize: number;
145
147
  onOpen: (url: Platform.DevToolsPath.UrlString) => void;
148
+ onExpand: () => void;
149
+ onCollapse: () => void;
146
150
  highlightRegExp: RegExp|null;
151
+ expandedUrls: Set<Platform.DevToolsPath.UrlString>;
147
152
  }
148
153
 
149
154
  type View = (input: ViewInput, output: object, target: HTMLElement) => void;
@@ -181,6 +186,7 @@ export class CoverageListView extends UI.Widget.VBox {
181
186
  #coverageInfo: CoverageListItem[] = [];
182
187
  #selectedUrl: Platform.DevToolsPath.UrlString|null = null;
183
188
  #maxSize = 0;
189
+ #expandedUrls = new Set<Platform.DevToolsPath.UrlString>();
184
190
  #view: View;
185
191
 
186
192
  constructor(element?: HTMLElement, view = DEFAULT_VIEW) {
@@ -213,9 +219,16 @@ export class CoverageListView extends UI.Widget.VBox {
213
219
  items: this.#coverageInfo,
214
220
  selectedUrl: this.#selectedUrl,
215
221
  maxSize: this.#maxSize,
222
+ expandedUrls: this.#expandedUrls,
216
223
  onOpen: (url: Platform.DevToolsPath.UrlString) => {
217
224
  this.selectedUrl = url;
218
225
  },
226
+ onExpand: () => {
227
+ this.requestUpdate();
228
+ },
229
+ onCollapse: () => {
230
+ this.requestUpdate();
231
+ },
219
232
  highlightRegExp: this.#highlightRegExp,
220
233
  };
221
234
  this.#view(input, {}, this.contentElement);
@@ -281,7 +294,9 @@ function renderItem(info: CoverageListItem, input: ViewInput): TemplateResult {
281
294
  return html`
282
295
  <style>${coverageListViewStyles}</style>
283
296
  <tr data-url=${info.url} selected=${info.url === input.selectedUrl}
284
- @open=${() => input.onOpen(info.url)}>
297
+ @open=${() => input.onOpen(info.url)}
298
+ @expand=${() => input.onExpand()}
299
+ @collapse=${() => input.onCollapse()}>
285
300
  <td data-value=${info.url} title=${info.url} aria-label=${info.url}>
286
301
  <devtools-highlight ranges=${highlightRange(info.url)} class="url-outer" aria-hidden="true">
287
302
  <div class="url-prefix">${splitURL ? splitURL[1] : info.url}</div>
@@ -325,7 +340,7 @@ function renderItem(info: CoverageListItem, input: ViewInput): TemplateResult {
325
340
  </td>
326
341
  ${info.sources.length > 0 ? html`
327
342
  <td><table>
328
- ${repeat(info.sources, source => source.url, source => renderItem(source, input))}
343
+ ${ifExpanded(() => html`${repeat(info.sources, source => source.url, source => renderItem(source, input))}`)}
329
344
  </table></td>` : nothing}
330
345
  </tr>`;
331
346
  // clang-format on
@@ -13,6 +13,17 @@ import {PanelUtils} from '../utils/utils.js';
13
13
 
14
14
  import type {EditorHandles} from './ElementsTreeElement.js';
15
15
 
16
+ export class AdoptedStyleSheetSetTreeElement extends UI.TreeOutline.TreeElement {
17
+ constructor(readonly adoptedStyleSheets: SDK.DOMModel.AdoptedStyleSheet[]) {
18
+ super('');
19
+ const documentElement = this.listItemElement.createChild('span');
20
+ UI.UIUtils.createTextChild(documentElement, '#adopted-style-sheets');
21
+ for (const adoptedStyleSheet of adoptedStyleSheets) {
22
+ this.appendChild(new AdoptedStyleSheetTreeElement(adoptedStyleSheet));
23
+ }
24
+ }
25
+ }
26
+
16
27
  export class AdoptedStyleSheetTreeElement extends UI.TreeOutline.TreeElement {
17
28
  private eventListener: Common.EventTarget.EventDescriptor|null = null;
18
29
 
@@ -38,6 +38,7 @@ import * as Common from '../../core/common/common.js';
38
38
  import * as i18n from '../../core/i18n/i18n.js';
39
39
  import * as Platform from '../../core/platform/platform.js';
40
40
  import * as SDK from '../../core/sdk/sdk.js';
41
+ import * as ComputedStyleModule from '../../models/computed_style/computed_style.js';
41
42
  import * as TreeOutline from '../../ui/components/tree_outline/tree_outline.js';
42
43
  import * as InlineEditor from '../../ui/legacy/components/inline_editor/inline_editor.js';
43
44
  import * as Components from '../../ui/legacy/components/utils/utils.js';
@@ -45,7 +46,6 @@ import * as UI from '../../ui/legacy/legacy.js';
45
46
  import * as Lit from '../../ui/lit/lit.js';
46
47
 
47
48
  import * as ElementsComponents from './components/components.js';
48
- import {type ComputedStyle, type ComputedStyleModel, Events} from './ComputedStyleModel.js';
49
49
  import computedStyleSidebarPaneStyles from './computedStyleSidebarPane.css.js';
50
50
  import {ImagePreviewPopover} from './ImagePreviewPopover.js';
51
51
  import {PlatformFontsWidget} from './PlatformFontsWidget.js';
@@ -53,7 +53,7 @@ import {categorizePropertyName, type Category, DefaultCategoryOrder} from './Pro
53
53
  import {Renderer, rendererBase, type RenderingContext, StringRenderer, URLRenderer} from './PropertyRenderer.js';
54
54
  import {StylePropertiesSection} from './StylePropertiesSection.js';
55
55
 
56
- const {html} = Lit;
56
+ const {html, render} = Lit;
57
57
 
58
58
  const UIStrings = {
59
59
  /**
@@ -197,7 +197,7 @@ const createTraceElement =
197
197
  return trace;
198
198
  };
199
199
 
200
- /** clang-format off **/
200
+ // clang-format off
201
201
  class ColorRenderer extends rendererBase(SDK.CSSPropertyParserMatchers.ColorMatch) {
202
202
  // clang-format on
203
203
  override render(match: SDK.CSSPropertyParserMatchers.ColorMatch, context: RenderingContext): Node[] {
@@ -261,28 +261,56 @@ type ComputedStyleData = {
261
261
  name: string,
262
262
  };
263
263
 
264
+ interface ComputedStyleWidgetInput {
265
+ computedStylesTree: TreeOutline.TreeOutline.TreeOutline<ComputedStyleData>;
266
+ toolbar: HTMLElement;
267
+ hasMatches: boolean;
268
+ computedStyleModel: ComputedStyleModule.ComputedStyleModel.ComputedStyleModel;
269
+ }
270
+
271
+ type View = (input: ComputedStyleWidgetInput, output: null, target: HTMLElement) => void;
272
+
273
+ export const DEFAULT_VIEW: View = (input, _output, target) => {
274
+ // clang-format off
275
+ render(html`
276
+ <div class="styles-sidebar-pane-toolbar">${input.toolbar}</div>
277
+ <div class="computed-style-tree-outline-container">
278
+ ${input.computedStylesTree}
279
+ </div>
280
+ ${!input.hasMatches ? html`<div class="gray-info-message">${i18nString(UIStrings.noMatchingProperty)}</div>` : ''}
281
+ <div class="platform-fonts-widget-container">
282
+ <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(PlatformFontsWidget, { sharedModel: input.computedStyleModel})}></devtools-widget>
283
+ </div>
284
+ `, target);
285
+ // clang-format on
286
+ };
287
+
264
288
  export class ComputedStyleWidget extends UI.Widget.VBox {
265
- private computedStyleModel: ComputedStyleModel;
289
+ private computedStyleModel: ComputedStyleModule.ComputedStyleModel.ComputedStyleModel;
266
290
  private readonly showInheritedComputedStylePropertiesSetting: Common.Settings.Setting<boolean>;
267
291
  private readonly groupComputedStylesSetting: Common.Settings.Setting<boolean>;
268
292
  input: UI.Toolbar.ToolbarInput;
269
293
  private filterRegex: RegExp|null;
270
- private readonly noMatchesElement: HTMLElement;
271
294
  private readonly linkifier: Components.Linkifier.Linkifier;
272
295
  private readonly imagePreviewPopover: ImagePreviewPopover;
273
296
 
274
297
  #computedStylesTree = new TreeOutline.TreeOutline.TreeOutline<ComputedStyleData>();
275
298
  #treeData?: TreeOutline.TreeOutline.TreeOutlineData<ComputedStyleData>;
299
+ readonly #view: View;
300
+ private readonly toolbarElement: HTMLElement;
276
301
 
277
- constructor(computedStyleModel: ComputedStyleModel) {
302
+ constructor(computedStyleModel: ComputedStyleModule.ComputedStyleModel.ComputedStyleModel) {
278
303
  super({useShadowDom: true});
304
+ this.#view = DEFAULT_VIEW;
279
305
  this.registerRequiredCSS(computedStyleSidebarPaneStyles);
280
306
 
281
307
  this.contentElement.classList.add('styles-sidebar-computed-style-widget');
282
308
 
283
309
  this.computedStyleModel = computedStyleModel;
284
- this.computedStyleModel.addEventListener(Events.CSS_MODEL_CHANGED, this.requestUpdate, this);
285
- this.computedStyleModel.addEventListener(Events.COMPUTED_STYLE_CHANGED, this.requestUpdate, this);
310
+ this.computedStyleModel.addEventListener(
311
+ ComputedStyleModule.ComputedStyleModel.Events.CSS_MODEL_CHANGED, this.requestUpdate, this);
312
+ this.computedStyleModel.addEventListener(
313
+ ComputedStyleModule.ComputedStyleModel.Events.COMPUTED_STYLE_CHANGED, this.requestUpdate, this);
286
314
 
287
315
  this.showInheritedComputedStylePropertiesSetting =
288
316
  Common.Settings.Settings.instance().createSetting('show-inherited-computed-style-properties', false);
@@ -293,8 +321,12 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
293
321
  this.requestUpdate();
294
322
  });
295
323
 
296
- const hbox = this.contentElement.createChild('div', 'hbox styles-sidebar-pane-toolbar');
297
- const toolbar = hbox.createChild('devtools-toolbar', 'styles-pane-toolbar');
324
+ this.toolbarElement = document.createElement('div');
325
+ this.toolbarElement.classList.add('hbox', 'styles-sidebar-pane-toolbar');
326
+ const toolbar = document.createElement('devtools-toolbar');
327
+ toolbar.classList.add('styles-pane-toolbar');
328
+ this.toolbarElement.appendChild(toolbar);
329
+
298
330
  const filterInput = new UI.Toolbar.ToolbarFilter(undefined, 1, 1, undefined, undefined, false);
299
331
  filterInput.addEventListener(UI.Toolbar.ToolbarInput.Event.TEXT_CHANGED, this.onFilterChanged, this);
300
332
  toolbar.appendToolbarItem(filterInput);
@@ -306,11 +338,6 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
306
338
  toolbar.appendToolbarItem(
307
339
  new UI.Toolbar.ToolbarSettingCheckbox(this.groupComputedStylesSetting, undefined, i18nString(UIStrings.group)));
308
340
 
309
- this.noMatchesElement = this.contentElement.createChild('div', 'gray-info-message');
310
- this.noMatchesElement.textContent = i18nString(UIStrings.noMatchingProperty);
311
-
312
- this.contentElement.appendChild(this.#computedStylesTree);
313
-
314
341
  this.linkifier = new Components.Linkifier.Linkifier(maxLinkLength);
315
342
 
316
343
  this.imagePreviewPopover = new ImagePreviewPopover(this.contentElement, event => {
@@ -321,8 +348,7 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
321
348
  return null;
322
349
  }, () => this.computedStyleModel.node);
323
350
 
324
- const fontsWidget = new PlatformFontsWidget(this.computedStyleModel);
325
- fontsWidget.show(this.contentElement);
351
+ this.#updateView({hasMatches: true});
326
352
  }
327
353
 
328
354
  override onResize(): void {
@@ -340,11 +366,24 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
340
366
  UI.Context.Context.instance().setFlavor(ComputedStyleWidget, null);
341
367
  }
342
368
 
369
+ /**
370
+ * @param input.hasMatches Whether any properties matched the current filter (or if any properties exist at all).
371
+ */
372
+ #updateView({hasMatches}: {hasMatches: boolean}): void {
373
+ this.#view(
374
+ {
375
+ computedStylesTree: this.#computedStylesTree,
376
+ toolbar: this.toolbarElement,
377
+ hasMatches,
378
+ computedStyleModel: this.computedStyleModel,
379
+ },
380
+ null, this.contentElement);
381
+ }
382
+
343
383
  override async performUpdate(): Promise<void> {
344
- const [nodeStyles, matchedStyles] =
345
- await Promise.all([this.computedStyleModel.fetchComputedStyle(), this.fetchMatchedCascade()]);
384
+ const {computedStyle: nodeStyles, matchedStyles} = await this.computedStyleModel.fetchAllComputedStyleInfo();
346
385
  if (!nodeStyles || !matchedStyles) {
347
- this.noMatchesElement.classList.remove('hidden');
386
+ this.#updateView({hasMatches: false});
348
387
  return;
349
388
  }
350
389
  const shouldGroupComputedStyles = this.groupComputedStylesSetting.get();
@@ -355,27 +394,9 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
355
394
  }
356
395
  }
357
396
 
358
- private async fetchMatchedCascade(): Promise<SDK.CSSMatchedStyles.CSSMatchedStyles|null> {
359
- const node = this.computedStyleModel.node;
360
- if (!node || !this.computedStyleModel.cssModel()) {
361
- return null;
362
- }
363
-
364
- const cssModel = this.computedStyleModel.cssModel();
365
- if (!cssModel) {
366
- return null;
367
- }
368
-
369
- return await cssModel.cachedMatchedCascadeForNode(node).then(validateStyles.bind(this));
370
-
371
- function validateStyles(this: ComputedStyleWidget, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles|null):
372
- SDK.CSSMatchedStyles.CSSMatchedStyles|null {
373
- return matchedStyles && matchedStyles.node() === this.computedStyleModel.node ? matchedStyles : null;
374
- }
375
- }
376
-
377
- private async rebuildAlphabeticalList(nodeStyle: ComputedStyle, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles):
378
- Promise<void> {
397
+ private async rebuildAlphabeticalList(
398
+ nodeStyle: ComputedStyleModule.ComputedStyleModel.ComputedStyle,
399
+ matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles): Promise<void> {
379
400
  this.imagePreviewPopover.hide();
380
401
  this.linkifier.reset();
381
402
  const cssModel = this.computedStyleModel.cssModel();
@@ -417,12 +438,13 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
417
438
  }
418
439
 
419
440
  private async rebuildGroupedList(
420
- nodeStyle: ComputedStyle|null, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles|null): Promise<void> {
441
+ nodeStyle: ComputedStyleModule.ComputedStyleModel.ComputedStyle|null,
442
+ matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles|null): Promise<void> {
421
443
  this.imagePreviewPopover.hide();
422
444
  this.linkifier.reset();
423
445
  const cssModel = this.computedStyleModel.cssModel();
424
446
  if (!nodeStyle || !matchedStyles || !cssModel) {
425
- this.noMatchesElement.classList.remove('hidden');
447
+ this.#updateView({hasMatches: false});
426
448
  return;
427
449
  }
428
450
 
@@ -644,7 +666,7 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
644
666
  defaultRenderer: this.#treeData.defaultRenderer,
645
667
  compact: this.#treeData.compact,
646
668
  };
647
- this.noMatchesElement.classList.toggle('hidden', Boolean(tree.length));
669
+ this.#updateView({hasMatches: Boolean(tree.length)});
648
670
  }
649
671
 
650
672
  private async filterGroupLists(): Promise<void> {
@@ -671,7 +693,7 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
671
693
  compact: this.#treeData.compact,
672
694
  };
673
695
  await this.#computedStylesTree.expandRecursively(0);
674
- this.noMatchesElement.classList.toggle('hidden', Boolean(tree.length));
696
+ this.#updateView({hasMatches: Boolean(tree.length)});
675
697
  }
676
698
  }
677
699
 
@@ -41,6 +41,7 @@ import * as Root from '../../core/root/root.js';
41
41
  import * as SDK from '../../core/sdk/sdk.js';
42
42
  import type * as Protocol from '../../generated/protocol.js';
43
43
  import * as Annotations from '../../models/annotations/annotations.js';
44
+ import * as ComputedStyle from '../../models/computed_style/computed_style.js';
44
45
  import * as PanelCommon from '../../panels/common/common.js';
45
46
  import type * as Adorners from '../../ui/components/adorners/adorners.js';
46
47
  import * as Buttons from '../../ui/components/buttons/buttons.js';
@@ -52,7 +53,6 @@ import type {AXTreeNodeData} from './AccessibilityTreeUtils.js';
52
53
  import {AccessibilityTreeView} from './AccessibilityTreeView.js';
53
54
  import {ColorSwatchPopoverIcon} from './ColorSwatchPopoverIcon.js';
54
55
  import * as ElementsComponents from './components/components.js';
55
- import {ComputedStyleModel} from './ComputedStyleModel.js';
56
56
  import {ComputedStyleWidget} from './ComputedStyleWidget.js';
57
57
  import elementsPanelStyles from './elementsPanel.css.js';
58
58
  import {DOMTreeWidget, type ElementsTreeOutline} from './ElementsTreeOutline.js';
@@ -242,7 +242,7 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
242
242
 
243
243
  private cssStyleTrackerByCSSModel: Map<SDK.CSSModel.CSSModel, SDK.CSSModel.CSSPropertyTracker>;
244
244
  #domTreeWidget: DOMTreeWidget;
245
- #computedStyleModel: ComputedStyleModel;
245
+ #computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel;
246
246
 
247
247
  getTreeOutlineForTesting(): ElementsTreeOutline|undefined {
248
248
  return this.#domTreeWidget.getTreeOutlineForTesting();
@@ -302,7 +302,8 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
302
302
 
303
303
  crumbsContainer.appendChild(this.breadcrumbs);
304
304
 
305
- this.#computedStyleModel = new ComputedStyleModel(UI.Context.Context.instance().flavor(SDK.DOMModel.DOMNode));
305
+ this.#computedStyleModel = new ComputedStyle.ComputedStyleModel.ComputedStyleModel(
306
+ UI.Context.Context.instance().flavor(SDK.DOMModel.DOMNode));
306
307
  UI.Context.Context.instance().addFlavorChangeListener(SDK.DOMModel.DOMNode, event => {
307
308
  this.#computedStyleModel.node = event.data;
308
309
  this.evaluateTrackingComputedStyleUpdatesForNode();
@@ -4,20 +4,22 @@
4
4
 
5
5
  import type * as Common from '../../core/common/common.js';
6
6
  import type * as SDK from '../../core/sdk/sdk.js';
7
+ import * as ComputedStyle from '../../models/computed_style/computed_style.js';
7
8
  import * as UI from '../../ui/legacy/legacy.js';
8
9
 
9
- import {type ComputedStyleModel, type CSSModelChangedEvent, Events} from './ComputedStyleModel.js';
10
-
11
10
  export class ElementsSidebarPane extends UI.Widget.VBox {
12
- protected computedStyleModelInternal: ComputedStyleModel;
13
- constructor(computedStyleModel: ComputedStyleModel, options: UI.Widget.WidgetOptions = {}) {
11
+ protected computedStyleModelInternal: ComputedStyle.ComputedStyleModel.ComputedStyleModel;
12
+ constructor(
13
+ computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel, options: UI.Widget.WidgetOptions = {}) {
14
14
  options.useShadowDom = options.useShadowDom ?? true;
15
15
  options.classes = options.classes ?? [];
16
16
  options.classes.push('flex-none');
17
17
  super(options);
18
18
  this.computedStyleModelInternal = computedStyleModel;
19
- this.computedStyleModelInternal.addEventListener(Events.CSS_MODEL_CHANGED, this.onCSSModelChanged, this);
20
- this.computedStyleModelInternal.addEventListener(Events.COMPUTED_STYLE_CHANGED, this.onComputedStyleChanged, this);
19
+ this.computedStyleModelInternal.addEventListener(
20
+ ComputedStyle.ComputedStyleModel.Events.CSS_MODEL_CHANGED, this.onCSSModelChanged, this);
21
+ this.computedStyleModelInternal.addEventListener(
22
+ ComputedStyle.ComputedStyleModel.Events.COMPUTED_STYLE_CHANGED, this.onComputedStyleChanged, this);
21
23
  }
22
24
 
23
25
  node(): SDK.DOMModel.DOMNode|null {
@@ -28,7 +30,7 @@ export class ElementsSidebarPane extends UI.Widget.VBox {
28
30
  return this.computedStyleModelInternal.cssModel();
29
31
  }
30
32
 
31
- computedStyleModel(): ComputedStyleModel {
33
+ computedStyleModel(): ComputedStyle.ComputedStyleModel.ComputedStyleModel {
32
34
  return this.computedStyleModelInternal;
33
35
  }
34
36
 
@@ -36,7 +38,8 @@ export class ElementsSidebarPane extends UI.Widget.VBox {
36
38
  return;
37
39
  }
38
40
 
39
- onCSSModelChanged(_event: Common.EventTarget.EventTargetEvent<CSSModelChangedEvent|null>): void {
41
+ onCSSModelChanged(
42
+ _event: Common.EventTarget.EventTargetEvent<ComputedStyle.ComputedStyleModel.CSSModelChangedEvent|null>): void {
40
43
  }
41
44
 
42
45
  onComputedStyleChanged(): void {
@@ -721,7 +721,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
721
721
  this.listItemElement.setAttribute(
722
722
  'jslog', `${VisualLogging.treeItem().parent('elementsTreeOutline').track({
723
723
  keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Backspace|Delete|Enter|Space|Home|End',
724
- resize: true,
725
724
  drag: true,
726
725
  click: true,
727
726
  })}`);