chrome-devtools-frontend 1.0.1550444 → 1.0.1555174

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 (466) hide show
  1. package/docs/styleguide/ux/components.md +34 -8
  2. package/eslint.config.mjs +7 -0
  3. package/front_end/Images/generate-css-vars.js +8 -4
  4. package/front_end/Images/src/spark.svg +10 -0
  5. package/front_end/core/common/Settings.ts +20 -8
  6. package/front_end/core/host/UserMetrics.ts +3 -1
  7. package/front_end/core/i18n/collect-ui-strings.js +19 -10
  8. package/front_end/core/i18n/generate-locales-js.js +4 -4
  9. package/front_end/core/protocol_client/CDPConnection.ts +1 -0
  10. package/front_end/core/protocol_client/InspectorBackend.ts +5 -1
  11. package/front_end/core/root/Runtime.ts +0 -12
  12. package/front_end/core/sdk/DOMModel.ts +38 -3
  13. package/front_end/core/sdk/DebuggerModel.ts +9 -4
  14. package/front_end/core/sdk/IsolateManager.ts +7 -0
  15. package/front_end/core/sdk/PageResourceLoader.ts +3 -3
  16. package/front_end/core/sdk/RehydratingConnection.ts +5 -2
  17. package/front_end/core/sdk/ResourceTreeModel.ts +0 -1
  18. package/front_end/entrypoints/main/MainImpl.ts +28 -10
  19. package/front_end/generated/SupportedCSSProperties.js +32 -0
  20. package/front_end/models/ai_assistance/AiConversation.ts +94 -4
  21. package/front_end/models/ai_assistance/agents/AiAgent.ts +30 -15
  22. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +179 -41
  23. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +5 -0
  24. package/front_end/models/ai_assistance/agents/StylingAgent.ts +62 -0
  25. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +2 -1
  26. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +1 -7
  27. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +124 -12
  28. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +125 -30
  29. package/front_end/models/ai_assistance/performance/AICallTree.ts +42 -0
  30. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +12 -0
  31. package/front_end/models/issues_manager/Issue.ts +1 -0
  32. package/front_end/models/issues_manager/IssueAggregator.ts +9 -0
  33. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  34. package/front_end/models/issues_manager/PermissionElementIssue.ts +262 -0
  35. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
  36. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  37. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  38. package/front_end/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  39. package/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  40. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
  41. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
  42. package/front_end/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
  43. package/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  44. package/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  45. package/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
  46. package/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
  47. package/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
  48. package/front_end/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
  49. package/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
  50. package/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  51. package/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  52. package/front_end/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  53. package/front_end/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
  54. package/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
  55. package/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
  56. package/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
  57. package/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
  58. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  59. package/front_end/models/javascript_metadata/NativeFunctions.js +23 -23
  60. package/front_end/models/stack_trace/StackTraceModel.ts +37 -18
  61. package/front_end/models/trace/Processor.ts +14 -15
  62. package/front_end/models/trace/insights/Common.ts +2 -8
  63. package/front_end/models/trace/insights/types.ts +12 -2
  64. package/front_end/models/trace/types/TraceEvents.ts +4 -1
  65. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +28 -6
  66. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +9 -23
  67. package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
  68. package/front_end/panels/ai_assistance/components/ChatView.ts +78 -2
  69. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +71 -0
  70. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +126 -0
  71. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +131 -2
  72. package/front_end/panels/ai_assistance/components/chatView.css +28 -0
  73. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +33 -0
  74. package/front_end/panels/application/AppManifestView.ts +1007 -521
  75. package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -17
  76. package/front_end/panels/application/BounceTrackingMitigationsTreeElement.ts +2 -6
  77. package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -5
  78. package/front_end/panels/application/KeyValueStorageItemsView.ts +3 -2
  79. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -2
  80. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +133 -118
  81. package/front_end/panels/application/preloading/PreloadingView.ts +46 -45
  82. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +80 -75
  83. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +169 -133
  84. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +74 -93
  85. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +142 -117
  86. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +51 -11
  87. package/front_end/panels/application/preloading/components/components.ts +0 -2
  88. package/front_end/panels/common/Annotation.ts +184 -0
  89. package/front_end/panels/common/AnnotationManager.ts +148 -11
  90. package/front_end/panels/common/ExtensionView.ts +47 -0
  91. package/front_end/panels/common/PersistenceUtils.ts +22 -25
  92. package/front_end/panels/common/annotation.css +40 -0
  93. package/front_end/panels/common/common.ts +1 -0
  94. package/front_end/panels/console/ConsoleInsightTeaser.ts +187 -5
  95. package/front_end/panels/console/ConsolePinPane.ts +437 -217
  96. package/front_end/panels/console/ConsolePrompt.ts +32 -223
  97. package/front_end/panels/console/ConsoleView.ts +67 -66
  98. package/front_end/panels/console/ConsoleViewMessage.ts +8 -3
  99. package/front_end/panels/console/consoleInsightTeaser.css +23 -0
  100. package/front_end/panels/console/consoleView.css +1 -1
  101. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +89 -0
  102. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +2 -2
  103. package/front_end/panels/elements/ComputedStyleWidget.ts +16 -5
  104. package/front_end/panels/elements/ElementsPanel.ts +38 -12
  105. package/front_end/panels/elements/ElementsSidebarPane.ts +1 -3
  106. package/front_end/panels/elements/ElementsTreeElement.ts +313 -353
  107. package/front_end/panels/elements/ElementsTreeOutline.ts +39 -13
  108. package/front_end/panels/elements/StylePropertyTreeElement.ts +15 -14
  109. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  110. package/front_end/panels/emulation/MediaQueryInspector.ts +171 -125
  111. package/front_end/panels/explain/components/ConsoleInsight.ts +175 -150
  112. package/front_end/panels/explain/components/consoleInsight.css +348 -347
  113. package/front_end/panels/issues/AffectedPermissionElementsView.ts +46 -0
  114. package/front_end/panels/issues/IssueView.ts +2 -0
  115. package/front_end/panels/issues/IssuesPane.ts +6 -0
  116. package/front_end/panels/layer_viewer/LayerDetailsView.ts +165 -149
  117. package/front_end/panels/layer_viewer/Layers3DView.ts +131 -78
  118. package/front_end/panels/lighthouse/LighthouseStatusView.ts +149 -100
  119. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +90 -64
  120. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +25 -34
  121. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +60 -44
  122. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +170 -151
  123. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +50 -51
  124. package/front_end/panels/linear_memory_inspector/components/valueInterpreterDisplay.css +0 -13
  125. package/front_end/panels/linear_memory_inspector/components/valueInterpreterSettings.css +20 -18
  126. package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -1
  127. package/front_end/panels/network/NetworkDataGridNode.ts +14 -6
  128. package/front_end/panels/network/NetworkItemView.ts +42 -3
  129. package/front_end/panels/network/NetworkLogView.ts +10 -11
  130. package/front_end/panels/network/NetworkPanel.ts +63 -1
  131. package/front_end/panels/network/RequestInitiatorView.ts +146 -113
  132. package/front_end/panels/network/components/RequestHeaderSection.css +51 -50
  133. package/front_end/panels/network/components/RequestHeaderSection.ts +81 -71
  134. package/front_end/panels/network/components/RequestHeadersView.css +1 -1
  135. package/front_end/panels/network/components/RequestHeadersView.ts +26 -11
  136. package/front_end/panels/network/components/RequestTrustTokensView.css +24 -14
  137. package/front_end/panels/network/components/RequestTrustTokensView.ts +144 -140
  138. package/front_end/panels/profiler/IsolateSelector.ts +2 -1
  139. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +49 -33
  140. package/front_end/panels/recorder/RecorderController.ts +2 -3
  141. package/front_end/panels/recorder/components/ControlButton.ts +68 -34
  142. package/front_end/panels/recorder/components/CreateRecordingView.ts +9 -6
  143. package/front_end/panels/recorder/components/RecordingView.ts +81 -88
  144. package/front_end/panels/recorder/components/ReplaySection.ts +226 -145
  145. package/front_end/panels/recorder/{controllers → components}/SelectorPicker.ts +129 -52
  146. package/front_end/panels/recorder/components/StepEditor.ts +21 -67
  147. package/front_end/panels/recorder/components/StepView.ts +222 -180
  148. package/front_end/panels/recorder/components/TimelineSection.ts +69 -48
  149. package/front_end/panels/recorder/components/components.ts +2 -2
  150. package/front_end/panels/recorder/components/selectorPicker.css +14 -0
  151. package/front_end/panels/recorder/components/stepEditor.css +0 -5
  152. package/front_end/panels/recorder/components/stepView.css +196 -198
  153. package/front_end/panels/recorder/extensions/ExtensionManager.ts +4 -48
  154. package/front_end/panels/recorder/models/ScreenshotUtils.ts +17 -11
  155. package/front_end/panels/security/CookieControlsView.ts +30 -26
  156. package/front_end/panels/settings/components/SyncSection.ts +0 -1
  157. package/front_end/panels/sources/CSSPlugin.ts +3 -3
  158. package/front_end/panels/sources/CallStackSidebarPane.ts +60 -75
  159. package/front_end/panels/sources/SourcesPanel.ts +1 -11
  160. package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
  161. package/front_end/panels/sources/ThreadsSidebarPane.ts +96 -101
  162. package/front_end/panels/sources/threadsSidebarPane.css +6 -5
  163. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +0 -1
  164. package/front_end/panels/timeline/InteractionsTrackAppender.ts +2 -3
  165. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +23 -33
  166. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +4 -3
  167. package/front_end/panels/timeline/TimelineFlameChartView.ts +12 -0
  168. package/front_end/panels/timeline/TimelinePanel.ts +3 -5
  169. package/front_end/panels/timeline/components/IgnoreListSetting.ts +164 -142
  170. package/front_end/panels/timeline/components/InteractionBreakdown.ts +48 -28
  171. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +18 -23
  172. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +98 -73
  173. package/front_end/panels/timeline/components/Sidebar.ts +16 -7
  174. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +174 -137
  175. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +262 -291
  176. package/front_end/panels/timeline/components/Utils.ts +25 -0
  177. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +210 -146
  178. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +8 -20
  179. package/front_end/panels/timeline/components/insights/Cache.ts +0 -9
  180. package/front_end/panels/timeline/components/insights/Checklist.ts +53 -43
  181. package/front_end/panels/timeline/components/insights/DOMSize.ts +11 -33
  182. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +6 -12
  183. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +0 -9
  184. package/front_end/panels/timeline/components/insights/EventRef.ts +47 -109
  185. package/front_end/panels/timeline/components/insights/FontDisplay.ts +0 -9
  186. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +0 -9
  187. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +0 -9
  188. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +1 -10
  189. package/front_end/panels/timeline/components/insights/ImageRef.ts +112 -0
  190. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +91 -0
  191. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +0 -9
  192. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +11 -14
  193. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +0 -9
  194. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +0 -9
  195. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +6 -21
  196. package/front_end/panels/timeline/components/insights/NodeLink.ts +68 -43
  197. package/front_end/panels/timeline/components/insights/README.md +2 -3
  198. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +0 -9
  199. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +0 -9
  200. package/front_end/panels/timeline/components/insights/ThirdParties.ts +0 -9
  201. package/front_end/panels/timeline/components/insights/Viewport.ts +7 -19
  202. package/front_end/panels/timeline/components/insights/baseInsightComponent.css +5 -0
  203. package/front_end/panels/timeline/components/insights/insights.ts +2 -0
  204. package/front_end/panels/timeline/components/interactionBreakdown.css +15 -13
  205. package/front_end/panels/timeline/components/sidebarInsightsTab.css +50 -48
  206. package/front_end/panels/timeline/enable-easter-egg.js +7 -3
  207. package/front_end/third_party/chromium/README.chromium +1 -1
  208. package/front_end/third_party/puppeteer/README.chromium +2 -2
  209. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.d.ts +96 -0
  210. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.d.ts.map +1 -0
  211. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.js +8 -0
  212. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.js.map +1 -0
  213. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +87 -0
  214. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.d.ts +2 -6
  217. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.d.ts.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.js +5 -24
  219. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.js.map +1 -1
  220. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +5 -0
  221. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  222. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts +1 -0
  224. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts.map +1 -1
  225. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.js.map +1 -1
  226. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.d.ts +18 -0
  227. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.d.ts.map +1 -0
  228. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.js +42 -0
  229. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.js.map +1 -0
  230. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +4 -1
  231. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  232. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +10 -0
  233. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  234. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.d.ts +27 -0
  235. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.d.ts.map +1 -0
  236. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.js +90 -0
  237. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.js.map +1 -0
  238. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -1
  239. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  240. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +3 -2
  241. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +4 -1
  243. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +5 -2
  245. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +4 -0
  247. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +14 -2
  249. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  250. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js +7 -0
  252. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +1 -1
  254. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.d.ts +18 -0
  256. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.d.ts.map +1 -0
  257. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.js +30 -0
  258. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.js.map +1 -0
  259. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +5 -2
  260. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +22 -3
  262. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpSession.d.ts +1 -1
  264. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpSession.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.d.ts +2 -3
  266. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.d.ts.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.js +4 -6
  268. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.js.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts +2 -2
  270. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js +1 -1
  272. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +2 -0
  274. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +8 -0
  276. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  278. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js +8 -3
  279. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js.map +1 -1
  280. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts +1 -0
  281. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts.map +1 -1
  282. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js +1 -0
  283. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js.map +1 -1
  284. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +30 -0
  285. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  286. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +15 -0
  287. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  288. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  289. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -13
  292. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  293. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +5 -3
  294. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.js +17 -0
  296. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.js.map +1 -1
  297. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  298. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  299. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  300. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  301. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  303. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +221 -4
  304. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +182 -95
  305. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.d.ts +96 -0
  306. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.d.ts.map +1 -0
  307. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.js +7 -0
  308. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.js.map +1 -0
  309. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +87 -0
  310. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  311. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  312. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.d.ts +2 -6
  313. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.d.ts.map +1 -1
  314. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.js +4 -22
  315. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.js.map +1 -1
  316. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +5 -0
  317. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  318. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  319. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts +1 -0
  320. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts.map +1 -1
  321. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.js.map +1 -1
  322. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.d.ts +18 -0
  323. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.d.ts.map +1 -0
  324. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.js +38 -0
  325. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.js.map +1 -0
  326. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +4 -1
  327. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +10 -0
  329. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  330. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.d.ts +27 -0
  331. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.d.ts.map +1 -0
  332. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js +85 -0
  333. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js.map +1 -0
  334. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -1
  335. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +3 -2
  337. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  338. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +4 -1
  339. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  340. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +5 -2
  341. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +4 -0
  343. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  344. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +14 -2
  345. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  346. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts.map +1 -1
  347. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js +7 -0
  348. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js.map +1 -1
  349. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +1 -1
  350. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  351. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.d.ts +18 -0
  352. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.d.ts.map +1 -0
  353. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.js +26 -0
  354. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.js.map +1 -0
  355. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +5 -2
  356. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +22 -3
  358. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpSession.d.ts +1 -1
  360. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpSession.d.ts.map +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.d.ts +2 -3
  362. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.d.ts.map +1 -1
  363. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js +2 -4
  364. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js.map +1 -1
  365. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts +2 -2
  366. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  367. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +2 -2
  368. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
  369. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +2 -0
  370. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  371. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +8 -0
  372. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  373. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  374. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js +8 -3
  375. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js.map +1 -1
  376. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts +1 -0
  377. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts.map +1 -1
  378. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js +1 -0
  379. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js.map +1 -1
  380. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +31 -1
  381. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
  382. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +15 -0
  383. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  384. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts +1 -1
  385. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  386. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -13
  387. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  388. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +5 -3
  389. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  390. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js +16 -1
  391. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js.map +1 -1
  392. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  393. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  394. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  395. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  396. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  397. package/front_end/third_party/puppeteer/package/lib/types.d.ts +221 -4
  398. package/front_end/third_party/puppeteer/package/package.json +4 -4
  399. package/front_end/third_party/puppeteer/package/src/api/BluetoothEmulation.ts +103 -0
  400. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +96 -1
  401. package/front_end/third_party/puppeteer/package/src/api/DeviceRequestPrompt.ts +2 -10
  402. package/front_end/third_party/puppeteer/package/src/api/Page.ts +6 -0
  403. package/front_end/third_party/puppeteer/package/src/api/api.ts +1 -0
  404. package/front_end/third_party/puppeteer/package/src/bidi/BluetoothEmulation.ts +52 -0
  405. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +15 -0
  406. package/front_end/third_party/puppeteer/package/src/bidi/DeviceRequestPrompt.ts +138 -0
  407. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +7 -3
  408. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +10 -2
  409. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +30 -2
  410. package/front_end/third_party/puppeteer/package/src/bidi/util.ts +8 -0
  411. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +1 -1
  412. package/front_end/third_party/puppeteer/package/src/cdp/BluetoothEmulation.ts +47 -0
  413. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +33 -3
  414. package/front_end/third_party/puppeteer/package/src/cdp/CdpSession.ts +1 -1
  415. package/front_end/third_party/puppeteer/package/src/cdp/DeviceRequestPrompt.ts +3 -8
  416. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +2 -2
  417. package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +9 -4
  418. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +13 -0
  419. package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +8 -3
  420. package/front_end/third_party/puppeteer/package/src/cdp/cdp.ts +1 -0
  421. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +45 -1
  422. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +20 -0
  423. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +5 -17
  424. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +23 -7
  425. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  426. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  427. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +4 -0
  428. package/front_end/ui/components/annotations/AnnotationRepository.ts +153 -13
  429. package/front_end/ui/components/settings/SettingCheckbox.ts +4 -6
  430. package/front_end/ui/components/snackbars/Snackbars.docs.ts +0 -1
  431. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +12 -3
  432. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +182 -0
  433. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  434. package/front_end/ui/helpers/OpenInNewTab.ts +5 -1
  435. package/front_end/ui/i18n/i18n.ts +9 -9
  436. package/front_end/ui/kit/icons/Icon.docs.ts +22 -65
  437. package/front_end/ui/kit/kit.ts +1 -0
  438. package/front_end/ui/kit/link/Link.docs.ts +15 -0
  439. package/front_end/ui/kit/link/Link.ts +151 -0
  440. package/front_end/ui/kit/link/link.css +27 -0
  441. package/front_end/ui/legacy/EmptyWidget.ts +6 -0
  442. package/front_end/ui/legacy/Floaty.ts +442 -0
  443. package/front_end/ui/legacy/InspectorView.ts +12 -0
  444. package/front_end/ui/legacy/ReportView.ts +1 -1
  445. package/front_end/ui/legacy/SelectMenu.docs.ts +0 -1
  446. package/front_end/ui/legacy/TabbedPane.ts +150 -65
  447. package/front_end/ui/legacy/Widget.ts +1 -3
  448. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +1 -1
  449. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +36 -36
  450. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +22 -37
  451. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +31 -1
  452. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +2 -2
  453. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -11
  454. package/front_end/ui/legacy/floaty.css +77 -0
  455. package/front_end/ui/legacy/legacy.ts +2 -0
  456. package/front_end/ui/legacy/tabbedPane.css +4 -7
  457. package/front_end/ui/visual_logging/KnownContextValues.ts +7 -0
  458. package/inspector_overlay/loadCSS.rollup.js +5 -4
  459. package/package.json +2 -2
  460. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +0 -99
  461. package/front_end/panels/recorder/components/SelectButton.ts +0 -304
  462. package/front_end/panels/recorder/controllers/controllers.ts +0 -7
  463. package/front_end/ui/components/chrome_link/ChromeLink.ts +0 -76
  464. package/front_end/ui/components/chrome_link/chromeLink.css +0 -12
  465. package/front_end/ui/components/chrome_link/chrome_link.ts +0 -9
  466. /package/front_end/panels/recorder/components/{selectButton.css → replaySection.css} +0 -0
