@theia/core 1.17.2 → 1.18.0-next.05f289b3

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 (147) hide show
  1. package/README.md +2 -2
  2. package/lib/browser/breadcrumbs/breadcrumb-popup-container.d.ts +50 -0
  3. package/lib/browser/breadcrumbs/breadcrumb-popup-container.d.ts.map +1 -0
  4. package/lib/browser/breadcrumbs/breadcrumb-popup-container.js +115 -0
  5. package/lib/browser/breadcrumbs/breadcrumb-popup-container.js.map +1 -0
  6. package/lib/browser/breadcrumbs/breadcrumb-renderer.d.ts +28 -0
  7. package/lib/browser/breadcrumbs/breadcrumb-renderer.d.ts.map +1 -0
  8. package/lib/browser/breadcrumbs/breadcrumb-renderer.js +43 -0
  9. package/lib/browser/breadcrumbs/breadcrumb-renderer.js.map +1 -0
  10. package/lib/browser/breadcrumbs/breadcrumbs-constants.d.ts +65 -0
  11. package/lib/browser/breadcrumbs/breadcrumbs-constants.d.ts.map +1 -0
  12. package/lib/browser/breadcrumbs/breadcrumbs-constants.js +28 -0
  13. package/lib/browser/breadcrumbs/breadcrumbs-constants.js.map +1 -0
  14. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts +61 -0
  15. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -0
  16. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +190 -0
  17. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -0
  18. package/lib/browser/breadcrumbs/breadcrumbs-service.d.ts +48 -0
  19. package/lib/browser/breadcrumbs/breadcrumbs-service.d.ts.map +1 -0
  20. package/lib/browser/breadcrumbs/breadcrumbs-service.js +120 -0
  21. package/lib/browser/breadcrumbs/breadcrumbs-service.js.map +1 -0
  22. package/lib/browser/breadcrumbs/index.d.ts +21 -0
  23. package/lib/browser/breadcrumbs/index.d.ts.map +1 -0
  24. package/lib/browser/breadcrumbs/index.js +33 -0
  25. package/lib/browser/breadcrumbs/index.js.map +1 -0
  26. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  27. package/lib/browser/common-frontend-contribution.js +40 -0
  28. package/lib/browser/common-frontend-contribution.js.map +1 -1
  29. package/lib/browser/context-menu-renderer.d.ts +6 -6
  30. package/lib/browser/context-menu-renderer.d.ts.map +1 -1
  31. package/lib/browser/context-menu-renderer.js +7 -1
  32. package/lib/browser/context-menu-renderer.js.map +1 -1
  33. package/lib/browser/core-preferences.d.ts +3 -2
  34. package/lib/browser/core-preferences.d.ts.map +1 -1
  35. package/lib/browser/core-preferences.js +49 -43
  36. package/lib/browser/core-preferences.js.map +1 -1
  37. package/lib/browser/dialogs.d.ts.map +1 -1
  38. package/lib/browser/dialogs.js +1 -2
  39. package/lib/browser/dialogs.js.map +1 -1
  40. package/lib/browser/diff-uris.d.ts.map +1 -1
  41. package/lib/browser/diff-uris.js +2 -1
  42. package/lib/browser/diff-uris.js.map +1 -1
  43. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  44. package/lib/browser/frontend-application-module.js +25 -16
  45. package/lib/browser/frontend-application-module.js.map +1 -1
  46. package/lib/browser/index.d.ts +1 -0
  47. package/lib/browser/index.d.ts.map +1 -1
  48. package/lib/browser/index.js +1 -0
  49. package/lib/browser/index.js.map +1 -1
  50. package/lib/browser/label-provider.d.ts +2 -2
  51. package/lib/browser/label-provider.d.ts.map +1 -1
  52. package/lib/browser/label-provider.js +3 -2
  53. package/lib/browser/label-provider.js.map +1 -1
  54. package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
  55. package/lib/browser/menu/browser-context-menu-renderer.js +1 -1
  56. package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
  57. package/lib/browser/navigatable-types.d.ts +49 -0
  58. package/lib/browser/navigatable-types.d.ts.map +1 -0
  59. package/lib/browser/navigatable-types.js +58 -0
  60. package/lib/browser/navigatable-types.js.map +1 -0
  61. package/lib/browser/navigatable.d.ts +2 -32
  62. package/lib/browser/navigatable.d.ts.map +1 -1
  63. package/lib/browser/navigatable.js +12 -40
  64. package/lib/browser/navigatable.js.map +1 -1
  65. package/lib/browser/progress-status-bar-item.js +1 -1
  66. package/lib/browser/progress-status-bar-item.js.map +1 -1
  67. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  68. package/lib/browser/quick-input/quick-command-service.js +2 -1
  69. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  70. package/lib/browser/quick-input/quick-input-service.d.ts +4 -0
  71. package/lib/browser/quick-input/quick-input-service.d.ts.map +1 -1
  72. package/lib/browser/quick-input/quick-input-service.js.map +1 -1
  73. package/lib/browser/shell/application-shell.d.ts +7 -3
  74. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  75. package/lib/browser/shell/application-shell.js +11 -8
  76. package/lib/browser/shell/application-shell.js.map +1 -1
  77. package/lib/browser/shell/tab-bar-toolbar.d.ts.map +1 -1
  78. package/lib/browser/shell/tab-bar-toolbar.js +3 -2
  79. package/lib/browser/shell/tab-bar-toolbar.js.map +1 -1
  80. package/lib/browser/shell/tab-bars.d.ts +9 -3
  81. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  82. package/lib/browser/shell/tab-bars.js +38 -5
  83. package/lib/browser/shell/tab-bars.js.map +1 -1
  84. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  85. package/lib/browser/status-bar/status-bar.js +4 -1
  86. package/lib/browser/status-bar/status-bar.js.map +1 -1
  87. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  88. package/lib/browser/tree/tree-widget.js +1 -1
  89. package/lib/browser/tree/tree-widget.js.map +1 -1
  90. package/lib/browser/view-container.d.ts +10 -0
  91. package/lib/browser/view-container.d.ts.map +1 -1
  92. package/lib/browser/view-container.js +26 -2
  93. package/lib/browser/view-container.js.map +1 -1
  94. package/lib/browser/widgets/alert-message.d.ts.map +1 -1
  95. package/lib/browser/widgets/alert-message.js +5 -4
  96. package/lib/browser/widgets/alert-message.js.map +1 -1
  97. package/lib/browser/widgets/react-renderer.d.ts +3 -1
  98. package/lib/browser/widgets/react-renderer.d.ts.map +1 -1
  99. package/lib/browser/widgets/react-renderer.js +7 -2
  100. package/lib/browser/widgets/react-renderer.js.map +1 -1
  101. package/lib/browser/widgets/widget.d.ts +4 -0
  102. package/lib/browser/widgets/widget.d.ts.map +1 -1
  103. package/lib/browser/widgets/widget.js +16 -2
  104. package/lib/browser/widgets/widget.js.map +1 -1
  105. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  106. package/lib/electron-browser/menu/electron-context-menu-renderer.js +1 -1
  107. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  108. package/package.json +3 -3
  109. package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -0
  110. package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -0
  111. package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -0
  112. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +187 -0
  113. package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -0
  114. package/src/browser/breadcrumbs/index.ts +21 -0
  115. package/src/browser/common-frontend-contribution.ts +45 -0
  116. package/src/browser/context-menu-renderer.ts +10 -2
  117. package/src/browser/core-preferences.ts +52 -45
  118. package/src/browser/dialogs.ts +2 -3
  119. package/src/browser/diff-uris.ts +2 -1
  120. package/src/browser/frontend-application-module.ts +36 -12
  121. package/src/browser/index.ts +1 -0
  122. package/src/browser/label-provider.ts +3 -2
  123. package/src/browser/menu/browser-context-menu-renderer.ts +2 -2
  124. package/src/browser/navigatable-types.ts +78 -0
  125. package/src/browser/navigatable.ts +2 -61
  126. package/src/browser/progress-status-bar-item.ts +1 -1
  127. package/src/browser/quick-input/quick-command-service.ts +2 -1
  128. package/src/browser/quick-input/quick-input-service.ts +4 -0
  129. package/src/browser/shell/application-shell.ts +23 -15
  130. package/src/browser/shell/tab-bar-toolbar.tsx +4 -3
  131. package/src/browser/shell/tab-bars.ts +43 -9
  132. package/src/browser/status-bar/status-bar.tsx +3 -1
  133. package/src/browser/style/breadcrumbs.css +131 -0
  134. package/src/browser/style/index.css +11 -0
  135. package/src/browser/style/menus.css +14 -4
  136. package/src/browser/style/scrollbars.css +33 -14
  137. package/src/browser/style/sidepanel.css +11 -4
  138. package/src/browser/style/status-bar.css +6 -1
  139. package/src/browser/style/tabs.css +59 -34
  140. package/src/browser/style/tree.css +0 -1
  141. package/src/browser/style/view-container.css +9 -0
  142. package/src/browser/tree/tree-widget.tsx +4 -2
  143. package/src/browser/view-container.ts +35 -1
  144. package/src/browser/widgets/alert-message.tsx +5 -4
  145. package/src/browser/widgets/react-renderer.tsx +5 -2
  146. package/src/browser/widgets/widget.ts +16 -1
  147. package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -2
