Skip to content

Commit

Permalink
make agent hover keyboard accessible (#212933)
Browse files Browse the repository at this point in the history
  • Loading branch information
meganrogge committed May 17, 2024
1 parent 3a0bb7b commit 8517ac7
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions src/vs/workbench/contrib/chat/browser/chatListRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ import { IMarkdownVulnerability, annotateSpecialMarkdownContent } from '../commo
import { CodeBlockModelCollection } from '../common/codeBlockModelCollection';
import { IChatListItemRendererOptions } from './chat';
import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';

const $ = dom.$;

Expand Down Expand Up @@ -267,6 +269,8 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
}
const header = dom.append(rowContainer, $('.header'));
const user = dom.append(header, $('.user'));
user.tabIndex = 0;
user.role = 'toolbar';
const avatarContainer = dom.append(user, $('.avatar-container'));
const username = dom.append(user, $('h3.username'));
const detailContainer = dom.append(user, $('span.detail-container'));
Expand Down Expand Up @@ -299,16 +303,28 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
}

const agentHover = templateDisposables.add(this.instantiationService.createInstance(ChatAgentHover));

templateDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), header, () => {
const hoverContent = () => {
if (isResponseVM(template.currentElement) && template.currentElement.agent) {
agentHover.setAgent(template.currentElement.agent.id);
return agentHover.domNode;
}

return undefined;
}, getChatAgentHoverOptions(() => isResponseVM(template.currentElement) ? template.currentElement.agent : undefined, this.commandService)));

};
const hoverOptions = getChatAgentHoverOptions(() => isResponseVM(template.currentElement) ? template.currentElement.agent : undefined, this.commandService);
templateDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), user, hoverContent, hoverOptions));
templateDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), header, hoverContent, hoverOptions));
templateDisposables.add(dom.addDisposableListener(user, dom.EventType.KEY_DOWN, e => {
const ev = new StandardKeyboardEvent(e);
if (ev.equals(KeyCode.Space) || ev.equals(KeyCode.Enter)) {
const content = hoverContent();
if (content) {
this.hoverService.showHover({ content, target: user, trapFocus: true }, true);
}
} else if (ev.equals(KeyCode.Escape)) {
this.hoverService.hideHover();
}
}));
const template: IChatListItemTemplate = { avatarContainer, username, detail, referencesListContainer, value, rowContainer, elementDisposables, titleToolbar, templateDisposables, contextKeyService, agentHover };
return template;
}
Expand Down

0 comments on commit 8517ac7

Please sign in to comment.