@theia/core 1.62.0-next.3 → 1.62.1
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.
- package/README.md +7 -7
- package/i18n/nls.cs.json +158 -13
- package/i18n/nls.de.json +158 -13
- package/i18n/nls.es.json +158 -13
- package/i18n/nls.fr.json +158 -13
- package/i18n/nls.hu.json +158 -13
- package/i18n/nls.it.json +158 -13
- package/i18n/nls.ja.json +158 -13
- package/i18n/nls.json +159 -14
- package/i18n/nls.ko.json +158 -13
- package/i18n/nls.pl.json +158 -13
- package/i18n/nls.pt-br.json +158 -13
- package/i18n/nls.ru.json +158 -13
- package/i18n/nls.tr.json +158 -13
- package/i18n/nls.zh-cn.json +158 -13
- package/i18n/nls.zh-tw.json +158 -13
- package/lib/browser/catalog.json +206 -33
- package/lib/browser/common-frontend-contribution.d.ts +1 -1
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +13 -11
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/context-menu-renderer.d.ts +14 -3
- package/lib/browser/context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/context-menu-renderer.js +23 -1
- package/lib/browser/context-menu-renderer.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +1 -3
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/hover-service.d.ts.map +1 -1
- package/lib/browser/hover-service.js +7 -0
- package/lib/browser/hover-service.js.map +1 -1
- package/lib/browser/menu/action-menu-node.d.ts +36 -0
- package/lib/browser/menu/action-menu-node.d.ts.map +1 -0
- package/lib/browser/menu/action-menu-node.js +113 -0
- package/lib/browser/menu/action-menu-node.js.map +1 -0
- package/lib/browser/menu/browser-context-menu-renderer.d.ts +12 -4
- package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/menu/browser-context-menu-renderer.js +12 -13
- package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
- package/lib/browser/menu/browser-menu-module.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-module.js +4 -0
- package/lib/browser/menu/browser-menu-module.js.map +1 -1
- package/lib/browser/menu/browser-menu-node-factory.d.ts +13 -0
- package/lib/browser/menu/browser-menu-node-factory.d.ts.map +1 -0
- package/lib/browser/menu/browser-menu-node-factory.js +54 -0
- package/lib/browser/menu/browser-menu-node-factory.js.map +1 -0
- package/lib/browser/menu/browser-menu-plugin.d.ts +12 -30
- package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +78 -159
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/menu/composite-menu-node.d.ts +49 -0
- package/lib/browser/menu/composite-menu-node.d.ts.map +1 -0
- package/lib/browser/menu/composite-menu-node.js +127 -0
- package/lib/browser/menu/composite-menu-node.js.map +1 -0
- package/lib/browser/menu/menu.spec.d.ts.map +1 -0
- package/lib/{common → browser}/menu/menu.spec.js +38 -13
- package/lib/browser/menu/menu.spec.js.map +1 -0
- package/lib/browser/open-with-service.d.ts +1 -1
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -1
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +7 -5
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +82 -28
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/index.d.ts +1 -0
- package/lib/browser/shell/index.d.ts.map +1 -1
- package/lib/browser/shell/index.js +1 -0
- package/lib/browser/shell/index.js.map +1 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.js +2 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.js.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts +4 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.js +14 -1
- package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +66 -8
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +161 -8
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +18 -32
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +52 -88
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +17 -21
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +9 -9
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +7 -39
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +30 -238
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js +13 -13
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +56 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js +208 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js.map +1 -0
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +2 -1
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/shell/theia-dock-panel.d.ts +4 -10
- package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.js +7 -84
- package/lib/browser/shell/theia-dock-panel.js.map +1 -1
- package/lib/browser/shell/theia-split-panel.d.ts +6 -0
- package/lib/browser/shell/theia-split-panel.d.ts.map +1 -0
- package/lib/browser/shell/theia-split-panel.js +56 -0
- package/lib/browser/shell/theia-split-panel.js.map +1 -0
- package/lib/browser/tree/tree-widget.d.ts +1 -0
- package/lib/browser/tree/tree-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-widget.js +6 -0
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/view-container.d.ts +6 -3
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js +36 -26
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/window/default-secondary-window-service.d.ts +1 -0
- package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-secondary-window-service.js +3 -0
- package/lib/browser/window/default-secondary-window-service.js.map +1 -1
- package/lib/common/listener.d.ts +21 -0
- package/lib/common/listener.d.ts.map +1 -0
- package/lib/common/listener.js +81 -0
- package/lib/common/listener.js.map +1 -0
- package/lib/common/listener.spec.d.ts +2 -0
- package/lib/common/listener.spec.d.ts.map +1 -0
- package/lib/common/listener.spec.js +255 -0
- package/lib/common/listener.spec.js.map +1 -0
- package/lib/common/menu/index.d.ts +2 -3
- package/lib/common/menu/index.d.ts.map +1 -1
- package/lib/common/menu/index.js +2 -3
- package/lib/common/menu/index.js.map +1 -1
- package/lib/common/menu/menu-model-registry.d.ts +37 -50
- package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
- package/lib/common/menu/menu-model-registry.js +176 -225
- package/lib/common/menu/menu-model-registry.js.map +1 -1
- package/lib/common/menu/menu-types.d.ts +58 -96
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js +43 -39
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/common/messaging/proxy-factory.js +4 -0
- package/lib/common/messaging/proxy-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +15 -5
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.js +21 -14
- package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +4 -16
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +84 -104
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.js +1 -4
- package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-module.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-module.js +5 -0
- package/lib/electron-browser/menu/electron-menu-module.js.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.d.ts +1 -0
- package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.js +20 -0
- package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
- package/lib/electron-browser/window/electron-window-service.d.ts +3 -0
- package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-service.js +10 -1
- package/lib/electron-browser/window/electron-window-service.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +2 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/package.json +7 -8
- package/src/browser/common-frontend-contribution.ts +14 -14
- package/src/browser/context-menu-renderer.ts +33 -5
- package/src/browser/frontend-application-module.ts +1 -7
- package/src/browser/hover-service.ts +7 -0
- package/src/browser/menu/action-menu-node.ts +128 -0
- package/src/browser/menu/browser-context-menu-renderer.ts +18 -11
- package/src/browser/menu/browser-menu-module.ts +4 -0
- package/src/browser/menu/browser-menu-node-factory.ts +48 -0
- package/src/browser/menu/browser-menu-plugin.ts +80 -168
- package/src/browser/menu/composite-menu-node.ts +140 -0
- package/src/{common → browser}/menu/menu.spec.ts +47 -15
- package/src/browser/open-with-service.ts +1 -1
- package/src/browser/saveable-service.ts +6 -1
- package/src/browser/shell/application-shell.ts +91 -29
- package/src/browser/shell/index.ts +1 -0
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +2 -1
- package/src/browser/shell/sidebar-menu-widget.tsx +12 -2
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +239 -0
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +59 -102
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +14 -23
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +14 -14
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +34 -261
- package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +251 -0
- package/src/browser/shell/tab-bars.ts +2 -1
- package/src/browser/shell/theia-dock-panel.ts +10 -91
- package/src/browser/shell/theia-split-panel.ts +56 -0
- package/src/browser/style/hover-service.css +6 -1
- package/src/browser/style/index.css +3 -11
- package/src/browser/style/view-container.css +17 -31
- package/src/browser/tree/tree-widget.tsx +7 -0
- package/src/browser/view-container.ts +51 -30
- package/src/browser/window/default-secondary-window-service.ts +4 -0
- package/src/common/listener.spec.ts +315 -0
- package/src/common/listener.ts +88 -0
- package/src/common/menu/index.ts +2 -3
- package/src/common/menu/menu-model-registry.ts +187 -230
- package/src/common/menu/menu-types.ts +82 -128
- package/src/common/messaging/proxy-factory.ts +4 -1
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +29 -13
- package/src/electron-browser/menu/electron-main-menu-factory.ts +92 -116
- package/src/electron-browser/menu/electron-menu-contribution.ts +1 -4
- package/src/electron-browser/menu/electron-menu-module.ts +6 -1
- package/src/electron-browser/window/electron-secondary-window-service.ts +22 -0
- package/src/electron-browser/window/electron-window-service.ts +11 -1
- package/src/electron-main/theia-electron-window.ts +2 -0
- package/lib/common/menu/action-menu-node.d.ts +0 -20
- package/lib/common/menu/action-menu-node.d.ts.map +0 -1
- package/lib/common/menu/action-menu-node.js +0 -57
- package/lib/common/menu/action-menu-node.js.map +0 -1
- package/lib/common/menu/composite-menu-node.d.ts +0 -47
- package/lib/common/menu/composite-menu-node.d.ts.map +0 -1
- package/lib/common/menu/composite-menu-node.js +0 -96
- package/lib/common/menu/composite-menu-node.js.map +0 -1
- package/lib/common/menu/composite-menu-node.spec.d.ts +0 -2
- package/lib/common/menu/composite-menu-node.spec.d.ts.map +0 -1
- package/lib/common/menu/composite-menu-node.spec.js +0 -68
- package/lib/common/menu/composite-menu-node.spec.js.map +0 -1
- package/lib/common/menu/menu-adapter.d.ts +0 -36
- package/lib/common/menu/menu-adapter.d.ts.map +0 -1
- package/lib/common/menu/menu-adapter.js +0 -93
- package/lib/common/menu/menu-adapter.js.map +0 -1
- package/lib/common/menu/menu.spec.d.ts.map +0 -1
- package/lib/common/menu/menu.spec.js.map +0 -1
- package/lib/common/test/mock-menu.d.ts +0 -8
- package/lib/common/test/mock-menu.d.ts.map +0 -1
- package/lib/common/test/mock-menu.js +0 -35
- package/lib/common/test/mock-menu.js.map +0 -1
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +0 -31
- package/src/common/menu/action-menu-node.ts +0 -65
- package/src/common/menu/composite-menu-node.spec.ts +0 -67
- package/src/common/menu/composite-menu-node.ts +0 -116
- package/src/common/menu/menu-adapter.ts +0 -103
- package/src/common/test/mock-menu.ts +0 -35
- /package/lib/{common → browser}/menu/menu.spec.d.ts +0 -0
|
@@ -14,19 +14,23 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { Event } from '../event';
|
|
18
18
|
import { isObject } from '../types';
|
|
19
19
|
|
|
20
|
-
export type MenuPath = string[];
|
|
21
20
|
export const MAIN_MENU_BAR: MenuPath = ['menubar'];
|
|
21
|
+
export type MenuPath = string[];
|
|
22
22
|
export const MANAGE_MENU: MenuPath = ['manage_menu'];
|
|
23
23
|
export const ACCOUNTS_MENU: MenuPath = ['accounts_menu'];
|
|
24
24
|
export const ACCOUNTS_SUBMENU = [...ACCOUNTS_MENU, '1_accounts_submenu'];
|
|
25
25
|
|
|
26
|
+
export interface ContextExpressionMatcher<T> {
|
|
27
|
+
match(whenExpression: string, context: T | undefined): boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
26
30
|
/**
|
|
27
31
|
* @internal For most use cases, refer to {@link MenuAction} or {@link MenuNode}
|
|
28
32
|
*/
|
|
29
|
-
export interface
|
|
33
|
+
export interface MenuNode {
|
|
30
34
|
/**
|
|
31
35
|
* technical identifier.
|
|
32
36
|
*/
|
|
@@ -35,126 +39,103 @@ export interface MenuNodeMetadata {
|
|
|
35
39
|
* Menu nodes are sorted in ascending order based on their `sortString`.
|
|
36
40
|
*/
|
|
37
41
|
readonly sortString: string;
|
|
42
|
+
isVisible<T>(effectiveMenuPath: MenuPath, contextMatcher: ContextExpressionMatcher<T>, context: T | undefined, ...args: unknown[]): boolean;
|
|
43
|
+
onDidChange?: Event<void>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface Action {
|
|
47
|
+
isEnabled(effectiveMenuPath: MenuPath, ...args: unknown[]): boolean;
|
|
48
|
+
isToggled(effectiveMenuPath: MenuPath, ...args: unknown[]): boolean;
|
|
49
|
+
run(effectiveMenuPath: MenuPath, ...args: unknown[]): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export namespace Action {
|
|
53
|
+
export function is(node: object): node is Action {
|
|
54
|
+
return isObject<Action>(node) && typeof node.run === 'function' && typeof node.isEnabled === 'function';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface MenuAction {
|
|
38
59
|
/**
|
|
39
|
-
*
|
|
40
|
-
* See https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts
|
|
60
|
+
* The command to execute.
|
|
41
61
|
*/
|
|
42
|
-
readonly
|
|
62
|
+
readonly commandId: string;
|
|
43
63
|
/**
|
|
44
|
-
*
|
|
64
|
+
* Menu entries are sorted in ascending order based on their `order` strings. If omitted the determined
|
|
65
|
+
* label will be used instead.
|
|
45
66
|
*/
|
|
46
|
-
readonly
|
|
47
|
-
}
|
|
67
|
+
readonly order?: string;
|
|
48
68
|
|
|
49
|
-
/**
|
|
50
|
-
* Metadata for the visual presentation of a node.
|
|
51
|
-
* @internal For most uses cases, refer to {@link MenuNode}, {@link CommandMenuNode}, or {@link CompoundMenuNode}
|
|
52
|
-
*/
|
|
53
|
-
export interface MenuNodeRenderingData {
|
|
54
|
-
/**
|
|
55
|
-
* Optional label. Will be rendered as text of the menu item.
|
|
56
|
-
*/
|
|
57
69
|
readonly label?: string;
|
|
58
70
|
/**
|
|
59
71
|
* Icon classes for the menu node. If present, these will produce an icon to the left of the label in browser-style menus.
|
|
60
72
|
*/
|
|
61
73
|
readonly icon?: string;
|
|
74
|
+
|
|
75
|
+
readonly when?: string;
|
|
62
76
|
}
|
|
63
77
|
|
|
64
|
-
|
|
65
|
-
export
|
|
78
|
+
export namespace MenuAction {
|
|
79
|
+
export function is(obj: unknown): obj is MenuAction {
|
|
80
|
+
return isObject<MenuAction>(obj) && typeof obj.commandId === 'string';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
66
83
|
|
|
67
84
|
/**
|
|
68
|
-
*
|
|
85
|
+
* Metadata for the visual presentation of a node.
|
|
86
|
+
* @internal For most uses cases, refer to {@link MenuNode}, {@link CommandMenuNode}, or {@link CompoundMenuNode}
|
|
69
87
|
*/
|
|
70
|
-
export interface
|
|
71
|
-
|
|
88
|
+
export interface RenderedMenuNode extends MenuNode {
|
|
72
89
|
/**
|
|
73
|
-
*
|
|
74
|
-
*/
|
|
75
|
-
commandId: string;
|
|
76
|
-
/**
|
|
77
|
-
* In addition to the mandatory command property, an alternative command can be defined.
|
|
78
|
-
* It will be shown and invoked when pressing Alt while opening a menu.
|
|
90
|
+
* Optional label. Will be rendered as text of the menu item.
|
|
79
91
|
*/
|
|
80
|
-
|
|
92
|
+
readonly label: string;
|
|
81
93
|
/**
|
|
82
|
-
*
|
|
83
|
-
* label will be used instead.
|
|
94
|
+
* Icon classes for the menu node. If present, these will produce an icon to the left of the label in browser-style menus.
|
|
84
95
|
*/
|
|
85
|
-
|
|
96
|
+
readonly icon?: string;
|
|
86
97
|
}
|
|
87
98
|
|
|
88
|
-
export namespace
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return isObject(arg) && 'commandId' in arg;
|
|
99
|
+
export namespace RenderedMenuNode {
|
|
100
|
+
export function is(node: object): node is RenderedMenuNode {
|
|
101
|
+
return isObject<RenderedMenuNode>(node) && typeof node.label === 'string';
|
|
92
102
|
}
|
|
93
103
|
}
|
|
94
104
|
|
|
95
|
-
|
|
96
|
-
* Additional options when creating a new submenu.
|
|
97
|
-
*/
|
|
98
|
-
export interface SubMenuOptions extends Pick<MenuAction, 'order'>, Pick<MenuNodeMetadata, 'when'>, Partial<Pick<CompoundMenuNode, 'role' | 'label' | 'icon'>> {
|
|
99
|
-
/**
|
|
100
|
-
* The class to use for the submenu icon.
|
|
101
|
-
* @deprecated use `icon` instead;
|
|
102
|
-
*/
|
|
103
|
-
iconClass?: string;
|
|
104
|
-
}
|
|
105
|
+
export type CommandMenu = MenuNode & RenderedMenuNode & Action;
|
|
105
106
|
|
|
106
|
-
export
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
Group,
|
|
111
|
-
/** Indicates that the node's children should be treated as though they were direct children of the node's parent */
|
|
112
|
-
Flat,
|
|
107
|
+
export namespace CommandMenu {
|
|
108
|
+
export function is(node: MenuNode): node is CommandMenu {
|
|
109
|
+
return RenderedMenuNode.is(node) && Action.is(node);
|
|
110
|
+
}
|
|
113
111
|
}
|
|
114
112
|
|
|
115
|
-
export
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* @deprecated @since 1.28 use `role` instead.
|
|
122
|
-
* Whether the item should be rendered as a submenu.
|
|
123
|
-
*/
|
|
124
|
-
readonly isSubmenu: boolean;
|
|
125
|
-
/**
|
|
126
|
-
* How the node and its children should be rendered. See {@link CompoundMenuNodeRole}.
|
|
127
|
-
*/
|
|
128
|
-
readonly role: CompoundMenuNodeRole;
|
|
113
|
+
export type Group = CompoundMenuNode;
|
|
114
|
+
export namespace Group {
|
|
115
|
+
export function is(obj: unknown): obj is Group {
|
|
116
|
+
return CompoundMenuNode.is(obj) && !RenderedMenuNode.is(obj);
|
|
117
|
+
}
|
|
129
118
|
}
|
|
130
119
|
|
|
131
|
-
export
|
|
132
|
-
/**
|
|
133
|
-
* Inserts the given node at the position indicated by `sortString`.
|
|
134
|
-
*
|
|
135
|
-
* @returns a disposable which, when called, will remove the given node again.
|
|
136
|
-
*/
|
|
137
|
-
addNode(node: MenuNode): Disposable;
|
|
138
|
-
/**
|
|
139
|
-
* Removes the first node with the given id.
|
|
140
|
-
*
|
|
141
|
-
* @param id node id.
|
|
142
|
-
* @returns true if the id was present
|
|
143
|
-
*/
|
|
144
|
-
removeNode(id: string): boolean;
|
|
120
|
+
export type Submenu = CompoundMenuNode & RenderedMenuNode;
|
|
145
121
|
|
|
122
|
+
export interface CompoundMenuNode extends MenuNode {
|
|
123
|
+
children: MenuNode[];
|
|
124
|
+
contextKeyOverlays?: Record<string, string>;
|
|
146
125
|
/**
|
|
147
|
-
*
|
|
126
|
+
* Whether the group or submenu contains any visible children
|
|
127
|
+
*
|
|
128
|
+
* @param effectiveMenuPath The menu path where visibility is checked
|
|
129
|
+
* @param contextMatcher The context matcher to use
|
|
130
|
+
* @param context the context to use
|
|
131
|
+
* @param args the command arguments, if applicable
|
|
148
132
|
*/
|
|
149
|
-
|
|
150
|
-
}
|
|
133
|
+
isEmpty<T>(effectiveMenuPath: MenuPath, contextMatcher: ContextExpressionMatcher<T>, context: T | undefined, ...args: unknown[]): boolean;
|
|
134
|
+
};
|
|
151
135
|
|
|
152
136
|
export namespace CompoundMenuNode {
|
|
153
|
-
export function is(node?:
|
|
154
|
-
|
|
155
|
-
if (!is(node)) { return undefined; }
|
|
156
|
-
return node.role ?? (node.label ? CompoundMenuNodeRole.Submenu : CompoundMenuNodeRole.Group);
|
|
157
|
-
}
|
|
137
|
+
export function is(node?: unknown): node is CompoundMenuNode { return isObject<CompoundMenuNode>(node) && Array.isArray(node.children); }
|
|
138
|
+
|
|
158
139
|
export function sortChildren(m1: MenuNode, m2: MenuNode): number {
|
|
159
140
|
// The navigation group is special as it will always be sorted to the top/beginning of a menu.
|
|
160
141
|
if (isNavigationGroup(m1)) {
|
|
@@ -166,18 +147,6 @@ export namespace CompoundMenuNode {
|
|
|
166
147
|
return m1.sortString.localeCompare(m2.sortString);
|
|
167
148
|
}
|
|
168
149
|
|
|
169
|
-
/** Collapses the children of any subemenus with role {@link CompoundMenuNodeRole Flat} and sorts */
|
|
170
|
-
export function getFlatChildren(children: ReadonlyArray<MenuNode>): MenuNode[] {
|
|
171
|
-
const childrenToMerge: ReadonlyArray<MenuNode>[] = [];
|
|
172
|
-
return children.filter(child => {
|
|
173
|
-
if (getRole(child) === CompoundMenuNodeRole.Flat) {
|
|
174
|
-
childrenToMerge.push((child as CompoundMenuNode).children);
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
return true;
|
|
178
|
-
}).concat(...childrenToMerge).sort(sortChildren);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
150
|
/**
|
|
182
151
|
* Indicates whether the given node is the special `navigation` menu.
|
|
183
152
|
*
|
|
@@ -188,34 +157,19 @@ export namespace CompoundMenuNode {
|
|
|
188
157
|
export function isNavigationGroup(node: MenuNode): node is CompoundMenuNode {
|
|
189
158
|
return is(node) && node.id === 'navigation';
|
|
190
159
|
}
|
|
191
|
-
|
|
192
|
-
export function isMutable(node?: MenuNode): node is MutableCompoundMenuNode {
|
|
193
|
-
const candidate = node as MutableCompoundMenuNode;
|
|
194
|
-
return is(candidate) && typeof candidate.addNode === 'function' && typeof candidate.removeNode === 'function';
|
|
195
|
-
}
|
|
196
160
|
}
|
|
197
161
|
|
|
198
|
-
export interface
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return
|
|
162
|
+
export interface MutableCompoundMenuNode {
|
|
163
|
+
addNode(...node: MenuNode[]): void;
|
|
164
|
+
removeNode(node: MenuNode): void;
|
|
165
|
+
getOrCreate(menuPath: MenuPath, pathIndex: number, endIndex: number): CompoundMenuNode & MutableCompoundMenuNode;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export namespace MutableCompoundMenuNode {
|
|
169
|
+
export function is(node: unknown): node is MutableCompoundMenuNode {
|
|
170
|
+
return isObject<MutableCompoundMenuNode>(node)
|
|
171
|
+
&& typeof node.addNode === 'function'
|
|
172
|
+
&& typeof node.removeNode === 'function'
|
|
173
|
+
&& typeof node.getOrCreate === 'function';
|
|
207
174
|
}
|
|
208
175
|
}
|
|
209
|
-
|
|
210
|
-
export interface AlternativeHandlerMenuNode extends CommandMenuNode {
|
|
211
|
-
altNode: CommandMenuNode;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Base interface of the nodes used in the menu tree structure.
|
|
216
|
-
*/
|
|
217
|
-
export type MenuNode = MenuNodeMetadata
|
|
218
|
-
& MenuNodeRenderingData
|
|
219
|
-
& Partial<CompoundMenuNode>
|
|
220
|
-
& Partial<CommandMenuNode>
|
|
221
|
-
& Partial<AlternativeHandlerMenuNode>;
|
|
@@ -237,6 +237,10 @@ export class RpcProxyFactory<T extends object> implements ProxyHandler<T> {
|
|
|
237
237
|
// Prevent inversify from identifying this proxy as a promise object.
|
|
238
238
|
return undefined;
|
|
239
239
|
}
|
|
240
|
+
if (p === 'toJSON') {
|
|
241
|
+
// Prevent packr from attempting to serialize proxies with `toJSON`.
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
240
244
|
const isNotify = this.isNotification(p);
|
|
241
245
|
return (...args: any[]) => {
|
|
242
246
|
const method = p.toString();
|
|
@@ -333,4 +337,3 @@ export class JsonRpcProxyFactory<T extends object> extends RpcProxyFactory<T> {
|
|
|
333
337
|
decorate(injectable(), JsonRpcProxyFactory);
|
|
334
338
|
// eslint-disable-next-line deprecation/deprecation
|
|
335
339
|
decorate(unmanaged(), JsonRpcProxyFactory, 0);
|
|
336
|
-
|
|
@@ -18,12 +18,14 @@
|
|
|
18
18
|
|
|
19
19
|
import { inject, injectable, postConstruct } from 'inversify';
|
|
20
20
|
import {
|
|
21
|
-
ContextMenuRenderer,
|
|
21
|
+
ContextMenuRenderer, ContextMenuAccess, FrontendApplicationContribution, CommonCommands, coordinateFromAnchor, PreferenceService,
|
|
22
|
+
Anchor
|
|
22
23
|
} from '../../browser';
|
|
23
24
|
import { ElectronMainMenuFactory } from './electron-main-menu-factory';
|
|
24
25
|
import { ContextMenuContext } from '../../browser/menu/context-menu-context';
|
|
25
|
-
import { MenuPath, MenuContribution, MenuModelRegistry } from '../../common';
|
|
26
26
|
import { BrowserContextMenuAccess, BrowserContextMenuRenderer } from '../../browser/menu/browser-context-menu-renderer';
|
|
27
|
+
import { MenuPath, MenuContribution, MenuModelRegistry, CompoundMenuNode } from '../../common/menu';
|
|
28
|
+
import { ContextKeyService, ContextMatcher } from '../../browser/context-key-service';
|
|
27
29
|
|
|
28
30
|
export class ElectronContextMenuAccess extends ContextMenuAccess {
|
|
29
31
|
constructor(readonly menuHandle: Promise<number>) {
|
|
@@ -46,6 +48,9 @@ export class ElectronTextInputContextMenuContribution implements FrontendApplica
|
|
|
46
48
|
@inject(ContextMenuRenderer)
|
|
47
49
|
protected readonly contextMenuRenderer: ContextMenuRenderer;
|
|
48
50
|
|
|
51
|
+
@inject(ContextKeyService)
|
|
52
|
+
protected readonly contextKeyService: ContextKeyService;
|
|
53
|
+
|
|
49
54
|
onStart(): void {
|
|
50
55
|
window.document.addEventListener('contextmenu', event => {
|
|
51
56
|
if (event.target instanceof HTMLElement) {
|
|
@@ -55,6 +60,7 @@ export class ElectronTextInputContextMenuContribution implements FrontendApplica
|
|
|
55
60
|
event.stopPropagation();
|
|
56
61
|
this.contextMenuRenderer.render({
|
|
57
62
|
anchor: event,
|
|
63
|
+
contextKeyService: this.contextKeyService,
|
|
58
64
|
menuPath: ElectronTextInputContextMenu.MENU_PATH,
|
|
59
65
|
context: event.target,
|
|
60
66
|
onHide: () => target.focus()
|
|
@@ -84,10 +90,13 @@ export class ElectronContextMenuRenderer extends BrowserContextMenuRenderer {
|
|
|
84
90
|
@inject(PreferenceService)
|
|
85
91
|
protected readonly preferenceService: PreferenceService;
|
|
86
92
|
|
|
93
|
+
@inject(ElectronMainMenuFactory)
|
|
94
|
+
protected readonly electronMenuFactory: ElectronMainMenuFactory;
|
|
95
|
+
|
|
87
96
|
protected useNativeStyle: boolean = true;
|
|
88
97
|
|
|
89
|
-
constructor(
|
|
90
|
-
super(
|
|
98
|
+
constructor() {
|
|
99
|
+
super();
|
|
91
100
|
}
|
|
92
101
|
|
|
93
102
|
@postConstruct()
|
|
@@ -99,24 +108,31 @@ export class ElectronContextMenuRenderer extends BrowserContextMenuRenderer {
|
|
|
99
108
|
this.useNativeStyle = await window.electronTheiaCore.getTitleBarStyleAtStartup() === 'native';
|
|
100
109
|
}
|
|
101
110
|
|
|
102
|
-
protected override doRender(
|
|
111
|
+
protected override doRender(params: {
|
|
112
|
+
menuPath: MenuPath,
|
|
113
|
+
menu: CompoundMenuNode,
|
|
114
|
+
anchor: Anchor,
|
|
115
|
+
contextMatcher: ContextMatcher,
|
|
116
|
+
args?: any,
|
|
117
|
+
context?: HTMLElement,
|
|
118
|
+
onHide?: () => void
|
|
119
|
+
}): ContextMenuAccess {
|
|
103
120
|
if (this.useNativeStyle) {
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
const { x, y } = coordinateFromAnchor(anchor);
|
|
121
|
+
const contextMenu = this.electronMenuFactory.createElectronContextMenu(params.menuPath, params.menu, params.contextMatcher, params.args, params.context);
|
|
122
|
+
const { x, y } = coordinateFromAnchor(params.anchor);
|
|
107
123
|
|
|
108
|
-
const windowName =
|
|
124
|
+
const windowName = params.context?.ownerDocument.defaultView?.Window.name;
|
|
109
125
|
|
|
110
|
-
const menuHandle = window.electronTheiaCore.popup(
|
|
111
|
-
if (onHide) {
|
|
112
|
-
onHide();
|
|
126
|
+
const menuHandle = window.electronTheiaCore.popup(contextMenu, x, y, () => {
|
|
127
|
+
if (params.onHide) {
|
|
128
|
+
params.onHide();
|
|
113
129
|
}
|
|
114
130
|
}, windowName);
|
|
115
131
|
// native context menu stops the event loop, so there is no keyboard events
|
|
116
132
|
this.context.resetAltPressed();
|
|
117
133
|
return new ElectronContextMenuAccess(menuHandle);
|
|
118
134
|
} else {
|
|
119
|
-
const menuAccess = super.doRender(
|
|
135
|
+
const menuAccess = super.doRender(params);
|
|
120
136
|
const node = (menuAccess as BrowserContextMenuAccess).menu.node;
|
|
121
137
|
const topPanelHeight = document.getElementById('theia-top-panel')?.clientHeight ?? 0;
|
|
122
138
|
// ensure the context menu is not displayed outside of the main area
|