Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.ts
13401 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 { reset } from '../../../../base/browser/dom.js';
7
import { Codicon } from '../../../../base/common/codicons.js';
8
import { MarkdownString } from '../../../../base/common/htmlContent.js';
9
import { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js';
10
import { IObservable, autorun } from '../../../../base/common/observable.js';
11
import { localize } from '../../../../nls.js';
12
import { IMarkdownRendererService } from '../../../../platform/markdown/browser/markdownRenderer.js';
13
import { ContributionEnablementState } from '../common/enablement.js';
14
15
/**
16
* A small reusable widget that renders an enablement status message inside
17
* a `.status` container, matching the style used by the extension and MCP
18
* server editors. The message is shown only when the contribution is
19
* disabled and is rendered as markdown with a theme icon prefix.
20
*/
21
export class EnablementStatusWidget extends Disposable {
22
23
private readonly _renderDisposables = this._register(new MutableDisposable());
24
25
constructor(
26
private readonly _container: HTMLElement,
27
enablement: IObservable<ContributionEnablementState>,
28
private readonly _labels: {
29
disabledProfile: string;
30
disabledWorkspace: string;
31
},
32
@IMarkdownRendererService private readonly _markdownRendererService: IMarkdownRendererService,
33
) {
34
super();
35
this._register(autorun(reader => {
36
this._render(enablement.read(reader));
37
}));
38
}
39
40
private _render(state: ContributionEnablementState): void {
41
reset(this._container);
42
this._renderDisposables.value = undefined;
43
44
let message: string | undefined;
45
if (state === ContributionEnablementState.DisabledProfile) {
46
message = this._labels.disabledProfile;
47
} else if (state === ContributionEnablementState.DisabledWorkspace) {
48
message = this._labels.disabledWorkspace;
49
}
50
51
if (!message) {
52
return;
53
}
54
55
const markdown = new MarkdownString('', { isTrusted: true, supportThemeIcons: true });
56
markdown.appendMarkdown(`$(${Codicon.info.id})&nbsp;`);
57
markdown.appendText(message);
58
const rendered = this._markdownRendererService.render(markdown);
59
this._renderDisposables.value = rendered;
60
this._container.appendChild(rendered.element);
61
}
62
}
63
64
/** Default labels for plugin enablement status. */
65
export const pluginEnablementLabels = {
66
disabledProfile: localize('pluginDisabled', "This plugin is disabled."),
67
disabledWorkspace: localize('pluginDisabledWorkspace', "This plugin is disabled for this workspace."),
68
};
69
70
/** Default labels for MCP server enablement status. */
71
export const mcpServerEnablementLabels = {
72
disabledProfile: localize('mcpServerDisabled', "This MCP server is disabled."),
73
disabledWorkspace: localize('mcpServerDisabledWorkspace', "This MCP server is disabled for this workspace."),
74
};
75
76