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.
- package/AUTHORS +1 -0
- package/WATCHLISTS +0 -4
- package/front_end/core/common/EventTarget.ts +0 -5
- package/front_end/core/common/Settings.ts +0 -66
- package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
- package/front_end/core/host/UserMetrics.ts +5 -0
- package/front_end/core/root/Runtime.ts +5 -5
- package/front_end/core/sdk/CSSMetadata.ts +5 -9
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +16 -34
- package/front_end/core/sdk/DebuggerModel.ts +92 -57
- package/front_end/core/sdk/EmulationModel.ts +2 -1
- package/front_end/core/sdk/NetworkManager.ts +16 -2
- package/front_end/core/sdk/OverlayModel.ts +19 -9
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +10 -4
- package/front_end/core/sdk/ResourceTreeModel.ts +20 -1
- package/front_end/core/sdk/SDKSettings.ts +117 -0
- package/front_end/core/sdk/Script.ts +9 -53
- package/front_end/core/sdk/sdk-meta.ts +0 -431
- package/front_end/devtools_compatibility.js +1 -0
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +6 -5
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +14 -15
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +157 -0
- package/front_end/entrypoints/main/MainImpl.ts +32 -0
- package/front_end/entrypoints/shell/shell.ts +0 -1
- package/front_end/foundation/Universe.ts +8 -0
- package/front_end/generated/InspectorBackendCommands.ts +8 -8
- package/front_end/generated/SupportedCSSProperties.ts +53 -4
- package/front_end/generated/protocol-mapping.d.ts +27 -21
- package/front_end/generated/protocol-proxy-api.d.ts +22 -17
- package/front_end/generated/protocol.ts +43 -18
- package/front_end/models/ai_assistance/AiAgent2.ts +47 -2
- package/front_end/models/ai_assistance/AiConversation.ts +22 -5
- package/front_end/models/ai_assistance/README.md +52 -26
- package/front_end/models/ai_assistance/agents/AiAgent.ts +54 -8
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +7 -194
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +21 -87
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -1
- package/front_end/models/ai_assistance/ai_assistance.ts +24 -0
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +124 -0
- package/front_end/models/ai_assistance/contexts/StorageContext.ts +100 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +69 -1
- package/front_end/models/ai_assistance/skills/README.md +63 -1
- package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
- package/front_end/models/ai_assistance/skills/SkillRegistry.ts +4 -0
- package/front_end/models/ai_assistance/skills/accessibility.md +7 -0
- package/front_end/models/ai_assistance/skills/performance.md +15 -1
- package/front_end/models/ai_assistance/skills/sources.md +16 -0
- package/front_end/models/ai_assistance/skills/storage.md +31 -0
- package/front_end/models/ai_assistance/tools/GetDetailedCallTree.ts +107 -0
- package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +122 -0
- package/front_end/models/ai_assistance/tools/GetResourceContent.ts +127 -0
- package/front_end/models/ai_assistance/tools/GetSourceContent.ts +101 -0
- package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +83 -0
- package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +106 -0
- package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +104 -0
- package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +95 -0
- package/front_end/models/ai_assistance/tools/ListSources.ts +116 -0
- package/front_end/models/ai_assistance/tools/RunLighthouse.ts +89 -0
- package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +90 -0
- package/front_end/models/ai_assistance/tools/Tool.ts +26 -1
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +22 -0
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -0
- package/front_end/models/bindings/CompilerScriptMapping.ts +4 -0
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
- package/front_end/models/bindings/ResourceScriptMapping.ts +3 -201
- package/front_end/models/bindings/SASSSourceMapping.ts +6 -0
- package/front_end/models/breakpoints/BreakpointManager.ts +2 -49
- package/front_end/models/comment_manager/CommentManager.ts +141 -0
- package/front_end/models/comment_manager/comment_manager.ts +9 -0
- package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +27 -0
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +10 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
- package/front_end/models/issues_manager/descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
- package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +6 -6
- package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -2
- package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
- package/front_end/models/persistence/persistence-meta.ts +9 -9
- package/front_end/models/trace/types/TraceEvents.ts +36 -0
- package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -3
- package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +25 -0
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +36 -36
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -0
- package/front_end/panels/accessibility/AccessibilityStrings.ts +168 -168
- package/front_end/panels/accessibility/SourceOrderView.ts +7 -7
- package/front_end/panels/accessibility/accessibility-meta.ts +2 -2
- package/front_end/panels/accessibility/accessibility.ts +2 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -5
- package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +2 -3
- package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +92 -12
- package/front_end/panels/ai_assistance/components/chatMessage.css +6 -0
- package/front_end/panels/application/ApplicationPanelSidebar.ts +10 -4
- package/front_end/panels/application/IndexedDBViews.ts +65 -63
- package/front_end/panels/application/StorageView.ts +116 -45
- package/front_end/panels/application/WebMCPView.ts +16 -7
- package/front_end/panels/application/application-meta.ts +11 -0
- package/front_end/panels/application/components/AdsView.ts +1 -1
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +5 -5
- package/front_end/panels/common/BadgeNotification.ts +8 -8
- package/front_end/panels/common/ExtensionPanel.ts +9 -8
- package/front_end/panels/common/ExtensionServer.ts +21 -1
- package/front_end/panels/common/GdpSignUpDialog.ts +16 -16
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -6
- package/front_end/panels/common/PersistenceUtils.ts +2 -2
- package/front_end/panels/common/common.ts +0 -97
- package/front_end/panels/console/ConsoleInsightTeaser.ts +2 -2
- package/front_end/panels/console/ConsolePanel.ts +4 -0
- package/front_end/panels/console/ConsolePinPane.ts +2 -2
- package/front_end/panels/console/ConsolePrompt.ts +12 -0
- package/front_end/panels/console/ConsoleView.ts +31 -20
- package/front_end/panels/console/ConsoleViewMessage.ts +37 -13
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
- package/front_end/panels/elements/ElementStatePaneWidget.ts +2 -1
- package/front_end/panels/elements/ElementsTreeElement.ts +455 -372
- package/front_end/panels/elements/LayoutPane.ts +2 -8
- package/front_end/panels/elements/StylePropertyTreeElement.ts +16 -15
- package/front_end/panels/elements/elements-meta.ts +152 -10
- package/front_end/panels/elements/elements.ts +0 -2
- package/front_end/panels/emulation/DeviceModeView.ts +9 -1
- package/front_end/panels/event_listeners/EventListenersView.ts +8 -4
- package/front_end/panels/issues/AffectedTrackingSitesView.ts +25 -14
- package/front_end/panels/lighthouse/LighthouseController.ts +3 -2
- package/front_end/panels/media/PlayerMessagesView.ts +149 -68
- package/front_end/panels/network/BinaryResourceView.ts +134 -81
- package/front_end/panels/network/EventSourceMessagesView.ts +10 -10
- package/front_end/panels/network/FetchHeaderCommenting.ts +291 -0
- package/front_end/panels/network/NetworkConfigView.ts +10 -10
- package/front_end/panels/network/NetworkDataGridNode.ts +14 -14
- package/front_end/panels/network/NetworkItemView.ts +27 -28
- package/front_end/panels/network/NetworkLogView.ts +137 -38
- package/front_end/panels/network/NetworkLogViewColumns.ts +35 -35
- package/front_end/panels/network/NetworkManageCustomHeadersView.ts +1 -1
- package/front_end/panels/network/NetworkPanel.ts +2 -2
- package/front_end/panels/network/RequestConditionsDrawer.ts +5 -5
- package/front_end/panels/network/RequestCookiesView.ts +4 -4
- package/front_end/panels/network/RequestHeadersView.ts +5 -5
- package/front_end/panels/network/RequestPayloadView.ts +4 -3
- package/front_end/panels/network/RequestTimingView.ts +8 -8
- package/front_end/panels/network/ResourceChunkView.ts +1 -1
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +16 -16
- package/front_end/panels/network/binaryResourceView.css +14 -12
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +2 -2
- package/front_end/panels/network/components/HeaderSectionRow.ts +1 -1
- package/front_end/panels/network/components/RequestTrustTokensView.ts +2 -2
- package/front_end/panels/network/network-meta.ts +1 -1
- package/front_end/panels/network/network.ts +2 -0
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +0 -1
- package/front_end/panels/profiler/HeapSnapshotView.ts +0 -2
- package/front_end/panels/profiler/heapProfiler.css +0 -9
- package/front_end/panels/recorder/RecorderPanel.ts +2 -3
- package/front_end/panels/screencast/ScreencastView.ts +148 -138
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +2 -2
- package/front_end/panels/sources/BreakpointsView.ts +2 -2
- package/front_end/panels/sources/DebuggerPlugin.ts +10 -59
- package/front_end/panels/sources/NavigatorView.ts +2 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
- package/front_end/panels/sources/SourcesPanel.ts +23 -73
- package/front_end/panels/sources/SourcesView.ts +248 -157
- package/front_end/panels/sources/TabbedEditorContainer.ts +118 -23
- package/front_end/panels/sources/UISourceCodeFrame.ts +5 -9
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +4 -2
- package/front_end/panels/sources/sources-meta.ts +52 -0
- package/front_end/panels/timeline/TimelineController.ts +36 -64
- package/front_end/panels/timeline/TimelinePanel.ts +11 -8
- package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
- package/front_end/panels/timeline/timelinePanel.css +0 -10
- package/front_end/panels/utils/utils.ts +7 -7
- package/front_end/services/tracing/PerformanceTracing.ts +5 -17
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
- package/front_end/third_party/codemirror.next/package.json +2 -2
- package/front_end/third_party/codemirror.next/rebuild.sh +4 -1
- package/front_end/ui/comments/CommentAnchorResolver.ts +430 -35
- package/front_end/ui/comments/CommentOverlayManager.ts +635 -0
- package/front_end/ui/comments/CommentsOverlayWidget.ts +134 -0
- package/front_end/ui/comments/comments.ts +4 -0
- package/front_end/ui/comments/commentsOverlay.css +49 -0
- package/front_end/{panels/common → ui/components/dialogs}/FreDialog.ts +6 -6
- package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +96 -0
- package/front_end/ui/components/dialogs/dialogs.ts +4 -0
- package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionDisclaimer.ts +13 -13
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -6
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionTeaser.ts +43 -46
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +22 -26
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationTeaser.ts +10 -10
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationUpgradeDialog.ts +5 -5
- package/front_end/ui/components/text_editor/text_editor.ts +4 -0
- package/front_end/ui/legacy/Toolbar.ts +1 -1
- package/front_end/ui/legacy/UIUtils.ts +0 -56
- package/front_end/ui/legacy/View.ts +10 -4
- package/front_end/ui/legacy/Widget.ts +10 -1
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +2 -1
- package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +5 -4
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +11 -3
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +507 -209
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +5 -0
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -16
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +5 -12
- package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +38 -20
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +12 -2
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +37 -6
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +22 -4
- package/front_end/ui/settings/SettingUIRegistration.ts +55 -6
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/mcp/mcp.ts +6 -1
- package/package.json +6 -6
- package/front_end/Images/toolbarResizerVertical.png +0 -0
- package/front_end/emulated_devices/MotoG4-landscape.svg +0 -155
- package/front_end/emulated_devices/MotoG4-portrait.svg +0 -155
- package/front_end/emulated_devices/Nexus5X-landscape.svg +0 -19
- package/front_end/emulated_devices/Nexus5X-portrait.svg +0 -19
- package/front_end/emulated_devices/Nexus6P-landscape.svg +0 -50
- package/front_end/emulated_devices/Nexus6P-portrait.svg +0 -54
- package/front_end/emulated_devices/google-nest-hub-horizontal.png +0 -0
- package/front_end/emulated_devices/google-nest-hub-max-horizontal.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-2x.png +0 -0
- package/front_end/emulated_devices/iPad-landscape.svg +0 -73
- package/front_end/emulated_devices/iPad-portrait.svg +0 -76
- package/front_end/emulated_devices/iPhone5-landscape.svg +0 -99
- package/front_end/emulated_devices/iPhone5-portrait.svg +0 -83
- package/front_end/emulated_devices/iPhone6-landscape.svg +0 -111
- package/front_end/emulated_devices/iPhone6-portrait.svg +0 -116
- package/front_end/emulated_devices/iPhone6Plus-landscape.svg +0 -118
- package/front_end/emulated_devices/iPhone6Plus-portrait.svg +0 -116
- package/front_end/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/README.md +0 -9
- package/front_end/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/iPad-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPad-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/optimized_images.gni +0 -53
- package/front_end/models/ai_assistance/agents/README.md +0 -136
- package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +0 -89
- package/front_end/ui/legacy/components/object_ui/object_ui-meta.ts +0 -27
- /package/front_end/{panels/common → ui/components/dialogs}/freDialog.css +0 -0
- /package/front_end/{panels/common/common.css → ui/components/dialogs/typeToAllowDialog.css} +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionDisclaimer.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionTeaser.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationTeaser.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationUpgradeDialog.css +0 -0
|
@@ -64,8 +64,8 @@ export interface ObjectPropertySearchResult extends UI.TreeOutline.TreeSearchRes
|
|
|
64
64
|
matchType: 'name'|'value';
|
|
65
65
|
range: TextUtils.TextRange.SourceRange;
|
|
66
66
|
}
|
|
67
|
-
const {widget} = UI.Widget;
|
|
68
|
-
const {ref, repeat, ifDefined, classMap
|
|
67
|
+
const {widget, widgetRef} = UI.Widget;
|
|
68
|
+
const {ref, repeat, ifDefined, classMap} = Directives;
|
|
69
69
|
const UIStrings = {
|
|
70
70
|
/**
|
|
71
71
|
* @description Text in Object Properties Section
|
|
@@ -167,6 +167,7 @@ const objectPropertiesSectionMap = new WeakMap<Element, ObjectPropertiesSection>
|
|
|
167
167
|
// the legacy TreeOutline/TreeElement dependencies are removed.
|
|
168
168
|
const topLevelNodesCache = new WeakMap<ObjectTreeNodeBase, {
|
|
169
169
|
nodes: UI.TreeOutline.TreeElement[],
|
|
170
|
+
listener: () => void,
|
|
170
171
|
linkifier?: Components.Linkifier.Linkifier,
|
|
171
172
|
}>();
|
|
172
173
|
|
|
@@ -416,6 +417,7 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
416
417
|
get isWasm(): boolean {
|
|
417
418
|
return isWasmObject(this.object);
|
|
418
419
|
}
|
|
420
|
+
|
|
419
421
|
get expanded(): boolean {
|
|
420
422
|
return this.#expanded;
|
|
421
423
|
}
|
|
@@ -443,6 +445,7 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
443
445
|
get search(): UI.TreeOutline.TreeSearch<ObjectTreeNodeBase>|undefined {
|
|
444
446
|
return this.options.search;
|
|
445
447
|
}
|
|
448
|
+
|
|
446
449
|
get includeNullOrUndefinedValues(): boolean {
|
|
447
450
|
return this.filter?.includeNullOrUndefinedValues ?? true;
|
|
448
451
|
}
|
|
@@ -488,7 +491,7 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
488
491
|
yield* child.#walk(Math.max(-1, maxDepth - 1), filter);
|
|
489
492
|
}
|
|
490
493
|
}
|
|
491
|
-
|
|
494
|
+
}
|
|
492
495
|
|
|
493
496
|
async expandRecursively(maxDepth: number): Promise<void> {
|
|
494
497
|
for (const node of this.#walk(maxDepth, n => n.canExpandRecursively)) {
|
|
@@ -968,33 +971,6 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
|
|
|
968
971
|
this.rootElement().childrenListElement.classList.add('source-code', 'object-properties-section');
|
|
969
972
|
}
|
|
970
973
|
|
|
971
|
-
static defaultObjectPresentation(object: SDK.RemoteObject.RemoteObject, linkifier?: Components.Linkifier.Linkifier,
|
|
972
|
-
skipProto?: boolean, readOnly?: boolean): Element {
|
|
973
|
-
const objectPropertiesSection =
|
|
974
|
-
ObjectPropertiesSection.defaultObjectPropertiesSection(object, linkifier, skipProto, readOnly);
|
|
975
|
-
if (!object.hasChildren) {
|
|
976
|
-
return objectPropertiesSection.titleElement;
|
|
977
|
-
}
|
|
978
|
-
return objectPropertiesSection.element;
|
|
979
|
-
}
|
|
980
|
-
|
|
981
|
-
static defaultObjectPropertiesSection(object: SDK.RemoteObject.RemoteObject,
|
|
982
|
-
linkifier?: Components.Linkifier.Linkifier, skipProto?: boolean,
|
|
983
|
-
readOnly?: boolean): ObjectPropertiesSection {
|
|
984
|
-
const titleElement = document.createElement('span');
|
|
985
|
-
titleElement.classList.add('source-code');
|
|
986
|
-
const shadowRoot = UI.UIUtils.createShadowRootWithCoreStyles(titleElement, {cssFile: objectValueStyles});
|
|
987
|
-
const propertyValue =
|
|
988
|
-
ObjectPropertiesSection.createPropertyValue(object, /* wasThrown */ false, /* showPreview */ true);
|
|
989
|
-
shadowRoot.appendChild(propertyValue);
|
|
990
|
-
const objectPropertiesSection = new ObjectPropertiesSection(object, titleElement, linkifier, undefined, !readOnly);
|
|
991
|
-
if (skipProto) {
|
|
992
|
-
objectPropertiesSection.skipProto();
|
|
993
|
-
}
|
|
994
|
-
|
|
995
|
-
return objectPropertiesSection;
|
|
996
|
-
}
|
|
997
|
-
|
|
998
974
|
// The RemoteObjectProperty overload is kept for web test compatibility for now.
|
|
999
975
|
static compareProperties(propertyA: ObjectTreeNode|SDK.RemoteObject.RemoteObjectProperty,
|
|
1000
976
|
propertyB: ObjectTreeNode|SDK.RemoteObject.RemoteObjectProperty,
|
|
@@ -1144,19 +1120,6 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
|
|
|
1144
1120
|
}
|
|
1145
1121
|
}
|
|
1146
1122
|
|
|
1147
|
-
static createPropertyValueWithCustomSupport(value: SDK.RemoteObject.RemoteObject, wasThrown: boolean,
|
|
1148
|
-
showPreview: boolean, linkifier?: Components.Linkifier.Linkifier,
|
|
1149
|
-
isSyntheticProperty?: boolean, variableName?: string,
|
|
1150
|
-
includeNullOrUndefined?: boolean): HTMLElement {
|
|
1151
|
-
if (value.customPreview()) {
|
|
1152
|
-
const result = (new CustomPreviewComponent(value)).element;
|
|
1153
|
-
result.classList.add('object-properties-section-custom-section');
|
|
1154
|
-
return result;
|
|
1155
|
-
}
|
|
1156
|
-
return ObjectPropertiesSection.createPropertyValue(value, wasThrown, showPreview, linkifier, isSyntheticProperty,
|
|
1157
|
-
variableName, includeNullOrUndefined);
|
|
1158
|
-
}
|
|
1159
|
-
|
|
1160
1123
|
static getMemoryIcon(object: SDK.RemoteObject.RemoteObject, expression?: string): LitTemplate {
|
|
1161
1124
|
// Directly set styles on memory icon, so that the memory icon is also
|
|
1162
1125
|
// styled within the context of code mirror.
|
|
@@ -1181,81 +1144,6 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
|
|
|
1181
1144
|
element.appendChild(fragment);
|
|
1182
1145
|
}
|
|
1183
1146
|
|
|
1184
|
-
static createPropertyValue(value: SDK.RemoteObject.RemoteObject, wasThrown: boolean, showPreview: boolean,
|
|
1185
|
-
linkifier?: Components.Linkifier.Linkifier, isSyntheticProperty = false,
|
|
1186
|
-
variableName?: string, includeNullOrUndefined?: boolean): HTMLElement {
|
|
1187
|
-
const propertyValue = document.createDocumentFragment();
|
|
1188
|
-
const type = value.type;
|
|
1189
|
-
const subtype = value.subtype;
|
|
1190
|
-
const description = value.description || '';
|
|
1191
|
-
const className = value.className;
|
|
1192
|
-
|
|
1193
|
-
const contents = (): LitTemplate => {
|
|
1194
|
-
if (type === 'object' && subtype === 'internal#location') {
|
|
1195
|
-
const rawLocation = value.debuggerModel().createRawLocationByScriptId(
|
|
1196
|
-
value.value.scriptId, value.value.lineNumber, value.value.columnNumber);
|
|
1197
|
-
if (rawLocation && linkifier) {
|
|
1198
|
-
return html`${linkifier.linkifyRawLocation(rawLocation, Platform.DevToolsPath.EmptyUrlString, 'value')}`;
|
|
1199
|
-
}
|
|
1200
|
-
const title = description || undefined;
|
|
1201
|
-
return html`<span class=value title=${ifDefined(title)}>${'<' + i18nString(UIStrings.unknown) + '>'}</span>`;
|
|
1202
|
-
}
|
|
1203
|
-
if (type === 'string' && typeof description === 'string') {
|
|
1204
|
-
const text = Platform.StringUtilities.escapeUnicodeAsText(JSON.stringify(description));
|
|
1205
|
-
const tooLong = description.length > maxRenderableStringLength;
|
|
1206
|
-
return html`<span class="value object-value-string" title=${ifDefined(tooLong ? undefined : description)}>${
|
|
1207
|
-
tooLong ? widget(ExpandableTextPropertyValue, {text}) : text}</span>`;
|
|
1208
|
-
}
|
|
1209
|
-
if (type === 'object' && subtype === 'trustedtype') {
|
|
1210
|
-
const text = `${className} "${description}"`;
|
|
1211
|
-
const tooLong = text.length > maxRenderableStringLength;
|
|
1212
|
-
return html`<span class="value object-value-trustedtype" title=${ifDefined(tooLong ? undefined : text)}>${
|
|
1213
|
-
tooLong ? widget(ExpandableTextPropertyValue, {text}) : renderTrustedType(description, className)}</span>`;
|
|
1214
|
-
}
|
|
1215
|
-
if (type === 'function') {
|
|
1216
|
-
return html`<span class="value">${
|
|
1217
|
-
ObjectPropertiesSection.valueElementForFunctionDescription(description)}</span>`;
|
|
1218
|
-
}
|
|
1219
|
-
if (type === 'object' && subtype === 'node' && description) {
|
|
1220
|
-
return html`<span class="value object-value-node"
|
|
1221
|
-
@click=${(event: Event) => {
|
|
1222
|
-
void Common.Revealer.reveal(value);
|
|
1223
|
-
event.consume(true);
|
|
1224
|
-
}}
|
|
1225
|
-
@mousemove=${() => SDK.OverlayModel.OverlayModel.highlightObjectAsDOMNode(value)}
|
|
1226
|
-
@mouseleave=${
|
|
1227
|
-
() => SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance())}
|
|
1228
|
-
>${renderNodeTitle(description)}</span>`;
|
|
1229
|
-
}
|
|
1230
|
-
if (description.length > maxRenderableStringLength) {
|
|
1231
|
-
// clang-format off
|
|
1232
|
-
return html`<span class="value object-value-${subtype || type}" title=${description}>
|
|
1233
|
-
${widget(ExpandableTextPropertyValue, {text: description})}
|
|
1234
|
-
</span>`;
|
|
1235
|
-
// clang-format on
|
|
1236
|
-
}
|
|
1237
|
-
const hasPreview = value.preview && showPreview;
|
|
1238
|
-
return html`<span class="value object-value-${subtype || type}" title=${description}>${
|
|
1239
|
-
hasPreview ? new RemoteObjectPreviewFormatter().renderObjectPreview(value.preview, includeNullOrUndefined) :
|
|
1240
|
-
description}${isSyntheticProperty ? nothing : this.getMemoryIcon(value, variableName)}</span>`;
|
|
1241
|
-
};
|
|
1242
|
-
|
|
1243
|
-
if (wasThrown) {
|
|
1244
|
-
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
1245
|
-
render(html`<span class="error value">${
|
|
1246
|
-
uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.exceptionS, {PH1: contents()})}</span>`,
|
|
1247
|
-
propertyValue);
|
|
1248
|
-
} else {
|
|
1249
|
-
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
1250
|
-
render(contents(), propertyValue);
|
|
1251
|
-
}
|
|
1252
|
-
const child = propertyValue.firstElementChild;
|
|
1253
|
-
if (!(child instanceof HTMLElement)) {
|
|
1254
|
-
throw new Error('Expected an HTML element');
|
|
1255
|
-
}
|
|
1256
|
-
return child;
|
|
1257
|
-
}
|
|
1258
|
-
|
|
1259
1147
|
static isDisplayableProperty(property: SDK.RemoteObject.RemoteObjectProperty,
|
|
1260
1148
|
parentProperty?: SDK.RemoteObject.RemoteObjectProperty): boolean {
|
|
1261
1149
|
if (!parentProperty?.synthetic) {
|
|
@@ -1304,6 +1192,174 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
|
|
|
1304
1192
|
}
|
|
1305
1193
|
}
|
|
1306
1194
|
|
|
1195
|
+
export class ObjectPropertiesSectionWidget extends UI.Widget.Widget {
|
|
1196
|
+
#root?: ObjectTree;
|
|
1197
|
+
#title?: Element|TemplateResult;
|
|
1198
|
+
#skipProto = false;
|
|
1199
|
+
#linkifier?: Components.Linkifier.Linkifier;
|
|
1200
|
+
#showOverflow = true;
|
|
1201
|
+
#rootContextMenuEnabled = false;
|
|
1202
|
+
readonly #view: ObjectPropertiesSectionView = OBJECT_PROPERTIES_SECTION_DEFAULT_VIEW;
|
|
1203
|
+
|
|
1204
|
+
constructor(element?: HTMLElement, view: ObjectPropertiesSectionView = OBJECT_PROPERTIES_SECTION_DEFAULT_VIEW) {
|
|
1205
|
+
super(element);
|
|
1206
|
+
this.#view = view;
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
get root(): SDK.RemoteObject.RemoteObject|undefined {
|
|
1210
|
+
return this.#root?.object;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
set root(val: SDK.RemoteObject.RemoteObject) {
|
|
1214
|
+
if (val === this.#root?.object) {
|
|
1215
|
+
return;
|
|
1216
|
+
}
|
|
1217
|
+
this.objectTree = new ObjectTree(val, {
|
|
1218
|
+
readOnly: false,
|
|
1219
|
+
propertiesMode: ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED,
|
|
1220
|
+
});
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
get objectTree(): ObjectTree|undefined {
|
|
1224
|
+
return this.#root;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
set objectTree(val: ObjectTree|undefined) {
|
|
1228
|
+
if (val === this.#root) {
|
|
1229
|
+
return;
|
|
1230
|
+
}
|
|
1231
|
+
this.#root?.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1232
|
+
this.#root?.removeEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1233
|
+
this.#root = val;
|
|
1234
|
+
this.#root?.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1235
|
+
this.#root?.addEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1236
|
+
this.requestUpdate();
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
get title(): Element|TemplateResult|undefined {
|
|
1240
|
+
return this.#title;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
set title(val: Element|TemplateResult|undefined) {
|
|
1244
|
+
if (val === this.#title) {
|
|
1245
|
+
return;
|
|
1246
|
+
}
|
|
1247
|
+
this.#title = val;
|
|
1248
|
+
this.requestUpdate();
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
get skipProto(): boolean {
|
|
1252
|
+
return this.#skipProto;
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
set skipProto(val: boolean) {
|
|
1256
|
+
if (val === this.#skipProto) {
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1259
|
+
this.#skipProto = val;
|
|
1260
|
+
this.requestUpdate();
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
get linkifier(): Components.Linkifier.Linkifier|undefined {
|
|
1264
|
+
return this.#linkifier;
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
set linkifier(val: Components.Linkifier.Linkifier) {
|
|
1268
|
+
if (val === this.#linkifier) {
|
|
1269
|
+
return;
|
|
1270
|
+
}
|
|
1271
|
+
this.#linkifier = val;
|
|
1272
|
+
this.requestUpdate();
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
get showOverflow(): boolean {
|
|
1276
|
+
return this.#showOverflow;
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
set showOverflow(val: boolean) {
|
|
1280
|
+
if (val === this.#showOverflow) {
|
|
1281
|
+
return;
|
|
1282
|
+
}
|
|
1283
|
+
this.#showOverflow = val;
|
|
1284
|
+
this.requestUpdate();
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
override performUpdate(): void {
|
|
1288
|
+
if (!this.#root) {
|
|
1289
|
+
return;
|
|
1290
|
+
}
|
|
1291
|
+
this.#view({
|
|
1292
|
+
objectTree: this.#root,
|
|
1293
|
+
title: this.#title,
|
|
1294
|
+
linkifier: this.#linkifier,
|
|
1295
|
+
skipProto: this.#skipProto,
|
|
1296
|
+
showOverflow: this.#showOverflow,
|
|
1297
|
+
onRootContextMenu: this.#rootContextMenuEnabled ? this.onRootContextMenu : undefined,
|
|
1298
|
+
onRootItemContextMenu: this.onRootItemContextMenu,
|
|
1299
|
+
},
|
|
1300
|
+
{}, this.contentElement);
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
override onDetach(): void {
|
|
1304
|
+
this.#root?.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1305
|
+
this.#root?.removeEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
override wasShown(): void {
|
|
1309
|
+
super.wasShown();
|
|
1310
|
+
this.#root?.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1311
|
+
this.#root?.removeEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1312
|
+
this.#root?.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1313
|
+
this.#root?.addEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
get rootContextMenuEnabled(): boolean {
|
|
1317
|
+
return this.#rootContextMenuEnabled;
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
set rootContextMenuEnabled(val: boolean) {
|
|
1321
|
+
if (this.#rootContextMenuEnabled === val) {
|
|
1322
|
+
return;
|
|
1323
|
+
}
|
|
1324
|
+
this.#rootContextMenuEnabled = val;
|
|
1325
|
+
this.requestUpdate();
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
private onRootContextMenu = (contextMenu: UI.ContextMenu.ContextMenu): void => {
|
|
1329
|
+
if (!this.#root) {
|
|
1330
|
+
return;
|
|
1331
|
+
}
|
|
1332
|
+
contextMenu.appendApplicableItems(this.#root);
|
|
1333
|
+
if (this.#root.object instanceof SDK.RemoteObject.LocalJSONObject) {
|
|
1334
|
+
contextMenu.viewSection().appendItem(i18nString(UIStrings.expandRecursively),
|
|
1335
|
+
this.#root.expandRecursively.bind(this.#root, EXPANDABLE_MAX_DEPTH),
|
|
1336
|
+
{jslogContext: 'expand-recursively'});
|
|
1337
|
+
contextMenu.viewSection().appendItem(i18nString(UIStrings.collapseChildren),
|
|
1338
|
+
this.#root.collapseRecursively.bind(this.#root),
|
|
1339
|
+
{jslogContext: 'collapse-children'});
|
|
1340
|
+
}
|
|
1341
|
+
};
|
|
1342
|
+
|
|
1343
|
+
private onRootItemContextMenu = (contextMenu: UI.ContextMenu.ContextMenu): void => {
|
|
1344
|
+
const root = this.#root;
|
|
1345
|
+
if (!root) {
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
populateObjectTreeContextMenu(
|
|
1349
|
+
contextMenu,
|
|
1350
|
+
root,
|
|
1351
|
+
root.expandRecursively.bind(root, EXPANDABLE_MAX_DEPTH),
|
|
1352
|
+
root.collapseRecursively.bind(root),
|
|
1353
|
+
() => {
|
|
1354
|
+
root.sortPropertiesAlphabetically = !root.sortPropertiesAlphabetically;
|
|
1355
|
+
},
|
|
1356
|
+
() => {
|
|
1357
|
+
root.includeNullOrUndefinedValues = !root.includeNullOrUndefinedValues;
|
|
1358
|
+
},
|
|
1359
|
+
);
|
|
1360
|
+
};
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1307
1363
|
/** @constant */
|
|
1308
1364
|
const ARRAY_LOAD_THRESHOLD = 100;
|
|
1309
1365
|
|
|
@@ -1366,71 +1422,227 @@ export function populateObjectTreeContextMenu(
|
|
|
1366
1422
|
{checked: object.includeNullOrUndefinedValues, jslogContext: 'show-all'});
|
|
1367
1423
|
}
|
|
1368
1424
|
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
const
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1425
|
+
interface ObjectTreeViewInput {
|
|
1426
|
+
renderAsSubtree: boolean;
|
|
1427
|
+
objectTree?: ObjectTree;
|
|
1428
|
+
linkifier?: Components.Linkifier.Linkifier;
|
|
1429
|
+
emptyPlaceholder?: string;
|
|
1430
|
+
skipProto: boolean;
|
|
1431
|
+
onExpand: (expanded: boolean) => void;
|
|
1432
|
+
}
|
|
1433
|
+
type ObjectTreeView = (input: ObjectTreeViewInput, output: object, target: HTMLElement) => void;
|
|
1434
|
+
export const OBJECT_TREE_DEFAULT_VIEW: ObjectTreeView = (input, output, target) => {
|
|
1435
|
+
const objectTree = input.objectTree;
|
|
1436
|
+
if (!objectTree) {
|
|
1437
|
+
render(nothing, target);
|
|
1438
|
+
return;
|
|
1439
|
+
}
|
|
1440
|
+
const classes = input.renderAsSubtree ? ['source-code', 'object-properties-section'] : [];
|
|
1441
|
+
let entry = topLevelNodesCache.get(objectTree);
|
|
1442
|
+
if (!entry || entry.linkifier !== input.linkifier || (!entry.nodes.length && objectTree.children)) {
|
|
1443
|
+
if (entry) {
|
|
1444
|
+
objectTree.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, entry.listener);
|
|
1445
|
+
}
|
|
1446
|
+
const nodes = Array.from(ObjectPropertyTreeElement.createNodes(objectTree, input.skipProto, false, input.linkifier,
|
|
1447
|
+
input.emptyPlaceholder));
|
|
1389
1448
|
const listener = (): void => {
|
|
1390
1449
|
topLevelNodesCache.delete(objectTree);
|
|
1391
1450
|
objectTree.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, listener);
|
|
1392
1451
|
};
|
|
1452
|
+
entry = {linkifier: input.linkifier, nodes, listener};
|
|
1453
|
+
topLevelNodesCache.set(objectTree, entry);
|
|
1393
1454
|
objectTree.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, listener);
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
render(entry.nodes.map(node => html`<devtools-tree-wrapper .treeElement=${node}></devtools-tree-wrapper>`), target, {
|
|
1458
|
+
container: {
|
|
1459
|
+
classes,
|
|
1460
|
+
attributes: {role: 'group'},
|
|
1461
|
+
interceptedListeners: {
|
|
1462
|
+
expand: (e: Event) => input.onExpand((e as UI.TreeOutline.TreeViewElement.ExpandEvent).detail.expanded),
|
|
1463
|
+
},
|
|
1464
|
+
},
|
|
1465
|
+
});
|
|
1466
|
+
};
|
|
1467
|
+
|
|
1468
|
+
export class ObjectTreeWidget extends UI.Widget.Widget {
|
|
1469
|
+
#objectTree: ObjectTree|undefined = undefined;
|
|
1470
|
+
#linkifier: Components.Linkifier.Linkifier|undefined = undefined;
|
|
1471
|
+
#emptyPlaceholder?: string;
|
|
1472
|
+
#renderAsSubtree = false;
|
|
1473
|
+
#skipProto = false;
|
|
1474
|
+
readonly #view: ObjectTreeView;
|
|
1475
|
+
|
|
1476
|
+
constructor(element?: HTMLElement, view = OBJECT_TREE_DEFAULT_VIEW) {
|
|
1477
|
+
super(element);
|
|
1478
|
+
this.#view = view;
|
|
1479
|
+
}
|
|
1480
|
+
|
|
1481
|
+
onExpand = (expanded: boolean): void => {
|
|
1482
|
+
if (this.#objectTree) {
|
|
1483
|
+
this.#objectTree.expanded = expanded;
|
|
1484
|
+
}
|
|
1485
|
+
};
|
|
1486
|
+
|
|
1487
|
+
get skipProto(): boolean {
|
|
1488
|
+
return this.#skipProto;
|
|
1489
|
+
}
|
|
1394
1490
|
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1491
|
+
set skipProto(val: boolean) {
|
|
1492
|
+
this.#skipProto = val;
|
|
1493
|
+
this.requestUpdate();
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
get objectTree(): ObjectTree|undefined {
|
|
1497
|
+
return this.#objectTree;
|
|
1498
|
+
}
|
|
1401
1499
|
|
|
1402
|
-
|
|
1500
|
+
set objectTree(val: ObjectTree) {
|
|
1501
|
+
if (val === this.#objectTree) {
|
|
1502
|
+
return;
|
|
1503
|
+
}
|
|
1504
|
+
this.#objectTree?.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1505
|
+
this.#objectTree?.removeEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1506
|
+
this.#objectTree = val;
|
|
1507
|
+
this.#objectTree?.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1508
|
+
this.#objectTree?.addEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1509
|
+
this.requestUpdate();
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
get linkifier(): Components.Linkifier.Linkifier|undefined {
|
|
1513
|
+
return this.#linkifier;
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
set linkifier(val: Components.Linkifier.Linkifier) {
|
|
1517
|
+
if (val === this.#linkifier) {
|
|
1518
|
+
return;
|
|
1519
|
+
}
|
|
1520
|
+
this.#linkifier = val;
|
|
1521
|
+
this.requestUpdate();
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
get emptyPlaceholder(): string|undefined {
|
|
1525
|
+
return this.#emptyPlaceholder;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
set emptyPlaceholder(val: string) {
|
|
1529
|
+
if (val === this.#emptyPlaceholder) {
|
|
1530
|
+
return;
|
|
1531
|
+
}
|
|
1532
|
+
this.#emptyPlaceholder = val;
|
|
1533
|
+
this.requestUpdate();
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
get renderAsSubtree(): boolean {
|
|
1537
|
+
return this.#renderAsSubtree;
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
set renderAsSubtree(val: boolean) {
|
|
1541
|
+
if (val === this.#renderAsSubtree) {
|
|
1542
|
+
return;
|
|
1543
|
+
}
|
|
1544
|
+
this.#renderAsSubtree = val;
|
|
1545
|
+
this.requestUpdate();
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1548
|
+
override async performUpdate(): Promise<void> {
|
|
1549
|
+
if (this.#objectTree?.expanded) {
|
|
1550
|
+
await ObjectPropertyTreeElement.populateChildrenIfNeeded(this.#objectTree);
|
|
1551
|
+
}
|
|
1552
|
+
this.#view(this, {}, this.contentElement);
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
override onDetach(): void {
|
|
1556
|
+
this.#objectTree?.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1557
|
+
this.#objectTree?.removeEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
override wasShown(): void {
|
|
1561
|
+
super.wasShown();
|
|
1562
|
+
this.#objectTree?.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1563
|
+
this.#objectTree?.removeEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1564
|
+
this.#objectTree?.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.requestUpdate, this);
|
|
1565
|
+
this.#objectTree?.addEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.requestUpdate, this);
|
|
1566
|
+
}
|
|
1403
1567
|
}
|
|
1404
1568
|
|
|
1405
1569
|
export function renderObjectTree(
|
|
1406
1570
|
objectTree: ObjectTree,
|
|
1407
1571
|
linkifier?: Components.Linkifier.Linkifier,
|
|
1408
|
-
emptyPlaceholder?: string
|
|
1572
|
+
emptyPlaceholder?: string,
|
|
1409
1573
|
): LitTemplate|DirectiveResult {
|
|
1410
|
-
return
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1574
|
+
return html`<ul role="group" ${
|
|
1575
|
+
widget(ObjectTreeWidget, {objectTree, linkifier, emptyPlaceholder, renderAsSubtree: true})} ${
|
|
1576
|
+
/* The empty widgetRef forces the widget to be materialized in the template DOM */
|
|
1577
|
+
widgetRef(ObjectTreeWidget, () => {})}></ul>`;
|
|
1414
1578
|
}
|
|
1415
1579
|
|
|
1416
|
-
export
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
<ul role="tree" class="source-code object-properties-section">
|
|
1425
|
-
<style>${objectValueStyles}</style>
|
|
1426
|
-
<style>${objectPropertiesSectionStyles}</style>
|
|
1427
|
-
<li role="treeitem" class="object-properties-section-root-element" ?open=${objectTree.expanded}>
|
|
1428
|
-
${title}
|
|
1429
|
-
${treeContent}
|
|
1430
|
-
</li>
|
|
1431
|
-
</ul>
|
|
1432
|
-
`}></devtools-tree>`;
|
|
1580
|
+
export interface ObjectPropertiesSectionViewInput {
|
|
1581
|
+
objectTree: ObjectTree;
|
|
1582
|
+
title?: Element|TemplateResult;
|
|
1583
|
+
linkifier?: Components.Linkifier.Linkifier;
|
|
1584
|
+
skipProto: boolean;
|
|
1585
|
+
showOverflow: boolean;
|
|
1586
|
+
onRootContextMenu?: (menu: UI.ContextMenu.ContextMenu) => void;
|
|
1587
|
+
onRootItemContextMenu: (menu: UI.ContextMenu.ContextMenu) => void;
|
|
1433
1588
|
}
|
|
1589
|
+
|
|
1590
|
+
export type ObjectPropertiesSectionView =
|
|
1591
|
+
(input: ObjectPropertiesSectionViewInput, output: object, target: HTMLElement) => void;
|
|
1592
|
+
|
|
1593
|
+
export const OBJECT_PROPERTIES_SECTION_DEFAULT_VIEW: ObjectPropertiesSectionView = (input, _output, target) => {
|
|
1594
|
+
const contextMenuHandler = (event: Event): void => {
|
|
1595
|
+
if (!input.onRootContextMenu) {
|
|
1596
|
+
return;
|
|
1597
|
+
}
|
|
1598
|
+
event.consume(true);
|
|
1599
|
+
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
1600
|
+
input.onRootContextMenu(contextMenu);
|
|
1601
|
+
void contextMenu.show();
|
|
1602
|
+
};
|
|
1603
|
+
|
|
1604
|
+
const onRootItemContextMenuHandler = (event: Event): void => {
|
|
1605
|
+
event.consume(true);
|
|
1606
|
+
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
1607
|
+
input.onRootItemContextMenu(contextMenu);
|
|
1608
|
+
void contextMenu.show();
|
|
1609
|
+
};
|
|
1610
|
+
|
|
1611
|
+
render(html`
|
|
1612
|
+
<devtools-tree
|
|
1613
|
+
class="object-properties-section"
|
|
1614
|
+
?hide-overflow=${!input.showOverflow}
|
|
1615
|
+
show-selection-on-keyboard-focus
|
|
1616
|
+
@contextmenu=${input.onRootContextMenu ? contextMenuHandler : undefined}
|
|
1617
|
+
.template=${
|
|
1618
|
+
input.title ?
|
|
1619
|
+
html`
|
|
1620
|
+
<ul role="tree" class="source-code object-properties-section">
|
|
1621
|
+
<style>${objectValueStyles}</style>
|
|
1622
|
+
<style>${objectPropertiesSectionStyles}</style>
|
|
1623
|
+
<li role="treeitem" class="object-properties-section-root-element" ?open=${
|
|
1624
|
+
input.objectTree.expanded} @contextmenu=${onRootItemContextMenuHandler}>
|
|
1625
|
+
${input.title}
|
|
1626
|
+
<ul role="group" ${widget(ObjectTreeWidget, {
|
|
1627
|
+
objectTree: input.objectTree,
|
|
1628
|
+
linkifier: input.linkifier,
|
|
1629
|
+
skipProto: input.skipProto,
|
|
1630
|
+
})} ${widgetRef(ObjectTreeWidget, () => {})}></ul>
|
|
1631
|
+
</li>
|
|
1632
|
+
</ul>` :
|
|
1633
|
+
html`
|
|
1634
|
+
<ul role="tree" class="source-code object-properties-section title-less-mode" open ${
|
|
1635
|
+
widget(ObjectTreeWidget,
|
|
1636
|
+
{objectTree: input.objectTree, linkifier: input.linkifier, skipProto: input.skipProto})} ${
|
|
1637
|
+
/* The empty widgetRef forces the widget to be materialized in the template DOM */
|
|
1638
|
+
widgetRef(ObjectTreeWidget, () => {})}>
|
|
1639
|
+
<style>${objectValueStyles}</style>
|
|
1640
|
+
<style>${objectPropertiesSectionStyles}</style>
|
|
1641
|
+
</ul>`}>
|
|
1642
|
+
</devtools-tree>`,
|
|
1643
|
+
target);
|
|
1644
|
+
};
|
|
1645
|
+
|
|
1434
1646
|
class RootElement extends UI.TreeOutline.TreeElement {
|
|
1435
1647
|
private readonly object: ObjectTree;
|
|
1436
1648
|
private readonly linkifier: Components.Linkifier.Linkifier|undefined;
|
|
@@ -1525,6 +1737,123 @@ export async function formatObjectAsFunction(func: SDK.RemoteObject.RemoteObject
|
|
|
1525
1737
|
details, linkify);
|
|
1526
1738
|
}
|
|
1527
1739
|
|
|
1740
|
+
export function renderPropertyValue(value: SDK.RemoteObject.RemoteObject, wasThrown: boolean, showPreview: boolean,
|
|
1741
|
+
linkifier?: Components.Linkifier.Linkifier, isSyntheticProperty = false,
|
|
1742
|
+
variableName?: string, includeNullOrUndefined?: boolean, useCustomPreview = false,
|
|
1743
|
+
valueRef?: (element: Element|undefined) => void): LitTemplate {
|
|
1744
|
+
if (useCustomPreview && value.customPreview()) {
|
|
1745
|
+
const result = (new CustomPreviewComponent(value)).element;
|
|
1746
|
+
result.classList.add('object-properties-section-custom-section');
|
|
1747
|
+
valueRef?.(result);
|
|
1748
|
+
return html`${result}`;
|
|
1749
|
+
}
|
|
1750
|
+
|
|
1751
|
+
const type = value.type;
|
|
1752
|
+
const subtype = value.subtype;
|
|
1753
|
+
const description = value.description || '';
|
|
1754
|
+
const className = value.className;
|
|
1755
|
+
|
|
1756
|
+
const isInternalLocation = type === 'object' && subtype === 'internal#location';
|
|
1757
|
+
const isString = type === 'string' && typeof description === 'string';
|
|
1758
|
+
const isTrustedType = type === 'object' && subtype === 'trustedtype';
|
|
1759
|
+
const isFunction = type === 'function';
|
|
1760
|
+
const isNode = type === 'object' && subtype === 'node' && Boolean(description);
|
|
1761
|
+
const isDefault = !isInternalLocation && !isString && !isTrustedType && !isFunction && !isNode;
|
|
1762
|
+
const classes = classMap({
|
|
1763
|
+
value: true,
|
|
1764
|
+
[`object-value-${subtype || type}`]: isDefault,
|
|
1765
|
+
'object-value-string': isString,
|
|
1766
|
+
'object-value-trustedtype': isTrustedType,
|
|
1767
|
+
'object-value-node': isNode,
|
|
1768
|
+
});
|
|
1769
|
+
|
|
1770
|
+
const onNodeClick = (event: Event): void => {
|
|
1771
|
+
void Common.Revealer.reveal(value);
|
|
1772
|
+
event.consume(true);
|
|
1773
|
+
};
|
|
1774
|
+
const onNodeMouseMove = (): void => SDK.OverlayModel.OverlayModel.highlightObjectAsDOMNode(value);
|
|
1775
|
+
const onNodeMouseLeave = (): void =>
|
|
1776
|
+
SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance());
|
|
1777
|
+
|
|
1778
|
+
let title: string|undefined;
|
|
1779
|
+
let content: LitTemplate|string|Element|DirectiveResult|null = description;
|
|
1780
|
+
if (isNode) {
|
|
1781
|
+
content = renderNodeTitle(description);
|
|
1782
|
+
} else if (isInternalLocation) {
|
|
1783
|
+
const rawLocation = value.debuggerModel().createRawLocationByScriptId(value.value.scriptId, value.value.lineNumber,
|
|
1784
|
+
value.value.columnNumber);
|
|
1785
|
+
const linkifiedLocation = rawLocation && linkifier ?
|
|
1786
|
+
linkifier.linkifyRawLocation(rawLocation, Platform.DevToolsPath.EmptyUrlString, 'value') :
|
|
1787
|
+
null;
|
|
1788
|
+
if (linkifiedLocation) {
|
|
1789
|
+
valueRef?.(linkifiedLocation);
|
|
1790
|
+
return html`${linkifiedLocation}`;
|
|
1791
|
+
}
|
|
1792
|
+
title = description || undefined;
|
|
1793
|
+
content = '<' + i18nString(UIStrings.unknown) + '>';
|
|
1794
|
+
} else if (isString) {
|
|
1795
|
+
const text = Platform.StringUtilities.escapeUnicodeAsText(JSON.stringify(description));
|
|
1796
|
+
const tooLong = description.length > maxRenderableStringLength;
|
|
1797
|
+
title = tooLong ? undefined : description;
|
|
1798
|
+
content = tooLong ? widget(ExpandableTextPropertyValue, {text}) : text;
|
|
1799
|
+
} else if (isTrustedType) {
|
|
1800
|
+
const text = `${className} "${description}"`;
|
|
1801
|
+
const tooLong = text.length > maxRenderableStringLength;
|
|
1802
|
+
title = tooLong ? undefined : text;
|
|
1803
|
+
content = tooLong ? widget(ExpandableTextPropertyValue, {text}) : renderTrustedType(description, className);
|
|
1804
|
+
} else if (isFunction) {
|
|
1805
|
+
content = ObjectPropertiesSection.valueElementForFunctionDescription(description);
|
|
1806
|
+
} else if (description.length > maxRenderableStringLength) {
|
|
1807
|
+
title = description;
|
|
1808
|
+
content = widget(ExpandableTextPropertyValue, {text: description});
|
|
1809
|
+
} else {
|
|
1810
|
+
title = description;
|
|
1811
|
+
const hasPreview = value.preview && showPreview;
|
|
1812
|
+
const previewContent = hasPreview ?
|
|
1813
|
+
new RemoteObjectPreviewFormatter().renderObjectPreview(value.preview, includeNullOrUndefined) :
|
|
1814
|
+
description;
|
|
1815
|
+
content = html`${previewContent}${
|
|
1816
|
+
isSyntheticProperty ? nothing : ObjectPropertiesSection.getMemoryIcon(value, variableName)}`;
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
if (wasThrown) {
|
|
1820
|
+
return html`<span ${valueRef ? ref(valueRef) : nothing} class="error value">${
|
|
1821
|
+
uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.exceptionS, {
|
|
1822
|
+
PH1: html`<span
|
|
1823
|
+
class=${classes}
|
|
1824
|
+
title=${ifDefined(title)}
|
|
1825
|
+
@click=${isNode ? onNodeClick : nothing}
|
|
1826
|
+
@mousemove=${isNode ? onNodeMouseMove : nothing}
|
|
1827
|
+
@mouseleave=${isNode ? onNodeMouseLeave : nothing}>${content}</span>`,
|
|
1828
|
+
})}</span>`;
|
|
1829
|
+
}
|
|
1830
|
+
return html`<span
|
|
1831
|
+
${valueRef ? ref(valueRef) : nothing}
|
|
1832
|
+
class=${classes}
|
|
1833
|
+
title=${ifDefined(title)}
|
|
1834
|
+
@click=${isNode ? onNodeClick : nothing}
|
|
1835
|
+
@mousemove=${isNode ? onNodeMouseMove : nothing}
|
|
1836
|
+
@mouseleave=${isNode ? onNodeMouseLeave : nothing}>${content}</span>`;
|
|
1837
|
+
}
|
|
1838
|
+
|
|
1839
|
+
export function defaultObjectPresentation(objectOrTree: SDK.RemoteObject.RemoteObject|ObjectTree,
|
|
1840
|
+
linkifier?: Components.Linkifier.Linkifier, skipProto?: boolean,
|
|
1841
|
+
readOnly?: boolean): LitTemplate {
|
|
1842
|
+
const objectTree = objectOrTree instanceof ObjectTree ? objectOrTree : new ObjectTree(objectOrTree, {
|
|
1843
|
+
readOnly: Boolean(readOnly),
|
|
1844
|
+
propertiesMode: ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED,
|
|
1845
|
+
});
|
|
1846
|
+
const object = objectTree.object;
|
|
1847
|
+
const title = html`<span class="source-code"><style>${objectValueStyles}</style>${
|
|
1848
|
+
renderPropertyValue(object, /* wasThrown= */ false, /* showPreview= */ true)}</span>`;
|
|
1849
|
+
if (!object.hasChildren) {
|
|
1850
|
+
return title;
|
|
1851
|
+
}
|
|
1852
|
+
return html`${
|
|
1853
|
+
widget(ObjectPropertiesSectionWidget,
|
|
1854
|
+
{objectTree, title, linkifier, skipProto: !!skipProto, showOverflow: !readOnly})}`;
|
|
1855
|
+
}
|
|
1856
|
+
|
|
1528
1857
|
/**
|
|
1529
1858
|
* Number of initially visible children in an ObjectPropertyTreeElement.
|
|
1530
1859
|
* Remaining children are shown as soon as requested via a show more properties button.
|
|
@@ -1584,7 +1913,7 @@ export const OBJECT_PROPERTY_DEFAULT_VIEW: ObjectPropertyView = (input, output,
|
|
|
1584
1913
|
(entries ?? []).filter(e => e !== currentMatch && e.matchType === 'name').map(e => e.range.cssValue()).join(' ');
|
|
1585
1914
|
const valueRanges =
|
|
1586
1915
|
(entries ?? []).filter(e => e !== currentMatch && e.matchType === 'value').map(e => e.range.cssValue()).join(' ');
|
|
1587
|
-
const value = (): LitTemplate
|
|
1916
|
+
const value = (): LitTemplate => {
|
|
1588
1917
|
const valueRef = ref(e => {
|
|
1589
1918
|
output.valueElement = e;
|
|
1590
1919
|
});
|
|
@@ -1593,11 +1922,11 @@ export const OBJECT_PROPERTY_DEFAULT_VIEW: ObjectPropertyView = (input, output,
|
|
|
1593
1922
|
}
|
|
1594
1923
|
if (property.value) {
|
|
1595
1924
|
const showPreview = property.name !== '[[Prototype]]';
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1925
|
+
return renderPropertyValue(property.value, property.wasThrown, showPreview, input.linkifier, property.synthetic,
|
|
1926
|
+
input.node.path /* variableName */, input.node.includeNullOrUndefinedValues,
|
|
1927
|
+
/* useCustomPreview */ true, e => {
|
|
1928
|
+
output.valueElement = e;
|
|
1929
|
+
});
|
|
1601
1930
|
}
|
|
1602
1931
|
if (property.getter) {
|
|
1603
1932
|
const getter = property.getter;
|
|
@@ -1684,6 +2013,7 @@ export class ObjectPropertyWidget extends UI.Widget.Widget {
|
|
|
1684
2013
|
get property(): ObjectTreeNode|undefined {
|
|
1685
2014
|
return this.#property;
|
|
1686
2015
|
}
|
|
2016
|
+
|
|
1687
2017
|
set property(property: ObjectTreeNode) {
|
|
1688
2018
|
if (this.#property) {
|
|
1689
2019
|
this.#property.removeEventListener(ObjectTreeNodeBase.Events.VALUE_CHANGED, this.requestUpdate, this);
|
|
@@ -1703,6 +2033,7 @@ export class ObjectPropertyWidget extends UI.Widget.Widget {
|
|
|
1703
2033
|
get expanded(): boolean {
|
|
1704
2034
|
return this.#expanded;
|
|
1705
2035
|
}
|
|
2036
|
+
|
|
1706
2037
|
set expanded(expanded: boolean) {
|
|
1707
2038
|
this.#expanded = expanded;
|
|
1708
2039
|
this.requestUpdate();
|
|
@@ -1711,6 +2042,7 @@ export class ObjectPropertyWidget extends UI.Widget.Widget {
|
|
|
1711
2042
|
get linkifier(): Components.Linkifier.Linkifier|undefined {
|
|
1712
2043
|
return this.#linkifier;
|
|
1713
2044
|
}
|
|
2045
|
+
|
|
1714
2046
|
set linkifier(linkifier: Components.Linkifier.Linkifier|undefined) {
|
|
1715
2047
|
this.#linkifier = linkifier;
|
|
1716
2048
|
this.requestUpdate();
|
|
@@ -1719,6 +2051,7 @@ export class ObjectPropertyWidget extends UI.Widget.Widget {
|
|
|
1719
2051
|
get editable(): boolean {
|
|
1720
2052
|
return this.#editable;
|
|
1721
2053
|
}
|
|
2054
|
+
|
|
1722
2055
|
set editable(val: boolean) {
|
|
1723
2056
|
this.#editable = val;
|
|
1724
2057
|
this.requestUpdate();
|
|
@@ -2010,6 +2343,7 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2010
2343
|
get editable(): boolean {
|
|
2011
2344
|
return this.#widget.editable;
|
|
2012
2345
|
}
|
|
2346
|
+
|
|
2013
2347
|
set editable(val: boolean) {
|
|
2014
2348
|
this.#widget.editable = val;
|
|
2015
2349
|
}
|
|
@@ -2388,42 +2722,6 @@ export class ArrayGroupingTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2388
2722
|
static sparseIterationThreshold = 250000;
|
|
2389
2723
|
}
|
|
2390
2724
|
|
|
2391
|
-
let rendererInstance: Renderer;
|
|
2392
|
-
|
|
2393
|
-
export class Renderer implements UI.UIUtils.Renderer {
|
|
2394
|
-
static instance(opts: {forceNew: boolean} = {forceNew: false}): Renderer {
|
|
2395
|
-
const {forceNew} = opts;
|
|
2396
|
-
if (!rendererInstance || forceNew) {
|
|
2397
|
-
rendererInstance = new Renderer();
|
|
2398
|
-
}
|
|
2399
|
-
return rendererInstance;
|
|
2400
|
-
}
|
|
2401
|
-
|
|
2402
|
-
async render(object: Object, options?: UI.UIUtils.Options): Promise<UI.UIUtils.RenderedObject|null> {
|
|
2403
|
-
if (!(object instanceof SDK.RemoteObject.RemoteObject)) {
|
|
2404
|
-
throw new Error('Can\'t render ' + object);
|
|
2405
|
-
}
|
|
2406
|
-
const title = options?.title;
|
|
2407
|
-
const section = new ObjectPropertiesSection(object, title, undefined, undefined, Boolean(options?.editable));
|
|
2408
|
-
if (!title) {
|
|
2409
|
-
section.titleLessMode();
|
|
2410
|
-
}
|
|
2411
|
-
if (options?.expand) {
|
|
2412
|
-
section.firstChild()?.expand();
|
|
2413
|
-
}
|
|
2414
|
-
const dispatchDimensionChange = (): void => {
|
|
2415
|
-
section.element.dispatchEvent(new CustomEvent('dimensionschanged'));
|
|
2416
|
-
};
|
|
2417
|
-
section.addEventListener(UI.TreeOutline.Events.ElementAttached, dispatchDimensionChange);
|
|
2418
|
-
section.addEventListener(UI.TreeOutline.Events.ElementExpanded, dispatchDimensionChange);
|
|
2419
|
-
section.addEventListener(UI.TreeOutline.Events.ElementCollapsed, dispatchDimensionChange);
|
|
2420
|
-
return {
|
|
2421
|
-
element: section.element,
|
|
2422
|
-
forceSelect: section.forceSelect.bind(section),
|
|
2423
|
-
};
|
|
2424
|
-
}
|
|
2425
|
-
}
|
|
2426
|
-
|
|
2427
2725
|
interface ExpandableTextViewInput {
|
|
2428
2726
|
copyText: () => void;
|
|
2429
2727
|
expandText: () => void;
|