@theia/core 1.74.0-next.9 → 1.74.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 (209) hide show
  1. package/README.md +10 -10
  2. package/i18n/nls.cs.json +143 -16
  3. package/i18n/nls.de.json +143 -16
  4. package/i18n/nls.es.json +143 -16
  5. package/i18n/nls.fr.json +143 -16
  6. package/i18n/nls.hu.json +143 -16
  7. package/i18n/nls.it.json +143 -16
  8. package/i18n/nls.ja.json +143 -16
  9. package/i18n/nls.json +143 -16
  10. package/i18n/nls.ko.json +143 -16
  11. package/i18n/nls.pl.json +143 -16
  12. package/i18n/nls.pt-br.json +143 -16
  13. package/i18n/nls.ru.json +143 -16
  14. package/i18n/nls.tr.json +143 -16
  15. package/i18n/nls.zh-cn.json +143 -16
  16. package/i18n/nls.zh-tw.json +143 -16
  17. package/lib/browser/browser-clipboard-service.d.ts +3 -0
  18. package/lib/browser/browser-clipboard-service.d.ts.map +1 -1
  19. package/lib/browser/browser-clipboard-service.js +8 -1
  20. package/lib/browser/browser-clipboard-service.js.map +1 -1
  21. package/lib/browser/catalog.json +419 -41
  22. package/lib/browser/clipboard-service.d.ts +11 -0
  23. package/lib/browser/clipboard-service.d.ts.map +1 -1
  24. package/lib/browser/clipboard-service.js.map +1 -1
  25. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  26. package/lib/browser/common-frontend-contribution.js +7 -7
  27. package/lib/browser/common-frontend-contribution.js.map +1 -1
  28. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  29. package/lib/browser/frontend-application-module.js +9 -0
  30. package/lib/browser/frontend-application-module.js.map +1 -1
  31. package/lib/browser/frontend-application.d.ts.map +1 -1
  32. package/lib/browser/frontend-application.js +12 -2
  33. package/lib/browser/frontend-application.js.map +1 -1
  34. package/lib/browser/index.d.ts +1 -0
  35. package/lib/browser/index.d.ts.map +1 -1
  36. package/lib/browser/index.js +1 -0
  37. package/lib/browser/index.js.map +1 -1
  38. package/lib/browser/keybinding.d.ts.map +1 -1
  39. package/lib/browser/keybinding.js +12 -7
  40. package/lib/browser/keybinding.js.map +1 -1
  41. package/lib/browser/perspective-service.d.ts +173 -0
  42. package/lib/browser/perspective-service.d.ts.map +1 -0
  43. package/lib/browser/perspective-service.js +484 -0
  44. package/lib/browser/perspective-service.js.map +1 -0
  45. package/lib/browser/perspective-service.spec.d.ts +2 -0
  46. package/lib/browser/perspective-service.spec.d.ts.map +1 -0
  47. package/lib/browser/perspective-service.spec.js +1806 -0
  48. package/lib/browser/perspective-service.spec.js.map +1 -0
  49. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  50. package/lib/browser/preferences/preference-contribution.js +9 -1
  51. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  52. package/lib/browser/preferences/preference-service.spec.js +63 -0
  53. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  54. package/lib/browser/shell/application-shell.d.ts +7 -0
  55. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  56. package/lib/browser/shell/application-shell.js +38 -28
  57. package/lib/browser/shell/application-shell.js.map +1 -1
  58. package/lib/browser/shell/shell-layout-restorer.d.ts +9 -0
  59. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  60. package/lib/browser/shell/shell-layout-restorer.js +124 -14
  61. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  62. package/lib/browser/shell/shell-layout-restorer.spec.d.ts +2 -0
  63. package/lib/browser/shell/shell-layout-restorer.spec.d.ts.map +1 -0
  64. package/lib/browser/shell/shell-layout-restorer.spec.js +539 -0
  65. package/lib/browser/shell/shell-layout-restorer.spec.js.map +1 -0
  66. package/lib/browser/shell/view-contribution.d.ts +2 -0
  67. package/lib/browser/shell/view-contribution.d.ts.map +1 -1
  68. package/lib/browser/shell/view-contribution.js +5 -1
  69. package/lib/browser/shell/view-contribution.js.map +1 -1
  70. package/lib/browser/status-bar/status-bar.d.ts +2 -0
  71. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  72. package/lib/browser/status-bar/status-bar.js +11 -3
  73. package/lib/browser/status-bar/status-bar.js.map +1 -1
  74. package/lib/browser/tree/tree-widget.d.ts +7 -33
  75. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  76. package/lib/browser/tree/tree-widget.js +7 -54
  77. package/lib/browser/tree/tree-widget.js.map +1 -1
  78. package/lib/browser/widgets/index.d.ts +1 -0
  79. package/lib/browser/widgets/index.d.ts.map +1 -1
  80. package/lib/browser/widgets/index.js +1 -0
  81. package/lib/browser/widgets/index.js.map +1 -1
  82. package/lib/browser/widgets/select-component.d.ts +2 -2
  83. package/lib/browser/widgets/select-component.d.ts.map +1 -1
  84. package/lib/browser/widgets/select-component.js +42 -12
  85. package/lib/browser/widgets/select-component.js.map +1 -1
  86. package/lib/browser/widgets/tab-bar-tracker.d.ts +23 -0
  87. package/lib/browser/widgets/tab-bar-tracker.d.ts.map +1 -0
  88. package/lib/browser/widgets/tab-bar-tracker.js +65 -0
  89. package/lib/browser/widgets/tab-bar-tracker.js.map +1 -0
  90. package/lib/browser/widgets/tab-bar-tracker.spec.d.ts +2 -0
  91. package/lib/browser/widgets/tab-bar-tracker.spec.d.ts.map +1 -0
  92. package/lib/browser/widgets/tab-bar-tracker.spec.js +109 -0
  93. package/lib/browser/widgets/tab-bar-tracker.spec.js.map +1 -0
  94. package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts +13 -2
  95. package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts.map +1 -1
  96. package/lib/browser-only/messaging/frontend-only-service-connection-provider.js +31 -3
  97. package/lib/browser-only/messaging/frontend-only-service-connection-provider.js.map +1 -1
  98. package/lib/common/preferences/index.d.ts +1 -0
  99. package/lib/common/preferences/index.d.ts.map +1 -1
  100. package/lib/common/preferences/index.js +1 -0
  101. package/lib/common/preferences/index.js.map +1 -1
  102. package/lib/common/preferences/preference-provider.d.ts +15 -0
  103. package/lib/common/preferences/preference-provider.d.ts.map +1 -1
  104. package/lib/common/preferences/preference-provider.js +21 -1
  105. package/lib/common/preferences/preference-provider.js.map +1 -1
  106. package/lib/common/preferences/preference-provider.spec.js +17 -0
  107. package/lib/common/preferences/preference-provider.spec.js.map +1 -1
  108. package/lib/common/preferences/preference-scope.d.ts +6 -1
  109. package/lib/common/preferences/preference-scope.d.ts.map +1 -1
  110. package/lib/common/preferences/preference-scope.js +5 -0
  111. package/lib/common/preferences/preference-scope.js.map +1 -1
  112. package/lib/common/preferences/preference-scope.spec.js +5 -3
  113. package/lib/common/preferences/preference-scope.spec.js.map +1 -1
  114. package/lib/common/preferences/preference-service.d.ts +19 -0
  115. package/lib/common/preferences/preference-service.d.ts.map +1 -1
  116. package/lib/common/preferences/preference-service.js +34 -5
  117. package/lib/common/preferences/preference-service.js.map +1 -1
  118. package/lib/common/preferences/session-preference-provider.d.ts +17 -0
  119. package/lib/common/preferences/session-preference-provider.d.ts.map +1 -0
  120. package/lib/common/preferences/session-preference-provider.js +77 -0
  121. package/lib/common/preferences/session-preference-provider.js.map +1 -0
  122. package/lib/common/preferences/session-preference-provider.spec.d.ts +2 -0
  123. package/lib/common/preferences/session-preference-provider.spec.d.ts.map +1 -0
  124. package/lib/common/preferences/session-preference-provider.spec.js +71 -0
  125. package/lib/common/preferences/session-preference-provider.spec.js.map +1 -0
  126. package/lib/electron-browser/electron-clipboard-service.d.ts +3 -0
  127. package/lib/electron-browser/electron-clipboard-service.d.ts.map +1 -1
  128. package/lib/electron-browser/electron-clipboard-service.js +6 -0
  129. package/lib/electron-browser/electron-clipboard-service.js.map +1 -1
  130. package/lib/electron-browser/preload.d.ts.map +1 -1
  131. package/lib/electron-browser/preload.js +2 -1
  132. package/lib/electron-browser/preload.js.map +1 -1
  133. package/lib/electron-common/electron-api.d.ts +2 -0
  134. package/lib/electron-common/electron-api.d.ts.map +1 -1
  135. package/lib/electron-common/electron-api.js +2 -1
  136. package/lib/electron-common/electron-api.js.map +1 -1
  137. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  138. package/lib/electron-main/electron-api-main.js +43 -0
  139. package/lib/electron-main/electron-api-main.js.map +1 -1
  140. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  141. package/lib/electron-main/electron-main-application.js +3 -0
  142. package/lib/electron-main/electron-main-application.js.map +1 -1
  143. package/lib/electron-node/hosting/electron-backend-hosting-module.d.ts.map +1 -1
  144. package/lib/electron-node/hosting/electron-backend-hosting-module.js +7 -0
  145. package/lib/electron-node/hosting/electron-backend-hosting-module.js.map +1 -1
  146. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.d.ts +2 -0
  147. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.d.ts.map +1 -0
  148. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.js +39 -0
  149. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.js.map +1 -0
  150. package/lib/node/hosting/backend-hosting-module.d.ts.map +1 -1
  151. package/lib/node/hosting/backend-hosting-module.js +4 -1
  152. package/lib/node/hosting/backend-hosting-module.js.map +1 -1
  153. package/lib/node/hosting/browser-connection-token.d.ts +29 -1
  154. package/lib/node/hosting/browser-connection-token.d.ts.map +1 -1
  155. package/lib/node/hosting/browser-connection-token.js +25 -1
  156. package/lib/node/hosting/browser-connection-token.js.map +1 -1
  157. package/lib/node/hosting/browser-connection-token.spec.js +70 -0
  158. package/lib/node/hosting/browser-connection-token.spec.js.map +1 -1
  159. package/lib/node/index.d.ts +1 -0
  160. package/lib/node/index.d.ts.map +1 -1
  161. package/lib/node/index.js +3 -1
  162. package/lib/node/index.js.map +1 -1
  163. package/package.json +11 -11
  164. package/src/browser/browser-clipboard-service.ts +7 -1
  165. package/src/browser/clipboard-service.ts +11 -0
  166. package/src/browser/common-frontend-contribution.ts +7 -7
  167. package/src/browser/frontend-application-module.ts +11 -1
  168. package/src/browser/frontend-application.ts +12 -4
  169. package/src/browser/index.ts +1 -0
  170. package/src/browser/keybinding.ts +12 -7
  171. package/src/browser/perspective-service.spec.ts +2270 -0
  172. package/src/browser/perspective-service.ts +625 -0
  173. package/src/browser/preferences/preference-contribution.ts +9 -1
  174. package/src/browser/preferences/preference-service.spec.ts +72 -0
  175. package/src/browser/shell/application-shell.ts +41 -26
  176. package/src/browser/shell/shell-layout-restorer.spec.ts +746 -0
  177. package/src/browser/shell/shell-layout-restorer.ts +134 -13
  178. package/src/browser/shell/view-contribution.ts +6 -1
  179. package/src/browser/status-bar/status-bar.tsx +13 -3
  180. package/src/browser/style/select-component.css +16 -0
  181. package/src/browser/style/sidepanel.css +5 -0
  182. package/src/browser/style/status-bar.css +1 -1
  183. package/src/browser/tree/tree-widget.tsx +12 -78
  184. package/src/browser/widgets/index.ts +1 -0
  185. package/src/browser/widgets/select-component.tsx +41 -12
  186. package/src/browser/widgets/tab-bar-tracker.spec.ts +121 -0
  187. package/src/browser/widgets/tab-bar-tracker.ts +68 -0
  188. package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +32 -3
  189. package/src/common/i18n/nls.metadata.json +4149 -888
  190. package/src/common/preferences/index.ts +1 -0
  191. package/src/common/preferences/preference-provider.spec.ts +17 -0
  192. package/src/common/preferences/preference-provider.ts +22 -1
  193. package/src/common/preferences/preference-scope.spec.ts +5 -3
  194. package/src/common/preferences/preference-scope.ts +6 -1
  195. package/src/common/preferences/preference-service.ts +39 -5
  196. package/src/common/preferences/session-preference-provider.spec.ts +78 -0
  197. package/src/common/preferences/session-preference-provider.ts +69 -0
  198. package/src/electron-browser/electron-clipboard-service.ts +5 -0
  199. package/src/electron-browser/menu/electron-menu-style.css +3 -1
  200. package/src/electron-browser/preload.ts +5 -2
  201. package/src/electron-common/electron-api.ts +4 -0
  202. package/src/electron-main/electron-api-main.ts +56 -3
  203. package/src/electron-main/electron-main-application.ts +3 -0
  204. package/src/electron-node/hosting/electron-backend-hosting-module.spec.ts +42 -0
  205. package/src/electron-node/hosting/electron-backend-hosting-module.ts +8 -0
  206. package/src/node/hosting/backend-hosting-module.ts +5 -2
  207. package/src/node/hosting/browser-connection-token.spec.ts +92 -0
  208. package/src/node/hosting/browser-connection-token.ts +45 -1
  209. package/src/node/index.ts +1 -0
