Skip to content

Commit b85658c

Browse files
Copilotbhavyaus
andauthored
Make chat welcome view suggested prompts keyboard accessible (microsoft#256749)
* Make chat welcome view suggested prompts keyboard accessible Co-authored-by: bhavyaus <[email protected]> * Enhance keyboard accessibility for suggested prompts in chat welcome view --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: bhavyaus <[email protected]> Co-authored-by: bhavyaus <[email protected]>
1 parent 244448e commit b85658c

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewWelcomeController.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Button } from '../../../../../base/browser/ui/button/button.js';
88
import { renderIcon } from '../../../../../base/browser/ui/iconLabel/iconLabels.js';
99
import { Event } from '../../../../../base/common/event.js';
1010
import { IMarkdownString } from '../../../../../base/common/htmlContent.js';
11+
import { KeyCode } from '../../../../../base/common/keyCodes.js';
1112
import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js';
1213
import { ThemeIcon } from '../../../../../base/common/themables.js';
1314
import { IMarkdownRenderResult, MarkdownRenderer } from '../../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js';
@@ -22,6 +23,7 @@ import { ChatAgentLocation } from '../../common/constants.js';
2223
import { IChatWidgetService } from '../chat.js';
2324
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
2425
import { chatViewsWelcomeRegistry, IChatViewsWelcomeDescriptor } from './chatViewsWelcome.js';
26+
import { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js';
2527

2628
const $ = dom.$;
2729

@@ -187,14 +189,17 @@ export class ChatViewWelcomePart extends Disposable {
187189
const suggestedPromptsContainer = dom.append(this.element, $('.chat-welcome-view-suggested-prompts'));
188190
for (const prompt of content.suggestedPrompts) {
189191
const promptElement = dom.append(suggestedPromptsContainer, $('.chat-welcome-view-suggested-prompt'));
192+
// Make the prompt element keyboard accessible
193+
promptElement.setAttribute('role', 'button');
194+
promptElement.setAttribute('tabindex', '0');
195+
promptElement.setAttribute('aria-label', localize('suggestedPromptAriaLabel', 'Suggested prompt: {0}', prompt.label));
190196
if (prompt.icon) {
191197
const iconElement = dom.append(promptElement, $('.chat-welcome-view-suggested-prompt-icon'));
192198
iconElement.appendChild(renderIcon(prompt.icon));
193199
}
194200
const labelElement = dom.append(promptElement, $('.chat-welcome-view-suggested-prompt-label'));
195201
labelElement.textContent = prompt.label;
196-
this._register(dom.addDisposableListener(promptElement, dom.EventType.CLICK, () => {
197-
202+
const executePrompt = () => {
198203
type SuggestedPromptClickEvent = { suggestedPrompt: string };
199204

200205
type SuggestedPromptClickData = {
@@ -215,6 +220,17 @@ export class ChatViewWelcomePart extends Disposable {
215220
} else {
216221
this.chatWidgetService.lastFocusedWidget.setInput(prompt.prompt);
217222
}
223+
};
224+
// Add click handler
225+
this._register(dom.addDisposableListener(promptElement, dom.EventType.CLICK, executePrompt));
226+
// Add keyboard handler for Enter and Space keys
227+
this._register(dom.addDisposableListener(promptElement, dom.EventType.KEY_DOWN, (e) => {
228+
const event = new StandardKeyboardEvent(e);
229+
if (event.equals(KeyCode.Enter) || event.equals(KeyCode.Space)) {
230+
e.preventDefault();
231+
e.stopPropagation();
232+
executePrompt();
233+
}
218234
}));
219235
}
220236
}

0 commit comments

Comments
 (0)