chrome-devtools-frontend 1.0.1717196 → 1.0.1721762
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/rules/models-and-core/core-ai-agent-context-and-prompt-discipline.md +29 -0
- package/.agents/rules/models-and-core/core-cdp-and-extension-error-handling.md +34 -0
- package/.agents/rules/models-and-core/core-gn-build-and-module-layering.md +23 -0
- package/.agents/rules/models-and-core/core-runtime-neutrality-and-platform-utils.md +28 -0
- package/.agents/rules/models-and-core/core-sdk-model-and-target-lifecycle.md +35 -0
- package/.agents/rules/models-and-core/core-security-origin-and-capability-guards.md +33 -0
- package/.agents/rules/models-and-core/core-settings-and-storage-migration.md +31 -0
- package/.agents/rules/models-and-core/core-sourcemap-and-workspace-mapping.md +28 -0
- package/.agents/rules/models-and-core/core-trace-engine-handler-invariants.md +32 -0
- package/.agents/rules/models-and-core/core-trace-insight-models-and-timing-types.md +28 -0
- package/.agents/rules/tests/test-cleanup-mutated-globals-and-widgets.md +40 -0
- package/.agents/rules/tests/test-deterministic-async-synchronization.md +30 -0
- package/.agents/rules/tests/test-modular-hooks-and-test-universe.md +38 -0
- package/.agents/rules/tests/test-public-api-and-encapsulation.md +30 -0
- package/.agents/rules/tests/test-shared-fixture-and-helper-reuse.md +29 -0
- package/.agents/rules/tests/test-single-responsibility-and-conciseness.md +37 -0
- package/.agents/rules/tests/test-strict-assertions-and-literal-expectations.md +31 -0
- package/.agents/rules/tests/test-type-safe-mocks-and-events.md +30 -0
- package/.agents/rules/tests/test-view-and-presenter-isolation.md +32 -0
- package/.agents/rules/ui-and-widgets/ui-accessibility-and-semantic-html.md +32 -0
- package/.agents/rules/ui-and-widgets/ui-await-update-complete-post-render.md +30 -0
- package/.agents/rules/ui-and-widgets/ui-css-scoping-and-flex-layout.md +27 -0
- package/.agents/rules/ui-and-widgets/ui-declarative-child-widget-composition.md +29 -0
- package/.agents/rules/ui-and-widgets/ui-lit-declarative-templates-and-directives.md +33 -0
- package/.agents/rules/ui-and-widgets/ui-localization-and-uistrings-hygiene.md +36 -0
- package/.agents/rules/ui-and-widgets/ui-modern-component-and-encapsulation-standards.md +32 -0
- package/.agents/rules/ui-and-widgets/ui-panel-and-meta-registration.md +35 -0
- package/.agents/rules/ui-and-widgets/ui-performance-and-flamechart-rendering.md +34 -0
- package/.agents/rules/ui-and-widgets/ui-pure-view-and-presenter-separation.md +31 -0
- package/.agents/rules/ui-and-widgets/ui-reactive-widget-update-lifecycle.md +34 -0
- package/.agents/rules/ui-and-widgets/ui-security-and-output-sanitization.md +28 -0
- package/.agents/rules/ui-and-widgets/ui-type-safety-and-exhaustiveness.md +37 -0
- package/.agents/rules/ui-and-widgets/ui-view-output-and-callback-contracts.md +35 -0
- package/.agents/rules/ui-and-widgets/ui-visual-logging-instrumentation.md +29 -0
- package/.agents/rules/ui-and-widgets/ui-weak-dom-references-and-observer-cleanup.md +29 -0
- package/.agents/rules/ui-and-widgets/ui-widget-dom-and-listener-lifecycle.md +38 -0
- package/.agents/skills/code-review/SKILL.md +3 -0
- package/.agents/skills/devtools-testing-guidance/SKILL.md +5 -2
- package/.agents/skills/review-models-core/SKILL.md +73 -0
- package/.agents/skills/review-tests/SKILL.md +67 -0
- package/.agents/skills/review-ui-widgets/SKILL.md +115 -0
- package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +73 -9
- package/.agents/skills/ui-eng-vision-logic-consolidator/SKILL.md +27 -3
- package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +32 -2
- package/.agents/skills/ui-eng-vision-test-scaffolder/SKILL.md +37 -7
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +6 -5
- package/.agents/skills/ui-widgets/SKILL.md +11 -9
- package/AUTHORS +3 -0
- package/DIR_METADATA +51 -1
- package/docs/ui_engineering.md +34 -0
- package/eslint.config.mjs +63 -21
- package/front_end/core/common/Settings.ts +5 -0
- package/front_end/core/host/UserMetricsEnums.ts +1 -0
- package/front_end/core/platform/api/HostRuntime.ts +1 -0
- package/front_end/core/platform/browser/HostRuntime.ts +10 -0
- package/front_end/core/platform/node/HostRuntime.ts +1 -0
- package/front_end/core/sdk/CSSMatchedStyles.ts +60 -20
- package/front_end/core/sdk/CSSModel.ts +21 -0
- package/front_end/core/sdk/CSSProperty.ts +2 -2
- package/front_end/core/sdk/CSSPropertyParser.ts +11 -2
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +28 -9
- package/front_end/core/sdk/DOMModel.ts +1 -1
- package/front_end/core/sdk/DebuggerModel.ts +3 -0
- package/front_end/core/sdk/EmulationModel.ts +40 -39
- package/front_end/core/sdk/NetworkManager.ts +10 -3
- package/front_end/core/sdk/NetworkRequest.ts +21 -0
- package/front_end/core/sdk/OverlayModel.ts +2 -8
- package/front_end/core/sdk/PrivateVerificationTokensModel.ts +79 -0
- package/front_end/core/sdk/RuntimeModel.ts +8 -3
- package/front_end/core/sdk/SecurityOrigin.ts +1 -1
- package/front_end/core/sdk/SourceMapCache.ts +20 -15
- package/front_end/core/sdk/SourceMapManager.ts +28 -9
- package/front_end/core/sdk/TargetManager.ts +7 -4
- package/front_end/core/sdk/WebAuthnModel.ts +11 -2
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/devtools_compatibility.js +1 -0
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +0 -2
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +10 -0
- package/front_end/entrypoints/main/GlobalAiButton.ts +1 -1
- package/front_end/entrypoints/main/MainImpl.ts +5 -2
- package/front_end/foundation/Universe.ts +1 -1
- package/front_end/generated/Deprecation.ts +4 -7
- package/front_end/generated/InspectorBackendCommands.ts +4 -4
- package/front_end/generated/SupportedCSSProperties.ts +89 -17
- package/front_end/generated/protocol-mapping.d.ts +1 -0
- package/front_end/generated/protocol-proxy-api.d.ts +1 -0
- package/front_end/generated/protocol.ts +6 -3
- package/front_end/models/{ai_assistance → ai-utils}/AiHistoryStorage.ts +6 -5
- package/front_end/models/{ai_assistance → ai-utils}/AiUtils.ts +14 -2
- package/front_end/models/{ai_assistance → ai-utils}/BuiltInAi.ts +1 -1
- package/front_end/models/ai-utils/ai-utils.ts +17 -0
- package/front_end/models/ai_assistance/AiAgent2.ts +14 -6
- package/front_end/models/ai_assistance/AiConversation.ts +37 -24
- package/front_end/models/ai_assistance/AlwaysAllowedTools.ts +107 -0
- package/front_end/models/ai_assistance/ConversationSummary.ts +2 -1
- package/front_end/models/ai_assistance/PerformanceAnnotations.ts +3 -1
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +12 -5
- package/front_end/models/ai_assistance/agents/AiAgent.ts +261 -127
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +12 -6
- package/front_end/models/ai_assistance/agents/ExecuteJavascript.ts +3 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +3 -1
- package/front_end/models/ai_assistance/ai_assistance.ts +9 -10
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +27 -6
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +2 -9
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +3 -3
- package/front_end/models/ai_assistance/skills/sources.md +3 -1
- package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +1 -0
- package/front_end/models/ai_assistance/tools/GetCookieValues.ts +1 -0
- package/front_end/models/ai_assistance/tools/GetInsightDetails.ts +3 -1
- package/front_end/models/ai_assistance/tools/GetSourceContent.ts +46 -4
- package/front_end/models/ai_assistance/tools/GetStorageValues.ts +1 -0
- package/front_end/models/ai_assistance/tools/RunLighthouse.ts +6 -3
- package/front_end/models/ai_assistance/tools/Tool.ts +11 -1
- package/front_end/models/bindings/CompilerScriptMapping.ts +40 -8
- package/front_end/models/bindings/ResourceScriptMapping.ts +1 -1
- package/front_end/models/breakpoints/BreakpointManager.ts +0 -4
- package/front_end/models/change_tracker/ChangeTracker.ts +2 -0
- package/front_end/models/comment_manager/CommentManager.ts +12 -0
- package/front_end/models/comment_manager/CommentThread.ts +34 -1
- package/front_end/models/computed_style/ComputedStyleModel.ts +1 -0
- package/front_end/models/elements/ChangeTrackingUtils.ts +37 -0
- package/front_end/models/elements/DOMChanges.ts +24 -36
- package/front_end/models/elements/StyleChanges.ts +97 -0
- package/front_end/models/elements/elements.ts +4 -0
- package/front_end/models/emulation/DeviceModeModel.ts +19 -0
- package/front_end/models/issues_manager/GenericIssue.ts +18 -0
- package/front_end/models/issues_manager/descriptions/genericGeolocationPromptWithoutUserGesture.md +5 -0
- package/front_end/models/javascript_metadata/NativeFunctions.ts +11 -5
- package/front_end/models/lighthouse/RunTypes.ts +16 -0
- package/front_end/models/stack_trace/StackTraceModel.ts +24 -3
- package/front_end/models/trace/EventsSerializer.ts +35 -2
- package/front_end/models/trace/extras/TraceTree.ts +2 -7
- package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +17 -21
- package/front_end/models/trace/helpers/SyntheticEvents.ts +4 -2
- package/front_end/models/trace/helpers/Timing.ts +11 -22
- package/front_end/models/trace/lantern/core/NetworkAnalyzer.ts +12 -8
- package/front_end/models/trace/types/File.ts +20 -3
- package/front_end/models/trace/types/TraceEvents.ts +8 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +37 -2
- package/front_end/panels/ai_assistance/README.md +4 -2
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +1 -1
- package/front_end/panels/ai_assistance/ai_assistance.ts +2 -0
- package/front_end/panels/ai_assistance/components/ChatInput.ts +5 -43
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +52 -147
- package/front_end/panels/ai_assistance/components/ChatView.ts +28 -3
- package/front_end/panels/ai_assistance/components/PermissionPrompt.ts +151 -0
- package/front_end/panels/ai_assistance/components/RelevantDataDisclaimer.ts +73 -0
- package/front_end/panels/ai_assistance/components/chatInput.css +0 -59
- package/front_end/panels/ai_assistance/components/chatMessage.css +0 -47
- package/front_end/panels/ai_assistance/components/chatView.css +5 -30
- package/front_end/panels/ai_assistance/components/permissionPrompt.css +55 -0
- package/front_end/panels/ai_assistance/components/relevantDataDisclaimer.css +35 -0
- package/front_end/panels/application/AppManifestView.ts +1 -4
- package/front_end/panels/application/ApplicationPanelSidebar.ts +3 -7
- package/front_end/panels/application/BackgroundServiceView.ts +8 -8
- package/front_end/panels/application/IndexedDBViews.ts +102 -73
- package/front_end/panels/application/OpenedWindowDetailsView.ts +167 -130
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +288 -346
- package/front_end/panels/application/StorageBucketsTreeElement.ts +22 -27
- package/front_end/panels/application/StorageItemsToolbar.ts +2 -2
- package/front_end/panels/application/components/StorageMetadataView.ts +207 -160
- package/front_end/panels/application/openedWindowDetailsView.css +7 -30
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +1 -1
- package/front_end/panels/changes/changesView.css +0 -6
- package/front_end/panels/comments/CommentsPane.ts +7 -3
- package/front_end/panels/comments/comments-meta.ts +1 -1
- package/front_end/panels/common/CommentThreadWidget.ts +67 -25
- package/front_end/panels/common/CommentsOverlayWidget.ts +13 -0
- package/front_end/panels/console/ConsoleInsightTeaser.ts +5 -1
- package/front_end/panels/console/ConsolePinPane.ts +1 -1
- package/front_end/panels/console/ConsoleView.ts +1 -0
- package/front_end/panels/elements/CSSValueTraceView.ts +5 -5
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +14 -6
- package/front_end/panels/elements/ComputedStyleWidget.ts +14 -5
- package/front_end/panels/elements/DOMTreeElementWidget.ts +2 -2
- package/front_end/panels/elements/DOMTreeWidget.ts +7 -3
- package/front_end/panels/elements/EventListenersWidget.ts +1 -1
- package/front_end/panels/elements/LayersWidget.ts +1 -1
- package/front_end/panels/elements/PropertyRenderer.ts +178 -10
- package/front_end/panels/elements/StandaloneStylesContainer.ts +33 -6
- package/front_end/panels/elements/StylePropertiesSection.ts +1 -0
- package/front_end/panels/elements/StylePropertyTreeElement.ts +295 -116
- package/front_end/panels/elements/StylesContainer.ts +2 -0
- package/front_end/panels/elements/StylesSidebarPane.ts +34 -16
- package/front_end/panels/elements/components/QueryContainer.ts +1 -1
- package/front_end/panels/elements/elementStatePaneWidget.css +1 -1
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +7 -2
- package/front_end/panels/elements/stylesSidebarPane.css +4 -0
- package/front_end/panels/emulation/DeviceModeToolbar.ts +57 -25
- package/front_end/panels/emulation/DeviceModeView.ts +27 -1
- package/front_end/panels/emulation/InspectedPagePlaceholder.ts +6 -0
- package/front_end/panels/emulation/MediaQueryInspector.ts +14 -4
- package/front_end/panels/emulation/deviceModeView.css +3 -3
- package/front_end/panels/explain/components/ConsoleInsight.ts +2 -3
- package/front_end/panels/explain/explain-meta.ts +1 -1
- package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +67 -34
- package/front_end/panels/issues/issues.ts +2 -0
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +7 -3
- package/front_end/panels/lighthouse/LighthouseController.ts +29 -22
- package/front_end/panels/lighthouse/LighthousePanel.ts +5 -6
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +24 -16
- package/front_end/panels/media/PlayerMessagesView.ts +1 -1
- package/front_end/panels/mobile_throttling/CPUThrottlingSelector.ts +1 -1
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +45 -15
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +3 -3
- package/front_end/panels/network/BinaryResourceView.ts +54 -50
- package/front_end/panels/network/RequestHeadersView.ts +6 -2
- package/front_end/panels/network/RequestPreviewView.ts +28 -5
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +1 -0
- package/front_end/panels/network/components/EditableSpan.ts +11 -30
- package/front_end/panels/network/components/HeaderSectionRow.ts +2 -2
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +10 -6
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +112 -22
- package/front_end/panels/profiler/HeapProfileView.ts +3 -3
- package/front_end/panels/profiler/HeapSnapshotView.ts +12 -2
- package/front_end/panels/profiler/HeapTimelineOverview.ts +16 -2
- package/front_end/panels/profiler/profiler.ts +0 -2
- package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +1 -1
- package/front_end/panels/recorder/CreateRecordingView.ts +1 -1
- package/front_end/panels/recorder/RecordingView.ts +3 -3
- package/front_end/panels/recorder/ReplaySection.ts +1 -1
- package/front_end/panels/screencast/ScreencastApp.ts +83 -57
- package/front_end/panels/screencast/ScreencastView.ts +76 -45
- package/front_end/panels/screencast/screencastView.css +1 -1
- package/front_end/panels/settings/AISettingsTab.ts +107 -4
- package/front_end/panels/settings/aiSettingsTab.css +53 -0
- package/front_end/panels/settings/settings-meta.ts +1 -1
- package/front_end/panels/settings/settingsScreen.css +0 -4
- package/front_end/panels/sources/BreakpointEditDialog.ts +3 -6
- package/front_end/panels/sources/BreakpointsView.ts +2 -2
- package/front_end/panels/sources/DebuggerPlugin.ts +7 -0
- package/front_end/panels/sources/NavigatorView.ts +61 -18
- package/front_end/panels/sources/SourcesNavigator.ts +22 -7
- package/front_end/panels/sources/SourcesPanel.ts +1 -0
- package/front_end/panels/timeline/CountersGraph.ts +1 -1
- package/front_end/panels/timeline/README.md +12 -0
- package/front_end/panels/timeline/StatusDialog.ts +1 -1
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +1 -3
- package/front_end/panels/timeline/TimelineCommentController.ts +346 -0
- package/front_end/panels/timeline/TimelineDetailsView.ts +24 -1
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +34 -30
- package/front_end/panels/timeline/TimelineFlameChartView.ts +24 -10
- package/front_end/panels/timeline/TimelinePanel.ts +12 -5
- package/front_end/panels/timeline/TimelineTreeView.ts +28 -6
- package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
- package/front_end/panels/timeline/components/fieldSettingsDialog.css +2 -2
- package/front_end/panels/timeline/components/insights/baseInsightComponent.css +1 -1
- package/front_end/panels/timeline/overlays/components/entriesLinkOverlay.css +2 -2
- package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +9 -9
- package/front_end/panels/timeline/timeline-meta.ts +2 -2
- package/front_end/panels/timeline/timeline.ts +4 -0
- package/front_end/panels/timeline/timelineFlamechartPopover.css +2 -2
- package/front_end/panels/timeline/timelinePanel.css +2 -2
- package/front_end/panels/timeline/utils/EntryNodes.ts +1 -1
- package/front_end/panels/web_audio/WebAudioView.ts +7 -4
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/chunk/angular.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/angular.js.map +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/chunk/cpp.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/cpp.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/less.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/less.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/python.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/svelte.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/svelte.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/vue.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/vue.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js.map +1 -1
- package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
- package/front_end/third_party/codemirror.next/rollup.config.mjs +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +42 -12
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +154 -26
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts +47 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js +56 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +6 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +5 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +23 -11
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js +1 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts +13 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +26 -11
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +69 -13
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +10 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +42 -12
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +103 -11
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +11 -6
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +4 -4
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +26 -14
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +7 -7
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +40 -18
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +2 -3
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +87 -14
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +10 -0
- 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/tsconfig.json +1 -1
- package/front_end/ui/comments/CommentAnchorResolver.ts +1 -1
- package/front_end/ui/components/buttons/Button.ts +29 -18
- package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +1 -1
- package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +94 -39
- package/front_end/ui/components/dialogs/dialog.css +1 -1
- package/front_end/ui/components/menus/menuItem.css +11 -0
- package/front_end/ui/components/text_editor/AccessiblePlaceholder.ts +1 -1
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaser.ts +1 -1
- package/front_end/ui/components/text_editor/config.ts +2 -1
- package/front_end/ui/components/text_editor/javascript.ts +2 -1
- package/front_end/ui/legacy/InspectorView.ts +4 -2
- package/front_end/ui/legacy/SplitWidget.ts +23 -24
- package/front_end/ui/legacy/TabbedPane.ts +9 -1
- package/front_end/ui/legacy/UIUtils.ts +60 -40
- package/front_end/ui/legacy/components/color_picker/spectrum.css +2 -2
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +9 -0
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +0 -1
- package/front_end/ui/legacy/components/inline_editor/cssShadowEditor.css +5 -7
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +1 -1
- package/front_end/ui/legacy/components/perf_ui/PieChart.ts +11 -0
- package/front_end/ui/legacy/components/perf_ui/chartViewport.css +4 -4
- package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +6 -0
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +38 -13
- package/front_end/ui/legacy/dropTarget.css +1 -1
- package/front_end/ui/legacy/statusBar.css +7 -0
- package/front_end/ui/legacy/tabbedPane.css +0 -7
- package/front_end/ui/visual_logging/KnownContextValues.ts +55 -0
- package/inspector_overlay/main.ts +2 -15
- package/inspector_overlay/tool_persistent.ts +0 -14
- package/mcp/mcp.ts +3 -0
- package/package.json +1 -1
- package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +0 -142
- package/front_end/panels/ai_assistance/components/StylingAgentMarkdownRenderer.ts +0 -178
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +0 -147
- package/front_end/panels/profiler/heapDetachedElementsDataGrid.css +0 -14
- package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +0 -62
- package/front_end/ui/components/legacy_wrapper/legacy_wrapper.ts +0 -8
- package/inspector_overlay/tool_green_dev_anchors.css +0 -54
- package/inspector_overlay/tool_green_dev_anchors.ts +0 -164
- /package/front_end/models/{ai_assistance → ai-utils}/AiSetting.ts +0 -0
- /package/front_end/models/{ai_assistance → ai-utils}/debug.ts +0 -0
|
@@ -43,7 +43,7 @@ Complex views can be broken down using helper functions defined inside `DEFAULT_
|
|
|
43
43
|
```ts
|
|
44
44
|
// clang-format off
|
|
45
45
|
const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLElement): void => {
|
|
46
|
-
const renderHeader = ():
|
|
46
|
+
const renderHeader = (): LitTemplate => {
|
|
47
47
|
return html`<h1>${input.title}</h1>`;
|
|
48
48
|
};
|
|
49
49
|
// ...
|
|
@@ -58,10 +58,13 @@ const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLElement)
|
|
|
58
58
|
|
|
59
59
|
### Composition
|
|
60
60
|
|
|
61
|
-
* To render a child widget, the parent's View MUST use lit-html directive `UI.Widget.
|
|
61
|
+
* To render a child widget, the parent's View MUST use the lit-html directive `UI.Widget.widget`.
|
|
62
|
+
* **Strongly prefer the two-argument `widget(WidgetClass, {params})` form** over the single-argument factory callback `widget(element => new WidgetClass(element, ...))`. The two-argument form automatically updates properties and calls `requestUpdate()` on subsequent renders, whereas a factory callback only runs once on initial instantiation.
|
|
63
|
+
* If a child widget currently exposes imperative setter methods (e.g., `setStorageKey(key)` or `setStorageBucket(bucket)`) instead of public properties/setters, convert them into standard TypeScript setters (`set storageKey(key)`, `set storageBucket(bucket)`) on the child widget so it can be instantiated and updated declaratively via the two-argument `widget(WidgetClass, {params})` directive.
|
|
62
64
|
* Configuration is passed via the parameters.
|
|
63
|
-
* Properties passed from a parent MUST be declared as public fields on the child presenter class.
|
|
65
|
+
* Properties passed from a parent MUST be declared as public fields or setters on the child presenter class.
|
|
64
66
|
* The framework automatically updates these properties and calls `requestUpdate()` on the child when the parent re-renders.
|
|
67
|
+
* **Pre-existing Widget Instances (`WrapperWidget`):** To render an existing `UI.Widget` instance (such as locations created by `UI.ViewManager`: `TabbedViewLocation.tabbedPane()`, `StackLocation.widget()`) declaratively without creating a custom wrapper class, use `${widget(UI.Widget.WrapperWidget, {widget: myWidgetInstance})}`. `WrapperWidget` automatically forwards constraints, handles attach/detach lifecycle, and supports dynamic widget replacement.
|
|
65
68
|
|
|
66
69
|
## Refactoring Legacy Components
|
|
67
70
|
|
|
@@ -106,7 +109,7 @@ render(html`
|
|
|
106
109
|
**Note:** The `{host: input}` option in `render()` is generally **not required** unless you are using specific Shadow DOM patterns that necessitate it. The `@scope` strategy is the preferred method for style isolation in DevTools widgets.
|
|
107
110
|
|
|
108
111
|
### Legacy Interop & Refs
|
|
109
|
-
* **Raw Elements:** Use `
|
|
112
|
+
* **Raw Elements:** Use `Directives.ref` (from `ui/lit/lit.js`) to obtain a reference to a raw `HTMLElement` if needed for imperative APIs (e.g., `splitWidget.installResizer(element)`).
|
|
110
113
|
* **Child Widgets:** Use `UI.Widget.widgetRef` to obtain the class instance of a child widget if you need to call methods on it directly (though declarative data flow is preferred).
|
|
111
114
|
|
|
112
115
|
### Dependencies
|
|
@@ -153,12 +156,12 @@ Example: `front_end/panels/my_example/MyExampleWidget.ts`.
|
|
|
153
156
|
```ts
|
|
154
157
|
// front_end/panels/my_example/MyExampleWidget.ts
|
|
155
158
|
|
|
156
|
-
import
|
|
159
|
+
import {Directives, html, render} from '../../ui/lit/lit.js';
|
|
157
160
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
158
161
|
|
|
159
162
|
import myExampleWidgetStyles from './myExampleWidget.css.js';
|
|
160
163
|
|
|
161
|
-
const {
|
|
164
|
+
const {ref} = Directives;
|
|
162
165
|
|
|
163
166
|
// 1. Define Input data shape. (Assuming Child Widget configuration for completeness)
|
|
164
167
|
export interface ViewInput {
|
|
@@ -241,14 +244,13 @@ Example: `front_end/panels/parent/ParentWidget.ts`. Demonstrates passing state v
|
|
|
241
244
|
```ts
|
|
242
245
|
// front_end/panels/parent/ParentWidget.ts
|
|
243
246
|
|
|
244
|
-
import
|
|
247
|
+
import {html, render} from '../../ui/lit/lit.js';
|
|
245
248
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
246
249
|
import {MyExampleWidget} from '../my_example/MyExampleWidget.ts';
|
|
247
250
|
|
|
248
251
|
import parentWidgetStyles from './parentWidgetStyles.css';
|
|
249
252
|
|
|
250
|
-
const {
|
|
251
|
-
const {widgetConfig} = UI.Widget;
|
|
253
|
+
const {widget} = UI.Widget;
|
|
252
254
|
|
|
253
255
|
interface ViewInput {
|
|
254
256
|
title: string;
|
package/AUTHORS
CHANGED
|
@@ -35,6 +35,7 @@ Conner Turner <cturner@zyme.xyz>
|
|
|
35
35
|
Daniel bellfield <dnlbellfield@gmail.com>
|
|
36
36
|
Danny Eldridge <me@heardanieljames.com>
|
|
37
37
|
Derek Li <the.derekli@gmail.com>
|
|
38
|
+
DevTools AIRC Bot <devtools-airc-bot@mths-airc-433412.iam.gserviceaccount.com>
|
|
38
39
|
Dmitry Kryaklin <dmkryak@gmail.com>
|
|
39
40
|
Douglas Chiang <douglasdothnc@gmail.com>
|
|
40
41
|
Dragonish <no.web.developer@outlook.com>
|
|
@@ -85,6 +86,7 @@ Muhammad Mahad <mahadtxt@gmail.com>
|
|
|
85
86
|
Naoto Ono <onoto1998@gmail.com>
|
|
86
87
|
Navoda Munasinha <navoda.munasinha@codimite.com>
|
|
87
88
|
Nourhan Hasan <nourhan.m.hasan@gmail.com>
|
|
89
|
+
Omar Ramadan <omar@blockcast.net>
|
|
88
90
|
Paras Awasthi <awasthiparas6@gmail.com>
|
|
89
91
|
Paul Fisher <paul@pfish.zone>
|
|
90
92
|
Peng Zhou <zhoupeng.1996@bytedance.com>
|
|
@@ -111,6 +113,7 @@ Simon Siefke <simon.siefke@gmail.com>
|
|
|
111
113
|
Stephen Tsoi-A-Sue <stsoiasue@gmail.com>
|
|
112
114
|
Steve Harrison <steve@steveharrison.dev>
|
|
113
115
|
Sunnylost <sunnylost@gmail.com>
|
|
116
|
+
Sutthinon <mankhong.garden@gmail.com>
|
|
114
117
|
Suyoung Jung <tdhitbtd@gmail.com>
|
|
115
118
|
TaegeonKim <aksen5240@gmail.com>
|
|
116
119
|
Thomas Stokes <git@tombl.dev>
|
package/DIR_METADATA
CHANGED
|
@@ -17,6 +17,26 @@ agentic_review: {
|
|
|
17
17
|
".agents/skills/devtools-ux-writing-refactor/SKILL.md"
|
|
18
18
|
]
|
|
19
19
|
}
|
|
20
|
+
capability_groups: {
|
|
21
|
+
path_expression: [
|
|
22
|
+
"front_end/(core|models|entrypoints|generated)/.*\\.ts",
|
|
23
|
+
".*BUILD\\.gn",
|
|
24
|
+
".*\\.gni"
|
|
25
|
+
]
|
|
26
|
+
path_expression_exclusion: [".*\\.test\\.ts"]
|
|
27
|
+
rules: [
|
|
28
|
+
".agents/rules/models-and-core/core-trace-engine-handler-invariants.md",
|
|
29
|
+
".agents/rules/models-and-core/core-sdk-model-and-target-lifecycle.md",
|
|
30
|
+
".agents/rules/models-and-core/core-gn-build-and-module-layering.md",
|
|
31
|
+
".agents/rules/models-and-core/core-ai-agent-context-and-prompt-discipline.md",
|
|
32
|
+
".agents/rules/models-and-core/core-runtime-neutrality-and-platform-utils.md",
|
|
33
|
+
".agents/rules/models-and-core/core-cdp-and-extension-error-handling.md",
|
|
34
|
+
".agents/rules/models-and-core/core-security-origin-and-capability-guards.md",
|
|
35
|
+
".agents/rules/models-and-core/core-sourcemap-and-workspace-mapping.md",
|
|
36
|
+
".agents/rules/models-and-core/core-settings-and-storage-migration.md",
|
|
37
|
+
".agents/rules/models-and-core/core-trace-insight-models-and-timing-types.md"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
20
40
|
capability_groups: {
|
|
21
41
|
path_expression: ["front_end/(panels|ui)/.*\\.(ts|css)"]
|
|
22
42
|
path_expression_exclusion: [".*\\.test\\.ts"]
|
|
@@ -24,13 +44,43 @@ agentic_review: {
|
|
|
24
44
|
".agents/skills/ui-widgets/SKILL.md",
|
|
25
45
|
".agents/skills/ui-eng-vision-orchestrator/SKILL.md"
|
|
26
46
|
]
|
|
47
|
+
rules: [
|
|
48
|
+
".agents/rules/ui-and-widgets/ui-modern-component-and-encapsulation-standards.md",
|
|
49
|
+
".agents/rules/ui-and-widgets/ui-type-safety-and-exhaustiveness.md",
|
|
50
|
+
".agents/rules/ui-and-widgets/ui-pure-view-and-presenter-separation.md",
|
|
51
|
+
".agents/rules/ui-and-widgets/ui-lit-declarative-templates-and-directives.md",
|
|
52
|
+
".agents/rules/ui-and-widgets/ui-widget-dom-and-listener-lifecycle.md",
|
|
53
|
+
".agents/rules/ui-and-widgets/ui-accessibility-and-semantic-html.md",
|
|
54
|
+
".agents/rules/ui-and-widgets/ui-performance-and-flamechart-rendering.md",
|
|
55
|
+
".agents/rules/ui-and-widgets/ui-localization-and-uistrings-hygiene.md",
|
|
56
|
+
".agents/rules/ui-and-widgets/ui-reactive-widget-update-lifecycle.md",
|
|
57
|
+
".agents/rules/ui-and-widgets/ui-visual-logging-instrumentation.md",
|
|
58
|
+
".agents/rules/ui-and-widgets/ui-css-scoping-and-flex-layout.md",
|
|
59
|
+
".agents/rules/ui-and-widgets/ui-view-output-and-callback-contracts.md",
|
|
60
|
+
".agents/rules/ui-and-widgets/ui-panel-and-meta-registration.md",
|
|
61
|
+
".agents/rules/ui-and-widgets/ui-weak-dom-references-and-observer-cleanup.md",
|
|
62
|
+
".agents/rules/ui-and-widgets/ui-security-and-output-sanitization.md",
|
|
63
|
+
".agents/rules/ui-and-widgets/ui-declarative-child-widget-composition.md",
|
|
64
|
+
".agents/rules/ui-and-widgets/ui-await-update-complete-post-render.md"
|
|
65
|
+
]
|
|
27
66
|
}
|
|
28
67
|
capability_groups: {
|
|
29
|
-
path_expression: [".*\\.test\\.ts", "test/.*\\.ts"]
|
|
68
|
+
path_expression: [".*\\.test\\.ts", "test/.*\\.ts", "front_end/testing/.*\\.ts"]
|
|
30
69
|
review_capability_skills: [
|
|
31
70
|
".agents/skills/devtools-testing-guidance/SKILL.md",
|
|
32
71
|
".agents/skills/foundation-test-migration/SKILL.md",
|
|
33
72
|
".agents/skills/fix-tests/SKILL.md"
|
|
34
73
|
]
|
|
74
|
+
rules: [
|
|
75
|
+
".agents/rules/tests/test-shared-fixture-and-helper-reuse.md",
|
|
76
|
+
".agents/rules/tests/test-modular-hooks-and-test-universe.md",
|
|
77
|
+
".agents/rules/tests/test-deterministic-async-synchronization.md",
|
|
78
|
+
".agents/rules/tests/test-strict-assertions-and-literal-expectations.md",
|
|
79
|
+
".agents/rules/tests/test-view-and-presenter-isolation.md",
|
|
80
|
+
".agents/rules/tests/test-public-api-and-encapsulation.md",
|
|
81
|
+
".agents/rules/tests/test-single-responsibility-and-conciseness.md",
|
|
82
|
+
".agents/rules/tests/test-type-safe-mocks-and-events.md",
|
|
83
|
+
".agents/rules/tests/test-cleanup-mutated-globals-and-widgets.md"
|
|
84
|
+
]
|
|
35
85
|
}
|
|
36
86
|
}
|
package/docs/ui_engineering.md
CHANGED
|
@@ -906,6 +906,34 @@ export const DEFAULT_VIEW = (input, _output, target) => {
|
|
|
906
906
|
};
|
|
907
907
|
```
|
|
908
908
|
|
|
909
|
+
### Long-press action buttons
|
|
910
|
+
|
|
911
|
+
Imperative long-press action buttons (`UI.Toolbar.Toolbar.createLongPressActionButton`) are migrated declaratively by nesting secondary `<devtools-button>` elements inside `<devtools-button ${bindToAction('...')}>`. The parent button triggers the primary action on click, and holding the button down opens a menu presenting the nested buttons:
|
|
912
|
+
|
|
913
|
+
```typescript
|
|
914
|
+
export const DEFAULT_VIEW = (input, _output, target) => {
|
|
915
|
+
const {bindToAction} = UI.UIUtils;
|
|
916
|
+
render(html`
|
|
917
|
+
<devtools-toolbar>
|
|
918
|
+
<devtools-button ${bindToAction('debugger.toggle-pause')}>
|
|
919
|
+
<devtools-button
|
|
920
|
+
.iconName=${'stop'}
|
|
921
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
922
|
+
.title=${i18nString(UIStrings.terminateCurrentJavascriptCall)}
|
|
923
|
+
@click=${input.onTerminateExecution}>
|
|
924
|
+
</devtools-button>
|
|
925
|
+
<devtools-button
|
|
926
|
+
.iconName=${'play'}
|
|
927
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
928
|
+
.title=${i18nString(UIStrings.resumeWithAllPausesBlockedForMs)}
|
|
929
|
+
@click=${input.onLongResume}>
|
|
930
|
+
</devtools-button>
|
|
931
|
+
</devtools-button>
|
|
932
|
+
</devtools-toolbar>`,
|
|
933
|
+
target);
|
|
934
|
+
};
|
|
935
|
+
```
|
|
936
|
+
|
|
909
937
|
## Binding a setting to a checkbox
|
|
910
938
|
|
|
911
939
|
Use the `bindToSetting` directive to bind a boolean setting to a `<devtools-checkbox>` component.
|
|
@@ -1244,6 +1272,12 @@ export const DEFAULT_VIEW = (input, _output, target) => {
|
|
|
1244
1272
|
};
|
|
1245
1273
|
```
|
|
1246
1274
|
|
|
1275
|
+
### Pre-existing Widget Instances (`WrapperWidget`)
|
|
1276
|
+
When embedding pre-existing `UI.Widget` instances that are created elsewhere (such as `UI.ViewManager` locations: `TabbedViewLocation.tabbedPane()`, `StackLocation.widget()`), render them declaratively using `${widget(UI.Widget.WrapperWidget, {widget: myWidgetInstance})}` instead of creating custom wrapper widget classes. `WrapperWidget` automatically forwards constraints and manages child widget attach/detach lifecycles.
|
|
1277
|
+
|
|
1278
|
+
### Preserving `showMode` Settings
|
|
1279
|
+
When migrating a `SplitWidget` that persists sidebar visibility (e.g. via `splitWidget.showModeSetting()`), bind the setting's value to the `<devtools-split-view show=${input.showMode}>` property (`Both`, `OnlyMain`, or `OnlySidebar`) to preserve user settings and layout state across sessions.
|
|
1280
|
+
|
|
1247
1281
|
## Migrating `UI.ARIAUtils` helpers
|
|
1248
1282
|
|
|
1249
1283
|
Replace calls to `UI.ARIAUtils` helper functions with the corresponding ARIA attributes directly in the lit-html template.
|
package/eslint.config.mjs
CHANGED
|
@@ -267,8 +267,7 @@ export default defineConfig([
|
|
|
267
267
|
'error',
|
|
268
268
|
{
|
|
269
269
|
selector: 'ExportDefaultDeclaration',
|
|
270
|
-
message:
|
|
271
|
-
'Default exports are not allowed. Use named exports instead.',
|
|
270
|
+
message: 'Default exports are not allowed. Use named exports instead.',
|
|
272
271
|
},
|
|
273
272
|
],
|
|
274
273
|
/**
|
|
@@ -309,8 +308,8 @@ export default defineConfig([
|
|
|
309
308
|
'error',
|
|
310
309
|
{
|
|
311
310
|
definedTags: [
|
|
312
|
-
'attribute',
|
|
313
|
-
'meaning',
|
|
311
|
+
'attribute', // @attribute is used by lit-analyzer (through web-component-analyzer)
|
|
312
|
+
'meaning', // @meaning is used by localization
|
|
314
313
|
],
|
|
315
314
|
},
|
|
316
315
|
],
|
|
@@ -341,11 +340,11 @@ export default defineConfig([
|
|
|
341
340
|
parserOptions: {
|
|
342
341
|
allowAutomaticSingleRunInference: true,
|
|
343
342
|
project: join(
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
343
|
+
import.meta.dirname,
|
|
344
|
+
'config',
|
|
345
|
+
'typescript',
|
|
346
|
+
'tsconfig.eslint.json',
|
|
347
|
+
),
|
|
349
348
|
},
|
|
350
349
|
},
|
|
351
350
|
|
|
@@ -588,12 +587,12 @@ export default defineConfig([
|
|
|
588
587
|
{
|
|
589
588
|
// Enforce that any import of models/trace/trace.js names the import Trace.
|
|
590
589
|
modulePath: join(
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
590
|
+
import.meta.dirname,
|
|
591
|
+
'front_end',
|
|
592
|
+
'models',
|
|
593
|
+
'trace',
|
|
594
|
+
'trace.js',
|
|
595
|
+
),
|
|
597
596
|
importName: 'Trace',
|
|
598
597
|
},
|
|
599
598
|
],
|
|
@@ -668,6 +667,8 @@ export default defineConfig([
|
|
|
668
667
|
],
|
|
669
668
|
'@devtools/static-custom-event-names': 'error',
|
|
670
669
|
'@devtools/lit-no-attribute-quotes': 'error',
|
|
670
|
+
'@devtools/lit-no-non-latin1': 'error',
|
|
671
|
+
'@devtools/no-boolean-input-checked-attr': 'error',
|
|
671
672
|
'@devtools/lit-template-result-or-nothing': 'error',
|
|
672
673
|
'@devtools/inject-checkbox-styles': 'error',
|
|
673
674
|
'@devtools/jslog-context-list': 'error',
|
|
@@ -792,6 +793,7 @@ export default defineConfig([
|
|
|
792
793
|
'@devtools/prefer-url-string': 'error',
|
|
793
794
|
'@devtools/trace-engine-test-timeouts': 'error',
|
|
794
795
|
'@devtools/no-document-body-mutation': 'error',
|
|
796
|
+
'@devtools/no-manual-sinon-restore': 'error',
|
|
795
797
|
// Don't update the KnownContext with test data.
|
|
796
798
|
'@devtools/jslog-context-list': 'off',
|
|
797
799
|
'@devtools/enforce-custom-element-definitions-location': 'off',
|
|
@@ -821,10 +823,16 @@ export default defineConfig([
|
|
|
821
823
|
{
|
|
822
824
|
name: 'Use private class members rule',
|
|
823
825
|
files: [
|
|
826
|
+
'front_end/core/**/*.ts',
|
|
827
|
+
'front_end/models/**/*.ts',
|
|
824
828
|
'front_end/panels/**/components/*.ts',
|
|
825
829
|
'front_end/ui/components/**/*.ts',
|
|
826
830
|
'front_end/entrypoints/**/*.ts',
|
|
827
831
|
],
|
|
832
|
+
ignores: [
|
|
833
|
+
'front_end/core/**/*.test.ts',
|
|
834
|
+
'front_end/models/**/*.test.ts',
|
|
835
|
+
],
|
|
828
836
|
|
|
829
837
|
rules: {
|
|
830
838
|
'@devtools/prefer-private-class-members': 'error',
|
|
@@ -833,6 +841,29 @@ export default defineConfig([
|
|
|
833
841
|
{
|
|
834
842
|
name: 'Ignore private class members rule',
|
|
835
843
|
files: [
|
|
844
|
+
'front_end/core/common/**/*.ts',
|
|
845
|
+
'front_end/core/host/**/*.ts',
|
|
846
|
+
'front_end/core/platform/**/*.ts',
|
|
847
|
+
'front_end/core/protocol_client/**/*.ts',
|
|
848
|
+
'front_end/core/sdk/**/*.ts',
|
|
849
|
+
'front_end/core/text_utils/**/*.ts',
|
|
850
|
+
'front_end/models/bindings/**/*.ts',
|
|
851
|
+
'front_end/models/breakpoints/**/*.ts',
|
|
852
|
+
'front_end/models/computed_style/**/*.ts',
|
|
853
|
+
'front_end/models/cpu_profile/**/*.ts',
|
|
854
|
+
'front_end/models/elements/**/*.ts',
|
|
855
|
+
'front_end/models/emulation/**/*.ts',
|
|
856
|
+
'front_end/models/extensions/**/*.ts',
|
|
857
|
+
'front_end/models/formatter/**/*.ts',
|
|
858
|
+
'front_end/models/har/**/*.ts',
|
|
859
|
+
'front_end/models/javascript_metadata/**/*.ts',
|
|
860
|
+
'front_end/models/logs/**/*.ts',
|
|
861
|
+
'front_end/models/persistence/**/*.ts',
|
|
862
|
+
'front_end/models/source_map_scopes/**/*.ts',
|
|
863
|
+
'front_end/models/trace/**/*.ts',
|
|
864
|
+
'front_end/models/trace_source_maps_resolver/**/*.ts',
|
|
865
|
+
'front_end/models/workspace/**/*.ts',
|
|
866
|
+
'front_end/models/workspace_diff/**/*.ts',
|
|
836
867
|
'front_end/panels/recorder/**/*.ts',
|
|
837
868
|
'front_end/ui/components/suggestion_input/*.ts',
|
|
838
869
|
],
|
|
@@ -899,12 +930,12 @@ export default defineConfig([
|
|
|
899
930
|
bannedImportPaths: [
|
|
900
931
|
{
|
|
901
932
|
bannedPath: join(
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
933
|
+
import.meta.dirname,
|
|
934
|
+
'front_end',
|
|
935
|
+
'core',
|
|
936
|
+
'sdk',
|
|
937
|
+
'sdk.js',
|
|
938
|
+
),
|
|
908
939
|
allowTypeImports: true,
|
|
909
940
|
},
|
|
910
941
|
],
|
|
@@ -963,4 +994,15 @@ export default defineConfig([
|
|
|
963
994
|
'no-restricted-syntax': 'off',
|
|
964
995
|
},
|
|
965
996
|
},
|
|
997
|
+
{
|
|
998
|
+
name: 'Mocha test harness setup files',
|
|
999
|
+
files: [
|
|
1000
|
+
'front_end/testing/test_setup.ts',
|
|
1001
|
+
'test/unit/mocha-hooks.ts',
|
|
1002
|
+
],
|
|
1003
|
+
rules: {
|
|
1004
|
+
// Global Mocha test harness restores Sinon stubs and timers after each test.
|
|
1005
|
+
'@devtools/no-manual-sinon-restore': 'off',
|
|
1006
|
+
},
|
|
1007
|
+
},
|
|
966
1008
|
]);
|
|
@@ -258,6 +258,11 @@ export class Settings {
|
|
|
258
258
|
return setting;
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
+
/** The event target shared by all settings. Change listeners are registered with the setting name as event type. */
|
|
262
|
+
get eventTargetForTest(): ObjectWrapper<GenericEvents> {
|
|
263
|
+
return this.#eventSupport;
|
|
264
|
+
}
|
|
265
|
+
|
|
261
266
|
/**
|
|
262
267
|
* Get setting via key, and create a new setting if the requested setting does not exist.
|
|
263
268
|
* @param key kebab-case string ID
|
|
@@ -636,6 +636,7 @@ export enum IssueCreated {
|
|
|
636
636
|
'GenericIssue::AutofillAndManualTextPolicyControlledFeaturesInfo' = 114,
|
|
637
637
|
'GenericIssue::AutofillPolicyControlledFeatureInfo' = 115,
|
|
638
638
|
'GenericIssue::ManualTextPolicyControlledFeatureInfo' = 116,
|
|
639
|
+
'GenericIssue::GeolocationPromptWithoutUserGesture' = 117,
|
|
639
640
|
'CorsIssue::InvalidLocalNetworkAccess' = 118,
|
|
640
641
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
641
642
|
MAX_VALUE = 119,
|
|
@@ -36,6 +36,7 @@ export interface HostRuntime {
|
|
|
36
36
|
getCacheStorage(): CacheStorageLike|undefined;
|
|
37
37
|
getDevicePixelRatio(): number;
|
|
38
38
|
saveScreenshot(options: ScreenshotOptions): Promise<void>;
|
|
39
|
+
copyScreenshot(options: ScreenshotOptions): Promise<void>;
|
|
39
40
|
revokeLastScreenshotUrl(): void;
|
|
40
41
|
loadTextFile(url: URL): Promise<string>;
|
|
41
42
|
evaluateCSS(dataValue: string|null, customExpr: string): string|null;
|
|
@@ -130,6 +130,15 @@ async function saveScreenshot(options: Api.HostRuntime.ScreenshotOptions): Promi
|
|
|
130
130
|
link.click();
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
async function copyScreenshot(options: Api.HostRuntime.ScreenshotOptions): Promise<void> {
|
|
134
|
+
const response = await fetch('data:image/png;base64,' + options.base64Png);
|
|
135
|
+
const blob = await response.blob();
|
|
136
|
+
|
|
137
|
+
await navigator.clipboard.write([
|
|
138
|
+
new ClipboardItem({'image/png': blob}),
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
|
|
133
142
|
let cssEvaluationElement: HTMLElement|null = null;
|
|
134
143
|
|
|
135
144
|
export const HOST_RUNTIME: Api.HostRuntime.HostRuntime = {
|
|
@@ -155,6 +164,7 @@ export const HOST_RUNTIME: Api.HostRuntime.HostRuntime = {
|
|
|
155
164
|
return window.devicePixelRatio;
|
|
156
165
|
},
|
|
157
166
|
saveScreenshot,
|
|
167
|
+
copyScreenshot,
|
|
158
168
|
revokeLastScreenshotUrl,
|
|
159
169
|
async loadTextFile(url: URL): Promise<string> {
|
|
160
170
|
const response = await fetch(url);
|
|
@@ -137,6 +137,7 @@ export const HOST_RUNTIME: Api.HostRuntime.HostRuntime = {
|
|
|
137
137
|
return 1;
|
|
138
138
|
},
|
|
139
139
|
async saveScreenshot(_options: Api.HostRuntime.ScreenshotOptions): Promise<void>{},
|
|
140
|
+
async copyScreenshot(_options: Api.HostRuntime.ScreenshotOptions): Promise<void>{},
|
|
140
141
|
revokeLastScreenshotUrl(): void{},
|
|
141
142
|
async loadTextFile(url: URL): Promise<string> {
|
|
142
143
|
return await Fs.promises.readFile(Url.fileURLToPath(url), 'utf-8');
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
EnvFunctionMatcher,
|
|
28
28
|
FlexGridGridLanesMatcher,
|
|
29
29
|
GridTemplateMatcher,
|
|
30
|
+
ImportantMatcher,
|
|
30
31
|
LengthMatcher,
|
|
31
32
|
LightDarkColorMatcher,
|
|
32
33
|
LinearGradientMatcher,
|
|
@@ -140,6 +141,10 @@ function cleanUserAgentPayload(payload: Protocol.CSS.RuleMatch[]): Protocol.CSS.
|
|
|
140
141
|
}
|
|
141
142
|
}
|
|
142
143
|
|
|
144
|
+
function parseCustomHighlightName(selectorText: string): string|null {
|
|
145
|
+
return selectorText.match(/::highlight\(([^)]+)\)/)?.[1] ?? null;
|
|
146
|
+
}
|
|
147
|
+
|
|
143
148
|
/**
|
|
144
149
|
* Return a mapping of the highlight names in the specified RuleMatch to
|
|
145
150
|
* the indices of selectors in that selector list with that highlight name.
|
|
@@ -164,15 +169,15 @@ function cleanUserAgentPayload(payload: Protocol.CSS.RuleMatch[]): Protocol.CSS.
|
|
|
164
169
|
* list associated with ruleMatch. The indices correspond to the selectors in the rule
|
|
165
170
|
* associated with the key's highlight name.
|
|
166
171
|
*/
|
|
167
|
-
function customHighlightNamesToMatchingSelectorIndices(ruleMatch: Protocol.CSS.RuleMatch
|
|
172
|
+
function customHighlightNamesToMatchingSelectorIndices(ruleMatch: Protocol.CSS.RuleMatch,
|
|
173
|
+
highlightNames: Set<string>): Map<string, number[]> {
|
|
168
174
|
const highlightNamesToMatchingSelectors = new Map<string, number[]>();
|
|
169
175
|
|
|
170
176
|
for (let i = 0; i < ruleMatch.matchingSelectors.length; i++) {
|
|
171
177
|
const matchingSelectorIndex = ruleMatch.matchingSelectors[i];
|
|
172
178
|
const selectorText = ruleMatch.rule.selectorList.selectors[matchingSelectorIndex].text;
|
|
173
|
-
const
|
|
174
|
-
if (
|
|
175
|
-
const highlightName = highlightNameMatch[1];
|
|
179
|
+
const highlightName = parseCustomHighlightName(selectorText);
|
|
180
|
+
if (highlightName) {
|
|
176
181
|
const selectorsForName = highlightNamesToMatchingSelectors.get(highlightName);
|
|
177
182
|
if (selectorsForName) {
|
|
178
183
|
selectorsForName.push(matchingSelectorIndex);
|
|
@@ -181,9 +186,36 @@ function customHighlightNamesToMatchingSelectorIndices(ruleMatch: Protocol.CSS.R
|
|
|
181
186
|
}
|
|
182
187
|
}
|
|
183
188
|
}
|
|
189
|
+
|
|
190
|
+
const universalSelectors = highlightNamesToMatchingSelectors.get('*');
|
|
191
|
+
if (universalSelectors) {
|
|
192
|
+
for (const highlightName of highlightNames) {
|
|
193
|
+
const selectorsForName = highlightNamesToMatchingSelectors.get(highlightName) ?? [];
|
|
194
|
+
highlightNamesToMatchingSelectors.set(highlightName, [...selectorsForName, ...universalSelectors]);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
184
197
|
return highlightNamesToMatchingSelectors;
|
|
185
198
|
}
|
|
186
199
|
|
|
200
|
+
function getCustomHighlightNames(pseudoPayload: Protocol.CSS.PseudoElementMatches[]): Set<string> {
|
|
201
|
+
const highlightNames = new Set<string>();
|
|
202
|
+
for (const entryPayload of pseudoPayload) {
|
|
203
|
+
if (entryPayload.pseudoType !== Protocol.DOM.PseudoType.Highlight || !entryPayload.matches) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
for (const ruleMatch of entryPayload.matches) {
|
|
207
|
+
for (const matchingSelectorIndex of ruleMatch.matchingSelectors) {
|
|
208
|
+
const selectorText = ruleMatch.rule.selectorList.selectors[matchingSelectorIndex].text;
|
|
209
|
+
const highlightName = parseCustomHighlightName(selectorText);
|
|
210
|
+
if (highlightName && highlightName !== '*') {
|
|
211
|
+
highlightNames.add(highlightName);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return highlightNames;
|
|
217
|
+
}
|
|
218
|
+
|
|
187
219
|
function queryMatches(style: CSSStyleDeclaration): boolean {
|
|
188
220
|
if (!style.parentRule) {
|
|
189
221
|
return true;
|
|
@@ -564,13 +596,14 @@ export class CSSMatchedStyles {
|
|
|
564
596
|
* This helper function takes a list of rule matches and generates separate NodeCascades
|
|
565
597
|
* for each custom highlight name that was matched.
|
|
566
598
|
*/
|
|
567
|
-
private buildSplitCustomHighlightCascades(
|
|
568
|
-
|
|
569
|
-
|
|
599
|
+
private buildSplitCustomHighlightCascades(rules: Protocol.CSS.RuleMatch[], node: DOMNode, isInherited: boolean,
|
|
600
|
+
highlightNames: Set<string>,
|
|
601
|
+
pseudoCascades: Map<string, NodeCascade[]>): void {
|
|
570
602
|
const splitHighlightRules = new Map<string, CSSStyleDeclaration[]>();
|
|
571
603
|
|
|
572
604
|
for (let j = rules.length - 1; j >= 0; --j) {
|
|
573
|
-
const highlightNamesToMatchingSelectorIndices =
|
|
605
|
+
const highlightNamesToMatchingSelectorIndices =
|
|
606
|
+
customHighlightNamesToMatchingSelectorIndices(rules[j], highlightNames);
|
|
574
607
|
|
|
575
608
|
for (const [highlightName, matchingSelectors] of highlightNamesToMatchingSelectorIndices) {
|
|
576
609
|
const pseudoRule = new CSSStyleRule(this.#cssModel, rules[j].rule);
|
|
@@ -613,6 +646,8 @@ export class CSSMatchedStyles {
|
|
|
613
646
|
|
|
614
647
|
const pseudoCascades = new Map<Protocol.DOM.PseudoType, NodeCascade[]>();
|
|
615
648
|
const customHighlightPseudoCascades = new Map<string, NodeCascade[]>();
|
|
649
|
+
const highlightNames = getCustomHighlightNames(
|
|
650
|
+
[...pseudoPayload, ...(inheritedPseudoPayload || []).flatMap(entry => entry.pseudoElements)]);
|
|
616
651
|
for (let i = 0; i < pseudoPayload.length; ++i) {
|
|
617
652
|
const entryPayload = pseudoPayload[i];
|
|
618
653
|
// PseudoElement nodes are not created unless "content" css property is set.
|
|
@@ -621,8 +656,8 @@ export class CSSMatchedStyles {
|
|
|
621
656
|
const rules = entryPayload.matches || [];
|
|
622
657
|
|
|
623
658
|
if (entryPayload.pseudoType === Protocol.DOM.PseudoType.Highlight) {
|
|
624
|
-
this.buildSplitCustomHighlightCascades(
|
|
625
|
-
|
|
659
|
+
this.buildSplitCustomHighlightCascades(rules, this.#node, false /* #isInherited */, highlightNames,
|
|
660
|
+
customHighlightPseudoCascades);
|
|
626
661
|
} else {
|
|
627
662
|
for (let j = rules.length - 1; j >= 0; --j) {
|
|
628
663
|
const pseudoRule = new CSSStyleRule(this.#cssModel, rules[j].rule);
|
|
@@ -651,8 +686,8 @@ export class CSSMatchedStyles {
|
|
|
651
686
|
const rules = inheritedEntryPayload.matches || [];
|
|
652
687
|
|
|
653
688
|
if (inheritedEntryPayload.pseudoType === Protocol.DOM.PseudoType.Highlight) {
|
|
654
|
-
this.buildSplitCustomHighlightCascades(
|
|
655
|
-
|
|
689
|
+
this.buildSplitCustomHighlightCascades(rules, parentNode, true /* #isInherited */, highlightNames,
|
|
690
|
+
customHighlightPseudoCascades);
|
|
656
691
|
} else {
|
|
657
692
|
const pseudoStyles = [];
|
|
658
693
|
for (let k = rules.length - 1; k >= 0; --k) {
|
|
@@ -1490,19 +1525,23 @@ class DOMInheritanceCascade {
|
|
|
1490
1525
|
return null;
|
|
1491
1526
|
}
|
|
1492
1527
|
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1528
|
+
while (definedValue.declaration.declaration instanceof CSSProperty && definedValue.declaration.value) {
|
|
1529
|
+
const value = PropertyParser
|
|
1530
|
+
.matchDeclaration(`--${variableName}`, definedValue.declaration.value, [new ImportantMatcher()])
|
|
1531
|
+
?.getComputedPropertyValueText()
|
|
1532
|
+
.trim();
|
|
1533
|
+
if (!value || !CSSMetadata.isCSSWideKeyword(value)) {
|
|
1534
|
+
break;
|
|
1535
|
+
}
|
|
1536
|
+
const resolvedProperty = this.resolveGlobalKeyword(definedValue.declaration.declaration, value);
|
|
1497
1537
|
if (!resolvedProperty) {
|
|
1498
1538
|
return definedValue;
|
|
1499
1539
|
}
|
|
1500
1540
|
const declaration = new CSSValueSource(resolvedProperty);
|
|
1501
|
-
|
|
1502
|
-
if (!value) {
|
|
1541
|
+
if (!declaration.value) {
|
|
1503
1542
|
return definedValue;
|
|
1504
1543
|
}
|
|
1505
|
-
definedValue = {declaration, value};
|
|
1544
|
+
definedValue = {declaration, value: declaration.value};
|
|
1506
1545
|
}
|
|
1507
1546
|
|
|
1508
1547
|
const ast = PropertyParser.tokenizeDeclaration(`--${variableName}`, definedValue.value);
|
|
@@ -1623,9 +1662,10 @@ class DOMInheritanceCascade {
|
|
|
1623
1662
|
}
|
|
1624
1663
|
return evaluateFallback(match.fallback, match.matching);
|
|
1625
1664
|
}),
|
|
1665
|
+
...(declaration ? [new ImportantMatcher()] : []),
|
|
1626
1666
|
]);
|
|
1627
1667
|
const decl = PropertyParser.ASTUtils.siblings(PropertyParser.ASTUtils.declValue(matching.ast.tree));
|
|
1628
|
-
const declText = decl.length > 0 ? matching.getComputedTextRange(decl[0], decl[decl.length - 1]) : '';
|
|
1668
|
+
const declText = decl.length > 0 ? matching.getComputedTextRange(decl[0], decl[decl.length - 1]).trim() : '';
|
|
1629
1669
|
const hasUnresolvedSubstitutions =
|
|
1630
1670
|
decl.length > 0 && matching.hasUnresolvedSubstitutionsRange(decl[0], decl[decl.length - 1]);
|
|
1631
1671
|
const computedText = hasUnresolvedSubstitutions ? null : declText;
|
|
@@ -537,6 +537,24 @@ export class CSSModel extends SDKModel<EventTypes> {
|
|
|
537
537
|
return true;
|
|
538
538
|
}
|
|
539
539
|
|
|
540
|
+
forcePositionTryOption(node: DOMNode, index?: number): boolean {
|
|
541
|
+
const currentForcedIndex = node.marker<number>(PositionTryOptionMarker) ?? undefined;
|
|
542
|
+
if (currentForcedIndex === index) {
|
|
543
|
+
return false;
|
|
544
|
+
}
|
|
545
|
+
node.setMarker(PositionTryOptionMarker, index ?? null);
|
|
546
|
+
if (node.id === undefined) {
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
void this.agent.invoke_forcePositionTryOption({nodeId: node.id, index});
|
|
550
|
+
this.dispatchEventToListeners(Events.PositionTryOptionForced, node);
|
|
551
|
+
return true;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
forcedPositionTryOption(node: DOMNode): number|undefined {
|
|
555
|
+
return node.marker<number>(PositionTryOptionMarker) ?? undefined;
|
|
556
|
+
}
|
|
557
|
+
|
|
540
558
|
forcePseudoState(node: DOMNode, pseudoClass: string, enable: boolean): boolean {
|
|
541
559
|
const forcedPseudoClasses = node.marker<string[]>(PseudoStateMarker) || [];
|
|
542
560
|
const hasPseudoClass = forcedPseudoClasses.includes(pseudoClass);
|
|
@@ -1058,6 +1076,7 @@ export enum Events {
|
|
|
1058
1076
|
MediaQueryResultChanged = 'MediaQueryResultChanged',
|
|
1059
1077
|
ModelWasEnabled = 'ModelWasEnabled',
|
|
1060
1078
|
ModelDisposed = 'ModelDisposed',
|
|
1079
|
+
PositionTryOptionForced = 'PositionTryOptionForced',
|
|
1061
1080
|
PseudoStateForced = 'PseudoStateForced',
|
|
1062
1081
|
StartingStylesStateForced = 'StartingStylesStateForced',
|
|
1063
1082
|
StyleSheetAdded = 'StyleSheetAdded',
|
|
@@ -1087,6 +1106,7 @@ export interface EventTypes {
|
|
|
1087
1106
|
[Events.MediaQueryResultChanged]: void;
|
|
1088
1107
|
[Events.ModelWasEnabled]: void;
|
|
1089
1108
|
[Events.ModelDisposed]: CSSModel;
|
|
1109
|
+
[Events.PositionTryOptionForced]: DOMNode;
|
|
1090
1110
|
[Events.PseudoStateForced]: PseudoStateForcedEvent;
|
|
1091
1111
|
[Events.StartingStylesStateForced]: DOMNode;
|
|
1092
1112
|
[Events.StyleSheetAdded]: CSSStyleSheetHeader;
|
|
@@ -1096,6 +1116,7 @@ export interface EventTypes {
|
|
|
1096
1116
|
}
|
|
1097
1117
|
|
|
1098
1118
|
const PseudoStateMarker = 'pseudo-state-marker';
|
|
1119
|
+
const PositionTryOptionMarker = 'position-try-option-marker';
|
|
1099
1120
|
|
|
1100
1121
|
export class Edit {
|
|
1101
1122
|
styleSheetId: string;
|