chrome-devtools-frontend 1.0.1675430 → 1.0.1678416

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 (308) hide show
  1. package/AUTHORS +1 -0
  2. package/WATCHLISTS +0 -4
  3. package/front_end/core/common/EventTarget.ts +0 -5
  4. package/front_end/core/common/Settings.ts +0 -66
  5. package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
  6. package/front_end/core/host/UserMetrics.ts +5 -0
  7. package/front_end/core/root/Runtime.ts +5 -5
  8. package/front_end/core/sdk/CSSMetadata.ts +5 -9
  9. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +16 -34
  10. package/front_end/core/sdk/DebuggerModel.ts +92 -57
  11. package/front_end/core/sdk/EmulationModel.ts +2 -1
  12. package/front_end/core/sdk/NetworkManager.ts +16 -2
  13. package/front_end/core/sdk/OverlayModel.ts +19 -9
  14. package/front_end/core/sdk/OverlayPersistentHighlighter.ts +10 -4
  15. package/front_end/core/sdk/ResourceTreeModel.ts +20 -1
  16. package/front_end/core/sdk/SDKSettings.ts +117 -0
  17. package/front_end/core/sdk/Script.ts +9 -53
  18. package/front_end/core/sdk/sdk-meta.ts +0 -431
  19. package/front_end/devtools_compatibility.js +1 -0
  20. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
  21. package/front_end/entrypoints/inspector_main/InspectorMain.ts +6 -5
  22. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +14 -15
  23. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +157 -0
  24. package/front_end/entrypoints/main/MainImpl.ts +32 -0
  25. package/front_end/entrypoints/shell/shell.ts +0 -1
  26. package/front_end/foundation/Universe.ts +8 -0
  27. package/front_end/generated/InspectorBackendCommands.ts +8 -8
  28. package/front_end/generated/SupportedCSSProperties.ts +53 -4
  29. package/front_end/generated/protocol-mapping.d.ts +27 -21
  30. package/front_end/generated/protocol-proxy-api.d.ts +22 -17
  31. package/front_end/generated/protocol.ts +43 -18
  32. package/front_end/models/ai_assistance/AiAgent2.ts +47 -2
  33. package/front_end/models/ai_assistance/AiConversation.ts +22 -5
  34. package/front_end/models/ai_assistance/README.md +52 -26
  35. package/front_end/models/ai_assistance/agents/AiAgent.ts +54 -8
  36. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
  37. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +7 -194
  38. package/front_end/models/ai_assistance/agents/StorageAgent.ts +21 -87
  39. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -1
  40. package/front_end/models/ai_assistance/ai_assistance.ts +24 -0
  41. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +124 -0
  42. package/front_end/models/ai_assistance/contexts/StorageContext.ts +100 -0
  43. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +69 -1
  44. package/front_end/models/ai_assistance/skills/README.md +63 -1
  45. package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
  46. package/front_end/models/ai_assistance/skills/SkillRegistry.ts +4 -0
  47. package/front_end/models/ai_assistance/skills/accessibility.md +7 -0
  48. package/front_end/models/ai_assistance/skills/performance.md +15 -1
  49. package/front_end/models/ai_assistance/skills/sources.md +16 -0
  50. package/front_end/models/ai_assistance/skills/storage.md +31 -0
  51. package/front_end/models/ai_assistance/tools/GetDetailedCallTree.ts +107 -0
  52. package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +122 -0
  53. package/front_end/models/ai_assistance/tools/GetResourceContent.ts +127 -0
  54. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +101 -0
  55. package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +83 -0
  56. package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +106 -0
  57. package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +104 -0
  58. package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +95 -0
  59. package/front_end/models/ai_assistance/tools/ListSources.ts +116 -0
  60. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +89 -0
  61. package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +90 -0
  62. package/front_end/models/ai_assistance/tools/Tool.ts +26 -1
  63. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +22 -0
  64. package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -0
  65. package/front_end/models/bindings/CompilerScriptMapping.ts +4 -0
  66. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
  67. package/front_end/models/bindings/ResourceScriptMapping.ts +3 -201
  68. package/front_end/models/bindings/SASSSourceMapping.ts +6 -0
  69. package/front_end/models/breakpoints/BreakpointManager.ts +2 -49
  70. package/front_end/models/comment_manager/CommentManager.ts +141 -0
  71. package/front_end/models/comment_manager/comment_manager.ts +9 -0
  72. package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +27 -0
  73. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +10 -2
  74. package/front_end/models/issues_manager/descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
  75. package/front_end/models/issues_manager/descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
  76. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
  77. package/front_end/models/javascript_metadata/NativeFunctions.js +6 -6
  78. package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
  79. package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -2
  80. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  81. package/front_end/models/persistence/persistence-meta.ts +9 -9
  82. package/front_end/models/trace/types/TraceEvents.ts +36 -0
  83. package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -3
  84. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +25 -0
  85. package/front_end/panels/accessibility/AccessibilityNodeView.ts +36 -36
  86. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -0
  87. package/front_end/panels/accessibility/AccessibilityStrings.ts +168 -168
  88. package/front_end/panels/accessibility/SourceOrderView.ts +7 -7
  89. package/front_end/panels/accessibility/accessibility-meta.ts +2 -2
  90. package/front_end/panels/accessibility/accessibility.ts +2 -0
  91. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -5
  92. package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +2 -3
  93. package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
  94. package/front_end/panels/ai_assistance/components/ChatMessage.ts +92 -12
  95. package/front_end/panels/ai_assistance/components/chatMessage.css +6 -0
  96. package/front_end/panels/application/ApplicationPanelSidebar.ts +10 -4
  97. package/front_end/panels/application/IndexedDBViews.ts +65 -63
  98. package/front_end/panels/application/StorageView.ts +116 -45
  99. package/front_end/panels/application/WebMCPView.ts +16 -7
  100. package/front_end/panels/application/application-meta.ts +11 -0
  101. package/front_end/panels/application/components/AdsView.ts +1 -1
  102. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +5 -5
  103. package/front_end/panels/common/BadgeNotification.ts +8 -8
  104. package/front_end/panels/common/ExtensionPanel.ts +9 -8
  105. package/front_end/panels/common/ExtensionServer.ts +21 -1
  106. package/front_end/panels/common/GdpSignUpDialog.ts +16 -16
  107. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -6
  108. package/front_end/panels/common/PersistenceUtils.ts +2 -2
  109. package/front_end/panels/common/common.ts +0 -97
  110. package/front_end/panels/console/ConsoleInsightTeaser.ts +2 -2
  111. package/front_end/panels/console/ConsolePanel.ts +4 -0
  112. package/front_end/panels/console/ConsolePinPane.ts +2 -2
  113. package/front_end/panels/console/ConsolePrompt.ts +12 -0
  114. package/front_end/panels/console/ConsoleView.ts +31 -20
  115. package/front_end/panels/console/ConsoleViewMessage.ts +37 -13
  116. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
  117. package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
  118. package/front_end/panels/elements/ElementStatePaneWidget.ts +2 -1
  119. package/front_end/panels/elements/ElementsTreeElement.ts +455 -372
  120. package/front_end/panels/elements/LayoutPane.ts +2 -8
  121. package/front_end/panels/elements/StylePropertyTreeElement.ts +16 -15
  122. package/front_end/panels/elements/elements-meta.ts +152 -10
  123. package/front_end/panels/elements/elements.ts +0 -2
  124. package/front_end/panels/emulation/DeviceModeView.ts +9 -1
  125. package/front_end/panels/event_listeners/EventListenersView.ts +8 -4
  126. package/front_end/panels/issues/AffectedTrackingSitesView.ts +25 -14
  127. package/front_end/panels/lighthouse/LighthouseController.ts +3 -2
  128. package/front_end/panels/media/PlayerMessagesView.ts +149 -68
  129. package/front_end/panels/network/BinaryResourceView.ts +134 -81
  130. package/front_end/panels/network/EventSourceMessagesView.ts +10 -10
  131. package/front_end/panels/network/FetchHeaderCommenting.ts +291 -0
  132. package/front_end/panels/network/NetworkConfigView.ts +10 -10
  133. package/front_end/panels/network/NetworkDataGridNode.ts +14 -14
  134. package/front_end/panels/network/NetworkItemView.ts +27 -28
  135. package/front_end/panels/network/NetworkLogView.ts +137 -38
  136. package/front_end/panels/network/NetworkLogViewColumns.ts +35 -35
  137. package/front_end/panels/network/NetworkManageCustomHeadersView.ts +1 -1
  138. package/front_end/panels/network/NetworkPanel.ts +2 -2
  139. package/front_end/panels/network/RequestConditionsDrawer.ts +5 -5
  140. package/front_end/panels/network/RequestCookiesView.ts +4 -4
  141. package/front_end/panels/network/RequestHeadersView.ts +5 -5
  142. package/front_end/panels/network/RequestPayloadView.ts +4 -3
  143. package/front_end/panels/network/RequestTimingView.ts +8 -8
  144. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  145. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
  146. package/front_end/panels/network/ResourceWebSocketFrameView.ts +16 -16
  147. package/front_end/panels/network/binaryResourceView.css +14 -12
  148. package/front_end/panels/network/components/DirectSocketConnectionView.ts +2 -2
  149. package/front_end/panels/network/components/HeaderSectionRow.ts +1 -1
  150. package/front_end/panels/network/components/RequestTrustTokensView.ts +2 -2
  151. package/front_end/panels/network/network-meta.ts +1 -1
  152. package/front_end/panels/network/network.ts +2 -0
  153. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +0 -1
  154. package/front_end/panels/profiler/HeapSnapshotView.ts +0 -2
  155. package/front_end/panels/profiler/heapProfiler.css +0 -9
  156. package/front_end/panels/recorder/RecorderPanel.ts +2 -3
  157. package/front_end/panels/screencast/ScreencastView.ts +148 -138
  158. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +2 -2
  159. package/front_end/panels/sources/BreakpointsView.ts +2 -2
  160. package/front_end/panels/sources/DebuggerPlugin.ts +10 -59
  161. package/front_end/panels/sources/NavigatorView.ts +2 -1
  162. package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
  163. package/front_end/panels/sources/SourcesPanel.ts +23 -73
  164. package/front_end/panels/sources/SourcesView.ts +248 -157
  165. package/front_end/panels/sources/TabbedEditorContainer.ts +118 -23
  166. package/front_end/panels/sources/UISourceCodeFrame.ts +5 -9
  167. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +4 -2
  168. package/front_end/panels/sources/sources-meta.ts +52 -0
  169. package/front_end/panels/timeline/TimelineController.ts +36 -64
  170. package/front_end/panels/timeline/TimelinePanel.ts +11 -8
  171. package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
  172. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
  173. package/front_end/panels/timeline/timelinePanel.css +0 -10
  174. package/front_end/panels/utils/utils.ts +7 -7
  175. package/front_end/services/tracing/PerformanceTracing.ts +5 -17
  176. package/front_end/third_party/chromium/README.chromium +1 -1
  177. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  178. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  179. package/front_end/third_party/codemirror.next/package.json +2 -2
  180. package/front_end/third_party/codemirror.next/rebuild.sh +4 -1
  181. package/front_end/ui/comments/CommentAnchorResolver.ts +430 -35
  182. package/front_end/ui/comments/CommentOverlayManager.ts +635 -0
  183. package/front_end/ui/comments/CommentsOverlayWidget.ts +134 -0
  184. package/front_end/ui/comments/comments.ts +4 -0
  185. package/front_end/ui/comments/commentsOverlay.css +49 -0
  186. package/front_end/{panels/common → ui/components/dialogs}/FreDialog.ts +6 -6
  187. package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +96 -0
  188. package/front_end/ui/components/dialogs/dialogs.ts +4 -0
  189. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
  190. package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionDisclaimer.ts +13 -13
  191. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -6
  192. package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionTeaser.ts +43 -46
  193. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +22 -26
  194. package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationTeaser.ts +10 -10
  195. package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationUpgradeDialog.ts +5 -5
  196. package/front_end/ui/components/text_editor/text_editor.ts +4 -0
  197. package/front_end/ui/legacy/Toolbar.ts +1 -1
  198. package/front_end/ui/legacy/UIUtils.ts +0 -56
  199. package/front_end/ui/legacy/View.ts +10 -4
  200. package/front_end/ui/legacy/Widget.ts +10 -1
  201. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +2 -1
  202. package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +5 -4
  203. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +11 -3
  204. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +507 -209
  205. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +5 -0
  206. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -16
  207. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +5 -12
  208. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +38 -20
  209. package/front_end/ui/legacy/components/source_frame/JSONView.ts +12 -2
  210. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +3 -3
  211. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +37 -6
  212. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +22 -4
  213. package/front_end/ui/settings/SettingUIRegistration.ts +55 -6
  214. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  215. package/mcp/mcp.ts +6 -1
  216. package/package.json +6 -6
  217. package/front_end/Images/toolbarResizerVertical.png +0 -0
  218. package/front_end/emulated_devices/MotoG4-landscape.svg +0 -155
  219. package/front_end/emulated_devices/MotoG4-portrait.svg +0 -155
  220. package/front_end/emulated_devices/Nexus5X-landscape.svg +0 -19
  221. package/front_end/emulated_devices/Nexus5X-portrait.svg +0 -19
  222. package/front_end/emulated_devices/Nexus6P-landscape.svg +0 -50
  223. package/front_end/emulated_devices/Nexus6P-portrait.svg +0 -54
  224. package/front_end/emulated_devices/google-nest-hub-horizontal.png +0 -0
  225. package/front_end/emulated_devices/google-nest-hub-max-horizontal.png +0 -0
  226. package/front_end/emulated_devices/google-nexus-5-horizontal-default-1x.png +0 -0
  227. package/front_end/emulated_devices/google-nexus-5-horizontal-default-2x.png +0 -0
  228. package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png +0 -0
  229. package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png +0 -0
  230. package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-1x.png +0 -0
  231. package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-2x.png +0 -0
  232. package/front_end/emulated_devices/google-nexus-5-vertical-default-1x.png +0 -0
  233. package/front_end/emulated_devices/google-nexus-5-vertical-default-2x.png +0 -0
  234. package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-1x.png +0 -0
  235. package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-2x.png +0 -0
  236. package/front_end/emulated_devices/google-nexus-5-vertical-navigation-1x.png +0 -0
  237. package/front_end/emulated_devices/google-nexus-5-vertical-navigation-2x.png +0 -0
  238. package/front_end/emulated_devices/google-nexus-5x-horizontal-default-1x.png +0 -0
  239. package/front_end/emulated_devices/google-nexus-5x-horizontal-default-2x.png +0 -0
  240. package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png +0 -0
  241. package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png +0 -0
  242. package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png +0 -0
  243. package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png +0 -0
  244. package/front_end/emulated_devices/google-nexus-5x-vertical-default-1x.png +0 -0
  245. package/front_end/emulated_devices/google-nexus-5x-vertical-default-2x.png +0 -0
  246. package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png +0 -0
  247. package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png +0 -0
  248. package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-1x.png +0 -0
  249. package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-2x.png +0 -0
  250. package/front_end/emulated_devices/iPad-landscape.svg +0 -73
  251. package/front_end/emulated_devices/iPad-portrait.svg +0 -76
  252. package/front_end/emulated_devices/iPhone5-landscape.svg +0 -99
  253. package/front_end/emulated_devices/iPhone5-portrait.svg +0 -83
  254. package/front_end/emulated_devices/iPhone6-landscape.svg +0 -111
  255. package/front_end/emulated_devices/iPhone6-portrait.svg +0 -116
  256. package/front_end/emulated_devices/iPhone6Plus-landscape.svg +0 -118
  257. package/front_end/emulated_devices/iPhone6Plus-portrait.svg +0 -116
  258. package/front_end/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
  259. package/front_end/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
  260. package/front_end/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
  261. package/front_end/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
  262. package/front_end/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
  263. package/front_end/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
  264. package/front_end/emulated_devices/optimized/README.md +0 -9
  265. package/front_end/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
  266. package/front_end/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
  267. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
  268. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
  269. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
  270. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
  271. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
  272. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
  273. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
  274. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
  275. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
  276. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
  277. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
  278. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
  279. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
  280. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
  281. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
  282. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
  283. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
  284. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
  285. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
  286. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
  287. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
  288. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
  289. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
  290. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
  291. package/front_end/emulated_devices/optimized/iPad-landscape.avif +0 -0
  292. package/front_end/emulated_devices/optimized/iPad-portrait.avif +0 -0
  293. package/front_end/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
  294. package/front_end/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
  295. package/front_end/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
  296. package/front_end/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
  297. package/front_end/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
  298. package/front_end/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
  299. package/front_end/emulated_devices/optimized/optimized_images.gni +0 -53
  300. package/front_end/models/ai_assistance/agents/README.md +0 -136
  301. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +0 -89
  302. package/front_end/ui/legacy/components/object_ui/object_ui-meta.ts +0 -27
  303. /package/front_end/{panels/common → ui/components/dialogs}/freDialog.css +0 -0
  304. /package/front_end/{panels/common/common.css → ui/components/dialogs/typeToAllowDialog.css} +0 -0
  305. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionDisclaimer.css +0 -0
  306. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionTeaser.css +0 -0
  307. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationTeaser.css +0 -0
  308. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationUpgradeDialog.css +0 -0