@@ -47,6 +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
51
  import {getElementIssueDetails} from './ElementIssueUtils.js';
51
52
  import {ElementsPanel} from './ElementsPanel.js';
52
53
  import {ElementsTreeElement, InitialChildrenLimit, isOpeningTag} from './ElementsTreeElement.js';
@@ -119,8 +120,8 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
119
120
  ElementsTreeOutline.Events.SelectedNodeChanged, input.onSelectedNodeChanged, this);
120
121
  output.elementsTreeOutline.addEventListener(
121
122
  ElementsTreeOutline.Events.ElementsTreeUpdated, input.onElementsTreeUpdated, this);
122
- output.elementsTreeOutline.addEventListener(UI.TreeOutline.Events.ElementExpanded, input.onElementCollapsed, this);
123
- output.elementsTreeOutline.addEventListener(UI.TreeOutline.Events.ElementCollapsed, input.onElementExpanded, this);
123
+ output.elementsTreeOutline.addEventListener(UI.TreeOutline.Events.ElementExpanded, input.onElementExpanded, this);
124
+ output.elementsTreeOutline.addEventListener(UI.TreeOutline.Events.ElementCollapsed, input.onElementCollapsed, this);
124
125
  target.appendChild(output.elementsTreeOutline.element);
125
126
  }
