chrome-devtools-frontend 1.0.1578729 → 1.0.1581449

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 (314) hide show
  1. package/agents/prompts/creating-a-model.md +51 -0
  2. package/docs/cookbook/devtools_on_devtools.md +2 -2
  3. package/docs/feature-specs/elements-gutter-decorators.md +40 -0
  4. package/docs/feature-specs/elements-tree-edit-html.md +14 -0
  5. package/docs/feature-specs/elements-tree-node-title.md +46 -0
  6. package/docs/feature-specs/elements-tree-selection-and-hover.md +31 -0
  7. package/docs/feature-specs/images/elements-gutter-decorators-multiple.png +0 -0
  8. package/docs/get_the_code.md +3 -3
  9. package/front_end/core/host/UserMetrics.ts +3 -7
  10. package/front_end/core/root/Runtime.ts +0 -1
  11. package/front_end/core/sdk/NetworkManager.ts +0 -35
  12. package/front_end/core/sdk/OverlayModel.ts +10 -0
  13. package/front_end/devtools_compatibility.js +4 -0
  14. package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
  15. package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +530 -0
  16. package/front_end/entrypoints/greendev_floaty/floaty.css +258 -0
  17. package/front_end/entrypoints/greendev_floaty/floaty.html +31 -0
  18. package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +422 -0
  19. package/front_end/entrypoints/inspector_main/InspectorMain.ts +0 -38
  20. package/front_end/generated/ARIAProperties.js +0 -6
  21. package/front_end/generated/InspectorBackendCommands.ts +10 -4
  22. package/front_end/generated/SupportedCSSProperties.js +39 -31
  23. package/front_end/generated/protocol-mapping.d.ts +12 -0
  24. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  25. package/front_end/generated/protocol.ts +57 -2
  26. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +32 -2
  27. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +110 -6
  28. package/front_end/models/computed_style/computed_style.ts +9 -0
  29. package/front_end/models/issues_manager/CorsIssue.ts +11 -14
  30. package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
  31. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +33 -4
  32. package/front_end/panels/ai_assistance/components/ChatInput.ts +52 -19
  33. package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -4
  34. package/front_end/panels/ai_assistance/components/ChatView.ts +4 -0
  35. package/front_end/panels/ai_assistance/components/chatInput.css +10 -3
  36. package/front_end/panels/application/DeviceBoundSessionsView.ts +51 -76
  37. package/front_end/panels/changes/changesSidebar.css +5 -0
  38. package/front_end/panels/common/AiCodeGenerationTeaser.ts +2 -2
  39. package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +4 -4
  40. package/front_end/panels/common/ExtensionPanel.ts +4 -0
  41. package/front_end/panels/common/FreDialog.ts +4 -0
  42. package/front_end/panels/coverage/CoverageListView.ts +18 -3
  43. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +89 -0
  44. package/front_end/panels/elements/ComputedStyleWidget.ts +12 -8
  45. package/front_end/panels/elements/ElementsPanel.ts +4 -3
  46. package/front_end/panels/elements/ElementsSidebarPane.ts +11 -8
  47. package/front_end/panels/elements/ElementsTreeElement.ts +92 -121
  48. package/front_end/panels/elements/ElementsTreeOutline.ts +26 -15
  49. package/front_end/panels/elements/MetricsSidebarPane.ts +2 -2
  50. package/front_end/panels/elements/PlatformFontsWidget.ts +7 -5
  51. package/front_end/panels/elements/PropertiesWidget.ts +3 -6
  52. package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
  53. package/front_end/panels/elements/elements.ts +4 -3
  54. package/front_end/panels/elements/elementsTreeOutline.css +16 -5
  55. package/front_end/panels/greendev/GreenDevPanel.css +241 -0
  56. package/front_end/panels/greendev/GreenDevPanel.ts +308 -0
  57. package/front_end/panels/greendev/GreenDevShared.ts +13 -0
  58. package/front_end/panels/greendev/greendev-meta.ts +52 -0
  59. package/front_end/panels/greendev/greendev.ts +9 -0
  60. package/front_end/panels/issues/CorsIssueDetailsView.ts +4 -4
  61. package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
  62. package/front_end/panels/lighthouse/lighthouseStartView.css +6 -0
  63. package/front_end/panels/network/NetworkLogView.ts +2 -5
  64. package/front_end/panels/security/SecurityPanel.ts +0 -4
  65. package/front_end/panels/security/SecurityPanelSidebar.ts +2 -42
  66. package/front_end/panels/security/security-meta.ts +2 -14
  67. package/front_end/panels/security/security.ts +0 -4
  68. package/front_end/panels/settings/EditFileSystemView.ts +8 -8
  69. package/front_end/panels/settings/SettingsScreen.ts +4 -4
  70. package/front_end/panels/sources/SourcesSearchScope.ts +2 -1
  71. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +47 -26
  72. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +121 -39
  73. package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +106 -101
  74. package/front_end/third_party/chromium/README.chromium +1 -1
  75. package/front_end/third_party/puppeteer/README.chromium +2 -2
  76. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +35 -0
  77. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  78. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +19 -0
  79. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  80. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +16 -1
  81. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
  82. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
  83. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +1 -1
  84. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +1 -1
  85. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +21 -0
  86. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  87. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +6 -0
  88. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  89. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts +13 -1
  90. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts.map +1 -1
  91. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js +56 -36
  92. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js.map +1 -1
  93. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +2 -2
  94. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  95. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +32 -8
  96. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  97. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +5 -1
  98. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  99. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +32 -2
  100. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
  101. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -2
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +20 -0
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +2 -1
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +25 -8
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts +2 -0
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js +23 -0
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +10 -6
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts +29 -0
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +46 -6
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +5 -1
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +18 -0
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js +2 -2
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +13 -1
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js +2 -2
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +7 -2
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +43 -7
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts +10 -1
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts.map +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js +34 -4
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js.map +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  153. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +1 -0
  154. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -0
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +4 -0
  159. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +2 -2
  162. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  164. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  165. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  166. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  168. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +129 -3
  169. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +233 -65
  170. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +35 -0
  171. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  172. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +19 -0
  173. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  174. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +16 -1
  175. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +21 -0
  180. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +6 -0
  182. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts +13 -1
  184. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js +56 -36
  186. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js.map +1 -1
  187. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +2 -2
  188. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  189. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +30 -6
  190. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +5 -1
  192. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  193. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +32 -2
  194. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
  195. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -2
  196. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +20 -0
  198. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  199. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +2 -1
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +25 -8
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts +2 -0
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js +23 -0
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
  208. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +10 -6
  210. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  212. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
  214. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts +29 -0
  215. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +46 -6
  217. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +5 -1
  219. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  220. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +19 -1
  221. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  222. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js +3 -3
  223. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +14 -2
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js +3 -3
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +7 -2
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +43 -8
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts +10 -1
  234. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts.map +1 -1
  235. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js +31 -3
  236. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js.map +1 -1
  237. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +1 -1
  238. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts.map +1 -1
  239. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  240. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
  241. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
  243. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +1 -1
  245. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +1 -0
  247. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -0
  250. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +4 -0
  252. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  254. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +2 -2
  255. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
  256. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  257. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  258. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  259. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  260. package/front_end/third_party/puppeteer/package/lib/types.d.ts +129 -3
  261. package/front_end/third_party/puppeteer/package/package.json +4 -4
  262. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +46 -0
  263. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +21 -0
  264. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +1 -1
  265. package/front_end/third_party/puppeteer/package/src/api/Page.ts +23 -0
  266. package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +88 -56
  267. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +33 -8
  268. package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +61 -3
  269. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +23 -2
  270. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +29 -8
  271. package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +30 -0
  272. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +13 -2
  273. package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -0
  274. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +85 -8
  275. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +36 -1
  276. package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +5 -5
  277. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +23 -2
  278. package/front_end/third_party/puppeteer/package/src/cdp/JSHandle.ts +3 -3
  279. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +60 -8
  280. package/front_end/third_party/puppeteer/package/src/cdp/utils.ts +36 -3
  281. package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +1 -1
  282. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  283. package/front_end/third_party/puppeteer/package/src/injected/XPathQuerySelector.ts +1 -1
  284. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +1 -0
  285. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
  286. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +4 -0
  287. package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +8 -6
  288. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  289. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  290. package/front_end/ui/components/text_editor/AutocompleteHistory.ts +2 -1
  291. package/front_end/ui/components/text_editor/TextEditorHistory.ts +1 -1
  292. package/front_end/ui/legacy/InplaceEditor.ts +1 -1
  293. package/front_end/ui/legacy/SearchableView.ts +5 -2
  294. package/front_end/ui/legacy/Widget.ts +15 -0
  295. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +6 -0
  296. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -1
  297. package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +59 -9
  298. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -1
  299. package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
  300. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +28 -15
  301. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +2 -2
  302. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +3 -3
  303. package/front_end/ui/legacy/components/source_frame/JSONView.ts +2 -3
  304. package/front_end/ui/visual_logging/Debugging.ts +1 -1
  305. package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
  306. package/mcp/mcp.ts +1 -0
  307. package/package.json +1 -1
  308. package/front_end/panels/security/CookieControlsTreeElement.ts +0 -21
  309. package/front_end/panels/security/CookieControlsView.ts +0 -447
  310. package/front_end/panels/security/CookieReportTreeElement.ts +0 -21
  311. package/front_end/panels/security/CookieReportView.ts +0 -549
  312. package/front_end/panels/security/cookieControlsView.css +0 -139
  313. package/front_end/panels/security/cookieReportView.css +0 -90
  314. /package/front_end/{panels/elements → models/computed_style}/ComputedStyleModel.ts +0 -0