@@ -6,9 +6,9 @@
6
6
  import '../../ui/legacy/legacy.js';
7
7
 
8
8
  import * as Common from '../../core/common/common.js';
9
- import * as Host from '../../core/host/host.js';
10
9
  import * as i18n from '../../core/i18n/i18n.js';
11
10
  import * as Platform from '../../core/platform/platform.js';
11
+ import * as Root from '../../core/root/root.js';
12
12
  import * as SDK from '../../core/sdk/sdk.js';
13
13
  import * as Bindings from '../../models/bindings/bindings.js';
14
14
  import * as Persistence from '../../models/persistence/persistence.js';
@@ -16,7 +16,7 @@ import * as Workspace from '../../models/workspace/workspace.js';
16
16
  import * as QuickOpen from '../../ui/legacy/components/quick_open/quick_open.js';
17
17
  import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
18
18
  import * as UI from '../../ui/legacy/legacy.js';
19
- import {html, render} from '../../ui/lit/lit.js';
19
+ import {Directives, html, render} from '../../ui/lit/lit.js';
20
20
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
21
21
 
22
22
  import * as Components from './components/components.js';
@@ -25,6 +25,7 @@ import sourcesViewStyles from './sourcesView.css.js';
25
25
  import {
26
26
  type EditorSelectedEvent,
27
27
  Events as TabbedEditorContainerEvents,
28
+ type SerializedHistoryItem,
28
29
  TabbedEditorContainer,
29
30
  type TabbedEditorContainerDelegate,
30
31
  } from './TabbedEditorContainer.js';
