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
@@ -582,25 +582,27 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
582
582
  <devtools-report>
583
583
  <devtools-report-section-header role="heading" aria-level="2">${
584
584
  i18nString(UIStrings.sessionConfig)}</devtools-report-section-header>
585
- <devtools-report-key>${i18nString(UIStrings.keySite)}</devtools-report-key>
586
- <devtools-report-value>${key.site}</devtools-report-value>
587
- <devtools-report-key>${i18nString(UIStrings.keyId)}</devtools-report-key>
588
- <devtools-report-value>${key.id}</devtools-report-value>
589
- <devtools-report-key>${i18nString(UIStrings.refreshUrl)}</devtools-report-key>
590
- <devtools-report-value>${sessionAndEvents.session.refreshUrl}</devtools-report-value>
591
- <devtools-report-key>${i18nString(UIStrings.expiryDate)}</devtools-report-key>
592
- <devtools-report-value>${
593
- new Date(sessionAndEvents.session.expiryDate * 1000).toLocaleString()}</devtools-report-value>
594
- <devtools-report-key>${i18nString(UIStrings.cachedChallenge)}</devtools-report-key>
595
- <devtools-report-value>${sessionAndEvents.session.cachedChallenge || ''}</devtools-report-value>
596
- <devtools-report-key>${i18nString(UIStrings.allowedRefreshInitiators)}</devtools-report-key>
597
- <devtools-report-value>${sessionAndEvents.session.allowedRefreshInitiators.join(', ')}</devtools-report-value>
585
+ ${renderKeyValue(i18nString(UIStrings.keySite), key.site, 'dbsc-site')}
586
+ ${renderKeyValue(i18nString(UIStrings.keyId), key.id, 'dbsc-id')}
587
+ ${renderKeyValue(i18nString(UIStrings.refreshUrl), sessionAndEvents.session.refreshUrl, 'dbsc-refresh-url')}
588
+ ${
589
+ renderKeyValue(
590
+ i18nString(UIStrings.expiryDate), new Date(sessionAndEvents.session.expiryDate * 1000).toLocaleString(),
591
+ 'dbsc-expiry-date')}
592
+ ${
593
+ renderKeyValue(
594
+ i18nString(UIStrings.cachedChallenge), sessionAndEvents.session.cachedChallenge || '',
595
+ 'dbsc-cached-challenge')}
596
+ ${
597
+ renderKeyValue(
598
+ i18nString(UIStrings.allowedRefreshInitiators),
599
+ sessionAndEvents.session.allowedRefreshInitiators.join(', '), 'dbsc-allowed-refresh-initiators')}
598
600
  <devtools-report-section-header role="heading" aria-level="2">${
599
601
  i18nString(UIStrings.scope)}</devtools-report-section-header>
600
- <devtools-report-key>${i18nString(UIStrings.origin)}</devtools-report-key>
601
- <devtools-report-value>${inclusionRules.origin}</devtools-report-value>
602
- <devtools-report-key>${i18nString(UIStrings.includeSite)}</devtools-report-key>
603
- <devtools-report-value>${boolToString(inclusionRules.includeSite)}</devtools-report-value>
602
+ ${renderKeyValue(i18nString(UIStrings.origin), inclusionRules.origin, 'dbsc-origin')}
603
+ ${
604
+ renderKeyValue(
605
+ i18nString(UIStrings.includeSite), boolToString(inclusionRules.includeSite), 'dbsc-include-site')}
604
606
  </devtools-report>
