Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { InlineChatController } from './inlineChatController.js';
7
import { CTX_INLINE_CHAT_FOCUSED, CTX_INLINE_CHAT_RESPONSE_FOCUSED } from '../common/inlineChat.js';
8
import { ICodeEditorService } from '../../../../editor/browser/services/codeEditorService.js';
9
import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
10
import { AccessibleViewProviderId, AccessibleViewType, AccessibleContentProvider } from '../../../../platform/accessibility/browser/accessibleView.js';
11
import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
12
import { IAccessibleViewImplementation } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js';
13
import { MarkdownString } from '../../../../base/common/htmlContent.js';
14
import { renderAsPlaintext } from '../../../../base/browser/markdownRenderer.js';
15
import { AccessibilityVerbositySettingId } from '../../accessibility/browser/accessibilityConfiguration.js';
16
17
export class InlineChatAccessibleView implements IAccessibleViewImplementation {
18
readonly priority = 100;
19
readonly name = 'inlineChat';
20
readonly when = ContextKeyExpr.or(CTX_INLINE_CHAT_FOCUSED, CTX_INLINE_CHAT_RESPONSE_FOCUSED);
21
readonly type = AccessibleViewType.View;
22
getProvider(accessor: ServicesAccessor) {
23
const codeEditorService = accessor.get(ICodeEditorService);
24
25
const editor = (codeEditorService.getActiveCodeEditor() || codeEditorService.getFocusedCodeEditor());
26
if (!editor) {
27
return;
28
}
29
const controller = InlineChatController.get(editor);
30
if (!controller) {
31
return;
32
}
33
const responseContent = controller.widget.responseContent;
34
if (!responseContent) {
35
return;
36
}
37
return new AccessibleContentProvider(
38
AccessibleViewProviderId.InlineChat,
39
{ type: AccessibleViewType.View },
40
() => renderAsPlaintext(new MarkdownString(responseContent), { includeCodeBlocksFences: true }),
41
() => controller.focus(),
42
AccessibilityVerbositySettingId.InlineChat
43
);
44
}
45
}
46
47