@@ -32,93 +33,83 @@ import {Events as UISourceCodeFrameEvents, UISourceCodeFrame} from './UISourceCo
32
33
 
33
34
  const UIStrings = {
34
35
  /**
35
- * @description Text to open a file.
36
+ * @description Tooltip for the navigator toggle in the Sources panel. Command to open or show the
37
+ * sidebar containing the navigator tool.
36
38
  */
37
- openFile: 'Open file',
39
+ showNavigator: 'Show navigator',
38
40
  /**
39
- * @description Text to run commands.
41
+ * @description Tooltip for the navigator toggle in the Sources panel. Command to close or hide
42
+ * the sidebar containing the navigator tool.
40
43
  */
41
- runCommand: 'Run command',
44
+ hideNavigator: 'Hide navigator',
42
45
  /**
43
- * @description Text in Sources view of the Sources panel.
46
+ * @description Screen reader announcement when the navigator sidebar is shown in the Sources panel.
44
47
  */
45
- workspaceDropInAFolderToSyncSources: 'To sync edits to the workspace, drop a folder with your sources here or',
48
+ navigatorShown: 'Navigator sidebar shown',
46
49
  /**
47
- * @description Text in Sources view of the Sources panel.
50
+ * @description Screen reader announcement when the navigator sidebar is hidden in the Sources panel.
48
51
  */
49
- selectFolder: 'Select folder',
52
+ navigatorHidden: 'Navigator sidebar hidden',
50
53
  /**
51
- * @description Accessible label for Sources placeholder view actions list.
54
+ * @description Screen reader announcement when the debugger sidebar is shown in the Sources panel.
52
55
  */
53
- sourceViewActions: 'Source View Actions',
56
+ debuggerShown: 'Debugger sidebar shown',
57
+ /**
58
+ * @description Screen reader announcement when the debugger sidebar is hidden in the Sources panel.
59
+ */
60
+ debuggerHidden: 'Debugger sidebar hidden',
61
+ /**
62
+ * @description Tooltip for the debugger toggle in the Sources panel. Command to open or show the
63
+ * sidebar containing the debugger tool.
64
+ */
65
+ showDebugger: 'Show debugger',
66
+ /**
67
+ * @description Tooltip for the debugger toggle in the Sources panel. Command to close or hide the
68
+ * sidebar containing the debugger tool.
69
+ */
70
+ hideDebugger: 'Hide debugger',
54
71
  } as const;