@@ -262,6 +262,7 @@ describe('Preference Service', () => {
262
262
  globalValue,
263
263
  workspaceValue,
264
264
  workspaceFolderValue,
265
+ sessionValue: undefined,
265
266
  value,
266
267
  };
267
268
  const inspection = preferences.inspect(TAB_SIZE, DUMMY_URI);
@@ -374,6 +375,7 @@ describe('Preference Service', () => {
374
375
  globalValue: undefined,
375
376
  workspaceValue: undefined,
376
377
  workspaceFolderValue: undefined,
378
+ sessionValue: undefined,
377
379
  value: 4,
378
380
  };
379
381
  assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
@@ -397,6 +399,7 @@ describe('Preference Service', () => {
397
399
  globalValue: 2,
398
400
  workspaceValue: undefined,
399
401
  workspaceFolderValue: undefined,
402
+ sessionValue: undefined,
400
403
  value: 2
401
404
  };
402
405
  preferences.set('editor.tabSize', 2, PreferenceScope.User);
@@ -422,6 +425,7 @@ describe('Preference Service', () => {
422
425
  globalValue: undefined,
423
426
  workspaceValue: undefined,
424
427
  workspaceFolderValue: undefined,
428
+ sessionValue: undefined,
425
429
  value: 4
426
430
  };
427
431
  assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
@@ -537,4 +541,72 @@ describe('Preference Service', () => {
537
541
  });
538
542
  });
539
543
 
544
+ describe('session-scope overrides', () => {
545
+ function getSessionProvider(): PreferenceProvider {
546
+ return testContainer.getNamed<PreferenceProvider>(PreferenceProvider, PreferenceScope.Session);
547
+ }
548
+
549
+ beforeEach(() => {
550
+ prefSchema.addSchema({
551
+ scope: PreferenceScope.Folder,
552
+ properties: {
553
+ 'test.session': { type: 'number' }
554
+ }
555
+ });
556
+ });
557
+
558
+ it('takes precedence over the user scope', async () => {
559
+ getProvider(PreferenceScope.User).setPreference('test.session', 1);
560
+ await prefService.set('test.session', 99, PreferenceScope.Session);
561
+ expect(prefService.get('test.session')).equals(99);
562
+ });
563
+
564
+ it('is dropped when the same key is written to a persistent scope', async () => {
565
+ const sessionProvider = getSessionProvider();
566
+ getProvider(PreferenceScope.User).setPreference('test.session', 1);
567
+ await prefService.set('test.session', 99, PreferenceScope.Session);
568
+ expect(prefService.get('test.session')).equals(99);
569
+
570
+ // An explicit user edit must win over the session override and clear it.
571
+ await prefService.set('test.session', 2, PreferenceScope.User);
572
+ expect(sessionProvider.get('test.session')).to.equal(undefined);
573
+ expect(prefService.get('test.session')).equals(2);
574
+ });
575
+
576
+ it('is reported via inspect().sessionValue', async () => {
577
+ await prefService.set('test.session', 42, PreferenceScope.Session);
578
+ expect(prefService.inspect('test.session')?.sessionValue).equals(42);
579
+ });
580
+
581
+ it('emits a Session-scope change event when evicted by a persistent write', async () => {
582
+ // Status bar listeners rely on this: an eviction must surface as an
583
+ // onPreferenceChanged event whose `scope` is Session, otherwise the
584
+ // status bar would never clear after the override is dropped.
585
+ await prefService.set('test.session', 99, PreferenceScope.Session);
586
+
587
+ const sessionScopeEvents: PreferenceScope[] = [];
588
+ const listener = prefService.onPreferenceChanged(e => {
589
+ if (e.preferenceName === 'test.session') {
590
+ sessionScopeEvents.push(e.scope);
591
+ }
592
+ });
593
+ try {
594
+ await prefService.set('test.session', 2, PreferenceScope.User);
595
+ } finally {
596
+ listener.dispose();
597
+ }
598
+
599
+ expect(sessionScopeEvents).to.include(PreferenceScope.Session);
600
+ });
601
+
602
+ it('is left alone when writing to the Session scope itself', async () => {
603
+ const sessionProvider = getSessionProvider();
604
+ await prefService.set('test.session', 7, PreferenceScope.Session);
605
+ expect(sessionProvider.get('test.session')).to.equal(7);
606
+ // A second write to Session must not trigger eviction of itself.
607
+ await prefService.set('test.session', 8, PreferenceScope.Session);
608
+ expect(sessionProvider.get('test.session')).to.equal(8);
609
+ });
610
+ });
611
+
540
612
  });
