@theia/core 1.77.0-next.56 → 1.77.0-next.57

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 (102) hide show
  1. package/lib/browser/catalog.json +66 -0
  2. package/lib/browser/common-frontend-contribution.d.ts +6 -1
  3. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  4. package/lib/browser/common-frontend-contribution.js +18 -1
  5. package/lib/browser/common-frontend-contribution.js.map +1 -1
  6. package/lib/browser/keybinding.d.ts +95 -17
  7. package/lib/browser/keybinding.d.ts.map +1 -1
  8. package/lib/browser/keybinding.js +405 -75
  9. package/lib/browser/keybinding.js.map +1 -1
  10. package/lib/browser/keybinding.spec.js +786 -30
  11. package/lib/browser/keybinding.spec.js.map +1 -1
  12. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js +1 -1
  13. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js.map +1 -1
  14. package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts +3 -4
  15. package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts.map +1 -1
  16. package/lib/browser/keyboard/browser-keyboard-layout-provider.js +3 -3
  17. package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
  18. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js +39 -0
  19. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js.map +1 -1
  20. package/lib/browser/keyboard/keyboard-layout-service.d.ts +67 -15
  21. package/lib/browser/keyboard/keyboard-layout-service.d.ts.map +1 -1
  22. package/lib/browser/keyboard/keyboard-layout-service.js +309 -98
  23. package/lib/browser/keyboard/keyboard-layout-service.js.map +1 -1
  24. package/lib/browser/keyboard/keyboard-layout-service.spec.js +538 -12
  25. package/lib/browser/keyboard/keyboard-layout-service.spec.js.map +1 -1
  26. package/lib/browser/keyboard/keys.spec.js +183 -0
  27. package/lib/browser/keyboard/keys.spec.js.map +1 -1
  28. package/lib/browser/menu/action-menu-node.d.ts +5 -3
  29. package/lib/browser/menu/action-menu-node.d.ts.map +1 -1
  30. package/lib/browser/menu/action-menu-node.js +2 -11
  31. package/lib/browser/menu/action-menu-node.js.map +1 -1
  32. package/lib/browser/menu/action-menu-node.spec.d.ts +2 -0
  33. package/lib/browser/menu/action-menu-node.spec.d.ts.map +1 -0
  34. package/lib/browser/menu/action-menu-node.spec.js +54 -0
  35. package/lib/browser/menu/action-menu-node.spec.js.map +1 -0
  36. package/lib/browser/menu/browser-menu-plugin.js +1 -1
  37. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  38. package/lib/browser/test/jsdom.d.ts.map +1 -1
  39. package/lib/browser/test/jsdom.js +11 -0
  40. package/lib/browser/test/jsdom.js.map +1 -1
  41. package/lib/common/keyboard/keyboard-layout-provider.d.ts +7 -0
  42. package/lib/common/keyboard/keyboard-layout-provider.d.ts.map +1 -1
  43. package/lib/common/keyboard/keyboard-layout-provider.js.map +1 -1
  44. package/lib/common/keys.d.ts +86 -3
  45. package/lib/common/keys.d.ts.map +1 -1
  46. package/lib/common/keys.js +262 -23
  47. package/lib/common/keys.js.map +1 -1
  48. package/lib/common/ternary-search-tree.js +2 -2
  49. package/lib/common/ternary-search-tree.js.map +1 -1
  50. package/lib/common/ternary-search-tree.spec.js +12 -0
  51. package/lib/common/ternary-search-tree.spec.js.map +1 -1
  52. package/lib/electron-browser/keyboard/electron-keyboard-module.d.ts +2 -0
  53. package/lib/electron-browser/keyboard/electron-keyboard-module.d.ts.map +1 -1
  54. package/lib/electron-browser/keyboard/electron-keyboard-module.js +8 -1
  55. package/lib/electron-browser/keyboard/electron-keyboard-module.js.map +1 -1
  56. package/lib/electron-browser/keyboard/electron-keyboard-module.spec.d.ts +2 -0
  57. package/lib/electron-browser/keyboard/electron-keyboard-module.spec.d.ts.map +1 -0
  58. package/lib/electron-browser/keyboard/electron-keyboard-module.spec.js +28 -0
  59. package/lib/electron-browser/keyboard/electron-keyboard-module.spec.js.map +1 -0
  60. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  61. package/lib/electron-browser/menu/electron-main-menu-factory.js +3 -2
  62. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  63. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  64. package/lib/electron-browser/menu/electron-menu-contribution.js +3 -0
  65. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  66. package/lib/electron-common/electron-api.d.ts +5 -0
  67. package/lib/electron-common/electron-api.d.ts.map +1 -1
  68. package/lib/electron-common/electron-api.js +21 -0
  69. package/lib/electron-common/electron-api.js.map +1 -1
  70. package/lib/electron-common/electron-api.spec.d.ts +2 -0
  71. package/lib/electron-common/electron-api.spec.d.ts.map +1 -0
  72. package/lib/electron-common/electron-api.spec.js +40 -0
  73. package/lib/electron-common/electron-api.spec.js.map +1 -0
  74. package/lib/electron-main/electron-api-main.d.ts +0 -1
  75. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  76. package/lib/electron-main/electron-api-main.js +1 -12
  77. package/lib/electron-main/electron-api-main.js.map +1 -1
  78. package/package.json +4 -4
  79. package/src/browser/common-frontend-contribution.ts +16 -0
  80. package/src/browser/keybinding.spec.ts +878 -34
  81. package/src/browser/keybinding.ts +470 -85
  82. package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +1 -1
  83. package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +52 -1
  84. package/src/browser/keyboard/browser-keyboard-layout-provider.ts +5 -5
  85. package/src/browser/keyboard/keyboard-layout-service.spec.ts +640 -15
  86. package/src/browser/keyboard/keyboard-layout-service.ts +358 -106
  87. package/src/browser/keyboard/keys.spec.ts +206 -1
  88. package/src/browser/menu/action-menu-node.spec.ts +60 -0
  89. package/src/browser/menu/action-menu-node.ts +8 -14
  90. package/src/browser/menu/browser-menu-plugin.ts +1 -1
  91. package/src/browser/test/jsdom.ts +11 -0
  92. package/src/common/keyboard/keyboard-layout-provider.ts +8 -0
  93. package/src/common/keys.ts +311 -26
  94. package/src/common/ternary-search-tree.spec.ts +14 -0
  95. package/src/common/ternary-search-tree.ts +2 -2
  96. package/src/electron-browser/keyboard/electron-keyboard-module.spec.ts +29 -0
  97. package/src/electron-browser/keyboard/electron-keyboard-module.ts +9 -2
  98. package/src/electron-browser/menu/electron-main-menu-factory.ts +3 -3
  99. package/src/electron-browser/menu/electron-menu-contribution.ts +4 -0
  100. package/src/electron-common/electron-api.spec.ts +42 -0
  101. package/src/electron-common/electron-api.ts +23 -0
  102. package/src/electron-main/electron-api-main.ts +2 -13