605
607
  ${
606
608
  inclusionRules.urlRules.length > 0 ? html`
@@ -708,62 +710,78 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
708
710
  const creationEventDetails =
709
711
  selectedEvent?.creationEventDetails &&
710
712
  html`
711
- <devtools-report-key>${i18nString(UIStrings.fetchResult)}</devtools-report-key>
712
- <devtools-report-value>${
713
- fetchResultToString(selectedEvent.creationEventDetails.fetchResult)}</devtools-report-value>
714
- ${selectedEvent.creationEventDetails.newSession && html`
715
- <devtools-report-key>${i18nString(UIStrings.updatedSessionConfig)}</devtools-report-key>
716
- <devtools-report-value>${i18nString(UIStrings.yes)}</devtools-report-value>
713
+ ${
714
+ renderKeyValue(
715
+ i18nString(UIStrings.fetchResult), fetchResultToString(selectedEvent.creationEventDetails.fetchResult),
716
+ 'dbsc-creation-fetch-result')}
717
+ ${
718
+ selectedEvent.creationEventDetails.newSession &&
719
+ html`
720
+ ${
721
+ renderKeyValue(
722
+ i18nString(UIStrings.updatedSessionConfig), i18nString(UIStrings.yes),
723
+ 'dbsc-creation-updated-session-config')}
717
724
  `}
718
725
  `;
719
726
  const refreshEventDetails =
720
727
  selectedEvent?.refreshEventDetails &&
721
728
  html`
722
- <devtools-report-key>${i18nString(UIStrings.refreshResult)}</devtools-report-key>
723
- <devtools-report-value>${
724
- refreshResultToString(selectedEvent.refreshEventDetails.refreshResult)}</devtools-report-value>
725
- <devtools-report-key>${i18nString(UIStrings.causedAnyRequestDeferrals)}</devtools-report-key>
726
- <devtools-report-value>${
727
- boolToString(!selectedEvent.refreshEventDetails.wasFullyProactiveRefresh)}</devtools-report-value>
729
+ ${
730
+ renderKeyValue(
731
+ i18nString(UIStrings.refreshResult),
732
+ refreshResultToString(selectedEvent.refreshEventDetails.refreshResult), 'dbsc-refresh-result')}
733
+ ${
734
+ renderKeyValue(
735
+ i18nString(UIStrings.causedAnyRequestDeferrals),
736
+ boolToString(!selectedEvent.refreshEventDetails.wasFullyProactiveRefresh),
737
+ 'dbsc-refresh-was-fully-proactive-refresh')}
728
738
  ${
729
739
  selectedEvent.refreshEventDetails.fetchResult &&
730
740
  html`
731
- <devtools-report-key>${i18nString(UIStrings.fetchResult)}</devtools-report-key>
732
- <devtools-report-value>${
733
- fetchResultToString(selectedEvent.refreshEventDetails.fetchResult)}</devtools-report-value>
741
+ ${
742
+ renderKeyValue(
743
+ i18nString(UIStrings.fetchResult), fetchResultToString(selectedEvent.refreshEventDetails.fetchResult),
744
+ 'dbsc-refresh-fetch-result')}
734
745
  `}
735
- ${selectedEvent.refreshEventDetails.newSession && html`
736
- <devtools-report-key>${i18nString(UIStrings.updatedSessionConfig)}</devtools-report-key>
737
- <devtools-report-value>${i18nString(UIStrings.yes)}</devtools-report-value>
746
+ ${
747
+ selectedEvent.refreshEventDetails.newSession &&
748
+ html`
749
+ ${
750
+ renderKeyValue(
751
+ i18nString(UIStrings.updatedSessionConfig), i18nString(UIStrings.yes),
752
+ 'dbsc-refresh-updated-session-config')}
738
753
  `}
739
754
  `;
740
755
  const challengeEventDetails =
741
756
  selectedEvent?.challengeEventDetails &&
742
757
  html`
743
- <devtools-report-key>${i18nString(UIStrings.challengeResult)}</devtools-report-key>
744
- <devtools-report-value>${
745
- challengeResultToString(selectedEvent.challengeEventDetails.challengeResult)}</devtools-report-value>
746
- <devtools-report-key>${i18nString(UIStrings.challenge)}</devtools-report-key>
747
- <devtools-report-value>${selectedEvent.challengeEventDetails.challenge}</devtools-report-value>
758
+ ${
759
+ renderKeyValue(
760
+ i18nString(UIStrings.challengeResult),
761
+ challengeResultToString(selectedEvent.challengeEventDetails.challengeResult), 'dbsc-challenge-result')}
762
+ ${
763
+ renderKeyValue(
764
+ i18nString(UIStrings.challenge), selectedEvent.challengeEventDetails.challenge, 'dbsc-challenge')}
748
765
  `;
749
766
  const terminationEventDetails =
750
767
  selectedEvent?.terminationEventDetails &&
751
768
  html`
752
- <devtools-report-key>${i18nString(UIStrings.deletionReason)}</devtools-report-key>
753
- <devtools-report-value>${
754
- deletionReasonToString(selectedEvent.terminationEventDetails.deletionReason)}</devtools-report-value>
769
+ ${
770
+ renderKeyValue(
771
+ i18nString(UIStrings.deletionReason),
772
+ deletionReasonToString(selectedEvent.terminationEventDetails.deletionReason), 'dbsc-termination-reason')}
755
773
  `;
756
774
  const eventDetailsContentHtml = selectedEvent ?
757
775
  html`
758
776
  <devtools-report>
759
- <devtools-report-key>${i18nString(UIStrings.keySite)}</devtools-report-key>
760
- <devtools-report-value>${selectedEvent.site}</devtools-report-value>
761
- <devtools-report-key>${i18nString(UIStrings.sessionId)}</devtools-report-key>
762
- <devtools-report-value>${selectedEvent.sessionId}</devtools-report-value>
763
- <devtools-report-key>${i18nString(UIStrings.type)}</devtools-report-key>
764
- <devtools-report-value>${getEventTypeString(selectedEvent)}</devtools-report-value>
765
- <devtools-report-key>${i18nString(UIStrings.eventResult)}</devtools-report-key>
766
- <devtools-report-value>${succeededToString(selectedEvent.succeeded)}</devtools-report-value>
777
+ ${renderKeyValue(i18nString(UIStrings.keySite), selectedEvent.site, 'dbsc-event-site')}
778
+ ${
779
+ selectedEvent.sessionId &&
780
+ renderKeyValue(i18nString(UIStrings.sessionId), selectedEvent.sessionId, 'dbsc-event-session-id')}
781
+ ${renderKeyValue(i18nString(UIStrings.type), getEventTypeString(selectedEvent), 'dbsc-event-type')}
782
+ ${
783
+ renderKeyValue(
784
+ i18nString(UIStrings.eventResult), succeededToString(selectedEvent.succeeded), 'dbsc-event-result')}
767
785
  ${creationEventDetails}
768
786
  ${refreshEventDetails}
769
787
  ${challengeEventDetails}
@@ -870,6 +888,13 @@ export class DeviceBoundSessionsView extends UI.Widget.VBox {
870
888
  }
871
889
  }
872
890
 
891
+ function renderKeyValue(key: string, value: string, id: string): TemplateResult {
892
+ return html`
893
+ <devtools-report-key id=${id}>${key}</devtools-report-key>
894
+ <devtools-report-value role="text" aria-describedby=${id}>${value}</devtools-report-value>
895
+ `;
896
+ }
897
+
873
898
  function ruleTypeToString(ruleType: Protocol.Network.DeviceBoundSessionUrlRuleRuleType): string {
874
899
  switch (ruleType) {
875
900
  case Protocol.Network.DeviceBoundSessionUrlRuleRuleType.Exclude:
@@ -180,7 +180,6 @@ export class ServiceWorkerUpdateCycleView {
180
180
  const tr = this.tableElement.createChild('tr', 'service-worker-update-timeline');
181
181
  tr.setAttribute('jslog', `${VisualLogging.treeItem('update-timeline').track({
182
182
  click: true,
183
- resize: true,
184
183
  keydown: 'ArrowLeft|ArrowRight|ArrowUp|ArrowDown|Enter|Space',
185
184
  })}`);
186
185
  this.rows.push(tr);
@@ -353,7 +353,7 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
353
353
  }
354
354
  const rows = [html`<div>${i18nString(UIStrings.framesPerIssue, {n: frames.length})}</div>`];
355
355
  rows.push(...frames.map(url => html`<div class="text-ellipsis" title=${url}
356
- jslog=${VisualLogging.treeItem().track({resize: true})}>${url}</div>`));
356
+ jslog=${VisualLogging.treeItem()}>${url}</div>`));
357
357
  return html`
358
358
  <div class="details-list"
359
359
  jslog=${VisualLogging.tree('frames-per-issue')}>
@@ -361,9 +361,7 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
361
361
  rows,
362
362
  title: i18nString(UIStrings.framesPerIssue, {n: frames.length}),
363
363
  } as ExpandableList.ExpandableList.ExpandableListData}
364
- jslog=${VisualLogging.treeItem().track({
365
- resize: true
366
- })}></devtools-expandable-list>
364
+ jslog=${VisualLogging.treeItem()}></devtools-expandable-list>
367
365
  </div>
368
366
  `;
369
367
  }
@@ -144,7 +144,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
144
144
  // clang-format off
145
145
  return html`
146
146
  <span class=${spanClasses}
147
- jslog=${VisualLogging.item('matched-address-item').track({hover: true, resize: true})}
147
+ jslog=${VisualLogging.item('matched-address-item').track({hover: true})}
148
148
  @mouseenter=${() => input.onHighlightMatchesInAddress(startIndex)}
149
149
  @mouseleave=${input.onClearHighlightedMatches}>
150
150
  ${templateLines}
@@ -238,7 +238,6 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
238
238
  listItemElement.setAttribute('jslog', `${VisualLogging.item().track({
239
239
  click: true,
240
240
  dblclick: true,
241
- resize: true,
242
241
  keydown: 'ArrowUp|ArrowDown|PageUp|PageDown|Enter|Space',
243
242
  })}`);
244
243
  return listItemElement;
@@ -77,6 +77,8 @@ export const DEFAULT_VIEW: View = (input, _output, target): void => {
77
77
  <div class="title">Gemini 3 Flash in DevTools</div>
78
78
  <div class="close-button">
79
79
  <devtools-button
80
+ aria-hidden="true"
81
+ tabindex="-1"
80
82
  .iconName=${'cross'}
81
83
  .variant=${Buttons.Button.Variant.ICON}
82
84
  .size=${Buttons.Button.Size.REGULAR}
@@ -1457,7 +1457,6 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
1457
1457
  this.elementInternal.className = 'console-message-wrapper';
1458
1458
  this.elementInternal.setAttribute('jslog', `${VisualLogging.item('console-message').track({
1459
1459
  click: true,
1460
- resize: true,
1461
1460
  keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End',
1462
1461
  })}`);
1463
1462
  this.elementInternal.removeChildren();
@@ -86,6 +86,11 @@
86
86
  height: 25px;
87
87
  border-radius: 3px;
88
88
  margin-right: 16px;
89
+
90
+ &:focus-visible {
91
+ outline: 2px solid var(--sys-color-state-focus-ring);
92
+ outline-offset: 2px;
93
+ }
89
94
  }
90
95
 
91
96
  .block-title {
@@ -680,7 +680,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
680
680
  this.listItemElement.setAttribute(
681
681
  'jslog', `${VisualLogging.treeItem().parent('elementsTreeOutline').track({
682
682
  keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Backspace|Delete|Enter|Space|Home|End',
683
- resize: true,
684
683
  drag: true,
685
684
  click: true,
686
685
  })}`);
@@ -228,27 +228,26 @@ const DEFAULT_VIEW: View = (input, output, target) => {
228
228
  event.preventDefault();
229
229
  }
230
230
  };
231
- // clang-format off
232
231
  const renderElement = (element: LayoutElement): Lit.LitTemplate => html`<div
233
232
  class="element"
234
- jslog=${VisualLogging.item().track({resize: true})}>
233
+ jslog=${VisualLogging.item()}>
235
234
  <devtools-checkbox
236
235
  data-element="true"
237
236
  class="checkbox-label"
238
237
  .checked=${element.enabled}
239
238
  @change=${(e: Event) => input.onElementToggle(element, e)}
240
- jslog=${VisualLogging.toggle().track({click: true, resize: true })}>
239
+ jslog=${VisualLogging.toggle().track({
240
+ click: true
241
+ })}>
241
242
  <span
242
243
  class="node-text-container"
243
244
  data-label="true"
244
245
  @mouseenter=${(e: MouseEvent) => input.onMouseEnter(element, e)}
245
246
  @mouseleave=${(e: MouseEvent) => input.onMouseLeave(element, e)}>
246
247
  <devtools-node-text .data=${{
247
- nodeId: element.domId,
248
- nodeTitle: element.name,
249
- nodeClasses: element.domClasses
250
- }}>
251
- </devtools-node-text>
248
+ nodeId: element.domId, nodeTitle: element.name, nodeClasses: element.domClasses,
249
+ }
250
+ }></devtools-node-text>
252
251
  </span>
253
252
  </devtools-checkbox>
254
253
  <label
@@ -303,7 +303,7 @@ export class ElementsBreadcrumbs extends HTMLElement {
303
303
  data-crumb="true"
304
304
  >
305
305
  <a href="#" draggable=false class="crumb-link"
306
- jslog=${VisualLogging.item().track({click:true, resize:true})}
306
+ jslog=${VisualLogging.item().track({click:true})}
307
307
  @click=${this.#onCrumbClick(crumb.node)}
308
308
  @mousemove=${this.#onCrumbMouseMove(crumb.node)}
309
309
  @mouseleave=${this.#onCrumbMouseLeave(crumb.node)}
@@ -194,8 +194,7 @@ export class StylePropertyEditor extends HTMLElement {
194
194
  return html`
195
195
  <button title=${title}
196
196
  class=${classes}
197
- jslog=${
198
- VisualLogging.item().track({click: true, resize: true}).context(`${propertyName}-${propertyValue}`)}
197
+ jslog=${VisualLogging.item().track({click: true}).context(`${propertyName}-${propertyValue}`)}
199
198
  @click=${() => this.#onButtonClick(propertyName, propertyValue, selected)}>
200
199
  <devtools-icon style=${transform} name=${iconInfo.iconName}>
201
200
  </devtools-icon>
@@ -197,7 +197,7 @@ export class LighthouseReportRenderer {
197
197
  continue;
198
198
  }
199
199
 
200
- auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`).track({resize: true})}`);
200
+ auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`)}`);
201
201
 
