chrome-devtools-frontend 1.0.1721762 → 1.0.1726686

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 (273) hide show
  1. package/.agents/skills/review-ui-widgets/SKILL.md +7 -7
  2. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +12 -0
  3. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +3 -3
  4. package/.agents/skills/ui-widgets/SKILL.md +2 -1
  5. package/docs/cookbook/dependencies.md +57 -11
  6. package/docs/get_the_code.md +15 -0
  7. package/front_end/core/i18n/collect-ui-strings.js +58 -12
  8. package/front_end/core/i18n/i18nImpl.ts +1 -1
  9. package/front_end/core/root/Runtime.ts +1 -1
  10. package/front_end/core/sdk/ResourceTreeModel.ts +16 -0
  11. package/front_end/core/sdk/WebAuthnModel.ts +17 -10
  12. package/front_end/entrypoints/js_app/js_app.ts +2 -5
  13. package/front_end/entrypoints/node_app/node_app.ts +2 -3
  14. package/front_end/generated/InspectorBackendCommands.ts +3 -3
  15. package/front_end/generated/protocol.ts +17 -0
  16. package/front_end/models/ai_assistance/skills/lighthouse.md +2 -1
  17. package/front_end/models/ai_assistance/skills/network.md +1 -0
  18. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +26 -2
  19. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +1 -1
  20. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -7
  21. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +2 -2
  22. package/front_end/models/comment_manager/CD4ABridge.ts +4 -0
  23. package/front_end/models/comment_manager/CommentManager.ts +0 -6
  24. package/front_end/models/comment_manager/CommentThread.ts +39 -19
  25. package/front_end/models/elements/StyleChanges.ts +66 -0
  26. package/front_end/models/trace/EventsSerializer.ts +2 -7
  27. package/front_end/models/trace/ModelImpl.ts +0 -2
  28. package/front_end/models/trace/handlers/FlowsHandler.ts +37 -29
  29. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +13 -6
  30. package/front_end/models/trace/helpers/SyntheticEvents.ts +10 -37
  31. package/front_end/models/trace/insights/RenderBlocking.ts +3 -1
  32. package/front_end/models/trace/lantern/simulation/Simulator.ts +4 -0
  33. package/front_end/models/trace/lantern/types/Lantern.ts +1 -0
  34. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +92 -0
  35. package/front_end/panels/accessibility/SourceOrderView.ts +1 -1
  36. package/front_end/panels/accessibility/accessibilityAnnouncementRecordingListView.css +3 -1
  37. package/front_end/panels/accessibility/accessibilityAnnouncementRecordingView.css +12 -1
  38. package/front_end/panels/application/ApplicationPanelSidebar.ts +90 -0
  39. package/front_end/panels/application/StorageView.ts +348 -254
  40. package/front_end/panels/application/SubAppsView.ts +159 -0
  41. package/front_end/panels/application/application.ts +2 -0
  42. package/front_end/panels/application/preloading/PreloadingView.ts +360 -336
  43. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +3 -3
  44. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +6 -3
  45. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +17 -17
  46. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
  47. package/front_end/panels/application/preloading/preloadingView.css +12 -4
  48. package/front_end/panels/application/preloading/preloadingViewDropDown.css +1 -1
  49. package/front_end/panels/application/storageView.css +16 -21
  50. package/front_end/panels/application/subAppsView.css +21 -0
  51. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -2
  52. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +6 -8
  53. package/front_end/panels/comments/CommentsPane.ts +26 -9
  54. package/front_end/panels/comments/commentsPane.css +25 -6
  55. package/front_end/panels/common/CommentThreadWidget.ts +2 -2
  56. package/front_end/panels/common/CommentsOverlayWidget.ts +94 -35
  57. package/front_end/panels/common/commentThreadWidget.css +17 -0
  58. package/front_end/panels/common/commentsOverlay.css +5 -10
  59. package/front_end/panels/common/common-meta.ts +11 -1
  60. package/front_end/panels/elements/ClassesPaneWidget.ts +133 -89
  61. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +7 -33
  62. package/front_end/panels/elements/DOMTreeElementWidget.ts +3 -1
  63. package/front_end/panels/elements/DOMTreeWidget.ts +19 -3
  64. package/front_end/panels/elements/ElementStatePaneWidget.ts +11 -1
  65. package/front_end/panels/elements/PropertyRenderer.ts +3 -2
  66. package/front_end/panels/elements/StyleEditorWidget.ts +87 -39
  67. package/front_end/panels/elements/StylePropertiesSection.ts +32 -5
  68. package/front_end/panels/elements/StylePropertyTreeElement.ts +227 -162
  69. package/front_end/panels/elements/StylesSidebarPane.ts +1 -0
  70. package/front_end/panels/event_listeners/EventListenersView.ts +11 -8
  71. package/front_end/panels/layer_viewer/Layers3DView.ts +21 -37
  72. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  73. package/front_end/panels/network/NetworkConfigView.ts +12 -10
  74. package/front_end/panels/network/NetworkDataGridNode.ts +3 -1
  75. package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
  76. package/front_end/panels/network/RequestPayloadView.ts +12 -5
  77. package/front_end/panels/network/networkConfigView.css +8 -8
  78. package/front_end/panels/profiler/HeapProfileView.ts +28 -6
  79. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +7 -3
  80. package/front_end/panels/protocol_monitor/JSONEditor.ts +0 -1
  81. package/front_end/panels/recorder/RecorderPanel.ts +2 -2
  82. package/front_end/panels/screencast/ScreencastView.ts +3 -6
  83. package/front_end/panels/security/SecurityPanelSidebar.ts +0 -31
  84. package/front_end/panels/settings/SettingsScreen.ts +1 -1
  85. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +9 -16
  86. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +358 -345
  87. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +136 -121
  88. package/front_end/panels/sources/NavigatorView.ts +105 -45
  89. package/front_end/panels/sources/ScopeChainSidebarPane.ts +8 -5
  90. package/front_end/panels/sources/SourcesNavigator.ts +421 -213
  91. package/front_end/panels/sources/SourcesPanel.ts +9 -5
  92. package/front_end/panels/sources/TabbedEditorContainer.ts +41 -18
  93. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  94. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +10 -5
  95. package/front_end/panels/sources/sources-meta.ts +4 -15
  96. package/front_end/panels/sources/sourcesNavigator.css +5 -0
  97. package/front_end/panels/timeline/ModificationsManager.ts +0 -2
  98. package/front_end/panels/timeline/README.md +2 -0
  99. package/front_end/panels/timeline/TimelineCommentContext.ts +171 -0
  100. package/front_end/panels/timeline/TimelineCommentController.ts +168 -30
  101. package/front_end/panels/timeline/TimelinePanel.ts +4 -0
  102. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  103. package/front_end/panels/timeline/timeline.ts +2 -0
  104. package/front_end/panels/timeline/utils/Treemap.ts +8 -0
  105. package/front_end/panels/webauthn/WebauthnPane.ts +15 -13
  106. package/front_end/third_party/chromium/README.chromium +1 -1
  107. package/front_end/third_party/puppeteer/README.chromium +2 -2
  108. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +113 -3
  109. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +21311 -20981
  110. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +36 -0
  111. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +22 -0
  113. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +20 -18
  116. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts +20 -1
  118. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js +2 -2
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +40 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +3 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts +2 -0
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js +41 -5
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts +2 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js +23 -2
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Input.js +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +3 -2
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +13 -1
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts +1 -0
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js +18 -11
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts +2 -1
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js +8 -1
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js.map +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +2 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +24 -12
  149. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js +13 -7
  153. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts.map +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +5 -1
  156. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
  157. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts +22 -1
  158. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  159. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js +75 -9
  160. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts +18 -4
  162. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js +8 -4
  164. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +65 -26
  167. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
  168. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +3 -2
  169. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
  170. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js +19 -0
  171. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
  172. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.d.ts.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js +4 -3
  174. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts +1 -0
  176. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js +4 -0
  178. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts +2 -0
  180. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +95 -8
  182. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts +0 -8
  184. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +8 -24
  186. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
  187. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts +1 -0
  188. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts.map +1 -1
  189. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js +5 -4
  190. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js.map +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +9 -0
  192. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  193. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.d.ts.map +1 -1
  194. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js +10 -0
  195. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js.map +1 -1
  196. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +10 -0
  197. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +30 -5
  199. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
  200. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  202. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  204. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts +2 -0
  205. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts.map +1 -1
  206. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js +33 -3
  207. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js.map +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +1 -2
  210. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts +4 -0
  212. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js +1 -0
  214. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  216. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  217. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts +2 -2
  219. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts.map +1 -1
  220. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  222. package/front_end/third_party/puppeteer/package/lib/types.d.ts +113 -3
  223. package/front_end/third_party/puppeteer/package/package.json +4 -4
  224. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +42 -0
  225. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +25 -22
  226. package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +22 -2
  227. package/front_end/third_party/puppeteer/package/src/api/Page.ts +45 -2
  228. package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +79 -32
  229. package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +32 -12
  230. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +1 -1
  231. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +18 -2
  232. package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +21 -13
  233. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +12 -2
  234. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +37 -16
  235. package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +14 -11
  236. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +7 -1
  237. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +101 -14
  238. package/front_end/third_party/puppeteer/package/src/cdp/NetworkEventManager.ts +26 -6
  239. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +111 -29
  240. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +37 -1
  241. package/front_end/third_party/puppeteer/package/src/cdp/ScreenRecording.ts +5 -4
  242. package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +5 -0
  243. package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +122 -7
  244. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +13 -33
  245. package/front_end/third_party/puppeteer/package/src/common/BrowserWebSocketTransport.ts +10 -5
  246. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +10 -0
  247. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +12 -0
  248. package/front_end/third_party/puppeteer/package/src/common/util.ts +39 -5
  249. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  250. package/front_end/third_party/puppeteer/package/src/injected/Poller.ts +35 -3
  251. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +4 -2
  252. package/front_end/third_party/puppeteer/package/src/node/NodeWebSocketTransport.ts +5 -0
  253. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  254. package/front_end/third_party/puppeteer/package/src/util/encoding.ts +2 -2
  255. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  256. package/front_end/ui/comments/CommentAnchorResolver.ts +3 -0
  257. package/front_end/ui/comments/CommentOverlayManager.ts +2 -4
  258. package/front_end/ui/components/lists/List.ts +14 -1
  259. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  260. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +23 -14
  261. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +3 -0
  262. package/front_end/ui/helpers/OpenInNewTab.ts +8 -0
  263. package/front_end/ui/legacy/LinkContextMenuProvider.ts +1 -1
  264. package/front_end/ui/legacy/ListWidget.ts +14 -18
  265. package/front_end/ui/legacy/TabbedPane.ts +46 -3
  266. package/front_end/ui/legacy/Toolbar.ts +0 -1
  267. package/front_end/ui/legacy/Treeoutline.ts +10 -3
  268. package/front_end/ui/legacy/UIUtils.ts +5 -2
  269. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +19 -6
  270. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +20 -11
  271. package/front_end/ui/legacy/components/source_frame/XMLView.ts +27 -7
  272. package/front_end/ui/visual_logging/KnownContextValues.ts +5 -0
  273. package/package.json +1 -1