@@ -53,7 +53,7 @@ export class BrowserKeyboardFrontendContribution implements CommandContribution
53
53
  const current = this.layoutProvider.currentLayoutData;
54
54
  const autodetect: QuickPickValue<'autodetect'> = {
55
55
  label: nls.localizeByDefault('Auto Detect'),
56
- description: this.layoutProvider.currentLayoutSource !== 'user-choice' ? nls.localize('theia/core/keyboard/current', '(current: {0})', current.name) : undefined,
56
+ description: this.layoutProvider.layoutSource !== 'user-choice' ? nls.localize('theia/core/keyboard/current', '(current: {0})', current.name) : undefined,
57
57
  detail: nls.localize('theia/core/keyboard/tryDetect', 'Try to detect the keyboard layout from browser information and pressed keys.'),
58
58
  value: 'autodetect'
59
59
  };
@@ -27,7 +27,7 @@ import { ILogger, Loggable } from '../../common/logger';
27
27
  import { LocalStorageService } from '../storage-service';
28
28
  import { MessageService } from '../../common/message-service';
29
29
  import { WindowService } from '../window/window-service';
30
- import { BrowserKeyboardLayoutProvider } from './browser-keyboard-layout-provider';
30
+ import { BrowserKeyboardLayoutProvider, KeyboardLayoutData, KeyboardLayoutSource, KeyboardTester } from './browser-keyboard-layout-provider';
31
31
  import { Key } from './keys';
32
32
 
33
33
  disableJSDOM();
@@ -134,6 +134,57 @@ describe('browser keyboard layout provider', function (): void {
134
134
  chai.expect((currentLayout.info as IMacKeyboardLayoutInfo).id).to.equal('com.apple.keylayout.French');
135
135
  });
136
136
 
