chrome-devtools-frontend 1.0.1616061 → 1.0.1621064
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.
- package/AUTHORS +1 -0
- package/docs/checklist/README.md +8 -7
- package/eslint.config.mjs +7 -0
- package/front_end/core/common/Object.ts +11 -2
- package/front_end/core/dom_extension/DOMExtension.ts +11 -8
- package/front_end/core/host/AidaClient.ts +8 -0
- package/front_end/core/host/AidaGcaTranslation.ts +1 -0
- package/front_end/core/host/UserMetrics.ts +0 -1
- package/front_end/core/platform/api/HostRuntime.ts +2 -2
- package/front_end/core/platform/browser/HostRuntime.ts +4 -2
- package/front_end/core/platform/node/HostRuntime.ts +2 -2
- package/front_end/core/root/ExperimentNames.ts +0 -1
- package/front_end/core/sdk/NetworkManager.ts +30 -4
- package/front_end/core/sdk/NetworkRequest.ts +2 -10
- package/front_end/core/sdk/Resource.ts +2 -1
- package/front_end/core/sdk/ServerSentEventsProtocol.ts +1 -1
- package/front_end/core/sdk/TraceObject.ts +7 -2
- package/front_end/entrypoint_template.html +1 -2
- package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +119 -15
- package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +0 -2
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +43 -33
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +2 -1
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.ts +9 -6
- package/front_end/entrypoints/main/MainImpl.ts +0 -2
- package/front_end/generated/InspectorBackendCommands.ts +8 -7
- package/front_end/generated/SupportedCSSProperties.js +119 -100
- package/front_end/generated/protocol-mapping.d.ts +1 -9
- package/front_end/generated/protocol-proxy-api.d.ts +1 -9
- package/front_end/generated/protocol.ts +24 -1
- package/front_end/legacy/legacy-defs.d.ts +1 -1
- package/front_end/models/ai_assistance/AiConversation.ts +1 -0
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +39 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -0
- package/front_end/models/ai_assistance/agents/ConversationSummaryAgent.ts +28 -16
- package/front_end/models/ai_assistance/agents/GreenDevAgent.ts +512 -0
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +112 -145
- package/front_end/models/ai_assistance/agents/README.md +0 -5
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +9 -16
- package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +19 -1
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +48 -13
- package/front_end/models/bindings/SymbolizedError.ts +95 -8
- package/front_end/models/emulation/DeviceModeModel.ts +42 -13
- package/front_end/models/emulation/EmulatedDevices.ts +1 -1
- package/front_end/models/issues_manager/IssuesManager.ts +13 -6
- package/front_end/models/issues_manager/IssuesManagerEvents.ts +1 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
- package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +1 -0
- package/front_end/models/stack_trace/DetailedErrorStackParser.ts +49 -10
- package/front_end/models/stack_trace/ErrorStackParser.ts +18 -0
- package/front_end/models/stack_trace/StackTraceModel.ts +5 -1
- package/front_end/models/text_utils/ContentData.ts +71 -10
- package/front_end/models/trace/types/File.ts +8 -1
- package/front_end/models/web_mcp/WebMCPModel.ts +22 -0
- package/front_end/models/workspace/UISourceCode.ts +4 -4
- package/front_end/panels/accessibility/ARIAAttributesView.ts +4 -4
- package/front_end/panels/accessibility/AccessibilitySubPane.ts +3 -2
- package/front_end/panels/accessibility/SourceOrderView.ts +4 -4
- package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatInput.ts +66 -0
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +144 -21
- package/front_end/panels/ai_assistance/components/ChatView.ts +43 -8
- package/front_end/panels/ai_assistance/components/ExportForAgentsDialog.ts +1 -0
- package/front_end/panels/ai_assistance/components/WalkthroughUtils.ts +74 -0
- package/front_end/panels/ai_assistance/components/WalkthroughView.ts +34 -5
- package/front_end/panels/ai_assistance/components/chatMessage.css +11 -0
- package/front_end/panels/ai_assistance/components/walkthroughView.css +7 -0
- package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
- package/front_end/panels/application/CookieItemsView.ts +8 -9
- package/front_end/panels/application/DOMStorageItemsView.ts +3 -3
- package/front_end/panels/application/DeviceBoundSessionsModel.ts +7 -0
- package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +21 -0
- package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -2
- package/front_end/panels/application/ExtensionStorageItemsView.ts +1 -1
- package/front_end/panels/application/KeyValueStorageItemsView.ts +32 -14
- package/front_end/panels/application/ResourcesPanel.ts +5 -5
- package/front_end/panels/application/StorageItemsToolbar.ts +0 -19
- package/front_end/panels/application/WebMCPView.ts +285 -86
- package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +4 -4
- package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +4 -4
- package/front_end/panels/application/webMCPView.css +261 -182
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +9 -5
- package/front_end/panels/changes/ChangesSidebar.ts +2 -2
- package/front_end/panels/changes/ChangesView.ts +9 -14
- package/front_end/panels/console/ConsolePanel.ts +10 -3
- package/front_end/panels/console/ConsoleSidebar.ts +5 -5
- package/front_end/panels/console/ConsoleView.ts +11 -4
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -19
- package/front_end/panels/coverage/CoverageView.ts +4 -5
- package/front_end/panels/elements/ElementsPanel.ts +9 -12
- package/front_end/panels/elements/ElementsSidebarPane.ts +4 -5
- package/front_end/panels/elements/ElementsTreeElement.ts +61 -0
- package/front_end/panels/elements/ElementsTreeOutline.ts +46 -0
- package/front_end/panels/elements/LayersWidget.ts +2 -2
- package/front_end/panels/elements/MetricsSidebarPane.ts +5 -4
- package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
- package/front_end/panels/elements/StylePropertyTreeElement.ts +11 -6
- package/front_end/panels/elements/StylesSidebarPane.ts +4 -1
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +19 -20
- package/front_end/panels/elements/components/ElementsBreadcrumbsUtils.ts +29 -29
- package/front_end/panels/elements/components/QueryContainer.ts +5 -6
- package/front_end/panels/elements/components/components.ts +0 -2
- package/front_end/panels/emulation/MediaQueryInspector.ts +4 -7
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +4 -7
- package/front_end/panels/layer_viewer/Layers3DView.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseStartView.ts +2 -2
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +47 -66
- package/front_end/panels/network/NetworkConfigView.ts +11 -11
- package/front_end/panels/network/RequestConditionsDrawer.ts +6 -4
- package/front_end/panels/network/RequestCookiesView.ts +2 -2
- package/front_end/panels/network/RequestDeviceBoundSessionsView.ts +2 -2
- package/front_end/panels/network/RequestHeadersView.ts +2 -2
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +4 -5
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +6 -9
- package/front_end/panels/profiler/HeapProfileView.ts +29 -4
- package/front_end/panels/profiler/ProfilesPanel.ts +1 -1
- package/front_end/panels/protocol_monitor/JSONEditor.css +8 -1
- package/front_end/panels/protocol_monitor/JSONEditor.ts +7 -2
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +6 -4
- package/front_end/panels/recorder/components/ControlButton.ts +4 -4
- package/front_end/panels/recorder/components/StepView.ts +6 -6
- package/front_end/panels/search/SearchView.ts +4 -7
- package/front_end/panels/sources/DebuggerPausedMessage.ts +18 -22
- package/front_end/panels/sources/SourcesView.ts +1 -1
- package/front_end/panels/sources/TabbedEditorContainer.ts +2 -2
- package/front_end/panels/sources/ThreadsSidebarPane.ts +2 -4
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +24 -20
- package/front_end/panels/timeline/StatusDialog.ts +5 -8
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +10 -0
- package/front_end/panels/timeline/TimelineLoader.ts +3 -4
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +2 -2
- package/front_end/panels/timeline/components/TimelineRangeSummaryView.ts +2 -0
- package/front_end/panels/timeline/components/TimelineSummary.ts +9 -1
- package/front_end/panels/timeline/components/timelineSummary.css +4 -0
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +2 -2
- package/front_end/panels/timeline/thirdPartyTreeView.css +8 -1
- package/front_end/panels/web_audio/WebAudioView.ts +5 -4
- package/front_end/panels/whats_new/ReleaseNoteText.ts +9 -9
- package/front_end/panels/whats_new/resources/WNDT.md +9 -6
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +41 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.d.ts +13 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.js +21 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +5 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js +52 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +25 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/third_party/urlpattern-polyfill/urlpattern-polyfill.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/third_party/urlpattern-polyfill/urlpattern-polyfill.js +853 -0
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +91 -11
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +1046 -33
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +41 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.d.ts +13 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.js +21 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +5 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js +52 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +25 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/third_party/urlpattern-polyfill/urlpattern-polyfill.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/third_party/urlpattern-polyfill/urlpattern-polyfill.js +805 -0
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +91 -11
- package/front_end/third_party/puppeteer/package/package.json +3 -2
- package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +53 -11
- package/front_end/third_party/puppeteer/package/src/api/Extension.ts +29 -1
- package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +6 -0
- package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Extension.ts +9 -2
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +59 -0
- package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +6 -1
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +26 -0
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +0 -1
- package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +2 -1
- package/front_end/third_party/web-vitals/README.chromium +2 -2
- package/front_end/third_party/web-vitals/package/README.md +21 -10
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onCLS.js +2 -4
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.js +1 -2
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.d.ts +4 -0
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +44 -39
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +25 -19
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.js +1 -2
- package/front_end/third_party/web-vitals/package/dist/modules/lib/doubleRAF.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getActivationStart.js +1 -2
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getLoadState.js +16 -18
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.js +2 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.js +1 -3
- package/front_end/third_party/web-vitals/package/dist/modules/lib/whenActivated.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/whenIdleOrHidden.js +11 -7
- package/front_end/third_party/web-vitals/package/dist/modules/onCLS.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/types/inp.d.ts +4 -0
- package/front_end/third_party/web-vitals/package/dist/modules/types.d.ts +1 -2
- package/front_end/third_party/web-vitals/package/dist/modules/types.js +0 -1
- package/front_end/third_party/web-vitals/package/package.json +24 -27
- package/front_end/third_party/web-vitals/package/src/attribution/onCLS.ts +2 -7
- package/front_end/third_party/web-vitals/package/src/attribution/onFCP.ts +1 -2
- package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +49 -43
- package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +27 -24
- package/front_end/third_party/web-vitals/package/src/attribution/onTTFB.ts +1 -2
- package/front_end/third_party/web-vitals/package/src/lib/doubleRAF.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/getActivationStart.ts +1 -2
- package/front_end/third_party/web-vitals/package/src/lib/getLoadState.ts +21 -20
- package/front_end/third_party/web-vitals/package/src/lib/getVisibilityWatcher.ts +2 -3
- package/front_end/third_party/web-vitals/package/src/lib/observe.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/polyfills/interactionCountPolyfill.ts +2 -4
- package/front_end/third_party/web-vitals/package/src/lib/whenActivated.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/whenIdleOrHidden.ts +13 -7
- package/front_end/third_party/web-vitals/package/src/onCLS.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/types/inp.ts +4 -0
- package/front_end/third_party/web-vitals/package/src/types.ts +1 -2
- package/front_end/third_party/web-vitals/patches/0001-Add-onEachInteraction-to-onINP-options.patch +13 -74
- package/front_end/third_party/web-vitals/rebuild.sh +3 -3
- package/front_end/third_party/web-vitals/web-vitals-tsconfig.json +0 -1
- package/front_end/ui/components/icon_button/iconButton.css +1 -0
- package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +6 -6
- package/front_end/ui/components/lists/list.css +4 -0
- package/front_end/ui/legacy/Dialog.ts +21 -2
- package/front_end/ui/legacy/SoftContextMenu.ts +3 -3
- package/front_end/ui/legacy/SplitWidget.ts +9 -9
- package/front_end/ui/legacy/TabbedPane.ts +12 -12
- package/front_end/ui/legacy/View.ts +24 -22
- package/front_end/ui/legacy/ViewManager.ts +12 -12
- package/front_end/ui/legacy/ViewRegistration.ts +2 -2
- package/front_end/ui/legacy/Widget.ts +165 -119
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +10 -5
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +9 -6
- package/front_end/ui/legacy/components/utils/Linkifier.ts +37 -11
- package/front_end/ui/legacy/components/utils/jsUtils.css +1 -0
- package/front_end/ui/legacy/inspectorCommon.css +0 -6
- package/front_end/ui/lit/render.ts +11 -9
- package/front_end/ui/visual_logging/KnownContextValues.ts +36 -0
- package/package.json +1 -1
- package/front_end/Images/src/dots-circle.svg +0 -10
- package/front_end/panels/elements/components/Helper.ts +0 -35
- package/front_end/third_party/web-vitals/package/dist/modules/types/polyfills.d.ts +0 -4
- package/front_end/third_party/web-vitals/package/dist/modules/types/polyfills.js +0 -16
- package/front_end/third_party/web-vitals/package/src/types/polyfills.ts +0 -24
|
@@ -76,7 +76,7 @@ interface ViewInput {
|
|
|
76
76
|
onSelectionChanged: (selectedFilter: ConsoleFilter) => void;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
export type View = (input: ViewInput, output: object, target: HTMLElement) => void;
|
|
79
|
+
export type View = (input: ViewInput, output: object, target: HTMLElement|DocumentFragment) => void;
|
|
80
80
|
export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
81
81
|
render(
|
|
82
82
|
html`<devtools-tree
|
|
@@ -115,7 +115,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
115
115
|
</li>`)}
|
|
116
116
|
</ul>`}
|
|
117
117
|
></devtools-tree>`,
|
|
118
|
-
target);
|
|
118
|
+
target, {container: {attributes: {jslog: `${VisualLogging.pane('sidebar').track({resize: true})}`}}});
|
|
119
119
|
};
|
|
120
120
|
|
|
121
121
|
export class ConsoleFilterGroup {
|
|
@@ -173,7 +173,8 @@ const CONSOLE_API_PARSED_FILTERS = [{
|
|
|
173
173
|
regex: undefined,
|
|
174
174
|
}];
|
|
175
175
|
|
|
176
|
-
export class ConsoleSidebar extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox
|
|
176
|
+
export class ConsoleSidebar extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox<ShadowRoot>>(
|
|
177
|
+
UI.Widget.VBox) {
|
|
177
178
|
#view: View;
|
|
178
179
|
readonly #groups = [
|
|
179
180
|
new ConsoleFilterGroup(GroupName.ALL, [], ConsoleFilter.allLevelsFilterValue()),
|
|
@@ -189,8 +190,7 @@ export class ConsoleSidebar extends Common.ObjectWrapper.eventMixin<EventTypes,
|
|
|
189
190
|
|
|
190
191
|
constructor(element?: HTMLElement, view = DEFAULT_VIEW) {
|
|
191
192
|
super(element, {
|
|
192
|
-
|
|
193
|
-
useShadowDom: true,
|
|
193
|
+
useShadowDom: 'pure',
|
|
194
194
|
});
|
|
195
195
|
this.#view = view;
|
|
196
196
|
this.setMinimumSize(125, 0);
|
|
@@ -1959,15 +1959,22 @@ export class ConsoleViewFilter {
|
|
|
1959
1959
|
export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
1960
1960
|
handleAction(_context: UI.Context.Context, actionId: string): boolean {
|
|
1961
1961
|
switch (actionId) {
|
|
1962
|
-
case 'console.toggle':
|
|
1963
|
-
|
|
1964
|
-
|
|
1962
|
+
case 'console.toggle': {
|
|
1963
|
+
const inspectorView = UI.InspectorView.InspectorView.instance();
|
|
1964
|
+
const consoleView = ConsoleView.instance();
|
|
1965
|
+
if (inspectorView.drawerVisible() && !inspectorView.isDrawerMinimized() && consoleView.isShowing() &&
|
|
1966
|
+
consoleView.hasFocus()) {
|
|
1967
|
+
inspectorView.minimizeDrawer();
|
|
1965
1968
|
return true;
|
|
1966
1969
|
}
|
|
1970
|
+
if (inspectorView.drawerVisible() && inspectorView.isDrawerMinimized()) {
|
|
1971
|
+
inspectorView.setDrawerMinimized(false);
|
|
1972
|
+
}
|
|
1967
1973
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.bringToFront();
|
|
1968
1974
|
Common.Console.Console.instance().show();
|
|
1969
|
-
|
|
1975
|
+
consoleView.focusPrompt();
|
|
1970
1976
|
return true;
|
|
1977
|
+
}
|
|
1971
1978
|
case 'console.clear':
|
|
1972
1979
|
ConsoleView.instance().clearConsole();
|
|
1973
1980
|
return true;
|
|
@@ -238,24 +238,6 @@ export const getMessageForElement = (element: Element): ConsoleViewMessage|undef
|
|
|
238
238
|
return elementToMessage.get(element);
|
|
239
239
|
};
|
|
240
240
|
|
|
241
|
-
/**
|
|
242
|
-
* Combines the error description (essentially the `Error#stack` property value)
|
|
243
|
-
* with the `issueSummary`.
|
|
244
|
-
*
|
|
245
|
-
* @param description the `description` property of the `Error` remote object.
|
|
246
|
-
* @param issueSummary the optional `issueSummary` of the `exceptionMetaData`.
|
|
247
|
-
* @returns the enriched description.
|
|
248
|
-
* @see https://goo.gle/devtools-reduce-network-noise-design
|
|
249
|
-
*/
|
|
250
|
-
export const concatErrorDescriptionAndIssueSummary = (description: string, issueSummary: string): string => {
|
|
251
|
-
// Insert the issue summary right after the error message.
|
|
252
|
-
const pos = description.indexOf('\n');
|
|
253
|
-
const prefix = pos === -1 ? description : description.substring(0, pos);
|
|
254
|
-
const suffix = pos === -1 ? '' : description.substring(pos);
|
|
255
|
-
description = `${prefix}. ${issueSummary}${suffix}`;
|
|
256
|
-
return description;
|
|
257
|
-
};
|
|
258
|
-
|
|
259
241
|
// This value reflects the 18px min-height of .console-message.
|
|
260
242
|
// Keep in sync with consoleView.css.
|
|
261
243
|
const defaultConsoleRowHeight = 18;
|
|
@@ -1948,7 +1930,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
|
|
|
1948
1930
|
|
|
1949
1931
|
const issueSummary = exceptionDetails?.exceptionMetaData?.issueSummary;
|
|
1950
1932
|
if (typeof issueSummary === 'string') {
|
|
1951
|
-
string = concatErrorDescriptionAndIssueSummary(string, issueSummary);
|
|
1933
|
+
string = StackTrace.ErrorStackParser.concatErrorDescriptionAndIssueSummary(string, issueSummary);
|
|
1952
1934
|
}
|
|
1953
1935
|
|
|
1954
1936
|
const linkInfos = StackTrace.ErrorStackParser.parseSourcePositionsFromErrorStack(runtimeModel, string);
|
|
@@ -153,7 +153,7 @@ export interface CoverageViewOutput {
|
|
|
153
153
|
focusResults: () => void;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
export type View = (input: CoverageViewInput, output: CoverageViewOutput, target:
|
|
156
|
+
export type View = (input: CoverageViewInput, output: CoverageViewOutput, target: DocumentFragment) => void;
|
|
157
157
|
|
|
158
158
|
export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
159
159
|
// clang-format off
|
|
@@ -234,7 +234,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
234
234
|
<div class="coverage-message">
|
|
235
235
|
${input.statusMessage}
|
|
236
236
|
</div>
|
|
237
|
-
</div>`, target);
|
|
237
|
+
</div>`, target, {container: {attributes: {jslog: `${VisualLogging.panel('coverage').track({resize: true})}`}}});
|
|
238
238
|
// clang-format on
|
|
239
239
|
};
|
|
240
240
|
|
|
@@ -282,7 +282,7 @@ function renderReloadPromptPage(message: Common.UIString.LocalizedString, classN
|
|
|
282
282
|
// clang-format on
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
export class CoverageView extends UI.Widget.VBox {
|
|
285
|
+
export class CoverageView extends UI.Widget.VBox<ShadowRoot> {
|
|
286
286
|
#model: CoverageModel|null;
|
|
287
287
|
#decorationManager: CoverageDecorationManager|null;
|
|
288
288
|
readonly #coverageTypeComboBoxSetting: Common.Settings.Setting<number>;
|
|
@@ -303,8 +303,7 @@ export class CoverageView extends UI.Widget.VBox {
|
|
|
303
303
|
|
|
304
304
|
constructor(view: View = DEFAULT_VIEW) {
|
|
305
305
|
super({
|
|
306
|
-
|
|
307
|
-
useShadowDom: true,
|
|
306
|
+
useShadowDom: 'pure',
|
|
308
307
|
delegatesFocus: true,
|
|
309
308
|
});
|
|
310
309
|
this.registerRequiredCSS(coverageViewStyles);
|
|
@@ -544,16 +544,15 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
|
|
|
544
544
|
}
|
|
545
545
|
|
|
546
546
|
if (selectedNode) {
|
|
547
|
-
const
|
|
548
|
-
const crumbs = [activeNode];
|
|
547
|
+
const crumbs = [selectedNode];
|
|
549
548
|
|
|
550
549
|
for (let current: (SDK.DOMModel.DOMNode|null) = selectedNode.parentNode; current; current = current.parentNode) {
|
|
551
|
-
crumbs.push(
|
|
550
|
+
crumbs.push(current);
|
|
552
551
|
}
|
|
553
552
|
|
|
554
553
|
this.breadcrumbs.data = {
|
|
555
554
|
crumbs,
|
|
556
|
-
selectedNode
|
|
555
|
+
selectedNode,
|
|
557
556
|
};
|
|
558
557
|
|
|
559
558
|
if (this.accessibilityTreeView) {
|
|
@@ -938,16 +937,14 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
|
|
|
938
937
|
*/
|
|
939
938
|
|
|
940
939
|
// Get the current set of active crumbs
|
|
941
|
-
const
|
|
942
|
-
const existingCrumbs = [activeNode];
|
|
940
|
+
const existingCrumbs = [selectedNode];
|
|
943
941
|
for (let current: (SDK.DOMModel.DOMNode|null) = selectedNode.parentNode; current; current = current.parentNode) {
|
|
944
|
-
existingCrumbs.push(
|
|
942
|
+
existingCrumbs.push(current);
|
|
945
943
|
}
|
|
946
944
|
|
|
947
945
|
/* Get the change nodes from the event & convert them to breadcrumb nodes */
|
|
948
|
-
const
|
|
949
|
-
|
|
950
|
-
newNodes.forEach(crumb => nodesThatHaveChangedMap.set(crumb.id, crumb));
|
|
946
|
+
const nodesThatHaveChangedMap = new Map<Protocol.DOM.NodeId, SDK.DOMModel.DOMNode>();
|
|
947
|
+
nodes.forEach(crumb => nodesThatHaveChangedMap.set(crumb.id, crumb));
|
|
951
948
|
|
|
952
949
|
/* Loop over our existing crumbs, and if any have an ID that matches an ID from the new nodes
|
|
953
950
|
* that we have, use the new node, rather than the one we had, because it's changed.
|
|
@@ -959,12 +956,12 @@ export class ElementsPanel extends UI.Panel.Panel implements UI.SearchableView.S
|
|
|
959
956
|
|
|
960
957
|
this.breadcrumbs.data = {
|
|
961
958
|
crumbs: newSetOfCrumbs,
|
|
962
|
-
selectedNode
|
|
959
|
+
selectedNode,
|
|
963
960
|
};
|
|
964
961
|
}
|
|
965
962
|
|
|
966
963
|
private crumbNodeSelected(event: ElementsComponents.ElementsBreadcrumbs.NodeSelectedEvent): void {
|
|
967
|
-
this.selectDOMNode(event.
|
|
964
|
+
this.selectDOMNode(event.node, true);
|
|
968
965
|
}
|
|
969
966
|
|
|
970
967
|
private leaveUserAgentShadowDOM(node: SDK.DOMModel.DOMNode): SDK.DOMModel.DOMNode {
|
|
@@ -7,13 +7,12 @@ import type * as SDK from '../../core/sdk/sdk.js';
|
|
|
7
7
|
import * as ComputedStyle from '../../models/computed_style/computed_style.js';
|
|
8
8
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
9
9
|
|
|
10
|
-
export class ElementsSidebarPane extends
|
|
10
|
+
export class ElementsSidebarPane<ContentTypeT extends HTMLElement|DocumentFragment = HTMLElement> extends
|
|
11
|
+
UI.Widget.VBox<ContentTypeT> {
|
|
11
12
|
protected computedStyleModelInternal: ComputedStyle.ComputedStyleModel.ComputedStyleModel;
|
|
12
13
|
constructor(
|
|
13
|
-
computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel,
|
|
14
|
-
|
|
15
|
-
options.classes = options.classes ?? [];
|
|
16
|
-
options.classes.push('flex-none');
|
|
14
|
+
computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel,
|
|
15
|
+
options: UI.Widget.WidgetOptions<ContentTypeT>) {
|
|
17
16
|
super(options);
|
|
18
17
|
this.computedStyleModelInternal = computedStyleModel;
|
|
19
18
|
this.computedStyleModelInternal.addEventListener(
|
|
@@ -1586,6 +1586,67 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1586
1586
|
this.treeOutline?.updateNodeElementToIssue(nodeElement, issues);
|
|
1587
1587
|
}
|
|
1588
1588
|
|
|
1589
|
+
removeIssue(issue: IssuesManager.Issue.Issue): void {
|
|
1590
|
+
if (!this.#elementIssues.has(issue.primaryKey())) {
|
|
1591
|
+
return;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
this.#removeIssueStyleAndTooltip(issue);
|
|
1595
|
+
this.#elementIssues.delete(issue.primaryKey());
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
#removeIssueStyleAndTooltip(issue: IssuesManager.Issue.Issue): void {
|
|
1599
|
+
const elementIssueDetails = getElementIssueDetails(issue);
|
|
1600
|
+
if (!elementIssueDetails) {
|
|
1601
|
+
return;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
if (elementIssueDetails.attribute) {
|
|
1605
|
+
this.#undoHighlightViolatingAttr(elementIssueDetails.attribute, issue);
|
|
1606
|
+
} else {
|
|
1607
|
+
this.#undoHighlightTagAsViolating(issue);
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
#undoHighlightViolatingAttr(name: string, issue: IssuesManager.Issue.Issue): void {
|
|
1612
|
+
const violatingAttributes = this.listItemElement.querySelectorAll('.webkit-html-attribute-name.violating-element');
|
|
1613
|
+
for (const attributeElement of violatingAttributes) {
|
|
1614
|
+
if (attributeElement.textContent === name) {
|
|
1615
|
+
this.#removeFromNodeElementToIssue(attributeElement, issue);
|
|
1616
|
+
if (!this.#nodeElementToIssue.has(attributeElement)) {
|
|
1617
|
+
attributeElement.classList.remove('violating-element');
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
#undoHighlightTagAsViolating(issue: IssuesManager.Issue.Issue): void {
|
|
1624
|
+
const tagElement = this.listItemElement.getElementsByClassName('webkit-html-tag-name')[0];
|
|
1625
|
+
if (!tagElement) {
|
|
1626
|
+
return;
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
this.#removeFromNodeElementToIssue(tagElement, issue);
|
|
1630
|
+
if (!this.#nodeElementToIssue.has(tagElement)) {
|
|
1631
|
+
tagElement.classList.remove('violating-element');
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
#removeFromNodeElementToIssue(nodeElement: Element, issue: IssuesManager.Issue.Issue): void {
|
|
1636
|
+
let issues = this.#nodeElementToIssue.get(nodeElement);
|
|
1637
|
+
if (!issues) {
|
|
1638
|
+
return;
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
issues = issues.filter(i => i !== issue);
|
|
1642
|
+
if (issues.length === 0) {
|
|
1643
|
+
this.#nodeElementToIssue.delete(nodeElement);
|
|
1644
|
+
} else {
|
|
1645
|
+
this.#nodeElementToIssue.set(nodeElement, issues);
|
|
1646
|
+
}
|
|
1647
|
+
this.treeOutline?.updateNodeElementToIssue(nodeElement, issues);
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1589
1650
|
expandedChildrenLimit(): number {
|
|
1590
1651
|
return this.#expandedChildrenLimit;
|
|
1591
1652
|
}
|
|
@@ -639,6 +639,8 @@ export class ElementsTreeOutline extends
|
|
|
639
639
|
|
|
640
640
|
this.#issuesManager = IssuesManager.IssuesManager.IssuesManager.instance();
|
|
641
641
|
this.#issuesManager.addEventListener(IssuesManager.IssuesManager.Events.ISSUE_ADDED, this.#onIssueAdded, this);
|
|
642
|
+
this.#issuesManager.addEventListener(
|
|
643
|
+
IssuesManager.IssuesManager.Events.ISSUE_HIDDEN_STATUS_UPDATED, this.#onIssueHiddenStatusUpdated, this);
|
|
642
644
|
|
|
643
645
|
this.treeElementByNode = new WeakMap();
|
|
644
646
|
const shadowContainer = document.createElement('div');
|
|
@@ -774,6 +776,20 @@ export class ElementsTreeOutline extends
|
|
|
774
776
|
void this.#addTreeElementIssue(event.data.issue);
|
|
775
777
|
}
|
|
776
778
|
|
|
779
|
+
#onIssueHiddenStatusUpdated(
|
|
780
|
+
event: Common.EventTarget.EventTargetEvent<IssuesManager.IssuesManager.IssueHiddenStatusUpdatedEvent>): void {
|
|
781
|
+
const issue = event.data.issue;
|
|
782
|
+
if (!issue) {
|
|
783
|
+
return;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
if (issue.isHidden()) {
|
|
787
|
+
void this.#removeTreeElementIssue(issue);
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
void this.#addTreeElementIssue(issue);
|
|
791
|
+
}
|
|
792
|
+
|
|
777
793
|
#addAllElementIssues(): void {
|
|
778
794
|
if (!this.#issuesManager) {
|
|
779
795
|
return;
|
|
@@ -784,6 +800,10 @@ export class ElementsTreeOutline extends
|
|
|
784
800
|
}
|
|
785
801
|
|
|
786
802
|
async #addTreeElementIssue(issue: IssuesManager.Issue.Issue): Promise<void> {
|
|
803
|
+
if (issue.isHidden()) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
|
|
787
807
|
const elementIssueDetails = getElementIssueDetails(issue);
|
|
788
808
|
if (!elementIssueDetails) {
|
|
789
809
|
return;
|
|
@@ -810,6 +830,28 @@ export class ElementsTreeOutline extends
|
|
|
810
830
|
}
|
|
811
831
|
}
|
|
812
832
|
|
|
833
|
+
async #removeTreeElementIssue(issue: IssuesManager.Issue.Issue): Promise<void> {
|
|
834
|
+
const elementIssueDetails = getElementIssueDetails(issue);
|
|
835
|
+
if (!elementIssueDetails) {
|
|
836
|
+
return;
|
|
837
|
+
}
|
|
838
|
+
const {nodeId} = elementIssueDetails;
|
|
839
|
+
if (!this.rootDOMNode || !nodeId) {
|
|
840
|
+
return;
|
|
841
|
+
}
|
|
842
|
+
const deferredDOMNode = new SDK.DOMModel.DeferredDOMNode(this.rootDOMNode.domModel().target(), nodeId);
|
|
843
|
+
const node = await deferredDOMNode.resolvePromise();
|
|
844
|
+
|
|
845
|
+
if (!node) {
|
|
846
|
+
return;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
const treeElement = this.findTreeElement(node);
|
|
850
|
+
if (treeElement) {
|
|
851
|
+
treeElement.removeIssue(issue);
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
813
855
|
deindentSingleNode(): void {
|
|
814
856
|
const firstChild = this.firstChild();
|
|
815
857
|
if (!firstChild || (firstChild && !firstChild.isExpandable())) {
|
|
@@ -818,6 +860,10 @@ export class ElementsTreeOutline extends
|
|
|
818
860
|
}
|
|
819
861
|
|
|
820
862
|
updateNodeElementToIssue(element: Element, issues: IssuesManager.Issue.Issue[]): void {
|
|
863
|
+
if (!issues || issues.length === 0) {
|
|
864
|
+
this.#nodeElementToIssues.delete(element);
|
|
865
|
+
return;
|
|
866
|
+
}
|
|
821
867
|
this.#nodeElementToIssues.set(element, issues);
|
|
822
868
|
}
|
|
823
869
|
|
|
@@ -73,7 +73,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, output: ViewOutput, target: HTMLEl
|
|
|
73
73
|
.data=${data}></devtools-tree-outline>
|
|
74
74
|
</div>
|
|
75
75
|
`;
|
|
76
|
-
render(template, target);
|
|
76
|
+
render(template, target, {container: {attributes: {jslog: `${VisualLogging.pane('css-layers')}`}}});
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
let layersWidgetInstance: LayersWidget;
|
|
@@ -84,7 +84,7 @@ export class LayersWidget extends UI.Widget.Widget {
|
|
|
84
84
|
#layerToReveal: string|null = null;
|
|
85
85
|
|
|
86
86
|
constructor(view: View = DEFAULT_VIEW) {
|
|
87
|
-
super(
|
|
87
|
+
super();
|
|
88
88
|
this.#view = view;
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -53,7 +53,7 @@ interface ViewInput {
|
|
|
53
53
|
onStartEditing: (target: Element, box: string, styleProperty: string, computedStyle: Map<string, string>) => void;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
|
|
56
|
+
type View = (input: ViewInput, output: undefined, target: HTMLElement|DocumentFragment) => void;
|
|
57
57
|
|
|
58
58
|
const DEFAULT_VIEW: View = (input, output, target) => {
|
|
59
59
|
const {style, highlightedMode, node, contentWidth, contentHeight, onHighlightNode, onStartEditing} = input;
|
|
@@ -177,11 +177,12 @@ const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
177
177
|
<div class="metrics ${!node ? 'collapsed' : ''}" @mouseover=${(e: Event) => { e.consume(); onHighlightNode(true, 'all'); }}
|
|
178
178
|
@mouseleave=${(e: Event) => { e.consume(); onHighlightNode(false, 'all'); }}>
|
|
179
179
|
${previousBox}
|
|
180
|
-
</div>`,
|
|
180
|
+
</div>`,
|
|
181
|
+
target, {container: {classes: ['flex-none'], attributes: {jslog: `${VisualLogging.section('styles-metrics')}`}}});
|
|
181
182
|
// clang-format on
|
|
182
183
|
};
|
|
183
184
|
|
|
184
|
-
export class MetricsSidebarPane extends ElementsSidebarPane {
|
|
185
|
+
export class MetricsSidebarPane extends ElementsSidebarPane<ShadowRoot> {
|
|
185
186
|
originalPropertyData: SDK.CSSProperty.CSSProperty|null;
|
|
186
187
|
previousPropertyDataCandidate: SDK.CSSProperty.CSSProperty|null;
|
|
187
188
|
private inlineStyle: SDK.CSSStyleDeclaration.CSSStyleDeclaration|null;
|
|
@@ -191,7 +192,7 @@ export class MetricsSidebarPane extends ElementsSidebarPane {
|
|
|
191
192
|
private view: View;
|
|
192
193
|
|
|
193
194
|
constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel, view = DEFAULT_VIEW) {
|
|
194
|
-
super(computedStyleModel, {
|
|
195
|
+
super(computedStyleModel, {useShadowDom: 'pure'});
|
|
195
196
|
this.registerRequiredCSS(metricsSidebarPaneStyles);
|
|
196
197
|
|
|
197
198
|
this.originalPropertyData = null;
|
|
@@ -1181,7 +1181,7 @@ export class StylePropertiesSection {
|
|
|
1181
1181
|
|
|
1182
1182
|
const containerElement = new ElementsComponents.QueryContainer.QueryContainer();
|
|
1183
1183
|
containerElement.data = {
|
|
1184
|
-
container:
|
|
1184
|
+
container: container.containerNode,
|
|
1185
1185
|
queryName: containerQuery.name,
|
|
1186
1186
|
onContainerLinkClick: event => {
|
|
1187
1187
|
event.preventDefault();
|
|
@@ -3655,15 +3655,20 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
3655
3655
|
return;
|
|
3656
3656
|
}
|
|
3657
3657
|
this.#clearGhostTextInValue();
|
|
3658
|
-
this.
|
|
3658
|
+
if (this.value) {
|
|
3659
|
+
// If there is an existing value, and user is editing the name field
|
|
3660
|
+
// which leads to a new value suggestion, then the previous value should no
|
|
3661
|
+
// longer be valid.
|
|
3662
|
+
this.listItemElement.classList.add('not-parsed-ok', 'invalid-property-value');
|
|
3663
|
+
}
|
|
3664
|
+
const ghostTextElement = document.createElement('span');
|
|
3665
|
+
ghostTextElement.classList.add('ghost-value-prediction');
|
|
3666
|
+
ghostTextElement.textContent = text;
|
|
3667
|
+
this.valueElement.insertAdjacentElement('afterend', ghostTextElement);
|
|
3659
3668
|
}
|
|
3660
3669
|
|
|
3661
3670
|
#clearGhostTextInValue(): void {
|
|
3662
|
-
|
|
3663
|
-
return;
|
|
3664
|
-
}
|
|
3665
|
-
const ghostElement = this.valueElement.querySelector('.ghost-value-prediction');
|
|
3666
|
-
ghostElement?.remove();
|
|
3671
|
+
this.listItemElement.querySelector('.ghost-value-prediction')?.remove();
|
|
3667
3672
|
}
|
|
3668
3673
|
}
|
|
3669
3674
|
|
|
@@ -224,7 +224,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
224
224
|
#aiCodeCompletionSummaryToolbar?: PanelsCommon.AiCodeCompletionSummaryToolbar;
|
|
225
225
|
|
|
226
226
|
constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel) {
|
|
227
|
-
super(computedStyleModel, {delegatesFocus: true});
|
|
227
|
+
super(computedStyleModel, {delegatesFocus: true, useShadowDom: true, classes: ['flex-none']});
|
|
228
228
|
this.setMinimumSize(96, 26);
|
|
229
229
|
this.registerRequiredCSS(stylesSidebarPaneStyles);
|
|
230
230
|
Common.Settings.Settings.instance().moduleSetting('text-editor-indent').addChangeListener(this.requestUpdate, this);
|
|
@@ -2261,6 +2261,9 @@ export class CSSPropertyPrompt extends UI.TextPrompt.TextPrompt {
|
|
|
2261
2261
|
return;
|
|
2262
2262
|
}
|
|
2263
2263
|
|
|
2264
|
+
if (!this.queryRange) {
|
|
2265
|
+
this.queryRange = new TextUtils.TextRange.TextRange(0, 0, 0, this.text().length);
|
|
2266
|
+
}
|
|
2264
2267
|
this.treeElement.section().activeAiSuggestion = {
|
|
2265
2268
|
text: args.text,
|
|
2266
2269
|
properties: this.#getAiSuggestedProperties(args.text),
|
|
@@ -7,7 +7,7 @@ import '../../../ui/kit/kit.js';
|
|
|
7
7
|
import '../../../ui/components/node_text/node_text.js';
|
|
8
8
|
|
|
9
9
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
10
|
-
import
|
|
10
|
+
import * as SDK from '../../../core/sdk/sdk.js';
|
|
11
11
|
import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
|
|
12
12
|
import * as RenderCoordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
|
|
13
13
|
import * as Lit from '../../../ui/lit/lit.js';
|
|
@@ -15,7 +15,6 @@ import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
|
|
|
15
15
|
|
|
16
16
|
import elementsBreadcrumbsStyles from './elementsBreadcrumbs.css.js';
|
|
17
17
|
import {crumbsToRender, type UserScrollPosition} from './ElementsBreadcrumbsUtils.js';
|
|
18
|
-
import type {DOMNode} from './Helper.js';
|
|
19
18
|
|
|
20
19
|
const {html} = Lit;
|
|
21
20
|
|
|
@@ -39,25 +38,25 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
|
39
38
|
|
|
40
39
|
export class NodeSelectedEvent extends Event {
|
|
41
40
|
static readonly eventName = 'breadcrumbsnodeselected';
|
|
42
|
-
|
|
41
|
+
node: SDK.DOMModel.DOMNode;
|
|
43
42
|
|
|
44
|
-
constructor(node: DOMNode) {
|
|
43
|
+
constructor(node: SDK.DOMModel.DOMNode) {
|
|
45
44
|
super(NodeSelectedEvent.eventName, {});
|
|
46
|
-
this.
|
|
45
|
+
this.node = node;
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
export interface ElementsBreadcrumbsData {
|
|
51
|
-
selectedNode: DOMNode|null;
|
|
52
|
-
crumbs: DOMNode[];
|
|
50
|
+
selectedNode: SDK.DOMModel.DOMNode|null;
|
|
51
|
+
crumbs: SDK.DOMModel.DOMNode[];
|
|
53
52
|
}
|
|
54
53
|
|
|
55
54
|
export class ElementsBreadcrumbs extends HTMLElement {
|
|
56
55
|
readonly #shadow = this.attachShadow({mode: 'open'});
|
|
57
56
|
readonly #resizeObserver = new ResizeObserver(() => this.#checkForOverflowOnResize());
|
|
58
57
|
|
|
59
|
-
#crumbsData: readonly DOMNode[] = [];
|
|
60
|
-
#selectedDOMNode:
|
|
58
|
+
#crumbsData: readonly SDK.DOMModel.DOMNode[] = [];
|
|
59
|
+
#selectedDOMNode: SDK.DOMModel.DOMNode|null = null;
|
|
61
60
|
#overflowing = false;
|
|
62
61
|
#userScrollPosition: UserScrollPosition = 'start';
|
|
63
62
|
#isObservingResize = false;
|
|
@@ -75,7 +74,7 @@ export class ElementsBreadcrumbs extends HTMLElement {
|
|
|
75
74
|
this.#resizeObserver.disconnect();
|
|
76
75
|
}
|
|
77
76
|
|
|
78
|
-
#onCrumbClick(node: DOMNode): (event: Event) => void {
|
|
77
|
+
#onCrumbClick(node: SDK.DOMModel.DOMNode): (event: Event) => void {
|
|
79
78
|
return (event: Event): void => {
|
|
80
79
|
event.preventDefault();
|
|
81
80
|
this.dispatchEvent(new NodeSelectedEvent(node));
|
|
@@ -121,20 +120,20 @@ export class ElementsBreadcrumbs extends HTMLElement {
|
|
|
121
120
|
void this.#updateScrollState(crumbWindow);
|
|
122
121
|
}
|
|
123
122
|
|
|
124
|
-
#onCrumbMouseMove(node: DOMNode): () => void {
|
|
125
|
-
return (): void => node.
|
|
123
|
+
#onCrumbMouseMove(node: SDK.DOMModel.DOMNode): () => void {
|
|
124
|
+
return (): void => node.highlight();
|
|
126
125
|
}
|
|
127
126
|
|
|
128
|
-
#onCrumbMouseLeave(
|
|
129
|
-
|
|
127
|
+
#onCrumbMouseLeave(): void {
|
|
128
|
+
SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
|
|
130
129
|
}
|
|
131
130
|
|
|
132
|
-
#onCrumbFocus(node: DOMNode): () => void {
|
|
133
|
-
return (): void => node.
|
|
131
|
+
#onCrumbFocus(node: SDK.DOMModel.DOMNode): () => void {
|
|
132
|
+
return (): void => node.highlight();
|
|
134
133
|
}
|
|
135
134
|
|
|
136
|
-
#onCrumbBlur(
|
|
137
|
-
|
|
135
|
+
#onCrumbBlur(): void {
|
|
136
|
+
SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
|
|
138
137
|
}
|
|
139
138
|
|
|
140
139
|
#engageResizeObserver(): void {
|
|
@@ -306,9 +305,9 @@ export class ElementsBreadcrumbs extends HTMLElement {
|
|
|
306
305
|
jslog=${VisualLogging.item().track({click:true, resize:true})}
|
|
307
306
|
@click=${this.#onCrumbClick(crumb.node)}
|
|
308
307
|
@mousemove=${this.#onCrumbMouseMove(crumb.node)}
|
|
309
|
-
@mouseleave=${this.#onCrumbMouseLeave
|
|
308
|
+
@mouseleave=${this.#onCrumbMouseLeave}
|
|
310
309
|
@focus=${this.#onCrumbFocus(crumb.node)}
|
|
311
|
-
@blur=${this.#onCrumbBlur
|
|
310
|
+
@blur=${this.#onCrumbBlur}
|
|
312
311
|
>
|
|
313
312
|
<devtools-node-text data-node-title=${crumb.title.main} .data=${{
|
|
314
313
|
nodeTitle: crumb.title.main,
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
5
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
6
|
-
|
|
7
|
-
import type {DOMNode} from './Helper.js';
|
|
6
|
+
import type * as SDK from '../../../core/sdk/sdk.js';
|
|
8
7
|
|
|
9
8
|
const UIStrings = {
|
|
10
9
|
/**
|
|
@@ -21,8 +20,7 @@ export type UserScrollPosition = 'start'|'middle'|'end';
|
|
|
21
20
|
export interface Crumb {
|
|
22
21
|
title: CrumbTitle;
|
|
23
22
|
selected: boolean;
|
|
24
|
-
node: DOMNode;
|
|
25
|
-
originalNode: unknown;
|
|
23
|
+
node: SDK.DOMModel.DOMNode;
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
export interface CrumbTitle {
|
|
@@ -30,25 +28,25 @@ export interface CrumbTitle {
|
|
|
30
28
|
extras: {id?: string, classes?: string[]};
|
|
31
29
|
}
|
|
32
30
|
|
|
33
|
-
export const crumbsToRender =
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
export const crumbsToRender =
|
|
32
|
+
(crumbs: readonly SDK.DOMModel.DOMNode[], selectedNode: SDK.DOMModel.DOMNode|null): Crumb[] => {
|
|
33
|
+
if (!selectedNode) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
};
|
|
37
|
+
return crumbs
|
|
38
|
+
.filter(crumb => {
|
|
39
|
+
return crumb.nodeType() !== Node.DOCUMENT_NODE;
|
|
40
|
+
})
|
|
41
|
+
.map(crumb => {
|
|
42
|
+
return {
|
|
43
|
+
title: determineElementTitle(crumb),
|
|
44
|
+
selected: crumb.id === selectedNode.id,
|
|
45
|
+
node: crumb,
|
|
46
|
+
};
|
|
47
|
+
})
|
|
48
|
+
.reverse();
|
|
49
|
+
};
|
|
52
50
|
|
|
53
51
|
const makeCrumbTitle = (main: string, extras = {}): CrumbTitle => {
|
|
54
52
|
return {
|
|
@@ -57,13 +55,15 @@ const makeCrumbTitle = (main: string, extras = {}): CrumbTitle => {
|
|
|
57
55
|
};
|
|
58
56
|
};
|
|
59
57
|
|
|
60
|
-
export const determineElementTitle = (domNode: DOMNode): CrumbTitle => {
|
|
61
|
-
|
|
58
|
+
export const determineElementTitle = (domNode: SDK.DOMModel.DOMNode): CrumbTitle => {
|
|
59
|
+
const nodeType = domNode.nodeType();
|
|
60
|
+
switch (nodeType) {
|
|
62
61
|
case Node.ELEMENT_NODE: {
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
const pseudoType = domNode.pseudoType();
|
|
63
|
+
if (pseudoType) {
|
|
64
|
+
return makeCrumbTitle('::' + pseudoType);
|
|
65
65
|
}
|
|
66
|
-
const crumbTitle = makeCrumbTitle(domNode.
|
|
66
|
+
const crumbTitle = makeCrumbTitle(domNode.nodeNameInCorrectCase());
|
|
67
67
|
|
|
68
68
|
const id = domNode.getAttribute('id');
|
|
69
69
|
if (id) {
|
|
@@ -86,8 +86,8 @@ export const determineElementTitle = (domNode: DOMNode): CrumbTitle => {
|
|
|
86
86
|
case Node.DOCUMENT_TYPE_NODE:
|
|
87
87
|
return makeCrumbTitle('<!doctype>');
|
|
88
88
|
case Node.DOCUMENT_FRAGMENT_NODE:
|
|
89
|
-
return makeCrumbTitle(domNode.shadowRootType ? '#shadow-root' : domNode.
|
|
89
|
+
return makeCrumbTitle(domNode.shadowRootType() ? '#shadow-root' : domNode.nodeNameInCorrectCase());
|
|
90
90
|
default:
|
|
91
|
-
return makeCrumbTitle(domNode.
|
|
91
|
+
return makeCrumbTitle(domNode.nodeNameInCorrectCase());
|
|
92
92
|
}
|
|
93
93
|
};
|