202
202
  let state: string|undefined;
203
203
  for (const className of auditEl.classList) {
@@ -60,7 +60,7 @@ function renderEndiannessSetting(
60
60
  data-endianness="true" @change=${(e: Event) => onEndiannessChanged((e.target as HTMLSelectElement).value as Endianness)}>
61
61
  ${[Endianness.LITTLE, Endianness.BIG].map(endianness => {
62
62
  return html`<option value=${endianness} .selected=${currentEndiannes === endianness}
63
- jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true, resize: true})}>${
63
+ jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true})}>${
64
64
  i18n.i18n.lockedString(endianness)}</option>`;
65
65
  })}
66
66
  </select>
@@ -104,7 +104,7 @@ export const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target:
104
104
  ${VALUE_TYPE_MODE_LIST.filter(x => isValidMode(type, x)).map(mode => {
105
105
  return html`
106
106
  <option value=${mode} .selected=${input.valueTypeModes.get(type) === mode}
107
- jslog=${VisualLogging.item(mode).track({click: true, resize: true})}>${
107
+ jslog=${VisualLogging.item(mode).track({click: true})}>${
108
108
  i18n.i18n.lockedString(mode)}
109
109
  </option>`;
110
110
  })}
@@ -73,7 +73,7 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
73
73
  })}
