@theia/monaco 1.60.0-next.47 → 1.60.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 (38) hide show
  1. package/lib/browser/monaco-context-menu.d.ts +3 -0
  2. package/lib/browser/monaco-context-menu.d.ts.map +1 -1
  3. package/lib/browser/monaco-context-menu.js +34 -13
  4. package/lib/browser/monaco-context-menu.js.map +1 -1
  5. package/lib/browser/monaco-editor-model.d.ts.map +1 -1
  6. package/lib/browser/monaco-editor-model.js +2 -1
  7. package/lib/browser/monaco-editor-model.js.map +1 -1
  8. package/lib/browser/monaco-editor-peek-view-widget.d.ts +6 -0
  9. package/lib/browser/monaco-editor-peek-view-widget.d.ts.map +1 -1
  10. package/lib/browser/monaco-editor-peek-view-widget.js +39 -0
  11. package/lib/browser/monaco-editor-peek-view-widget.js.map +1 -1
  12. package/lib/browser/monaco-editor-provider.js +1 -1
  13. package/lib/browser/monaco-editor-provider.js.map +1 -1
  14. package/lib/browser/monaco-editor.d.ts.map +1 -1
  15. package/lib/browser/monaco-editor.js +7 -1
  16. package/lib/browser/monaco-editor.js.map +1 -1
  17. package/lib/browser/monaco-frontend-module.d.ts.map +1 -1
  18. package/lib/browser/monaco-frontend-module.js +7 -0
  19. package/lib/browser/monaco-frontend-module.js.map +1 -1
  20. package/lib/browser/monaco-init.d.ts.map +1 -1
  21. package/lib/browser/monaco-init.js +9 -1
  22. package/lib/browser/monaco-init.js.map +1 -1
  23. package/lib/browser/monaco-workspace-context-service.d.ts +26 -0
  24. package/lib/browser/monaco-workspace-context-service.d.ts.map +1 -0
  25. package/lib/browser/monaco-workspace-context-service.js +63 -0
  26. package/lib/browser/monaco-workspace-context-service.js.map +1 -0
  27. package/lib/browser/workspace-symbol-command.js +1 -1
  28. package/lib/browser/workspace-symbol-command.js.map +1 -1
  29. package/package.json +9 -9
  30. package/src/browser/monaco-context-menu.ts +32 -12
  31. package/src/browser/monaco-editor-model.ts +2 -1
  32. package/src/browser/monaco-editor-peek-view-widget.ts +52 -0
  33. package/src/browser/monaco-editor-provider.ts +1 -1
  34. package/src/browser/monaco-editor.ts +10 -2
  35. package/src/browser/monaco-frontend-module.ts +8 -0
  36. package/src/browser/monaco-init.ts +10 -1
  37. package/src/browser/monaco-workspace-context-service.ts +79 -0
  38. package/src/browser/workspace-symbol-command.ts +1 -1
@@ -63,7 +63,8 @@ import { ILanguageConfigurationService } from '@theia/monaco-editor-core/esm/vs/
63
63
  import { ILanguageFeaturesService } from '@theia/monaco-editor-core/esm/vs/editor/common/services/languageFeatures';
64
64
  import * as objects from '@theia/monaco-editor-core/esm/vs/base/common/objects';
65
65
  import { Selection } from '@theia/editor/lib/browser/editor';
66
- import { IHoverService } from '@theia/monaco-editor-core/esm/vs/platform/hover/browser/hover';
66
+ import { IHoverService, WorkbenchHoverDelegate } from '@theia/monaco-editor-core/esm/vs/platform/hover/browser/hover';
67
+ import { setHoverDelegateFactory } from '@theia/monaco-editor-core/esm/vs/base/browser/ui/hover/hoverDelegateFactory';
67
68
  import { MonacoTextModelService } from './monaco-text-model-service';
68
69
 
69
70
  export type ServicePair<T> = [ServiceIdentifier<T>, T];
@@ -155,6 +156,11 @@ export class MonacoEditor extends MonacoEditorServices implements TextEditor {
155
156
  ...MonacoEditor.createReadOnlyOptions(document.readOnly),
156
157
  ...options
157
158
  }, override));
159
+ // Ensure that a valid InstantiationService is responsible for creating hover delegates when the InstantiationService for this widget is disposed.
160
+ // Cf. https://github.com/eclipse-theia/theia/issues/15102
161
+ this.toDispose.push(Disposable.create(() => setHoverDelegateFactory((placement, enableInstantHover) =>
162
+ StandaloneServices.get(IInstantiationService).createInstance(WorkbenchHoverDelegate, placement, enableInstantHover, {})
163
+ )));
158
164
  this.addHandlers(this.editor);