@@ -181,6 +181,12 @@ interface WidgetDragState {
181
181
  }
182
182
 
183
183
  export const MAXIMIZED_CLASS = 'theia-maximized';
184
+ export const WidgetAreaResolver = Symbol('WidgetAreaResolver');
185
+ export interface WidgetAreaResolver {
186
+ resolveArea(widgetId: string, requestedArea: ApplicationShell.Area): ApplicationShell.Area | undefined;
187
+ setActivePlacementMap(map: Map<string, ApplicationShell.Area>): void;
188
+ }
189
+
184
190
  /**
185
191
  * The application shell manages the top-level widgets of the application. Use this class to
186
192
  * add, remove, or activate a widget.
@@ -355,6 +361,7 @@ export class ApplicationShell extends Widget {
355
361
  });
356
362
  }
357
363
  });
364
+ this.refreshBottomPanelToggleButton();
358
365
  this.initializedDeferred.resolve();
359
366
  }
360
367
 
@@ -689,14 +696,10 @@ export class ApplicationShell extends Widget {
689
696
  spacing: 0
690
697
  }, area => this.doToggleMaximized(area));
691
698
  dockPanel.id = BOTTOM_AREA_ID;
692
- dockPanel.widgetAdded.connect((sender, widget) => {
693
- this.refreshBottomPanelToggleButton();
694
- });
695
699
  dockPanel.widgetRemoved.connect((sender, widget) => {
696
700
  if (sender.isEmpty) {
697
701
  this.collapseBottomPanel();
698
702
  }
699
- this.refreshBottomPanelToggleButton();
700
703
  }, this);
701
704
  dockPanel.node.addEventListener('lm-dragenter', event => {
702
705
  // Make sure that the main panel hides its overlay when the bottom panel is expanded
@@ -887,7 +890,6 @@ export class ApplicationShell extends Widget {
887
890
  }
888
891
  });
889
892
  }
890
- this.refreshBottomPanelToggleButton();
891
893
  }
892
894
  // Proceed with the main panel once all others are set up
893
895
  await this.bottomPanelState.pendingUpdate;
@@ -969,6 +971,20 @@ export class ApplicationShell extends Widget {
969
971
  }
970
972
  }
971
973
 
974
+ @inject(WidgetAreaResolver) @optional()
975
+ protected readonly widgetAreaResolver: WidgetAreaResolver | undefined;
976
+
977
+ protected resolveWidgetArea(widget: Widget, options?: Readonly<ApplicationShell.WidgetOptions>): Readonly<ApplicationShell.WidgetOptions> | undefined {
978
+ if (this.widgetAreaResolver && !options?.ref) {
979
+ const requestedArea = options?.area || 'main';
980
+ const resolvedArea = this.widgetAreaResolver.resolveArea(widget.id, requestedArea);
981
+ if (resolvedArea && resolvedArea !== requestedArea) {
982
+ return { ...options, area: resolvedArea };
983
+ }
984
+ }
985
+ return options;
986
+ }
987
+
972
988
  /**
973
989
  * Add a widget to the application shell. The given widget must have a unique `id` property,
974
990
  * which will be used as the DOM id.
@@ -982,7 +998,8 @@ export class ApplicationShell extends Widget {
982
998
  this.logger.error('Widgets added to the application shell must have a unique id property.');
983
999
  return;
984
1000
  }
985
- const { area, addOptions } = this.getInsertionOptions(options);
1001
+ const resolvedOptions = this.resolveWidgetArea(widget, options);
1002
+ const { area, addOptions } = this.getInsertionOptions(resolvedOptions);
986
1003
  const sidePanelOptions: SidePanel.WidgetOptions = { rank: options?.rank };
987
1004
  switch (area) {
988
1005
  case 'main':
@@ -1570,9 +1587,11 @@ export class ApplicationShell extends Widget {
1570
1587
  let size: number | undefined;
1571
1588
  if (bottomPanel.isEmpty) {
1572
1589
  bottomPanel.node.style.minHeight = '0';
1573
- size = this.options.bottomPanel.emptySize;
1574
- } else if (this.bottomPanelState.lastPanelSize) {
1590
+ }
1591
+ if (this.bottomPanelState.lastPanelSize) {
1575
1592
  size = this.bottomPanelState.lastPanelSize;
1593
+ } else if (bottomPanel.isEmpty) {
1594
+ size = this.options.bottomPanel.emptySize;
1576
1595
  } else {
1577
1596
  size = this.getDefaultBottomPanelSize();
1578
1597
  }
@@ -1631,24 +1650,20 @@ export class ApplicationShell extends Widget {
1631
1650
  * and refers to the command `core.toggle.bottom.panel`.
1632
1651
  */