@@ -34,6 +34,7 @@
34
34
  */
35
35
 
36
36
  import '../../ui/components/adorners/adorners.js';
37
+ import '../../ui/components/buttons/buttons.js';
37
38
 
38
39
  import * as Common from '../../core/common/common.js';
39
40
  import * as Host from '../../core/host/host.js';
@@ -50,7 +51,6 @@ import * as TextUtils from '../../models/text_utils/text_utils.js';
50
51
  import * as Workspace from '../../models/workspace/workspace.js';
51
52
  import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
52
53
  import type * as Adorners from '../../ui/components/adorners/adorners.js';
53
- import * as Buttons from '../../ui/components/buttons/buttons.js';
54
54
  import * as CodeHighlighter from '../../ui/components/code_highlighter/code_highlighter.js';
55
55
  import * as Highlighting from '../../ui/components/highlighting/highlighting.js';
56
56
  import * as TextEditor from '../../ui/components/text_editor/text_editor.js';
@@ -417,11 +417,20 @@ export interface ViewInput {
417
417
  showStartingStyleAdorner: boolean;
418
418
  startingStyleAdornerActive: boolean;
419
419
  onStartingStyleAdornerClick: (e: Event) => void;
420
+
421
+ isHovered: boolean;
422
+ isSelected: boolean;
423
+ showAiButton: boolean;
424
+ aiButtonTitle?: string;
425
+ onAiButtonClick: (e: Event) => void;
426
+
427
+ decorations: Decoration[];
428
+ descendantDecorations: Decoration[];
429
+ decorationsTooltip: string;
430
+ indent: number;
420
431
  }