159
165
  }
160
166
 
@@ -198,7 +204,9 @@ export class MonacoEditor extends MonacoEditorServices implements TextEditor {
198
204
  const instantiator = StandaloneServices.get(IInstantiationService);
199
205
  if (override) {
200
206
  const overrideServices = new ServiceCollection(...override);
201
- return instantiator.createChild(overrideServices);
207
+ const child = instantiator.createChild(overrideServices);
208
+ this.toDispose.push(child);
209
+ return child;
202
210
  }
203
211
  return instantiator;
204
212
  }
@@ -78,6 +78,7 @@ import { IThemeService } from '@theia/monaco-editor-core/esm/vs/platform/theme/c
78
78
  import { ActiveMonacoUndoRedoHandler, FocusedMonacoUndoRedoHandler } from './monaco-undo-redo-handler';
79
79
  import { ILogService } from '@theia/monaco-editor-core/esm/vs/platform/log/common/log';
80
80
  import { DefaultContentHoverWidgetPatcher } from './default-content-hover-widget-patcher';
81
+ import { MonacoWorkspaceContextService } from './monaco-workspace-context-service';
81
82
 
82
83
  export default new ContainerModule((bind, unbind, isBound, rebind) => {
83
84
  bind(MonacoThemingService).toSelf().inSingletonScope();
@@ -101,6 +102,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
101
102
  }
102
103
 
103
104
  bind(MonacoWorkspace).toSelf().inSingletonScope();
105
+ bind(MonacoWorkspaceContextService).toSelf().inSingletonScope();
104
106
 
105
107
  bind(MonacoConfigurationService).toDynamicValue(({ container }) => createMonacoConfigurationService(container)).inSingletonScope();
106
108
 
@@ -221,6 +223,12 @@ export function createMonacoConfigurationService(container: interfaces.Container
221
223
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
224
  service.updateValues = (values: [string, any][]) => Promise.resolve();
223
225
 
226
+ /*
227
+ * There are a few places in Monaco where this method is called from, including actions for editor minimap in `ContextMenuController`.
228
+ */
229
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
230
+ service.updateValue = (key: string, value: any) => preferences.updateValue(key, value);
231
+
224
232
  const toTarget = (scope: PreferenceScope): ConfigurationTarget => {
225
233
  switch (scope) {
226
234
  case PreferenceScope.Default: return ConfigurationTarget.DEFAULT;
@@ -82,6 +82,8 @@ import { MonacoStandaloneThemeService } from './monaco-standalone-theme-service'
82
82
  import { createContentHoverWidgetPatcher } from './content-hover-widget-patcher';
83
83
  import { IHoverService } from '@theia/monaco-editor-core/esm/vs/platform/hover/browser/hover';
84
84
  import { setBaseLayerHoverDelegate } from '@theia/monaco-editor-core/esm/vs/base/browser/ui/hover/hoverDelegate2';
85
+ import { IWorkspaceContextService } from '@theia/monaco-editor-core/esm/vs/platform/workspace/common/workspace';
86
+ import { MonacoWorkspaceContextService } from './monaco-workspace-context-service';
85
87
 
86
88
  export const contentHoverWidgetPatcher = createContentHoverWidgetPatcher();
87
89
 
@@ -143,6 +145,12 @@ class MonacoStandaloneThemeServiceConstructor {
143
145
  }
144
146
  }
145
147
 
148
+ class MonacoWorkspaceContextServiceConstructor {
149
+ constructor(container: Container) {
150
+ return container.get(MonacoWorkspaceContextService);
151
+ }
152
+ }
153
+
146
154
  export namespace MonacoInit {
147
155
  export function init(container: Container): void {
148
156
  StandaloneServices.initialize({
@@ -153,7 +161,8 @@ export namespace MonacoInit {
153
161
  [IBulkEditService.toString()]: new SyncDescriptor(MonacoBulkEditServiceConstructor, [container]),
154
162
  [ICommandService.toString()]: new SyncDescriptor(MonacoCommandServiceConstructor, [container]),
155
163
  [IQuickInputService.toString()]: new SyncDescriptor(MonacoQuickInputImplementationConstructor, [container]),
156
- [IStandaloneThemeService.toString()]: new SyncDescriptor(MonacoStandaloneThemeServiceConstructor, [])
164
+ [IStandaloneThemeService.toString()]: new SyncDescriptor(MonacoStandaloneThemeServiceConstructor, []),
165
+ [IWorkspaceContextService.toString()]: new SyncDescriptor(MonacoWorkspaceContextServiceConstructor, [container])
157
166
  });
158
167
  // Make sure the global base hover delegate is initialized as otherwise the quick input will throw an error and not update correctly
159
168
  // in case no Monaco editor was constructed before and items with keybindings are shown. See #15042.
@@ -0,0 +1,79 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 1C-Soft LLC and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { injectable } from '@theia/core/shared/inversify';
18
+ import { Emitter } from '@theia/monaco-editor-core/esm/vs/base/common/event';
19
+ import { URI } from '@theia/monaco-editor-core/esm/vs/base/common/uri';
20
+ import {
21
+ ISingleFolderWorkspaceIdentifier,
22
+ IWorkspace,
23
+ IWorkspaceContextService,
24
+ IWorkspaceFolder,
25
+ IWorkspaceFoldersChangeEvent,
26
+ IWorkspaceFoldersWillChangeEvent,
27
+ IWorkspaceIdentifier,
28
+ UNKNOWN_EMPTY_WINDOW_WORKSPACE,
29
+ WorkbenchState
30
+ } from '@theia/monaco-editor-core/esm/vs/platform/workspace/common/workspace';
31
+
32
+ /**
33
+ * A minimal implementation of {@link IWorkspaceContextService} to replace the `StandaloneWorkspaceContextService` in Monaco
34
+ * as a workaround for the issue of showing no context menu for editor minimap (#15217).
35
+ */
36
+ @injectable()
37
+ export class MonacoWorkspaceContextService implements IWorkspaceContextService {
38
+
39
+ declare readonly _serviceBrand: undefined;
40
+
41
+ protected readonly onDidChangeWorkbenchStateEmitter = new Emitter<WorkbenchState>();
42
+ readonly onDidChangeWorkbenchState = this.onDidChangeWorkbenchStateEmitter.event;
43
+
44
+ protected readonly onDidChangeWorkspaceNameEmitter = new Emitter<void>();
45
+ readonly onDidChangeWorkspaceName = this.onDidChangeWorkspaceNameEmitter.event;
46
+
47
+ protected readonly onWillChangeWorkspaceFoldersEmitter = new Emitter<IWorkspaceFoldersWillChangeEvent>();
48
+ readonly onWillChangeWorkspaceFolders = this.onWillChangeWorkspaceFoldersEmitter.event;
49
+
50
+ protected readonly onDidChangeWorkspaceFoldersEmitter = new Emitter<IWorkspaceFoldersChangeEvent>();
51
+ readonly onDidChangeWorkspaceFolders = this.onDidChangeWorkspaceFoldersEmitter.event;
52
+
53
+ protected workspace: IWorkspace = { id: UNKNOWN_EMPTY_WINDOW_WORKSPACE.id, folders: [] };
54
+
55
+ getCompleteWorkspace(): Promise<IWorkspace> {
56
+ return Promise.resolve(this.getWorkspace());
57
+ }
58
+
59
+ getWorkspace(): IWorkspace {
60
+ return this.workspace;
61
+ }
62
+
63
+ getWorkbenchState(): WorkbenchState {
64
+ return WorkbenchState.EMPTY;
65
+ }
66
+
67
+ getWorkspaceFolder(resource: URI): IWorkspaceFolder | null {
68
+ // eslint-disable-next-line no-null/no-null
69
+ return null;
70
+ }
71
+
72
+ isCurrentWorkspace(workspaceIdOrFolder: IWorkspaceIdentifier | ISingleFolderWorkspaceIdentifier | URI): boolean {
73
+ return false;
74
+ }
75
+
76
+ isInsideWorkspace(resource: URI): boolean {
77
+ return false;
78
+ }
79
+ }
@@ -156,7 +156,7 @@ export class WorkspaceSymbolCommand implements QuickAccessProvider, CommandContr
156
156
  if (!kind) {
157
157
  return undefined;
158
158
  }
159
- return [`codicon ${inline ? 'inline' : 'block'} codicon-symbol-${kind.toLowerCase() || 'property'}`];
159
+ return ['codicon', `${inline ? 'inline' : 'block'}`, `codicon-symbol-${kind.toLowerCase() || 'property'}`];
160
160
  }
161
161
 
162
162
  private openURL(uri: URI, start: Position, end: Position): void {