@codingame/monaco-vscode-api 1.80.0-next.6 → 1.80.1-next.0

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 (32) hide show
  1. package/README.md +3 -1
  2. package/dist/api.js +6 -6
  3. package/dist/default-extensions/npm/npmBrowserMain.js.map +1 -1
  4. package/dist/default-extensions/typescript-language-features/tsserver.web.js.map +1 -1
  5. package/dist/monaco.js +4 -0
  6. package/dist/service-override/keybindings.js +1 -0
  7. package/dist/service-override/snippets.js +1 -0
  8. package/dist/service-override/views.js +1 -0
  9. package/dist/vscode/vs/platform/audioCues/browser/media/all.mp3.js +17 -17
  10. package/dist/vscode/vs/workbench/common/theme.js +5 -5
  11. package/dist/vscode/vs/workbench/contrib/codeActions/browser/codeActions.contribution.js +25 -0
  12. package/dist/vscode/vs/workbench/contrib/codeActions/browser/codeActionsContribution.js +138 -0
  13. package/dist/vscode/vs/workbench/contrib/codeActions/browser/documentationContribution.js +59 -0
  14. package/dist/vscode/vs/workbench/contrib/codeActions/common/codeActionsExtensionPoint.js +61 -0
  15. package/dist/vscode/vs/workbench/contrib/codeActions/common/documentationExtensionPoint.js +58 -0
  16. package/dist/vscode/vs/workbench/contrib/folding/browser/folding.contribution.js +84 -0
  17. package/dist/vscode/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.js +172 -0
  18. package/dist/vscode/vs/workbench/contrib/keybindings/browser/keybindings.contribution.js +24 -0
  19. package/dist/vscode/vs/workbench/contrib/languageStatus/browser/languageStatus.contribution.js +360 -0
  20. package/dist/vscode/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css.js +4 -0
  21. package/dist/vscode/vs/workbench/contrib/list/browser/list.contribution.js +15 -0
  22. package/dist/vscode/vs/workbench/contrib/snippets/browser/commands/abstractSnippetsActions.js +20 -0
  23. package/dist/vscode/vs/workbench/contrib/snippets/browser/commands/configureSnippets.js +264 -0
  24. package/dist/vscode/vs/workbench/contrib/snippets/browser/commands/fileTemplateSnippets.js +87 -0
  25. package/dist/vscode/vs/workbench/contrib/snippets/browser/commands/insertSnippet.js +126 -0
  26. package/dist/vscode/vs/workbench/contrib/snippets/browser/commands/surroundWithSnippet.js +56 -0
  27. package/dist/vscode/vs/workbench/contrib/snippets/browser/snippetCodeActionProvider.js +133 -0
  28. package/dist/vscode/vs/workbench/contrib/snippets/browser/snippetPicker.js +83 -0
  29. package/dist/vscode/vs/workbench/contrib/snippets/browser/snippets.contribution.js +113 -0
  30. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalService.js +3 -2
  31. package/monaco-editor-treemending.patch +551 -551
  32. package/package.json +1 -1