421
432
 
422
433
  export interface ViewOutput {
423
- gutterContainer?: HTMLElement;
424
- decorationsElement?: HTMLElement;
425
434
  contentElement?: HTMLElement;
426
435
  }
427
436
 
@@ -443,6 +452,11 @@ export function adornerRef(): DirectiveResult<typeof Lit.Directives.RefDirective
443
452
  });
444
453
  }
445
454
 
455
+ export interface Decoration {
456
+ title: string;
457
+ color: string;
458
+ }
459
+
446
460
  function handleAdornerKeydown(cb: (event: Event) => void): (event: KeyboardEvent) => void {
447
461
  return (event: KeyboardEvent) => {
448
462
  if (event.code === 'Enter' || event.code === 'Space') {
@@ -458,13 +472,27 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
458
472
  input.showGridAdorner || input.showGridLanesAdorner || input.showMediaAdorner || input.showPopoverAdorner ||
459
473
  input.showTopLayerAdorner || input.showViewSourceAdorner || input.showScrollAdorner ||
460
474
  input.showScrollSnapAdorner || input.showSlotAdorner || input.showStartingStyleAdorner;
475
+ const gutterContainerClasses = {
476
+ 'has-decorations': input.decorations.length || input.descendantDecorations.length,
477
+ 'gutter-container': true,
478
+ };
461
479
  // clang-format off
462
480
  render(html`
463
481
  <div ${ref(el => { output.contentElement = el as HTMLElement; })}>
464
482
  ${input.nodeInfo ? html`<span class="highlight">${input.nodeInfo}</span>` : nothing}
465
- <div class="gutter-container" @click=${input.onGutterClick} ${ref(el => { output.gutterContainer = el as HTMLElement; })}>
483
+ ${input.isHovered || input.isSelected ? html`
484
+ <div class="selection fill" style=${`margin-left: ${-input.indent}px`}></div>
485
+ ` : nothing}
486
+ <div class=${Lit.Directives.classMap(gutterContainerClasses)}
487
+ style="left: ${-input.indent}px"
488
+ @click=${input.onGutterClick}>
466
489
  <devtools-icon name="dots-horizontal"></devtools-icon>
467
- <div class="hidden" ${ref(el => { output.decorationsElement = el as HTMLElement; })}></div>
490
+ ${input.decorations.length || input.descendantDecorations.length ? html`
491
+ <div class="elements-gutter-decoration-container"
492
+ title=${input.decorationsTooltip}>
493
+ ${input.decorations.map(d => html`<div class="elements-gutter-decoration" style="--decoration-color: ${d.color}"></div>`)}
494
+ ${input.descendantDecorations.map(d => html`<div class="elements-gutter-decoration elements-has-decorated-children" style="--decoration-color: ${d.color}"></div>`)}
495
+ </div>` : nothing}
468
496
  </div>
469
497
  ${hasAdorners ? html`<div class="adorner-container ${!hasAdorners ? 'hidden' : ''}">
470
498
  ${input.showAdAdorner ? html`<devtools-adorner
@@ -630,6 +658,20 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
630
658
  <span>${ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP}</span>
631
659
  </devtools-adorner>` : nothing}
632
660
  </div>`: nothing}
661
+ ${input.isSelected ? html`
662
+ <span class="selected-hint" title=${i18nString(UIStrings.useSInTheConsoleToReferToThis, {PH1: '$0'})} aria-hidden="true"></span>
663
+ ` : nothing}
664
+ ${input.showAiButton ? html`
665
+ <span class="ai-button-container">
666
+ <devtools-floating-button
667
+ icon-name=${AIAssistance.AiUtils.getIconName()}
668
+ title=${input.aiButtonTitle || ''}
669
+ jslogcontext="ask-ai"
670
+ @click=${input.onAiButtonClick}
671
+ @mousedown=${(e: Event) => e.stopPropagation()}>
672
+ </devtools-floating-button>
673
+ </span>
674
+ ` : nothing}
633
675
  </div>
634
676
  `, target);
635
677
  // clang-format on
@@ -640,8 +682,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
640
682
  override treeOutline: ElementsTreeOutline|null;
641
683
 
642
684
  // Handled by the view output for now.
643
- gutterContainer!: HTMLElement;
644
- decorationsElement!: HTMLElement;
645
685
  contentElement!: HTMLElement;
646
686
 
647
687
  private searchQuery: string|null;
@@ -652,9 +692,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
652
692
  private editing: EditorHandles|null;
653
693
  private htmlEditElement?: HTMLElement;
654
694
  expandAllButtonElement: UI.TreeOutline.TreeElement|null;
655
- selectionElement?: HTMLDivElement;
656
- private hintElement?: HTMLElement;
657
- private aiButtonContainer?: HTMLElement;
658
695
  #elementIssues = new Map<string, IssuesManager.Issue.Issue>();
659
696
  #nodeElementToIssue = new Map<Element, IssuesManager.Issue.Issue[]>();
660
697
  #highlights: Range[] = [];
@@ -672,6 +709,10 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
672
709
  #startingStyleAdornerActive = false;
673
710
  #layout: SDK.CSSModel.LayoutProperties|null = null;
674
711
 
712
+ #decorations: Decoration[] = [];
713
+ #descendantDecorations: Decoration[] = [];
714
+ #decorationsTooltip = '';
715
+
675
716
  constructor(node: SDK.DOMModel.DOMNode, isClosingTag?: boolean) {
676
717
  // The title will be updated in onattach.
677
718
  super();
@@ -797,6 +838,10 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
797
838
  showScrollAdorner: ((this.node().nodeName() === 'HTML' && this.node().ownerDocument?.isScrollable()) ||
798
839
  (this.node().nodeName() !== '#document' && this.node().isScrollable())) &&
799
840
  !this.isClosingTag(),
841
+ decorations: this.#decorations,
842
+ descendantDecorations: this.expanded ? [] : this.#descendantDecorations,
843
+ decorationsTooltip: this.#decorationsTooltip,
844
+ indent: this.computeLeftIndent(),
800
845
  showScrollSnapAdorner: Boolean(this.#layout?.hasScroll) && !this.isClosingTag(),
801
846
  scrollSnapAdornerActive: this.#scrollSnapAdornerActive,
802
847
  showSlotAdorner: Boolean(this.nodeInternal.assignedSlot) && !this.isClosingTag(),
@@ -827,6 +872,21 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
827
872
  }
828
873
  this.treeOutline.revealInTopLayer(this.node());
829
874
  },
875
+ isHovered: this.#hovered,
876
+ isSelected: this.selected,
877
+ showAiButton: Boolean(this.#hovered || this.selected) && this.node().nodeType() === Node.ELEMENT_NODE &&
878
+ UI.ActionRegistry.ActionRegistry.instance().hasAction('freestyler.elements-floating-button'),
879
+ aiButtonTitle: UI.ActionRegistry.ActionRegistry.instance().hasAction('freestyler.elements-floating-button') ?
880
+ UI.ActionRegistry.ActionRegistry.instance().getAction('freestyler.elements-floating-button').title() :
881
+ undefined,
882
+ onAiButtonClick: (ev: Event) => {
883
+ ev.stopPropagation();
884
+ this.select(true, false);
885
+ const action = UI.ActionRegistry.ActionRegistry.instance().getAction('freestyler.elements-floating-button');
886
+ if (action) {
887
+ void action.execute();
888
+ }
889
+ },
830
890
  },
831
891
  this, this.listItemElement);
832
892
  }
@@ -962,22 +1022,15 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
962
1022
  return;
963
1023
  }