@@ -3,14 +3,19 @@
3
3
  // found in the LICENSE file.
4
4
  /* eslint-disable @devtools/no-imperative-dom-api */
5
5
 
6
- import {createIcon} from '../../ui/kit/kit.js';
6
+ import '../../ui/kit/kit.js';
7
+
8
+ import * as Elements from '../../models/elements/elements.js';
7
9
  import * as UI from '../../ui/legacy/legacy.js';
10
+ import {Directives, html, type LitTemplate} from '../../ui/lit/lit.js';
11
+ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
8
12
 
9
13
  import type * as ElementsComponents from './components/components.js';
10
14
  import type {StylePropertiesSection} from './StylePropertiesSection.js';
11
15
  import {StylePropertyTreeElement} from './StylePropertyTreeElement.js';
12
16
  import type {StylesContainer} from './StylesContainer.js';
13
17
 
18
+ const {ref} = Directives;
14
19
  type PropertySelectedEvent = ElementsComponents.StylePropertyEditor.PropertySelectedEvent;
15
20
  type PropertyDeselectedEvent = ElementsComponents.StylePropertyEditor.PropertyDeselectedEvent;
16
21
 
@@ -34,6 +39,7 @@ export class StyleEditorWidget extends UI.Widget.VBox {
34
39
  private editorContainer: HTMLElement;
35
40
 
36
41
  #triggerKey: string|undefined;
42
+ #initialProperties: Map<string, string>|null = null;
37
43
 
38
44
  constructor() {
39
45
  super({useShadowDom: true});
@@ -72,6 +78,10 @@ export class StyleEditorWidget extends UI.Widget.VBox {
72
78
  bindContext(stylesContainer: StylesContainer, section: StylePropertiesSection): void {
73
79
  this.stylesContainer = stylesContainer;
74
80
  this.section = section;
81
+ if (!this.#initialProperties) {
82
+ this.#initialProperties =
83
+ this.editor ? getAuthoredStyles(section, this.editor.getEditableProperties()) : new Map();
84
+ }
75
85
  this.editor?.addEventListener('propertyselected', this.onPropertySelected);
76
86
  this.editor?.addEventListener('propertydeselected', this.onPropertyDeselected);
77
87
  }
@@ -91,6 +101,27 @@ export class StyleEditorWidget extends UI.Widget.VBox {
91
101
  this.editor?.removeEventListener('propertydeselected', this.onPropertyDeselected);
92
102
  }
93
103
 
104
+ #trackChanges(): void {
105
+ const initialProperties = this.#initialProperties;
106
+ this.#initialProperties = null;
107
+ if (!this.editor || !this.section || !this.stylesContainer || !initialProperties) {
108
+ return;
109
+ }
110
+ const finalProperties = getAuthoredStyles(this.section, this.editor.getEditableProperties());
111
+ const node = this.stylesContainer.node() ?? this.section.matchedStyles.node();
112
+ const ruleHeader = this.section.headerText();
113
+ for (const {propertyName} of this.editor.getEditableProperties()) {
114
+ const oldValue = initialProperties.get(propertyName) ?? '';
115
+ const newValue = finalProperties.get(propertyName) ?? '';
116
+ Elements.StyleChanges.trackStylePropertyEdit(this.stylesContainer.changeTracker, node, {
117
+ ruleHeader,
118
+ oldName: oldValue ? propertyName : '',
119
+ oldValue,
120
+ newName: newValue ? propertyName : '',
121
+ newValue,
122
+ });
123
+ }
124
+ }
94
125
  async render(): Promise<void> {
95
126
  if (!this.editor) {
96
127
  return;
@@ -122,46 +153,63 @@ export class StyleEditorWidget extends UI.Widget.VBox {
122
153
  }
123
154
  }
124
155
 
125
- static createTriggerButton(
126
- stylesContainer: StylesContainer, section: StylePropertiesSection, editorClass: {new(): Editor},
127
- buttonTitle: string, triggerKey: string): HTMLElement {
128
- const triggerButton = createIcon('flex-wrap', 'styles-pane-button');
129
- triggerButton.title = buttonTitle;
130
- triggerButton.role = 'button';
131
-
132
- triggerButton.onclick = async event => {
133
- event.stopPropagation();
134
- const popoverHelper = stylesContainer.swatchPopoverHelper();
135
- const widget = StyleEditorWidget.instance();
136
- widget.element.classList.toggle('with-padding', true);
137
- widget.setEditor(editorClass);
138
- widget.bindContext(stylesContainer, section);
139
- widget.setTriggerKey(triggerKey);
140
- await widget.render();
141
- widget.focus();
142
- const scrollerElement = triggerButton.enclosingNodeOrSelfWithClass('style-panes-wrapper');
143
- const onScroll = (): void => {
144
- popoverHelper.hide(true);
145
- };
146
- const onStylesUpdateCompleted = widget.requestUpdate.bind(widget);
147
- stylesContainer.addStyleUpdateListener(onStylesUpdateCompleted);
148
- popoverHelper.show(widget, triggerButton, () => {
149
- widget.unbindContext();
156
+ static createTriggerButton(stylesContainer: StylesContainer, section: StylePropertiesSection,
157
+ editorClass: {new(): Editor}, buttonTitle: string, triggerKey: string,
158
+ jslogContext: string, onClick?: () => void): LitTemplate {
159
+ const popoverHelper = stylesContainer.swatchPopoverHelper();
160
+ let triggerButton: Element|undefined;
161
+ // clang-format off
162
+ return html`<devtools-icon
163
+ ${ref(e => {
164
+ triggerButton = e;
165
+ if (e && popoverHelper.isShowing(StyleEditorWidget.instance()) &&
166
+ StyleEditorWidget.instance().getTriggerKey() === triggerKey) {
167
+ popoverHelper.setAnchorElement(e);
168
+ }
169
+ })}
170
+ name="flex-wrap"
171
+ class="styles-pane-button"
172
+ title=${buttonTitle}
173
+ role="button"
174
+ tabindex="-1"
175
+ jslog=${VisualLogging.showStyleEditor(jslogContext).track({click: true})}
176
+ @click=${async (event: Event) => {
177
+ event.stopPropagation();
178
+ onClick?.();
179
+ if (!triggerButton) {
180
+ return;
181
+ }
182
+ const widget = StyleEditorWidget.instance();
183
+ widget.element.classList.toggle('with-padding', true);
184
+ widget.setEditor(editorClass);
185
+ widget.bindContext(stylesContainer, section);
186
+ widget.setTriggerKey(triggerKey);
187
+ await widget.render();
188
+ widget.focus();
189
+ const scrollerElement = triggerButton.enclosingNodeOrSelfWithClass('style-panes-wrapper');
190
+ const onScroll = (): void => {
191
+ popoverHelper.hide(true);
192
+ };
193
+ const onStylesUpdateCompleted = widget.requestUpdate.bind(widget);
194
+ stylesContainer.addStyleUpdateListener(onStylesUpdateCompleted);
195
+ popoverHelper.show(widget, triggerButton, () => {
196
+ widget.#trackChanges();
197
+ widget.unbindContext();
198
+ if (scrollerElement) {
199
+ scrollerElement.removeEventListener('scroll', onScroll);
200
+ }
201
+ stylesContainer.removeStyleUpdateListener(onStylesUpdateCompleted);
202
+ });
150
203
  if (scrollerElement) {
151
- scrollerElement.removeEventListener('scroll', onScroll);
204
+ scrollerElement.addEventListener('scroll', onScroll);
152
205
  }
153
- stylesContainer.removeStyleUpdateListener(onStylesUpdateCompleted);
154
- });
155
- if (scrollerElement) {
156
- scrollerElement.addEventListener('scroll', onScroll);
157
- }
158
- };
159
- triggerButton.onmouseup = event => {
160
- // Stop propagation to prevent the property editor from being activated.
161
- event.stopPropagation();
162
- };
163
-
164
- return triggerButton;
206
+ }}
207
+ @mouseup=${(event: Event) => {
208
+ // Stop propagation to prevent the property editor from being activated.
209
+ event.stopPropagation();
210
+ }}
211
+ ></devtools-icon>`;
212
+ // clang-format on
165
213
  }
166
214
  }
167
215
 
@@ -44,6 +44,7 @@ import * as TextUtils from '../../core/text_utils/text_utils.js';
44
44
  import * as Protocol from '../../generated/protocol.js';
45
45
  import * as Badges from '../../models/badges/badges.js';
46
46
  import * as Bindings from '../../models/bindings/bindings.js';
47
+ import * as Elements from '../../models/elements/elements.js';
47
48
  import * as Buttons from '../../ui/components/buttons/buttons.js';
48
49
  import * as Tooltips from '../../ui/components/tooltips/tooltips.js';
49
50
  import {createIcon, type Icon} from '../../ui/kit/kit.js';
@@ -1993,12 +1994,18 @@ export class StylePropertiesSection {
1993
1994
  }
1994
1995
 
1995
1996
  setHeaderText(rule: SDK.CSSRule.CSSRule, newContent: string): Promise<void> {
1996
- function onSelectorsUpdated(
1997
- this: StylePropertiesSection, rule: SDK.CSSRule.CSSStyleRule, success: boolean): Promise<void> {
1997
+ function onSelectorsUpdated(this: StylePropertiesSection, rule: SDK.CSSRule.CSSStyleRule, oldSelector: string,
1998
+ success: boolean): Promise<void> {
1998
1999
  if (!success) {
1999
2000
  return Promise.resolve();
2000
2001
  }
2001
2002
 
2003
+ Elements.StyleChanges.trackStyleSelectorChange(
2004
+ this.stylesContainer.changeTracker,
2005
+ this.stylesContainer.node() ?? this.matchedStyles.node(),
2006
+ oldSelector,
2007
+ newContent,
2008
+ );
2002
2009
  Badges.UserBadges.instance().recordAction(Badges.BadgeAction.CSS_RULE_MODIFIED);
2003
2010
  return this.matchedStyles.recomputeMatchingSelectors(rule).then(updateSourceRanges.bind(this, rule));
2004
2011
  }
@@ -2017,8 +2024,9 @@ export class StylePropertiesSection {
2017
2024
  if (!oldSelectorRange) {
2018
2025
  return Promise.resolve();
2019
2026
  }
2027
+ const oldSelector = rule.selectorText();
2020
2028
  this.#customHeaderText = undefined;
2021
- return rule.setSelectorText(newContent).then(onSelectorsUpdated.bind(this, rule, Boolean(oldSelectorRange)));
2029
+ return rule.setSelectorText(newContent).then(onSelectorsUpdated.bind(this, rule, oldSelector));
2022
2030
  }
2023
2031
 
2024
2032
  protected editingSelectorCommittedForTest(): void {
@@ -2117,6 +2125,11 @@ export class BlankStylePropertiesSection extends StylePropertiesSection {
2117
2125
  function onAddedToCascade(this: BlankStylePropertiesSection, newRule: SDK.CSSRule.CSSStyleRule): void {
2118
2126
  const doesSelectorAffectSelectedNode = this.matchedStyles.getMatchingSelectors(newRule).length > 0;
2119
2127
  this.makeNormal(newRule);
2128
+ Elements.StyleChanges.trackStyleRuleAdded(
2129
+ this.stylesContainer.changeTracker,
2130
+ this.stylesContainer.node() ?? this.matchedStyles.node(),
2131
+ newRule.selectorText(),
2132
+ );
2120
2133
 
2121
2134
  if (!doesSelectorAffectSelectedNode) {
2122
2135
  this.propertiesTreeOutline.element.classList.add('no-affect');
@@ -2186,7 +2199,14 @@ export class RegisteredPropertiesSection extends StylePropertiesSection {
2186
2199
  if (!oldRange) {
2187
2200
  return;
2188
2201
  }
2202
+ const oldName = rule.propertyName().text;
2189
2203
  if (await rule.setPropertyName(newContent)) {
2204
+ Elements.StyleChanges.trackPropertyRuleNameChange(
2205
+ this.stylesContainer.changeTracker,
2206
+ this.stylesContainer.node() ?? this.matchedStyles.node(),
2207
+ oldName,
2208
+ newContent,
2209
+ );
2190
2210
  this.stylesContainer.forceUpdate();
2191
2211
  }
2192
2212
  }
@@ -2335,10 +2355,16 @@ export class KeyframePropertiesSection extends StylePropertiesSection {
2335
2355
  }
2336
2356
 
2337
2357
  override setHeaderText(rule: SDK.CSSRule.CSSRule, newContent: string): Promise<void> {
2338
- function updateSourceRanges(this: KeyframePropertiesSection, success: boolean): void {
2358
+ function updateSourceRanges(this: KeyframePropertiesSection, oldKey: string, success: boolean): void {
2339
2359
  if (!success) {
2340
2360
  return;
2341
2361
  }
2362
+ Elements.StyleChanges.trackKeyframeKeyChange(
2363
+ this.stylesContainer.changeTracker,
2364
+ this.stylesContainer.node() ?? this.matchedStyles.node(),
2365
+ oldKey,
2366
+ newContent,
2367
+ );
2342
2368
  this.stylesContainer.refreshUpdate(this);
2343
2369
  }
2344
2370
 
@@ -2349,7 +2375,8 @@ export class KeyframePropertiesSection extends StylePropertiesSection {
2349
2375
  if (!oldRange) {
2350
2376
  return Promise.resolve();
2351
2377
  }
2352
- return rule.setKeyText(newContent).then(updateSourceRanges.bind(this));
2378
+ const oldKey = rule.key().text;
2379
+ return rule.setKeyText(newContent).then(updateSourceRanges.bind(this, oldKey));
2353
2380
  }
2354
2381
 
2355
2382
  override isPropertyInherited(_propertyName: string): boolean {