chrome-devtools-frontend 1.0.1576915 → 1.0.1578486

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.
Files changed (56) hide show
  1. package/front_end/core/sdk/DebuggerModel.ts +0 -34
  2. package/front_end/core/sdk/HeapProfilerModel.ts +7 -1
  3. package/front_end/generated/InspectorBackendCommands.ts +5 -4
  4. package/front_end/generated/SupportedCSSProperties.js +5 -8
  5. package/front_end/generated/protocol-mapping.d.ts +9 -0
  6. package/front_end/generated/protocol-proxy-api.d.ts +7 -0
  7. package/front_end/generated/protocol.ts +18 -2
  8. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +9 -7
  9. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +0 -24
  10. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +0 -52
  11. package/front_end/models/stack_trace/StackTrace.ts +3 -9
  12. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  13. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +3 -5
  14. package/front_end/panels/ai_assistance/components/ChatMessage.ts +4 -7
  15. package/front_end/panels/ai_assistance/components/ChatView.ts +1 -1
  16. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  17. package/front_end/panels/application/DeviceBoundSessionsView.ts +76 -51
  18. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +0 -1
  19. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -4
  20. package/front_end/panels/autofill/AutofillView.ts +1 -1
  21. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +0 -1
  22. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +2 -0
  23. package/front_end/panels/console/ConsoleViewMessage.ts +0 -1
  24. package/front_end/panels/css_overview/cssOverviewCompletedView.css +5 -0
  25. package/front_end/panels/elements/ElementsTreeElement.ts +0 -1
  26. package/front_end/panels/elements/LayoutPane.ts +7 -8
  27. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
  28. package/front_end/panels/elements/components/StylePropertyEditor.ts +1 -2
  29. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  30. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
  31. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
  32. package/front_end/panels/media/PlayerListView.ts +1 -1
  33. package/front_end/panels/network/NetworkLogViewColumns.ts +1 -2
  34. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  35. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  36. package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
  37. package/front_end/panels/recorder/components/RecordingView.ts +15 -0
  38. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  39. package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -2
  40. package/front_end/panels/settings/keybindsSettingsTab.css +57 -0
  41. package/front_end/panels/sources/CallStackSidebarPane.ts +74 -175
  42. package/front_end/panels/sources/DebuggerPlugin.ts +2 -2
  43. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  44. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
  45. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
  46. package/front_end/third_party/chromium/README.chromium +1 -1
  47. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +12 -7
  48. package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
  49. package/front_end/ui/legacy/ListControl.ts +1 -2
  50. package/front_end/ui/legacy/ListWidget.ts +1 -1
  51. package/front_end/ui/legacy/SoftContextMenu.ts +1 -2
  52. package/front_end/ui/legacy/Treeoutline.ts +0 -1
  53. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -4
  54. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  55. package/front_end/ui/visual_logging/Debugging.ts +2 -0
  56. package/package.json +1 -1
@@ -150,7 +150,6 @@ export class DebuggerModel extends SDKModel<EventTypes> {
150
150
  start: Location,
151
151
  end: Location,
152
152
  }>>)|null = null;
153
- #expandCallFramesCallback: ((arg0: CallFrame[]) => Promise<CallFrame[]>)|null = null;
154
153
  evaluateOnCallFrameCallback:
155
154
  ((arg0: CallFrame, arg1: EvaluationOptions) => Promise<EvaluationResult|null>)|null = null;
156
155
  #synchronizeBreakpointsCallback: ((script: Script) => Promise<void>)|null = null;
@@ -599,10 +598,6 @@ export class DebuggerModel extends SDKModel<EventTypes> {
599
598
  this.#beforePausedCallback = callback;
600
599
  }
601
600
 