964
1024
 
965
- if (isHovered && !this.aiButtonContainer) {
966
- this.createAiButton();
967
- } else if (!isHovered && this.aiButtonContainer) {
968
- this.aiButtonContainer.remove();
969
- delete this.aiButtonContainer;
970
- }
971
-
972
1025
  this.#hovered = isHovered;
973
1026
 
974
1027
  if (this.listItemElement) {
975
1028
  if (isHovered) {
976
- this.createSelection();
977
1029
  this.listItemElement.classList.add('hovered');
978
1030
  } else {
979
1031
  this.listItemElement.classList.remove('hovered');
980
1032
  }
1033
+ this.performUpdate();
981
1034
  }
982
1035
  }
983
1036
 
@@ -1043,54 +1096,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
1043
1096
  this.#expandedChildrenLimit = expandedChildrenLimit;
1044
1097
  }
1045
1098
 
1046
- private createSelection(): void {
1047
- const contentElement = this.contentElement;
1048
- if (!contentElement) {
1049
- return;
1050
- }
1051
-
1052
- if (!this.selectionElement) {
1053
- this.selectionElement = document.createElement('div');
1054
- this.selectionElement.className = 'selection fill';
1055
- this.selectionElement.style.setProperty('margin-left', (-this.computeLeftIndent()) + 'px');
1056
- contentElement.prepend(this.selectionElement);
1057
- }
1058
- }
1059
-
1060
- private createHint(): void {
1061
- if (this.contentElement && !this.hintElement) {
1062
- this.hintElement = this.contentElement.createChild('span', 'selected-hint');
1063
- const selectedElementCommand = '$0';
1064
- UI.Tooltip.Tooltip.install(
1065
- this.hintElement, i18nString(UIStrings.useSInTheConsoleToReferToThis, {PH1: selectedElementCommand}));
1066
- UI.ARIAUtils.setHidden(this.hintElement, true);
1067
- }
1068
- }
1069
-
1070
- private createAiButton(): void {
1071
- const isElementNode = this.node().nodeType() === Node.ELEMENT_NODE;
1072
- if (!isElementNode ||
1073
- !UI.ActionRegistry.ActionRegistry.instance().hasAction('freestyler.elements-floating-button')) {
1074
- return;
1075
- }
1076
-
1077
- const action = UI.ActionRegistry.ActionRegistry.instance().getAction('freestyler.elements-floating-button');
1078
- if (this.contentElement && !this.aiButtonContainer) {
1079
- this.aiButtonContainer = this.contentElement.createChild('span', 'ai-button-container');
1080
- const floatingButton =
1081
- Buttons.FloatingButton.create(AIAssistance.AiUtils.getIconName(), action.title(), 'ask-ai');
1082
- floatingButton.addEventListener('click', ev => {
1083
- ev.stopPropagation();
1084
- this.select(true, false);
1085
- void action.execute();
1086
- }, {capture: true});
1087
- floatingButton.addEventListener('mousedown', ev => {
1088
- ev.stopPropagation();
1089
- }, {capture: true});
1090
- this.aiButtonContainer.appendChild(floatingButton);
1091
- }
1092
- }
1093
-
1094
1099
  override onbind(): void {
1095
1100
  this.performUpdate();
1096
1101
  if (this.treeOutline && !this.isClosingTag()) {
@@ -1156,6 +1161,14 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
1156
1161
  onPopoverAdornerClick: () => {},
1157
1162
  onScrollSnapAdornerClick: () => {},
1158
1163
  onTopLayerAdornerClick: () => {},
1164
+ isHovered: false,
1165
+ isSelected: false,
1166
+ showAiButton: false,
1167
+ onAiButtonClick: () => {},
1168
+ decorations: [],
1169
+ descendantDecorations: [],
1170
+ decorationsTooltip: '',
1171
+ indent: 0,
1159
1172
  },
1160
1173
  this, this.listItemElement);