@@ -73,7 +73,6 @@
73
73
  }
74
74
 
75
75
  .theia-ExpansionToggle.theia-mod-busy {
76
- background: var(--theia-icon-loading) center center no-repeat;
77
76
  animation: theia-spin 1.25s linear infinite;
78
77
  }
79
78
 
@@ -75,10 +75,19 @@
75
75
  }
76
76
 
77
77
  .theia-view-container .part > .header .label {
78
+ flex: 0;
79
+ white-space: nowrap;
80
+ text-overflow: ellipsis;
81
+ }
82
+
83
+ .theia-view-container .part > .header .description {
78
84
  flex: 1;
79
85
  overflow: hidden;
80
86
  white-space: nowrap;
81
87
  text-overflow: ellipsis;
88
+ padding-left: var(--theia-ui-padding);
89
+ text-transform: none;
90
+ opacity: 0.6;
82
91
  }
83
92
 
84
93
  .theia-view-container .part > .body {
@@ -20,7 +20,9 @@ import { Disposable, MenuPath, SelectionService } from '../../common';
20
20
  import { Key, KeyCode, KeyModifier } from '../keyboard/keys';
21
21
  import { ContextMenuRenderer } from '../context-menu-renderer';
22
22
  import { StatefulWidget } from '../shell';
23
- import { EXPANSION_TOGGLE_CLASS, SELECTED_CLASS, COLLAPSED_CLASS, FOCUS_CLASS, BUSY_CLASS, CODICON_TREE_ITEM_CLASSES, Widget, UnsafeWidgetUtilities } from '../widgets';
23
+ import {
24
+ EXPANSION_TOGGLE_CLASS, SELECTED_CLASS, COLLAPSED_CLASS, FOCUS_CLASS, BUSY_CLASS, CODICON_TREE_ITEM_CLASSES, CODICON_LOADING_CLASSES, Widget, UnsafeWidgetUtilities
25
+ } from '../widgets';
24
26
  import { TreeNode, CompositeTreeNode } from './tree';
25
27
  import { TreeModel } from './tree-model';
26
28
  import { ExpandableTreeNode } from './tree-expansion';
@@ -564,7 +566,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget {
564
566
  classes.push(COLLAPSED_CLASS);
565
567
  }
566
568
  if (node.busy) {
567
- classes.push(BUSY_CLASS);
569
+ classes.push(BUSY_CLASS, ...CODICON_LOADING_CLASSES);
568
570
  } else {
569
571
  classes.push(...CODICON_TREE_ITEM_CLASSES);
570
572
  }
@@ -47,6 +47,17 @@ export class ViewContainerIdentifier {
47
47
  progressLocationId?: string;
48
48
  }
49
49
 
50
+ export interface DescriptionWidget {
51
+ description: string;
52
+ onDidChangeDescription: Emitter<void>;
53
+ }
54
+
55
+ export namespace DescriptionWidget {
56
+ export function is(arg: Object | undefined): arg is DescriptionWidget {
57
+ return !!arg && typeof arg === 'object' && 'onDidChangeDescription' in arg;
58
+ }
59
+ }
60
+
50
61
  /**
51
62
  * A view container holds an arbitrary number of widgets inside a split panel.
52
63
  * Each widget is wrapped in a _part_ that displays the widget title and toolbar
@@ -704,6 +715,8 @@ export class ViewContainerPart extends BaseWidget {
704
715
  readonly onTitleChanged = this.onTitleChangedEmitter.event;
705
716
  protected readonly onDidFocusEmitter = new Emitter<this>();
706
717
  readonly onDidFocus = this.onDidFocusEmitter.event;
718
+ protected readonly onDidChangeDescriptionEmitter = new Emitter<void>();
719
+ readonly onDidChangeDescription = this.onDidChangeDescriptionEmitter.event;
707
720
 
708
721
  protected readonly toolbar: TabBarToolbar;
709
722
 
@@ -732,6 +745,11 @@ export class ViewContainerPart extends BaseWidget {
732
745
  this.wrapped.title.changed.connect(fireTitleChanged);
733
746
  this.toDispose.push(Disposable.create(() => this.wrapped.title.changed.disconnect(fireTitleChanged)));
734
747
 
748
+ if (DescriptionWidget.is(this.wrapped)) {
749
+ const fireDescriptionChanged = () => this.onDidChangeDescriptionEmitter.fire(undefined);
750
+ this.toDispose.push(this.wrapped?.onDidChangeDescription.event(fireDescriptionChanged));
751
+ }
752
+
735
753
  const { header, body, disposable } = this.createContent();
736
754
  this.header = header;
737
755
  this.body = body;
@@ -747,6 +765,7 @@ export class ViewContainerPart extends BaseWidget {
747
765
  this.collapsedEmitter,
748
766
  this.contextMenuEmitter,
749
767
  this.onTitleChangedEmitter,
768
+ this.onDidChangeDescriptionEmitter,
750
769
  this.registerContextMenu(),
751
770
  this.onDidFocusEmitter,
752
771
  // focus event does not bubble, capture it
@@ -892,15 +911,29 @@ export class ViewContainerPart extends BaseWidget {
892
911
 
893
912
  const title = document.createElement('span');
894
913
  title.classList.add('label', 'noselect');
914
+
915
+ const description = document.createElement('span');
916
+ description.classList.add('description');
917
+
895
918
  const updateTitle = () => title.innerText = this.wrapped.title.label;
896
919
  const updateCaption = () => title.title = this.wrapped.title.caption || this.wrapped.title.label;
920
+ const updateDescription = () => {
921
+ description.innerText = DescriptionWidget.is(this.wrapped) && !this.collapsed && this.wrapped.description || '';
922
+ };
923
+
897
924
  updateTitle();
898
925
  updateCaption();
926
+ updateDescription();
927
+
899
928
  disposable.pushAll([
900
929
  this.onTitleChanged(updateTitle),
901
- this.onTitleChanged(updateCaption)
930
+ this.onTitleChanged(updateCaption),
931
+ this.onDidChangeDescription(updateDescription),
932
+ this.onCollapsed(updateDescription),
902
933
  ]);
903
934
  header.appendChild(title);
935
+ header.appendChild(description);
936
+
904
937
  return {
905
938
  header,
906
939
  disposable
@@ -998,6 +1031,7 @@ export namespace ViewContainerPart {
998
1031
  collapsed: boolean;
999
1032
  hidden: boolean;
1000
1033
  relativeSize?: number;
1034
+ description?: string;
1001
1035
  }
1002
1036
 
1003
1037
  export function closestPart(element: Element | EventTarget | null, selector: string = 'div.part'): Element | undefined {
@@ -15,6 +15,7 @@
15
15
  ********************************************************************************/
16
16
 
17
17
  import React = require('react');
18
+ import { codicon } from './widget';
18
19
 
19
20
  export type MessageType = keyof AlertMessageIcon;
20
21
 
@@ -26,10 +27,10 @@ interface AlertMessageIcon {
26
27
  }
27
28
 
28
29
  const AlertMessageIcon = {
29
- INFO: 'fa fa-info-circle',
30
- SUCCESS: 'fa fa-check-circle',
31
- WARNING: 'fa fa-exclamation-circle',
32
- ERROR: 'fa fa-times-circle'
30
+ INFO: codicon('info'),
31
+ SUCCESS: codicon('pass'),
32
+ WARNING: codicon('warning'),
33
+ ERROR: codicon('error')
33
34
  };
34
35
 
35
36
  export interface AlertMessageProps {
@@ -14,16 +14,19 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
- import { injectable } from 'inversify';
17
+ import { inject, injectable, optional } from 'inversify';
18
18
  import * as React from 'react';
19
19
  import * as ReactDOM from 'react-dom';
20
20
  import { Disposable } from '../../common';
21
21
 
22
+ export type RendererHost = HTMLElement;
23
+ export const RendererHost = Symbol('RendererHost');
24
+
22
25
  @injectable()
23
26
  export class ReactRenderer implements Disposable {
24
27
  readonly host: HTMLElement;
25
28
  constructor(
26
- host?: HTMLElement
29
+ @inject(RendererHost) @optional() host?: RendererHost
27
30
  ) {
28
31
  this.host = host || document.createElement('div');
29
32
  }
@@ -30,11 +30,26 @@ decorate(unmanaged(), Widget, 0);
30
30
  export * from '@phosphor/widgets';
31
31
  export * from '@phosphor/messaging';
32
32
 
33
+ export const ACTION_ITEM = 'action-item';
34
+
35
+ export function codiconArray(name: string, actionItem = false): string[] {
36
+ const array = ['codicon', `codicon-${name}`];
37
+ if (actionItem) {
38
+ array.push(ACTION_ITEM);
39
+ }
40
+ return array;
41
+ }
42
+
43
+ export function codicon(name: string, actionItem = false): string {
44
+ return `codicon codicon-${name}${actionItem ? ` ${ACTION_ITEM}` : ''}`;
45
+ }
46
+
33
47
  export const DISABLED_CLASS = 'theia-mod-disabled';
34
48
  export const EXPANSION_TOGGLE_CLASS = 'theia-ExpansionToggle';
35
- export const CODICON_TREE_ITEM_CLASSES = ['codicon', 'codicon-chevron-down'];
49
+ export const CODICON_TREE_ITEM_CLASSES = codiconArray('chevron-down');
36
50
  export const COLLAPSED_CLASS = 'theia-mod-collapsed';
37
51
  export const BUSY_CLASS = 'theia-mod-busy';
52
+ export const CODICON_LOADING_CLASSES = codiconArray('loading');
38
53
  export const SELECTED_CLASS = 'theia-mod-selected';
39
54
  export const FOCUS_CLASS = 'theia-mod-focus';
40
55
  export const DEFAULT_SCROLL_OPTIONS: PerfectScrollbar.Options = {
@@ -18,7 +18,7 @@
18
18
 
19
19
  import * as electron from '../../../shared/electron';
20
20
  import { inject, injectable } from 'inversify';
21
- import { ContextMenuRenderer, RenderContextMenuOptions, ContextMenuAccess, FrontendApplicationContribution, CommonCommands } from '../../browser';
21
+ import { ContextMenuRenderer, RenderContextMenuOptions, ContextMenuAccess, FrontendApplicationContribution, CommonCommands, coordinateFromAnchor } from '../../browser';
22
22
  import { ElectronMainMenuFactory } from './electron-main-menu-factory';
23
23
  import { ContextMenuContext } from '../../browser/menu/context-menu-context';
24
24
  import { MenuPath, MenuContribution, MenuModelRegistry } from '../../common';
@@ -84,7 +84,7 @@ export class ElectronContextMenuRenderer extends ContextMenuRenderer {
84
84
 
85
85
  protected doRender({ menuPath, anchor, args, onHide }: RenderContextMenuOptions): ElectronContextMenuAccess {
86
86
  const menu = this.menuFactory.createContextMenu(menuPath, args);
87
- const { x, y } = anchor instanceof MouseEvent ? { x: anchor.clientX, y: anchor.clientY } : anchor!;
87
+ const { x, y } = coordinateFromAnchor(anchor);
88
88
  const zoom = electron.webFrame.getZoomFactor();
89
89
  // x and y values must be Ints or else there is a conversion error
90
90
  menu.popup({ x: Math.round(x * zoom), y: Math.round(y * zoom) });