@@ -0,0 +1,172 @@
1
+ import { __decorate, __param } from '../../../../../../node_modules/tslib/tslib.es6.js';
2
+ import * as dom from 'monaco-editor/esm/vs/base/browser/dom.js';
3
+ import { CancellationTokenSource } from 'monaco-editor/esm/vs/base/common/cancellation.js';
4
+ import { DisposableStore } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
5
+ import { EditorAction2, registerEditorContribution } from 'monaco-editor/esm/vs/editor/browser/editorExtensions.js';
6
+ import { EditorContextKeys } from 'monaco-editor/esm/vs/editor/common/editorContextKeys.js';
7
+ import { asCommandLink } from 'monaco-editor/esm/vs/editor/contrib/inlayHints/browser/inlayHints.js';
8
+ import { InlayHintsController } from 'monaco-editor/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js';
9
+ import { localize } from 'monaco-editor/esm/vs/nls.js';
10
+ import { registerAction2 } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
11
+ import { AudioCue, IAudioCueService } from 'monaco-editor/esm/vs/platform/audioCues/browser/audioCueService.js';
12
+ import { RawContextKey, IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
13
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
14
+ import { Link } from 'monaco-editor/esm/vs/platform/opener/browser/link.js';
15
+ let InlayHintsAccessibility = class InlayHintsAccessibility {
16
+ static get(editor) {
17
+ return editor.getContribution(InlayHintsAccessibility.ID) ?? undefined;
18
+ }
19
+ constructor(_editor, contextKeyService, _audioCueService, _instaService) {
20
+ this._editor = _editor;
21
+ this._audioCueService = _audioCueService;
22
+ this._instaService = _instaService;
23
+ this._sessionDispoosables = ( new DisposableStore());
24
+ this._ariaElement = document.createElement('span');
25
+ this._ariaElement.style.position = 'fixed';
26
+ this._ariaElement.className = 'inlayhint-accessibility-element';
27
+ this._ariaElement.tabIndex = 0;
28
+ this._ariaElement.setAttribute('aria-description', ( localize('description', "Code with Inlay Hint Information")));
29
+ this._ctxIsReading = InlayHintsAccessibility.IsReading.bindTo(contextKeyService);
30
+ }
31
+ dispose() {
32
+ this._sessionDispoosables.dispose();
33
+ this._ctxIsReading.reset();
34
+ this._ariaElement.remove();
35
+ }
36
+ _reset() {
37
+ dom.clearNode(this._ariaElement);
38
+ this._sessionDispoosables.clear();
39
+ this._ctxIsReading.reset();
40
+ }
41
+ async _read(line, hints) {
42
+ this._sessionDispoosables.clear();
43
+ if (!this._ariaElement.isConnected) {
44
+ this._editor.getDomNode()?.appendChild(this._ariaElement);
45
+ }
46
+ if (!this._editor.hasModel() || !this._ariaElement.isConnected) {
47
+ this._ctxIsReading.set(false);
48
+ return;
49
+ }
50
+ const cts = ( new CancellationTokenSource());
51
+ this._sessionDispoosables.add(cts);
52
+ for (const hint of hints) {
53
+ await hint.resolve(cts.token);
54
+ }
55
+ if (cts.token.isCancellationRequested) {
56
+ return;
57
+ }
58
+ const model = this._editor.getModel();
59
+ const newChildren = [];
60
+ let start = 0;
61
+ let tooLongToRead = false;
62
+ for (const item of hints) {
63
+ const part = model.getValueInRange({ startLineNumber: line, startColumn: start + 1, endLineNumber: line, endColumn: item.hint.position.column });
64
+ if (part.length > 0) {
65
+ newChildren.push(part);
66
+ start = item.hint.position.column - 1;
67
+ }
68
+ if (start > 750) {
69
+ newChildren.push('…');
70
+ tooLongToRead = true;
71
+ break;
72
+ }
73
+ const em = document.createElement('em');
74
+ const { label } = item.hint;
75
+ if (typeof label === 'string') {
76
+ em.innerText = label;
77
+ }
78
+ else {
79
+ for (const part of label) {
80
+ if (part.command) {
81
+ const link = this._instaService.createInstance(Link, em, { href: asCommandLink(part.command), label: part.label, title: part.command.title }, undefined);
82
+ this._sessionDispoosables.add(link);
83
+ }
84
+ else {
85
+ em.innerText += part.label;
86
+ }
87
+ }
88
+ }
89
+ newChildren.push(em);
90
+ }
91
+ if (!tooLongToRead) {
92
+ newChildren.push(model.getValueInRange({ startLineNumber: line, startColumn: start + 1, endLineNumber: line, endColumn: Number.MAX_SAFE_INTEGER }));
93
+ }
94
+ dom.reset(this._ariaElement, ...newChildren);
95
+ this._ariaElement.focus();
96
+ this._ctxIsReading.set(true);
97
+ this._sessionDispoosables.add(dom.addDisposableListener(this._ariaElement, 'focusout', () => {
98
+ this._reset();
99
+ }));
100
+ }
101
+ startInlayHintsReading() {
102
+ if (!this._editor.hasModel()) {
103
+ return;
104
+ }
105
+ const line = this._editor.getPosition().lineNumber;
106
+ const hints = InlayHintsController.get(this._editor)?.getInlayHintsForLine(line);
107
+ if (!hints || hints.length === 0) {
108
+ this._audioCueService.playAudioCue(AudioCue.noInlayHints);
109
+ }
110
+ else {
111
+ this._read(line, hints);
112
+ }
113
+ }
114
+ stopInlayHintsReading() {
115
+ this._reset();
116
+ this._editor.focus();
117
+ }
118
+ };
119
+ InlayHintsAccessibility.IsReading = ( new RawContextKey(
120
+ 'isReadingLineWithInlayHints',
121
+ false,
122
+ { type: 'boolean', description: ( localize(
123
+ 'isReadingLineWithInlayHints',
124
+ "Whether the current line and its inlay hints are currently focused"
125
+ )) }
126
+ ));
127
+ InlayHintsAccessibility.ID = 'editor.contrib.InlayHintsAccessibility';
128
+ InlayHintsAccessibility = ( __decorate([
129
+ ( __param(1, IContextKeyService)),
130
+ ( __param(2, IAudioCueService)),
131
+ ( __param(3, IInstantiationService))
132
+ ], InlayHintsAccessibility));
133
+ registerAction2(class StartReadHints extends EditorAction2 {
134
+ constructor() {
135
+ super({
136
+ id: 'inlayHints.startReadingLineWithHint',
137
+ title: {
138
+ value: ( localize('read.title', 'Read Line With Inline Hints')),
139
+ original: 'Read Line With Inline Hints'
140
+ },
141
+ precondition: EditorContextKeys.hasInlayHintsProvider,
142
+ f1: true
143
+ });
144
+ }
145
+ runEditorCommand(_accessor, editor) {
146
+ const ctrl = InlayHintsAccessibility.get(editor);
147
+ ctrl?.startInlayHintsReading();
148
+ }
149
+ });
150
+ registerAction2(class StopReadHints extends EditorAction2 {
151
+ constructor() {
152
+ super({
153
+ id: 'inlayHints.stopReadingLineWithHint',
154
+ title: {
155
+ value: ( localize('stop.title', 'Stop Inlay Hints Reading')),
156
+ original: 'Stop Inlay Hints Reading'
157
+ },
158
+ precondition: InlayHintsAccessibility.IsReading,
159
+ f1: true,
160
+ keybinding: {
161
+ weight: 100 ,
162
+ primary: 9
163
+ }
164
+ });
165
+ }
166
+ runEditorCommand(_accessor, editor) {
167
+ const ctrl = InlayHintsAccessibility.get(editor);
168
+ ctrl?.stopInlayHintsReading();
169
+ }
170
+ });
171
+ registerEditorContribution(InlayHintsAccessibility.ID, InlayHintsAccessibility, 4 );
172
+ export { InlayHintsAccessibility };
@@ -0,0 +1,24 @@
1
+ import * as nls from 'monaco-editor/esm/vs/nls.js';
2
+ import { registerAction2, Action2 } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
3
+ import { IKeybindingService } from 'monaco-editor/esm/vs/platform/keybinding/common/keybinding.js';
4
+ import { Categories } from 'monaco-editor/esm/vs/platform/action/common/actionCommonCategories.js';
5
+ import { ICommandService } from 'monaco-editor/esm/vs/platform/commands/common/commands.js';
6
+ import { showWindowLogActionId } from '../../../services/log/common/logConstants.js';
7
+ class ToggleKeybindingsLogAction extends Action2 {
8
+ constructor() {
9
+ super({
10
+ id: 'workbench.action.toggleKeybindingsLog',
11
+ title: { value: ( nls.localize('toggleKeybindingsLog', "Toggle Keyboard Shortcuts Troubleshooting")), original: 'Toggle Keyboard Shortcuts Troubleshooting' },
12
+ category: Categories.Developer,
13
+ f1: true
14
+ });
15
+ }
16
+ run(accessor) {
17
+ const logging = accessor.get(IKeybindingService).toggleLogging();
18
+ if (logging) {
19
+ const commandService = accessor.get(ICommandService);
20
+ commandService.executeCommand(showWindowLogActionId);
21
+ }
22
+ }
23
+ }
24
+ registerAction2(ToggleKeybindingsLogAction);
@@ -0,0 +1,360 @@
1
+ import { __decorate, __param } from '../../../../../../node_modules/tslib/tslib.es6.js';
2
+ import './media/languageStatus.css.js';
3
+ import * as dom from 'monaco-editor/esm/vs/base/browser/dom.js';
4
+ import { renderLabelWithIcons } from 'monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabels.js';
5
+ import { DisposableStore, dispose, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
6
+ import Severity from 'monaco-editor/esm/vs/base/common/severity.js';
7
+ import { getCodeEditor } from 'monaco-editor/esm/vs/editor/browser/editorBrowser.js';
8
+ import { localize } from 'monaco-editor/esm/vs/nls.js';
9
+ import { Registry } from 'monaco-editor/esm/vs/platform/registry/common/platform.js';
10
+ import { themeColorFromId } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
11
+ import { ThemeIcon } from 'monaco-editor/esm/vs/base/common/themables.js';
12
+ import { Extensions } from '../../../common/contributions.js';
13
+ import { STATUS_BAR_WARNING_ITEM_FOREGROUND, STATUS_BAR_WARNING_ITEM_BACKGROUND, STATUS_BAR_ERROR_ITEM_FOREGROUND, STATUS_BAR_ERROR_ITEM_BACKGROUND } from '../../../common/theme.js';
14
+ import { IEditorService } from '../../../services/editor/common/editorService.js';
15
+ import { ILanguageStatusService } from '../../../services/languageStatus/common/languageStatusService.js';
16
+ import { ShowTooltipCommand, IStatusbarService } from '../../../services/statusbar/browser/statusbar.js';
17
+ import { parseLinkedText } from 'monaco-editor/esm/vs/base/common/linkedText.js';
18
+ import { Link } from 'monaco-editor/esm/vs/platform/opener/browser/link.js';
19
+ import { IOpenerService } from 'monaco-editor/esm/vs/platform/opener/common/opener.js';
20
+ import { MarkdownString } from 'monaco-editor/esm/vs/base/common/htmlContent.js';
21
+ import { ActionBar } from 'monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.js';
22
+ import { Action } from 'monaco-editor/esm/vs/base/common/actions.js';
23
+ import { Codicon } from 'monaco-editor/esm/vs/base/common/codicons.js';
24
+ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
25
+ import { equals } from 'monaco-editor/esm/vs/base/common/arrays.js';
26
+ import { URI } from 'monaco-editor/esm/vs/base/common/uri.js';
27
+ import { registerAction2, Action2 } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
28
+ import { Categories } from 'monaco-editor/esm/vs/platform/action/common/actionCommonCategories.js';
29
+ class LanguageStatusViewModel {
30
+ constructor(combined, dedicated) {
31
+ this.combined = combined;
32
+ this.dedicated = dedicated;
33
+ }
34
+ isEqual(other) {
35
+ return equals(this.combined, other.combined) && equals(this.dedicated, other.dedicated);
36
+ }
37
+ }
38
+ let StoredCounter = class StoredCounter {
39
+ constructor(_storageService, _key) {
40
+ this._storageService = _storageService;
41
+ this._key = _key;
42
+ }
43
+ get value() {
44
+ return this._storageService.getNumber(this._key, 0 , 0);
45
+ }
46
+ increment() {
47
+ const n = this.value + 1;
48
+ this._storageService.store(this._key, n, 0 , 1 );
49
+ return n;
50
+ }
51
+ };
52
+ StoredCounter = ( __decorate([
53
+ ( __param(0, IStorageService))
54
+ ], StoredCounter));
55
+ let EditorStatusContribution = class EditorStatusContribution {
56
+ constructor(_languageStatusService, _statusBarService, _editorService, _openerService, _storageService) {
57
+ this._languageStatusService = _languageStatusService;
58
+ this._statusBarService = _statusBarService;
59
+ this._editorService = _editorService;
60
+ this._openerService = _openerService;
61
+ this._storageService = _storageService;
62
+ this._disposables = ( new DisposableStore());
63
+ this._dedicated = ( new Set());
64
+ this._dedicatedEntries = ( new Map());
65
+ this._renderDisposables = ( new DisposableStore());
66
+ _storageService.onDidChangeValue(this._handleStorageChange, this, this._disposables);
67
+ this._restoreState();
68
+ this._interactionCounter = ( new StoredCounter(_storageService, 'languageStatus.interactCount'));
69
+ _languageStatusService.onDidChange(this._update, this, this._disposables);
70
+ _editorService.onDidActiveEditorChange(this._update, this, this._disposables);
71
+ this._update();
72
+ _statusBarService.onDidChangeEntryVisibility(e => {
73
+ if (!e.visible && ( this._dedicated.has(e.id))) {
74
+ this._dedicated.delete(e.id);
75
+ this._update();
76
+ this._storeState();
77
+ }
78
+ }, this._disposables);
79
+ }
80
+ dispose() {
81
+ this._disposables.dispose();
82
+ this._combinedEntry?.dispose();
83
+ dispose(( this._dedicatedEntries.values()));
84
+ this._renderDisposables.dispose();
85
+ }
86
+ _handleStorageChange(e) {
87
+ if (e.key !== EditorStatusContribution._keyDedicatedItems) {
88
+ return;
89
+ }
90
+ this._restoreState();
91
+ this._update();
92
+ }
93
+ _restoreState() {
94
+ const raw = this._storageService.get(EditorStatusContribution._keyDedicatedItems, 0 , '[]');
95
+ try {
96
+ const ids = JSON.parse(raw);
97
+ this._dedicated = ( new Set(ids));
98
+ }
99
+ catch {
100
+ this._dedicated.clear();
101
+ }
102
+ }
103
+ _storeState() {
104
+ if (this._dedicated.size === 0) {
105
+ this._storageService.remove(EditorStatusContribution._keyDedicatedItems, 0 );
106
+ }
107
+ else {
108
+ const raw = JSON.stringify(Array.from(( this._dedicated.keys())));
109
+ this._storageService.store(EditorStatusContribution._keyDedicatedItems, raw, 0 , 0 );
110
+ }
111
+ }
112
+ _createViewModel(editor) {
113
+ if (!editor?.hasModel()) {
114
+ return ( new LanguageStatusViewModel([], []));
115
+ }
116
+ const all = this._languageStatusService.getLanguageStatus(editor.getModel());
117
+ const combined = [];
118
+ const dedicated = [];
119
+ for (const item of all) {
120
+ if (( this._dedicated.has(item.id))) {
121
+ dedicated.push(item);
122
+ }
123
+ combined.push(item);
124
+ }
125
+ return ( new LanguageStatusViewModel(combined, dedicated));
126
+ }
127
+ _update() {
128
+ const editor = getCodeEditor(this._editorService.activeTextEditorControl);
129
+ const model = this._createViewModel(editor);
130
+ if (this._model?.isEqual(model)) {
131
+ return;
132
+ }
133
+ this._renderDisposables.clear();
134
+ this._model = model;
135
+ editor?.onDidChangeModelLanguage(this._update, this, this._renderDisposables);
136
+ if (model.combined.length === 0) {
137
+ this._combinedEntry?.dispose();
138
+ this._combinedEntry = undefined;
139
+ }
140
+ else {
141
+ const [first] = model.combined;
142
+ const showSeverity = first.severity >= Severity.Warning;
143
+ const text = EditorStatusContribution._severityToComboCodicon(first.severity);
144
+ let isOneBusy = false;
145
+ const ariaLabels = [];
146
+ const element = document.createElement('div');
147
+ for (const status of model.combined) {
148
+ const isPinned = model.dedicated.includes(status);
149
+ element.appendChild(this._renderStatus(status, showSeverity, isPinned, this._renderDisposables));
150
+ ariaLabels.push(this._asAriaLabel(status));
151
+ isOneBusy = isOneBusy || (!isPinned && status.busy);
152
+ }
153
+ const props = {
154
+ name: ( localize('langStatus.name', "Editor Language Status")),
155
+ ariaLabel: ( localize(
156
+ 'langStatus.aria',
157
+ "Editor Language Status: {0}",
158
+ ariaLabels.join(', next: ')
159
+ )),
160
+ tooltip: element,
161
+ command: ShowTooltipCommand,
162
+ text: isOneBusy ? `${text}\u00A0\u00A0$(sync~spin)` : text,
163
+ };
164
+ if (!this._combinedEntry) {
165
+ this._combinedEntry = this._statusBarService.addEntry(props, EditorStatusContribution._id, 1 , { id: 'status.editor.mode', alignment: 0 , compact: true });
166
+ }
167
+ else {
168
+ this._combinedEntry.update(props);
169
+ }
170
+ const userHasInteractedWithStatus = this._interactionCounter.value >= 3;
171
+ const node = document.querySelector('.monaco-workbench .statusbar DIV#status\\.languageStatus A>SPAN.codicon');
172
+ const container = document.querySelector('.monaco-workbench .statusbar DIV#status\\.languageStatus');
173
+ if (node instanceof HTMLElement && container) {
174
+ const _wiggle = 'wiggle';
175
+ const _flash = 'flash';
176
+ if (!isOneBusy) {
177
+ node.classList.toggle(_wiggle, showSeverity || !userHasInteractedWithStatus);
178
+ this._renderDisposables.add(dom.addDisposableListener(node, 'animationend', _e => node.classList.remove(_wiggle)));
179
+ container.classList.toggle(_flash, showSeverity);
180
+ this._renderDisposables.add(dom.addDisposableListener(container, 'animationend', _e => container.classList.remove(_flash)));
181
+ }
182
+ else {
183
+ node.classList.remove(_wiggle);
184
+ container.classList.remove(_flash);
185
+ }
186
+ }
187
+ if (!userHasInteractedWithStatus) {
188
+ const hoverTarget = document.querySelector('.monaco-workbench .context-view');
189
+ if (hoverTarget instanceof HTMLElement) {
190
+ const observer = ( new MutationObserver(() => {
191
+ if (document.contains(element)) {
192
+ this._interactionCounter.increment();
193
+ observer.disconnect();
194
+ }
195
+ }));
196
+ observer.observe(hoverTarget, { childList: true, subtree: true });
197
+ this._renderDisposables.add(toDisposable(() => observer.disconnect()));
198
+ }
199
+ }
200
+ }
201
+ const newDedicatedEntries = ( new Map());
202
+ for (const status of model.dedicated) {
203
+ const props = EditorStatusContribution._asStatusbarEntry(status);
204
+ let entry = this._dedicatedEntries.get(status.id);
205
+ if (!entry) {
206
+ entry = this._statusBarService.addEntry(props, status.id, 1 , { id: 'status.editor.mode', alignment: 1 });
207
+ }
208
+ else {
209
+ entry.update(props);
210
+ this._dedicatedEntries.delete(status.id);
211
+ }
212
+ newDedicatedEntries.set(status.id, entry);
213
+ }
214
+ dispose(( this._dedicatedEntries.values()));
215
+ this._dedicatedEntries = newDedicatedEntries;
216
+ }
217
+ _renderStatus(status, showSeverity, isPinned, store) {
218
+ const parent = document.createElement('div');
219
+ parent.classList.add('hover-language-status');
220
+ const severity = document.createElement('div');
221
+ severity.classList.add('severity', `sev${status.severity}`);
222
+ severity.classList.toggle('show', showSeverity);
223
+ const severityText = EditorStatusContribution._severityToSingleCodicon(status.severity);
224
+ dom.append(severity, ...renderLabelWithIcons(severityText));
225
+ parent.appendChild(severity);
226
+ const element = document.createElement('div');
227
+ element.classList.add('element');
228
+ parent.appendChild(element);
229
+ const left = document.createElement('div');
230
+ left.classList.add('left');
231
+ element.appendChild(left);
232
+ const label = document.createElement('span');
233
+ label.classList.add('label');
234
+ dom.append(label, ...renderLabelWithIcons(status.busy ? `$(sync~spin)\u00A0\u00A0${status.label}` : status.label));
235
+ left.appendChild(label);
236
+ const detail = document.createElement('span');
237
+ detail.classList.add('detail');
238
+ this._renderTextPlus(detail, status.detail, store);
239
+ left.appendChild(detail);
240
+ const right = document.createElement('div');
241
+ right.classList.add('right');
242
+ element.appendChild(right);
243
+ const { command } = status;
244
+ if (command) {
245
+ store.add(( new Link(right, {
246
+ label: command.title,
247
+ title: command.tooltip,
248
+ href: ( ( URI.from({
249
+ scheme: 'command', path: command.id, query: command.arguments && JSON.stringify(command.arguments)
250
+ })).toString())
251
+ }, undefined, this._openerService)));
252
+ }
253
+ const actionBar = ( new ActionBar(right, {}));
254
+ store.add(actionBar);
255
+ let action;
256
+ if (!isPinned) {
257
+ action = ( new Action('pin', ( localize('pin', "Add to Status Bar")), ThemeIcon.asClassName(Codicon.pin), true, () => {
258
+ this._dedicated.add(status.id);
259
+ this._statusBarService.updateEntryVisibility(status.id, true);
260
+ this._update();
261
+ this._storeState();
262
+ }));
263
+ }
264
+ else {
265
+ action = ( new Action('unpin', ( localize('unpin', "Remove from Status Bar")), ThemeIcon.asClassName(Codicon.pinned), true, () => {
266
+ this._dedicated.delete(status.id);
267
+ this._statusBarService.updateEntryVisibility(status.id, false);
268
+ this._update();
269
+ this._storeState();
270
+ }));
271
+ }
272
+ actionBar.push(action, { icon: true, label: false });
273
+ store.add(action);
274
+ return parent;
275
+ }
276
+ static _severityToComboCodicon(sev) {
277
+ switch (sev) {
278
+ case Severity.Error: return '$(bracket-error)';
279
+ case Severity.Warning: return '$(bracket-dot)';
280
+ default: return '$(bracket)';
281
+ }
282
+ }
283
+ static _severityToSingleCodicon(sev) {
284
+ switch (sev) {
285
+ case Severity.Error: return '$(error)';
286
+ case Severity.Warning: return '$(info)';
287
+ default: return '$(check)';
288
+ }
289
+ }
290
+ _renderTextPlus(target, text, store) {
291
+ for (const node of parseLinkedText(text).nodes) {
292
+ if (typeof node === 'string') {
293
+ const parts = renderLabelWithIcons(node);
294
+ dom.append(target, ...parts);
295
+ }
296
+ else {
297
+ store.add(( new Link(target, node, undefined, this._openerService)));
298
+ }
299
+ }
300
+ }
301
+ _asAriaLabel(status) {
302
+ if (status.accessibilityInfo) {
303
+ return status.accessibilityInfo.label;
304
+ }
305
+ else if (status.detail) {
306
+ return ( localize('aria.1', '{0}, {1}', status.label, status.detail));
307
+ }
308
+ else {
309
+ return ( localize('aria.2', '{0}', status.label));
310
+ }
311
+ }
312
+ static _asStatusbarEntry(item) {
313
+ let color;
314
+ let backgroundColor;
315
+ if (item.severity === Severity.Warning) {
316
+ color = themeColorFromId(STATUS_BAR_WARNING_ITEM_FOREGROUND);
317
+ backgroundColor = themeColorFromId(STATUS_BAR_WARNING_ITEM_BACKGROUND);
318
+ }
319
+ else if (item.severity === Severity.Error) {
320
+ color = themeColorFromId(STATUS_BAR_ERROR_ITEM_FOREGROUND);
321
+ backgroundColor = themeColorFromId(STATUS_BAR_ERROR_ITEM_BACKGROUND);
322
+ }
323
+ return {
324
+ name: ( localize('name.pattern', '{0} (Language Status)', item.name)),
325
+ text: item.busy ? `${item.label}\u00A0\u00A0$(sync~spin)` : item.label,
326
+ ariaLabel: item.accessibilityInfo?.label ?? item.label,
327
+ role: item.accessibilityInfo?.role,
328
+ tooltip: item.command?.tooltip || ( new MarkdownString(item.detail, { isTrusted: true, supportThemeIcons: true })),
329
+ color,
330
+ backgroundColor,
331
+ command: item.command
332
+ };
333
+ }
334
+ };
335
+ EditorStatusContribution._id = 'status.languageStatus';
336
+ EditorStatusContribution._keyDedicatedItems = 'languageStatus.dedicated';
337
+ EditorStatusContribution = ( __decorate([
338
+ ( __param(0, ILanguageStatusService)),
339
+ ( __param(1, IStatusbarService)),
340
+ ( __param(2, IEditorService)),
341
+ ( __param(3, IOpenerService)),
342
+ ( __param(4, IStorageService))
343
+ ], EditorStatusContribution));
344
+ ( Registry.as(Extensions.Workbench)).registerWorkbenchContribution(EditorStatusContribution, 3 );
345
+ registerAction2(class extends Action2 {
346
+ constructor() {
347
+ super({
348
+ id: 'editor.inlayHints.Reset',
349
+ title: {
350
+ value: ( localize('reset', 'Reset Language Status Interaction Counter')),
351
+ original: 'Reset Language Status Interaction Counter'
352
+ },
353
+ category: Categories.View,
354
+ f1: true
355
+ });
356
+ }
357
+ run(accessor) {
358
+ accessor.get(IStorageService).remove('languageStatus.interactCount', 0 );
359
+ }
360
+ });
@@ -0,0 +1,4 @@
1
+ import n from '../../../../../../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';
2
+ var css = "@keyframes wiggle{0%{transform:rotate(0) scale(1)}15%,45%{transform:rotate(.04turn) scale(1.1)}30%,60%{transform:rotate(-.04turn) scale(1.2)}to{transform:rotate(0) scale(1)}}.monaco-workbench .statusbar DIV#status\\.languageStatus A>SPAN.codicon.wiggle{animation-duration:.8s;animation-iteration-count:1;animation-name:wiggle}@keyframes flash{0%{background-color:initial}50%{background-color:var(--vscode-statusBarItem-prominentBackground)}to{background-color:initial}}.monaco-workbench .statusbar DIV#status\\.languageStatus.flash A{animation-duration:.8s;animation-iteration-count:1;animation-name:flash}.monaco-workbench .hover-language-status{display:flex;padding:4px 8px}.monaco-workbench .hover-language-status:not(:last-child){border-bottom:1px solid var(--vscode-notifications-border)}.monaco-workbench .hover-language-status>.severity{display:none;flex:1;margin:auto;padding-right:8px}.monaco-workbench .hover-language-status>.severity.sev3{color:var(--vscode-notificationsErrorIcon-foreground)}.monaco-workbench .hover-language-status>.severity.sev2{color:var(--vscode-notificationsInfoIcon-foreground)}.monaco-workbench .hover-language-status>.severity.show{display:inherit}.monaco-workbench .hover-language-status>.element{display:flex;flex-grow:100;justify-content:space-between;vertical-align:middle}.monaco-workbench .hover-language-status>.element>.left>.detail:not(:empty):before{content:\"\\2013\";opacity:.6;padding:0 4px}.monaco-workbench .hover-language-status>.element>.left>.label:empty{display:none}.monaco-workbench .hover-language-status>.element .left{margin:auto 0}.monaco-workbench .hover-language-status>.element .right{display:flex;margin:auto 0}.monaco-workbench .hover-language-status>.element .right:not(:empty){padding-left:16px}.monaco-workbench .hover-language-status>.element .right .monaco-link{margin:auto 0;white-space:nowrap}.monaco-workbench .hover-language-status>.element .right .monaco-action-bar:not(:first-child){padding-left:8px}";
3
+ n(css,{});
4
+ export { css, css as default };
@@ -0,0 +1,15 @@
1
+ import { __decorate, __param } from '../../../../../../node_modules/tslib/tslib.es6.js';
2
+ import { IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
3
+ import { Registry } from 'monaco-editor/esm/vs/platform/registry/common/platform.js';
4
+ import { Extensions } from '../../../common/contributions.js';
5
+ let ListContext = class ListContext {
6
+ constructor(contextKeyService) {
7
+ contextKeyService.createKey('listSupportsTypeNavigation', true);
8
+ contextKeyService.createKey('listSupportsKeyboardNavigation', true);
9
+ }
10
+ };
11
+ ListContext = ( __decorate([
12
+ ( __param(0, IContextKeyService))
13
+ ], ListContext));
14
+ ( Registry.as(Extensions.Workbench)).registerWorkbenchContribution(ListContext, 1 );
15
+ export { ListContext };
@@ -0,0 +1,20 @@
1
+ import { EditorAction2 } from 'monaco-editor/esm/vs/editor/browser/editorExtensions.js';
2
+ import { localize } from 'monaco-editor/esm/vs/nls.js';
3
+ import { Action2 } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
4
+ const defaultOptions = {
5
+ category: {
6
+ value: ( localize('snippets', 'Snippets')),
7
+ original: 'Snippets'
8
+ },
9
+ };
10
+ class SnippetsAction extends Action2 {
11
+ constructor(desc) {
12
+ super({ ...defaultOptions, ...desc });
13
+ }
14
+ }
15
+ class SnippetEditorAction extends EditorAction2 {
16
+ constructor(desc) {
17
+ super({ ...defaultOptions, ...desc });
18
+ }
19
+ }
20
+ export { SnippetEditorAction, SnippetsAction };