@theia/core 1.59.0 → 1.60.0-next.47

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 (231) hide show
  1. package/README.md +10 -10
  2. package/lib/browser/about-dialog.d.ts.map +1 -1
  3. package/lib/browser/about-dialog.js +2 -1
  4. package/lib/browser/about-dialog.js.map +1 -1
  5. package/lib/browser/browser.d.ts +2 -0
  6. package/lib/browser/browser.d.ts.map +1 -1
  7. package/lib/browser/browser.js +6 -1
  8. package/lib/browser/browser.js.map +1 -1
  9. package/lib/browser/catalog.json +207 -16
  10. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  11. package/lib/browser/common-frontend-contribution.js +24 -22
  12. package/lib/browser/common-frontend-contribution.js.map +1 -1
  13. package/lib/browser/common-styling-participants.js +25 -25
  14. package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
  15. package/lib/browser/menu/browser-context-menu-renderer.js +1 -2
  16. package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
  17. package/lib/browser/menu/browser-menu-plugin.d.ts +5 -5
  18. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  19. package/lib/browser/menu/browser-menu-plugin.js +23 -13
  20. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  21. package/lib/browser/preferences/injectable-preference-proxy.d.ts +1 -1
  22. package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +1 -1
  23. package/lib/browser/preferences/preference-contribution.d.ts +1 -1
  24. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  25. package/lib/browser/preferences/preference-provider.d.ts +1 -1
  26. package/lib/browser/preferences/preference-provider.d.ts.map +1 -1
  27. package/lib/browser/preferences/preference-provider.js +1 -1
  28. package/lib/browser/preferences/preference-provider.js.map +1 -1
  29. package/lib/browser/preferences/preference-service.d.ts +1 -1
  30. package/lib/browser/preferences/preference-service.d.ts.map +1 -1
  31. package/lib/browser/preferences/preference-service.js +3 -3
  32. package/lib/browser/preferences/preference-service.js.map +1 -1
  33. package/lib/browser/preferences/preference-validation-service.d.ts +1 -1
  34. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  35. package/lib/browser/saveable.d.ts +11 -3
  36. package/lib/browser/saveable.d.ts.map +1 -1
  37. package/lib/browser/saveable.js +2 -1
  38. package/lib/browser/saveable.js.map +1 -1
  39. package/lib/browser/shell/application-shell-mouse-tracker.d.ts +1 -1
  40. package/lib/browser/shell/application-shell-mouse-tracker.d.ts.map +1 -1
  41. package/lib/browser/shell/application-shell-mouse-tracker.js +3 -3
  42. package/lib/browser/shell/application-shell-mouse-tracker.js.map +1 -1
  43. package/lib/browser/shell/application-shell.d.ts +10 -7
  44. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  45. package/lib/browser/shell/application-shell.js +24 -21
  46. package/lib/browser/shell/application-shell.js.map +1 -1
  47. package/lib/browser/shell/shell-layout-restorer.d.ts +1 -1
  48. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  49. package/lib/browser/shell/side-panel-handler.d.ts +2 -2
  50. package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
  51. package/lib/browser/shell/side-panel-handler.js +11 -11
  52. package/lib/browser/shell/side-panel-handler.js.map +1 -1
  53. package/lib/browser/shell/side-panel-toolbar.d.ts +2 -2
  54. package/lib/browser/shell/side-panel-toolbar.d.ts.map +1 -1
  55. package/lib/browser/shell/side-panel-toolbar.js +1 -1
  56. package/lib/browser/shell/side-panel-toolbar.js.map +1 -1
  57. package/lib/browser/shell/split-panels.d.ts +1 -1
  58. package/lib/browser/shell/split-panels.d.ts.map +1 -1
  59. package/lib/browser/shell/split-panels.js +1 -1
  60. package/lib/browser/shell/split-panels.js.map +1 -1
  61. package/lib/browser/shell/tab-bar-decorator.d.ts +1 -1
  62. package/lib/browser/shell/tab-bar-decorator.d.ts.map +1 -1
  63. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +1 -1
  64. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  65. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +1 -1
  66. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  67. package/lib/browser/shell/tab-bars.d.ts +18 -12
  68. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  69. package/lib/browser/shell/tab-bars.js +79 -51
  70. package/lib/browser/shell/tab-bars.js.map +1 -1
  71. package/lib/browser/shell/tab-bars.spec.js +1 -1
  72. package/lib/browser/shell/tab-bars.spec.js.map +1 -1
  73. package/lib/browser/shell/theia-dock-panel.d.ts +2 -2
  74. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  75. package/lib/browser/shell/theia-dock-panel.js +3 -3
  76. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  77. package/lib/browser/shell/view-column-service.d.ts +1 -1
  78. package/lib/browser/shell/view-column-service.d.ts.map +1 -1
  79. package/lib/browser/shell/view-column-service.js +1 -1
  80. package/lib/browser/shell/view-column-service.js.map +1 -1
  81. package/lib/browser/shell/view-contribution.d.ts +1 -1
  82. package/lib/browser/shell/view-contribution.d.ts.map +1 -1
  83. package/lib/browser/source-tree/source-tree.d.ts.map +1 -1
  84. package/lib/browser/source-tree/source-tree.js +3 -2
  85. package/lib/browser/source-tree/source-tree.js.map +1 -1
  86. package/lib/browser/source-tree/tree-source.d.ts +1 -0
  87. package/lib/browser/source-tree/tree-source.d.ts.map +1 -1
  88. package/lib/browser/source-tree/tree-source.js.map +1 -1
  89. package/lib/browser/tree/tree-widget.d.ts +1 -1
  90. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  91. package/lib/browser/tree/tree-widget.js +1 -1
  92. package/lib/browser/tree/tree-widget.js.map +1 -1
  93. package/lib/browser/view-container.d.ts +6 -7
  94. package/lib/browser/view-container.d.ts.map +1 -1
  95. package/lib/browser/view-container.js +25 -25
  96. package/lib/browser/view-container.js.map +1 -1
  97. package/lib/browser/widget-manager.d.ts +1 -1
  98. package/lib/browser/widget-manager.d.ts.map +1 -1
  99. package/lib/browser/widget-manager.js +1 -1
  100. package/lib/browser/widget-manager.js.map +1 -1
  101. package/lib/browser/widget-manager.spec.js +1 -1
  102. package/lib/browser/widget-manager.spec.js.map +1 -1
  103. package/lib/browser/widgets/react-widget.d.ts +1 -1
  104. package/lib/browser/widgets/react-widget.d.ts.map +1 -1
  105. package/lib/browser/widgets/react-widget.js +1 -1
  106. package/lib/browser/widgets/react-widget.js.map +1 -1
  107. package/lib/browser/widgets/widget.d.ts +9 -8
  108. package/lib/browser/widgets/widget.d.ts.map +1 -1
  109. package/lib/browser/widgets/widget.js +7 -9
  110. package/lib/browser/widgets/widget.js.map +1 -1
  111. package/lib/common/json-schema.d.ts +1 -1
  112. package/lib/common/json-schema.d.ts.map +1 -1
  113. package/lib/common/preferences/preference-schema.d.ts +4 -1
  114. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  115. package/lib/common/preferences/preference-schema.js.map +1 -1
  116. package/lib/common/theme.d.ts +2 -0
  117. package/lib/common/theme.d.ts.map +1 -1
  118. package/lib/common/theme.js +5 -1
  119. package/lib/common/theme.js.map +1 -1
  120. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +1 -1
  121. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  122. package/lib/electron-browser/menu/electron-menu-contribution.js +6 -4
  123. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  124. package/lib/electron-browser/preload.d.ts.map +1 -1
  125. package/lib/electron-browser/preload.js +3 -0
  126. package/lib/electron-browser/preload.js.map +1 -1
  127. package/lib/electron-common/electron-api.d.ts +3 -0
  128. package/lib/electron-common/electron-api.d.ts.map +1 -1
  129. package/lib/electron-common/electron-api.js +2 -1
  130. package/lib/electron-common/electron-api.js.map +1 -1
  131. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  132. package/lib/electron-main/electron-api-main.js +1 -0
  133. package/lib/electron-main/electron-api-main.js.map +1 -1
  134. package/lib/electron-main/electron-main-application.d.ts +2 -0
  135. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  136. package/lib/electron-main/electron-main-application.js +3 -0
  137. package/lib/electron-main/electron-main-application.js.map +1 -1
  138. package/lib/node/messaging/websocket-frontend-connection-service.js +1 -1
  139. package/package.json +24 -24
  140. package/shared/@lumino/algorithm/index.d.ts +1 -0
  141. package/shared/@lumino/algorithm/index.js +1 -0
  142. package/shared/@lumino/commands/index.d.ts +1 -0
  143. package/shared/@lumino/commands/index.js +1 -0
  144. package/shared/@lumino/coreutils/index.d.ts +1 -0
  145. package/shared/@lumino/coreutils/index.js +1 -0
  146. package/shared/@lumino/domutils/index.d.ts +1 -0
  147. package/shared/@lumino/domutils/index.js +1 -0
  148. package/shared/@lumino/dragdrop/index.d.ts +1 -0
  149. package/shared/@lumino/dragdrop/index.js +1 -0
  150. package/shared/@lumino/messaging/index.d.ts +1 -0
  151. package/shared/@lumino/messaging/index.js +1 -0
  152. package/shared/@lumino/properties/index.d.ts +1 -0
  153. package/shared/@lumino/properties/index.js +1 -0
  154. package/shared/@lumino/signaling/index.d.ts +1 -0
  155. package/shared/@lumino/signaling/index.js +1 -0
  156. package/shared/@lumino/virtualdom/index.d.ts +1 -0
  157. package/shared/@lumino/virtualdom/index.js +1 -0
  158. package/shared/@lumino/widgets/index.d.ts +1 -0
  159. package/shared/@lumino/widgets/index.js +1 -0
  160. package/src/browser/about-dialog.tsx +2 -1
  161. package/src/browser/browser.ts +6 -1
  162. package/src/browser/common-frontend-contribution.ts +24 -22
  163. package/src/browser/common-styling-participants.ts +25 -25
  164. package/src/browser/menu/browser-context-menu-renderer.ts +1 -2
  165. package/src/browser/menu/browser-menu-plugin.ts +24 -14
  166. package/src/browser/preferences/injectable-preference-proxy.ts +1 -1
  167. package/src/browser/preferences/preference-contribution.ts +1 -1
  168. package/src/browser/preferences/preference-provider.ts +1 -1
  169. package/src/browser/preferences/preference-service.ts +1 -1
  170. package/src/browser/preferences/preference-validation-service.spec.ts +1 -1
  171. package/src/browser/preferences/preference-validation-service.ts +1 -1
  172. package/src/browser/saveable.ts +13 -3
  173. package/src/browser/shell/application-shell-mouse-tracker.ts +3 -3
  174. package/src/browser/shell/application-shell.ts +36 -32
  175. package/src/browser/shell/shell-layout-restorer.ts +1 -1
  176. package/src/browser/shell/side-panel-handler.ts +11 -11
  177. package/src/browser/shell/side-panel-toolbar.ts +2 -2
  178. package/src/browser/shell/split-panels.ts +1 -1
  179. package/src/browser/shell/tab-bar-decorator.ts +1 -1
  180. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +1 -1
  181. package/src/browser/shell/tab-bars.spec.ts +1 -1
  182. package/src/browser/shell/tab-bars.ts +92 -57
  183. package/src/browser/shell/theia-dock-panel.ts +3 -3
  184. package/src/browser/shell/view-column-service.ts +2 -2
  185. package/src/browser/shell/view-contribution.ts +1 -1
  186. package/src/browser/source-tree/source-tree.ts +3 -2
  187. package/src/browser/source-tree/tree-source.ts +1 -0
  188. package/src/browser/style/dialog.css +12 -12
  189. package/src/browser/style/dockpanel.css +19 -19
  190. package/src/browser/style/hover-service.css +1 -0
  191. package/src/browser/style/index.css +5 -3
  192. package/src/browser/style/menus.css +34 -31
  193. package/src/browser/style/sidepanel.css +52 -48
  194. package/src/browser/style/split-widget.css +5 -5
  195. package/src/browser/style/tabs.css +91 -97
  196. package/src/browser/style/view-container.css +14 -14
  197. package/src/browser/tree/tree-widget.tsx +2 -2
  198. package/src/browser/view-container.ts +34 -34
  199. package/src/browser/widget-manager.spec.ts +1 -1
  200. package/src/browser/widget-manager.ts +1 -1
  201. package/src/browser/widgets/react-widget.tsx +1 -1
  202. package/src/browser/widgets/widget.ts +18 -15
  203. package/src/common/json-schema.ts +1 -1
  204. package/src/common/preferences/preference-schema.ts +4 -1
  205. package/src/common/theme.ts +6 -0
  206. package/src/electron-browser/menu/electron-menu-contribution.ts +6 -5
  207. package/src/electron-browser/preload.ts +6 -3
  208. package/src/electron-common/electron-api.ts +3 -0
  209. package/src/electron-main/electron-api-main.ts +4 -1
  210. package/src/electron-main/electron-main-application.ts +5 -0
  211. package/src/node/messaging/websocket-frontend-connection-service.ts +1 -2
  212. package/shared/@phosphor/algorithm/index.d.ts +0 -1
  213. package/shared/@phosphor/algorithm/index.js +0 -1
  214. package/shared/@phosphor/commands/index.d.ts +0 -1
  215. package/shared/@phosphor/commands/index.js +0 -1
  216. package/shared/@phosphor/coreutils/index.d.ts +0 -1
  217. package/shared/@phosphor/coreutils/index.js +0 -1
  218. package/shared/@phosphor/domutils/index.d.ts +0 -1
  219. package/shared/@phosphor/domutils/index.js +0 -1
  220. package/shared/@phosphor/dragdrop/index.d.ts +0 -1
  221. package/shared/@phosphor/dragdrop/index.js +0 -1
  222. package/shared/@phosphor/messaging/index.d.ts +0 -1
  223. package/shared/@phosphor/messaging/index.js +0 -1
  224. package/shared/@phosphor/properties/index.d.ts +0 -1
  225. package/shared/@phosphor/properties/index.js +0 -1
  226. package/shared/@phosphor/signaling/index.d.ts +0 -1
  227. package/shared/@phosphor/signaling/index.js +0 -1
  228. package/shared/@phosphor/virtualdom/index.d.ts +0 -1
  229. package/shared/@phosphor/virtualdom/index.js +0 -1
  230. package/shared/@phosphor/widgets/index.d.ts +0 -1
  231. package/shared/@phosphor/widgets/index.js +0 -1