1161
1174
 
@@ -1219,8 +1232,8 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
1219
1232
 
1220
1233
  override onattach(): void {
1221
1234
  if (this.#hovered) {
1222
- this.createSelection();
1223
1235
  this.listItemElement.classList.add('hovered');
1236
+ this.performUpdate();
1224
1237
  }
1225
1238
 
1226
1239
  this.updateTitle();
@@ -1278,8 +1291,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
1278
1291
  this.nodeInternal.highlight();
1279
1292
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.ChangeInspectedNodeInElementsPanel);
1280
1293
  }
1281
- this.createSelection();
1282
- this.createHint();
1294
+ this.performUpdate();
1283
1295
  this.treeOutline.suppressRevealAndSelect = false;
1284
1296
  return true;
1285
1297
  }
@@ -2252,10 +2264,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2252
2264
  // fixme: make it clear that `this.title = x` is a setter with significant side effects
2253
2265
  this.title = this.contentElement;
2254
2266
  this.updateDecorations();
2255
- if (this.selected) {
2256
- this.createSelection();
2257
- this.createHint();
2258
- }
2259
2267
 
2260
2268
  // If there is an issue with this node, make sure to update it.
2261
2269
  for (const issue of this.#elementIssues.values()) {
@@ -2278,10 +2286,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2278
2286
  }
2279
2287
 