137
+ it('scores AltGraph evidence independently from command Alt', () => {
138
+ const { service } = setup('linux');
139
+ const german = service.allLayoutData.find(data => data.name === 'German' && data.hardware === 'pc')!;
140
+ const tester = new KeyboardTester([german]);
141
+
142
+ tester.updateScores({ code: Key.DIGIT8.code, character: '[', altGraph: true });
143
+ chai.expect(tester.topScore).to.equal(1);
144
+
145
+ tester.reset();
146
+ tester.updateScores({ code: Key.DIGIT8.code, character: '[', altKey: true });
147
+ chai.expect(tester.topScore).to.equal(0);
148
+ });
149
+
150
+ it('can correct a wrong layout score from raw AltGraph evidence', () => {
151
+ const { service } = setup('linux');
152
+ const us = service.allLayoutData.find(data => data.name === 'US' && data.hardware === 'pc')!;
153
+ const german = service.allLayoutData.find(data => data.name === 'German' && data.hardware === 'pc')!;
154
+ const tester = new KeyboardTester([us, german]);
155
+
156
+ tester.updateScores({ code: Key.KEY_Y.code, character: 'y' });
157
+ chai.expect(tester.scores[0]).to.be.greaterThan(tester.scores[1]);
158
+ tester.updateScores({ code: Key.DIGIT8.code, character: '[', altGraph: true });
159
+ chai.expect(tester.scores[1]).to.equal(tester.scores[0]);
160
+ tester.updateScores({ code: Key.DIGIT7.code, character: '{', altGraph: true });
161
+ chai.expect(tester.scores[1]).to.be.greaterThan(tester.scores[0]);
162
+ });
163
+
164
+ it('changes the provider layout from raw AltGraph evidence', async () => {
165
+ const { service } = setup('linux');
166
+ await service.getNativeLayout();
167
+ const us = service.allLayoutData.find(data => data.name === 'US' && data.hardware === 'pc')!;
168
+ const german = service.allLayoutData.find(data => data.name === 'German' && data.hardware === 'pc')!;
169
+ const internal = service as unknown as {
170
+ tester: KeyboardTester;
171
+ currentLayout: KeyboardLayoutData;
172
+ source: KeyboardLayoutSource;
173
+ };
174
+ internal.tester = new KeyboardTester([us, german]);
175
+ internal.tester.updateScores({ code: Key.KEY_Y.code, character: 'y' });
176
+ internal.currentLayout = us;
177
+ internal.source = 'pressed-keys';
178
+ let changedLayout: KeyboardLayoutData['raw'] | undefined;
179
+ service.onDidChangeNativeLayout(layout => changedLayout = layout);
180
+
181
+ service.validateKey({ code: Key.DIGIT8.code, character: '[', altGraph: true });
182
+ service.validateKey({ code: Key.DIGIT7.code, character: '{', altGraph: true });
183
+
184
+ chai.expect(changedLayout?.info).to.deep.equal(german.raw.info);
185
+ chai.expect(service.currentLayoutData).to.equal(german);
186
+ });
187
+
137
188
  it('restores user selection from last session', async () => {
138
189
  const { service, container } = setup('mac');
139
190
 
@@ -20,11 +20,11 @@ import { Emitter, Event } from '../../common/event';
20
20
  import { ILogger } from '../../common/logger';
21
21
  import { Deferred } from '../../common/promise-util';
22
22
  import {
23
- NativeKeyboardLayout, KeyboardLayoutProvider, KeyboardLayoutChangeNotifier, KeyValidator, KeyValidationInput
23
+ NativeKeyboardLayout, KeyboardLayoutProvider, KeyboardLayoutChangeNotifier, KeyValidator, KeyValidationInput, KeyboardLayoutSource
24
24
  } from '../../common/keyboard/keyboard-layout-provider';
25
25
  import { LocalStorageService } from '../storage-service';
26
26
 
27
- export type KeyboardLayoutSource = 'navigator.keyboard' | 'user-choice' | 'pressed-keys';
27
+ export type { KeyboardLayoutSource } from '../../common/keyboard/keyboard-layout-provider';
28
28
 
29
29
  @injectable()
30
30
  export class BrowserKeyboardLayoutProvider implements KeyboardLayoutProvider, KeyboardLayoutChangeNotifier, KeyValidator {
@@ -54,7 +54,7 @@ export class BrowserKeyboardLayoutProvider implements KeyboardLayoutProvider, Ke
54
54
  return this.currentLayout;
55
55
  }
56
56
 
57
- get currentLayoutSource(): KeyboardLayoutSource {
57
+ get layoutSource(): KeyboardLayoutSource {
58
58
  return this.source;
59
59
  }
60
60
 
@@ -289,11 +289,11 @@ export class KeyboardTester {
289
289
 
290
290
  updateScores(input: KeyValidationInput): boolean {
291
291
  let property: 'value' | 'withShift' | 'withAltGr' | 'withShiftAltGr';
292
- if (input.shiftKey && input.altKey) {
292
+ if (input.shiftKey && input.altGraph) {
293
293
  property = 'withShiftAltGr';
294
294
  } else if (input.shiftKey) {
295
295
  property = 'withShift';
296
- } else if (input.altKey) {
296
+ } else if (input.altGraph) {
297
297
  property = 'withAltGr';
298
298
  } else {
299
299
  property = 'value';