74
74
  @click=${() => input.onPlayerClick(player.playerID)}
75
75
  @contextmenu=${(e: Event) => input.onPlayerContextMenu(player.playerID, e)}
76
- jslog=${VisualLogging.item('player').track({click: true, resize: true})}>
76
+ jslog=${VisualLogging.item('player').track({click: true})}>
77
77
  <div class="player-entry-status-icon vbox">
78
78
  <div class="player-entry-status-icon-centering">
79
79
  <devtools-icon name=${player.iconName}></devtools-icon>
@@ -409,8 +409,7 @@ export class NetworkLogViewColumns {
409
409
 
410
410
  private createWaterfallHeader(): void {
411
411
  this.waterfallHeaderElement = this.waterfallColumn.contentElement.createChild('div', 'network-waterfall-header');
412
- this.waterfallHeaderElement.setAttribute(
413
- 'jslog', `${VisualLogging.tableHeader('waterfall').track({click: true, resize: true})}`);
412
+ this.waterfallHeaderElement.setAttribute('jslog', `${VisualLogging.tableHeader('waterfall').track({click: true})}`);
414
413
  this.waterfallHeaderElement.addEventListener('click', waterfallHeaderClicked.bind(this));
415
414
  this.waterfallHeaderElement.addEventListener('contextmenu', event => {
416
415
  const contextMenu = new UI.ContextMenu.ContextMenu(event);
@@ -59,7 +59,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
59
59
  ${headers.map(header => html`
60
60
  <devtools-header-section-row
61
61
  .data=${{ header }}
62
- jslog=${VisualLogging.item('request-header').track({resize: true})}
62
+ jslog=${VisualLogging.item('request-header')}
63
63
  ></devtools-header-section-row>
64
64
  `)}
65
65
  `, target);
@@ -990,7 +990,7 @@ function renderTargetSelectorRow(input: ViewInput): Lit.TemplateResult|undefined
990
990
  jslog=${VisualLogging.dropDown('target-selector').track({change: true})}
991
991
  @change=${input.onTargetSelected}>
992
992
  ${input.targets.map(target => html`
993
- <option jslog=${VisualLogging.item('target').track({click: true, resize: true})}
993
+ <option jslog=${VisualLogging.item('target').track({click: true})}
994
994
  value=${target.id()} ?selected=${target.id() === input.targetId}>
995
995
  ${target.name()} (${target.inspectedURL()})
996
996
  </option>`)}
@@ -140,7 +140,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
140
140
  @keydown=${(event: Event) => onKeyDown(recording.storageName, event)}
141
141
  @click=${(event: Event) => onOpenClick(recording.storageName, event)}
142
142
  jslog=${VisualLogging.item()
143
- .track({ click: true, resize: true })
143
+ .track({ click: true })
144
144
  .context('recording')}>
145
145
  <div class="icon">
146
146
  <devtools-icon name="flow">
@@ -140,6 +140,14 @@ const UIStrings = {
140
140
  * @description The title of the button that open current recording in Performance panel.
141
141
  */
142
142
  performancePanel: 'Performance panel',
143
+ /**
144
+ * @description The announcement when the code sidebar is opened.
145
+ */
146
+ codeSidebarOpened: 'Code sidebar opened',
147
+ /**
148
+ * @description The announcement when the code sidebar is closed.
149
+ */
150
+ codeSidebarClosed: 'Code sidebar closed'
143
151
  } as const;
144
152
  const str_ = i18n.i18n.registerUIStrings(
145
153
  'panels/recorder/components/RecordingView.ts',
@@ -1189,6 +1197,13 @@ export class RecordingView extends UI.Widget.Widget {
1189
1197
 
1190
1198
  showCodeToggle = (): void => {
1191
1199
  this.#showCodeView = !this.#showCodeView;
1200
+
1201
+ if (this.#showCodeView) {
1202
+ UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.codeSidebarOpened));
1203
+ } else {
1204
+ UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.codeSidebarClosed));
1205
+ }
1206
+
1192
1207
  void this.#convertToCode();
1193
1208
  };
1194
1209
 
@@ -646,7 +646,7 @@ export class StepEditor extends LitElement {
646
646
  #renderTypeRow(editable: boolean): Lit.TemplateResult {
647
647
  this.#renderedAttributes.add('type');
648
648
  // clang-format off
649
- return html`<div class="row attribute" data-attribute="type" jslog=${VisualLogging.treeItem('type').track({resize: true})}>
649
+ return html`<div class="row attribute" data-attribute="type" jslog=${VisualLogging.treeItem('type')}>
650
650
  <div id="type">type<span class="separator">:</span></div>
651
651
  <devtools-suggestion-input
652
652
  aria-labelledby="type"
@@ -667,7 +667,7 @@ export class StepEditor extends LitElement {
667
667
  return;
668
668
  }
669
669
  // clang-format off
670
- return html`<div class="row attribute" data-attribute=${attribute} jslog=${VisualLogging.treeItem(Platform.StringUtilities.toKebabCase(attribute)).track({resize: true})}>
670
+ return html`<div class="row attribute" data-attribute=${attribute} jslog=${VisualLogging.treeItem(Platform.StringUtilities.toKebabCase(attribute))}>
671
671
  <div id=${attribute}>${attribute}<span class="separator">:</span></div>
672
672
  <devtools-suggestion-input
673
673
  .disabled=${this.disabled}
@@ -706,7 +706,7 @@ export class StepEditor extends LitElement {
706
706
  }
707
707
  // clang-format off
708
708
  return html`
709
- <div class="attribute" data-attribute="frame" jslog=${VisualLogging.treeItem('frame').track({resize: true})}>
709
+ <div class="attribute" data-attribute="frame" jslog=${VisualLogging.treeItem('frame')}>
710
710
  <div class="row">
711
711
  <div id="frame">frame<span class="separator">:</span></div>
712
712
  ${this.#renderDeleteButton('frame')}
@@ -344,8 +344,7 @@ export class ShortcutListItem {
344
344
  this.settingsTab = settingsTab;
345
345
  this.item = item;
346
346
  this.element = document.createElement('div');
347
- this.element.setAttribute(
348
- 'jslog', `${VisualLogging.item().context(item.id()).track({keydown: 'Escape', resize: true})}`);
347
+ this.element.setAttribute('jslog', `${VisualLogging.item().context(item.id()).track({keydown: 'Escape'})}`);
349
348
  this.editedShortcuts = new Map();
350
349
  this.shortcutInputs = new Map();
351
350
  this.shortcuts = UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction(item.id());
@@ -166,3 +166,60 @@ button.text-button {
166
166
  min-height: fit-content;
167
167
  margin-top: 10px;
168
168
  }
169
+
170
+ @media (forced-colors: active) {
171
+ /* Keyboard focus on wrapper element (shortcut items) */
172
+ .keybinds-list-item-wrapper {
173
+ &:focus,
174
+ &:focus-visible {
175
+ background-color: Highlight !important; /* stylelint-disable-line declaration-no-important */
176
+ forced-color-adjust: none;
177
+
178
+ & .keybinds-list-text,
179
+ & .keybinds-action-name {
180
+ color: HighlightText !important; /* stylelint-disable-line declaration-no-important */
181
+ }
182
+
183
+ & .keybinds-key {
184
+ background: HighlightText;
185
+ color: Highlight;
186
+ }
187
+ }
188
+
189
+ /* Hover state (shortcut items) */
190
+ &:has(.keybinds-list-item:hover) {
191
+ background-color: Highlight !important; /* stylelint-disable-line declaration-no-important */
192
+ forced-color-adjust: none;
193
+
194
+ & .keybinds-list-text {
195
+ color: HighlightText !important; /* stylelint-disable-line declaration-no-important */
196
+ }
197
+
198
+ & .keybinds-key {
199
+ background: HighlightText;
200
+ color: Highlight;
201
+ }
202
+ }
203
+ }
204
+
205
+ /* Editing state */
206
+ .keybinds-list-item.keybinds-editing {
207
+ background-color: Highlight !important; /* stylelint-disable-line declaration-no-important */
208
+ forced-color-adjust: none;
209
+
210
+ & .keybinds-list-text {
211
+ color: HighlightText !important; /* stylelint-disable-line declaration-no-important */
212
+ }
213
+ }
214
+
215
+ /* Category headers (e.g., "Background Services", "Debugger") */
216
+ .keybinds-category-header {
217
+ &:hover,
218
+ &:focus,
219
+ &:focus-visible {
220
+ background-color: Highlight !important; /* stylelint-disable-line declaration-no-important */
221
+ color: HighlightText !important; /* stylelint-disable-line declaration-no-important */
222
+ forced-color-adjust: none;
223
+ }
224
+ }
225
+ }