@codingame/monaco-vscode-api 1.82.1 → 1.82.3

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 (37) hide show
  1. package/README.md +2 -0
  2. package/missing-services.js +17 -0
  3. package/monaco-editor-treemending.patch +551 -551
  4. package/package.json +1 -1
  5. package/service-override/quickaccess.js +1 -1
  6. package/service-override/tools/editor.d.ts +1 -1
  7. package/service-override/views.js +10 -0
  8. package/service-override/workspaceTrust.d.ts +5 -0
  9. package/service-override/workspaceTrust.js +13 -0
  10. package/services.d.ts +3 -0
  11. package/services.js +3 -0
  12. package/vscode/src/vs/base/common/htmlContent.d.ts +23 -2
  13. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementUtil.js +16 -1
  14. package/vscode/src/vs/platform/opener/browser/link.d.ts +8 -0
  15. package/vscode/src/vs/platform/workspace/common/workspaceTrust.d.ts +34 -1
  16. package/vscode/src/vs/workbench/browser/parts/banner/bannerPart.js +228 -0
  17. package/vscode/src/vs/workbench/browser/parts/banner/media/bannerpart.css.js +4 -0
  18. package/vscode/src/vs/workbench/browser/parts/panel/panelActions.js +21 -0
  19. package/vscode/src/vs/workbench/browser/parts/titlebar/commandCenterControl.js +134 -0
  20. package/vscode/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css.js +4 -0
  21. package/vscode/src/vs/workbench/browser/parts/titlebar/titlebarPart.js +365 -0
  22. package/vscode/src/vs/workbench/browser/parts/titlebar/windowTitle.js +216 -0
  23. package/vscode/src/vs/workbench/common/contextkeys.js +2 -1
  24. package/vscode/src/vs/workbench/common/theme.js +6 -6
  25. package/vscode/src/vs/workbench/contrib/extensions/common/extensions.js +2 -1
  26. package/vscode/src/vs/workbench/contrib/preferences/browser/preferences.contribution.js +108 -4
  27. package/vscode/src/vs/workbench/contrib/workspace/browser/media/workspaceTrustEditor.css.js +4 -0
  28. package/vscode/src/vs/workbench/contrib/workspace/browser/workspace.contribution.js +842 -0
  29. package/vscode/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.js +1047 -0
  30. package/vscode/src/vs/workbench/contrib/workspace/common/workspace.js +14 -0
  31. package/vscode/src/vs/workbench/services/banner/browser/bannerService.d.ts +25 -0
  32. package/vscode/src/vs/workbench/services/banner/browser/bannerService.js +3 -0
  33. package/vscode/src/vs/workbench/services/title/common/titleService.d.ts +31 -0
  34. package/vscode/src/vs/workbench/services/title/common/titleService.js +3 -0
  35. package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfile.js +3 -1
  36. package/vscode/src/vs/workbench/services/workspaces/browser/workspaceTrustEditorInput.js +27 -0
  37. package/vscode/src/vs/workbench/services/workspaces/common/workspaceTrust.js +649 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-api",
3
- "version": "1.82.1",
3
+ "version": "1.82.3",
4
4
  "description": "VSCode public API plugged on the monaco editor",
5
5
  "keywords": [],