2280
2288
  updateDecorations(): void {
2281
- const indent = this.computeLeftIndent();
2282
- this.gutterContainer.style.left = (-indent) + 'px';
2283
- this.listItemElement.style.setProperty('--indent', indent + 'px');
2284
-
2285
2289
  if (this.isClosingTag()) {
2286
2290
  return;
2287
2291
  }
@@ -2339,60 +2343,27 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2339
2343
  return Promise.all(promises).then(updateDecorationsUI.bind(this));
2340
2344
 
2341
2345
  function updateDecorationsUI(this: ElementsTreeElement): void {
2342
- this.decorationsElement.removeChildren();
2343
- this.decorationsElement.classList.add('hidden');
2344
- this.gutterContainer.classList.toggle(
2345
- 'has-decorations', Boolean(decorations.length || descendantDecorations.length));
2346
- UI.ARIAUtils.setLabel(this.decorationsElement, '');
2346
+ this.#decorations = decorations;
2347
+ this.#descendantDecorations = descendantDecorations;
2347
2348
 
2348
2349
  if (!decorations.length && !descendantDecorations.length) {
2350
+ this.#decorationsTooltip = '';
2351
+ this.performUpdate();
2349
2352
  return;
2350
2353
  }
2351
2354
 
2352
- const colors = new Set<string>();
2353
- const titles = document.createElement('div');
2354
-
2355
+ const tooltip: string[] = [];
2355
2356
  for (const decoration of decorations) {
2356
- const titleElement = titles.createChild('div');
2357
- titleElement.textContent = decoration.title;
2358
- colors.add(decoration.color);
2357
+ tooltip.push(decoration.title);
2359
2358
  }
2360
- if (this.expanded && !decorations.length) {
2361
- return;
2362
- }
2363
-
2364
- const descendantColors = new Set<string>();
2365
- if (descendantDecorations.length) {
2366
- let element = titles.createChild('div');
2367
- element.textContent = i18nString(UIStrings.children);
2359
+ if (!this.expanded && descendantDecorations.length) {
2360
+ tooltip.push(i18nString(UIStrings.children));
2368
2361
  for (const decoration of descendantDecorations) {
2369
- element = titles.createChild('div');
2370
- element.style.marginLeft = '15px';
2371
- element.textContent = decoration.title;
2372
- descendantColors.add(decoration.color);
2373
- }
2374
- }
2375
-
2376
- let offset = 0;
2377
- processColors.call(this, colors, 'elements-gutter-decoration');
2378
- if (!this.expanded) {
2379
- processColors.call(this, descendantColors, 'elements-gutter-decoration elements-has-decorated-children');
2380
- }
2381
- UI.Tooltip.Tooltip.install(this.decorationsElement, titles.textContent);
2382
- UI.ARIAUtils.setLabel(this.decorationsElement, titles.textContent || '');
2383
-
2384
- function processColors(this: ElementsTreeElement, colors: Set<string>, className: string): void {
2385
- for (const color of colors) {
2386
- const child = this.decorationsElement.createChild('div', className);
2387
- this.decorationsElement.classList.remove('hidden');
2388
- child.style.backgroundColor = color;
2389
- child.style.borderColor = color;
2390
- if (offset) {
2391
- child.style.marginLeft = offset + 'px';
2392
- }
2393
- offset += 3;
2362
+ tooltip.push(decoration.title);
2394
2363
  }
2395
2364
  }
2365
+ this.#decorationsTooltip = tooltip.join('\n');
2366
+ this.performUpdate();
2396
2367
  }
2397
2368
  }
2398
2369
 
@@ -47,7 +47,7 @@ import * as UI from '../../ui/legacy/legacy.js';
47
47
  import {html, nothing, render} from '../../ui/lit/lit.js';
48
48
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
49
49
 
50
- import {AdoptedStyleSheetTreeElement} from './AdoptedStyleSheetTreeElement.js';
50
+ import {AdoptedStyleSheetSetTreeElement, AdoptedStyleSheetTreeElement} from './AdoptedStyleSheetTreeElement.js';
51
51
  import {getElementIssueDetails} from './ElementIssueUtils.js';
52
52
  import {ElementsPanel} from './ElementsPanel.js';
53
53
  import {ElementsTreeElement, InitialChildrenLimit, isOpeningTag} from './ElementsTreeElement.js';
@@ -83,6 +83,7 @@ const elementsTreeOutlineByDOMModel = new WeakMap<SDK.DOMModel.DOMModel, Element
83
83
  const populatedTreeElements = new WeakSet<ElementsTreeElement>();
84
84
 
85
85
  export type View = typeof DEFAULT_VIEW;
86
+ export {elementsTreeOutlineStyles};
86
87
 
87
88
  interface ViewInput {
88
89
  omitRootDOMNode: boolean;
@@ -916,15 +917,21 @@ export class ElementsTreeOutline extends
916
917
  }
917
918
 
918
919
  highlightAdoptedStyleSheet(adoptedStyleSheet: SDK.DOMModel.AdoptedStyleSheet): void {
919
- const parentNode = !this.includeRootDOMNode && adoptedStyleSheet.parent === this.rootDOMNode && this.rootDOMNode ?
920
+ const parentDOMNode =
921
+ !this.includeRootDOMNode && adoptedStyleSheet.parent === this.rootDOMNode && this.rootDOMNode ?
920
922
  this.rootElement() :
921
923
  this.createTreeElementFor(adoptedStyleSheet.parent);
922
- if (!parentNode) {
924
+ if (!parentDOMNode) {
925
+ return;
926
+ }
927
+ const parentNode = parentDOMNode.firstChild();
928
+ if (!(parentNode && parentNode instanceof AdoptedStyleSheetSetTreeElement)) {
923
929
  return;
924
930
  }
925
931
 
926
932
  for (const child of parentNode.children()) {
927
933
  if (child instanceof AdoptedStyleSheetTreeElement && child.adoptedStyleSheet === adoptedStyleSheet) {
934
+ parentNode.expand();
928
935
  child.highlight();
929
936
  return;
930
937
  }
@@ -979,8 +986,8 @@ export class ElementsTreeOutline extends
979
986
  this.dispatchEventToListeners(ElementsTreeOutline.Events.ElementsTreeUpdated, nodes);
980
987
  }
981
988
 
982
- findTreeElement(node: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet): ElementsTreeElement|null {
983
- if (node instanceof SDK.DOMModel.AdoptedStyleSheet) {
989
+ findTreeElement(node: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[]): ElementsTreeElement|null {
990
+ if (node instanceof Array) {
984
991
  return null;
985
992
  }
986
993
  let treeElement = this.lookUpTreeElement(node);
@@ -1767,10 +1774,10 @@ export class ElementsTreeOutline extends
1767
1774
  }
1768
1775
  }
1769
1776
 
1770
- private createElementTreeElement(node: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet, isClosingTag?: boolean):
1777
+ private createElementTreeElement(node: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[], isClosingTag?: boolean):
1771
1778
  UI.TreeOutline.TreeElement {
1772
- if (node instanceof SDK.DOMModel.AdoptedStyleSheet) {
1773
- return new AdoptedStyleSheetTreeElement(node);
1779
+ if (node instanceof Array) {
1780
+ return new AdoptedStyleSheetSetTreeElement(node);
1774
1781
  }
1775
1782
  const treeElement = new ElementsTreeElement(node, isClosingTag);
1776
1783
  treeElement.setExpandable(!isClosingTag && this.hasVisibleChildren(node));
@@ -1799,8 +1806,12 @@ export class ElementsTreeOutline extends
1799
1806
  return treeElement.childAt(index) as ElementsTreeElement;
1800
1807
  }
1801
1808
 
1802
- private visibleChildren(node: SDK.DOMModel.DOMNode): Array<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet> {
1803
- let visibleChildren = [...node.adoptedStyleSheetsForNode, ...ElementsTreeElement.visibleShadowRoots(node)];
1809
+ private visibleChildren(node: SDK.DOMModel.DOMNode): Array<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[]> {
1810
+ const visibleChildren: Array<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[]> = [];
1811
+ if (node.adoptedStyleSheetsForNode.length) {
1812
+ visibleChildren.push(node.adoptedStyleSheetsForNode);
1813
+ }
1814
+ visibleChildren.push(...ElementsTreeElement.visibleShadowRoots(node));
1804
1815
 
1805
1816
  const contentDocument = node.contentDocument();
1806
1817
  if (contentDocument) {
@@ -1837,7 +1848,7 @@ export class ElementsTreeOutline extends
1837
1848
  if (!this.showHTMLCommentsSetting.get()) {
1838
1849
  children = children.filter(n => n.nodeType() !== Node.COMMENT_NODE);
1839
1850
  }
1840
- visibleChildren = visibleChildren.concat(children);
1851
+ visibleChildren.push(...children);
1841
1852
  }
1842
1853
 
1843
1854
  const afterPseudoElement = node.afterPseudoElement();
@@ -1926,7 +1937,7 @@ export class ElementsTreeOutline extends
1926
1937
  }
1927
1938
 
1928
1939
  insertChildElement(
1929
- treeElement: ElementsTreeElement|TopLayerContainer, child: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet,
1940
+ treeElement: ElementsTreeElement|TopLayerContainer, child: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[],
1930
1941
  index: number, isClosingTag?: boolean): UI.TreeOutline.TreeElement {
1931
1942
  const newElement = this.createElementTreeElement(child, isClosingTag);
1932
1943
  treeElement.insertChild(newElement, index);
@@ -1956,12 +1967,12 @@ export class ElementsTreeOutline extends
1956
1967
 
1957
1968
  const node = treeElement.node();
1958
1969
  const visibleChildren = this.visibleChildren(node);
1959
- const visibleChildrenSet = new Set<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet>(visibleChildren);
1970
+ const visibleChildrenSet = new Set<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[]>(visibleChildren);
1960
1971
 
1961
1972
  // Remove any tree elements that no longer have this node as their parent and save
1962
1973
  // all existing elements that could be reused. This also removes closing tag element.
1963
- const existingTreeElements =
1964
- new Map<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet, UI.TreeOutline.TreeElement&ElementsTreeElement>();
1974
+ const existingTreeElements = new Map<
1975
+ SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet[], UI.TreeOutline.TreeElement&ElementsTreeElement>();
1965
1976
  for (let i = treeElement.childCount() - 1; i >= 0; --i) {
1966
1977
  const existingTreeElement = treeElement.childAt(i);
1967
1978
  if (!(existingTreeElement instanceof ElementsTreeElement)) {
@@ -33,11 +33,11 @@
33
33
  import * as Common from '../../core/common/common.js';
34
34
  import * as Platform from '../../core/platform/platform.js';
35
35
  import * as SDK from '../../core/sdk/sdk.js';
36
+ import type * as ComputedStyle from '../../models/computed_style/computed_style.js';
36
37
  import * as UI from '../../ui/legacy/legacy.js';
37
38
  import {Directives, html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
38
39
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
39
40
 
40
- import type {ComputedStyleModel} from './ComputedStyleModel.js';
41
41
  import {ElementsSidebarPane} from './ElementsSidebarPane.js';
42
42
  import metricsSidebarPaneStyles from './metricsSidebarPane.css.js';
43
43
 
@@ -190,7 +190,7 @@ export class MetricsSidebarPane extends ElementsSidebarPane {
190
190
  private isEditingMetrics?: boolean;
191
191
  private view: View;
192
192
 
193
- constructor(computedStyleModel: ComputedStyleModel, view = DEFAULT_VIEW) {
193
+ constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel, view = DEFAULT_VIEW) {
194
194
  super(computedStyleModel, {jslog: `${VisualLogging.pane('styles-metrics')}`});
195
195
  this.registerRequiredCSS(metricsSidebarPaneStyles);
196
196
 
@@ -4,10 +4,10 @@
4
4
 
5
5
  import * as i18n from '../../core/i18n/i18n.js';
6
6
  import type * as Protocol from '../../generated/protocol.js';
7
+ import * as ComputedStyle from '../../models/computed_style/computed_style.js';
7
8
  import * as UI from '../../ui/legacy/legacy.js';
8
9
  import {html, render} from '../../ui/lit/lit.js';
9
10
 
10
- import {type ComputedStyleModel, Events as ComputedStyleModelEvents} from './ComputedStyleModel.js';
11
11
  import platformFontsWidgetStyles from './platformFontsWidget.css.js';
12
12
 
13
13
  const UIStrings = {
@@ -78,17 +78,19 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
78
78
  };
79
79
 
80
80
  export class PlatformFontsWidget extends UI.Widget.VBox {
81
- private readonly sharedModel: ComputedStyleModel;
81
+ private readonly sharedModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel;
82
82
  readonly #view: View;
83
83
 
84
- constructor(sharedModel: ComputedStyleModel, view: View = DEFAULT_VIEW) {
84
+ constructor(sharedModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel, view: View = DEFAULT_VIEW) {
85
85
  super({useShadowDom: true});
86
86
  this.#view = view;
87
87
  this.registerRequiredCSS(platformFontsWidgetStyles);
88
88
 
89
89
  this.sharedModel = sharedModel;
90
- this.sharedModel.addEventListener(ComputedStyleModelEvents.CSS_MODEL_CHANGED, this.requestUpdate, this);
91
- this.sharedModel.addEventListener(ComputedStyleModelEvents.COMPUTED_STYLE_CHANGED, this.requestUpdate, this);
90
+ this.sharedModel.addEventListener(
91
+ ComputedStyle.ComputedStyleModel.Events.CSS_MODEL_CHANGED, this.requestUpdate, this);
92
+ this.sharedModel.addEventListener(
93
+ ComputedStyle.ComputedStyleModel.Events.COMPUTED_STYLE_CHANGED, this.requestUpdate, this);
92
94
  }
93
95
 
94
96
  override async performUpdate(): Promise<void> {
@@ -189,14 +189,11 @@ export class PropertiesWidget extends UI.Widget.VBox {
189
189
  }
190
190
 
191
191
  const treeElement = this.treeOutline.rootElement();
192
- let {properties} = await SDK.RemoteObject.RemoteObject.loadFromObjectPerProto(object, true /* generatePreview */);
193
192
  treeElement.removeChildren();
194
- if (properties === null) {
195
- properties = [];
196
- }
193
+ const root = new ObjectUI.ObjectPropertiesSection.ObjectTree(
194
+ object, ObjectUI.ObjectPropertiesSection.ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED);
197
195
  ObjectUI.ObjectPropertiesSection.ObjectPropertyTreeElement.populateWithProperties(
198
- treeElement, {properties: properties.map(p => new ObjectUI.ObjectPropertiesSection.ObjectTreeNode(p))},
199
- true /* skipProto */, true /* skipGettersAndSetters */);
196
+ treeElement, await root.populateChildrenIfNeeded(), true /* skipProto */, true /* skipGettersAndSetters */);
200
197
  this.internalFilterProperties();
201
198
  }
202
199
  this.#view(
@@ -43,6 +43,7 @@ import * as Root from '../../core/root/root.js';
43
43
  import * as SDK from '../../core/sdk/sdk.js';
44
44
  import * as Protocol from '../../generated/protocol.js';
45
45
  import * as Bindings from '../../models/bindings/bindings.js';
46
+ import type * as ComputedStyle from '../../models/computed_style/computed_style.js';
46
47
  import * as TextUtils from '../../models/text_utils/text_utils.js';
47
48
  import {createIcon, Icon} from '../../ui/kit/kit.js';
48
49
  import * as InlineEditor from '../../ui/legacy/components/inline_editor/inline_editor.js';
@@ -52,7 +53,6 @@ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
52
53
  import * as PanelsCommon from '../common/common.js';
53
54
 
54
55
  import * as ElementsComponents from './components/components.js';
55
- import type {ComputedStyleModel, CSSModelChangedEvent} from './ComputedStyleModel.js';
56
56
  import {ElementsPanel} from './ElementsPanel.js';
57
57
  import {ElementsSidebarPane} from './ElementsSidebarPane.js';
58
58
  import {ImagePreviewPopover} from './ImagePreviewPopover.js';
@@ -204,7 +204,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
204
204
  #updateAbortController?: AbortController;
205
205
  #updateComputedStylesAbortController?: AbortController;
206
206
 
207
- constructor(computedStyleModel: ComputedStyleModel) {
207
+ constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel) {
208
208
  super(computedStyleModel, {delegatesFocus: true});
209
209
  this.setMinimumSize(96, 26);
210
210
  this.registerRequiredCSS(stylesSidebarPaneStyles);
@@ -729,7 +729,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
729
729
  }
730
730
  }
731
731
 
732
- override onCSSModelChanged(event: Common.EventTarget.EventTargetEvent<CSSModelChangedEvent>): void {
732
+ override onCSSModelChanged(
733
+ event: Common.EventTarget.EventTargetEvent<ComputedStyle.ComputedStyleModel.CSSModelChangedEvent>): void {
733
734
  const edit = event?.data && 'edit' in event.data ? event.data.edit : null;
734
735
  if (edit) {
735
736
  for (const section of this.allSections()) {
@@ -4,10 +4,11 @@
4
4
 
5
5
  import './InspectElementModeController.js';
6
6
  import './ColorSwatchPopoverIcon.js';
7
- import './ComputedStyleModel.js';
7
+
8
8
  import './DOMPath.js';
9
9
  import './ElementsSidebarPane.js';
10
10
  import './ElementsTreeElement.js';
11
+ import './AdoptedStyleSheetTreeElement.js';
11
12
  import './TopLayerContainer.js';
12
13
  import './ElementsTreeOutline.js';
13
14
  import './EventListenersWidget.js';
@@ -30,9 +31,9 @@ import './AccessibilityTreeView.js';
30
31
 
31
32
  import * as AccessibilityTreeUtils from './AccessibilityTreeUtils.js';
32
33
  import * as AccessibilityTreeView from './AccessibilityTreeView.js';
34
+ import * as AdoptedStyleSheetTreeElement from './AdoptedStyleSheetTreeElement.js';
33
35
  import * as ClassesPaneWidget from './ClassesPaneWidget.js';
34
36
  import * as ColorSwatchPopoverIcon from './ColorSwatchPopoverIcon.js';
35
- import * as ComputedStyleModel from './ComputedStyleModel.js';
36
37
  import * as ComputedStyleWidget from './ComputedStyleWidget.js';
37
38
  import * as CSSRuleValidator from './CSSRuleValidator.js';
38
39
  import * as CSSValueTraceView from './CSSValueTraceView.js';
@@ -65,9 +66,9 @@ import * as WebCustomData from './WebCustomData.js';
65
66
  export {
66
67
  AccessibilityTreeUtils,
67
68
  AccessibilityTreeView,
69
+ AdoptedStyleSheetTreeElement,
68
70
  ClassesPaneWidget,
69
71
  ColorSwatchPopoverIcon,
70
- ComputedStyleModel,
71
72
  ComputedStyleWidget,
72
73
  CSSRuleValidator,
73
74
  CSSValueTraceView,
@@ -217,14 +217,25 @@ select {
217
217
  }
218
218
 
219
219
  .elements-gutter-decoration {
220
- position: absolute;
221
- top: 3px;
222
- left: 2px;
223
220
  height: 9px;
224
221
  width: 9px;
225
222
  border-radius: 5px;
226
- border: 1px solid var(--sys-color-orange-bright);
227
- background-color: var(--sys-color-orange-bright);
223
+ border: 1px solid var(--decoration-color); /* stylelint-disable-line plugin/use_theme_colors */
224
+ background-color: var(--decoration-color); /* stylelint-disable-line plugin/use_theme_colors */
225
+ }
226
+
227
+ .elements-gutter-decoration-container {
228
+ display: flex;
229
+ position: absolute;
230
+ top: 0;
231
+ left: 1px;
232
+ width: 15px;
233
+ height: 15px;
234
+ align-items: center;
235
+ }
236
+
237
+ .elements-gutter-decoration + .elements-gutter-decoration {
238
+ margin-left: -6px;
228
239
  }
229
240
 
230
241
  .elements-gutter-decoration.elements-has-decorated-children {