chrome-devtools-frontend 1.0.1724140 → 1.0.1726686

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 (95) hide show
  1. package/.agents/skills/review-ui-widgets/SKILL.md +7 -7
  2. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +12 -0
  3. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +3 -3
  4. package/.agents/skills/ui-widgets/SKILL.md +2 -1
  5. package/docs/cookbook/dependencies.md +6 -4
  6. package/front_end/core/i18n/i18nImpl.ts +1 -1
  7. package/front_end/core/root/Runtime.ts +1 -1
  8. package/front_end/core/sdk/ResourceTreeModel.ts +16 -0
  9. package/front_end/entrypoints/js_app/js_app.ts +2 -5
  10. package/front_end/entrypoints/node_app/node_app.ts +2 -3
  11. package/front_end/generated/InspectorBackendCommands.ts +1 -1
  12. package/front_end/generated/protocol.ts +1 -0
  13. package/front_end/models/ai_assistance/skills/lighthouse.md +2 -1
  14. package/front_end/models/ai_assistance/skills/network.md +1 -0
  15. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +26 -2
  16. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +1 -1
  17. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -7
  18. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +2 -2
  19. package/front_end/models/comment_manager/CommentManager.ts +0 -6
  20. package/front_end/models/comment_manager/CommentThread.ts +23 -19
  21. package/front_end/models/elements/StyleChanges.ts +66 -0
  22. package/front_end/models/trace/EventsSerializer.ts +2 -7
  23. package/front_end/models/trace/ModelImpl.ts +0 -2
  24. package/front_end/models/trace/handlers/FlowsHandler.ts +37 -29
  25. package/front_end/models/trace/helpers/SyntheticEvents.ts +10 -37
  26. package/front_end/models/trace/insights/RenderBlocking.ts +3 -1
  27. package/front_end/models/trace/lantern/simulation/Simulator.ts +4 -0
  28. package/front_end/models/trace/lantern/types/Lantern.ts +1 -0
  29. package/front_end/panels/accessibility/SourceOrderView.ts +1 -1
  30. package/front_end/panels/application/ApplicationPanelSidebar.ts +90 -0
  31. package/front_end/panels/application/StorageView.ts +196 -174
  32. package/front_end/panels/application/SubAppsView.ts +2 -2
  33. package/front_end/panels/application/preloading/PreloadingView.ts +360 -336
  34. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
  35. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +6 -3
  36. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +17 -17
  37. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
  38. package/front_end/panels/application/preloading/preloadingView.css +12 -4
  39. package/front_end/panels/application/preloading/preloadingViewDropDown.css +1 -1
  40. package/front_end/panels/application/storageView.css +16 -21
  41. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -2
  42. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +6 -8
  43. package/front_end/panels/comments/CommentsPane.ts +26 -9
  44. package/front_end/panels/comments/commentsPane.css +25 -6
  45. package/front_end/panels/common/CommentThreadWidget.ts +2 -2
  46. package/front_end/panels/common/CommentsOverlayWidget.ts +94 -35
  47. package/front_end/panels/common/commentThreadWidget.css +17 -0
  48. package/front_end/panels/common/commentsOverlay.css +5 -10
  49. package/front_end/panels/common/common-meta.ts +11 -1
  50. package/front_end/panels/elements/ClassesPaneWidget.ts +130 -88
  51. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +7 -33
  52. package/front_end/panels/elements/DOMTreeWidget.ts +7 -3
  53. package/front_end/panels/elements/ElementStatePaneWidget.ts +11 -1
  54. package/front_end/panels/elements/PropertyRenderer.ts +3 -2
  55. package/front_end/panels/elements/StyleEditorWidget.ts +60 -41
  56. package/front_end/panels/elements/StylePropertiesSection.ts +32 -5
  57. package/front_end/panels/elements/StylePropertyTreeElement.ts +227 -162
  58. package/front_end/panels/event_listeners/EventListenersView.ts +11 -8
  59. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  60. package/front_end/panels/network/NetworkDataGridNode.ts +3 -1
  61. package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
  62. package/front_end/panels/network/RequestPayloadView.ts +12 -5
  63. package/front_end/panels/profiler/HeapProfileView.ts +28 -6
  64. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +7 -3
  65. package/front_end/panels/protocol_monitor/JSONEditor.ts +0 -1
  66. package/front_end/panels/recorder/RecorderPanel.ts +2 -2
  67. package/front_end/panels/settings/SettingsScreen.ts +1 -1
  68. package/front_end/panels/sources/NavigatorView.ts +105 -45
  69. package/front_end/panels/sources/ScopeChainSidebarPane.ts +8 -5
  70. package/front_end/panels/sources/SourcesNavigator.ts +421 -213
  71. package/front_end/panels/sources/SourcesPanel.ts +6 -4
  72. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +10 -5
  73. package/front_end/panels/sources/sources-meta.ts +4 -15
  74. package/front_end/panels/sources/sourcesNavigator.css +5 -0
  75. package/front_end/panels/timeline/ModificationsManager.ts +0 -2
  76. package/front_end/panels/timeline/README.md +2 -0
  77. package/front_end/panels/timeline/TimelineCommentController.ts +132 -30
  78. package/front_end/panels/timeline/TimelinePanel.ts +4 -0
  79. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  80. package/front_end/panels/timeline/utils/Treemap.ts +8 -0
  81. package/front_end/third_party/chromium/README.chromium +1 -1
  82. package/front_end/ui/comments/CommentAnchorResolver.ts +3 -0
  83. package/front_end/ui/comments/CommentOverlayManager.ts +2 -4
  84. package/front_end/ui/components/lists/List.ts +14 -1
  85. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  86. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +23 -14
  87. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +3 -0
  88. package/front_end/ui/legacy/Toolbar.ts +0 -1
  89. package/front_end/ui/legacy/Treeoutline.ts +7 -2
  90. package/front_end/ui/legacy/UIUtils.ts +4 -1
  91. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +19 -6
  92. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +20 -11
  93. package/front_end/ui/legacy/components/source_frame/XMLView.ts +27 -7
  94. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  95. package/package.json +1 -1