126
127
  if (input.visibleWidth !== undefined) {
@@ -198,6 +199,8 @@ export class DOMTreeWidget extends UI.Widget.Widget {
198
199
  Common.EventTarget.EventTargetEvent<{node: SDK.DOMModel.DOMNode | null, focus: boolean}>) => void = () => {};
199
200
  onElementsTreeUpdated: (event: Common.EventTarget.EventTargetEvent<SDK.DOMModel.DOMNode[]>) => void = () => {};
200
201
  onDocumentUpdated: (domModel: SDK.DOMModel.DOMModel) => void = () => {};
202
+ onElementExpanded: () => void = () => {};
203
+ onElementCollapsed: () => void = () => {};
201
204
 
202
205
  #visible = false;
203
206
  #visibleWidth?: number;
@@ -322,8 +325,14 @@ export class DOMTreeWidget extends UI.Widget.Widget {
322
325
  this.#clearHighlightedNode();
323
326
  this.onSelectedNodeChanged(event);
324
327
  },
325
- onElementCollapsed: this.#clearHighlightedNode.bind(this),
326
- onElementExpanded: this.#clearHighlightedNode.bind(this),
328
+ onElementCollapsed: () => {
329
+ this.#clearHighlightedNode();
330
+ this.onElementCollapsed();
331
+ },
332
+ onElementExpanded: () => {
333
+ this.#clearHighlightedNode();
334
+ this.onElementExpanded();
335
+ },
327
336
  },
