chrome-devtools-frontend 1.0.1602543 → 1.0.1603822
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/skills/version-control/SKILL.md +17 -2
- package/front_end/core/sdk/OverlayModel.ts +13 -13
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +13 -10
- package/front_end/core/sdk/RuntimeModel.ts +5 -5
- package/front_end/core/sdk/ServiceWorkerManager.ts +4 -2
- package/front_end/core/sdk/TargetManager.ts +5 -0
- package/front_end/core/sdk/WebMCPModel.ts +6 -0
- package/front_end/generated/InspectorBackendCommands.ts +3 -0
- package/front_end/generated/protocol-mapping.d.ts +8 -0
- package/front_end/generated/protocol-proxy-api.d.ts +10 -0
- package/front_end/generated/protocol.ts +57 -0
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +16 -5
- package/front_end/models/ai_assistance/data_formatters/LighthouseFormatter.snapshot.txt +60 -9
- package/front_end/models/ai_assistance/data_formatters/LighthouseFormatter.ts +71 -15
- package/front_end/models/javascript_metadata/NativeFunctions.js +6 -2
- package/front_end/models/lighthouse/LighthouseReporterTypes.ts +10 -8
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +4 -3
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +83 -19
- package/front_end/panels/ai_assistance/components/WalkthroughView.ts +30 -10
- package/front_end/panels/ai_assistance/components/chatMessage.css +33 -7
- package/front_end/panels/ai_assistance/components/walkthroughView.css +35 -5
- package/front_end/panels/common/ThrottlingUtils.ts +46 -0
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/elements/ComputedStyleWidget.ts +11 -1
- package/front_end/panels/elements/StandaloneStylesContainer.ts +0 -3
- package/front_end/panels/elements/StylePropertiesSection.ts +0 -49
- package/front_end/panels/elements/StylesContainer.ts +0 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +32 -7
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +14 -0
- package/front_end/panels/profiler/ProfileView.ts +0 -9
- package/front_end/panels/settings/keybindsSettingsTab.css +25 -31
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +8 -0
- package/front_end/panels/timeline/TimelinePanel.ts +14 -2
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +5 -9
- package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -2
- package/front_end/panels/timeline/components/OriginMap.ts +176 -159
- package/front_end/panels/timeline/components/originMap.css +4 -51
- package/front_end/panels/timeline/thirdPartyTreeView.css +6 -0
- package/front_end/panels/timeline/timeline-meta.ts +11 -0
- package/front_end/panels/timeline/utils/Helpers.ts +5 -25
- package/front_end/third_party/acorn/README.chromium +1 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/{list → lists}/List.ts +1 -1
- package/front_end/ui/components/{list → lists}/list.css +0 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +3 -3
- package/package.json +1 -1
- /package/front_end/ui/components/{list → lists}/lists.ts +0 -0
|
@@ -1003,7 +1003,7 @@ export const NativeFunctions = [
|
|
|
1003
1003
|
{
|
|
1004
1004
|
name: "addEventListener",
|
|
1005
1005
|
signatures: [["type","listener","?options"]],
|
|
1006
|
-
receivers: ["AbortSignal","SharedWorker","Worker","ServiceWorker","Animation","AudioBufferSourceNode","AudioContext","AudioDecoder","AudioEncoder","AudioScheduledSourceNode","AudioWorkletNode","BaseAudioContext","BroadcastChannel","CSSAnimation","CSSTransition","CanvasCaptureMediaStreamTrack","ConstantSourceNode","CookieStore","Document","Element","EventSource","FileReader","FontFaceSet","Window","HTMLElement","MathMLElement","SVGElement","HTMLAnchorElement","HTMLAreaElement","HTMLAudioElement","HTMLBRElement","HTMLBaseElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement","HTMLDListElement","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLOListElement","HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOutputElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLSlotElement","HTMLSourceElement","HTMLSpanElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableDataCellElement","HTMLTableElement","HTMLTableHeaderCellElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLUnknownElement","HTMLVideoElement","IDBDatabase","IDBOpenDBRequest","IDBRequest","IDBTransaction","MIDIAccess","MIDIInput","MIDIOutput","MIDIPort","MediaDevices","MediaKeySession","MediaQueryList","MediaRecorder","MediaSource","MediaStream","MediaStreamTrack","MessageEventTarget","MessagePort","NavigationHistoryEntry","Notification","OfflineAudioContext","OffscreenCanvas","OscillatorNode","PaymentRequest","PaymentResponse","Performance","PermissionStatus","PictureInPictureWindow","RTCDTMFSender","RTCDataChannel","RTCDtlsTransport","RTCIceTransport","RTCPeerConnection","RTCSctpTransport","RemotePlayback","SVGAElement","SVGAnimateElement","SVGAnimateMotionElement","SVGAnimateTransformElement","SVGAnimationElement","SVGCircleElement","SVGClipPathElement","SVGComponentTransferFunctionElement","SVGDefsElement","SVGDescElement","SVGEllipseElement","SVGFEBlendElement","SVGFEColorMatrixElement","SVGFEComponentTransferElement","SVGFECompositeElement","SVGFEConvolveMatrixElement","SVGFEDiffuseLightingElement","SVGFEDisplacementMapElement","SVGFEDistantLightElement","SVGFEDropShadowElement","SVGFEFloodElement","SVGFEFuncAElement","SVGFEFuncBElement","SVGFEFuncGElement","SVGFEFuncRElement","SVGFEGaussianBlurElement","SVGFEImageElement","SVGFEMergeElement","SVGFEMergeNodeElement","SVGFEMorphologyElement","SVGFEOffsetElement","SVGFEPointLightElement","SVGFESpecularLightingElement","SVGFESpotLightElement","SVGFETileElement","SVGFETurbulenceElement","SVGFilterElement","SVGForeignObjectElement","SVGGElement","SVGGeometryElement","SVGGradientElement","SVGGraphicsElement","SVGImageElement","SVGLineElement","SVGLinearGradientElement","SVGMPathElement","SVGMarkerElement","SVGMaskElement","SVGMetadataElement","SVGPathElement","SVGPatternElement","SVGPolygonElement","SVGPolylineElement","SVGRadialGradientElement","SVGRectElement","SVGSVGElement","SVGScriptElement","SVGSetElement","SVGStopElement","SVGStyleElement","SVGSwitchElement","SVGSymbolElement","SVGTSpanElement","SVGTextContentElement","SVGTextElement","SVGTextPathElement","SVGTextPositioningElement","SVGTitleElement","SVGUseElement","SVGViewElement","ScreenOrientation","ScriptProcessorNode","ServiceWorkerContainer","ServiceWorkerRegistration","ShadowRoot","SourceBuffer","SourceBufferList","SpeechSynthesis","SpeechSynthesisUtterance","TextTrack","TextTrackCue","TextTrackList","VTTCue","VideoDecoder","VideoEncoder","VisualViewport","WakeLockSentinel","WebSocket","XMLDocument","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload","DedicatedWorkerGlobalScope","ServiceWorkerGlobalScope","SharedWorkerGlobalScope","WorkerGlobalScope"
|
|
1006
|
+
receivers: ["AbortSignal","SharedWorker","Worker","ServiceWorker","Animation","AudioBufferSourceNode","AudioContext","AudioDecoder","AudioEncoder","AudioScheduledSourceNode","AudioWorkletNode","BaseAudioContext","BroadcastChannel","CSSAnimation","CSSTransition","CanvasCaptureMediaStreamTrack","ConstantSourceNode","CookieStore","Document","Element","EventSource","FileReader","FontFaceSet","Window","HTMLElement","MathMLElement","SVGElement","HTMLAnchorElement","HTMLAreaElement","HTMLAudioElement","HTMLBRElement","HTMLBaseElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement","HTMLDListElement","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLOListElement","HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOutputElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLSlotElement","HTMLSourceElement","HTMLSpanElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableDataCellElement","HTMLTableElement","HTMLTableHeaderCellElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLUnknownElement","HTMLVideoElement","IDBDatabase","IDBOpenDBRequest","IDBRequest","IDBTransaction","MIDIAccess","MIDIInput","MIDIOutput","MIDIPort","MediaDevices","MediaKeySession","MediaQueryList","MediaRecorder","MediaSource","MediaStream","MediaStreamTrack","MessageEventTarget","MessagePort","NavigationHistoryEntry","Notification","OfflineAudioContext","OffscreenCanvas","OscillatorNode","PaymentRequest","PaymentResponse","Performance","PermissionStatus","PictureInPictureWindow","RTCDTMFSender","RTCDataChannel","RTCDtlsTransport","RTCIceTransport","RTCPeerConnection","RTCSctpTransport","RemotePlayback","SVGAElement","SVGAnimateElement","SVGAnimateMotionElement","SVGAnimateTransformElement","SVGAnimationElement","SVGCircleElement","SVGClipPathElement","SVGComponentTransferFunctionElement","SVGDefsElement","SVGDescElement","SVGEllipseElement","SVGFEBlendElement","SVGFEColorMatrixElement","SVGFEComponentTransferElement","SVGFECompositeElement","SVGFEConvolveMatrixElement","SVGFEDiffuseLightingElement","SVGFEDisplacementMapElement","SVGFEDistantLightElement","SVGFEDropShadowElement","SVGFEFloodElement","SVGFEFuncAElement","SVGFEFuncBElement","SVGFEFuncGElement","SVGFEFuncRElement","SVGFEGaussianBlurElement","SVGFEImageElement","SVGFEMergeElement","SVGFEMergeNodeElement","SVGFEMorphologyElement","SVGFEOffsetElement","SVGFEPointLightElement","SVGFESpecularLightingElement","SVGFESpotLightElement","SVGFETileElement","SVGFETurbulenceElement","SVGFilterElement","SVGForeignObjectElement","SVGGElement","SVGGeometryElement","SVGGradientElement","SVGGraphicsElement","SVGImageElement","SVGLineElement","SVGLinearGradientElement","SVGMPathElement","SVGMarkerElement","SVGMaskElement","SVGMetadataElement","SVGPathElement","SVGPatternElement","SVGPolygonElement","SVGPolylineElement","SVGRadialGradientElement","SVGRectElement","SVGSVGElement","SVGScriptElement","SVGSetElement","SVGStopElement","SVGStyleElement","SVGSwitchElement","SVGSymbolElement","SVGTSpanElement","SVGTextContentElement","SVGTextElement","SVGTextPathElement","SVGTextPositioningElement","SVGTitleElement","SVGUseElement","SVGViewElement","ScreenOrientation","ScriptProcessorNode","ServiceWorkerContainer","ServiceWorkerRegistration","ShadowRoot","SourceBuffer","SourceBufferList","SpeechSynthesis","SpeechSynthesisUtterance","TextTrack","TextTrackCue","TextTrackList","VTTCue","VideoDecoder","VideoEncoder","VisualViewport","WakeLockSentinel","WebSocket","XMLDocument","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload","DedicatedWorkerGlobalScope","ServiceWorkerGlobalScope","SharedWorkerGlobalScope","WorkerGlobalScope"]
|
|
1007
1007
|
},
|
|
1008
1008
|
{
|
|
1009
1009
|
name: "addEventListener",
|
|
@@ -1013,7 +1013,7 @@ export const NativeFunctions = [
|
|
|
1013
1013
|
{
|
|
1014
1014
|
name: "removeEventListener",
|
|
1015
1015
|
signatures: [["type","listener","?options"]],
|
|
1016
|
-
receivers: ["AbortSignal","SharedWorker","Worker","ServiceWorker","Animation","AudioBufferSourceNode","AudioContext","AudioDecoder","AudioEncoder","AudioScheduledSourceNode","AudioWorkletNode","BaseAudioContext","BroadcastChannel","CSSAnimation","CSSTransition","CanvasCaptureMediaStreamTrack","ConstantSourceNode","CookieStore","Document","Element","EventSource","FileReader","FontFaceSet","Window","HTMLElement","MathMLElement","SVGElement","HTMLAnchorElement","HTMLAreaElement","HTMLAudioElement","HTMLBRElement","HTMLBaseElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement","HTMLDListElement","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLOListElement","HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOutputElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLSlotElement","HTMLSourceElement","HTMLSpanElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableDataCellElement","HTMLTableElement","HTMLTableHeaderCellElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLUnknownElement","HTMLVideoElement","IDBDatabase","IDBOpenDBRequest","IDBRequest","IDBTransaction","MIDIAccess","MIDIInput","MIDIOutput","MIDIPort","MediaDevices","MediaKeySession","MediaQueryList","MediaRecorder","MediaSource","MediaStream","MediaStreamTrack","MessageEventTarget","MessagePort","NavigationHistoryEntry","Notification","OfflineAudioContext","OffscreenCanvas","OscillatorNode","PaymentRequest","PaymentResponse","Performance","PermissionStatus","PictureInPictureWindow","RTCDTMFSender","RTCDataChannel","RTCDtlsTransport","RTCIceTransport","RTCPeerConnection","RTCSctpTransport","RemotePlayback","SVGAElement","SVGAnimateElement","SVGAnimateMotionElement","SVGAnimateTransformElement","SVGAnimationElement","SVGCircleElement","SVGClipPathElement","SVGComponentTransferFunctionElement","SVGDefsElement","SVGDescElement","SVGEllipseElement","SVGFEBlendElement","SVGFEColorMatrixElement","SVGFEComponentTransferElement","SVGFECompositeElement","SVGFEConvolveMatrixElement","SVGFEDiffuseLightingElement","SVGFEDisplacementMapElement","SVGFEDistantLightElement","SVGFEDropShadowElement","SVGFEFloodElement","SVGFEFuncAElement","SVGFEFuncBElement","SVGFEFuncGElement","SVGFEFuncRElement","SVGFEGaussianBlurElement","SVGFEImageElement","SVGFEMergeElement","SVGFEMergeNodeElement","SVGFEMorphologyElement","SVGFEOffsetElement","SVGFEPointLightElement","SVGFESpecularLightingElement","SVGFESpotLightElement","SVGFETileElement","SVGFETurbulenceElement","SVGFilterElement","SVGForeignObjectElement","SVGGElement","SVGGeometryElement","SVGGradientElement","SVGGraphicsElement","SVGImageElement","SVGLineElement","SVGLinearGradientElement","SVGMPathElement","SVGMarkerElement","SVGMaskElement","SVGMetadataElement","SVGPathElement","SVGPatternElement","SVGPolygonElement","SVGPolylineElement","SVGRadialGradientElement","SVGRectElement","SVGSVGElement","SVGScriptElement","SVGSetElement","SVGStopElement","SVGStyleElement","SVGSwitchElement","SVGSymbolElement","SVGTSpanElement","SVGTextContentElement","SVGTextElement","SVGTextPathElement","SVGTextPositioningElement","SVGTitleElement","SVGUseElement","SVGViewElement","ScreenOrientation","ScriptProcessorNode","ServiceWorkerContainer","ServiceWorkerRegistration","ShadowRoot","SourceBuffer","SourceBufferList","SpeechSynthesis","SpeechSynthesisUtterance","TextTrack","TextTrackCue","TextTrackList","VTTCue","VideoDecoder","VideoEncoder","VisualViewport","WakeLockSentinel","WebSocket","XMLDocument","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload","DedicatedWorkerGlobalScope","ServiceWorkerGlobalScope","SharedWorkerGlobalScope","WorkerGlobalScope"
|
|
1016
|
+
receivers: ["AbortSignal","SharedWorker","Worker","ServiceWorker","Animation","AudioBufferSourceNode","AudioContext","AudioDecoder","AudioEncoder","AudioScheduledSourceNode","AudioWorkletNode","BaseAudioContext","BroadcastChannel","CSSAnimation","CSSTransition","CanvasCaptureMediaStreamTrack","ConstantSourceNode","CookieStore","Document","Element","EventSource","FileReader","FontFaceSet","Window","HTMLElement","MathMLElement","SVGElement","HTMLAnchorElement","HTMLAreaElement","HTMLAudioElement","HTMLBRElement","HTMLBaseElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement","HTMLDListElement","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLOListElement","HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOutputElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLSlotElement","HTMLSourceElement","HTMLSpanElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableDataCellElement","HTMLTableElement","HTMLTableHeaderCellElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLUnknownElement","HTMLVideoElement","IDBDatabase","IDBOpenDBRequest","IDBRequest","IDBTransaction","MIDIAccess","MIDIInput","MIDIOutput","MIDIPort","MediaDevices","MediaKeySession","MediaQueryList","MediaRecorder","MediaSource","MediaStream","MediaStreamTrack","MessageEventTarget","MessagePort","NavigationHistoryEntry","Notification","OfflineAudioContext","OffscreenCanvas","OscillatorNode","PaymentRequest","PaymentResponse","Performance","PermissionStatus","PictureInPictureWindow","RTCDTMFSender","RTCDataChannel","RTCDtlsTransport","RTCIceTransport","RTCPeerConnection","RTCSctpTransport","RemotePlayback","SVGAElement","SVGAnimateElement","SVGAnimateMotionElement","SVGAnimateTransformElement","SVGAnimationElement","SVGCircleElement","SVGClipPathElement","SVGComponentTransferFunctionElement","SVGDefsElement","SVGDescElement","SVGEllipseElement","SVGFEBlendElement","SVGFEColorMatrixElement","SVGFEComponentTransferElement","SVGFECompositeElement","SVGFEConvolveMatrixElement","SVGFEDiffuseLightingElement","SVGFEDisplacementMapElement","SVGFEDistantLightElement","SVGFEDropShadowElement","SVGFEFloodElement","SVGFEFuncAElement","SVGFEFuncBElement","SVGFEFuncGElement","SVGFEFuncRElement","SVGFEGaussianBlurElement","SVGFEImageElement","SVGFEMergeElement","SVGFEMergeNodeElement","SVGFEMorphologyElement","SVGFEOffsetElement","SVGFEPointLightElement","SVGFESpecularLightingElement","SVGFESpotLightElement","SVGFETileElement","SVGFETurbulenceElement","SVGFilterElement","SVGForeignObjectElement","SVGGElement","SVGGeometryElement","SVGGradientElement","SVGGraphicsElement","SVGImageElement","SVGLineElement","SVGLinearGradientElement","SVGMPathElement","SVGMarkerElement","SVGMaskElement","SVGMetadataElement","SVGPathElement","SVGPatternElement","SVGPolygonElement","SVGPolylineElement","SVGRadialGradientElement","SVGRectElement","SVGSVGElement","SVGScriptElement","SVGSetElement","SVGStopElement","SVGStyleElement","SVGSwitchElement","SVGSymbolElement","SVGTSpanElement","SVGTextContentElement","SVGTextElement","SVGTextPathElement","SVGTextPositioningElement","SVGTitleElement","SVGUseElement","SVGViewElement","ScreenOrientation","ScriptProcessorNode","ServiceWorkerContainer","ServiceWorkerRegistration","ShadowRoot","SourceBuffer","SourceBufferList","SpeechSynthesis","SpeechSynthesisUtterance","TextTrack","TextTrackCue","TextTrackList","VTTCue","VideoDecoder","VideoEncoder","VisualViewport","WakeLockSentinel","WebSocket","XMLDocument","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload","DedicatedWorkerGlobalScope","ServiceWorkerGlobalScope","SharedWorkerGlobalScope","WorkerGlobalScope"]
|
|
1017
1017
|
},
|
|
1018
1018
|
{
|
|
1019
1019
|
name: "removeEventListener",
|
|
@@ -2895,6 +2895,10 @@ export const NativeFunctions = [
|
|
|
2895
2895
|
signatures: [["?detailsPromise"]],
|
|
2896
2896
|
receivers: ["PaymentRequest"]
|
|
2897
2897
|
},
|
|
2898
|
+
{
|
|
2899
|
+
name: "attachInternals",
|
|
2900
|
+
signatures: [["?options"]]
|
|
2901
|
+
},
|
|
2898
2902
|
{
|
|
2899
2903
|
name: "showPopover",
|
|
2900
2904
|
signatures: [["?options"]]
|
|
@@ -82,10 +82,17 @@ export interface ReportJSON {
|
|
|
82
82
|
export type DetailsJSON =
|
|
83
83
|
|TableDetailsJSON|OpportunityDetailsJSON|FilmstripDetailsJSON|ScreenshotDetailsJSON|DebugDataDetailsJSON;
|
|
84
84
|
|
|
85
|
+
export interface SubItemsJSON {
|
|
86
|
+
type: 'subitems';
|
|
87
|
+
items: Array<Record<string, TableItemValue>>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export type TableItem = Record<string, TableItemValue|SubItemsJSON|undefined>;
|
|
91
|
+
|
|
85
92
|
export interface TableDetailsJSON {
|
|
86
93
|
type: 'table';
|
|
87
94
|
headings: TableHeadingJSON[];
|
|
88
|
-
items:
|
|
95
|
+
items: TableItem[];
|
|
89
96
|
summary?: OpportunitySummary;
|
|
90
97
|
}
|
|
91
98
|
|
|
@@ -96,7 +103,7 @@ export interface TableHeadingJSON {
|
|
|
96
103
|
itemType?: string;
|
|
97
104
|
subItemsHeading?: {
|
|
98
105
|
key: string,
|
|
99
|
-
valueType
|
|
106
|
+
valueType?: string,
|
|
100
107
|
};
|
|
101
108
|
}
|
|
102
109
|
|
|
@@ -109,12 +116,7 @@ export type TableItemValue =|string|number|NodeDetailsJSON|SourceLocationDetails
|
|
|
109
116
|
export interface OpportunityDetailsJSON {
|
|
110
117
|
type: 'opportunity';
|
|
111
118
|
headings: TableHeadingJSON[];
|
|
112
|
-
items:
|
|
113
|
-
url: string,
|
|
114
|
-
wastedBytes?: number,
|
|
115
|
-
wastedMs?: number,
|
|
116
|
-
totalBytes?: number, [key: string]: unknown,
|
|
117
|
-
}>;
|
|
119
|
+
items: TableItem[];
|
|
118
120
|
overallSavingsMs: number;
|
|
119
121
|
overallSavingsBytes?: number;
|
|
120
122
|
}
|
|
@@ -821,7 +821,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
821
821
|
return;
|
|
822
822
|
}
|
|
823
823
|
// If the UI changed, we reset the visibility of the AI Walkthrough.
|
|
824
|
-
this.#
|
|
824
|
+
this.#resetWalkthrough();
|
|
825
825
|
this.#walkthrough.isInlined = isNarrow;
|
|
826
826
|
this.requestUpdate();
|
|
827
827
|
}
|
|
@@ -1563,7 +1563,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1563
1563
|
this.#updateConversationState();
|
|
1564
1564
|
}
|
|
1565
1565
|
|
|
1566
|
-
#
|
|
1566
|
+
#resetWalkthrough(): void {
|
|
1567
1567
|
this.#walkthrough.isExpanded = false;
|
|
1568
1568
|
this.#walkthrough.activeMessage = null;
|
|
1569
1569
|
}
|
|
@@ -1574,7 +1574,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1574
1574
|
}
|
|
1575
1575
|
|
|
1576
1576
|
// Ensure we clear the walkthrough so it doesn't hold onto a chat that is about to be deleted.
|
|
1577
|
-
this.#
|
|
1577
|
+
this.#resetWalkthrough();
|
|
1578
1578
|
|
|
1579
1579
|
void AiAssistanceModel.AiHistoryStorage.AiHistoryStorage.instance().deleteHistoryEntry(this.#conversation.id);
|
|
1580
1580
|
this.#updateConversationState();
|
|
@@ -1599,6 +1599,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1599
1599
|
|
|
1600
1600
|
#handleNewChatRequest(): void {
|
|
1601
1601
|
this.#updateConversationState();
|
|
1602
|
+
this.#resetWalkthrough();
|
|
1602
1603
|
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.newChatCreated));
|
|
1603
1604
|
|
|
1604
1605
|
if (Annotations.AnnotationRepository.annotationsEnabled()) {
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
import * as AiAssistanceModel from '../../../models/ai_assistance/ai_assistance.js';
|
|
19
19
|
import * as ComputedStyle from '../../../models/computed_style/computed_style.js';
|
|
20
20
|
import * as Trace from '../../../models/trace/trace.js';
|
|
21
|
+
import * as PanelsCommon from '../../../panels/common/common.js';
|
|
21
22
|
import * as Marked from '../../../third_party/marked/marked.js';
|
|
22
23
|
import * as Buttons from '../../../ui/components/buttons/buttons.js';
|
|
23
24
|
import * as Input from '../../../ui/components/input/input.js';
|
|
@@ -48,7 +49,10 @@ const SCROLL_ROUNDING_OFFSET = 1;
|
|
|
48
49
|
* Strings that don't need to be translated at this time.
|
|
49
50
|
*/
|
|
50
51
|
const UIStringsNotTranslate = {
|
|
51
|
-
|
|
52
|
+
/**
|
|
53
|
+
* @description Text used in the button to close an open walkthrough
|
|
54
|
+
*/
|
|
55
|
+
closeAgentWalkthrough: 'Close agent walkthrough',
|
|
52
56
|
/**
|
|
53
57
|
* @description The title of the button that allows submitting positive
|
|
54
58
|
* feedback about the response for AI assistance.
|
|
@@ -182,7 +186,23 @@ const UIStringsNotTranslate = {
|
|
|
182
186
|
/**
|
|
183
187
|
* @description Title used for revealing the performance trace.
|
|
184
188
|
*/
|
|
185
|
-
revealTrace: 'Reveal trace'
|
|
189
|
+
revealTrace: 'Reveal trace',
|
|
190
|
+
/**
|
|
191
|
+
* @description Title for the core web vitals widget.
|
|
192
|
+
*/
|
|
193
|
+
coreVitals: 'Core Web Vitals',
|
|
194
|
+
/**
|
|
195
|
+
* @description Title for the LCP breakdown widget.
|
|
196
|
+
*/
|
|
197
|
+
lcpBreakdown: 'LCP breakdown',
|
|
198
|
+
/**
|
|
199
|
+
* @description Title for the LCP element widget.
|
|
200
|
+
*/
|
|
201
|
+
lcpElement: 'LCP element',
|
|
202
|
+
/**
|
|
203
|
+
* @description Title for the performance summary widget.
|
|
204
|
+
*/
|
|
205
|
+
performanceSummary: 'Performance summary'
|
|
186
206
|
} as const;
|
|
187
207
|
|
|
188
208
|
export interface Step {
|
|
@@ -496,18 +516,25 @@ function renderWalkthroughSidebarButton(
|
|
|
496
516
|
}
|
|
497
517
|
|
|
498
518
|
const hasOneStepWithWidget = steps.some(step => step.widgets?.length);
|
|
499
|
-
const
|
|
519
|
+
const isOpen = input.message === input.walkthrough.activeMessage;
|
|
520
|
+
|
|
521
|
+
const title = isOpen ? lockedString(UIStringsNotTranslate.closeAgentWalkthrough) : walkthroughTitle({
|
|
500
522
|
isLoading: input.isLoading,
|
|
501
523
|
hasWidgets: hasOneStepWithWidget,
|
|
502
524
|
lastStep,
|
|
503
525
|
});
|
|
504
526
|
|
|
527
|
+
// The button should be tonal when there are widgets, but we only
|
|
528
|
+
// want to change it visually at the end once everything has stopped
|
|
529
|
+
// loading.
|
|
530
|
+
const variant = hasOneStepWithWidget && !input.isLoading ? Buttons.Button.Variant.TONAL : Buttons.Button.Variant.TEXT;
|
|
531
|
+
|
|
505
532
|
// clang-format off
|
|
506
533
|
return html`
|
|
507
534
|
<div class="walkthrough-toggle-container">
|
|
508
535
|
${input.isLoading ? html`<devtools-spinner></devtools-spinner>` : Lit.nothing}
|
|
509
536
|
<devtools-button
|
|
510
|
-
.variant=${
|
|
537
|
+
.variant=${variant}
|
|
511
538
|
.size=${Buttons.Button.Size.SMALL}
|
|
512
539
|
.title=${lastStep.isLoading ? titleForStep(lastStep) : lockedString(UIStringsNotTranslate.showThinking)}
|
|
513
540
|
.jslogContext=${walkthrough.isExpanded ? 'ai-hide-walkthrough-sidebar' : 'ai-show-walkthrough-sidebar'}
|
|
@@ -522,7 +549,9 @@ function renderWalkthroughSidebarButton(
|
|
|
522
549
|
walkthrough.onOpen(message as ModelChatMessage);
|
|
523
550
|
}
|
|
524
551
|
}}
|
|
525
|
-
|
|
552
|
+
>
|
|
553
|
+
${title}<devtools-icon class="chevron" .name=${'chevron-right'}></devtools-icon>
|
|
554
|
+
</devtools-button>
|
|
526
555
|
</div>
|
|
527
556
|
`;
|
|
528
557
|
// clang-format on
|
|
@@ -657,7 +686,8 @@ interface WidgetMakerResponse {
|
|
|
657
686
|
renderedWidget: Lit.LitTemplate|null;
|
|
658
687
|
revealable: unknown;
|
|
659
688
|
customRevealTitle?: Platform.UIString.LocalizedString;
|
|
660
|
-
|
|
689
|
+
// Can be null if the widget is only used to add the Reveal CTA.
|
|
690
|
+
title: Lit.LitTemplate|Platform.UIString.LocalizedString|null;
|
|
661
691
|
}
|
|
662
692
|
|
|
663
693
|
const nodeCache = new Map<Protocol.DOM.BackendNodeId, SDK.DOMModel.DOMNode>();
|
|
@@ -696,11 +726,20 @@ async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promi
|
|
|
696
726
|
// This disables showing the nested traces and detailed information in the widget.
|
|
697
727
|
propertyTraces: null,
|
|
698
728
|
allowUserControl: false,
|
|
699
|
-
filterText: new RegExp(widgetData.data.properties.join('|'), 'i')
|
|
729
|
+
filterText: new RegExp(widgetData.data.properties.join('|'), 'i'),
|
|
730
|
+
enableNarrowViewResizing: false,
|
|
700
731
|
})}></devtools-widget>`;
|
|
701
732
|
// clang-format on
|
|
702
733
|
|
|
703
|
-
return {
|
|
734
|
+
return {
|
|
735
|
+
renderedWidget,
|
|
736
|
+
revealable: new Elements.ElementsPanel.NodeComputedStyles(domNodeForId),
|
|
737
|
+
title: html`<devtools-widget
|
|
738
|
+
${widget(PanelsCommon.DOMLinkifier.DOMNodeLink, {
|
|
739
|
+
node: domNodeForId,
|
|
740
|
+
})}
|
|
741
|
+
></devtools-widget>`,
|
|
742
|
+
};
|
|
704
743
|
}
|
|
705
744
|
|
|
706
745
|
async function makeCoreVitalsWidget(widgetData: CoreVitalsAiWidget): Promise<WidgetMakerResponse|null> {
|
|
@@ -710,7 +749,11 @@ async function makeCoreVitalsWidget(widgetData: CoreVitalsAiWidget): Promise<Wid
|
|
|
710
749
|
</devtools-widget>`;
|
|
711
750
|
// clang-format on
|
|
712
751
|
|
|
713
|
-
return {
|
|
752
|
+
return {
|
|
753
|
+
renderedWidget,
|
|
754
|
+
revealable: new TimelineUtils.Helpers.RevealableCoreVitals(widgetData.data.insightSetKey),
|
|
755
|
+
title: lockedString(UIStringsNotTranslate.coreVitals),
|
|
756
|
+
};
|
|
714
757
|
}
|
|
715
758
|
|
|
716
759
|
async function makeStylePropertiesWidget(widgetData: StylePropertiesAiWidget): Promise<WidgetMakerResponse|null> {
|
|
@@ -729,7 +772,15 @@ async function makeStylePropertiesWidget(widgetData: StylePropertiesAiWidget): P
|
|
|
729
772
|
</devtools-widget>`;
|
|
730
773
|
// clang-format on
|
|
731
774
|
|
|
732
|
-
return {
|
|
775
|
+
return {
|
|
776
|
+
renderedWidget,
|
|
777
|
+
revealable: domNodeForId,
|
|
778
|
+
title: html`<devtools-widget
|
|
779
|
+
${widget(PanelsCommon.DOMLinkifier.DOMNodeLink, {
|
|
780
|
+
node: domNodeForId,
|
|
781
|
+
})}
|
|
782
|
+
></devtools-widget>`,
|
|
783
|
+
};
|
|
733
784
|
}
|
|
734
785
|
|
|
735
786
|
async function makeLcpBreakdownWidget(widgetData: LcpBreakdownAiWidget): Promise<WidgetMakerResponse|null> {
|
|
@@ -747,7 +798,11 @@ async function makeLcpBreakdownWidget(widgetData: LcpBreakdownAiWidget): Promise
|
|
|
747
798
|
})}></devtools-widget>`;
|
|
748
799
|
// clang-format on
|
|
749
800
|
|
|
750
|
-
return {
|
|
801
|
+
return {
|
|
802
|
+
renderedWidget,
|
|
803
|
+
revealable: new TimelineUtils.Helpers.RevealableInsight(insight),
|
|
804
|
+
title: lockedString(UIStringsNotTranslate.lcpBreakdown),
|
|
805
|
+
};
|
|
751
806
|
}
|
|
752
807
|
|
|
753
808
|
function renderWidgetResponse(response: WidgetMakerResponse|null): Lit.LitTemplate {
|
|
@@ -768,19 +823,21 @@ function renderWidgetResponse(response: WidgetMakerResponse|null): Lit.LitTempla
|
|
|
768
823
|
});
|
|
769
824
|
|
|
770
825
|
const revealButton = html`
|
|
771
|
-
<devtools-button class="widget-reveal"
|
|
772
|
-
.iconName=${'tab-move'}
|
|
826
|
+
<devtools-button class="widget-reveal-button"
|
|
773
827
|
.variant=${Buttons.Button.Variant.TEXT}
|
|
774
828
|
@click=${onReveal}
|
|
775
|
-
|
|
829
|
+
>
|
|
830
|
+
${response.customRevealTitle ?? lockedString(UIStringsNotTranslate.reveal)}
|
|
831
|
+
<devtools-icon name='tab-move'></devtools-icon>
|
|
832
|
+
</devtools-button>
|
|
776
833
|
`;
|
|
777
834
|
|
|
778
835
|
// clang-format off
|
|
779
836
|
return html`
|
|
780
837
|
<div class=${classes}>
|
|
781
|
-
${response.
|
|
838
|
+
${response.title ? html`
|
|
782
839
|
<div class="widget-header">
|
|
783
|
-
<div class="widget-name">${response.
|
|
840
|
+
<div class="widget-name">${response.title}</div>
|
|
784
841
|
<div class="widget-reveal-container">
|
|
785
842
|
${revealButton}
|
|
786
843
|
</div>
|
|
@@ -791,7 +848,7 @@ function renderWidgetResponse(response: WidgetMakerResponse|null): Lit.LitTempla
|
|
|
791
848
|
${response.renderedWidget}
|
|
792
849
|
</div>` : Lit.nothing
|
|
793
850
|
}
|
|
794
|
-
${!response.
|
|
851
|
+
${!response.title ? html`
|
|
795
852
|
<div class="widget-reveal-container">
|
|
796
853
|
${revealButton}
|
|
797
854
|
</div>
|
|
@@ -804,6 +861,7 @@ function renderWidgetResponse(response: WidgetMakerResponse|null): Lit.LitTempla
|
|
|
804
861
|
async function makePerformanceTraceWidget(widgetData: PerformanceTraceAiWidget): Promise<WidgetMakerResponse|null> {
|
|
805
862
|
return {
|
|
806
863
|
renderedWidget: null,
|
|
864
|
+
title: null,
|
|
807
865
|
revealable: new Timeline.TimelinePanel.ParsedTraceRevealable(widgetData.data.parsedTrace),
|
|
808
866
|
customRevealTitle: lockedString(UIStringsNotTranslate.revealTrace),
|
|
809
867
|
};
|
|
@@ -863,7 +921,7 @@ async function makeDomTreeWidget(widgetData: DomTreeAiWidget): Promise<WidgetMak
|
|
|
863
921
|
return {
|
|
864
922
|
renderedWidget,
|
|
865
923
|
revealable: new SDK.DOMModel.DeferredDOMNode(root.domModel().target(), root.backendNodeId()),
|
|
866
|
-
|
|
924
|
+
title: lockedString(UIStringsNotTranslate.lcpElement),
|
|
867
925
|
};
|
|
868
926
|
}
|
|
869
927
|
|
|
@@ -1359,6 +1417,7 @@ async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAi
|
|
|
1359
1417
|
const thirdPartyTree = new Timeline.ThirdPartyTreeView.ThirdPartyTreeViewWidget();
|
|
1360
1418
|
const mapper = new Trace.EntityMapper.EntityMapper(parsedTrace);
|
|
1361
1419
|
thirdPartyTree.setModelWithEvents(eventsArray, parsedTrace, mapper);
|
|
1420
|
+
thirdPartyTree.updateContents(Timeline.TimelineSelection.selectionFromRangeMicroSeconds(bounds.min, bounds.max));
|
|
1362
1421
|
thirdPartyTree.refreshTree(true);
|
|
1363
1422
|
|
|
1364
1423
|
// clang-format off
|
|
@@ -1371,11 +1430,16 @@ async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAi
|
|
|
1371
1430
|
startTime: Trace.Helpers.Timing.microToMilli(bounds.min),
|
|
1372
1431
|
endTime: Trace.Helpers.Timing.microToMilli(bounds.max),
|
|
1373
1432
|
thirdPartyTreeTemplate: html`<devtools-performance-third-party-tree-view
|
|
1433
|
+
max-rows="10"
|
|
1374
1434
|
.treeView=${thirdPartyTree}></devtools-performance-third-party-tree-view>`,
|
|
1375
1435
|
} as TimelineComponents.TimelineRangeSummaryView.TimelineRangeSummaryViewData,
|
|
1376
1436
|
})}
|
|
1377
1437
|
></devtools-widget>`;
|
|
1378
1438
|
// clang-format on
|
|
1379
1439
|
|
|
1380
|
-
return {
|
|
1440
|
+
return {
|
|
1441
|
+
renderedWidget: template,
|
|
1442
|
+
revealable: new TimelineUtils.Helpers.RevealableTimeRange(bounds),
|
|
1443
|
+
title: lockedString(UIStringsNotTranslate.performanceSummary),
|
|
1444
|
+
};
|
|
1381
1445
|
}
|
|
@@ -90,10 +90,10 @@ function renderInlineWalkthrough(input: ViewInput, stepsOutput: Lit.LitTemplate,
|
|
|
90
90
|
// clang-format off
|
|
91
91
|
return html`
|
|
92
92
|
<details class="walkthrough-inline" ?open=${input.isExpanded} @toggle=${onToggle}>
|
|
93
|
-
<summary>
|
|
93
|
+
<summary ?data-has-widgets=${!input.isLoading && hasWidgets}>
|
|
94
94
|
${input.isLoading ? html`<devtools-spinner></devtools-spinner>` : Lit.nothing}
|
|
95
95
|
${walkthroughTitle({isLoading: input.isLoading, lastStep, hasWidgets})}
|
|
96
|
-
<devtools-icon name="chevron-
|
|
96
|
+
<devtools-icon name="chevron-right"></devtools-icon>
|
|
97
97
|
</summary>
|
|
98
98
|
${stepsOutput}
|
|
99
99
|
</details>
|
|
@@ -182,8 +182,6 @@ export class WalkthroughView extends UI.Widget.Widget {
|
|
|
182
182
|
#view: View;
|
|
183
183
|
|
|
184
184
|
#message: ModelChatMessage|null = null;
|
|
185
|
-
// TODO(b/487921187): fix loading state - also unsure if we need this vs
|
|
186
|
-
// looking at the loading state in the message's steps.
|
|
187
185
|
#isLoading = false;
|
|
188
186
|
#markdownRenderer: MarkdownLitRenderer|null = null;
|
|
189
187
|
#onToggle: (isOpen: boolean) => void = () => {};
|
|
@@ -196,6 +194,7 @@ export class WalkthroughView extends UI.Widget.Widget {
|
|
|
196
194
|
|
|
197
195
|
#output: ViewOutput = {};
|
|
198
196
|
#stepsContainerResizeObserver = new ResizeObserver(() => this.#handleStepsContainerResize());
|
|
197
|
+
#lastStepsContainerWidth = 0;
|
|
199
198
|
|
|
200
199
|
constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
|
|
201
200
|
super(element);
|
|
@@ -218,12 +217,27 @@ export class WalkthroughView extends UI.Widget.Widget {
|
|
|
218
217
|
}
|
|
219
218
|
}
|
|
220
219
|
|
|
221
|
-
override onResize(): void {
|
|
222
|
-
this.#handleStepsContainerResize();
|
|
223
|
-
}
|
|
224
|
-
|
|
225
220
|
#handleStepsContainerResize(): void {
|
|
226
|
-
|
|
221
|
+
const width = this.#output.stepsContainer?.offsetWidth ?? 0;
|
|
222
|
+
/**
|
|
223
|
+
* If the width has changed, it's likely due to a manual resize (e.g., the
|
|
224
|
+
* user dragging the sidebar). In these cases, we want to avoid jumping the
|
|
225
|
+
* scroll position to the bottom, as it can be jarring for the user. We
|
|
226
|
+
* only auto-scroll if the width remains the same, meaning only the height
|
|
227
|
+
* has changed (likely due to new content being added).
|
|
228
|
+
*/
|
|
229
|
+
if (width !== this.#lastStepsContainerWidth) {
|
|
230
|
+
this.#lastStepsContainerWidth = width;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* We only want to auto-scroll if the walkthrough is "live", which means it's
|
|
236
|
+
* currently loading. If it's not loading, it's a walkthrough for a previous
|
|
237
|
+
* message, and we don't want to jump the user to the bottom if they've
|
|
238
|
+
* scrolled away.
|
|
239
|
+
*/
|
|
240
|
+
if (!this.#pinScrollToBottom || !this.#isLoading) {
|
|
227
241
|
return;
|
|
228
242
|
}
|
|
229
243
|
|
|
@@ -338,7 +352,13 @@ export class WalkthroughView extends UI.Widget.Widget {
|
|
|
338
352
|
|
|
339
353
|
this.#registerResizeObservers();
|
|
340
354
|
|
|
341
|
-
|
|
355
|
+
/**
|
|
356
|
+
* We only want to auto-scroll if the walkthrough is "live", which means it's
|
|
357
|
+
* currently loading. If it's not loading, it's a walkthrough for a previous
|
|
358
|
+
* message, and we don't want to jump the user to the bottom if they've
|
|
359
|
+
* scrolled away.
|
|
360
|
+
*/
|
|
361
|
+
if (this.#pinScrollToBottom && this.#isLoading) {
|
|
342
362
|
this.scrollToBottom();
|
|
343
363
|
}
|
|
344
364
|
}
|
|
@@ -346,6 +346,13 @@
|
|
|
346
346
|
display: flex;
|
|
347
347
|
gap: var(--sys-size-4);
|
|
348
348
|
align-items: center;
|
|
349
|
+
|
|
350
|
+
.chevron {
|
|
351
|
+
color: var(--sys-color-primary);
|
|
352
|
+
width: var(--sys-size-8);
|
|
353
|
+
height: var(--sys-size-8);
|
|
354
|
+
margin-left: var(--sys-size-2);
|
|
355
|
+
}
|
|
349
356
|
}
|
|
350
357
|
|
|
351
358
|
|
|
@@ -372,18 +379,18 @@
|
|
|
372
379
|
gap: var(--sys-size-5);
|
|
373
380
|
}
|
|
374
381
|
|
|
375
|
-
|
|
376
382
|
.widget-header {
|
|
377
383
|
display: flex;
|
|
378
384
|
justify-content: space-between;
|
|
385
|
+
height: var(--sys-size-11);
|
|
379
386
|
align-items: center;
|
|
380
387
|
background: var(--sys-color-surface5);
|
|
381
388
|
padding: var(--sys-size-2) var(--sys-size-4);
|
|
382
|
-
border-top-left-radius: var(--sys-shape-corner-
|
|
383
|
-
border-top-right-radius: var(--sys-shape-corner-
|
|
389
|
+
border-top-left-radius: var(--sys-shape-corner-small);
|
|
390
|
+
border-top-right-radius: var(--sys-shape-corner-small);
|
|
384
391
|
|
|
385
392
|
.widget-name {
|
|
386
|
-
font: var(--sys-typescale-
|
|
393
|
+
font: var(--sys-typescale-body4-regular);
|
|
387
394
|
}
|
|
388
395
|
|
|
389
396
|
.widget-reveal-container {
|
|
@@ -393,10 +400,29 @@
|
|
|
393
400
|
}
|
|
394
401
|
}
|
|
395
402
|
|
|
403
|
+
.widget-reveal-button {
|
|
404
|
+
display: flex;
|
|
405
|
+
align-items: center;
|
|
406
|
+
|
|
407
|
+
devtools-icon {
|
|
408
|
+
margin-left: var(--sys-size-3);
|
|
409
|
+
color: var(--sys-color-primary);
|
|
410
|
+
width: var(--sys-size-8);
|
|
411
|
+
height: var(--sys-size-8);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.widget-and-revealer-container {
|
|
417
|
+
width: 100%;
|
|
418
|
+
min-width: var(--sys-size-30);
|
|
419
|
+
max-width: var(--sys-size-33);
|
|
420
|
+
}
|
|
421
|
+
|
|
396
422
|
.widget-reveal-container {
|
|
397
423
|
background: var(--sys-color-surface5);
|
|
398
|
-
border-bottom-right-radius: var(--sys-shape-corner-
|
|
399
|
-
border-bottom-left-radius: var(--sys-shape-corner-
|
|
424
|
+
border-bottom-right-radius: var(--sys-shape-corner-small);
|
|
425
|
+
border-bottom-left-radius: var(--sys-shape-corner-small);
|
|
400
426
|
padding: 0 var(--sys-size-4) var(--sys-size-4) 0;
|
|
401
427
|
}
|
|
402
428
|
|
|
@@ -406,7 +432,7 @@
|
|
|
406
432
|
}
|
|
407
433
|
|
|
408
434
|
.widget-content-container {
|
|
409
|
-
padding: var(--sys-size-4);
|
|
435
|
+
padding: var(--sys-size-4) var(--sys-size-5);
|
|
410
436
|
border-top-left-radius: var(--sys-shape-corner-medium);
|
|
411
437
|
border-top-right-radius: var(--sys-shape-corner-medium);
|
|
412
438
|
overflow-x: auto;
|
|
@@ -100,25 +100,45 @@
|
|
|
100
100
|
.walkthrough-inline {
|
|
101
101
|
border-radius: var(--sys-size-5);
|
|
102
102
|
overflow: hidden;
|
|
103
|
-
background-color: var(--sys-color-
|
|
103
|
+
background-color: var(--sys-color-surface2);
|
|
104
104
|
width: fit-content;
|
|
105
105
|
|
|
106
106
|
&[open] {
|
|
107
107
|
width: auto;
|
|
108
|
+
background-color: var(--sys-color-surface1);
|
|
108
109
|
}
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
.walkthrough-inline > summary {
|
|
112
113
|
display: flex;
|
|
113
114
|
align-items: center;
|
|
114
|
-
padding:
|
|
115
|
+
padding: 0 var(--sys-size-6);
|
|
115
116
|
cursor: pointer;
|
|
116
117
|
background-color: transparent;
|
|
118
|
+
/* The same height as a DevTools Button */
|
|
119
|
+
height: var(--sys-size-11);
|
|
117
120
|
font: var(--sys-typescale-body4-regular);
|
|
121
|
+
font-weight:var(--ref-typeface-weight-medium);
|
|
118
122
|
user-select: none;
|
|
119
123
|
list-style: none; /* Hide default triangle */
|
|
120
124
|
justify-content: flex-start;
|
|
121
125
|
gap: var(--sys-size-4);
|
|
126
|
+
color: var(--sys-color-primary);
|
|
127
|
+
|
|
128
|
+
devtools-icon {
|
|
129
|
+
color: var(--sys-color-primary);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Align the summary to look like the tonal button */
|
|
133
|
+
&[data-has-widgets] {
|
|
134
|
+
background: var(--sys-color-tonal-container);
|
|
135
|
+
color: var(--sys-color-on-tonal-container);
|
|
136
|
+
border-radius: var(--sys-shape-corner-full);
|
|
137
|
+
|
|
138
|
+
devtools-icon {
|
|
139
|
+
color: var(--sys-color-on-tonal-container);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
122
142
|
}
|
|
123
143
|
|
|
124
144
|
.walkthrough-inline > summary::-webkit-details-marker {
|
|
@@ -131,8 +151,6 @@
|
|
|
131
151
|
|
|
132
152
|
.walkthrough-inline .steps-container {
|
|
133
153
|
padding: var(--sys-size-6);
|
|
134
|
-
max-height: 300px; /* Limit height for inline view */
|
|
135
|
-
overflow-y: auto;
|
|
136
154
|
border-top: 1px solid var(--sys-color-divider);
|
|
137
155
|
background-color: transparent;
|
|
138
156
|
}
|
|
@@ -141,9 +159,21 @@
|
|
|
141
159
|
width: var(--sys-size-8);
|
|
142
160
|
height: var(--sys-size-8);
|
|
143
161
|
transition: transform 0.2s;
|
|
162
|
+
margin-left: auto;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.walkthrough-inline[open] > summary {
|
|
166
|
+
border-radius: var(--sys-shape-corner-medium-small);
|
|
167
|
+
border-bottom-right-radius: 0;
|
|
168
|
+
border-bottom-left-radius: 0;
|
|
169
|
+
background: var(--sys-color-surface5);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.walkthrough-inline .step {
|
|
173
|
+
background-color: var(--sys-color-surface5);
|
|
144
174
|
}
|
|
145
175
|
|
|
146
176
|
.walkthrough-inline[open] > summary > devtools-icon {
|
|
147
|
-
transform: rotate(
|
|
177
|
+
transform: rotate(270deg);
|
|
148
178
|
}
|
|
149
179
|
}
|