@@ -16,17 +16,22 @@ const {
16
16
  html,
17
17
  render,
18
18
  nothing,
19
- Directives: {repeat, styleMap},
19
+ Directives: {classMap, repeat, styleMap},
20
20
  } = Lit;
21
21
 
22
22
  export interface ViewInput {
23
23
  pins: Comments.CommentOverlayManager.PinPositionData[];
24
- highlights: Comments.CommentOverlayManager.HighlightRectData[];
24
+ /**
25
+ * Highlight of the currently open thread. Null when no thread is open, so
26
+ * only pins are rendered.
27
+ */
28
+ activeHighlight: Comments.CommentOverlayManager.HighlightRectData|null;
25
29
  hoverHighlight: Comments.CommentOverlayManager.HoverHighlightData|null;
26
30
  commentMode: boolean;
27
31
  onPinClick: (threadId: string) => void;
28
32
  activeThread: CommentManager.CommentManager.CommentThread|null;
29
33
  activePin: Comments.CommentOverlayManager.PinPositionData|null;
34
+ fallbackPosition?: {left: number, top: number}|null;
30
35
  title: Title;
31
36
  onAddComment: (text: string) => void;
32
37
  onDeleteQueuedComment: () => void;
@@ -46,8 +51,10 @@ const PIN_HEIGHT = 30;
46
51
  const POPUP_WIDTH = 288;
47
52
  const POPUP_HEIGHT = 220;
48
53
  const AUTO_CLOSE_DELAY_MS = 2000;
54
+ const COMMENTS_VIEW_ID = 'comments';
49
55
 
50
56
  const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target: HTMLElement): void => {
57
+ const popupPosition = input.activePin ?? input.fallbackPosition;
51
58
  // clang-format off
52
59
  render(html`
53
60
  <style>${commentsOverlayStyles}</style>
@@ -62,51 +69,54 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target: HTMLEl
62
69
  })}>
63
70
  </div>
64
71
  ` : nothing}
65
- ${repeat(
66
- input.highlights.filter(h => h.visible),
67
- h => h.id,
68
- h => html`
69
- <div
70
- class="comment-anchor-highlight"
71
- style=${styleMap({
72
- transform: `translate3d(${h.left}px, ${h.top}px, 0)`,
73
- width: `${h.width}px`,
74
- height: `${h.height}px`,
75
- })}>
76
- </div>
77
- `,
78
- )}
72
+ ${input.activeHighlight?.visible && input.activeThread ? html`
73
+ <div
74
+ class=${classMap({
75
+ 'comment-anchor-highlight': true,
76
+ resolved: input.activeThread.status === 'RESOLVED',
77
+ })}
78
+ style=${styleMap({
79
+ transform: `translate3d(${input.activeHighlight.left}px, ${input.activeHighlight.top}px, 0)`,
80
+ width: `${input.activeHighlight.width}px`,
81
+ height: `${input.activeHighlight.height}px`,
82
+ })}>
83
+ </div>
84
+ ` : nothing}
79
85
  ${repeat(
80
86
  input.pins.filter(p => p.visible),
81
87
  p => p.id,
82
88
  p => html`
83
89
  <div
84
90
  class="comment-pin"
91
+ aria-hidden="true"
85
92
  style=${styleMap({
86
93
  transform: `translate3d(${p.left}px, ${p.top}px, 0)`,
87
94
  })}
88
95
  @click=${() => input.onPinClick(p.id)}>
89
- <div class="comment-cursor">${p.index}</div>
96
+ <div class="comment-cursor"></div>
90
97
  </div>
91
98
  `,
92
99
  )}
93
- ${input.activePin && input.activeThread ? repeat(
94
- [{pin: input.activePin, thread: input.activeThread}],
100
+ ${popupPosition && input.activeThread ? repeat(
101
+ [{position: popupPosition, thread: input.activeThread}],
95
102
  item => item.thread.id,
96
103
  item => {
97
- const popupTop = Math.min(
98
- Math.max(POPUP_MARGIN, item.pin.top + PIN_HEIGHT),
99
- Math.max(POPUP_MARGIN, target.clientHeight - POPUP_HEIGHT),
100
- );
104
+ // Clamp horizontal position so the popup stays within the viewport with POPUP_MARGIN padding.
101
105
  const popupLeft = Math.min(
102
- Math.max(POPUP_MARGIN, item.pin.left),
106
+ Math.max(POPUP_MARGIN, item.position.left),
103
107
  Math.max(POPUP_MARGIN, target.clientWidth - POPUP_WIDTH - POPUP_MARGIN),
104
108
  );
109
+ // When anchored to a pin (`activePin`), place the popup below the pin (`top + PIN_HEIGHT`).
110
+ // When unanchored (`fallbackPosition` from a drawer row), place the anchor point just above
111
+ // the row (`top - POPUP_MARGIN`) and shift the popup up by its own height via `translateY(-100%)`.
112
+ const topOffset = input.activePin ? item.position.top + PIN_HEIGHT : item.position.top - POPUP_MARGIN;
113
+ const maxTop = target.clientHeight - (input.activePin ? POPUP_HEIGHT : POPUP_MARGIN);
114
+ const popupTop = Math.min(Math.max(POPUP_MARGIN, topOffset), Math.max(POPUP_MARGIN, maxTop));
105
115
  return html`
106
116
  <div
107
117
  class="comment-popup-widget"
108
118
  style=${styleMap({
109
- transform: `translate3d(${popupLeft}px, ${popupTop}px, 0)`,
119
+ transform: `translate3d(${popupLeft}px, ${popupTop}px, 0)${input.activePin ? '' : ' translateY(-100%)'}`,
110
120
  })}>
111
121
  ${UI.Widget.widget(CommentThreadWidget, {
112
122
  title: input.title,
@@ -127,6 +137,13 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target: HTMLEl
127
137
  // clang-format on
128
138
  };
129
139
 
140
+ function isEventInsidePopupOrPin(event: Event): boolean {
141
+ const composedTarget = event.composedPath()[0];
142
+ const target = composedTarget instanceof Element ? composedTarget : event.target;
143
+ return target instanceof Element &&
144
+ Boolean(Comments.CommentAnchorResolver.closestAcrossShadow(target, '.comment-popup-widget, .comment-pin'));
145
+ }
146
+
130
147
  export class CommentsOverlayWidget extends UI.Widget.Widget {
131
148
  static override readonly INJECT: readonly[typeof CommentManager.CommentManager.CommentManager] =
132
149
  [CommentManager.CommentManager.CommentManager] as const;
@@ -135,18 +152,22 @@ export class CommentsOverlayWidget extends UI.Widget.Widget {
135
152
  readonly #commentManager: CommentManager.CommentManager.CommentManager;
136
153
  #commentOverlayManager: Comments.CommentOverlayManager.CommentOverlayManager;
137
154
  #activeThreadId: string|null = null;
155
+ #fallbackPosition: {left: number, top: number}|null = null;
138
156
  #closeTimeoutId: number|null = null;
139
157
  #cachedTitle: Title = {text: ''};
140
158
  #cachedTitleAnchor: CommentManager.CommentManager.CommentAnchorSignature|null = null;
141
159
 
142
160
  #setActiveThreadId(threadId: string|null): void {
161
+ this.#fallbackPosition = null;
143
162
  if (this.#activeThreadId !== threadId) {
144
163
  this.#clearCloseTimeout();
145
164
  this.#activeThreadId = threadId;
146
165
  if (threadId && this.isShowing()) {
147
166
  document.documentElement.addEventListener('keydown', this.#onKeyDown);
167
+ document.documentElement.addEventListener('click', this.#onClickOutside, {capture: true});
148
168
  } else {
149
169
  document.documentElement.removeEventListener('keydown', this.#onKeyDown);
170
+ document.documentElement.removeEventListener('click', this.#onClickOutside, {capture: true});
150
171
  }
151
172
  }
152
173
  }
@@ -199,6 +220,7 @@ export class CommentsOverlayWidget extends UI.Widget.Widget {
199
220
  );
200
221
  if (this.#activeThreadId) {
201
222
  document.documentElement.addEventListener('keydown', this.#onKeyDown);
223
+ document.documentElement.addEventListener('click', this.#onClickOutside, {capture: true});
202
224
  }
203
225
 
204
226
  this.requestUpdate();
@@ -207,6 +229,7 @@ export class CommentsOverlayWidget extends UI.Widget.Widget {
207
229
  override willHide(): void {
208
230
  this.#clearCloseTimeout();
209
231
  document.documentElement.removeEventListener('keydown', this.#onKeyDown);
232
+ document.documentElement.removeEventListener('click', this.#onClickOutside, {capture: true});
210
233
  this.#commentOverlayManager.stop();
211
234
  this.#commentOverlayManager.removeEventListener(
212
235
  Comments.CommentOverlayManager.Events.POSITIONS_UPDATED,
@@ -364,11 +387,18 @@ export class CommentsOverlayWidget extends UI.Widget.Widget {
364
387
  }
365
388
  };
366
389
 
390
+ #onClickOutside = (event: MouseEvent): void => {
391
+ if (!this.#activeThreadId || isEventInsidePopupOrPin(event)) {
392
+ return;
393
+ }
394
+ this.#handleCloseCommentThread();
395
+ };
396
+
367
397
  #renderDisconnectedView(): void {
368
398
  this.#view(
369
399
  {
370
400
  pins: [],
371
- highlights: [],
401
+ activeHighlight: null,
372
402
  hoverHighlight: null,
373
403
  commentMode: false,
374
404
  onPinClick: this.#handlePinClick,
@@ -391,17 +421,19 @@ export class CommentsOverlayWidget extends UI.Widget.Widget {
391
421
  title: Title,
392
422
  ): void {
393
423
  const pins = this.#commentOverlayManager.getPinPositions();
394
- const highlights = this.#commentOverlayManager.getHighlightRects();
395
424
  const activePin = this.#activeThreadId ? pins.find(p => p.id === this.#activeThreadId) ?? null : null;
425
+ const activeHighlight =
426
+ this.#activeThreadId ? this.#commentOverlayManager.getHighlight(this.#activeThreadId) ?? null : null;
396
427
 
397
428
  const viewInput: ViewInput = {
398
429
  pins,
399
- highlights,
430
+ activeHighlight,
400
431
  hoverHighlight: this.#commentOverlayManager.getHoverHighlight(),
401
432
  commentMode: this.#commentManager.isCommentMode(),
402
433
  onPinClick: this.#handlePinClick,
403
434
  activeThread,
404
435
  activePin,
436
+ fallbackPosition: this.#fallbackPosition,
405
437
  title,
406
438
  onAddComment: (text: string) => {
407
439
  if (!activeThread) {
@@ -470,10 +502,11 @@ export class CommentsOverlayWidget extends UI.Widget.Widget {
470
502
  this.#renderWithTitle(activeThread, title);
471
503
  }
472
504
 
473
- openThread(threadId: string): void {
505
+ openThread(threadId: string, fallbackPosition?: {left: number, top: number}): void {
474
506
  this.#clearCloseTimeout();
475
507
  this.#commentOverlayManager.clearDraftThreads();
476
508
  this.#setActiveThreadId(threadId);
509
+ this.#fallbackPosition = fallbackPosition ?? null;
477
510
  this.requestUpdate();
478
511
  }
479
512
  }
@@ -495,20 +528,21 @@ function getOrCreateOverlayWidget(
495
528
  return widgetInstance;
496
529
  }
497
530
 
498
- export class ThreadRevealer implements Common.Revealer.Revealer<CommentManager.CommentManager.CommentThread> {
499
- async reveal(thread: CommentManager.CommentManager.CommentThread): Promise<void> {
531
+ export class ThreadRevealer implements Common.Revealer.Revealer<CommentManager.CommentThread.RevealableThread> {
532
+ async reveal({thread, position}: CommentManager.CommentThread.RevealableThread): Promise<void> {
500
533
  const panelId = Comments.CommentAnchorResolver.extractPanelId(thread.anchor.vePath);
501
534
  if (panelId && UI.InspectorView.InspectorView.instance().hasPanel(panelId)) {
502
535
  await UI.InspectorView.InspectorView.instance().showPanel(panelId);
503
536
  }
504
537
 
505
538
  const element = Comments.CommentAnchorResolver.rematchCommentAnchor(thread);
539
+ thread.setOrphaned(!element);
506
540
  if (element) {
507
541
  element.scrollIntoView({block: 'center', inline: 'nearest', behavior: 'smooth'});
508
542
  }
509
543
 
510
544
  const overlay = getOrCreateOverlayWidget();
511
- overlay.openThread(thread.id);
545
+ overlay.openThread(thread.id, position);
512
546
  }
513
547
  }
514
548
 
@@ -528,14 +562,39 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
528
562
  return false;
529
563
  }
530
564
  getOrCreateOverlayWidget(this.#commentManager);
531
- this.#commentManager.setCommentMode(
532
- !this.#commentManager.isCommentMode(),
533
- );
565
+ const enteringCommentMode = !this.#commentManager.isCommentMode();
566
+ this.#commentManager.setCommentMode(enteringCommentMode);
567
+ this.#revealCommentsView(enteringCommentMode);
534
568
  return true;
535
569
  }
536
570
  return false;
537
571
  }
538
572
 
573
+ /**
574
+ * When entering comment mode with the drawer open, add the Comments tab to
575
+ * the drawer without selecting it or moving focus away from the page being
576
+ * commented on. When leaving comment mode, always open the drawer on the
577
+ * Comments tab, as checking the responses is the likely next step.
578
+ */
579
+ #revealCommentsView(enteringCommentMode: boolean): void {
580
+ const viewManager = UI.ViewManager.ViewManager.instance();
581
+ if (!viewManager.hasView(COMMENTS_VIEW_ID)) {
582
+ return;
583
+ }
584
+ if (enteringCommentMode) {
585
+ if (!UI.InspectorView.InspectorView.maybeGetInspectorViewInstance()?.drawerVisible()) {
586
+ return;
587
+ }
588
+ void viewManager.resolveLocation(viewManager.locationNameForViewId(COMMENTS_VIEW_ID)).then(location => {
589
+ return location?.showView(viewManager.view(COMMENTS_VIEW_ID), /* insertBefore */ undefined,
590
+ /* userGesture */ false,
591
+ /* omitFocus */ true, /* shouldSelectTab */ false);
592
+ });
593
+ return;
594
+ }
595
+ void viewManager.showView(COMMENTS_VIEW_ID, /* userGesture */ true);
596
+ }
597
+
539
598
  static resetForTest(): void {
540
599
  if (widgetInstance) {
541
600
  widgetInstance.detach();
@@ -68,6 +68,23 @@
68
68
  min-width: 0;
69
69
  }
70
70
 
71
+ .thread-body {
72
+ display: flex;
73
+ flex-direction: column;
74
+ gap: var(--sys-size-4);
75
+ width: 100%;
76
+ max-height: min(var(--sys-size-32), 50vh);
77
+ overflow-y: auto;
78
+ overscroll-behavior: contain;
79
+ scrollbar-width: thin;
80
+ scrollbar-color: transparent transparent;
81
+ }
82
+
83
+ .thread-body:hover,
84
+ .thread-body:focus-within {
85
+ scrollbar-color: var(--sys-color-neutral-outline) transparent;
86
+ }
87
+
71
88
  .comment-text {
72
89
  width: 100%;
73
90
  font-family: var(--default-font-family);
@@ -33,23 +33,14 @@
33
33
  }
34
34
 
35
35
  .comment-cursor {
36
- display: flex;
37
36
  width: var(--sys-size-9);
38
37
  height: var(--sys-size-9);
39
38
  box-sizing: border-box;
40
39
  padding: 0;
41
- flex-direction: column;
42
- justify-content: center;
43
- align-items: center;
44
40
  flex-shrink: 0;
45
41
  box-shadow: var(--sys-elevation-level2);
46
42
  border-radius: 100px 100px 100px var(--sys-shape-corner-extra-small, 4px);
47
43
  background: var(--sys-color-primary);
48
- color: var(--sys-color-on-primary);
49
- font-family: var(--default-font-family);
50
- font-size: var(--sys-typescale-body5-size);
51
- font-weight: var(--ref-typeface-weight-bold, 600);
52
- line-height: 1;
53
44
  transition: transform 0.1s ease;
54
45
  transform-origin: center center;
55
46
  }
@@ -59,12 +50,16 @@
59
50
  top: 0;
60
51
  left: 0;
61
52
  pointer-events: none;
62
- border: var(--sys-size-2) dashed var(--sys-color-primary);
53
+ border: var(--sys-size-2) solid var(--sys-color-primary);
63
54
  background-color: color-mix(in srgb, var(--sys-color-primary), transparent 90%);
64
55
  box-sizing: border-box;
65
56
  will-change: transform;
66
57
  }
67
58
 
59
+ .comment-anchor-highlight.resolved {
60
+ border-style: dashed;
61
+ }
62
+
68
63
  .comment-hover-highlight {
69
64
  position: absolute;
70
65
  top: 0;
@@ -64,6 +64,16 @@ UI.ActionRegistration.registerActionExtension({
64
64
  const CommonModule = await loadCommonModule();
65
65
  return new CommonModule.CommentsOverlayWidget.ActionDelegate();
66
66
  },
67
+ bindings: [
68
+ {
69
+ shortcut: 'Ctrl+Shift+K',
70
+ platform: UI.ActionRegistration.Platforms.WINDOWS_LINUX,
71
+ },
72
+ {
73
+ shortcut: 'Meta+Shift+K',
74
+ platform: UI.ActionRegistration.Platforms.MAC,
75
+ },
76
+ ],
67
77
  });
68
78
 
69
79
  UI.Toolbar.registerToolbarItem({
@@ -78,7 +88,7 @@ UI.Toolbar.registerToolbarItem({
78
88
 
79
89
  Common.Revealer.registerRevealer({
80
90
  contextTypes() {
81
- return [CommentManager.CommentManager.CommentThread];
91
+ return [CommentManager.CommentThread.RevealableThread];
82
92
  },
83
93
  async loadRevealer() {
84
94
  const CommonModule = await loadCommonModule();