328
337
  this.#viewOutput, this.contentElement);
329
338
  }
@@ -945,7 +954,10 @@ export class ElementsTreeOutline extends
945
954
  this.dispatchEventToListeners(ElementsTreeOutline.Events.ElementsTreeUpdated, nodes);
946
955
  }
947
956
 
948
- findTreeElement(node: SDK.DOMModel.DOMNode): ElementsTreeElement|null {
957
+ findTreeElement(node: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet): ElementsTreeElement|null {
958
+ if (node instanceof SDK.DOMModel.AdoptedStyleSheet) {
959
+ return null;
960
+ }
949
961
  let treeElement = this.lookUpTreeElement(node);
950
962
  if (!treeElement && node.nodeType() === Node.TEXT_NODE) {
951
963
  // The text node might have been inlined if it was short, so try to find the parent element.
@@ -1518,6 +1530,7 @@ export class ElementsTreeOutline extends
1518
1530
  domModel.addEventListener(SDK.DOMModel.Events.ScrollableFlagUpdated, this.scrollableFlagUpdated, this);
1519
1531
  domModel.addEventListener(
1520
1532
  SDK.DOMModel.Events.AffectedByStartingStylesFlagUpdated, this.affectedByStartingStylesFlagUpdated, this);
1533
+ domModel.addEventListener(SDK.DOMModel.Events.AdoptedStyleSheetsModified, this.adoptedStyleSheetsModified, this);
1521
1534
  }
1522
1535
 
1523
1536
  unwireFromDOMModel(domModel: SDK.DOMModel.DOMModel): void {
@@ -1534,6 +1547,7 @@ export class ElementsTreeOutline extends
1534
1547
  domModel.removeEventListener(SDK.DOMModel.Events.ScrollableFlagUpdated, this.scrollableFlagUpdated, this);
1535
1548
  domModel.removeEventListener(
1536
1549
  SDK.DOMModel.Events.AffectedByStartingStylesFlagUpdated, this.affectedByStartingStylesFlagUpdated, this);
1550
+ domModel.removeEventListener(SDK.DOMModel.Events.AdoptedStyleSheetsModified, this.adoptedStyleSheetsModified, this);
1537
1551
  elementsTreeOutlineByDOMModel.delete(domModel);
1538
1552
  }
1539
1553
 
@@ -1612,6 +1626,12 @@ export class ElementsTreeOutline extends
1612
1626
  this.updateModifiedNodesSoon();
1613
1627
  }
1614
1628
 
1629
+ private adoptedStyleSheetsModified(event: Common.EventTarget.EventTargetEvent<SDK.DOMModel.DOMNode>): void {
1630
+ const node = event.data;
1631
+ this.addUpdateRecord(node).childrenModified();
1632
+ this.updateModifiedNodesSoon();
1633
+ }
1634
+
1615
1635
  private updateModifiedNodesSoon(): void {
1616
1636
  if (!this.updateRecords.size) {
1617
1637
  return;
@@ -1711,7 +1731,11 @@ export class ElementsTreeOutline extends
1711
1731
  this.#topLayerContainerByParent.set(parent, container);
1712
1732
  }
1713
1733
 
1714
- private createElementTreeElement(node: SDK.DOMModel.DOMNode, isClosingTag?: boolean): ElementsTreeElement {
1734
+ private createElementTreeElement(node: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet, isClosingTag?: boolean):
1735
+ UI.TreeOutline.TreeElement {
1736
+ if (node instanceof SDK.DOMModel.AdoptedStyleSheet) {
1737
+ return new AdoptedStyleSheetTreeElement(node);
1738
+ }
1715
1739
  const treeElement = new ElementsTreeElement(node, isClosingTag);
1716
1740
  treeElement.setExpandable(!isClosingTag && this.hasVisibleChildren(node));
1717
1741
  if (node.nodeType() === Node.ELEMENT_NODE && node.parentNode && node.parentNode.nodeType() === Node.DOCUMENT_NODE &&
@@ -1743,8 +1767,8 @@ export class ElementsTreeOutline extends
1743
1767
  return treeElement.childAt(index) as ElementsTreeElement;
1744
1768
  }
1745
1769
 
1746
- private visibleChildren(node: SDK.DOMModel.DOMNode): SDK.DOMModel.DOMNode[] {
1747
- let visibleChildren = ElementsTreeElement.visibleShadowRoots(node);
1770
+ private visibleChildren(node: SDK.DOMModel.DOMNode): Array<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet> {
1771
+ let visibleChildren = [...node.adoptedStyleSheetsForNode, ...ElementsTreeElement.visibleShadowRoots(node)];
1748
1772
 
1749
1773
  const contentDocument = node.contentDocument();
1750
1774
  if (contentDocument) {
@@ -1870,8 +1894,8 @@ export class ElementsTreeOutline extends
1870
1894
  }
1871
1895
 
1872
1896
  insertChildElement(
1873
- treeElement: ElementsTreeElement|TopLayerContainer, child: SDK.DOMModel.DOMNode, index: number,
1874
- isClosingTag?: boolean): ElementsTreeElement {
1897
+ treeElement: ElementsTreeElement|TopLayerContainer, child: SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet,
1898
+ index: number, isClosingTag?: boolean): UI.TreeOutline.TreeElement {
1875
1899
  const newElement = this.createElementTreeElement(child, isClosingTag);
1876
1900
  treeElement.insertChild(newElement, index);
1877
1901
  if (child instanceof SDK.DOMModel.DOMDocument) {
@@ -1903,11 +1927,12 @@ export class ElementsTreeOutline extends
1903
1927
 
1904
1928
  const node = treeElement.node();
1905
1929
  const visibleChildren = this.visibleChildren(node);
1906
- const visibleChildrenSet = new Set<SDK.DOMModel.DOMNode>(visibleChildren);
1930
+ const visibleChildrenSet = new Set<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet>(visibleChildren);
1907
1931
 
1908
1932
  // Remove any tree elements that no longer have this node as their parent and save
1909
1933
  // all existing elements that could be reused. This also removes closing tag element.
1910
- const existingTreeElements = new Map<SDK.DOMModel.DOMNode, UI.TreeOutline.TreeElement&ElementsTreeElement>();
1934
+ const existingTreeElements =
1935
+ new Map<SDK.DOMModel.DOMNode|SDK.DOMModel.AdoptedStyleSheet, UI.TreeOutline.TreeElement&ElementsTreeElement>();
1911
1936
  for (let i = treeElement.childCount() - 1; i >= 0; --i) {
1912
1937
  const existingTreeElement = treeElement.childAt(i);
1913
1938
  if (!(existingTreeElement instanceof ElementsTreeElement)) {
@@ -1926,6 +1951,7 @@ export class ElementsTreeOutline extends
1926
1951
  treeElement.removeChildAtIndex(i);
1927
1952
  }
1928
1953
 
1954
+ // Insert child nodes.
1929
1955
  for (let i = 0; i < visibleChildren.length && i < treeElement.expandedChildrenLimit(); ++i) {
1930
1956
  const child = visibleChildren[i];
1931
1957
  const existingTreeElement = existingTreeElements.get(child) || this.findTreeElement(child);
@@ -1935,7 +1961,7 @@ export class ElementsTreeOutline extends
1935
1961
  } else {
1936
1962
  // No existing element found, insert a new element.
1937
1963
  const newElement = this.insertChildElement(treeElement, child, i);
1938
- if (this.updateRecordForHighlight(node) && treeElement.expanded) {
1964
+ if (this.updateRecordForHighlight(node) && treeElement.expanded && newElement instanceof ElementsTreeElement) {
1939
1965
  ElementsTreeElement.animateOnDOMUpdate(newElement);
1940
1966
  }
1941
1967
  // If a node was inserted in the middle of existing list dynamically we might need to increase the limit.
@@ -398,7 +398,7 @@ export class VariableRenderer extends rendererBase(SDK.CSSPropertyParserMatchers
398
398
  if (fromFallback) {
399
399
  renderedFallback?.cssControls.get('color')?.forEach(
400
400
  innerSwatch => innerSwatch.addEventListener(InlineEditor.ColorSwatch.ColorChangedEvent.eventName, ev => {
401
- colorSwatch.setColor(ev.data.color);
401
+ colorSwatch.color = ev.data.color;
402
402
  }));
403
403
  }
404
404
 
@@ -516,7 +516,7 @@ export class AttributeRenderer extends rendererBase(SDK.CSSPropertyParserMatcher
516
516
  if (fromFallback) {
517
517
  renderedFallback?.cssControls.get('color')?.forEach(
518
518
  innerSwatch => innerSwatch.addEventListener(InlineEditor.ColorSwatch.ColorChangedEvent.eventName, ev => {
519
- colorSwatch.setColor(ev.data.color);
519
+ colorSwatch.color = ev.data.color;
520
520
  }));
521
521
  }
522
522
 
@@ -691,19 +691,19 @@ export class ColorRenderer extends rendererBase(SDK.CSSPropertyParserMatchers.Co
691
691
  context.ast.text(match.node.getChild('Callee')).match(/^(hsla?|hwba?)/)) {
692
692
  const [angle] = cssControls.get('angle') ?? [];
693
693
  if (angle instanceof InlineEditor.CSSAngle.CSSAngle) {
694
- angle.updateProperty(swatch.getColor()?.asString() ?? '');
694
+ angle.updateProperty(swatch.color?.asString() ?? '');
695
695
  angle.addEventListener(InlineEditor.InlineEditorUtils.ValueChangedEvent.eventName, ev => {
696
696
  const hue = Common.Color.parseHueNumeric(ev.data.value);
697
- const color = swatch.getColor();
697
+ const color = swatch.color;
698
698
  if (!hue || !color) {
699
699
  return;
700
700
  }
701
701
  if (color.is(Common.Color.Format.HSL) || color.is(Common.Color.Format.HSLA)) {
702
- swatch.setColor(new Common.Color.HSL(hue, color.s, color.l, color.alpha));
702
+ swatch.color = new Common.Color.HSL(hue, color.s, color.l, color.alpha);
703
703
  } else if (color.is(Common.Color.Format.HWB) || color.is(Common.Color.Format.HWBA)) {
704
- swatch.setColor(new Common.Color.HWB(hue, color.w, color.b, color.alpha));
704
+ swatch.color = new Common.Color.HWB(hue, color.w, color.b, color.alpha);
705
705
  }
706
- angle.updateProperty(swatch.getColor()?.asString() ?? '');
706
+ angle.updateProperty(swatch.color?.asString() ?? '');
707
707
  });
708
708
  }
709
709
  }
@@ -716,9 +716,9 @@ export class ColorRenderer extends rendererBase(SDK.CSSPropertyParserMatchers.Co
716
716
  const tooltip = editable ? i18nString(UIStrings.openColorPickerS, {PH1: shiftClickMessage}) : '';
717
717
 
718
718
  const swatch = new InlineEditor.ColorSwatch.ColorSwatch(tooltip);
719
- swatch.setReadonly(!editable);
719
+ swatch.readonly = !editable;
720
720
  if (color) {
721
- swatch.renderColor(color);
721
+ swatch.color = color;
722
722
  }
723
723
 
724
724
  if (this.#treeElement?.editable()) {
@@ -742,7 +742,7 @@ export class ColorRenderer extends rendererBase(SDK.CSSPropertyParserMatchers.Co
742
742
  new ColorSwatchPopoverIcon(treeElement, treeElement.parentPane().swatchPopoverHelper(), swatch);
743
743
  swatchIcon.addEventListener(ColorSwatchPopoverIconEvents.COLOR_CHANGED, ev => {
744
744
  valueChild.textContent = ev.data.getAuthoredText() ?? ev.data.asString();
745
- swatch.setColor(ev.data);
745
+ swatch.color = ev.data;
746
746
  });
747
747
  if (treeElement.property.name === 'color') {
748
748
  void this.#addColorContrastInfo(swatchIcon);
@@ -819,14 +819,15 @@ export class LightDarkColorRenderer extends rendererBase(SDK.CSSPropertyParserMa
819
819
 
820
820
  const activeColorSwatches = (activeColor === match.light ? lightControls : darkControls).get('color');
821
821
  activeColorSwatches?.forEach(
822
- swatch => swatch.addEventListener(
823
- InlineEditor.ColorSwatch.ColorChangedEvent.eventName, ev => colorSwatch.setColor(ev.data.color)));
822
+ swatch => swatch.addEventListener(InlineEditor.ColorSwatch.ColorChangedEvent.eventName, ev => {
823
+ colorSwatch.color = ev.data.color;
824
+ }));
824
825
  const inactiveColor = (activeColor === match.light) ? dark : light;
825
826
  const colorText = context.matchedResult.getComputedTextRange(activeColor[0], activeColor[activeColor.length - 1]);
826
827
  const color = colorText && Common.Color.parse(colorText);
827
828
  inactiveColor.classList.add('inactive-value');
828
829
  if (color) {
829
- colorSwatch.renderColor(color);
830
+ colorSwatch.color = color;
830
831
  }
831
832
  }
832
833
 
@@ -948,7 +949,7 @@ export class ColorMixRenderer extends rendererBase(SDK.CSSPropertyParserMatchers
948
949
  if (results) {
949
950
  const color = Common.Color.parse(results[0]);
950
951
  if (color) {
951
- swatch.setColor(color.as(Common.Color.Format.HEXA));
952
+ swatch.color = color.as(Common.Color.Format.HEXA);
952
953
  return true;
953
954
  }
954
955
  }
@@ -2023,7 +2023,7 @@ export class CSSPropertyPrompt extends UI.TextPrompt.TextPrompt {
2023
2023
 
2024
2024
  function colorSwatchRenderer(color: Common.Color.Color): Element {
2025
2025
  const swatch = new InlineEditor.ColorSwatch.ColorSwatch();
2026
- swatch.renderColor(color);
2026
+ swatch.color = color;
2027
2027
  swatch.style.pointerEvents = 'none';
2028
2028
  return swatch;
2029
2029
  }
@@ -1,7 +1,6 @@
1
1
  // Copyright 2014 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
- /* eslint-disable @devtools/no-imperative-dom-api */
5
4
 
6
5
  import * as Common from '../../core/common/common.js';
7
6
  import * as i18n from '../../core/i18n/i18n.js';
@@ -9,7 +8,9 @@ import * as Platform from '../../core/platform/platform.js';
9
8
  import * as SDK from '../../core/sdk/sdk.js';
10
9
  import * as Bindings from '../../models/bindings/bindings.js';
11
10
  import type * as Workspace from '../../models/workspace/workspace.js';
11
+ import {Directives, html, nothing, render} from '../../third_party/lit/lit.js';
12
12
  import * as UI from '../../ui/legacy/legacy.js';
13
+ import type {LitTemplate} from '../../ui/lit/lit.js';
13
14
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
14
15
 
15
16
  import mediaQueryInspectorStyles from './mediaQueryInspector.css.js';
@@ -23,40 +24,165 @@ const UIStrings = {
23
24
  } as const;
24
25
  const str_ = i18n.i18n.registerUIStrings('panels/emulation/MediaQueryInspector.ts', UIStrings);
25
26
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
27
+
28
+ const {classMap} = Directives;
29
+
30
+ export interface ViewInput {
31
+ zoomFactor: number;
32
+ markers: Map<Section, MediaQueryMarker[]>;
33
+ onMediaQueryClicked: (model: MediaQueryUIModel) => void;
34
+ onContextMenu: (event: Event, locations: SDK.CSSModel.CSSLocation[]) => void;
35
+ }
36
+
37
+ export interface MediaQueryMarker {
38
+ active: boolean;
39
+ model: MediaQueryUIModel;
40
+ locations: SDK.CSSModel.CSSLocation[];
41
+ }
42
+
43
+ export const DEFAULT_VIEW = (input: ViewInput, _output: object, target: HTMLElement): void => {
44
+ const createBarClassMap = (marker: MediaQueryMarker): Record<string, boolean> => ({
45
+ 'media-inspector-bar': true,
46
+ 'media-inspector-marker-inactive': !marker.active,
47
+ });
48
+ // clang-format off
49
+ render(html`
50
+ <style>${mediaQueryInspectorStyles}</style>
51
+ <div class='media-inspector-view'>
52
+ ${input.markers.entries().map(([section, markers]) => html`
53
+ <div class='media-inspector-marker-container'>
54
+ ${markers.map(marker => html`
55
+ <div
56
+ class=${classMap(createBarClassMap(marker))}
57
+ @click=${() => input.onMediaQueryClicked(marker.model)}
58
+ @contextmenu=${(event: Event) => input.onContextMenu(event, marker.locations)}
59
+ >
60
+ ${section === Section.MAX
61
+ ? renderMaxSection(input.zoomFactor, marker.model)
62
+ : section === Section.MIN_MAX
63
+ ? renderMinMaxSection(input.zoomFactor, marker.model)
64
+ : renderMinSection(input.zoomFactor, marker.model)}
65
+ </div>
66
+ `)}
67
+ </div>
68
+ `).toArray()}
69
+ </div>`, target);
70
+ // clang-format on
71
+ };
72
+
73
+ function renderMaxSection(zoomFactor: number, model: MediaQueryUIModel): LitTemplate {
74
+ // clang-format off
75
+ return html`
76
+ <div class='media-inspector-marker-spacer'></div>
77
+ <div
78
+ class='media-inspector-marker media-inspector-marker-max-width'
79
+ style=${'width: ' + model.maxWidthValue(zoomFactor) + 'px'}
80
+ title=${model.mediaText()}
81
+ >
82
+ ${renderLabel(model.maxWidthExpression(), false, false)}
83
+ ${renderLabel(model.maxWidthExpression(), true, true)}
84
+ </div>
85
+ <div class='media-inspector-marker-spacer'></div>
86
+ `;
87
+ // clang-format on
88
+ }
89
+
90
+ function renderMinMaxSection(zoomFactor: number, model: MediaQueryUIModel): LitTemplate {
91
+ const width = (model.maxWidthValue(zoomFactor) - model.minWidthValue(zoomFactor)) * 0.5;
92
+ // clang-format off
93
+ return html`
94
+ <div class='media-inspector-marker-spacer'></div>
95
+ <div
96
+ class='media-inspector-marker media-inspector-marker-min-max-width'
97
+ style=${'width: ' + width + 'px'}
98
+ title=${model.mediaText()}
99
+ >
100
+ ${renderLabel(model.maxWidthExpression(), true, false)}
101
+ ${renderLabel(model.minWidthExpression(), false, true)}
102
+ </div>
103
+ <div class='media-inspector-marker-spacer' style=${'flex: 0 0 ' + model.minWidthValue(zoomFactor) + 'px'}></div>
104
+ <div
105
+ class='media-inspector-marker media-inspector-marker-min-max-width'
106
+ style=${'width: ' + width + 'px'}
107
+ title=${model.mediaText()}
108
+ >
109
+ ${renderLabel(model.minWidthExpression(), true, false)}
110
+ ${renderLabel(model.maxWidthExpression(), false, true)}
111
+ </div>
112
+ <div class='media-inspector-marker-spacer'></div>
113
+ `;
114
+ // clang-format on
115
+ }
116
+
117
+ function renderMinSection(zoomFactor: number, model: MediaQueryUIModel): LitTemplate {
118
+ // clang-format off
119
+ return html`
120
+ <div
121
+ class='media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-left'
122
+ title=${model.mediaText()}
123
+ >${renderLabel(model.minWidthExpression(), false, false)}</div>
124
+ <div class='media-inspector-marker-spacer' style=${'flex: 0 0 ' + model.minWidthValue(zoomFactor) + 'px'}></div>
125
+ <div
126
+ class='media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-right'
127
+ title=${model.mediaText()}
128
+ >${renderLabel(model.minWidthExpression(), true, true)}</div>
129
+ `;
130
+ // clang-format on
131
+ }
132
+
133
+ function renderLabel(
134
+ expression: SDK.CSSMedia.CSSMediaQueryExpression|null, atLeft: boolean, leftAlign: boolean): LitTemplate {
135
+ if (!expression) {
136
+ return nothing;
137
+ }
138
+
139
+ const containerClassMap = {
140
+ 'media-inspector-marker-label-container': true,
141
+ 'media-inspector-marker-label-container-left': atLeft,
142
+ 'media-inspector-marker-label-container-right': !atLeft
143
+ };
144
+ const labelClassMap = {
145
+ 'media-inspector-marker-label': true,
146
+ 'media-inspector-label-left': leftAlign,
147
+ 'media-inspector-label-right': !leftAlign
148
+ };
149
+
150
+ // clang-format off
151
+ return html`
152
+ <div class=${classMap(containerClassMap)}>
153
+ <span class=${classMap(labelClassMap)}>${expression.value()}${expression.unit()}</span>
154
+ </div>
155
+ `;
156
+ // clang-format on
157
+ }
158
+
26
159
  export class MediaQueryInspector extends UI.Widget.Widget implements
27
160
  SDK.TargetManager.SDKModelObserver<SDK.CSSModel.CSSModel> {
161
+ private readonly view: typeof DEFAULT_VIEW;
28
162
  private readonly mediaThrottler: Common.Throttler.Throttler;
29
163
  private readonly getWidthCallback: () => number;
30
164
  private readonly setWidthCallback: (arg0: number) => void;
31
165
  private scale: number;
32
- elementsToMediaQueryModel: WeakMap<Element, MediaQueryUIModel>;
33
- elementsToCSSLocations: WeakMap<Element, SDK.CSSModel.CSSLocation[]>;
34
166
  private cssModel?: SDK.CSSModel.CSSModel;
35
167
  private cachedQueryModels?: MediaQueryUIModel[];
36
168
 
37
169
  constructor(
38
170
  getWidthCallback: () => number, setWidthCallback: (arg0: number) => void,
39
- mediaThrottler: Common.Throttler.Throttler) {
171
+ mediaThrottler: Common.Throttler.Throttler, view = DEFAULT_VIEW) {
40
172
  super({
41
173
  jslog: `${VisualLogging.mediaInspectorView().track({click: true})}`,
42
174
  useShadowDom: true,
43
175
  });
44
- this.registerRequiredCSS(mediaQueryInspectorStyles);
45
- this.contentElement.classList.add('media-inspector-view');
46
- this.contentElement.addEventListener('click', this.onMediaQueryClicked.bind(this), false);
47
- this.contentElement.addEventListener('contextmenu', this.onContextMenu.bind(this), false);
176
+ this.view = view;
48
177
  this.mediaThrottler = mediaThrottler;
49
178
 
50
179
  this.getWidthCallback = getWidthCallback;
51
180
  this.setWidthCallback = setWidthCallback;
52
181
  this.scale = 1;
53
182
 
54
- this.elementsToMediaQueryModel = new WeakMap();
55
- this.elementsToCSSLocations = new WeakMap();
56
-
57
183
  SDK.TargetManager.TargetManager.instance().observeModels(SDK.CSSModel.CSSModel, this);
58
184
  UI.ZoomManager.ZoomManager.instance().addEventListener(
59
- UI.ZoomManager.Events.ZOOM_CHANGED, this.renderMediaQueries.bind(this), this);
185
+ UI.ZoomManager.Events.ZOOM_CHANGED, this.requestUpdate.bind(this), this);
60
186
  }
61
187
 
62
188
  modelAdded(cssModel: SDK.CSSModel.CSSModel): void {
@@ -88,19 +214,10 @@ export class MediaQueryInspector extends UI.Widget.Widget implements
88
214
  return;
89
215
  }
90
216
  this.scale = scale;
91
- this.renderMediaQueries();
217
+ this.performUpdate();
92
218
  }
93
219
 
94
- private onMediaQueryClicked(event: Event): void {
95
- const mediaQueryMarker = (event.target as Node).enclosingNodeOrSelfWithClass('media-inspector-bar');
96
- if (!mediaQueryMarker) {
97
- return;
98
- }
99
-
100
- const model = this.elementsToMediaQueryModel.get(mediaQueryMarker);
101
- if (!model) {
102
- return;
103
- }
220
+ private onMediaQueryClicked(model: MediaQueryUIModel): void {
104
221
  const modelMaxWidth = model.maxWidthExpression();
105
222
  const modelMinWidth = model.minWidthExpression();
106
223
 
@@ -120,17 +237,11 @@ export class MediaQueryInspector extends UI.Widget.Widget implements
120
237
  }
121
238
  }
122
239
 
123
- private onContextMenu(event: Event): void {
240
+ private onContextMenu(event: Event, locations: SDK.CSSModel.CSSLocation[]): void {
124
241
  if (!this.cssModel?.isEnabled()) {
125
242
  return;
126
243
  }
127
244
 
128
- const mediaQueryMarker = (event.target as Node).enclosingNodeOrSelfWithClass('media-inspector-bar');
129
- if (!mediaQueryMarker) {
130
- return;
131
- }
132
-
133
- const locations = this.elementsToCSSLocations.get(mediaQueryMarker) || [];
134
245
  const uiLocations = new Map<string, Workspace.UISourceCode.UILocation>();
135
246
  for (let i = 0; i < locations.length; ++i) {
136
247
  const uiLocation =
@@ -214,24 +325,20 @@ export class MediaQueryInspector extends UI.Widget.Widget implements
214
325
  return;
215
326
  }
216
327
  this.cachedQueryModels = queryModels;
217
- this.renderMediaQueries();
328
+ this.requestUpdate();
218
329
 
219
330
  function compareModels(model1: MediaQueryUIModel, model2: MediaQueryUIModel): number {
220
331
  return model1.compareTo(model2);
221
332
  }
222
333
  }
223
334
 
224
- private renderMediaQueries(): void {
225
- if (!this.cachedQueryModels || !this.isShowing()) {
226
- return;
335
+ private buildMediaQueryMarkers(): MediaQueryMarker[] {
336
+ if (!this.cachedQueryModels) {
337
+ return [];
227
338
  }
228
339
 
229
- const markers = [];
230
- let lastMarker: {
231
- active: boolean,
232
- model: MediaQueryUIModel,
233
- locations: SDK.CSSModel.CSSLocation[],
234
- }|null = null;
340
+ const markers: MediaQueryMarker[] = [];
341
+ let lastMarker: MediaQueryMarker|null = null;
235
342
  for (const model of this.cachedQueryModels) {
236
343
  if (lastMarker?.model.dimensionsEqual(model)) {
237
344
  lastMarker.active = lastMarker.active || model.active();
@@ -239,7 +346,7 @@ export class MediaQueryInspector extends UI.Widget.Widget implements
239
346
  lastMarker = {
240
347
  active: model.active(),
241
348
  model,
242
- locations: ([] as SDK.CSSModel.CSSLocation[]),
349
+ locations: [],
243
350
  };
244
351
  markers.push(lastMarker);
245
352
  }
@@ -249,23 +356,7 @@ export class MediaQueryInspector extends UI.Widget.Widget implements
249
356
  }
250
357
  }
251
358
 
252
- this.contentElement.removeChildren();
253
-
254
- let container: HTMLElement|null = null;
255
- for (let i = 0; i < markers.length; ++i) {
256
- if (!i || markers[i].model.section() !== markers[i - 1].model.section()) {
257
- container = this.contentElement.createChild('div', 'media-inspector-marker-container');
258
- }
259
- const marker = markers[i];
260
- const bar = this.createElementFromMediaQueryModel(marker.model);
261
- this.elementsToMediaQueryModel.set(bar, marker.model);
262
- this.elementsToCSSLocations.set(bar, marker.locations);
263
- bar.classList.toggle('media-inspector-marker-inactive', !marker.active);
264
- if (!container) {
265
- throw new Error('Could not find container to render media queries into.');
266
- }
267
- container.appendChild(bar);
268
- }
359
+ return markers;
269
360
  }
270
361
 
271
362
  private zoomFactor(): number {
@@ -275,75 +366,20 @@ export class MediaQueryInspector extends UI.Widget.Widget implements
275
366
  override wasShown(): void {
276
367
  super.wasShown();
277
368
  this.scheduleMediaQueriesUpdate();
369
+ this.performUpdate(); // Trigger a manual update eagerly, DeviceModeView needs to measure our height.
278
370
  }
279
371
 
280
- private createElementFromMediaQueryModel(model: MediaQueryUIModel): Element {
281
- const zoomFactor = this.zoomFactor();
282
- const minWidthExpression = model.minWidthExpression();
283
- const maxWidthExpression = model.maxWidthExpression();
284
- const minWidthValue = minWidthExpression ? (minWidthExpression.computedLength() || 0) / zoomFactor : 0;
285
- const maxWidthValue = maxWidthExpression ? (maxWidthExpression.computedLength() || 0) / zoomFactor : 0;
286
- const result = document.createElement('div');
287
- result.classList.add('media-inspector-bar');
288
-
289
- if (model.section() === Section.MAX) {
290
- result.createChild('div', 'media-inspector-marker-spacer');
291
- const markerElement = result.createChild('div', 'media-inspector-marker media-inspector-marker-max-width');
292
- markerElement.style.width = maxWidthValue + 'px';
293
- UI.Tooltip.Tooltip.install(markerElement, model.mediaText());
294
- appendLabel(markerElement, model.maxWidthExpression(), false, false);
295
- appendLabel(markerElement, model.maxWidthExpression(), true, true);
296
- result.createChild('div', 'media-inspector-marker-spacer');
297
- }
298
-
299
- if (model.section() === Section.MIN_MAX) {
300
- result.createChild('div', 'media-inspector-marker-spacer');
301
- const leftElement = result.createChild('div', 'media-inspector-marker media-inspector-marker-min-max-width');
302
- leftElement.style.width = (maxWidthValue - minWidthValue) * 0.5 + 'px';
303
- UI.Tooltip.Tooltip.install(leftElement, model.mediaText());
304
- appendLabel(leftElement, model.maxWidthExpression(), true, false);
305
- appendLabel(leftElement, model.minWidthExpression(), false, true);
306
- result.createChild('div', 'media-inspector-marker-spacer').style.flex = '0 0 ' + minWidthValue + 'px';
307
- const rightElement = result.createChild('div', 'media-inspector-marker media-inspector-marker-min-max-width');
308
- rightElement.style.width = (maxWidthValue - minWidthValue) * 0.5 + 'px';
309
- UI.Tooltip.Tooltip.install(rightElement, model.mediaText());
310
- appendLabel(rightElement, model.minWidthExpression(), true, false);
311
- appendLabel(rightElement, model.maxWidthExpression(), false, true);
312
- result.createChild('div', 'media-inspector-marker-spacer');
313
- }
314
-
315
- if (model.section() === Section.MIN) {
316
- const leftElement = result.createChild(
317
- 'div', 'media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-left');
318
- UI.Tooltip.Tooltip.install(leftElement, model.mediaText());
319
- appendLabel(leftElement, model.minWidthExpression(), false, false);
320
- result.createChild('div', 'media-inspector-marker-spacer').style.flex = '0 0 ' + minWidthValue + 'px';
321
- const rightElement = result.createChild(
322
- 'div', 'media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-right');
323
- UI.Tooltip.Tooltip.install(rightElement, model.mediaText());
324
- appendLabel(rightElement, model.minWidthExpression(), true, true);
325
- }
326
-
327
- function appendLabel(
328
- marker: Element, expression: SDK.CSSMedia.CSSMediaQueryExpression|null, atLeft: boolean,
329
- leftAlign: boolean): void {
330
- if (!expression) {
331
- return;
332
- }
333
- marker
334
- .createChild(
335
- 'div',
336
- 'media-inspector-marker-label-container ' +
337
- (atLeft ? 'media-inspector-marker-label-container-left' :
338
- 'media-inspector-marker-label-container-right'))
339
- .createChild(
340
- 'span',
341
- 'media-inspector-marker-label ' +
342
- (leftAlign ? 'media-inspector-label-left' : 'media-inspector-label-right'))
343
- .textContent = expression.value() + expression.unit();
344
- }
345
-
346
- return result;
372
+ override performUpdate(): void {
373
+ const markers = Map.groupBy(this.buildMediaQueryMarkers(), marker => marker.model.section());
374
+
375
+ this.view(
376
+ {
377
+ zoomFactor: this.zoomFactor(),
378
+ markers,
379
+ onMediaQueryClicked: this.onMediaQueryClicked.bind(this),
380
+ onContextMenu: this.onContextMenu.bind(this),
381
+ },
382
+ {}, this.contentElement);
347
383
  }
348
384
  }
349
385
 
@@ -502,6 +538,16 @@ export class MediaQueryUIModel {
502
538
  return this.#maxWidthExpression;
503
539
  }
504
540
 
541
+ minWidthValue(zoomFactor: number): number {
542
+ const minWidthExpression = this.minWidthExpression();
543
+ return minWidthExpression ? (minWidthExpression.computedLength() || 0) / zoomFactor : 0;
544
+ }
545
+
546
+ maxWidthValue(zoomFactor: number): number {
547
+ const maxWidthExpression = this.maxWidthExpression();
548
+ return maxWidthExpression ? (maxWidthExpression.computedLength() || 0) / zoomFactor : 0;
549
+ }
550
+
505
551
  active(): boolean {
506
552
  return this.#active;
507
553
  }