602
- setExpandCallFramesCallback(callback: ((arg0: CallFrame[]) => Promise<CallFrame[]>)|null): void {
603
- this.#expandCallFramesCallback = callback;
604
- }
605
-
606
601
  setEvaluateOnCallFrameCallback(
607
602
  callback: ((arg0: CallFrame, arg1: EvaluationOptions) => Promise<EvaluationResult|null>)|null): void {
608
603
  this.evaluateOnCallFrameCallback = callback;
@@ -627,7 +622,6 @@ export class DebuggerModel extends SDKModel<EventTypes> {
627
622
 
628
623
  const pausedDetails =
629
624
  new DebuggerPausedDetails(this, callFrames, reason, auxData, breakpointIds, asyncStackTrace, asyncStackTraceId);
630
- await this.#expandCallFrames(pausedDetails);
631
625
 
632
626
  if (this.continueToLocationCallback) {
633
627
  const callback = this.continueToLocationCallback;
@@ -648,13 +642,6 @@ export class DebuggerModel extends SDKModel<EventTypes> {
648
642
  }
649
643
  }
650
644
 
651
- /** Delegates to the DebuggerLanguagePlugin and potential attached source maps to expand inlined call frames */
652
- async #expandCallFrames(pausedDetails: DebuggerPausedDetails): Promise<void> {
653
- if (this.#expandCallFramesCallback) {
654
- pausedDetails.callFrames = await this.#expandCallFramesCallback.call(null, pausedDetails.callFrames);
655
- }
656
- }
657
-
658
645
  resumedScript(): void {
659
646
  this.resetDebuggerPausedDetails();
660
647
  this.dispatchEventToListeners(Events.DebuggerResumed, this);
@@ -708,10 +695,6 @@ export class DebuggerModel extends SDKModel<EventTypes> {
708
695
  }
709
696
 
710
697
  async setDebugInfoURL(script: Script, _externalURL: Platform.DevToolsPath.UrlString): Promise<void> {
711
- if (this.#expandCallFramesCallback && this.#debuggerPausedDetails) {
712
- this.#debuggerPausedDetails.callFrames =
713
- await this.#expandCallFramesCallback.call(null, this.#debuggerPausedDetails.callFrames);
714
- }
715
698
  this.dispatchEventToListeners(Events.DebugInfoAttached, script);
716
699
  }
717
700
 
@@ -1186,21 +1169,6 @@ export interface MissingDebugFiles {
1186
1169
  initiator: PageResourceLoadInitiator;
1187
1170
  }
1188
1171
 
1189
- export const enum MissingDebugInfoType {
1190
- /** No debug information at all for the call frame */
1191
- NO_INFO = 'NO_INFO',
1192
-
1193
- /** Some debug information available, but it references files with debug information we were not able to retrieve */
1194
- PARTIAL_INFO = 'PARTIAL_INFO',
1195
- }
1196
-
1197
- export type MissingDebugInfo = {
1198
- type: MissingDebugInfoType.NO_INFO,
1199
- }|{
1200
- type: MissingDebugInfoType.PARTIAL_INFO,
1201
- missingDebugFiles: MissingDebugFiles[],
1202
- };
1203
-
1204
1172
  export class CallFrame {
1205
1173
  debuggerModel: DebuggerModel;
1206
1174
  readonly script: Script;
@@ -1212,7 +1180,6 @@ export class CallFrame {
1212
1180
  readonly functionName: string;
1213
1181
  readonly #functionLocation: Location|undefined;
1214
1182
  #returnValue: RemoteObject|null;
1215
- missingDebugInfoDetails: MissingDebugInfo|null;
1216
1183
  readonly exception: RemoteObject|null;
1217
1184
 
1218
1185
  readonly canBeRestarted: boolean;
@@ -1228,7 +1195,6 @@ export class CallFrame {
1228
1195
  this.#localScope = null;
1229
1196
  this.inlineFrameIndex = inlineFrameIndex || 0;
1230
1197
  this.functionName = functionName ?? payload.functionName;
1231
- this.missingDebugInfoDetails = null;
1232
1198
  this.canBeRestarted = Boolean(payload.canBeRestarted);
1233
1199
  this.exception = exception;
1234
1200
  for (let i = 0; i < payload.scopeChain.length; ++i) {
@@ -11,6 +11,7 @@ import type {RemoteObject} from './RemoteObject.js';
11
11
  import {RuntimeModel} from './RuntimeModel.js';
12
12
  import {SDKModel} from './SDKModel.js';
13
13
  import {Capability, type Target} from './Target.js';
14
+ import {TargetManager} from './TargetManager.js';
14
15
 
15
16
  export class HeapProfilerModel extends SDKModel<EventTypes> {
16
17
  #enabled: boolean;
@@ -106,7 +107,12 @@ export class HeapProfilerModel extends SDKModel<EventTypes> {
106
107
  }
107
108
 
108
109
  async takeHeapSnapshot(heapSnapshotOptions: Protocol.HeapProfiler.TakeHeapSnapshotRequest): Promise<void> {
109
- await this.#heapProfilerAgent.invoke_takeHeapSnapshot(heapSnapshotOptions);
110
+ await TargetManager.instance().suspendAllTargets('heap-snapshot');
111
+ try {
112
+ await this.#heapProfilerAgent.invoke_takeHeapSnapshot(heapSnapshotOptions);
113
+ } finally {
114
+ await TargetManager.instance().resumeAllTargets();
115
+ }
110
116
  }
111
117
 
112
118
  async startTrackingHeapObjects(recordAllocationStacks: boolean): Promise<boolean> {
@@ -571,7 +571,8 @@ inspectorBackend.registerCommand("EventBreakpoints.disable", [], [], "Removes al
571
571
 
572
572
  // Extensions.
573
573
  inspectorBackend.registerEnum("Extensions.StorageArea", {Session: "session", Local: "local", Sync: "sync", Managed: "managed"});
574
- inspectorBackend.registerCommand("Extensions.loadUnpacked", [{"name": "path", "type": "string", "optional": false, "description": "Absolute file path.", "typeRef": null}], ["id"], "Installs an unpacked extension from the filesystem similar to --load-extension CLI flags. Returns extension ID once the extension has been installed. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging flag is set.");
574
+ inspectorBackend.registerCommand("Extensions.triggerAction", [{"name": "id", "type": "string", "optional": false, "description": "Extension id.", "typeRef": null}, {"name": "targetId", "type": "string", "optional": false, "description": "A tab target ID to trigger the default extension action on.", "typeRef": null}], [], "Runs an extension default action. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging flag is set.");
575
+ inspectorBackend.registerCommand("Extensions.loadUnpacked", [{"name": "path", "type": "string", "optional": false, "description": "Absolute file path.", "typeRef": null}, {"name": "enableInIncognito", "type": "boolean", "optional": true, "description": "Enable the extension in incognito", "typeRef": null}], ["id"], "Installs an unpacked extension from the filesystem similar to --load-extension CLI flags. Returns extension ID once the extension has been installed. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging flag is set.");
575
576
  inspectorBackend.registerCommand("Extensions.uninstall", [{"name": "id", "type": "string", "optional": false, "description": "Extension id.", "typeRef": null}], [], "Uninstalls an unpacked extension (others not supported) from the profile. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging.");
576
577
  inspectorBackend.registerCommand("Extensions.getStorageItems", [{"name": "id", "type": "string", "optional": false, "description": "ID of extension.", "typeRef": null}, {"name": "storageArea", "type": "string", "optional": false, "description": "StorageArea to retrieve data from.", "typeRef": "Extensions.StorageArea"}, {"name": "keys", "type": "array", "optional": true, "description": "Keys to retrieve.", "typeRef": "string"}], ["data"], "Gets data from extension storage in the given `storageArea`. If `keys` is specified, these are used to filter the result.");
577
578
  inspectorBackend.registerCommand("Extensions.removeStorageItems", [{"name": "id", "type": "string", "optional": false, "description": "ID of extension.", "typeRef": null}, {"name": "storageArea", "type": "string", "optional": false, "description": "StorageArea to remove data from.", "typeRef": "Extensions.StorageArea"}, {"name": "keys", "type": "array", "optional": false, "description": "Keys to remove.", "typeRef": "string"}], [], "Removes `keys` from extension storage in the given `storageArea`.");
@@ -782,7 +783,7 @@ inspectorBackend.registerEnum("Network.InterceptionStage", {Request: "Request",
782
783
  inspectorBackend.registerEnum("Network.SignedExchangeErrorField", {SignatureSig: "signatureSig", SignatureIntegrity: "signatureIntegrity", SignatureCertUrl: "signatureCertUrl", SignatureCertSha256: "signatureCertSha256", SignatureValidityUrl: "signatureValidityUrl", SignatureTimestamps: "signatureTimestamps"});
783
784
  inspectorBackend.registerEnum("Network.ContentEncoding", {Deflate: "deflate", Gzip: "gzip", Br: "br", Zstd: "zstd"});
784
785
  inspectorBackend.registerEnum("Network.DirectSocketDnsQueryType", {Ipv4: "ipv4", Ipv6: "ipv6"});
785
- inspectorBackend.registerEnum("Network.PrivateNetworkRequestPolicy", {Allow: "Allow", BlockFromInsecureToMorePrivate: "BlockFromInsecureToMorePrivate", WarnFromInsecureToMorePrivate: "WarnFromInsecureToMorePrivate", PermissionBlock: "PermissionBlock", PermissionWarn: "PermissionWarn"});
786
+ inspectorBackend.registerEnum("Network.LocalNetworkAccessRequestPolicy", {Allow: "Allow", BlockFromInsecureToMorePrivate: "BlockFromInsecureToMorePrivate", WarnFromInsecureToMorePrivate: "WarnFromInsecureToMorePrivate", PermissionBlock: "PermissionBlock", PermissionWarn: "PermissionWarn"});
786
787
  inspectorBackend.registerEnum("Network.IPAddressSpace", {Loopback: "Loopback", Local: "Local", Public: "Public", Unknown: "Unknown"});
787
788
  inspectorBackend.registerEnum("Network.CrossOriginOpenerPolicyValue", {SameOrigin: "SameOrigin", SameOriginAllowPopups: "SameOriginAllowPopups", RestrictProperties: "RestrictProperties", UnsafeNone: "UnsafeNone", SameOriginPlusCoep: "SameOriginPlusCoep", RestrictPropertiesPlusCoep: "RestrictPropertiesPlusCoep", NoopenerAllowPopups: "NoopenerAllowPopups"});
788
789
  inspectorBackend.registerEnum("Network.CrossOriginEmbedderPolicyValue", {None: "None", Credentialless: "Credentialless", RequireCorp: "RequireCorp"});
@@ -912,7 +913,7 @@ inspectorBackend.registerType("Network.DirectTCPSocketOptions", [{"name": "noDel
912
913
  inspectorBackend.registerType("Network.DirectUDPSocketOptions", [{"name": "remoteAddr", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "remotePort", "type": "number", "optional": true, "description": "Unsigned int 16.", "typeRef": null}, {"name": "localAddr", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "localPort", "type": "number", "optional": true, "description": "Unsigned int 16.", "typeRef": null}, {"name": "dnsQueryType", "type": "string", "optional": true, "description": "", "typeRef": "Network.DirectSocketDnsQueryType"}, {"name": "sendBufferSize", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}, {"name": "receiveBufferSize", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}, {"name": "multicastLoopback", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "multicastTimeToLive", "type": "number", "optional": true, "description": "Unsigned int 8.", "typeRef": null}, {"name": "multicastAllowAddressSharing", "type": "boolean", "optional": true, "description": "", "typeRef": null}]);
913
914
  inspectorBackend.registerType("Network.DirectUDPMessage", [{"name": "data", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "remoteAddr", "type": "string", "optional": true, "description": "Null for connected mode.", "typeRef": null}, {"name": "remotePort", "type": "number", "optional": true, "description": "Null for connected mode. Expected to be unsigned integer.", "typeRef": null}]);
914
915
  inspectorBackend.registerType("Network.ConnectTiming", [{"name": "requestTime", "type": "number", "optional": false, "description": "Timing's requestTime is a baseline in seconds, while the other numbers are ticks in milliseconds relatively to this requestTime. Matches ResourceTiming's requestTime for the same request (but not for redirected requests).", "typeRef": null}]);
915
- inspectorBackend.registerType("Network.ClientSecurityState", [{"name": "initiatorIsSecureContext", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "initiatorIPAddressSpace", "type": "string", "optional": false, "description": "", "typeRef": "Network.IPAddressSpace"}, {"name": "privateNetworkRequestPolicy", "type": "string", "optional": false, "description": "", "typeRef": "Network.PrivateNetworkRequestPolicy"}]);
916
+ inspectorBackend.registerType("Network.ClientSecurityState", [{"name": "initiatorIsSecureContext", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "initiatorIPAddressSpace", "type": "string", "optional": false, "description": "", "typeRef": "Network.IPAddressSpace"}, {"name": "localNetworkAccessRequestPolicy", "type": "string", "optional": false, "description": "", "typeRef": "Network.LocalNetworkAccessRequestPolicy"}]);
916
917
  inspectorBackend.registerType("Network.CrossOriginOpenerPolicyStatus", [{"name": "value", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginOpenerPolicyValue"}, {"name": "reportOnlyValue", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginOpenerPolicyValue"}, {"name": "reportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "reportOnlyReportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}]);
917
918
  inspectorBackend.registerType("Network.CrossOriginEmbedderPolicyStatus", [{"name": "value", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginEmbedderPolicyValue"}, {"name": "reportOnlyValue", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginEmbedderPolicyValue"}, {"name": "reportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "reportOnlyReportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}]);
918
919
  inspectorBackend.registerType("Network.ContentSecurityPolicyStatus", [{"name": "effectiveDirectives", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "isEnforced", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "source", "type": "string", "optional": false, "description": "", "typeRef": "Network.ContentSecurityPolicySource"}]);
@@ -1268,7 +1269,7 @@ inspectorBackend.registerCommand("SmartCardEmulation.reportEstablishContextResul
1268
1269
  inspectorBackend.registerCommand("SmartCardEmulation.reportReleaseContextResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "Reports the successful result of a |SCardReleaseContext| call. This maps to: PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga6aabcba7744c5c9419fdd6404f73a934 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardreleasecontext");
1269
1270
  inspectorBackend.registerCommand("SmartCardEmulation.reportListReadersResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "readers", "type": "array", "optional": false, "description": "", "typeRef": "string"}], [], "Reports the successful result of a |SCardListReaders| call. This maps to: PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga93b07815789b3cf2629d439ecf20f0d9 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardlistreadersa");
1270
1271
  inspectorBackend.registerCommand("SmartCardEmulation.reportGetStatusChangeResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "readerStates", "type": "array", "optional": false, "description": "", "typeRef": "SmartCardEmulation.ReaderStateOut"}], [], "Reports the successful result of a |SCardGetStatusChange| call. This maps to: PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga33247d5d1257d59e55647c3bb717db24 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardgetstatuschangea");
1271
- inspectorBackend.registerCommand("SmartCardEmulation.reportBeginTransactionResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "Reports the result of a |SCardBeginTransaction| call. On success, this creates a new transaction object. This maps to: PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#gaddb835dce01a0da1d6ca02d33ee7d861 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardbegintransaction");
1272
+ inspectorBackend.registerCommand("SmartCardEmulation.reportBeginTransactionResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "handle", "type": "number", "optional": false, "description": "", "typeRef": null}], [], "Reports the result of a |SCardBeginTransaction| call. On success, this creates a new transaction object. This maps to: PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#gaddb835dce01a0da1d6ca02d33ee7d861 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardbegintransaction");
1272
1273
  inspectorBackend.registerCommand("SmartCardEmulation.reportPlainResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "Reports the successful result of a call that returns only a result code. Used for: |SCardCancel|, |SCardDisconnect|, |SCardSetAttrib|, |SCardEndTransaction|. This maps to: 1. SCardCancel PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#gaacbbc0c6d6c0cbbeb4f4debf6fbeeee6 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardcancel 2. SCardDisconnect PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga4be198045c73ec0deb79e66c0ca1738a Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scarddisconnect 3. SCardSetAttrib PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga060f0038a4ddfd5dd2b8fadf3c3a2e4f Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardsetattrib 4. SCardEndTransaction PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#gae8742473b404363e5c587f570d7e2f3b Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardendtransaction");
1273
1274
  inspectorBackend.registerCommand("SmartCardEmulation.reportConnectResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "handle", "type": "number", "optional": false, "description": "", "typeRef": null}, {"name": "activeProtocol", "type": "string", "optional": true, "description": "", "typeRef": "SmartCardEmulation.Protocol"}], [], "Reports the successful result of a |SCardConnect| call. This maps to: PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga4e515829752e0a8dbc4d630696a8d6a5 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardconnecta");
1274
1275
  inspectorBackend.registerCommand("SmartCardEmulation.reportDataResult", [{"name": "requestId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "data", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "Reports the successful result of a call that sends back data on success. Used for |SCardTransmit|, |SCardControl|, and |SCardGetAttrib|. This maps to: 1. SCardTransmit PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#ga9a2d77242a271310269065e64633ab99 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardtransmit 2. SCardControl PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#gac3454d4657110fd7f753b2d3d8f4e32f Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardcontrol 3. SCardGetAttrib PC/SC Lite: https://pcsclite.apdu.fr/api/group__API.html#gaacfec51917255b7a25b94c5104961602 Microsoft: https://learn.microsoft.com/en-us/windows/win32/api/winscard/nf-winscard-scardgetattrib");
@@ -1725,8 +1725,7 @@ export const generatedProperties = [
1725
1725
  "inherited": false,
1726
1726
  "keywords": [
1727
1727
  "none",
1728
- "auto",
1729
- "spanning-item",
1728
+ "normal",
1730
1729
  "intersection"
1731
1730
  ],
1732
1731
  "name": "column-rule-break"
@@ -2690,6 +2689,7 @@ export const generatedProperties = [
2690
2689
  "longhands": [
2691
2690
  "grid-template-areas",
2692
2691
  "grid-template-columns",
2692
+ "grid-template-rows",
2693
2693
  "grid-lanes-direction"
2694
2694
  ],
2695
2695
  "name": "grid-lanes"
@@ -3774,8 +3774,7 @@ export const generatedProperties = [
3774
3774
  "inherited": false,
3775
3775
  "keywords": [
3776
3776
  "none",
3777
- "auto",
3778
- "spanning-item",
3777
+ "normal",
3779
3778
  "intersection"
3780
3779
  ],
3781
3780
  "name": "row-rule-break"
@@ -5527,8 +5526,7 @@ export const generatedPropertyValues = {
5527
5526
  "column-rule-break": {
5528
5527
  "values": [
5529
5528
  "none",
5530
- "auto",
5531
- "spanning-item",
5529
+ "normal",
5532
5530
  "intersection"
5533
5531
  ]
5534
5532
  },
@@ -6665,8 +6663,7 @@ export const generatedPropertyValues = {
6665
6663
  "row-rule-break": {
6666
6664
  "values": [
6667
6665
  "none",
6668
- "auto",
6669
- "spanning-item",
6666
+ "normal",
6670
6667
  "intersection"
6671
6668
  ]
6672
6669
  },
@@ -2790,6 +2790,15 @@ export namespace ProtocolMapping {
2790
2790
  paramsType: [];
2791
2791
  returnType: void;
2792
2792
  };
2793
+ /**
2794
+ * Runs an extension default action.
2795
+ * Available if the client is connected using the --remote-debugging-pipe
2796
+ * flag and the --enable-unsafe-extension-debugging flag is set.
2797
+ */
2798
+ 'Extensions.triggerAction': {
2799
+ paramsType: [Protocol.Extensions.TriggerActionRequest];
2800
+ returnType: void;
2801
+ };
2793
2802
  /**
2794
2803
  * Installs an unpacked extension from the filesystem similar to
2795
2804
  * --load-extension CLI flags. Returns extension ID once the extension
@@ -1876,6 +1876,13 @@ declare namespace ProtocolProxyApi {
1876
1876
  }
1877
1877
 
1878
1878
  export interface ExtensionsApi {
1879
+ /**
1880
+ * Runs an extension default action.
1881
+ * Available if the client is connected using the --remote-debugging-pipe
1882
+ * flag and the --enable-unsafe-extension-debugging flag is set.
1883
+ */
1884
+ invoke_triggerAction(params: Protocol.Extensions.TriggerActionRequest): Promise<Protocol.ProtocolResponseWithError>;
1885
+
1879
1886
  /**
1880
1887
  * Installs an unpacked extension from the filesystem similar to
1881
1888
  * --load-extension CLI flags. Returns extension ID once the extension
@@ -7481,11 +7481,26 @@ export namespace Extensions {
7481
7481
  Managed = 'managed',
7482
7482
  }
7483
7483
 
7484
+ export interface TriggerActionRequest {
7485
+ /**
7486
+ * Extension id.
7487
+ */
7488
+ id: string;
7489
+ /**
7490
+ * A tab target ID to trigger the default extension action on.
7491
+ */
7492
+ targetId: string;
7493
+ }
7494
+
7484
7495
  export interface LoadUnpackedRequest {
7485
7496
  /**
7486
7497
  * Absolute file path.
7487
7498
  */
7488
7499
  path: string;
7500
+ /**
7501
+ * Enable the extension in incognito
7502
+ */
7503
+ enableInIncognito?: boolean;
7489
7504
  }
7490
7505
 
7491
7506
  export interface LoadUnpackedResponse extends ProtocolResponseWithError {
@@ -11208,7 +11223,7 @@ export namespace Network {
11208
11223
  remotePort?: integer;
11209
11224
  }
11210
11225
 
11211
- export const enum PrivateNetworkRequestPolicy {
11226
+ export const enum LocalNetworkAccessRequestPolicy {
11212
11227
  Allow = 'Allow',
11213
11228
  BlockFromInsecureToMorePrivate = 'BlockFromInsecureToMorePrivate',
11214
11229
  WarnFromInsecureToMorePrivate = 'WarnFromInsecureToMorePrivate',
@@ -11235,7 +11250,7 @@ export namespace Network {
11235
11250
  export interface ClientSecurityState {
11236
11251
  initiatorIsSecureContext: boolean;
11237
11252
  initiatorIPAddressSpace: IPAddressSpace;
11238
- privateNetworkRequestPolicy: PrivateNetworkRequestPolicy;
11253
+ localNetworkAccessRequestPolicy: LocalNetworkAccessRequestPolicy;
11239
11254
  }
11240
11255
 
11241
11256
  export const enum CrossOriginOpenerPolicyValue {
@@ -17395,6 +17410,7 @@ export namespace SmartCardEmulation {
17395
17410
 
17396
17411
  export interface ReportBeginTransactionResultRequest {
17397
17412
  requestId: string;
17413
+ handle: integer;
17398
17414
  }
17399
17415
 
17400
17416
  export interface ReportPlainResultRequest {
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as Host from '../../../core/host/host.js';
6
+ import * as i18n from '../../../core/i18n/i18n.js';
6
7
  import * as Platform from '../../../core/platform/platform.js';
7
8
  import * as Root from '../../../core/root/root.js';
8
9
  import * as Logs from '../../logs/logs.js';
@@ -14,6 +15,7 @@ import {
14
15
  type RequestOptions,
15
16
  } from './AiAgent.js';
16
17
 
18
+ const lockedString = i18n.i18n.lockedString;
17
19
  /**
18
20
  * WARNING: preamble defined in code is only used when userTier is
19
21
  * TESTERS. Otherwise, a server-side preamble is used (see
@@ -78,13 +80,10 @@ export class ContextSelectionAgent extends AiAgent<never> {
78
80
  required: [],
79
81
  properties: {},
80
82
  },
81
- handler: async (_params, options) => {
82
- if (!options?.approved) {
83
- return {
84
- requiresApproval: true,
85
- };
86
- }
87
-
83
+ displayInfoFromArgs: () => {
84
+ return {title: lockedString('Listing network requests…')};
85
+ },
86
+ handler: async () => {
88
87
  const requestURls = [];
89
88
  for (const request of Logs.NetworkLog.NetworkLog.instance().requests()) {
90
89
  requestURls.push(request.url());
@@ -111,6 +110,9 @@ export class ContextSelectionAgent extends AiAgent<never> {
111
110
  },
112
111
  },
113
112
  },
113
+ displayInfoFromArgs: args => {
114
+ return {title: lockedString('Getting network request…'), action: `selectNetworkRequest(${args.url})`};
115
+ },
114
116
  handler: async ({url}) => {
115
117
  // TODO: Switch to using IDs to make is easier to link to as well.
116
118
  const request = Logs.NetworkLog.NetworkLog.instance().requests().find(req => {
@@ -489,35 +489,12 @@ export class DebuggerLanguagePluginManager implements
489
489
  return this.callFrameByStopId.get(stopId);
490
490
  }
491
491
 
492
- private expandCallFrames(callFrames: SDK.DebuggerModel.CallFrame[]): Promise<SDK.DebuggerModel.CallFrame[]> {
493
- return Promise
494
- .all(callFrames.map(async callFrame => {
495
- const functionInfo = await this.getFunctionInfo(callFrame.script, callFrame.location());
496
- if (functionInfo) {
497
- if ('frames' in functionInfo && functionInfo.frames.length) {
498
- return functionInfo.frames.map(({name}, index) => callFrame.createVirtualCallFrame(index, name));
499
- }
500
- if ('missingSymbolFiles' in functionInfo && functionInfo.missingSymbolFiles.length) {
501
- callFrame.missingDebugInfoDetails = {
502
- type: SDK.DebuggerModel.MissingDebugInfoType.PARTIAL_INFO,
503
- missingDebugFiles: functionInfo.missingSymbolFiles,
504
- };
505
- } else {
506
- callFrame.missingDebugInfoDetails = {type: SDK.DebuggerModel.MissingDebugInfoType.NO_INFO};
507
- }
508
- }
509
- return callFrame;
510
- }))
511
- .then(callFrames => callFrames.flat());
512
- }
513
-
514
492
  modelAdded(debuggerModel: SDK.DebuggerModel.DebuggerModel): void {
515
493
  this.#debuggerModelToData.set(debuggerModel, new ModelData(debuggerModel, this.#workspace));
516
494
  debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, this.globalObjectCleared, this);
517
495
  debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, this.parsedScriptSource, this);
518
496
  debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerResumed, this.debuggerResumed, this);
519
497
  debuggerModel.setEvaluateOnCallFrameCallback(this.evaluateOnCallFrame.bind(this));
520
- debuggerModel.setExpandCallFramesCallback(this.expandCallFrames.bind(this));
521
498
  }
522
499
 
523
500
  modelRemoved(debuggerModel: SDK.DebuggerModel.DebuggerModel): void {
@@ -525,7 +502,6 @@ export class DebuggerLanguagePluginManager implements
525
502
  debuggerModel.removeEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, this.parsedScriptSource, this);
526
503
  debuggerModel.removeEventListener(SDK.DebuggerModel.Events.DebuggerResumed, this.debuggerResumed, this);
527
504
  debuggerModel.setEvaluateOnCallFrameCallback(null);
528
- debuggerModel.setExpandCallFramesCallback(null);
529
505
  const modelData = this.#debuggerModelToData.get(debuggerModel);
530
506
  if (modelData) {
531
507
  modelData.dispose();
@@ -38,10 +38,6 @@ export class DebuggerWorkspaceBinding implements SDK.TargetManager.SDKModelObser
38
38
  this.workspace = workspace;
39
39
 
40
40
  this.#debuggerModelToData = new Map();
41
- targetManager.addModelListener(
42
- SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.GlobalObjectCleared, this.globalObjectCleared, this);
43
- targetManager.addModelListener(
44
- SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebuggerResumed, this.debuggerResumed, this);
45
41
  targetManager.observeModels(SDK.DebuggerModel.DebuggerModel, this);
46
42
  this.ignoreListManager.addEventListener(
47
43
  Workspace.IgnoreListManager.Events.IGNORED_SCRIPT_RANGES_UPDATED, event => this.updateLocations(event.data));
@@ -221,24 +217,6 @@ export class DebuggerWorkspaceBinding implements SDK.TargetManager.SDKModelObser
221
217
  return await locationPromise;
222
218
  }
223
219
 
224
- async createCallFrameLiveLocation(
225
- location: SDK.DebuggerModel.Location, updateDelegate: (arg0: LiveLocation) => Promise<void>,
226
- locationPool: LiveLocationPool): Promise<Location|null> {
227
- const script = location.script();
228
- if (!script) {
229
- return null;
230
- }
231
- const debuggerModel = location.debuggerModel;
232
- const liveLocationPromise = this.createLiveLocation(location, updateDelegate, locationPool);
233
- this.recordLiveLocationChange(liveLocationPromise);
234
- const liveLocation = await liveLocationPromise;
235
- if (!liveLocation) {
236
- return null;
237
- }
238
- this.registerCallFrameLiveLocation(debuggerModel, liveLocation);
239
- return liveLocation;
240
- }
241
-
242
220
  async rawLocationToUILocation(rawLocation: SDK.DebuggerModel.Location):
243
221
  Promise<Workspace.UISourceCode.UILocation|null> {
244
222
  const uiLocation = await this.pluginManager.rawLocationToUILocation(rawLocation);
@@ -409,21 +387,6 @@ export class DebuggerWorkspaceBinding implements SDK.TargetManager.SDKModelObser
409
387
  return scripts.every(script => script.isJavaScript());
410
388
  }
411
389
 
412
- private globalObjectCleared(event: Common.EventTarget.EventTargetEvent<SDK.DebuggerModel.DebuggerModel>): void {
413
- this.reset(event.data);
414
- }
415
-
416
- private reset(debuggerModel: SDK.DebuggerModel.DebuggerModel): void {
417
- const modelData = this.#debuggerModelToData.get(debuggerModel);
418
- if (!modelData) {
419
- return;
420
- }
421
- for (const location of modelData.callFrameLocations.values()) {
422
- this.removeLiveLocation(location);
423
- }
424
- modelData.callFrameLocations.clear();
425
- }
426
-
427
390
  resetForTest(target: SDK.Target.Target): void {
428
391
  const debuggerModel = (target.model(SDK.DebuggerModel.DebuggerModel) as SDK.DebuggerModel.DebuggerModel);
429
392
  const modelData = this.#debuggerModelToData.get(debuggerModel);
@@ -432,14 +395,6 @@ export class DebuggerWorkspaceBinding implements SDK.TargetManager.SDKModelObser
432
395
  }
433
396
  }
434
397
 
435
- private registerCallFrameLiveLocation(debuggerModel: SDK.DebuggerModel.DebuggerModel, location: Location): void {
436
- const modelData = this.#debuggerModelToData.get(debuggerModel);
437
- if (modelData) {
438
- const locations = modelData.callFrameLocations;
439
- locations.add(location);
440
- }
441
- }
442
-
443
398
  removeLiveLocation(location: Location): void {
444
399
  const modelData = this.#debuggerModelToData.get(location.rawLocation.debuggerModel);
445
400
  if (modelData) {
@@ -447,10 +402,6 @@ export class DebuggerWorkspaceBinding implements SDK.TargetManager.SDKModelObser
447
402
  }
448
403
  }
449
404
 
450
- private debuggerResumed(event: Common.EventTarget.EventTargetEvent<SDK.DebuggerModel.DebuggerModel>): void {
451
- this.reset(event.data);
452
- }
453
-
454
405
  private async shouldPause(
455
406
  debuggerPausedDetails: SDK.DebuggerModel.DebuggerPausedDetails,
456
407
  autoSteppingContext: SDK.DebuggerModel.Location|null): Promise<boolean> {
@@ -509,7 +460,6 @@ export class DebuggerWorkspaceBinding implements SDK.TargetManager.SDKModelObser
509
460
  class ModelData {
510
461
  readonly #debuggerModel: SDK.DebuggerModel.DebuggerModel;
511
462
  readonly #debuggerWorkspaceBinding: DebuggerWorkspaceBinding;
512
- callFrameLocations: Set<Location>;
513
463
  #defaultMapping: DefaultScriptMapping;
514
464
  readonly #resourceMapping: ResourceMapping;
515
465
  #resourceScriptMapping: ResourceScriptMapping;
@@ -520,8 +470,6 @@ class ModelData {
520
470
  this.#debuggerModel = debuggerModel;
521
471
  this.#debuggerWorkspaceBinding = debuggerWorkspaceBinding;
522
472
 
523
- this.callFrameLocations = new Set();
524
-
525
473
  const {workspace} = debuggerWorkspaceBinding.resourceMapping;
526
474
  this.#defaultMapping = new DefaultScriptMapping(debuggerModel, workspace, debuggerWorkspaceBinding);
527
475
  this.#resourceMapping = debuggerWorkspaceBinding.resourceMapping;
@@ -75,15 +75,9 @@ export class DebuggableFrameFlavor {
75
75
 
76
76
  readonly frame: DebuggableFrame;
77
77
 
78
- // TODO(crbug.com/465879478): Remove once this is no longer part of SDK.CallFrame.
79
- // We need to stash this separately because DebuggerModel sets this on CallFrame after the
80
- // fact so we can't just check it in the `equals` below.
81
- readonly #missingDebugInfo: SDK.DebuggerModel.MissingDebugInfo|null;
82
-
83
78
  /** Use the static {@link for}. Only public to satisfy the `setFlavor` Ctor type */
84
79
  constructor(frame: DebuggableFrame) {
85
80
  this.frame = frame;
86
- this.#missingDebugInfo = frame.sdkFrame.missingDebugInfoDetails;
87
81
  }
88
82
 
89
83
  get sdkFrame(): SDK.DebuggerModel.CallFrame {
@@ -94,11 +88,11 @@ export class DebuggableFrameFlavor {
94
88
  static for(frame: DebuggableFrame): DebuggableFrameFlavor {
95
89
  function equals(a: DebuggableFrame, b: DebuggableFrame): boolean {
96
90
  return a.url === b.url && a.uiSourceCode === b.uiSourceCode && a.name === b.name && a.line === b.line &&
97
- a.column === b.column && a.sdkFrame === b.sdkFrame;
91
+ a.column === b.column && a.sdkFrame === b.sdkFrame &&
92
+ JSON.stringify(a.missingDebugInfo) === JSON.stringify(b.missingDebugInfo);
98
93
  }
99
94
 
100
- if (!DebuggableFrameFlavor.#last || !equals(DebuggableFrameFlavor.#last.frame, frame) ||
101
- DebuggableFrameFlavor.#last.#missingDebugInfo !== frame.sdkFrame.missingDebugInfoDetails) {
95
+ if (!DebuggableFrameFlavor.#last || !equals(DebuggableFrameFlavor.#last.frame, frame)) {
102
96
  DebuggableFrameFlavor.#last = new DebuggableFrameFlavor(frame);
103
97
  }
104
98
  return DebuggableFrameFlavor.#last;
@@ -268,7 +268,7 @@ export class WorkspaceImpl extends Common.ObjectWrapper.ObjectWrapper<EventTypes
268
268
  return [...this.#projects.values()];
269
269
  }
270
270
 
271
- projectsForType(type: string): Project[] {
271
+ projectsForType(type: projectTypes): Project[] {
272
272
  function filterByType(project: Project): boolean {
273
273
  return project.type() === type;
274
274
  }
@@ -452,11 +452,9 @@ export class AXBreadcrumb {
452
452
 
453
453
  this.#element = document.createElement('div');
454
454
  this.#element.classList.add('ax-breadcrumb');
455
- this.#element.setAttribute('jslog', `${VisualLogging.treeItem().track({
456
- click: true,
457
- resize: true,
458
- keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter'
459
- })}`);
455
+ this.#element.setAttribute(
456
+ 'jslog',
457
+ `${VisualLogging.treeItem().track({click: true, keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter'})}`);
460
458
  elementsToAXBreadcrumb.set(this.#element, this);
461
459
 
462
460
  this.#nodeElement = document.createElement('div');
@@ -323,7 +323,6 @@ export const DEFAULT_VIEW = (input: ChatMessageViewInput, output: ViewOutput, ta
323
323
  }
324
324
  return renderStep({
325
325
  step: part.step,
326
- isLoading: input.isLoading,
327
326
  markdownRenderer: input.markdownRenderer,
328
327
  isLast: isLastPart,
329
328
  });
@@ -451,12 +450,11 @@ function renderStepDetails({
451
450
  // clang-format on
452
451
  }
453
452
 
454
- function renderStepBadge({step, isLoading, isLast}: {
453
+ function renderStepBadge({step, isLast}: {
455
454
  step: Step,
456
- isLoading: boolean,
457
455
  isLast: boolean,
458
456
  }): Lit.LitTemplate {
459
- if (isLoading && isLast && !step.sideEffect) {
457
+ if (step.isLoading && isLast && !step.sideEffect) {
460
458
  return html`<devtools-spinner></devtools-spinner>`;
461
459
  }
462
460
 
@@ -480,9 +478,8 @@ function renderStepBadge({step, isLoading, isLast}: {
480
478
  ></devtools-icon>`;
481
479
  }
482
480
 
483
- function renderStep({step, isLoading, markdownRenderer, isLast}: {
481
+ function renderStep({step, markdownRenderer, isLast}: {
484
482
  step: Step,
485
- isLoading: boolean,
486
483
  markdownRenderer: MarkdownLitRenderer,
487
484
  isLast: boolean,
488
485
  }): Lit.LitTemplate {
@@ -499,7 +496,7 @@ function renderStep({step, isLoading, markdownRenderer, isLast}: {
499
496
  .open=${Boolean(step.sideEffect)}>
500
497
  <summary>
501
498
  <div class="summary">
502
- ${renderStepBadge({ step, isLoading, isLast })}
499
+ ${renderStepBadge({ step, isLast })}
503
500
  ${renderTitle(step)}
504
501
  <devtools-icon
505
502
  class="arrow"
@@ -105,7 +105,7 @@ const DEFAULT_VIEW: View = (input, output, target) => {
105
105
  ${repeat(input.messages, message =>
106
106
  html`<devtools-widget .widgetConfig=${UI.Widget.widgetConfig(ChatMessage, {
107
107
  message,
108
- isLoading: input.isLoading,
108
+ isLoading: input.isLoading && input.messages.at(-1) === message,
109
109
  isReadOnly: input.isReadOnly,
110
110
  canShowFeedbackForm: input.canShowFeedbackForm,
111
111
  userInfo: input.userInfo,
@@ -98,7 +98,7 @@ const DEFAULT_VIEW: View = (input, output, target) => {
98
98
  render(html`
99
99
  <div class="animation-group-preview-ui">
100
100
  <button
101
- jslog=${VisualLogging.item(`animations.buffer-preview${input.isScrollDrivenAnimationGroup ? '-sda' : ''}`).track({click: true, resize: true})}
101
+ jslog=${VisualLogging.item(`animations.buffer-preview${input.isScrollDrivenAnimationGroup ? '-sda' : ''}`).track({click: true})}
102
102
  class=${classes}
103
103
  role="option"
104
104
  aria-label=${input.label}