6
6
  "author": {
@@ -38,7 +38,7 @@ let DelegateQuickInputService = class DelegateQuickInputService {
38
38
  }
39
39
  get activeService() {
40
40
  const activeCodeEditor = StandaloneServices.get(ICodeEditorService).getFocusedCodeEditor();
41
- if (shouldUseGlobalPicker(activeCodeEditor, activeCodeEditor instanceof StandaloneCodeEditor)) {
41
+ if (activeCodeEditor == null || shouldUseGlobalPicker(activeCodeEditor, activeCodeEditor instanceof StandaloneCodeEditor)) {
42
42
  return this.workbenchQuickInputService;
43
43
  }
44
44
  this.standaloneQuickInputService ?? (this.standaloneQuickInputService = this.instantiationService.createInstance(StandaloneQuickInputService));
@@ -14,8 +14,8 @@ import { PreferredGroup } from '../../vscode/src/vs/workbench/services/editor/co
14
14
  import { IEditorResolverService } from '../../vscode/src/vs/workbench/services/editor/common/editorResolverService.js';
15
15
  import { ITextEditorService } from '../../vscode/src/vs/workbench/services/textfile/common/textEditorService.js';
16
16
  import { IHostService } from '../../vscode/src/vs/workbench/services/host/browser/host.js';
17
- import { EditorService } from '../../vscode/src/vs/workbench/services/editor/browser/editorService.js';
18
17
  import { IWorkspaceTrustRequestService } from '../../vscode/src/vs/platform/workspace/common/workspaceTrust.js';
18
+ import { EditorService } from '../../vscode/src/vs/workbench/services/editor/browser/editorService.js';
19
19
 
20
20
  type OpenEditor = (modelRef: IReference<IResolvedTextEditorModel>, options: IEditorOptions | undefined, sideBySide?: boolean) => Promise<ICodeEditor | undefined>;
21
21
  declare class MonacoEditorService extends EditorService {
@@ -84,6 +84,10 @@ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/st
84
84
  import { IThemeService } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
85
85
  export { ConfirmResult } from '../override/vs/platform/dialogs/common/dialogs.js';
86
86
  import { ILayoutService } from 'monaco-editor/esm/vs/platform/layout/browser/layoutService.js';
87
+ import { BannerPart } from '../vscode/src/vs/workbench/browser/parts/banner/bannerPart.js';
88
+ import { IBannerService } from '../vscode/src/vs/workbench/services/banner/browser/bannerService.js';
89
+ import { ITitleService } from '../vscode/src/vs/workbench/services/title/common/titleService.js';
90
+ import { TitlebarPart } from '../vscode/src/vs/workbench/browser/parts/titlebar/titlebarPart.js';
87
91
  import { MonacoEditorService, MonacoDelegateEditorGroupsService } from './tools/editor.js';
88
92
  import getServiceOverride$2 from './bulkEdit.js';
89
93
  import getServiceOverride$1 from './layout.js';
@@ -439,12 +443,16 @@ registerServiceInitializePostParticipant(async (accessor) => {
439
443
  const paneCompositePartService = accessor.get(IPaneCompositePartService);
440
444
  const viewDescriptorService = accessor.get(IViewDescriptorService);
441
445
  accessor.get(IStatusbarService);
446
+ accessor.get(IBannerService);
447
+ accessor.get(ITitleService);
442
448
  paneCompositePartService.getPaneComposites(1 );
443
449
  const layoutService = accessor.get(ILayoutService);
444
450
  const invisibleContainer = document.createElement('div');
445
451
  invisibleContainer.style.display = 'none';
446
452
  document.body.append(invisibleContainer);
447
453
  for (const { id, role, classes, options } of [
454
+ { id: "workbench.parts.titlebar" , role: 'none', classes: ['titlebar'] },
455
+ { id: "workbench.parts.banner" , role: 'banner', classes: ['banner'] },
448
456
  { id: "workbench.parts.activitybar" , role: 'none', classes: ['activitybar', 'left'] },
449
457
  { id: "workbench.parts.sidebar" , role: 'none', classes: ['sidebar', 'left'] },
450
458
  { id: "workbench.parts.editor" , role: 'main', classes: ['editor'], options: { restorePreviousState: false } },
@@ -485,6 +493,8 @@ function getServiceOverride(openEditorFallback, _webviewIframeAlternateDomains)
485
493
  [( ICodeEditorService.toString())]: new SyncDescriptor(CodeEditorService, [], true),
486
494
  [( ITextEditorService.toString())]: new SyncDescriptor(TextEditorService, [], false),
487
495
  [( IEditorGroupsService.toString())]: new SyncDescriptor(MonacoEditorPart, [], false),
496
+ [( ITitleService.toString())]: new SyncDescriptor(TitlebarPart, [], false),
497
+ [( IBannerService.toString())]: new SyncDescriptor(BannerPart, [], false),
488
498
  [( IStatusbarService.toString())]: new SyncDescriptor(StatusbarPart, [], false),
489
499
  [( IEditorDropService.toString())]: new SyncDescriptor(EditorDropService, [], true),
490
500
  [( IEditorService.toString())]: new SyncDescriptor(MonacoEditorService, [openEditorFallback, isEditorPartVisible], false),
@@ -0,0 +1,5 @@
1
+ import { IEditorOverrideServices } from '../vscode/src/vs/editor/standalone/browser/standaloneServices.js';
2
+
3
+ declare function getServiceOverride(): IEditorOverrideServices;
4
+
5
+ export { getServiceOverride as default };
@@ -0,0 +1,13 @@
1
+ import '../missing-services.js';
2
+ import { SyncDescriptor } from 'monaco-editor/esm/vs/platform/instantiation/common/descriptors.js';
3
+ import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'monaco-editor/esm/vs/platform/workspace/common/workspaceTrust.js';
4
+ import { WorkspaceTrustEnablementService, WorkspaceTrustManagementService, WorkspaceTrustRequestService } from '../vscode/src/vs/workbench/services/workspaces/common/workspaceTrust.js';
5
+ import '../vscode/src/vs/workbench/contrib/workspace/browser/workspace.contribution.js';
6
+ function getServiceOverride() {
7
+ return {
8
+ [( IWorkspaceTrustEnablementService.toString())]: new SyncDescriptor(WorkspaceTrustEnablementService),
9
+ [( IWorkspaceTrustManagementService.toString())]: new SyncDescriptor(WorkspaceTrustManagementService),
10
+ [( IWorkspaceTrustRequestService.toString())]: new SyncDescriptor(WorkspaceTrustRequestService)
11
+ };
12
+ }
13
+ export { getServiceOverride as default };
package/services.d.ts CHANGED
@@ -66,6 +66,9 @@ export { IActivityService, IBadge } from './vscode/src/vs/workbench/services/act
66
66
  export { IHoverService } from './vscode/src/vs/workbench/services/hover/browser/hover.js';
67
67
  export { IExplorerService } from './vscode/src/vs/workbench/contrib/files/browser/files.js';
68
68
  export { IStatusbarService } from './vscode/src/vs/workbench/services/statusbar/browser/statusbar.js';
69
+ export { ITitleService } from './vscode/src/vs/workbench/services/title/common/titleService.js';
70
+ export { IBannerService } from './vscode/src/vs/workbench/services/banner/browser/bannerService.js';
71
+ export { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService, IWorkspaceTrustRequestService, IWorkspaceTrustUriInfo } from './vscode/src/vs/platform/workspace/common/workspaceTrust.js';
69
72
 
70
73
  declare function initialize(overrides: IEditorOverrideServices): Promise<void>;
71
74
  declare function getService<T>(identifier: ServiceIdentifier<T>): Promise<T>;
package/services.js CHANGED
@@ -67,6 +67,9 @@ export { IActivityService } from './vscode/src/vs/workbench/services/activity/co
67
67
  export { IHoverService } from './vscode/src/vs/workbench/services/hover/browser/hover.js';
68
68
  export { IExplorerService } from './vscode/src/vs/workbench/contrib/files/browser/files.js';
69
69
  export { IStatusbarService } from './vscode/src/vs/workbench/services/statusbar/browser/statusbar.js';
70
+ export { ITitleService } from './vscode/src/vs/workbench/services/title/common/titleService.js';
71
+ export { IBannerService } from './vscode/src/vs/workbench/services/banner/browser/bannerService.js';
72
+ export { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'monaco-editor/esm/vs/platform/workspace/common/workspaceTrust.js';
70
73
  export { IDialogService, IFileDialogService } from './vscode/src/vs/platform/dialogs/common/dialogs.js';
71
74
  async function initialize(overrides) {
72
75
  const instantiationService = StandaloneServices.initialize({
@@ -1,4 +1,4 @@
1
- import { UriComponents } from './uri.js';
1
+ import { UriComponents, URI } from './uri.js';
2
2
 
3
3
  interface MarkdownStringTrustedOptions {
4
4
  readonly enabledCommands: readonly string[];
@@ -13,5 +13,26 @@ interface IMarkdownString {
13
13
  [href: string]: UriComponents;
14
14
  };
15
15
  }
16
+ declare const enum MarkdownStringTextNewlineStyle {
17
+ Paragraph = 0,
18
+ Break = 1
19
+ }
20
+ declare class MarkdownString implements IMarkdownString {
21
+ value: string;
22
+ isTrusted?: boolean | MarkdownStringTrustedOptions;
23
+ supportThemeIcons?: boolean;
24
+ supportHtml?: boolean;
25
+ baseUri?: URI;
26
+ constructor(value?: string, isTrustedOrOptions?: boolean | {
27
+ isTrusted?: boolean | MarkdownStringTrustedOptions;
28
+ supportThemeIcons?: boolean;
29
+ supportHtml?: boolean;
30
+ });
31
+ appendText(value: string, newlineStyle?: MarkdownStringTextNewlineStyle): MarkdownString;
32
+ appendMarkdown(value: string): MarkdownString;
33
+ appendCodeblock(langId: string, code: string): MarkdownString;
34
+ appendLink(target: URI | string, label: string, title?: string): MarkdownString;
35
+ private _escape;
36
+ }
16
37
 
17
- export type { IMarkdownString, MarkdownStringTrustedOptions };
38
+ export { type IMarkdownString, MarkdownString, MarkdownStringTextNewlineStyle, type MarkdownStringTrustedOptions };
@@ -18,4 +18,19 @@ function adoptToGalleryExtensionId(id) {
18
18
  function getGalleryExtensionId(publisher, name) {
19
19
  return adoptToGalleryExtensionId(getExtensionId(publisher ?? UNDEFINED_PUBLISHER, name));
20
20
  }
21
- export { adoptToGalleryExtensionId, areSameExtensions, getExtensionId, getGalleryExtensionId };
21
+ function getExtensionDependencies(installedExtensions, extension) {
22
+ const dependencies = [];
23
+ const extensions = extension.manifest.extensionDependencies?.slice(0) ?? [];
24
+ while (extensions.length) {
25
+ const id = extensions.shift();
26
+ if (id && dependencies.every(e => !areSameExtensions(e.identifier, { id }))) {
27
+ const ext = installedExtensions.filter(e => areSameExtensions(e.identifier, { id }));
28
+ if (ext.length === 1) {
29
+ dependencies.push(ext[0]);
30
+ extensions.push(...(ext[0].manifest.extensionDependencies?.slice(0) ?? []));
31
+ }
32
+ }
33
+ }
34
+ return dependencies;
35
+ }
36
+ export { adoptToGalleryExtensionId, areSameExtensions, getExtensionDependencies, getExtensionId, getGalleryExtensionId };
@@ -0,0 +1,8 @@
1
+ interface ILinkDescriptor {
2
+ readonly label: string | HTMLElement;
3
+ readonly href: string;
4
+ readonly title?: string;
5
+ readonly tabIndex?: number;
6
+ }
7
+
8
+ export type { ILinkDescriptor };
@@ -1,5 +1,6 @@
1
1
  import { ServiceIdentifier } from '../../instantiation/common/instantiation.js';
2
2
  import { Event } from '../../../base/common/event.js';
3
+ import { IDisposable } from '../../../base/common/lifecycle.js';
3
4
  import { URI } from '../../../base/common/uri.js';
4
5
 
5
6
  interface WorkspaceTrustRequestButton {
@@ -10,6 +11,31 @@ interface WorkspaceTrustRequestOptions {
10
11
  readonly buttons?: WorkspaceTrustRequestButton[];
11
12
  readonly message?: string;
12
13
  }
14
+ declare const IWorkspaceTrustEnablementService: ServiceIdentifier<IWorkspaceTrustEnablementService>;
15
+ interface IWorkspaceTrustEnablementService {
16
+ readonly _serviceBrand: undefined;
17
+ isWorkspaceTrustEnabled(): boolean;
18
+ }
19
+ declare const IWorkspaceTrustManagementService: ServiceIdentifier<IWorkspaceTrustManagementService>;
20
+ interface IWorkspaceTrustManagementService {
21
+ readonly _serviceBrand: undefined;
22
+ onDidChangeTrust: Event<boolean>;
23
+ onDidChangeTrustedFolders: Event<void>;
24
+ readonly workspaceResolved: Promise<void>;
25
+ readonly workspaceTrustInitialized: Promise<void>;
26
+ acceptsOutOfWorkspaceFiles: boolean;
27
+ isWorkspaceTrusted(): boolean;
28
+ isWorkspaceTrustForced(): boolean;
29
+ canSetParentFolderTrust(): boolean;
30
+ setParentFolderTrust(trusted: boolean): Promise<void>;
31
+ canSetWorkspaceTrust(): boolean;
32
+ setWorkspaceTrust(trusted: boolean): Promise<void>;
33
+ getUriTrustInfo(uri: URI): Promise<IWorkspaceTrustUriInfo>;
34
+ setUrisTrust(uri: URI[], trusted: boolean): Promise<void>;
35
+ getTrustedUris(): URI[];
36
+ setTrustedUris(uris: URI[]): Promise<void>;
37
+ addWorkspaceTrustTransitionParticipant(participant: IWorkspaceTrustTransitionParticipant): IDisposable;
38
+ }
13
39
  declare const enum WorkspaceTrustUriResponse {
14
40
  Open = 1,
15
41
  OpenInNewWindow = 2,
@@ -28,5 +54,12 @@ interface IWorkspaceTrustRequestService {
28
54
  requestWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Promise<boolean | undefined>;
29
55
  requestWorkspaceTrustOnStartup(): void;
30
56
  }
57
+ interface IWorkspaceTrustTransitionParticipant {
58
+ participate(trusted: boolean): Promise<void>;
59
+ }
60
+ interface IWorkspaceTrustUriInfo {
61
+ uri: URI;
62
+ trusted: boolean;
63
+ }
31
64
 
32
- export { IWorkspaceTrustRequestService, type WorkspaceTrustRequestButton, type WorkspaceTrustRequestOptions, WorkspaceTrustUriResponse };
65
+ export { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService, IWorkspaceTrustRequestService, type IWorkspaceTrustTransitionParticipant, type IWorkspaceTrustUriInfo, type WorkspaceTrustRequestButton, type WorkspaceTrustRequestOptions, WorkspaceTrustUriResponse };
@@ -0,0 +1,228 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import './media/bannerpart.css.js';
3
+ import { localize } from 'monaco-editor/esm/vs/nls.js';
4
+ import { addDisposableListener, EventType, clearNode, $, append, asCSSUrl } from 'monaco-editor/esm/vs/base/browser/dom.js';
5
+ import { ActionBar } from 'monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.js';
6
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
7
+ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
8
+ import { IThemeService } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
9
+ import { ThemeIcon } from 'monaco-editor/esm/vs/base/common/themables.js';
10
+ import { Part } from '../../part.js';
11
+ import { IWorkbenchLayoutService } from '../../../services/layout/browser/layoutService.js';
12
+ import { Action } from 'monaco-editor/esm/vs/base/common/actions.js';
13
+ import { Link } from 'monaco-editor/esm/vs/platform/opener/browser/link.js';
14
+ import { Emitter } from 'monaco-editor/esm/vs/base/common/event.js';
15
+ import { IBannerService } from '../../../services/banner/browser/bannerService.js';
16
+ import { MarkdownRenderer } from 'monaco-editor/esm/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.js';
17
+ import { Action2, registerAction2 } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
18
+ import { Categories } from 'monaco-editor/esm/vs/platform/action/common/actionCommonCategories.js';
19
+ import { KeybindingsRegistry } from 'monaco-editor/esm/vs/platform/keybinding/common/keybindingsRegistry.js';
20
+ import { IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
21
+ import { URI } from 'monaco-editor/esm/vs/base/common/uri.js';
22
+ import { widgetClose } from 'monaco-editor/esm/vs/platform/theme/common/iconRegistry.js';
23
+ import { BannerFocused } from '../../../common/contextkeys.js';
24
+ let BannerPart = class BannerPart extends Part {
25
+ get minimumHeight() {
26
+ return this.visible ? this.height : 0;
27
+ }
28
+ get maximumHeight() {
29
+ return this.visible ? this.height : 0;
30
+ }
31
+ get onDidChange() { return this._onDidChangeSize.event; }
32
+ constructor(themeService, layoutService, storageService, contextKeyService, instantiationService) {
33
+ super("workbench.parts.banner" , { hasTitle: false }, themeService, storageService, layoutService);
34
+ this.contextKeyService = contextKeyService;
35
+ this.instantiationService = instantiationService;
36
+ this.height = 26;
37
+ this.minimumWidth = 0;
38
+ this.maximumWidth = Number.POSITIVE_INFINITY;
39
+ this._onDidChangeSize = this._register(( new Emitter()));
40
+ this.visible = false;
41
+ this.focusedActionIndex = -1;
42
+ this.markdownRenderer = this.instantiationService.createInstance(MarkdownRenderer, {});
43
+ }
44
+ createContentArea(parent) {
45
+ this.element = parent;
46
+ this.element.tabIndex = 0;
47
+ this._register(addDisposableListener(this.element, EventType.FOCUS, () => {
48
+ if (this.focusedActionIndex !== -1) {
49
+ this.focusActionLink();
50
+ }
51
+ }));
52
+ const scopedContextKeyService = this.contextKeyService.createScoped(this.element);
53
+ BannerFocused.bindTo(scopedContextKeyService).set(true);
54
+ return this.element;
55
+ }
56
+ close(item) {
57
+ this.setVisibility(false);
58
+ clearNode(this.element);
59
+ if (typeof item.onClose === 'function') {
60
+ item.onClose();
61
+ }
62
+ this.item = undefined;
63
+ }
64
+ focusActionLink() {
65
+ const length = this.item?.actions?.length ?? 0;
66
+ if (this.focusedActionIndex < length) {
67
+ const actionLink = this.messageActionsContainer?.children[this.focusedActionIndex];
68
+ if (actionLink instanceof HTMLElement) {
69
+ this.actionBar?.setFocusable(false);
70
+ actionLink.focus();
71
+ }
72
+ }
73
+ else {
74
+ this.actionBar?.focus(0);
75
+ }
76
+ }
77
+ getAriaLabel(item) {
78
+ if (item.ariaLabel) {
79
+ return item.ariaLabel;
80
+ }
81
+ if (typeof item.message === 'string') {
82
+ return item.message;
83
+ }
84
+ return undefined;
85
+ }
86
+ getBannerMessage(message) {
87
+ if (typeof message === 'string') {
88
+ const element = $('span');
89
+ element.innerText = message;
90
+ return element;
91
+ }
92
+ return this.markdownRenderer.render(message).element;
93
+ }
94
+ setVisibility(visible) {
95
+ if (visible !== this.visible) {
96
+ this.visible = visible;
97
+ this.focusedActionIndex = -1;
98
+ this.layoutService.setPartHidden(!visible, "workbench.parts.banner" );
99
+ this._onDidChangeSize.fire(undefined);
100
+ }
101
+ }
102
+ focus() {
103
+ this.focusedActionIndex = -1;
104
+ this.element.focus();
105
+ }
106
+ focusNextAction() {
107
+ const length = this.item?.actions?.length ?? 0;
108
+ this.focusedActionIndex = this.focusedActionIndex < length ? this.focusedActionIndex + 1 : 0;
109
+ this.focusActionLink();
110
+ }
111
+ focusPreviousAction() {
112
+ const length = this.item?.actions?.length ?? 0;
113
+ this.focusedActionIndex = this.focusedActionIndex > 0 ? this.focusedActionIndex - 1 : length;
114
+ this.focusActionLink();
115
+ }
116
+ hide(id) {
117
+ if (this.item?.id !== id) {
118
+ return;
119
+ }
120
+ this.setVisibility(false);
121
+ }
122
+ show(item) {
123
+ if (item.id === this.item?.id) {
124
+ this.setVisibility(true);
125
+ return;
126
+ }
127
+ clearNode(this.element);
128
+ const ariaLabel = this.getAriaLabel(item);
129
+ if (ariaLabel) {
130
+ this.element.setAttribute('aria-label', ariaLabel);
131
+ }
132
+ const iconContainer = append(this.element, $('div.icon-container'));
133
+ iconContainer.setAttribute('aria-hidden', 'true');
134
+ if (ThemeIcon.isThemeIcon(item.icon)) {
135
+ iconContainer.appendChild($(`div${ThemeIcon.asCSSSelector(item.icon)}`));
136
+ }
137
+ else {
138
+ iconContainer.classList.add('custom-icon');
139
+ if (URI.isUri(item.icon)) {
140
+ iconContainer.style.backgroundImage = asCSSUrl(item.icon);
141
+ }
142
+ }
143
+ const messageContainer = append(this.element, $('div.message-container'));
144
+ messageContainer.setAttribute('aria-hidden', 'true');
145
+ messageContainer.appendChild(this.getBannerMessage(item.message));
146
+ this.messageActionsContainer = append(this.element, $('div.message-actions-container'));
147
+ if (item.actions) {
148
+ for (const action of item.actions) {
149
+ this._register(this.instantiationService.createInstance(Link, this.messageActionsContainer, { ...action, tabIndex: -1 }, {}));
150
+ }
151
+ }
152
+ const actionBarContainer = append(this.element, $('div.action-container'));
153
+ this.actionBar = this._register(( new ActionBar(actionBarContainer)));
154
+ const closeAction = this._register(( new Action(
155
+ 'banner.close',
156
+ 'Close Banner',
157
+ ThemeIcon.asClassName(widgetClose),
158
+ true,
159
+ () => this.close(item)
160
+ )));
161
+ this.actionBar.push(closeAction, { icon: true, label: false });
162
+ this.actionBar.setFocusable(false);
163
+ this.setVisibility(true);
164
+ this.item = item;
165
+ }
166
+ toJSON() {
167
+ return {
168
+ type: "workbench.parts.banner"
169
+ };
170
+ }
171
+ };
172
+ BannerPart = ( __decorate([
173
+ ( __param(0, IThemeService)),
174
+ ( __param(1, IWorkbenchLayoutService)),
175
+ ( __param(2, IStorageService)),
176
+ ( __param(3, IContextKeyService)),
177
+ ( __param(4, IInstantiationService))
178
+ ], BannerPart));
179
+ KeybindingsRegistry.registerCommandAndKeybindingRule({
180
+ id: 'workbench.banner.focusBanner',
181
+ weight: 200 ,
182
+ primary: 9 ,
183
+ when: BannerFocused,
184
+ handler: (accessor) => {
185
+ const bannerService = accessor.get(IBannerService);
186
+ bannerService.focus();
187
+ }
188
+ });
189
+ KeybindingsRegistry.registerCommandAndKeybindingRule({
190
+ id: 'workbench.banner.focusNextAction',
191
+ weight: 200 ,
192
+ primary: 17 ,
193
+ secondary: [18 ],
194
+ when: BannerFocused,
195
+ handler: (accessor) => {
196
+ const bannerService = accessor.get(IBannerService);
197
+ bannerService.focusNextAction();
198
+ }
199
+ });
200
+ KeybindingsRegistry.registerCommandAndKeybindingRule({
201
+ id: 'workbench.banner.focusPreviousAction',
202
+ weight: 200 ,
203
+ primary: 15 ,
204
+ secondary: [16 ],
205
+ when: BannerFocused,
206
+ handler: (accessor) => {
207
+ const bannerService = accessor.get(IBannerService);
208
+ bannerService.focusPreviousAction();
209
+ }
210
+ });
211
+ class FocusBannerAction extends Action2 {
212
+ static { this.ID = 'workbench.action.focusBanner'; }
213
+ static { this.LABEL = ( localize('focusBanner', "Focus Banner")); }
214
+ constructor() {
215
+ super({
216
+ id: FocusBannerAction.ID,
217
+ title: { value: FocusBannerAction.LABEL, original: 'Focus Banner' },
218
+ category: Categories.View,
219
+ f1: true
220
+ });
221
+ }
222
+ async run(accessor) {
223
+ const layoutService = accessor.get(IWorkbenchLayoutService);
224
+ layoutService.focusPart("workbench.parts.banner" );
225
+ }
226
+ }
227
+ registerAction2(FocusBannerAction);
228
+ export { BannerPart };
@@ -0,0 +1,4 @@
1
+ import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
2
+ var css = ".monaco-workbench .part.banner{background-color:var(--vscode-banner-background);box-sizing:border-box;color:var(--vscode-banner-foreground);cursor:default;display:flex;font-size:12px;height:100%;overflow:visible;width:100%}.monaco-workbench .part.banner .icon-container{align-items:center;display:flex;flex-shrink:0;padding:0 6px 0 10px}.monaco-workbench .part.banner .icon-container .codicon{color:var(--vscode-banner-iconForeground)}.monaco-workbench .part.banner .icon-container.custom-icon{background-image:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPjxwYXRoIGQ9Ik0xMDI0IDEwMjRIMFYwaDEwMjR2MTAyNHoiIHN0eWxlPSJmaWxsOiNmNmY2ZjY7ZmlsbC1vcGFjaXR5OjAiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTAyNCA4NS4zMzN2ODUzLjMzM0gwVjg1LjMzM2gxMDI0eiIgc3R5bGU9ImZpbGw6I2ZmZiIvPjxwYXRoIGQ9Ik0wIDg1LjMzM2gyOTguNjY3djg1My4zMzNIMFY4NS4zMzN6bTEwMjQgMHY4NTMuMzMzSDM4NFY4NS4zMzNoNjQwem0tNTU0LjY2NyAxNjBoMzQxLjMzM3YtNjRINDY5LjMzM3Y2NHptMzQxLjMzNCA1MzMuMzM0SDQ2OS4zMzN2NjRoMzQxLjMzM2wuMDAxLTY0em0xMjgtMTQ5LjMzNEg1OTcuMzMzdjY0aDM0MS4zMzNsLjAwMS02NHptMC0xNDkuMzMzSDU5Ny4zMzN2NjRoMzQxLjMzM2wuMDAxLTY0em0wLTE0OS4zMzNINTk3LjMzM3Y2NGgzNDEuMzMzbC4wMDEtNjR6IiBzdHlsZT0iZmlsbDojMTY3YWJmIi8+PC9zdmc+\");background-position:50%;background-repeat:no-repeat;background-size:16px;margin:0 6px 0 10px;padding:0;width:16px}.monaco-workbench .part.banner .message-container{line-height:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-workbench .part.banner .message-container a{color:var(--vscode-banner-foreground)}.monaco-workbench .part.banner .message-container p{margin-block-end:0;margin-block-start:0}.monaco-workbench .part.banner .message-actions-container{flex-grow:1;flex-shrink:0;line-height:26px}.monaco-workbench .part.banner .message-actions-container a{color:var(--vscode-banner-foreground);cursor:pointer;margin-left:12px;padding:3px;text-decoration:underline}.monaco-workbench .part.banner .message-container a{cursor:pointer;text-decoration:underline}.monaco-workbench .part.banner .action-container{padding:0 10px 0 6px}.monaco-workbench .part.banner .action-container .codicon{color:var(--vscode-banner-foreground)}";
3
+ n(css,{});
4
+ export { css, css as default };
@@ -257,6 +257,27 @@ registerAction2(class extends SwitchPanelViewAction {
257
257
  return super.run(accessor, 1);
258
258
  }
259
259
  });
260
+ registerAction2(class extends Action2 {
261
+ constructor() {
262
+ super({
263
+ id: 'workbench.action.closePanel',
264
+ title: { value: ( localize('closePanel', "Close Panel")), original: 'Close Panel' },
265
+ category: Categories.View,
266
+ icon: closeIcon,
267
+ menu: [{
268
+ id: MenuId.CommandPalette,
269
+ when: PanelVisibleContext,
270
+ }, {
271
+ id: MenuId.PanelTitle,
272
+ group: 'navigation',
273
+ order: 2
274
+ }]
275
+ });
276
+ }
277
+ run(accessor) {
278
+ accessor.get(IWorkbenchLayoutService).setPartHidden(true, "workbench.parts.panel" );
279
+ }
280
+ });
260
281
  registerAction2(class extends Action2 {
261
282
  constructor() {
262
283
  super({
@@ -0,0 +1,134 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { reset } from 'monaco-editor/esm/vs/base/browser/dom.js';
3
+ import { BaseActionViewItem } from 'monaco-editor/esm/vs/base/browser/ui/actionbar/actionViewItems.js';
4
+ import { setupCustomHover } from 'monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabelHover.js';
5
+ import { renderIcon } from 'monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabels.js';
6
+ import { Codicon } from 'monaco-editor/esm/vs/base/common/codicons.js';
7
+ import { Color } from 'monaco-editor/esm/vs/base/common/color.js';
8
+ import { Emitter } from 'monaco-editor/esm/vs/base/common/event.js';
9
+ import { DisposableStore } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
10
+ import { localize } from 'monaco-editor/esm/vs/nls.js';
11
+ import { createActionViewItem } from 'monaco-editor/esm/vs/platform/actions/browser/menuEntryActionViewItem.js';
12
+ import { MenuWorkbenchToolBar } from 'monaco-editor/esm/vs/platform/actions/browser/toolbar.js';
13
+ import { MenuId, MenuItemAction } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
14
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
15
+ import { IKeybindingService } from 'monaco-editor/esm/vs/platform/keybinding/common/keybinding.js';
16
+ import { IQuickInputService } from 'monaco-editor/esm/vs/platform/quickinput/common/quickInput.js';
17
+ import * as colorRegistry from 'monaco-editor/esm/vs/platform/theme/common/colorRegistry.js';
18
+ import { TITLE_BAR_ACTIVE_FOREGROUND, MENUBAR_SELECTION_FOREGROUND, TITLE_BAR_INACTIVE_FOREGROUND, MENUBAR_SELECTION_BACKGROUND } from '../../../common/theme.js';
19
+ let CommandCenterControl = class CommandCenterControl {
20
+ constructor(windowTitle, hoverDelegate, instantiationService, quickInputService, keybindingService) {
21
+ this._disposables = ( new DisposableStore());
22
+ this._onDidChangeVisibility = ( new Emitter());
23
+ this.onDidChangeVisibility = this._onDidChangeVisibility.event;
24
+ this.element = document.createElement('div');
25
+ this.element.classList.add('command-center');
26
+ const titleToolbar = instantiationService.createInstance(MenuWorkbenchToolBar, this.element, MenuId.CommandCenter, {
27
+ contextMenu: MenuId.TitleBarContext,
28
+ hiddenItemStrategy: 0 ,
29
+ toolbarOptions: {
30
+ primaryGroup: () => true,
31
+ },
32
+ telemetrySource: 'commandCenter',
33
+ actionViewItemProvider: (action) => {
34
+ if (action instanceof MenuItemAction && action.id === 'workbench.action.quickOpenWithModes') {
35
+ class CommandCenterViewItem extends BaseActionViewItem {
36
+ constructor(action, options) {
37
+ super(undefined, action, options);
38
+ }
39
+ render(container) {
40
+ super.render(container);
41
+ container.classList.add('command-center');
42
+ const searchIcon = renderIcon(Codicon.search);
43
+ searchIcon.classList.add('search-icon');
44
+ const label = this._getLabel();
45
+ const labelElement = document.createElement('span');
46
+ labelElement.classList.add('search-label');
47
+ labelElement.innerText = label;
48
+ reset(container, searchIcon, labelElement);
49
+ const hover = this._store.add(setupCustomHover(hoverDelegate, container, this.getTooltip()));
50
+ this._store.add(windowTitle.onDidChange(() => {
51
+ hover.update(this.getTooltip());
52
+ labelElement.innerText = this._getLabel();
53
+ }));
54
+ }
55
+ _getLabel() {
56
+ const { prefix, suffix } = windowTitle.getTitleDecorations();
57
+ let label = windowTitle.isCustomTitleFormat() ? windowTitle.getWindowTitle() : windowTitle.workspaceName;
58
+ if (!label) {
59
+ label = ( localize('label.dfl', "Search"));
60
+ }
61
+ if (prefix) {
62
+ label = ( localize('label1', "{0} {1}", prefix, label));
63
+ }
64
+ if (suffix) {
65
+ label = ( localize('label2', "{0} {1}", label, suffix));
66
+ }
67
+ return label;
68
+ }
69
+ getTooltip() {
70
+ const kb = keybindingService.lookupKeybinding(action.id)?.getLabel();
71
+ const title = kb
72
+ ? ( localize(
73
+ 'title',
74
+ "Search {0} ({1}) \u2014 {2}",
75
+ windowTitle.workspaceName,
76
+ kb,
77
+ windowTitle.value
78
+ ))
79
+ : ( localize(
80
+ 'title2',
81
+ "Search {0} \u2014 {1}",
82
+ windowTitle.workspaceName,
83
+ windowTitle.value
84
+ ));
85
+ return title;
86
+ }
87
+ }
88
+ return instantiationService.createInstance(CommandCenterViewItem, action, {});
89
+ }
90
+ else {
91
+ return createActionViewItem(instantiationService, action, { hoverDelegate });
92
+ }
93
+ }
94
+ });
95
+ this._disposables.add(quickInputService.onShow(this._setVisibility.bind(this, false)));
96
+ this._disposables.add(quickInputService.onHide(this._setVisibility.bind(this, true)));
97
+ this._disposables.add(titleToolbar);
98
+ }
99
+ _setVisibility(show) {
100
+ this.element.classList.toggle('hide', !show);
101
+ this._onDidChangeVisibility.fire();
102
+ }
103
+ dispose() {
104
+ this._disposables.dispose();
105
+ }
106
+ };
107
+ CommandCenterControl = ( __decorate([
108
+ ( __param(2, IInstantiationService)),
109
+ ( __param(3, IQuickInputService)),
110
+ ( __param(4, IKeybindingService))
111
+ ], CommandCenterControl));
112
+ colorRegistry.registerColor('commandCenter.foreground', { dark: TITLE_BAR_ACTIVE_FOREGROUND, hcDark: TITLE_BAR_ACTIVE_FOREGROUND, light: TITLE_BAR_ACTIVE_FOREGROUND, hcLight: TITLE_BAR_ACTIVE_FOREGROUND }, ( localize('commandCenter-foreground', "Foreground color of the command center")), false);
113
+ colorRegistry.registerColor('commandCenter.activeForeground', { dark: MENUBAR_SELECTION_FOREGROUND, hcDark: MENUBAR_SELECTION_FOREGROUND, light: MENUBAR_SELECTION_FOREGROUND, hcLight: MENUBAR_SELECTION_FOREGROUND }, ( localize(
114
+ 'commandCenter-activeForeground',
115
+ "Active foreground color of the command center"
116
+ )), false);
117
+ colorRegistry.registerColor('commandCenter.inactiveForeground', { dark: TITLE_BAR_INACTIVE_FOREGROUND, hcDark: TITLE_BAR_INACTIVE_FOREGROUND, light: TITLE_BAR_INACTIVE_FOREGROUND, hcLight: TITLE_BAR_INACTIVE_FOREGROUND }, ( localize(
118
+ 'commandCenter-inactiveForeground',
119
+ "Foreground color of the command center when the window is inactive"
120
+ )), false);
121
+ colorRegistry.registerColor('commandCenter.background', {
122
+ dark: ( Color.white.transparent(0.05)), hcDark: null, light: ( Color.black.transparent(0.05)), hcLight: null
123
+ }, ( localize('commandCenter-background', "Background color of the command center")), false);
124
+ colorRegistry.registerColor('commandCenter.activeBackground', { dark: ( Color.white.transparent(0.08)), hcDark: MENUBAR_SELECTION_BACKGROUND, light: ( Color.black.transparent(0.08)), hcLight: MENUBAR_SELECTION_BACKGROUND }, ( localize(
125
+ 'commandCenter-activeBackground',
126
+ "Active background color of the command center"
127
+ )), false);
128
+ colorRegistry.registerColor('commandCenter.border', { dark: ( colorRegistry.transparent(TITLE_BAR_ACTIVE_FOREGROUND, .20)), hcDark: ( colorRegistry.transparent(TITLE_BAR_ACTIVE_FOREGROUND, .60)), light: ( colorRegistry.transparent(TITLE_BAR_ACTIVE_FOREGROUND, .20)), hcLight: ( colorRegistry.transparent(TITLE_BAR_ACTIVE_FOREGROUND, .60)) }, ( localize('commandCenter-border', "Border color of the command center")), false);
129
+ colorRegistry.registerColor('commandCenter.activeBorder', { dark: ( colorRegistry.transparent(TITLE_BAR_ACTIVE_FOREGROUND, .30)), hcDark: TITLE_BAR_ACTIVE_FOREGROUND, light: ( colorRegistry.transparent(TITLE_BAR_ACTIVE_FOREGROUND, .30)), hcLight: TITLE_BAR_ACTIVE_FOREGROUND }, ( localize('commandCenter-activeBorder', "Active border color of the command center")), false);
130
+ colorRegistry.registerColor('commandCenter.inactiveBorder', { dark: ( colorRegistry.transparent(TITLE_BAR_INACTIVE_FOREGROUND, .25)), hcDark: ( colorRegistry.transparent(TITLE_BAR_INACTIVE_FOREGROUND, .25)), light: ( colorRegistry.transparent(TITLE_BAR_INACTIVE_FOREGROUND, .25)), hcLight: ( colorRegistry.transparent(TITLE_BAR_INACTIVE_FOREGROUND, .25)) }, ( localize(
131
+ 'commandCenter-inactiveBorder',
132
+ "Border color of the command center when the window is inactive"
133
+ )), false);
134
+ export { CommandCenterControl };