1633
1652
  protected refreshBottomPanelToggleButton(): void {
1634
- if (this.bottomPanel.isEmpty) {
1635
- this.statusBar.removeElement(BOTTOM_PANEL_TOGGLE_ID);
1636
- } else {
1637
- const label = nls.localize('theia/core/common/collapseBottomPanel', 'Toggle Bottom Panel');
1638
- const element: StatusBarEntry = {
1639
- name: label,
1640
- text: '$(codicon-window)',
1641
- alignment: StatusBarAlignment.RIGHT,
1642
- tooltip: label,
1643
- command: 'core.toggle.bottom.panel',
1644
- accessibilityInformation: {
1645
- label: label,
1646
- role: 'button'
1647
- },
1648
- priority: -1000
1649
- };
1650
- this.statusBar.setElement(BOTTOM_PANEL_TOGGLE_ID, element);
1651
- }
1653
+ const label = nls.localize('theia/core/common/collapseBottomPanel', 'Toggle Bottom Panel');
1654
+ const element: StatusBarEntry = {
1655
+ name: label,
1656
+ text: '$(codicon-window)',
1657
+ alignment: StatusBarAlignment.RIGHT,
1658
+ tooltip: label,
1659
+ command: 'core.toggle.bottom.panel',
1660
+ accessibilityInformation: {
1661
+ label: label,
1662
+ role: 'button'
1663
+ },
1664
+ priority: -1000
1665
+ };
1666
+ this.statusBar.setElement(BOTTOM_PANEL_TOGGLE_ID, element);
1652
1667
  }
1653
1668
 
1654
1669
  /**