55
72
  const str_ = i18n.i18n.registerUIStrings('panels/sources/SourcesView.ts', UIStrings);
56
73
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
57
74
 
58
- export interface Shortcut {
59
- description: string;
60
- onClick: () => void;
61
- keys: string[];
62
- }
75
+ const {widget, widgetRef} = UI.Widget;
63
76
 
64
77
  export interface ViewInput {
65
- placeholderElement: HTMLElement;
66
- scriptViewToolbar: UI.Toolbar.Toolbar;
67
- bottomToolbar: UI.Toolbar.Toolbar;
68
- leftToolbarItems: UI.Toolbar.ToolbarItem[];
69
- rightToolbarItems: UI.Toolbar.ToolbarItem[];
70
- searchableView: UI.SearchableView.SearchableView;
71
- editorContainer: TabbedEditorContainer;
72
- shortcuts: Shortcut[];
78
+ searchProvider: UI.SearchableView.Searchable;
79
+ replaceProvider: UI.SearchableView.Replaceable;
80
+ searchableViewId: string;
81
+ scriptViewToolbarItems: UI.Toolbar.ToolbarItem[];
82
+ bottomToolbarItems: UI.Toolbar.ToolbarItem[];
83
+ searchableViewFactory: () => UI.Widget.Widget;
84
+ delegate: TabbedEditorContainerDelegate;
85
+ previouslyViewedFilesSetting: Common.Settings.Setting<SerializedHistoryItem[]>;
73
86
  }
74
87
 
75
88
  export interface ViewOutput {
76
- onSelectFolderClicked: () => void;
89
+ scriptViewToolbar?: UI.Toolbar.Toolbar;
90
+ editorContainer?: TabbedEditorContainer;
77
91
  }
78
92
 
79
93
  export type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
80
94
 