@@ -15,9 +15,8 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable, inject } from 'inversify';
18
- import { Menu, MenuBar, Menu as MenuWidget, Widget } from '@phosphor/widgets';
19
- import { CommandRegistry as PhosphorCommandRegistry } from '@phosphor/commands';
20
- import { ElementExt } from '@phosphor/domutils';
18
+ import { Menu, MenuBar, Menu as MenuWidget, Widget } from '@lumino/widgets';
19
+ import { CommandRegistry as LuminoCommandRegistry } from '@lumino/commands';
21
20
  import {
22
21
  CommandRegistry, environment, DisposableCollection, Disposable,
23
22
  MenuModelRegistry, MAIN_MENU_BAR, MenuPath, MenuNode, MenuCommandExecutor, CompoundMenuNode, CompoundMenuNodeRole, CommandMenuNode,
@@ -32,6 +31,7 @@ import { Message, waitForRevealed } from '../widgets';
32
31
  import { ApplicationShell } from '../shell';
33
32
  import { CorePreferences } from '../core-preferences';
34
33
  import { PreferenceService } from '../preferences/preference-service';
34
+ import { ElementExt } from '@lumino/domutils';
35
35
 
36
36
  export abstract class MenuBarWidget extends MenuBar {
37
37
  abstract activateMenu(label: string, ...labels: string[]): Promise<MenuWidget>;
@@ -161,7 +161,7 @@ export class BrowserMainMenuFactory implements MenuWidgetFactory {
161
161
  }
162
162
 
163
163
  export function isMenuElement(element: HTMLElement | null): boolean {
164
- return !!element && element.className.includes('p-Menu');
164
+ return !!element && element.className.includes('lm-Menu');
165
165
  }
166
166
 
167
167
  export class DynamicMenuBarWidget extends MenuBarWidget {
@@ -181,7 +181,8 @@ export class DynamicMenuBarWidget extends MenuBarWidget {
181
181
  // We want to save the focus object for the former case only.
182
182
  if (!this.childMenu) {
183
183
  const { activeElement } = document;
184
- if (activeElement instanceof HTMLElement) {
184
+ // we do not want to restore focus to menus
185
+ if (activeElement instanceof HTMLElement && !isMenuElement(activeElement)) {
185
186
  this.previousFocusedElement = activeElement;
186
187
  }
187
188
  }
@@ -322,14 +323,14 @@ export class DynamicMenuWidget extends MenuWidget {
322
323
  });
323
324
  }
324
325
 
325
- public override open(x: number, y: number, options?: MenuWidget.IOpenOptions, anchor?: HTMLElement): void {
326
+ public override open(x: number, y: number, options?: MenuWidget.IOpenOptions): void {
326
327
  const cb = () => {
327
328
  this.restoreFocusedElement();
328
329
  this.aboutToClose.disconnect(cb);
329
330
  };
330
331
  this.aboutToClose.connect(cb);
331
332
  this.preserveFocusedElement();
332
- super.open(x, y, options, anchor);
333
+ super.open(x, y, options);
333
334
  }
334
335
 
335
336
  protected updateSubMenus(parent: MenuWidget, menu: CompoundMenuNode, commands: MenuCommandRegistry): void {
@@ -337,6 +338,13 @@ export class DynamicMenuWidget extends MenuWidget {
337
338
  while (items[items.length - 1]?.type === 'separator') {
338
339
  items.pop();
339
340
  }
341
+ // Add at least one entry to avoid empty menus.
342
+ // This is needed as Lumino does all kind of checks whether a menu is empty and for example prevents activating it
343
+ // This item will be cleared once the menu is opened via the next update as we don't have empty main menus
344
+ // See https://github.com/jupyterlab/lumino/issues/729
345
+ if (items.length === 0) {
346
+ items.push({ type: 'separator' });
347
+ }
340
348
  for (const item of items) {
341
349
  parent.addItem(item);
342
350
  }
@@ -382,7 +390,7 @@ export class DynamicMenuWidget extends MenuWidget {
382
390
  }
383
391
 
384
392
  protected preserveFocusedElement(previousFocusedElement: Element | null = document.activeElement): boolean {
385
- if (!this.previousFocusedElement && previousFocusedElement instanceof HTMLElement) {
393
+ if (!this.previousFocusedElement && previousFocusedElement instanceof HTMLElement && !isMenuElement(previousFocusedElement)) {
386
394
  this.previousFocusedElement = previousFocusedElement;
387
395
  return true;
388
396
  }
@@ -401,14 +409,16 @@ export class DynamicMenuWidget extends MenuWidget {
401
409
  protected runWithPreservedFocusContext(what: () => void): void {
402
410
  let focusToRestore: HTMLElement | undefined = undefined;
403
411
  const { activeElement } = document;
404
- if (this.previousFocusedElement && activeElement instanceof HTMLElement && this.previousFocusedElement !== activeElement) {
412
+ if (this.previousFocusedElement &&
413
+ activeElement instanceof HTMLElement &&
414
+ this.previousFocusedElement !== activeElement) {
405
415
  focusToRestore = activeElement;
406
416
  this.previousFocusedElement.focus({ preventScroll: true });
407
417
  }
408
418
  try {
409
419
  what();
410
420
  } finally {
411
- if (focusToRestore) {
421
+ if (focusToRestore && !isMenuElement(focusToRestore)) {
412
422
  focusToRestore.focus({ preventScroll: true });
413
423
  }
414
424
  }
@@ -465,9 +475,9 @@ export class BrowserMenuBarContribution implements FrontendApplicationContributi
465
475
  }
466
476
 
467
477
  /**
468
- * Stores Theia-specific action menu nodes instead of PhosphorJS commands with their handlers.
478
+ * Stores Theia-specific action menu nodes instead of Lumino commands with their handlers.
469
479
  */
470
- export class MenuCommandRegistry extends PhosphorCommandRegistry {
480
+ export class MenuCommandRegistry extends LuminoCommandRegistry {
471
481
 
472
482
  protected actions = new Map<string, [MenuNode & CommandMenuNode, unknown[]]>();
473
483
  protected toDispose = new DisposableCollection();
@@ -516,7 +526,7 @@ export class MenuCommandRegistry extends PhosphorCommandRegistry {
516
526
  const unregisterCommand = this.addCommand(id, {
517
527
  execute: () => commandExecutor.executeCommand(menuPath, id, ...args),
518
528
  label: menu.label,
519
- icon: menu.icon,
529
+ iconClass: menu.icon,
520
530
  isEnabled: () => enabled,
521
531
  isVisible: () => visible,
522
532
  isToggled: () => toggled
@@ -532,7 +542,7 @@ export class MenuCommandRegistry extends PhosphorCommandRegistry {
532
542
  this.addKeyBinding({
533
543
  command: id,
534
544
  keys,
535
- selector: '.p-Widget' // We have the PhosphorJS dependency anyway.
545
+ selector: '.lm-Widget' // We have the Lumino dependency anyway.
536
546
  });
537
547
  }
538
548
  return Disposable.create(() => unregisterCommand.dispose());
@@ -19,7 +19,7 @@ import { PreferenceSchema } from '../../common/preferences/preference-schema';
19
19
  import { Disposable, DisposableCollection, Emitter, Event, isObject, MaybePromise } from '../../common';
20
20
  import { PreferenceChangeEvent, PreferenceEventEmitter, PreferenceProxy, PreferenceProxyOptions, PreferenceRetrieval } from './preference-proxy';
21
21
  import { PreferenceChange, PreferenceChangeImpl, PreferenceChanges, PreferenceScope, PreferenceService } from './preference-service';
22
- import { JSONValue } from '@phosphor/coreutils';
22
+ import { JSONValue } from '@lumino/coreutils';
23
23
  import { PreferenceProviderDataChange } from './preference-provider';
24
24
  import { OverridePreferenceName } from './preference-language-override-service';
25
25
 
@@ -28,7 +28,7 @@ import { bindPreferenceConfigurations, PreferenceConfigurations } from './prefer
28
28
  export { PreferenceSchema, PreferenceSchemaProperties, PreferenceDataSchema, PreferenceItem, PreferenceSchemaProperty, PreferenceDataProperty };
29
29
  import { isObject, Mutable } from '../../common/types';
30
30
  import { PreferenceLanguageOverrideService } from './preference-language-override-service';
31
- import { JSONValue } from '@phosphor/coreutils';
31
+ import { JSONValue } from '@lumino/coreutils';
32
32
 
33
33
  /* eslint-disable guard-for-in, @typescript-eslint/no-explicit-any */
34
34
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  import debounce = require('p-debounce');
20
20
  import { injectable, inject } from 'inversify';
21
- import { JSONExt, JSONValue } from '@phosphor/coreutils';
21
+ import { JSONExt, JSONValue } from '@lumino/coreutils';
22
22
  import URI from '../../common/uri';
23
23
  import { Disposable, DisposableCollection, Emitter, Event, isObject } from '../../common';
24
24
  import { Deferred } from '../../common/promise-util';
@@ -24,7 +24,7 @@ import { PreferenceSchemaProvider } from './preference-contribution';
24
24
  import URI from '../../common/uri';
25
25
  import { PreferenceScope } from './preference-scope';
26
26
  import { PreferenceConfigurations } from './preference-configurations';
27
- import { JSONExt, JSONValue } from '@phosphor/coreutils/lib/json';
27
+ import { JSONExt, JSONValue } from '@lumino/coreutils';
28
28
  import { OverridePreferenceName, PreferenceLanguageOverrideService } from './preference-language-override-service';
29
29
 
30
30
  export { PreferenceScope };
@@ -19,7 +19,7 @@ import { PreferenceValidationService } from './preference-validation-service';
19
19
  import { PreferenceItem, PreferenceSchemaProvider } from './preference-contribution';
20
20
  import { PreferenceLanguageOverrideService } from './preference-language-override-service';
21
21
  import * as assert from 'assert';
22
- import { JSONValue } from '@phosphor/coreutils';
22
+ import { JSONValue } from '@lumino/coreutils';
23
23
  import { IJSONSchema, JsonType } from '../../common/json-schema';
24
24
 
25
25
  /* eslint-disable no-null/no-null */
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { PreferenceItem } from '../../common/preferences/preference-schema';
18
- import { JSONObject, JSONValue } from '../../../shared/@phosphor/coreutils';
18
+ import { JSONObject, JSONValue } from '../../../shared/@lumino/coreutils';
19
19
  import { PreferenceSchemaProvider } from './preference-contribution';
20
20
  import { PreferenceLanguageOverrideService } from './preference-language-override-service';
21
21
  import { inject, injectable } from '../../../shared/inversify';
@@ -14,14 +14,14 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { Widget } from '@phosphor/widgets';
18
- import { Message } from '@phosphor/messaging';
17
+ import { Widget } from '@lumino/widgets';
18
+ import { Message } from '@lumino/messaging';
19
19
  import { Emitter, Event } from '../common/event';
20
20
  import { MaybePromise } from '../common/types';
21
21
  import { Key } from './keyboard/keys';
22
22
  import { AbstractDialog } from './dialogs';
23
23
  import { nls } from '../common/nls';
24
- import { Disposable, DisposableCollection, isObject } from '../common';
24
+ import { Disposable, DisposableCollection, isObject, URI } from '../common';
25
25
  import { BinaryBuffer } from '../common/buffer';
26
26
 
27
27
  export type AutoSaveMode = 'off' | 'afterDelay' | 'onFocusChange' | 'onWindowChange';
@@ -44,6 +44,10 @@ export interface Saveable {
44
44
  * Saves dirty changes.
45
45
  */
46
46
  save(options?: SaveOptions): MaybePromise<void>;
47
+ /**
48
+ * Performs the save operation with a new file name.
49
+ */
50
+ saveAs?(options: SaveAsOptions): MaybePromise<void>;
47
51
  /**
48
52
  * Reverts dirty changes.
49
53
  */
@@ -87,6 +91,7 @@ export class DelegatingSaveable implements Saveable {
87
91
  createSnapshot?(): Saveable.Snapshot;
88
92
  applySnapshot?(snapshot: object): void;
89
93
  serialize?(): Promise<BinaryBuffer>;
94
+ saveAs?(options: SaveAsOptions): MaybePromise<void>;
90
95
 
91
96
  protected _delegate?: Saveable;
92
97
  protected toDispose = new DisposableCollection();
@@ -110,6 +115,7 @@ export class DelegatingSaveable implements Saveable {
110
115
  this.createSnapshot = delegate.createSnapshot?.bind(delegate);
111
116
  this.applySnapshot = delegate.applySnapshot?.bind(delegate);
112
117
  this.serialize = delegate.serialize?.bind(delegate);
118
+ this.saveAs = delegate.saveAs?.bind(delegate);
113
119
  }
114
120
 
115
121
  }
@@ -341,6 +347,10 @@ export interface SaveOptions {
341
347
  readonly saveReason?: SaveReason;
342
348
  }
343
349
 
350
+ export interface SaveAsOptions extends SaveOptions {
351
+ readonly target: URI;
352
+ }
353
+
344
354
  /**
345
355
  * The class name added to the dirty widget's title.
346
356
  */
@@ -19,7 +19,7 @@ import { ApplicationShell } from './application-shell';
19
19
  import { injectable, inject } from 'inversify';
20
20
  import { DisposableCollection, Disposable } from '../../common/disposable';
21
21
  import { Emitter, Event } from '../../common/event';
22
- import { FocusTracker, PanelLayout, SplitPanel } from '@phosphor/widgets';
22
+ import { FocusTracker, PanelLayout, SplitPanel } from '@lumino/widgets';
23
23
  import { addEventListener, Widget } from '../widgets';
24
24
  /**
25
25
  * Contribution that tracks `mouseup` and `mousedown` events.
@@ -44,7 +44,7 @@ export class ApplicationShellMouseTracker implements FrontendApplicationContribu
44
44
  protected readonly mousedownListener: (e: MouseEvent) => void = e => this.mousedownEmitter.fire(e);
45
45
 
46
46
  onStart(): void {
47
- // Here we need to attach a `mousedown` listener to the `TabBar`s, `DockPanel`s and the `SidePanel`s. Otherwise, Phosphor handles the event and stops the propagation.
47
+ // Here we need to attach a `mousedown` listener to the `TabBar`s, `DockPanel`s and the `SidePanel`s. Otherwise, Lumino handles the event and stops the propagation.
48
48
  // Track the `mousedown` on the `TabBar` for the currently active widget.
49
49
  this.applicationShell.onDidChangeActiveWidget((args: FocusTracker.IChangedArgs<Widget>) => {
50
50
  this.toDisposeOnActiveChange.dispose();
@@ -68,7 +68,7 @@ export class ApplicationShellMouseTracker implements FrontendApplicationContribu
68
68
  this.toDispose.pushAll([mainPanel, bottomPanel, leftPanelHandler.dockPanel, rightPanelHandler.dockPanel]
69
69
  .map(panel => addEventListener(panel.node, 'mousedown', this.mousedownListener, true)));
70
70
 
71
- // The `mouseup` event has to be tracked on the `document`. Phosphor attaches to there.
71
+ // The `mouseup` event has to be tracked on the `document`. Lumino attaches to there.
72
72
  document.addEventListener('mouseup', this.mouseupListener, true);
73
73
 
74
74
  // Make sure it is disposed in the end.
@@ -15,13 +15,13 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable, inject, optional, postConstruct } from 'inversify';
18
- import { ArrayExt, find, toArray, each } from '@phosphor/algorithm';
18
+ import { ArrayExt, find, toArray, each } from '@lumino/algorithm';
19
19
  import {
20
20
  BoxLayout, BoxPanel, DockLayout, DockPanel, FocusTracker, Layout, Panel, SplitLayout,
21
21
  SplitPanel, TabBar, Widget, Title
22
- } from '@phosphor/widgets';
23
- import { Message } from '@phosphor/messaging';
24
- import { IDragEvent } from '@phosphor/dragdrop';
22
+ } from '@lumino/widgets';
23
+ import { Message } from '@lumino/messaging';
24
+ import { Drag } from '@lumino/dragdrop';
25
25
  import { RecursivePartial, Event as CommonEvent, DisposableCollection, Disposable, environment, isObject, UntitledResourceResolver, UNTITLED_SCHEME } from '../../common';
26
26
  import { animationFrame } from '../browser';
27
27
  import { Saveable, SaveableWidget, SaveOptions } from '../saveable';
@@ -169,7 +169,7 @@ interface WidgetDragState {
169
169
  leftExpanded: boolean;
170
170
  rightExpanded: boolean;
171
171
  bottomExpanded: boolean;
172
- lastDragOver?: IDragEvent;
172
+ lastDragOver?: Drag.Event;
173
173
  leaveTimeout?: number;
174
174
  }
175
175
 
@@ -264,6 +264,9 @@ export class ApplicationShell extends Widget {
264
264
  return this._mainPanelRenderer;
265
265
  }
266
266
 
267
+ protected initializedDeferred = new Deferred<void>();
268
+ initialized = this.initializedDeferred.promise;
269
+
267
270
  /**
268
271
  * Construct a new application shell.
269
272
  */
@@ -322,6 +325,7 @@ export class ApplicationShell extends Widget {
322
325
  });
323
326
  }
324
327
  });
328
+ this.initializedDeferred.resolve();
325
329
  }
326
330
 
327
331
  protected initializeShell(): void {
@@ -386,39 +390,39 @@ export class ApplicationShell extends Widget {
386
390
  }
387
391
 
388
392
  protected override onBeforeAttach(msg: Message): void {
389
- document.addEventListener('p-dragenter', this, true);
390
- document.addEventListener('p-dragover', this, true);
391
- document.addEventListener('p-dragleave', this, true);
392
- document.addEventListener('p-drop', this, true);
393
+ document.addEventListener('lm-dragenter', this, true);
394
+ document.addEventListener('lm-dragover', this, true);
395
+ document.addEventListener('lm-dragleave', this, true);
396
+ document.addEventListener('lm-drop', this, true);
393
397
  }
394
398
 
395
399
  protected override onAfterDetach(msg: Message): void {
396
- document.removeEventListener('p-dragenter', this, true);
397
- document.removeEventListener('p-dragover', this, true);
398
- document.removeEventListener('p-dragleave', this, true);
399
- document.removeEventListener('p-drop', this, true);
400
+ document.removeEventListener('lm-dragenter', this, true);
401
+ document.removeEventListener('lm-dragover', this, true);
402
+ document.removeEventListener('lm-dragleave', this, true);
403
+ document.removeEventListener('lm-drop', this, true);
400
404
  }
401
405
 
402
406
  handleEvent(event: Event): void {
403
407
  switch (event.type) {
404
- case 'p-dragenter':
405
- this.onDragEnter(event as IDragEvent);
408
+ case 'lm-dragenter':
409
+ this.onDragEnter(event as Drag.Event);
406
410
  break;
407
- case 'p-dragover':
408
- this.onDragOver(event as IDragEvent);
411
+ case 'lm-dragover':
412
+ this.onDragOver(event as Drag.Event);
409
413
  break;
410
- case 'p-drop':
411
- this.onDrop(event as IDragEvent);
414
+ case 'lm-drop':
415
+ this.onDrop(event as Drag.Event);
412
416
  break;
413
- case 'p-dragleave':
414
- this.onDragLeave(event as IDragEvent);
417
+ case 'lm-dragleave':
418
+ this.onDragLeave(event as Drag.Event);
415
419
  break;
416
420
  }
417
421
  }
418
422
 
419
- protected onDragEnter({ mimeData }: IDragEvent): void {
423
+ protected onDragEnter({ mimeData }: Drag.Event): void {
420
424
  if (!this.dragState) {
421
- if (mimeData && mimeData.hasData('application/vnd.phosphor.widget-factory')) {
425
+ if (mimeData && mimeData.hasData('application/vnd.lumino.widget-factory')) {
422
426
  // The drag contains a widget, so we'll track it and expand side panels as needed
423
427
  this.dragState = {
424
428
  startTime: performance.now(),
@@ -430,7 +434,7 @@ export class ApplicationShell extends Widget {
430
434
  }
431
435
  }
432
436
 
433
- protected onDragOver(event: IDragEvent): void {
437
+ protected onDragOver(event: Drag.Event): void {
434
438
  const state = this.dragState;
435
439
  if (state) {
436
440
  state.lastDragOver = event;
@@ -499,7 +503,7 @@ export class ApplicationShell extends Widget {
499
503
  }
500
504
  }
501
505
 
502
- protected onDrop(event: IDragEvent): void {
506
+ protected onDrop(event: Drag.Event): void {
503
507
  const state = this.dragState;
504
508
  if (state) {
505
509
  if (state.leaveTimeout) {
@@ -521,7 +525,7 @@ export class ApplicationShell extends Widget {
521
525
  }
522
526
  }
523
527
 
524
- protected onDragLeave(event: IDragEvent): void {
528
+ protected onDragLeave(event: Drag.Event): void {
525
529
  const state = this.dragState;
526
530
  if (state) {
527
531
  state.lastDragOver = undefined;
@@ -606,7 +610,7 @@ export class ApplicationShell extends Widget {
606
610
 
607
611
  dockPanel.node.addEventListener('dblclick', event => {
608
612
  const el = event.target as Element;
609
- if (el.id === MAIN_AREA_ID || el.classList.contains('p-TabBar-content')) {
613
+ if (el.id === MAIN_AREA_ID || el.classList.contains('lm-TabBar-content')) {
610
614
  this.onDidDoubleClickMainAreaEmitter.fire();
611
615
  }
612
616
  });
@@ -663,7 +667,7 @@ export class ApplicationShell extends Widget {
663
667
  }
664
668
  this.refreshBottomPanelToggleButton();
665
669
  }, this);
666
- dockPanel.node.addEventListener('p-dragenter', event => {
670
+ dockPanel.node.addEventListener('lm-dragenter', event => {
667
671
  // Make sure that the main panel hides its overlay when the bottom panel is expanded
668
672
  this.mainPanel.overlay.hide(0);
669
673
  });
@@ -796,7 +800,7 @@ export class ApplicationShell extends Widget {
796
800
  const index = parent.widgets.indexOf(this.bottomPanel) - 1;
797
801
  if (index >= 0) {
798
802
  const handle = parent.handles[index];
799
- if (!handle.classList.contains('p-mod-hidden')) {
803
+ if (!handle.classList.contains('lm-mod-hidden')) {
800
804
  const parentHeight = parent.node.clientHeight;
801
805
  return parentHeight - handle.offsetTop;
802
806
  }
@@ -1037,7 +1041,7 @@ export class ApplicationShell extends Widget {
1037
1041
  */
1038
1042
  findWidgetForElement(element: HTMLElement): Widget | undefined {
1039
1043
  let widgetNode: HTMLElement | null = element;
1040
- while (widgetNode && !widgetNode.classList.contains('p-Widget')) {
1044
+ while (widgetNode && !widgetNode.classList.contains('lm-Widget')) {
1041
1045
  widgetNode = widgetNode.parentElement;
1042
1046
  }
1043
1047
  if (widgetNode) {
@@ -1067,7 +1071,7 @@ export class ApplicationShell extends Widget {
1067
1071
  if (event?.target instanceof HTMLElement) {
1068
1072
  const tabNode = event.target;
1069
1073
 
1070
- const titleIndex = Array.from(tabBar.contentNode.getElementsByClassName('p-TabBar-tab'))
1074
+ const titleIndex = Array.from(tabBar.contentNode.getElementsByClassName('lm-TabBar-tab'))
1071
1075
  .findIndex(node => node.contains(tabNode));
1072
1076
 
1073
1077
  if (titleIndex !== -1) {
@@ -1198,7 +1202,7 @@ export class ApplicationShell extends Widget {
1198
1202
  panel.markAsCurrent(widget!.title);
1199
1203
  }
1200
1204
  // Add checks to ensure that the 'sash' for left panel is displayed correctly
1201
- if (newValue.node.className === 'p-Widget theia-view-container p-DockPanel-widget') {
1205
+ if (newValue.node.className === 'lm-Widget theia-view-container lm-DockPanel-widget') {
1202
1206
  // Set the z-index so elements with `position: fixed` contained in the active widget are displayed correctly
1203
1207
  this.setZIndex(newValue.node, '1');
1204
1208
  }
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable, inject, named } from 'inversify';
18
- import { Widget } from '@phosphor/widgets';
18
+ import { Widget } from '@lumino/widgets';
19
19
  import { FrontendApplication } from '../frontend-application';
20
20
  import { WidgetManager, WidgetConstructionOptions } from '../widget-manager';
21
21
  import { StorageService } from '../storage-service';
@@ -15,11 +15,11 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable, inject } from 'inversify';
18
- import { find, map, toArray, some } from '@phosphor/algorithm';
19
- import { TabBar, Widget, DockPanel, Title, Panel, BoxPanel, BoxLayout, SplitPanel, PanelLayout } from '@phosphor/widgets';
20
- import { MimeData } from '@phosphor/coreutils';
21
- import { Drag } from '@phosphor/dragdrop';
22
- import { AttachedProperty } from '@phosphor/properties';
18
+ import { find, map, toArray, some } from '@lumino/algorithm';
19
+ import { TabBar, Widget, DockPanel, Title, Panel, BoxPanel, BoxLayout, SplitPanel, PanelLayout } from '@lumino/widgets';
20
+ import { MimeData } from '@lumino/coreutils';
21
+ import { Drag } from '@lumino/dragdrop';
22
+ import { AttachedProperty } from '@lumino/properties';
23
23
  import { TabBarRendererFactory, TabBarRenderer, SHELL_TABBAR_CONTEXT_MENU, SideTabBar } from './tab-bars';
24
24
  import { SidebarMenuWidget, SidebarMenu, SidebarBottomMenuWidgetFactory, SidebarTopMenuWidgetFactory } from './sidebar-menu-widget';
25
25
  import { SplitPositionHandler, SplitPositionOptions } from './split-panels';
@@ -557,12 +557,12 @@ export class SidePanelHandler {
557
557
  const index = parent.widgets.indexOf(this.container);
558
558
  if (this.side === 'left') {
559
559
  const handle = parent.handles[index];
560
- if (!handle.classList.contains('p-mod-hidden')) {
560
+ if (!handle.classList.contains('lm-mod-hidden')) {
561
561
  return handle.offsetLeft;
562
562
  }
563
563
  } else if (this.side === 'right') {
564
564
  const handle = parent.handles[index - 1];
565
- if (!handle.classList.contains('p-mod-hidden')) {
565
+ if (!handle.classList.contains('lm-mod-hidden')) {
566
566
  const parentWidth = parent.node.clientWidth;
567
567
  return parentWidth - handle.offsetLeft;
568
568
  }
@@ -633,13 +633,13 @@ export class SidePanelHandler {
633
633
  const clonedTab = tab.cloneNode(true) as HTMLElement;
634
634
  clonedTab.style.width = '';
635
635
  clonedTab.style.height = '';
636
- const label = clonedTab.getElementsByClassName('p-TabBar-tabLabel')[0] as HTMLElement;
636
+ const label = clonedTab.getElementsByClassName('lm-TabBar-tabLabel')[0] as HTMLElement;
637
637
  label.style.width = '';
638
638
  label.style.height = '';
639
639
 
640
640
  // Create and start a drag to move the selected tab to another panel
641
641
  const mimeData = new MimeData();
642
- mimeData.setData('application/vnd.phosphor.widget-factory', () => title.owner);
642
+ mimeData.setData('application/vnd.lumino.widget-factory', () => title.owner);
643
643
  const drag = new Drag({
644
644
  mimeData,
645
645
  dragImage: clonedTab,
@@ -647,10 +647,10 @@ export class SidePanelHandler {
647
647
  supportedActions: 'move',
648
648
  });
649
649
 
650
- tab.classList.add('p-mod-hidden');
650
+ tab.classList.add('lm-mod-hidden');
651
651
  drag.start(clientX, clientY).then(() => {
652
652
  // The promise is resolved when the drag has ended
653
- tab.classList.remove('p-mod-hidden');
653
+ tab.classList.remove('lm-mod-hidden');
654
654
  });
655
655
  }
656
656
 
@@ -14,9 +14,9 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { Widget, Title } from '@phosphor/widgets';
17
+ import { Widget, Title } from '@lumino/widgets';
18
18
  import { TabBarToolbar, TabBarToolbarRegistry, TabBarToolbarFactory } from './tab-bar-toolbar';
19
- import { Message } from '@phosphor/messaging';
19
+ import { Message } from '@lumino/messaging';
20
20
  import { BaseWidget } from '../widgets';
21
21
  import { Emitter } from '../../common/event';
22
22
  import { ContextMenuAccess, Anchor } from '../context-menu-renderer';
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable } from 'inversify';
18
- import { SplitPanel, SplitLayout, Widget } from '@phosphor/widgets';
18
+ import { SplitPanel, SplitLayout, Widget } from '@lumino/widgets';
19
19
 
20
20
  export interface SplitPositionOptions {
21
21
  /** The side of the side panel that shall be resized. */
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import debounce = require('lodash.debounce');
18
- import { Title, Widget } from '@phosphor/widgets';
18
+ import { Title, Widget } from '@lumino/widgets';
19
19
  import { inject, injectable, named } from 'inversify';
20
20
  import { ContributionProvider, Emitter, Event } from '../../common';
21
21
  import { ColorRegistry } from '../color-registry';
@@ -436,7 +436,7 @@ export namespace TabBarToolbar {
436
436
 
437
437
  export namespace Styles {
438
438
 
439
- export const TAB_BAR_TOOLBAR = 'p-TabBar-toolbar';
439
+ export const TAB_BAR_TOOLBAR = 'lm-TabBar-toolbar';
440
440
  export const TAB_BAR_TOOLBAR_ITEM = 'item';
441
441
 
442
442
  }
@@ -18,7 +18,7 @@ import { enableJSDOM } from '../test/jsdom';
18
18
  let disableJSDOM = enableJSDOM();
19
19
  import { expect } from 'chai';
20
20
 
21
- import { Title, Widget } from '@phosphor/widgets';
21
+ import { Title, Widget } from '@lumino/widgets';
22
22
  import { TabBarRenderer } from './tab-bars';
23
23
 
24
24
  disableJSDOM();