chrome-devtools-frontend 1.0.1579812 → 1.0.1581708
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/agents/prompts/creating-a-model.md +51 -0
- package/agents/prompts/merging-devtools-module.md +144 -0
- package/agents/prompts/ui-widgets.md +351 -0
- package/agents/prompts/verification.md +2 -1
- package/docs/contributing/README.md +5 -6
- package/docs/contributing/changes.md +1 -2
- package/docs/feature-specs/elements-tree-edit-html.md +14 -0
- package/docs/feature-specs/elements-tree-node-title.md +46 -0
- package/docs/styleguide/ux/README.md +1 -1
- package/front_end/core/host/UserMetrics.ts +3 -7
- package/front_end/core/root/Runtime.ts +0 -1
- package/front_end/core/sdk/NetworkManager.ts +0 -35
- package/front_end/core/sdk/OverlayModel.ts +12 -0
- package/front_end/core/sdk/StorageKeyManager.ts +6 -1
- package/front_end/core/sdk/Target.ts +4 -2
- package/front_end/devtools_compatibility.js +4 -0
- package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
- package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +536 -0
- package/front_end/entrypoints/greendev_floaty/floaty.css +298 -0
- package/front_end/entrypoints/greendev_floaty/floaty.html +38 -0
- package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +422 -0
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +0 -38
- package/front_end/entrypoints/node_app/app/NodeMain.ts +19 -1
- package/front_end/entrypoints/node_app/node_app.ts +34 -0
- package/front_end/generated/InspectorBackendCommands.ts +9 -3
- package/front_end/generated/SupportedCSSProperties.js +39 -31
- package/front_end/generated/protocol-mapping.d.ts +12 -0
- package/front_end/generated/protocol-proxy-api.d.ts +12 -0
- package/front_end/generated/protocol.ts +56 -2
- package/front_end/models/ai_assistance/AiConversation.ts +10 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -0
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +24 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +104 -9
- package/front_end/{panels/elements → models/computed_style}/ComputedStyleModel.ts +26 -0
- package/front_end/models/computed_style/computed_style.ts +9 -0
- package/front_end/models/issues_manager/CookieIssue.ts +0 -28
- package/front_end/models/issues_manager/CorsIssue.ts +11 -14
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +3 -5
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +102 -6
- package/front_end/panels/ai_assistance/components/ChatInput.ts +15 -2
- package/front_end/panels/ai_assistance/components/ChatView.ts +2 -0
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +13 -11
- package/front_end/panels/application/DOMStorageModel.ts +1 -1
- package/front_end/panels/application/ResourcesPanel.ts +10 -5
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +0 -1
- package/front_end/panels/application/components/BackForwardCacheView.ts +2 -4
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +0 -1
- package/front_end/panels/changes/changesSidebar.css +5 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +13 -3
- package/front_end/panels/common/ExtensionPanel.ts +4 -0
- package/front_end/panels/common/FreDialog.ts +4 -0
- package/front_end/panels/common/aiCodeCompletionTeaser.css +6 -0
- package/front_end/panels/console/ConsoleViewMessage.ts +0 -1
- package/front_end/panels/console_counters/WarningErrorCounter.ts +16 -10
- package/front_end/panels/coverage/CoverageListView.ts +18 -3
- package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +11 -0
- package/front_end/panels/elements/ComputedStyleWidget.ts +67 -45
- package/front_end/panels/elements/ElementsPanel.ts +4 -3
- package/front_end/panels/elements/ElementsSidebarPane.ts +11 -8
- package/front_end/panels/elements/ElementsTreeElement.ts +0 -1
- package/front_end/panels/elements/ElementsTreeOutline.ts +25 -15
- package/front_end/panels/elements/LayoutPane.ts +7 -8
- package/front_end/panels/elements/MetricsSidebarPane.ts +2 -2
- package/front_end/panels/elements/PlatformFontsWidget.ts +24 -9
- package/front_end/panels/elements/PropertiesWidget.ts +3 -6
- package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
- package/front_end/panels/elements/components/StylePropertyEditor.ts +1 -2
- package/front_end/panels/elements/elements.ts +1 -3
- package/front_end/panels/greendev/GreenDevPanel.css +282 -0
- package/front_end/panels/greendev/GreenDevPanel.ts +337 -0
- package/front_end/panels/greendev/GreenDevShared.ts +13 -0
- package/front_end/panels/greendev/greendev-meta.ts +52 -0
- package/front_end/panels/greendev/greendev.ts +9 -0
- package/front_end/panels/issues/CorsIssueDetailsView.ts +4 -4
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
- package/front_end/panels/media/PlayerListView.ts +1 -1
- package/front_end/panels/network/NetworkLogViewColumns.ts +1 -2
- package/front_end/panels/network/RequestInitiatorView.ts +8 -11
- package/front_end/panels/network/RequestTimingView.ts +1 -1
- package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
- package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
- package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
- package/front_end/panels/recorder/components/StepEditor.ts +3 -3
- package/front_end/panels/security/SecurityPanel.ts +0 -4
- package/front_end/panels/security/SecurityPanelSidebar.ts +2 -42
- package/front_end/panels/security/security-meta.ts +2 -14
- package/front_end/panels/security/security.ts +0 -4
- package/front_end/panels/settings/KeybindsSettingsTab.ts +5 -5
- package/front_end/panels/sources/OutlineQuickOpen.ts +19 -0
- package/front_end/panels/sources/SourcesSearchScope.ts +2 -1
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/timeline/TimelinePanel.ts +25 -0
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/lighthouse/README.chromium +2 -2
- package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +145 -144
- package/front_end/third_party/lighthouse/report/bundle.js +12 -5
- package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +2 -2
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +35 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +19 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +16 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +21 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +6 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts +13 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js +56 -36
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +32 -8
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +32 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +20 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +25 -8
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js +23 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +10 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts +29 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +46 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +18 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +13 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +7 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +43 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js +34 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.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 +1 -0
- 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 +2 -0
- 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/node/LaunchOptions.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
- 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/es5-iife/puppeteer-core-browser.d.ts +129 -3
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +233 -65
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +35 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +19 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +16 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +21 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +6 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts +13 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js +56 -36
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +30 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +32 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +20 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +25 -8
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js +23 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +10 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts +29 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +46 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +19 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +14 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +7 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +43 -8
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js +31 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +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 +1 -0
- 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 +2 -0
- 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/node/LaunchOptions.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
- 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/types.d.ts +129 -3
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +46 -0
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +21 -0
- package/front_end/third_party/puppeteer/package/src/api/Frame.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +23 -0
- package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +88 -56
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +33 -8
- package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +61 -3
- package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +23 -2
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +29 -8
- package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +30 -0
- package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +13 -2
- package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +85 -8
- package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +36 -1
- package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +5 -5
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +23 -2
- package/front_end/third_party/puppeteer/package/src/cdp/JSHandle.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +60 -8
- package/front_end/third_party/puppeteer/package/src/cdp/utils.ts +36 -3
- package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/XPathQuerySelector.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +8 -6
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/suggestion_input/SuggestionInput.ts +12 -7
- package/front_end/ui/components/text_editor/AutocompleteHistory.ts +2 -1
- package/front_end/ui/components/text_editor/TextEditorHistory.ts +1 -1
- package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
- package/front_end/ui/legacy/ListControl.ts +27 -1
- package/front_end/ui/legacy/ListWidget.ts +1 -1
- package/front_end/ui/legacy/SearchableView.ts +5 -2
- package/front_end/ui/legacy/SoftContextMenu.ts +1 -2
- package/front_end/ui/legacy/Treeoutline.ts +1 -2
- package/front_end/ui/legacy/UIUtils.ts +17 -7
- package/front_end/ui/legacy/Widget.ts +15 -0
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -1
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -1
- package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +4 -2
- package/front_end/ui/visual_logging/KnownContextValues.ts +15 -0
- package/inspector_overlay/main.ts +18 -3
- package/inspector_overlay/tool_green_dev_anchors.css +54 -0
- package/inspector_overlay/tool_green_dev_anchors.ts +164 -0
- package/inspector_overlay/tool_persistent.ts +14 -0
- package/mcp/mcp.ts +1 -0
- package/package.json +1 -1
- package/docs/contributing/design.md +0 -166
- package/docs/design_guidelines.md +0 -1
- package/front_end/panels/security/CookieControlsTreeElement.ts +0 -21
- package/front_end/panels/security/CookieControlsView.ts +0 -447
- package/front_end/panels/security/CookieReportTreeElement.ts +0 -21
- package/front_end/panels/security/CookieReportView.ts +0 -549
- package/front_end/panels/security/cookieControlsView.css +0 -139
- package/front_end/panels/security/cookieReportView.css +0 -90
|
@@ -217,16 +217,21 @@ class SuggestionBox extends LitElement {
|
|
|
217
217
|
return;
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
// clang-format off
|
|
221
220
|
return html`<style>${contentEditableStyles}</style><ul class="suggestions">
|
|
222
|
-
${this.#suggestions.map((suggestion, index) =>
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
${this.#suggestions.map((suggestion, index) => {
|
|
222
|
+
return html`<li
|
|
223
|
+
class=${classMap({
|
|
224
|
+
selected: index === this.cursor,
|
|
225
|
+
})}
|
|
226
|
+
@mousedown=${this.#dispatchSuggestEvent.bind(this, suggestion)}
|
|
227
|
+
jslog=${VisualLogging.item('suggestion').track({
|
|
228
|
+
click: true,
|
|
229
|
+
})}
|
|
230
|
+
>
|
|
226
231
|
${suggestion}
|
|
227
|
-
</li
|
|
232
|
+
</li>`;
|
|
233
|
+
})}
|
|
228
234
|
</ul>`;
|
|
229
|
-
// clang-format on
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
237
|
|
|
@@ -107,10 +107,11 @@ export class AutocompleteHistory {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
next(): string|undefined {
|
|
110
|
+
next(currentText: string): string|undefined {
|
|
111
111
|
if (this.#historyOffset === 1) {
|
|
112
112
|
return undefined;
|
|
113
113
|
}
|
|
114
|
+
this.#saveCurrentEdit(currentText);
|
|
114
115
|
--this.#historyOffset;
|
|
115
116
|
return this.#currentHistoryItem();
|
|
116
117
|
}
|
|
@@ -48,7 +48,7 @@ export class TextEditorHistory {
|
|
|
48
48
|
|
|
49
49
|
const text = editor.state.doc.toString();
|
|
50
50
|
const history = this.#history;
|
|
51
|
-
const newText = isBackward ? history.previous(text) : history.next();
|
|
51
|
+
const newText = isBackward ? history.previous(text) : history.next(text);
|
|
52
52
|
if (newText === undefined) {
|
|
53
53
|
return false;
|
|
54
54
|
}
|
|
@@ -475,7 +475,7 @@ export class TreeOutline<TreeNodeDataType> extends HTMLElement {
|
|
|
475
475
|
aria-level=${depth + 1}
|
|
476
476
|
aria-posinset=${positionInSet + 1}
|
|
477
477
|
class=${listItemClasses}
|
|
478
|
-
jslog=${VisualLogging.treeItem(node.jslogContext).track({click: true,
|
|
478
|
+
jslog=${VisualLogging.treeItem(node.jslogContext).track({click: true, keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End'})}
|
|
479
479
|
@click=${this.#onNodeClick}
|
|
480
480
|
track-dom-node-to-tree-node=${trackDOMNodeToTreeNode(this.#domNodeToTreeNodeMap, node)}
|
|
481
481
|
${Lit.Directives.ref(domNode => {
|
|
@@ -282,6 +282,26 @@ export class ListControl<T> {
|
|
|
282
282
|
return false;
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
+
selectFirstItem(center?: boolean): boolean {
|
|
286
|
+
const index = this.findFirstSelectable(0, +1, false);
|
|
287
|
+
if (index !== -1) {
|
|
288
|
+
this.scrollIntoView(index, center);
|
|
289
|
+
this.select(index);
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
selectLastItem(center?: boolean): boolean {
|
|
296
|
+
const index = this.findFirstSelectable(this.model.length - 1, -1, false);
|
|
297
|
+
if (index !== -1) {
|
|
298
|
+
this.scrollIntoView(index, center);
|
|
299
|
+
this.select(index);
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
|
|
285
305
|
private scrollIntoView(index: number, center?: boolean): void {
|
|
286
306
|
if (this.mode === ListMode.NonViewport) {
|
|
287
307
|
this.elementAtIndex(index).scrollIntoViewIfNeeded(Boolean(center));
|
|
@@ -328,6 +348,12 @@ export class ListControl<T> {
|
|
|
328
348
|
case 'PageDown':
|
|
329
349
|
selected = this.selectItemNextPage(false);
|
|
330
350
|
break;
|
|
351
|
+
case 'Home':
|
|
352
|
+
selected = this.selectFirstItem();
|
|
353
|
+
break;
|
|
354
|
+
case 'End':
|
|
355
|
+
selected = this.selectLastItem();
|
|
356
|
+
break;
|
|
331
357
|
}
|
|
332
358
|
if (selected) {
|
|
333
359
|
event.consume(true);
|
|
@@ -365,7 +391,7 @@ export class ListControl<T> {
|
|
|
365
391
|
if (!element.hasAttribute('jslog')) {
|
|
366
392
|
element.setAttribute(
|
|
367
393
|
'jslog',
|
|
368
|
-
`${VisualLogging.item().track({click: true,
|
|
394
|
+
`${VisualLogging.item().track({click: true, keydown: 'ArrowUp|ArrowDown|PageUp|PageDown|Home|End'})}`);
|
|
369
395
|
}
|
|
370
396
|
this.itemToElement.set(item, element);
|
|
371
397
|
this.updateElementARIA(element, index);
|
|
@@ -150,7 +150,7 @@ export class ListWidget<T> extends VBox {
|
|
|
150
150
|
}
|
|
151
151
|
const content = this.delegate.renderItem(item, editable, this.#items.length - 1);
|
|
152
152
|
if (!content.hasAttribute('jslog')) {
|
|
153
|
-
element.setAttribute('jslog', `${VisualLogging.item()
|
|
153
|
+
element.setAttribute('jslog', `${VisualLogging.item()}`);
|
|
154
154
|
}
|
|
155
155
|
element.appendChild(content);
|
|
156
156
|
if (editable) {
|
|
@@ -502,8 +502,10 @@ export class SearchableView extends VBox {
|
|
|
502
502
|
private updateSearchNavigationButtonState(enabled: boolean): void {
|
|
503
503
|
this.replaceButtonElement.disabled = !enabled;
|
|
504
504
|
this.replaceAllButtonElement.disabled = !enabled;
|
|
505
|
-
this.
|
|
506
|
-
|
|
505
|
+
if (this.searchProvider.supportsMatchCounts?.() === true) {
|
|
506
|
+
this.searchNavigationPrevElement.setEnabled(enabled);
|
|
507
|
+
this.searchNavigationNextElement.setEnabled(enabled);
|
|
508
|
+
}
|
|
507
509
|
}
|
|
508
510
|
|
|
509
511
|
private updateSearchMatchesCountAndCurrentMatchIndex(matches: number, currentMatchIndex: number): void {
|
|
@@ -682,6 +684,7 @@ export class SearchableView extends VBox {
|
|
|
682
684
|
const searchableViewsByElement = new WeakMap<Element, SearchableView>();
|
|
683
685
|
|
|
684
686
|
export interface Searchable {
|
|
687
|
+
supportsMatchCounts?(): boolean;
|
|
685
688
|
currentQuery?: string;
|
|
686
689
|
currentSearchMatches?: number;
|
|
687
690
|
onSearchCanceled(): void;
|
|
@@ -335,8 +335,7 @@ export class SoftContextMenu {
|
|
|
335
335
|
menuItemElement.addEventListener('mouseleave', (this.menuItemMouseLeave.bind(this) as EventListener), false);
|
|
336
336
|
|
|
337
337
|
if (item.jslogContext) {
|
|
338
|
-
menuItemElement.setAttribute(
|
|
339
|
-
'jslog', `${VisualLogging.item(item.jslogContext).track({click: true, resize: true})}`);
|
|
338
|
+
menuItemElement.setAttribute('jslog', `${VisualLogging.item().context(item.jslogContext)}`);
|
|
340
339
|
}
|
|
341
340
|
return menuItemElement;
|
|
342
341
|
}
|
|
@@ -499,7 +499,6 @@ export class TreeElement {
|
|
|
499
499
|
this.listItemNode.setAttribute(
|
|
500
500
|
'jslog', `${VisualLogging.treeItem().parent('parentTreeItem').context(jslogContext).track({
|
|
501
501
|
click: true,
|
|
502
|
-
resize: true,
|
|
503
502
|
keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Backspace|Delete|Enter|Space|Home|End',
|
|
504
503
|
})}`);
|
|
505
504
|
ARIAUtils.markAsTreeitem(this.listItemNode);
|
|
@@ -1567,7 +1566,7 @@ class TreeViewTreeElement extends TreeElement {
|
|
|
1567
1566
|
this.listItemElement.classList.add(className);
|
|
1568
1567
|
this.#clonedClasses.add(className);
|
|
1569
1568
|
}
|
|
1570
|
-
InterceptBindingDirective.
|
|
1569
|
+
InterceptBindingDirective.setEventListeners(this.configElement, this.listItemElement);
|
|
1571
1570
|
|
|
1572
1571
|
for (const child of this.configElement.childNodes) {
|
|
1573
1572
|
if (child instanceof HTMLUListElement && child.role === 'group') {
|
|
@@ -1970,6 +1970,7 @@ export function bindToAction(actionName: string): ReturnType<typeof Directives.r
|
|
|
1970
1970
|
type BindingEventListener = (arg: any) => any;
|
|
1971
1971
|
export class InterceptBindingDirective extends Lit.Directive.Directive {
|
|
1972
1972
|
static readonly #interceptedBindings = new WeakMap<Element, Map<string, BindingEventListener>>();
|
|
1973
|
+
static readonly #attachedBindings = new WeakMap<Element, Map<string, BindingEventListener>>();
|
|
1973
1974
|
|
|
1974
1975
|
override update(part: Lit.Directive.Part, [listener]: [BindingEventListener]): unknown {
|
|
1975
1976
|
if (part.type !== Lit.Directive.PartType.EVENT) {
|
|
@@ -1990,13 +1991,22 @@ export class InterceptBindingDirective extends Lit.Directive.Directive {
|
|
|
1990
1991
|
return undefined;
|
|
1991
1992
|
}
|
|
1992
1993
|
|
|
1993
|
-
static
|
|
1994
|
-
const
|
|
1995
|
-
if (
|
|
1996
|
-
|
|
1994
|
+
static setEventListeners(templateElement: Element, renderedElement: Element): void {
|
|
1995
|
+
const attachedListeners = InterceptBindingDirective.#attachedBindings.get(renderedElement);
|
|
1996
|
+
if (attachedListeners) {
|
|
1997
|
+
for (const [name, listener] of attachedListeners) {
|
|
1998
|
+
renderedElement.removeEventListener(name, listener);
|
|
1999
|
+
}
|
|
1997
2000
|
}
|
|
1998
|
-
|
|
1999
|
-
|
|
2001
|
+
|
|
2002
|
+
const newListeners = InterceptBindingDirective.#interceptedBindings.get(templateElement);
|
|
2003
|
+
if (newListeners?.size) {
|
|
2004
|
+
for (const [name, listener] of newListeners) {
|
|
2005
|
+
renderedElement.addEventListener(name, listener);
|
|
2006
|
+
}
|
|
2007
|
+
InterceptBindingDirective.#attachedBindings.set(renderedElement, new Map(newListeners));
|
|
2008
|
+
} else {
|
|
2009
|
+
InterceptBindingDirective.#attachedBindings.delete(renderedElement);
|
|
2000
2010
|
}
|
|
2001
2011
|
}
|
|
2002
2012
|
}
|
|
@@ -2029,7 +2039,7 @@ export class HTMLElementWithLightDOMTemplate extends HTMLElement {
|
|
|
2029
2039
|
clone.appendChild(HTMLElementWithLightDOMTemplate.cloneNode(child));
|
|
2030
2040
|
}
|
|
2031
2041
|
if (node instanceof Element && clone instanceof Element) {
|
|
2032
|
-
InterceptBindingDirective.
|
|
2042
|
+
InterceptBindingDirective.setEventListeners(node, clone);
|
|
2033
2043
|
}
|
|
2034
2044
|
return clone;
|
|
2035
2045
|
}
|
|
@@ -73,6 +73,7 @@ let currentUpdateQueue: Map<Widget, PromiseWithResolvers<void>>|null = null;
|
|
|
73
73
|
const currentlyProcessed = new Set<Widget>();
|
|
74
74
|
let nextUpdateQueue = new Map<Widget, PromiseWithResolvers<void>>();
|
|
75
75
|
let pendingAnimationFrame: number|null = null;
|
|
76
|
+
let overallUpdatePromise: PromiseWithResolvers<void>|null = null;
|
|
76
77
|
|
|
77
78
|
function enqueueIntoNextUpdateQueue(widget: Widget): Promise<void> {
|
|
78
79
|
const scheduledUpdate = nextUpdateQueue.get(widget) ?? Promise.withResolvers<void>();
|
|
@@ -132,6 +133,10 @@ function runNextUpdate(): void {
|
|
|
132
133
|
} else {
|
|
133
134
|
currentUpdateQueue = null;
|
|
134
135
|
currentlyProcessed.clear();
|
|
136
|
+
if (!pendingAnimationFrame && overallUpdatePromise) {
|
|
137
|
+
overallUpdatePromise.resolve();
|
|
138
|
+
overallUpdatePromise = null;
|
|
139
|
+
}
|
|
135
140
|
}
|
|
136
141
|
});
|
|
137
142
|
}
|
|
@@ -414,6 +419,16 @@ export class Widget {
|
|
|
414
419
|
return widgetMap.get(node);
|
|
415
420
|
}
|
|
416
421
|
|
|
422
|
+
static get allUpdatesComplete(): Promise<void> {
|
|
423
|
+
if (!pendingAnimationFrame && !currentUpdateQueue) {
|
|
424
|
+
return Promise.resolve();
|
|
425
|
+
}
|
|
426
|
+
if (!overallUpdatePromise) {
|
|
427
|
+
overallUpdatePromise = Promise.withResolvers<void>();
|
|
428
|
+
}
|
|
429
|
+
return overallUpdatePromise.promise;
|
|
430
|
+
}
|
|
431
|
+
|
|
417
432
|
static getOrCreateWidget(element: HTMLElement): Widget {
|
|
418
433
|
const widget = Widget.get(element);
|
|
419
434
|
if (widget) {
|
|
@@ -1679,6 +1679,8 @@ export const enum Events {
|
|
|
1679
1679
|
OPENED_NODE = 'OpenedNode',
|
|
1680
1680
|
SORTING_CHANGED = 'SortingChanged',
|
|
1681
1681
|
PADDING_CHANGED = 'PaddingChanged',
|
|
1682
|
+
EXPANDED_NODE = 'ExpandedNode',
|
|
1683
|
+
COLLAPSED_NODE = 'CollapsedNode',
|
|
1682
1684
|
}
|
|
1683
1685
|
|
|
1684
1686
|
export interface EventTypes<T> {
|
|
@@ -1687,6 +1689,8 @@ export interface EventTypes<T> {
|
|
|
1687
1689
|
[Events.OPENED_NODE]: DataGridNode<T>;
|
|
1688
1690
|
[Events.SORTING_CHANGED]: void;
|
|
1689
1691
|
[Events.PADDING_CHANGED]: void;
|
|
1692
|
+
[Events.EXPANDED_NODE]: DataGridNode<T>;
|
|
1693
|
+
[Events.COLLAPSED_NODE]: DataGridNode<T>;
|
|
1690
1694
|
}
|
|
1691
1695
|
|
|
1692
1696
|
export enum Order {
|
|
@@ -1762,10 +1766,8 @@ export class DataGridNode<T> {
|
|
|
1762
1766
|
|
|
1763
1767
|
protected createElement(): HTMLElement {
|
|
1764
1768
|
this.elementInternal = document.createElement('tr');
|
|
1765
|
-
this.elementInternal.setAttribute(
|
|
1766
|
-
|
|
1767
|
-
keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space'
|
|
1768
|
-
})}`);
|
|
1769
|
+
this.elementInternal.setAttribute(
|
|
1770
|
+
'jslog', `${VisualLogging.tableRow().track({keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space'})}`);
|
|
1769
1771
|
this.elementInternal.classList.add('data-grid-data-grid-node');
|
|
1770
1772
|
if (this.dataGrid) {
|
|
1771
1773
|
this.dataGrid.elementToDataGridNode.set(this.elementInternal, this);
|
|
@@ -2229,6 +2231,7 @@ export class DataGridNode<T> {
|
|
|
2229
2231
|
for (let i = 0; i < this.children.length; ++i) {
|
|
2230
2232
|
this.children[i].revealed = false;
|
|
2231
2233
|
}
|
|
2234
|
+
this.dataGrid?.dispatchEventToListeners(Events.COLLAPSED_NODE, this);
|
|
2232
2235
|
}
|
|
2233
2236
|
|
|
2234
2237
|
collapseRecursively(): void {
|
|
@@ -2286,6 +2289,7 @@ export class DataGridNode<T> {
|
|
|
2286
2289
|
}
|
|
2287
2290
|
|
|
2288
2291
|
this.expandedInternal = true;
|
|
2292
|
+
this.dataGrid?.dispatchEventToListeners(Events.EXPANDED_NODE, this);
|
|
2289
2293
|
}
|
|
2290
2294
|
|
|
2291
2295
|
expandRecursively(): void {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import type * as Platform from '../../../../core/platform/platform.js';
|
|
7
7
|
import type * as TextUtils from '../../../../models/text_utils/text_utils.js';
|
|
8
|
+
import * as Lit from '../../../lit/lit.js';
|
|
8
9
|
import * as UI from '../../legacy.js';
|
|
9
10
|
|
|
10
11
|
import dataGridStyles from './dataGrid.css.js';
|
|
@@ -81,6 +82,12 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
|
|
|
81
82
|
this.#dataGrid.addEventListener(
|
|
82
83
|
DataGridEvents.OPENED_NODE,
|
|
83
84
|
e => (e.data as DataGridElementNode).configElement.dispatchEvent(new CustomEvent('open')));
|
|
85
|
+
this.#dataGrid.addEventListener(
|
|
86
|
+
DataGridEvents.EXPANDED_NODE,
|
|
87
|
+
e => (e.data as DataGridElementNode).configElement.dispatchEvent(new CustomEvent('expand')));
|
|
88
|
+
this.#dataGrid.addEventListener(
|
|
89
|
+
DataGridEvents.COLLAPSED_NODE,
|
|
90
|
+
e => (e.data as DataGridElementNode).configElement.dispatchEvent(new CustomEvent('collapse')));
|
|
84
91
|
this.#dataGrid.addEventListener(DataGridEvents.SORTING_CHANGED, () => this.dispatchEvent(new CustomEvent('sort', {
|
|
85
92
|
detail: {columnId: this.#dataGrid.sortColumnId(), ascending: this.#dataGrid.isSortOrderAscending()}
|
|
86
93
|
})));
|
|
@@ -170,6 +177,14 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
|
|
|
170
177
|
return this.#columns;
|
|
171
178
|
}
|
|
172
179
|
|
|
180
|
+
#updateHasChildren(dataGridNode: DataGridElementNode, dataRow: Element): void {
|
|
181
|
+
let hasChildren = dataGridNode.children.length > 0;
|
|
182
|
+
if (!hasChildren) {
|
|
183
|
+
hasChildren = Boolean(dataRow.querySelector('td table'));
|
|
184
|
+
}
|
|
185
|
+
dataGridNode.setHasChildren(hasChildren);
|
|
186
|
+
}
|
|
187
|
+
|
|
173
188
|
#updateColumns(): void {
|
|
174
189
|
for (const column of Object.keys(this.#dataGrid.columns)) {
|
|
175
190
|
this.#dataGrid.removeColumn(column);
|
|
@@ -292,6 +307,7 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
|
|
|
292
307
|
const nextNode = this.#findNextExistingNode(element);
|
|
293
308
|
const index = nextNode ? parentNode.children.indexOf(nextNode) : parentNode.children.length;
|
|
294
309
|
const node = new DataGridElementNode(element, this);
|
|
310
|
+
this.#updateHasChildren(node, element);
|
|
295
311
|
if ((parentRow || node.hasChildren()) && !this.#dataGrid.disclosureColumnId) {
|
|
296
312
|
this.#dataGrid.disclosureColumnId = this.#columns[0].id;
|
|
297
313
|
}
|
|
@@ -319,7 +335,7 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
|
|
|
319
335
|
for (const element of this.#getDataRows(nodes)) {
|
|
320
336
|
const node = DataGridElementNode.get(element);
|
|
321
337
|
if (node) {
|
|
322
|
-
|
|
338
|
+
DataGridElementNode.remove(node);
|
|
323
339
|
}
|
|
324
340
|
}
|
|
325
341
|
}
|
|
@@ -344,6 +360,7 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
|
|
|
344
360
|
} else if (attributeName === 'highlighted') {
|
|
345
361
|
dataGridNode.setHighlighted(hasBooleanAttribute(dataRow, 'highlighted'));
|
|
346
362
|
} else {
|
|
363
|
+
this.#updateHasChildren(dataGridNode, dataRow);
|
|
347
364
|
dataGridNode.refresh();
|
|
348
365
|
}
|
|
349
366
|
}
|
|
@@ -591,3 +608,35 @@ export interface DataGridInternalToken {
|
|
|
591
608
|
const INTERNAL_TOKEN: DataGridInternalToken = {
|
|
592
609
|
token: 'DataGridInternalToken'
|
|
593
610
|
};
|
|
611
|
+
|
|
612
|
+
export const ifExpanded = Lit.Directive.directive(class extends Lit.Directive.Directive {
|
|
613
|
+
#partInfo: {type: Lit.Directive.PartType, startNode: Node};
|
|
614
|
+
constructor(partInfo: Lit.Directive.PartInfo) {
|
|
615
|
+
if (partInfo.type !== Lit.Directive.PartType.CHILD) {
|
|
616
|
+
throw new Error('expand directive must be used in a child node');
|
|
617
|
+
}
|
|
618
|
+
super(partInfo);
|
|
619
|
+
this.#partInfo = partInfo as {type: Lit.Directive.PartType, startNode: Node};
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
render(content: () => Lit.TemplateResult): Lit.LitTemplate {
|
|
623
|
+
return this.#isInExpandedRow(this.#partInfo.startNode) ? content() : Lit.nothing;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
#isInExpandedRow(element: Node|null|undefined): boolean {
|
|
627
|
+
if (!element) {
|
|
628
|
+
return false;
|
|
629
|
+
}
|
|
630
|
+
if (!(element instanceof HTMLElement)) {
|
|
631
|
+
element = element.parentNode;
|
|
632
|
+
}
|
|
633
|
+
if (!(element instanceof HTMLElement)) {
|
|
634
|
+
return false;
|
|
635
|
+
}
|
|
636
|
+
const node = DataGridElementNode.get(element.closest('tr') ?? undefined);
|
|
637
|
+
if (!node) {
|
|
638
|
+
return false;
|
|
639
|
+
}
|
|
640
|
+
return node.expanded;
|
|
641
|
+
}
|
|
642
|
+
});
|
|
@@ -7,7 +7,7 @@ import * as Platform from '../../../../core/platform/platform.js';
|
|
|
7
7
|
import type * as TextUtils from '../../../../models/text_utils/text_utils.js';
|
|
8
8
|
import * as RenderCoordinator from '../../../components/render_coordinator/render_coordinator.js';
|
|
9
9
|
|
|
10
|
-
import {type DataGridData, DataGridImpl, DataGridNode, type Parameters} from './DataGrid.js';
|
|
10
|
+
import {type DataGridData, DataGridImpl, DataGridNode, Events as DataGridEvents, type Parameters} from './DataGrid.js';
|
|
11
11
|
|
|
12
12
|
let nextId = 0;
|
|
13
13
|
|
|
@@ -492,6 +492,7 @@ export class ViewportDataGridNode<T> extends DataGridNode<ViewportDataGridNode<T
|
|
|
492
492
|
(this.dataGrid as ViewportDataGrid<T>).announceSelectedGridNode();
|
|
493
493
|
}
|
|
494
494
|
(this.dataGrid as ViewportDataGrid<T>).scheduleUpdateStructure();
|
|
495
|
+
this.dataGrid?.dispatchEventToListeners(DataGridEvents.COLLAPSED_NODE, this);
|
|
495
496
|
}
|
|
496
497
|
|
|
497
498
|
override expand(): void {
|
|
@@ -13,4 +13,5 @@ import * as ShowMoreDataGridNode from './ShowMoreDataGridNode.js';
|
|
|
13
13
|
import * as SortableDataGrid from './SortableDataGrid.js';
|
|
14
14
|
import * as ViewportDataGrid from './ViewportDataGrid.js';
|
|
15
15
|
|
|
16
|
+
export {ifExpanded} from './DataGridElement.js';
|
|
16
17
|
export {DataGrid, ShowMoreDataGridNode, SortableDataGrid, ViewportDataGrid};
|
|
@@ -280,7 +280,7 @@ export class FilteredListWidget extends Common.ObjectWrapper.eventMixin<EventTyp
|
|
|
280
280
|
if (this.provider) {
|
|
281
281
|
render(this.provider.renderItem(item, this.cleanValue()), wrapperElement);
|
|
282
282
|
wrapperElement.setAttribute(
|
|
283
|
-
'jslog', `${VisualLogging.item(this.provider.jslogContextAt(item)).track({click: true
|
|
283
|
+
'jslog', `${VisualLogging.item(this.provider.jslogContextAt(item)).track({click: true})}`);
|
|
284
284
|
}
|
|
285
285
|
UI.ARIAUtils.markAsOption(wrapperElement);
|
|
286
286
|
return wrapperElement;
|
|
@@ -353,8 +353,6 @@ export class StackTracePreviewContent extends UI.Widget.Widget {
|
|
|
353
353
|
this.#table = this.contentElement.createChild('table', 'stack-preview-container');
|
|
354
354
|
this.#table.classList.toggle('width-constrained', this.#options.widthConstrained ?? false);
|
|
355
355
|
|
|
356
|
-
this.#stackTrace?.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.performUpdate.bind(this));
|
|
357
|
-
|
|
358
356
|
this.performUpdate();
|
|
359
357
|
}
|
|
360
358
|
|
|
@@ -407,7 +405,11 @@ export class StackTracePreviewContent extends UI.Widget.Widget {
|
|
|
407
405
|
}
|
|
408
406
|
|
|
409
407
|
set stackTrace(stackTrace: StackTrace.StackTrace.StackTrace) {
|
|
408
|
+
if (this.#stackTrace) {
|
|
409
|
+
this.#stackTrace.removeEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
|
|
410
|
+
}
|
|
410
411
|
this.#stackTrace = stackTrace;
|
|
412
|
+
this.#stackTrace.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
|
|
411
413
|
this.requestUpdate();
|
|
412
414
|
}
|
|
413
415
|
|
|
@@ -923,6 +923,14 @@ export const knownContextValues = new Set([
|
|
|
923
923
|
'content-type',
|
|
924
924
|
'content-visibility',
|
|
925
925
|
'context',
|
|
926
|
+
'context-added',
|
|
927
|
+
'context-change-drjones-file',
|
|
928
|
+
'context-change-drjones-network-request',
|
|
929
|
+
'context-change-drjones-performance',
|
|
930
|
+
'context-change-freestyler',
|
|
931
|
+
'context-change-none',
|
|
932
|
+
'context-change-performance-insight',
|
|
933
|
+
'context-removed',
|
|
926
934
|
'context3',
|
|
927
935
|
'contextmenu',
|
|
928
936
|
'continue',
|
|
@@ -1770,6 +1778,7 @@ export const knownContextValues = new Set([
|
|
|
1770
1778
|
'gotpointercapture',
|
|
1771
1779
|
'grace-period-link',
|
|
1772
1780
|
'grace-period-mitigation-disabled',
|
|
1781
|
+
'greendev',
|
|
1773
1782
|
'greendev-ai-annotations-enabled',
|
|
1774
1783
|
'greendev-artifact-viewer-enabled',
|
|
1775
1784
|
'greendev-copy-to-gemini-enabled',
|
|
@@ -2515,6 +2524,7 @@ export const knownContextValues = new Set([
|
|
|
2515
2524
|
'margin-left',
|
|
2516
2525
|
'margin-right',
|
|
2517
2526
|
'margin-top',
|
|
2527
|
+
'margin-trim',
|
|
2518
2528
|
'marker',
|
|
2519
2529
|
'marker-end',
|
|
2520
2530
|
'marker-mid',
|
|
@@ -3261,6 +3271,7 @@ export const knownContextValues = new Set([
|
|
|
3261
3271
|
'rule-inset',
|
|
3262
3272
|
'rule-interior-inset',
|
|
3263
3273
|
'rule-outset',
|
|
3274
|
+
'rule-overlap',
|
|
3264
3275
|
'rule-set',
|
|
3265
3276
|
'rule-set-details',
|
|
3266
3277
|
'rule-style',
|
|
@@ -3689,6 +3700,7 @@ export const knownContextValues = new Set([
|
|
|
3689
3700
|
'start-conversation-drjones-performance',
|
|
3690
3701
|
'start-conversation-freestyler',
|
|
3691
3702
|
'start-conversation-performance-insight',
|
|
3703
|
+
'start-conversation-performance-none',
|
|
3692
3704
|
'start-new-chat',
|
|
3693
3705
|
'start-recording',
|
|
3694
3706
|
'start-time',
|
|
@@ -3894,6 +3906,9 @@ export const knownContextValues = new Set([
|
|
|
3894
3906
|
'timeline-tree-current-thread',
|
|
3895
3907
|
'timeline-tree-group-by',
|
|
3896
3908
|
'timeline-trigger',
|
|
3909
|
+
'timeline-trigger-activation-range',
|
|
3910
|
+
'timeline-trigger-activation-range-end',
|
|
3911
|
+
'timeline-trigger-activation-range-start',
|
|
3897
3912
|
'timeline-trigger-active-range',
|
|
3898
3913
|
'timeline-trigger-active-range-end',
|
|
3899
3914
|
'timeline-trigger-active-range-start',
|
|
@@ -7,6 +7,13 @@ import commonStyle from './common.css';
|
|
|
7
7
|
import {adoptStyleSheet} from './common.js';
|
|
8
8
|
import {gridStyle} from './highlight_grid_common.js';
|
|
9
9
|
// @ts-expect-error Importing CSS is handled in Rollup.
|
|
10
|
+
import greenDevAnchorsStyle from './tool_green_dev_anchors.css';
|
|
11
|
+
import {
|
|
12
|
+
type GreenDevAnchorsDispatchMessage,
|
|
13
|
+
GreenDevAnchorsOverlay,
|
|
14
|
+
type GreenDevAnchorsToolMessage
|
|
15
|
+
} from './tool_green_dev_anchors.js';
|
|
16
|
+
// @ts-expect-error Importing CSS is handled in Rollup.
|
|
10
17
|
import highlightGridStyle from './tool_grid.css';
|
|
11
18
|
// @ts-expect-error Importing CSS is handled in Rollup.
|
|
12
19
|
import highlightStyle from './tool_highlight.css';
|
|
@@ -29,7 +36,9 @@ import {WindowControlsOverlay} from './tool_window_controls.js';
|
|
|
29
36
|
declare global {
|
|
30
37
|
interface Window {
|
|
31
38
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
32
|
-
InspectorOverlayHost: {
|
|
39
|
+
InspectorOverlayHost: {
|
|
40
|
+
send(data: PausedToolMessage|PersistentToolMessage|ScreenshotToolMessage|GreenDevAnchorsToolMessage|string): void,
|
|
41
|
+
};
|
|
33
42
|
}
|
|
34
43
|
}
|
|
35
44
|
|
|
@@ -39,14 +48,18 @@ const gridStyleSheet = new CSSStyleSheet();
|
|
|
39
48
|
gridStyleSheet.replaceSync(gridStyle);
|
|
40
49
|
|
|
41
50
|
const highlightOverlay = new HighlightOverlay(window, [highlightStyle, gridStyleSheet]);
|
|
42
|
-
const persistentOverlay = new PersistentOverlay(window, [highlightGridStyle, gridStyleSheet]);
|
|
51
|
+
const persistentOverlay = new PersistentOverlay(window, [highlightGridStyle, greenDevAnchorsStyle, gridStyleSheet]);
|
|
43
52
|
const pausedOverlay = new PausedOverlay(window, pausedStyle);
|
|
44
53
|
const screenshotOverlay = new ScreenshotOverlay(window, screenshotStyle);
|
|
54
|
+
const greenDevAnchorsOverlay = new GreenDevAnchorsOverlay(window, greenDevAnchorsStyle);
|
|
45
55
|
const sourceOrderOverlay = new SourceOrderOverlay(window, sourceOrderStyle);
|
|
46
56
|
const viewportSizeOverlay = new ViewportSizeOverlay(window);
|
|
47
57
|
const windowControlsOverlay = new WindowControlsOverlay(window, [wcoStyle]);
|
|
48
58
|
|
|
59
|
+
persistentOverlay.setGreenDevAnchorsOverlay(greenDevAnchorsOverlay);
|
|
60
|
+
|
|
49
61
|
interface Overlays {
|
|
62
|
+
greenDevFloaty: GreenDevAnchorsOverlay;
|
|
50
63
|
highlight: HighlightOverlay;
|
|
51
64
|
persistent: PersistentOverlay;
|
|
52
65
|
paused: PausedOverlay;
|
|
@@ -60,6 +73,7 @@ type PlatformName = string;
|
|
|
60
73
|
|
|
61
74
|
// Key in this object is the name the backend refers to a particular overlay by.
|
|
62
75
|
const overlays: Overlays = {
|
|
76
|
+
greenDevFloaty: greenDevAnchorsOverlay,
|
|
63
77
|
highlight: highlightOverlay,
|
|
64
78
|
persistent: persistentOverlay,
|
|
65
79
|
paused: pausedOverlay,
|
|
@@ -76,6 +90,7 @@ interface MessageLookup {
|
|
|
76
90
|
setOverlay: keyof Overlays;
|
|
77
91
|
setPlatform: PlatformName;
|
|
78
92
|
drawingFinished: '';
|
|
93
|
+
update: GreenDevAnchorsDispatchMessage;
|
|
79
94
|
}
|
|
80
95
|
|
|
81
96
|
const dispatch = <K extends keyof MessageLookup>(message: [a: K, b: MessageLookup[K]]) => {
|
|
@@ -93,7 +108,7 @@ const dispatch = <K extends keyof MessageLookup>(message: [a: K, b: MessageLooku
|
|
|
93
108
|
currentOverlay.install();
|
|
94
109
|
}
|
|
95
110
|
} else if (functionName === 'setPlatform') {
|
|
96
|
-
platformName = message[1];
|
|
111
|
+
platformName = message[1] as PlatformName;
|
|
97
112
|
} else if (functionName === 'drawingFinished') {
|
|
98
113
|
// TODO The logic needs to be added here once the backend starts sending this event.
|
|
99
114
|
} else {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 The Chromium Authors
|
|
3
|
+
* Use of this source code is governed by a BSD-style license that can be
|
|
4
|
+
* found in the LICENSE file.
|
|
5
|
+
*/
|
|
6
|
+
/* eslint-disable color-named, plugin/use_theme_colors */
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
--gemini-logo: url("data:image/svg+xml,%0A%3Csvg%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2065%2065%22%3E%3Cmask%20id%3D%22maskme%22%20style%3D%22mask-type%3Aalpha%22%20maskUnits%3D%22userSpaceOnUse%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2265%22%20height%3D%2265%22%3E%3Cpath%20d%3D%22M32.447%200c.68%200%201.273.465%201.439%201.125a38.904%2038.904%200%20001.999%205.905c2.152%205%205.105%209.376%208.854%2013.125%203.751%203.75%208.126%206.703%2013.125%208.855a38.98%2038.98%200%20005.906%201.999c.66.166%201.124.758%201.124%201.438%200%20.68-.464%201.273-1.125%201.439a38.902%2038.902%200%2000-5.905%201.999c-5%202.152-9.375%205.105-13.125%208.854-3.749%203.751-6.702%208.126-8.854%2013.125a38.973%2038.973%200%2000-2%205.906%201.485%201.485%200%2001-1.438%201.124c-.68%200-1.272-.464-1.438-1.125a38.913%2038.913%200%2000-2-5.905c-2.151-5-5.103-9.375-8.854-13.125-3.75-3.749-8.125-6.702-13.125-8.854a38.973%2038.973%200%2000-5.905-2A1.485%201.485%200%20010%2032.448c0-.68.465-1.272%201.125-1.438a38.903%2038.903%200%20005.905-2c5-2.151%209.376-5.104%2013.125-8.854%203.75-3.749%206.703-8.125%208.855-13.125a38.972%2038.972%200%20001.999-5.905A1.485%201.485%200%200132.447%200z%22%20fill%3D%22%23000%22/%3E%3Cpath%20d%3D%22M32.447%200c.68%200%201.273.465%201.439%201.125a38.904%2038.904%200%20001.999%205.905c2.152%205%205.105%209.376%208.854%2013.125%203.751%203.75%208.126%206.703%2013.125%208.855a38.98%2038.98%200%20005.906%201.999c.66.166%201.124.758%201.124%201.438%200%20.68-.464%201.273-1.125%201.439a38.902%2038.902%200%2000-5.905%201.999c-5%202.152-9.375%205.105-13.125%208.854-3.749%203.751-6.702%208.126-8.854%2013.125a38.973%2038.973%200%2000-2%205.906%201.485%201.485%200%2001-1.438%201.124c-.68%200-1.272-.464-1.438-1.125a38.913%2038.913%200%2000-2-5.905c-2.151-5-5.103-9.375-8.854-13.125-3.75-3.749-8.125-6.702-13.125-8.854a38.973%2038.973%200%2000-5.905-2A1.485%201.485%200%20010%2032.448c0-.68.465-1.272%201.125-1.438a38.903%2038.903%200%20005.905-2c5-2.151%209.376-5.104%2013.125-8.854%203.75-3.749%206.703-8.125%208.855-13.125a38.972%2038.972%200%20001.999-5.905A1.485%201.485%200%200132.447%200z%22%20fill%3D%22%23000%22/%3E%3C/mask%3E%3Cg%20mask%3D%22url(%23maskme)%22%3E%3Cpath%20fill%3D%22%234285F4%22%20d%3D%22M0%200h38.235L65%2027.66%2065%2065H0z%22/%3E%3Cpath%20fill%3D%22%23EA4335%22%20d%3D%22M26.765%200H65v38.235z%22/%3E%3Cpath%20fill%3D%22%2334A853%22%20d%3D%22M0%2026.765H38.235V65H0z%22/%3E%3Cpath%20fill%3D%22%23FBBC04%22%20d%3D%22M27.66%2065L65%2038.235V65z%22/%3E%3C/g%3E%3C/svg%3E");
|
|
10
|
+
--open-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6' /%3E%3Cpolyline points='15 3 21 3 21 9' /%3E%3Cline x1='10' y1='14' x2='21' y2='3' /%3E%3C/svg%3E");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
#green-dev-anchors-container {
|
|
14
|
+
position: absolute;
|
|
15
|
+
top: 0;
|
|
16
|
+
left: 0;
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
z-index: 1000;
|
|
20
|
+
pointer-events: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.green-dev-anchor-minimal {
|
|
24
|
+
position: absolute;
|
|
25
|
+
width: 70px;
|
|
26
|
+
height: 40px;
|
|
27
|
+
background-color: #fff;
|
|
28
|
+
border-radius: 12px;
|
|
29
|
+
box-shadow: 0 4px 8px rgb(0 0 0 / 20%);
|
|
30
|
+
pointer-events: auto;
|
|
31
|
+
z-index: 1001;
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
justify-content: center;
|
|
35
|
+
padding: 0 5px;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.green-dev-anchor-icon-gemini {
|
|
40
|
+
width: 24px;
|
|
41
|
+
height: 24px;
|
|
42
|
+
background-image: var(--gemini-logo);
|
|
43
|
+
background-size: cover;
|
|
44
|
+
background-repeat: no-repeat;
|
|
45
|
+
margin-right: 5px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.green-dev-anchor-icon-open {
|
|
49
|
+
width: 20px;
|
|
50
|
+
height: 20px;
|
|
51
|
+
background-image: var(--open-icon);
|
|
52
|
+
background-size: cover;
|
|
53
|
+
background-repeat: no-repeat;
|
|
54
|
+
}
|