81
- export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLElement): void => {
95
+ export const DEFAULT_VIEW: View = (input, output, target): void => {
96
+ // clang-format off
82
97
  render(html`
83
- <devtools-widget class="vbox flex-auto" ${UI.Widget.widget(() => input.searchableView)}>
84
- <devtools-widget class="vbox flex-auto" ${UI.Widget.widget(() => input.editorContainer.view)}>
98
+ <devtools-widget class="vbox flex-auto" ${widget(input.searchableViewFactory)}>
99
+ <devtools-widget class="vbox flex-auto"
100
+ ${widget(TabbedEditorContainer, {delegate: input.delegate, previouslyViewedFilesSetting: input.previouslyViewedFilesSetting})}
101
+ ${widgetRef(TabbedEditorContainer, e => { output.editorContainer = e; })}>
85
102
  </devtools-widget>
86
103
  </devtools-widget>
87
104
  <div class="sources-toolbar" jslog=${VisualLogging.toolbar('bottom')}>
88
- ${input.scriptViewToolbar}
89
- ${input.bottomToolbar}
90
- </div>`,
91
- target);
92
-
93
- // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
94
- render(html`
95
- <div class="tabbed-pane-placeholder-row workspace">
96
- <span class="icon-container">
97
- <devtools-icon name="sync" class="sync-icon"></devtools-icon>
98
- </span>
99
- <span>
100
- ${i18nString(UIStrings.workspaceDropInAFolderToSyncSources)}
101
- <button @click=${() => output.onSelectFolderClicked()}>${i18nString(UIStrings.selectFolder)}</button>
102
- </span>
103
- </div>
104
-
105
- <div class="shortcuts-list tabbed-pane-placeholder-row" role="list"
106
- aria-label=${i18nString(UIStrings.sourceViewActions)}>
107
- ${input.shortcuts.map(shortcut => {
108
- if (!shortcut.keys.length) {
109
- return html`<div class="shortcut-line" role="listitem"></div>`;
110
- }
111
- return html`<div class="shortcut-line" role="listitem">
112
- <button @click=${shortcut.onClick}>${shortcut.description}</button>
113
- <span class="shortcuts">
114
- ${shortcut.keys.map(key => html`
115
- <span class="keybinds-key"><span>${key}</span></span>
116
- `)}
117
- </span>
118
- </div>`;
119
- })}
120
- </div>`,
121
- input.placeholderElement);
105
+ <devtools-toolbar class="script-view-toolbar" style="flex: auto;" ${Directives.ref(el => { output.scriptViewToolbar = el as UI.Toolbar.Toolbar; })}>
106
+ ${input.scriptViewToolbarItems.map(item => item.element)}
107
+ </devtools-toolbar>
108
+ <devtools-toolbar class="bottom-toolbar">
109
+ ${input.bottomToolbarItems.map(item => item.element)}
110
+ </devtools-toolbar>
111
+ </div>`, target);
112
+ // clang-format on
122
113
  };
123
114
 
124
115
  export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox>(UI.Widget.VBox)
@@ -128,19 +119,35 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
128
119
  editorContainer?: TabbedEditorContainer;
129
120
  #uiSourceCodes = new Set<Workspace.UISourceCode.UISourceCode>();
130
121
  private readonly historyManager: EditingLocationHistoryManager;
131
- readonly #scriptViewToolbar: UI.Toolbar.Toolbar;
132
- readonly #bottomToolbar: UI.Toolbar.Toolbar;
122
+ #scriptViewToolbar?: UI.Toolbar.Toolbar;
123
+ #scriptViewToolbarItems: UI.Toolbar.ToolbarItem[] = [];
124
+ #bottomToolbarItems: UI.Toolbar.ToolbarItem[] = [];
133
125
  private toolbarChangedListener: Common.EventTarget.EventDescriptor|null;
134
- private readonly focusedPlaceholderElement?: HTMLElement;
135
126
  private searchView?: UISourceCodeFrame;
136
127
  private searchConfig?: UI.SearchableView.SearchConfig;
137
- #leftToolbarItems: UI.Toolbar.ToolbarItem[] = [];
138
- #rightToolbarItems: UI.Toolbar.ToolbarItem[] = [];
139
- #placeholderElement: HTMLElement;
140
128
  #view: View = DEFAULT_VIEW;
141
129
 
130
+ #toggleNavigatorSidebarButton: UI.Toolbar.ToolbarButton;
131
+ #toggleDebuggerSidebarButton: UI.Toolbar.ToolbarButton;
132
+ #onToggleNavigatorSidebar?: () => void;
133
+ #onToggleDebuggerSidebar?: () => void;
134
+ #isNavigatorSidebarOpen = false;
135
+ #isDebuggerSidebarOpen = false;
136
+ #navigatorSidebarInitialized = false;
137
+ #debuggerSidebarInitialized = false;
138
+ #isVertical = false;
139
+ #leftToolbarItems?: UI.Toolbar.ToolbarItem[];
140
+ #rightToolbarItems?: UI.Toolbar.ToolbarItem[];
141
+ #breakpointsActive?: boolean;
142
+ #editorContainerPromise: Promise<TabbedEditorContainer>;
143
+ #editorContainerResolve!: (container: TabbedEditorContainer) => void;
144
+ readonly previouslyViewedFilesSetting: Common.Settings.Setting<SerializedHistoryItem[]>;
145
+
142
146
  constructor() {
143
147
  super({jslog: `${VisualLogging.pane('editor').track({keydown: 'Escape'})}`});
148
+ this.#editorContainerPromise = new Promise(resolve => {
149
+ this.#editorContainerResolve = resolve;
150
+ });
144
151
  this.registerRequiredCSS(sourcesViewStyles);
145
152
 
146
153
  this.element.id = 'sources-panel-sources-view';
@@ -148,28 +155,31 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
148
155
 
149
156
  const workspace = Workspace.Workspace.WorkspaceImpl.instance();
150
157
 
151
- this.#placeholderElement = document.createElement('div');
152
- this.#placeholderElement.classList.add('sources-placeholder');
153
-
154
158
  this.sourceViewByUISourceCode = new Map();
155
159
 
156
160
  this.historyManager = new EditingLocationHistoryManager(this);
157
161
 
158
- this.#scriptViewToolbar = document.createElement('devtools-toolbar') as UI.Toolbar.Toolbar;
159
- this.#scriptViewToolbar.style.flex = 'auto';
160
- this.#bottomToolbar = document.createElement('devtools-toolbar') as UI.Toolbar.Toolbar;
161
-
162
162
  this.toolbarChangedListener = null;
163
163
 
164
- this.#searchableView = new UI.SearchableView.SearchableView(this, this, 'sources-view-search-config');
165
- this.#searchableView.setMinimalSearchQuerySize(0);
164
+ this.#toggleNavigatorSidebarButton =
165
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.showNavigator), 'left-panel-open');
166
+ this.#toggleNavigatorSidebarButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
167
+ this.#onToggleNavigatorSidebar?.();
168
+ });
169
+ this.#toggleNavigatorSidebarButton.element.setAttribute(
170
+ 'jslog', `${VisualLogging.toggleSubpane().track({click: true}).context('navigator')}`);
166
171
 
167
- const previouslyViewedFilesSetting =
172
+ this.#toggleDebuggerSidebarButton =
173
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.showDebugger), 'right-panel-open');
174
+ this.#toggleDebuggerSidebarButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
175
+ this.#onToggleDebuggerSidebar?.();
176
+ });
177
+ this.#toggleDebuggerSidebarButton.element.setAttribute(
178
+ 'jslog', `${VisualLogging.toggleSubpane().track({click: true}).context('debugger')}`);
179
+
180
+ this.previouslyViewedFilesSetting =
168
181
  Common.Settings.Settings.instance().createLocalSetting('previously-viewed-files', []);
169
- this.editorContainer = new TabbedEditorContainer(this, previouslyViewedFilesSetting, this.#placeholderElement,
170
- this.focusedPlaceholderElement);
171
- this.editorContainer.addEventListener(TabbedEditorContainerEvents.EDITOR_SELECTED, this.editorSelected, this);
172
- this.editorContainer.addEventListener(TabbedEditorContainerEvents.EDITOR_CLOSED, this.editorClosed, this);
182
+ this.requestUpdate();
173
183
 
174
184
  UI.UIUtils.startBatchUpdate();
175
185
  workspace.uiSourceCodes().forEach(ui => this.addUISourceCode(ui));
@@ -180,8 +190,6 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
180
190
  workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved, this.projectRemoved.bind(this), this);
181
191
  SDK.TargetManager.TargetManager.instance().addScopeChangeListener(this.#onScopeChange.bind(this));
182
192
 
183
- this.requestUpdate();
184
-
185
193
  function handleBeforeUnload(event: Event): void {
186
194
  if (event.returnValue) {
187
195
  return;
@@ -216,19 +224,23 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
216
224
 
217
225
  override performUpdate(): void {
218
226
  const input: ViewInput = {
219
- placeholderElement: this.#placeholderElement,
220
- scriptViewToolbar: this.#scriptViewToolbar,
221
- bottomToolbar: this.#bottomToolbar,
222
- leftToolbarItems: this.#leftToolbarItems,
223
- rightToolbarItems: this.#rightToolbarItems,
224
- searchableView: this.#searchableView,
225
- editorContainer: this.editorContainer as TabbedEditorContainer,
226
- shortcuts: this.#getPlaceholderShortcuts(),
227
+ searchProvider: this,
228
+ replaceProvider: this,
229
+ searchableViewId: 'sources-view-search-config',
230
+ scriptViewToolbarItems: this.#scriptViewToolbarItems,
231
+ bottomToolbarItems: this.#bottomToolbarItems,
232
+ searchableViewFactory: this.#searchableViewFactory,
233
+ delegate: this,
234
+ previouslyViewedFilesSetting: this.previouslyViewedFilesSetting,
227
235
  };
228
236
 
237
+ const that = this;
229
238
  const output: ViewOutput = {
230
- onSelectFolderClicked: () => {
231
- void this.addFileSystemClicked();
239
+ set scriptViewToolbar(value: UI.Toolbar.Toolbar) {
240
+ that.#scriptViewToolbar = value;
241
+ },
242
+ set editorContainer(value: TabbedEditorContainer) {
243
+ that.setEditorContainer(value);
232
244
  },
233
245
  };
234
246
 
@@ -237,43 +249,44 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
237
249
 
238
250
  override onDetach(): void {
239
251
  super.onDetach();
240
- this.editorContainer?.view.detachChildWidgets();
252
+ this.editorContainer?.detachEditors();
241
253
  }
242
254
 
243
- private async addFileSystemClicked(): Promise<void> {
244
- const result = await Persistence.IsolatedFileSystemManager.IsolatedFileSystemManager.instance().addFileSystem();
245
- if (!result) {
255
+ setEditorContainer(editorContainer: TabbedEditorContainer): void {
256
+ if (this.editorContainer === editorContainer) {
246
257
  return;
247
258
  }
248
- Host.userMetrics.actionTaken(Host.UserMetrics.Action.WorkspaceSelectFolder);
249
- void UI.ViewManager.ViewManager.instance().showView('navigator-files');
250
- }
251
-
252
- #getPlaceholderShortcuts(): Shortcut[] {
253
- const shortcuts = [
254
- {actionId: 'quick-open.show', description: i18nString(UIStrings.openFile)},
255
- {actionId: 'quick-open.show-command-menu', description: i18nString(UIStrings.runCommand)},
256
- ];
257
- const separator = Host.Platform.isMac() ? '\u2004' : ' + ';
258
- return shortcuts.map(shortcut => {
259
- const shortcutKeys = UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction(shortcut.actionId);
260
- if (!shortcutKeys?.[0]) {
261
- return {
262
- description: shortcut.description,
263
- onClick: () => {},
264
- keys: [],
265
- };
259
+ if (this.editorContainer) {
260
+ this.editorContainer.removeEventListener(TabbedEditorContainerEvents.EDITOR_SELECTED, this.editorSelected, this);
261
+ this.editorContainer.removeEventListener(TabbedEditorContainerEvents.EDITOR_CLOSED, this.editorClosed, this);
262
+ }
263
+ this.editorContainer = editorContainer;
264
+ if (this.editorContainer) {
265
+ if (this.#leftToolbarItems) {
266
+ this.editorContainer.leftToolbar().removeToolbarItems();
267
+ for (const item of this.#leftToolbarItems) {
268
+ this.editorContainer.leftToolbar().appendToolbarItem(item);
269
+ }
266
270
  }
267
- const action = UI.ActionRegistry.ActionRegistry.instance().getAction(shortcut.actionId);
268
- const keys = shortcutKeys[0].descriptors.flatMap(descriptor => descriptor.name.split(separator));
269
- return {
270
- description: shortcut.description,
271
- onClick: () => {
272
- void action.execute();
273
- },
274
- keys,
275
- };
276
- });
271
+ if (this.#rightToolbarItems) {
272
+ this.editorContainer.rightToolbar().removeToolbarItems();
273
+ for (const item of this.#rightToolbarItems) {
274
+ this.editorContainer.rightToolbar().appendToolbarItem(item);
275
+ }
276
+ }
277
+ if (this.#breakpointsActive !== undefined) {
278
+ this.editorContainer.element.classList.toggle('breakpoints-deactivated', !this.#breakpointsActive);
279
+ }
280
+
281
+ this.#editorContainerResolve(editorContainer);
282
+ this.editorContainer.addEventListener(TabbedEditorContainerEvents.EDITOR_SELECTED, this.editorSelected, this);
283
+ this.editorContainer.addEventListener(TabbedEditorContainerEvents.EDITOR_CLOSED, this.editorClosed, this);
284
+ UI.UIUtils.startBatchUpdate();
285
+ for (const uiSourceCode of this.#uiSourceCodes) {
286
+ this.editorContainer.addUISourceCode(uiSourceCode);
287
+ }
288
+ UI.UIUtils.endBatchUpdate();
289
+ }
277
290
  }
278
291
 
279
292
  static defaultUISourceCodeScores(): Map<Workspace.UISourceCode.UISourceCode, number> {
@@ -289,38 +302,103 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
289
302
  return defaultScores;
290
303
  }
291
304
 
292
- set leftToolbarItems(items: UI.Toolbar.ToolbarItem[]) {
293
- this.#leftToolbarItems = items;
294
- const container = this.editorContainer;
295
- if (container) {
296
- container.leftToolbar().removeToolbarItems();
297
- items.forEach(item => container.leftToolbar().appendToolbarItem(item));
298
- }
305
+ set onToggleNavigatorSidebar(callback: () => void) {
306
+ this.#onToggleNavigatorSidebar = callback;
299
307
  }
300
308
 
301
- get leftToolbarItems(): UI.Toolbar.ToolbarItem[] {
302
- return this.#leftToolbarItems;
309
+ set onToggleDebuggerSidebar(callback: () => void) {
310
+ this.#onToggleDebuggerSidebar = callback;
303
311
  }
304
312
 
305
- set rightToolbarItems(items: UI.Toolbar.ToolbarItem[]) {
306
- this.#rightToolbarItems = items;
307
- const container = this.editorContainer;
308
- if (container) {
309
- container.rightToolbar().removeToolbarItems();
310
- items.forEach(item => container.rightToolbar().appendToolbarItem(item));
313
+ set isNavigatorSidebarOpen(isOpen: boolean) {
314
+ const isInitialized = this.#navigatorSidebarInitialized;
315
+ this.#navigatorSidebarInitialized = true;
316
+ if (this.#isNavigatorSidebarOpen === isOpen) {
317
+ return;
318
+ }
319
+ this.#isNavigatorSidebarOpen = isOpen;
320
+ this.#updateNavigatorSidebarButton();
321
+ if (isInitialized) {
322
+ UI.ARIAUtils.LiveAnnouncer.alert(isOpen ? i18nString(UIStrings.navigatorShown) :
323
+ i18nString(UIStrings.navigatorHidden));
324
+ }
325
+ }
326
+
327
+ set isDebuggerSidebarOpen(isOpen: boolean) {
328
+ const isInitialized = this.#debuggerSidebarInitialized;
329
+ this.#debuggerSidebarInitialized = true;
330
+ if (this.#isDebuggerSidebarOpen === isOpen) {
331
+ return;
332
+ }
333
+ this.#isDebuggerSidebarOpen = isOpen;
334
+ this.#updateDebuggerSidebarButton();
335
+ if (isInitialized) {
336
+ UI.ARIAUtils.LiveAnnouncer.alert(isOpen ? i18nString(UIStrings.debuggerShown) :
337
+ i18nString(UIStrings.debuggerHidden));
311
338
  }
312
339
  }
313
340
 
314
- get rightToolbarItems(): UI.Toolbar.ToolbarItem[] {
315
- return this.#rightToolbarItems;
341
+ #updateNavigatorSidebarButton(): void {
342
+ const navHidden = !this.#isNavigatorSidebarOpen;
343
+ this.#toggleNavigatorSidebarButton.setGlyph(navHidden ? 'left-panel-open' : 'left-panel-close');
344
+ this.#toggleNavigatorSidebarButton.setTitle(navHidden ? i18nString(UIStrings.showNavigator) :
345
+ i18nString(UIStrings.hideNavigator));
316
346
  }
317
347
 
318
- bottomToolbar(): UI.Toolbar.Toolbar {
319
- return this.#bottomToolbar;
348
+ #updateDebuggerSidebarButton(): void {
349
+ const debuggerHidden = !this.#isDebuggerSidebarOpen;
350
+ const debuggerGlyph = debuggerHidden ? (this.#isVertical ? 'right-panel-open' : 'bottom-panel-open') :
351
+ (this.#isVertical ? 'right-panel-close' : 'bottom-panel-close');
352
+ this.#toggleDebuggerSidebarButton.setGlyph(debuggerGlyph);
353
+ this.#toggleDebuggerSidebarButton.setTitle(debuggerHidden ? i18nString(UIStrings.showDebugger) :
354
+ i18nString(UIStrings.hideDebugger));
320
355
  }
321
356
 
322
- scriptViewToolbar(): UI.Toolbar.Toolbar {
323
- return this.#scriptViewToolbar;
357
+ toggleDebuggerSidebarButtonEnabled(enabled: boolean): void {
358
+ this.#toggleDebuggerSidebarButton.setEnabled(enabled);
359
+ }
360
+
361
+ setLayoutMode(splitWidget: UI.SplitWidget.SplitWidget, isVertical: boolean, isInWrapper: boolean): void {
362
+ this.#bottomToolbarItems = [];
363
+
364
+ if (isVertical || isInWrapper) {
365
+ if (this.#scriptViewToolbar) {
366
+ splitWidget.uninstallResizer(this.#scriptViewToolbar);
367
+ }
368
+ } else if (this.#scriptViewToolbar) {
369
+ splitWidget.installResizer(this.#scriptViewToolbar);
370
+ }
371
+
372
+ this.#isVertical = isVertical;
373
+ this.#updateNavigatorSidebarButton();
374
+ this.#updateDebuggerSidebarButton();
375
+
376
+ const leftItems: UI.Toolbar.ToolbarItem[] = [];
377
+ const rightItems: UI.Toolbar.ToolbarItem[] = [];
378
+
379
+ if (!isInWrapper) {
380
+ leftItems.push(this.#toggleNavigatorSidebarButton);
381
+ if (!Root.Runtime.Runtime.isTraceApp()) {
382
+ if (isVertical) {
383
+ rightItems.push(this.#toggleDebuggerSidebarButton);
384
+ } else {
385
+ this.#bottomToolbarItems.push(this.#toggleDebuggerSidebarButton);
386
+ }
387
+ }
388
+ }
389
+
390
+ this.#leftToolbarItems = leftItems;
391
+ this.#rightToolbarItems = rightItems;
392
+
393
+ if (this.editorContainer) {
394
+ const editorContainer = this.editorContainer;
395
+ editorContainer.leftToolbar().removeToolbarItems();
396
+ leftItems.forEach(item => editorContainer.leftToolbar().appendToolbarItem(item));
397
+
398
+ editorContainer.rightToolbar().removeToolbarItems();
399
+ rightItems.forEach(item => editorContainer.rightToolbar().appendToolbarItem(item));
400
+ }
401
+ this.requestUpdate();
324
402
  }
325
403
 
326
404
  override wasShown(): void {
@@ -334,7 +412,7 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
334
412
  }
335
413
 
336
414
  searchableView(): UI.SearchableView.SearchableView {
337
- return this.#searchableView;
415
+ return this.#searchableViewFactory();
338
416
  }
339
417
 
340
418
  visibleView(): UI.Widget.Widget|null {
@@ -437,16 +515,16 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
437
515
  const view = this.visibleView();
438
516
  if (view instanceof UI.View.SimpleView) {
439
517
  void view.toolbarItems().then(items => {
440
- this.#scriptViewToolbar.removeToolbarItems();
441
518
  if (Array.isArray(items)) {
442
- items.map(item => this.#scriptViewToolbar.appendToolbarItem(item));
519
+ this.#scriptViewToolbarItems = items;
443
520
  } else {
444
521
  const wrapper = document.createElement('div');
445
522
  wrapper.style.display = 'contents';
446
523
  // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
447
524
  render(items, wrapper);
448
- this.#scriptViewToolbar.appendToolbarItem(new UI.Toolbar.ToolbarItem(wrapper));
525
+ this.#scriptViewToolbarItems = [new UI.Toolbar.ToolbarItem(wrapper)];
449
526
  }
527
+ this.requestUpdate();
450
528
  });
451
529
  }
452
530
  }
@@ -454,6 +532,9 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
454
532
  async showSourceLocation(uiSourceCode: Workspace.UISourceCode.UISourceCode,
455
533
  location?: SourceFrame.SourceFrame.RevealPosition, omitFocus?: boolean,
456
534
  omitHighlight?: boolean): Promise<void> {
535
+ if (!this.editorContainer) {
536
+ await this.#editorContainerPromise;
537
+ }
457
538
  const currentFrame = this.currentSourceFrame();
458
539
  if (currentFrame) {
459
540
  this.historyManager.updateCurrentState(currentFrame.uiSourceCode(),
@@ -574,7 +655,7 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
574
655
  // SourcesNavigator does not need to update on EditorClosed.
575
656
  this.removeToolbarChangedListener();
576
657
  this.updateScriptViewToolbarItems();
577
- this.#searchableView.resetSearch();
658
+ this.searchableView().resetSearch();
578
659
 
579
660
  const data = {
580
661
  uiSourceCode,
@@ -590,11 +671,11 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
590
671
  }
591
672
  const currentSourceFrame = event.data.currentView instanceof UISourceCodeFrame ? event.data.currentView : null;
592
673
  if (currentSourceFrame) {
593
- currentSourceFrame.setSearchableView(this.#searchableView);
674
+ currentSourceFrame.setSearchableView(this.searchableView());
594
675
  }
595
676
 
596
- this.#searchableView.setReplaceable(Boolean(currentSourceFrame?.canEditSource()));
597
- this.#searchableView.refreshSearch();
677
+ this.searchableView().setReplaceable(Boolean(currentSourceFrame?.canEditSource()));
678
+ this.searchableView().refreshSearch();
598
679
  this.updateToolbarChangedListener();
599
680
  this.updateScriptViewToolbarItems();
600
681
 
@@ -728,8 +809,18 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
728
809
  uiSourceCodeFrame.commitEditing();
729
810
  }
730
811
 
812
+ #searchableViewFactory = (): UI.SearchableView.SearchableView => {
813
+ if (!this.#searchableView) {
814
+ this.#searchableView = new UI.SearchableView.SearchableView(this, this, 'sources.search-sources-tab');
815
+ this.#searchableView.setMinimalSearchQuerySize(0);
816
+ }
817
+ return this.#searchableView;
818
+ };
819
+
731
820
  toggleBreakpointsActiveState(active: boolean): void {
732
- this.editorContainer?.view.element.classList.toggle('breakpoints-deactivated', !active);
821
+ this.#breakpointsActive = active;
822
+ this.editorContainer?.element.classList.toggle('breakpoints-deactivated', !active);
823
+ this.requestUpdate();
733
824
  }
734
825
  }
735
826