@theia/monaco 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.
@@ -17,6 +17,20 @@
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
19
  let disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ if (typeof CSS === 'undefined') {
21
+ Object.assign(globalThis, { CSS: { escape: (value) => value } });
22
+ }
23
+ window.matchMedia = () => ({
24
+ matches: false,
25
+ media: '',
26
+ // eslint-disable-next-line no-null/no-null
27
+ onchange: null,
28
+ addListener: () => undefined,
29
+ removeListener: () => undefined,
30
+ addEventListener: () => undefined,
31
+ removeEventListener: () => undefined,
32
+ dispatchEvent: () => false
33
+ });
20
34
  const chai_1 = require("chai");
21
35
  const core_1 = require("@theia/core");
22
36
  const standaloneServices_1 = require("@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices");
@@ -41,7 +55,20 @@ disableJSDOM();
41
55
  * the corresponding code in `monaco-init.ts` must be updated to match.
42
56
  */
43
57
  describe('Monaco InstantiationService internals', () => {
44
- before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
58
+ before(() => {
59
+ disableJSDOM = (0, jsdom_1.enableJSDOM)();
60
+ window.matchMedia = () => ({
61
+ matches: false,
62
+ media: '',
63
+ // eslint-disable-next-line no-null/no-null
64
+ onchange: null,
65
+ addListener: () => undefined,
66
+ removeListener: () => undefined,
67
+ addEventListener: () => undefined,
68
+ removeEventListener: () => undefined,
69
+ dispatchEvent: () => false
70
+ });
71
+ });
45
72
  after(() => disableJSDOM());
46
73
  it('StandaloneServices.get(IInstantiationService) should be an instance of InstantiationService', () => {
47
74
  const instantiationService = standaloneServices_1.StandaloneServices.get(instantiation_1.IInstantiationService);
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-init.spec.js","sourceRoot":"","sources":["../../src/browser/monaco-init.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,8DAAiE;AACjE,IAAI,YAAY,GAAG,IAAA,mBAAW,GAAE,CAAC;AAEjC,+BAA8B;AAC9B,sCAAyC;AACzC,sHAAmH;AACnH,gHAAqH;AACrH,8HAA2H;AAC3H,wHAAqH;AAErH,YAAY,EAAE,CAAC;AAEf;;;;;;;;;;;;;;;GAeG;AACH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IAEnD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,GAAG,IAAA,mBAAW,GAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;IAE5B,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACnG,MAAM,oBAAoB,GAAG,uCAAkB,CAAC,GAAG,CAAC,qCAAqB,CAAC,CAAC;QAC3E,IAAA,aAAM,EAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2CAAoB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4GAA4G,EAAE,GAAG,EAAE;QAClH,MAAM,oBAAoB,GAAG,uCAAkB,CAAC,GAAG,CAAC,qCAAqB,CAAC,CAAC;QAC3E,8DAA8D;QAC9D,MAAM,QAAQ,GAAI,oBAA4B,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACrC,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,qCAAiB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,6EAA6E;IAC7E,0EAA0E;IAC1E,oEAAoE;IACpE,EAAE,CAAC,iGAAiG,EAAE,GAAG,EAAE;QACvG,2EAA2E;QAC3E,uCAAkB,CAAC,GAAG,CAAC,qCAAqB,CAAC,CAAC;QAE9C,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,uCAAkB,CAAC,YAAY,CAAC,GAAG,EAAE;YACjC,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,iBAAU,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"monaco-init.spec.js","sourceRoot":"","sources":["../../src/browser/monaco-init.spec.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare class MonacoKeybindingContribution implements KeybindingContribut
12
12
  protected init(): void;
13
13
  registerKeybindings(registry: KeybindingRegistry): void;
14
14
  protected updateMonacoKeybindings(): void;
15
+ protected isMonacoRepresentable(codes: KeyCode[]): boolean;
15
16
  protected toMonacoKeybindingNumber(codes: KeyCode[]): number;
16
17
  protected toSingleMonacoKeybindingNumber(code: KeyCode): number;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-keybinding.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-keybinding.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAmB,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE/G,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAC;AAKjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAIvE,qBACa,4BAA6B,YAAW,sBAAsB;IAEvE,SAAS,CAAC,2BAA2B,uBAA8B;IAEpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAG/F,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,IAAI,IAAI,IAAI;IAItB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAiBvD,SAAS,CAAC,uBAAuB,IAAI,IAAI;IAsBzC,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM;IAU5D,SAAS,CAAC,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;CAiBlE"}
1
+ {"version":3,"file":"monaco-keybinding.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-keybinding.ts"],"names":[],"mappings":"AAiBA,OAAO,EACH,sBAAsB,EAAE,kBAAkB,EAAmB,OAAO,EACvE,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAC;AAKjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAIvE,qBACa,4BAA6B,YAAW,sBAAsB;IAEvE,SAAS,CAAC,2BAA2B,uBAA8B;IAEpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAG/F,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,IAAI,IAAI,IAAI;IAItB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAiBvD,SAAS,CAAC,uBAAuB,IAAI,IAAI;IAyBzC,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO;IAK1D,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM;IAU5D,SAAS,CAAC,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;CAiBlE"}
@@ -59,6 +59,9 @@ let MonacoKeybindingContribution = class MonacoKeybindingContribution {
59
59
  this.toDisposeOnKeybindingChange.dispose();
60
60
  for (const binding of this.keybindings.getKeybindingsByScope(browser_1.KeybindingScope.USER).concat(this.keybindings.getKeybindingsByScope(browser_1.KeybindingScope.WORKSPACE))) {
61
61
  const resolved = this.keybindings.resolveKeybinding(binding);
62
+ if (this.keybindings.isKeybindingInactive(binding) || !this.isMonacoRepresentable(resolved)) {
63
+ continue;
64
+ }
62
65
  const command = binding.command;
63
66
  const when = binding.when
64
67
  ? this.contextKeyService.parse(binding.when)
@@ -69,6 +72,10 @@ let MonacoKeybindingContribution = class MonacoKeybindingContribution {
69
72
  }
70
73
  }
71
74
  }
75
+ isMonacoRepresentable(codes) {
76
+ return codes.length <= 2 && codes.every(code => code.key && monaco_keycode_map_1.KEY_CODE_MAP[code.key.keyCode] !== undefined
77
+ && !(0, browser_1.layoutModifiersIncludeAltGraph)(code.layoutModifiers));
78
+ }
72
79
  toMonacoKeybindingNumber(codes) {
73
80
  const [firstPart, secondPart] = codes;
74
81
  if (codes.length > 2) {
@@ -84,11 +91,11 @@ let MonacoKeybindingContribution = class MonacoKeybindingContribution {
84
91
  if (code.alt) {
85
92
  encoded |= monaco.KeyMod.Alt;
86
93
  }
87
- if (code.shift) {
94
+ if (code.shift || (0, browser_1.layoutModifiersIncludeShift)(code.layoutModifiers)) {
88
95
  encoded |= monaco.KeyMod.Shift;
89
96
  }
90
97
  if (code.ctrl) {
91
- encoded |= monaco.KeyMod.WinCtrl;
98
+ encoded |= core_1.isOSX ? monaco.KeyMod.WinCtrl : monaco.KeyMod.CtrlCmd;
92
99
  }
93
100
  if (code.meta && core_1.isOSX) {
94
101
  encoded |= monaco.KeyMod.CtrlCmd;
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-keybinding.js","sourceRoot":"","sources":["../../src/browser/monaco-keybinding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monaco-keybinding.js","sourceRoot":"","sources":["../../src/browser/monaco-keybinding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=monaco-keybinding.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monaco-keybinding.spec.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-keybinding.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
10
+ // *****************************************************************************
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const tslib_1 = require("tslib");
13
+ const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
14
+ let disableJSDOM = (0, jsdom_1.enableJSDOM)();
15
+ const chai_1 = require("chai");
16
+ const browser_1 = require("@theia/core/lib/browser");
17
+ const os = tslib_1.__importStar(require("@theia/core/lib/common/os"));
18
+ const monaco = tslib_1.__importStar(require("@theia/monaco-editor-core"));
19
+ const MonacoPlatform = tslib_1.__importStar(require("@theia/monaco-editor-core/esm/vs/base/common/platform"));
20
+ const keybindings_1 = require("@theia/monaco-editor-core/esm/vs/base/common/keybindings");
21
+ const usLayoutResolvedKeybinding_1 = require("@theia/monaco-editor-core/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding");
22
+ const sinon = tslib_1.__importStar(require("sinon"));
23
+ const monaco_keybinding_1 = require("./monaco-keybinding");
24
+ const monaco_resolved_keybinding_1 = require("./monaco-resolved-keybinding");
25
+ class TestMonacoKeybindingContribution extends monaco_keybinding_1.MonacoKeybindingContribution {
26
+ encode(code) {
27
+ return this.toSingleMonacoKeybindingNumber(code);
28
+ }
29
+ representable(codes) {
30
+ return this.isMonacoRepresentable(codes);
31
+ }
32
+ }
33
+ disableJSDOM();
34
+ describe('Monaco keybinding adapter', () => {
35
+ let contribution;
36
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
37
+ after(() => disableJSDOM());
38
+ beforeEach(() => contribution = new TestMonacoKeybindingContribution());
39
+ afterEach(() => sinon.restore());
40
+ it('encodes non-macOS Ctrl as Monaco CtrlCmd', () => {
41
+ sinon.stub(os, 'isOSX').value(false);
42
+ const encoded = contribution.encode(new browser_1.KeyCode({ key: browser_1.Key.KEY_A, ctrl: true }));
43
+ (0, chai_1.expect)(encoded & monaco.KeyMod.CtrlCmd).to.equal(monaco.KeyMod.CtrlCmd);
44
+ (0, chai_1.expect)(encoded & monaco.KeyMod.WinCtrl).to.equal(0);
45
+ });
46
+ it('preserves macOS Ctrl and Command encoding', () => {
47
+ sinon.stub(os, 'isOSX').value(true);
48
+ const encoded = contribution.encode(new browser_1.KeyCode({ key: browser_1.Key.KEY_A, ctrl: true, meta: true }));
49
+ (0, chai_1.expect)(encoded & monaco.KeyMod.WinCtrl).to.equal(monaco.KeyMod.WinCtrl);
50
+ (0, chai_1.expect)(encoded & monaco.KeyMod.CtrlCmd).to.equal(monaco.KeyMod.CtrlCmd);
51
+ });
52
+ it('accepts layout Shift but rejects layout AltGraph and unmapped keys', () => {
53
+ (0, chai_1.expect)(contribution.representable([
54
+ new browser_1.KeyCode({ key: browser_1.Key.DIGIT7, layoutModifiers: 'shift' })
55
+ ])).to.be.true;
56
+ (0, chai_1.expect)(contribution.representable([
57
+ new browser_1.KeyCode({ key: browser_1.Key.DIGIT8, layoutModifiers: 'altGraph' })
58
+ ])).to.be.false;
59
+ (0, chai_1.expect)(contribution.representable([new browser_1.KeyCode({ key: browser_1.Key.F20 })])).to.be.false;
60
+ });
61
+ it('uses formatted logical characters in resolved labels', () => {
62
+ const registry = Object.create(browser_1.KeybindingRegistry.prototype);
63
+ const bracket = new monaco_resolved_keybinding_1.MonacoResolvedKeybinding([
64
+ new browser_1.KeyCode({ key: browser_1.Key.DIGIT8, ctrl: true, character: '[', layoutModifiers: 'altGraph' })
65
+ ], registry);
66
+ const letter = new monaco_resolved_keybinding_1.MonacoResolvedKeybinding([
67
+ new browser_1.KeyCode({ key: browser_1.Key.KEY_P, ctrl: true, character: 'p' })
68
+ ], registry);
69
+ const controlLabel = MonacoPlatform.OS === 2 /* MonacoPlatform.OperatingSystem.Macintosh */ ? '⌃' : 'Ctrl+';
70
+ (0, chai_1.expect)(bracket.getLabel()).to.equal(`${controlLabel}[`);
71
+ (0, chai_1.expect)(letter.getLabel()).to.equal(`${controlLabel}P`);
72
+ });
73
+ it('includes layout Shift in dispatch chords but not in labels', () => {
74
+ const registry = Object.create(browser_1.KeybindingRegistry.prototype);
75
+ const resolved = new monaco_resolved_keybinding_1.MonacoResolvedKeybinding([
76
+ new browser_1.KeyCode({ key: browser_1.Key.DIGIT7, ctrl: true, character: '/', layoutModifiers: 'shift' })
77
+ ], registry);
78
+ const expectedDispatch = usLayoutResolvedKeybinding_1.USLayoutResolvedKeybinding.getDispatchStr(new keybindings_1.KeyCodeChord(true, true, false, false, 28 /* MonacoKeyCode.Digit7 */));
79
+ const controlLabel = MonacoPlatform.OS === 2 /* MonacoPlatform.OperatingSystem.Macintosh */ ? '⌃' : 'Ctrl+';
80
+ (0, chai_1.expect)(resolved.getDispatchChords()).to.deep.equal([expectedDispatch]);
81
+ (0, chai_1.expect)(resolved.getLabel()).to.equal(`${controlLabel}/`);
82
+ });
83
+ it('shows layout Shift in labels when it produces an uppercase letter', () => {
84
+ const registry = Object.create(browser_1.KeybindingRegistry.prototype);
85
+ const resolved = new monaco_resolved_keybinding_1.MonacoResolvedKeybinding([
86
+ new browser_1.KeyCode({ key: browser_1.Key.KEY_P, ctrl: true, character: 'P', layoutModifiers: 'shift' })
87
+ ], registry);
88
+ const expectedDispatch = usLayoutResolvedKeybinding_1.USLayoutResolvedKeybinding.getDispatchStr(new keybindings_1.KeyCodeChord(true, true, false, false, 46 /* MonacoKeyCode.KeyP */));
89
+ const isMac = MonacoPlatform.OS === 2 /* MonacoPlatform.OperatingSystem.Macintosh */;
90
+ (0, chai_1.expect)(resolved.getDispatchChords()).to.deep.equal([expectedDispatch]);
91
+ (0, chai_1.expect)(resolved.getLabel()).to.equal(isMac ? '⌃⇧P' : 'Ctrl+Shift+P');
92
+ });
93
+ });
94
+ //# sourceMappingURL=monaco-keybinding.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monaco-keybinding.spec.js","sourceRoot":"","sources":["../../src/browser/monaco-keybinding.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-resolved-keybinding.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-resolved-keybinding.ts"],"names":[],"mappings":"AAiBA,OAAO,EACH,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EAAgB,KAAK,EAC9E,MAAM,0DAA0D,CAAC;AAIlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAA+B,MAAM,8BAA8B,CAAC;AAIjG,qBAAa,wBAAyB,SAAQ,kBAAkB;IAIhD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAFvD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;gBAEZ,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB;IAiB9F,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,sBAAsB,IAAI,MAAM,GAAG,IAAI;IASvC,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAIrC,SAAS,IAAI,OAAO;IAIpB,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAItC,+BAA+B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE;IAIjE,SAAS,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI;IAmBlF,OAAO,CAAC,YAAY;IAUb,SAAS,IAAI,aAAa,EAAE;IAInC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM;IAItD,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO;IAyB1C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,WAAW;IAIpD,OAAO,CAAC,MAAM,CAAC,qBAAqB;CASvC"}
1
+ {"version":3,"file":"monaco-resolved-keybinding.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-resolved-keybinding.ts"],"names":[],"mappings":"AAiBA,OAAO,EACH,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EAAgB,KAAK,EAC9E,MAAM,0DAA0D,CAAC;AAIlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAA+B,MAAM,8BAA8B,CAAC;AAKjG,qBAAa,wBAAyB,SAAQ,kBAAkB;IAIhD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAFvD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;gBAEZ,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB;IAmB9F,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,sBAAsB,IAAI,MAAM,GAAG,IAAI;IASvC,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAIrC,SAAS,IAAI,OAAO;IAIpB,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAItC,+BAA+B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE;IAIjE,SAAS,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI;IAmBlF,OAAO,CAAC,YAAY;IAUb,SAAS,IAAI,aAAa,EAAE;IAInC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM;IAItD,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO;IAyB1C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,WAAW;IAIpD,OAAO,CAAC,MAAM,CAAC,qBAAqB;CASvC"}
@@ -22,6 +22,7 @@ const keybindingLabels_1 = require("@theia/monaco-editor-core/esm/vs/base/common
22
22
  const usLayoutResolvedKeybinding_1 = require("@theia/monaco-editor-core/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding");
23
23
  const MonacoPlatform = tslib_1.__importStar(require("@theia/monaco-editor-core/esm/vs/base/common/platform"));
24
24
  const keys_1 = require("@theia/core/lib/browser/keys");
25
+ const keys_2 = require("@theia/core/lib/common/keys");
25
26
  const os_1 = require("@theia/core/lib/common/os");
26
27
  const monaco_keycode_map_1 = require("./monaco-keycode-map");
27
28
  class MonacoResolvedKeybinding extends keybindings_1.ResolvedKeybinding {
@@ -29,10 +30,12 @@ class MonacoResolvedKeybinding extends keybindings_1.ResolvedKeybinding {
29
30
  super();
30
31
  this.keySequence = keySequence;
31
32
  this.chords = keySequence.map(keyCode => {
33
+ const components = keybindingService.componentsForKeyCode(keyCode);
32
34
  // eslint-disable-next-line no-null/no-null
33
- const keyLabel = keyCode.key ? keybindingService.acceleratorForKey(keyCode.key) : null;
35
+ const keyLabel = keyCode.key ? components[components.length - 1] : null;
34
36
  const keyAriaLabel = keyLabel;
35
- return new keybindings_1.ResolvedChord(keyCode.ctrl, keyCode.shift, keyCode.alt, keyCode.meta, keyLabel, keyAriaLabel);
37
+ // The label uses the logical character, so layout Shift only appears when it produced an uppercase letter.
38
+ return new keybindings_1.ResolvedChord(keyCode.ctrl, keybindingService.displaysShift(keyCode), keyCode.alt, keyCode.meta, keyLabel, keyAriaLabel);
36
39
  });
37
40
  }
38
41
  getLabel() {
@@ -83,7 +86,7 @@ class MonacoResolvedKeybinding extends keybindings_1.ResolvedKeybinding {
83
86
  return null; // eslint-disable-line no-null/no-null
84
87
  }
85
88
  toKeybinding(keyCode) {
86
- return new keybindings_1.KeyCodeChord(keyCode.ctrl, keyCode.shift, keyCode.alt, keyCode.meta, monaco_keycode_map_1.KEY_CODE_MAP[keyCode.key.keyCode]);
89
+ return new keybindings_1.KeyCodeChord(keyCode.ctrl, keyCode.shift || (0, keys_2.layoutModifiersIncludeShift)(keyCode.layoutModifiers), keyCode.alt, keyCode.meta, monaco_keycode_map_1.KEY_CODE_MAP[keyCode.key.keyCode]);
87
90
  }
88
91
  getChords() {
89
92
  return this.chords;
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-resolved-keybinding.js","sourceRoot":"","sources":["../../src/browser/monaco-resolved-keybinding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monaco-resolved-keybinding.js","sourceRoot":"","sources":["../../src/browser/monaco-resolved-keybinding.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@theia/monaco",
3
- "version": "1.77.0-next.56+320e807e1",
3
+ "version": "1.77.0-next.57+81ea5f939",
4
4
  "description": "Theia - Monaco Extension",
5
5
  "dependencies": {
6
- "@theia/core": "1.77.0-next.56+320e807e1",
7
- "@theia/editor": "1.77.0-next.56+320e807e1",
8
- "@theia/filesystem": "1.77.0-next.56+320e807e1",
9
- "@theia/markers": "1.77.0-next.56+320e807e1",
6
+ "@theia/core": "1.77.0-next.57+81ea5f939",
7
+ "@theia/editor": "1.77.0-next.57+81ea5f939",
8
+ "@theia/filesystem": "1.77.0-next.57+81ea5f939",
9
+ "@theia/markers": "1.77.0-next.57+81ea5f939",
10
10
  "@theia/monaco-editor-core": "1.108.201",
11
- "@theia/outline-view": "1.77.0-next.56+320e807e1",
12
- "@theia/workspace": "1.77.0-next.56+320e807e1",
11
+ "@theia/outline-view": "1.77.0-next.57+81ea5f939",
12
+ "@theia/workspace": "1.77.0-next.57+81ea5f939",
13
13
  "fast-plist": "^0.1.3",
14
14
  "idb": "^4.0.5",
15
15
  "jsonc-parser": "^3.3.1",
@@ -57,5 +57,5 @@
57
57
  "nyc": {
58
58
  "extends": "../../configs/nyc.json"
59
59
  },
60
- "gitHead": "320e807e120baf2dd899cee35cb39c7e1f74f7a0"
60
+ "gitHead": "81ea5f939c40c905de91083d07e284bfd7437fac"
61
61
  }
@@ -16,6 +16,20 @@
16
16
 
17
17
  import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
18
18
  let disableJSDOM = enableJSDOM();
19
+ if (typeof CSS === 'undefined') {
20
+ Object.assign(globalThis, { CSS: { escape: (value: string) => value } });
21
+ }
22
+ window.matchMedia = () => ({
23
+ matches: false,
24
+ media: '',
25
+ // eslint-disable-next-line no-null/no-null
26
+ onchange: null,
27
+ addListener: () => undefined,
28
+ removeListener: () => undefined,
29
+ addEventListener: () => undefined,
30
+ removeEventListener: () => undefined,
31
+ dispatchEvent: () => false
32
+ });
19
33
 
20
34
  import { expect } from 'chai';
21
35
  import { Disposable } from '@theia/core';
@@ -44,7 +58,20 @@ disableJSDOM();
44
58
  */
45
59
  describe('Monaco InstantiationService internals', () => {
46
60
 
47
- before(() => disableJSDOM = enableJSDOM());
61
+ before(() => {
62
+ disableJSDOM = enableJSDOM();
63
+ window.matchMedia = () => ({
64
+ matches: false,
65
+ media: '',
66
+ // eslint-disable-next-line no-null/no-null
67
+ onchange: null,
68
+ addListener: () => undefined,
69
+ removeListener: () => undefined,
70
+ addEventListener: () => undefined,
71
+ removeEventListener: () => undefined,
72
+ dispatchEvent: () => false
73
+ });
74
+ });
48
75
  after(() => disableJSDOM());
49
76
 
50
77
  it('StandaloneServices.get(IInstantiationService) should be an instance of InstantiationService', () => {
@@ -0,0 +1,117 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
9
+ // *****************************************************************************
10
+
11
+ import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
12
+ let disableJSDOM = enableJSDOM();
13
+
14
+ import { expect } from 'chai';
15
+ import { Key, KeybindingRegistry, KeyCode } from '@theia/core/lib/browser';
16
+ import * as os from '@theia/core/lib/common/os';
17
+ import * as monaco from '@theia/monaco-editor-core';
18
+ import * as MonacoPlatform from '@theia/monaco-editor-core/esm/vs/base/common/platform';
19
+ import { KeyCode as MonacoKeyCode } from '@theia/monaco-editor-core/esm/vs/base/common/keyCodes';
20
+ import { KeyCodeChord } from '@theia/monaco-editor-core/esm/vs/base/common/keybindings';
21
+ import { USLayoutResolvedKeybinding } from '@theia/monaco-editor-core/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding';
22
+ import * as sinon from 'sinon';
23
+ import { MonacoKeybindingContribution } from './monaco-keybinding';
24
+ import { MonacoResolvedKeybinding } from './monaco-resolved-keybinding';
25
+
26
+ class TestMonacoKeybindingContribution extends MonacoKeybindingContribution {
27
+ encode(code: KeyCode): number {
28
+ return this.toSingleMonacoKeybindingNumber(code);
29
+ }
30
+
31
+ representable(codes: KeyCode[]): boolean {
32
+ return this.isMonacoRepresentable(codes);
33
+ }
34
+ }
35
+
36
+ disableJSDOM();
37
+
38
+ describe('Monaco keybinding adapter', () => {
39
+ let contribution: TestMonacoKeybindingContribution;
40
+
41
+ before(() => disableJSDOM = enableJSDOM());
42
+ after(() => disableJSDOM());
43
+
44
+ beforeEach(() => contribution = new TestMonacoKeybindingContribution());
45
+
46
+ afterEach(() => sinon.restore());
47
+
48
+ it('encodes non-macOS Ctrl as Monaco CtrlCmd', () => {
49
+ sinon.stub(os, 'isOSX').value(false);
50
+
51
+ const encoded = contribution.encode(new KeyCode({ key: Key.KEY_A, ctrl: true }));
52
+
53
+ expect(encoded & monaco.KeyMod.CtrlCmd).to.equal(monaco.KeyMod.CtrlCmd);
54
+ expect(encoded & monaco.KeyMod.WinCtrl).to.equal(0);
55
+ });
56
+
57
+ it('preserves macOS Ctrl and Command encoding', () => {
58
+ sinon.stub(os, 'isOSX').value(true);
59
+
60
+ const encoded = contribution.encode(new KeyCode({ key: Key.KEY_A, ctrl: true, meta: true }));
61
+
62
+ expect(encoded & monaco.KeyMod.WinCtrl).to.equal(monaco.KeyMod.WinCtrl);
63
+ expect(encoded & monaco.KeyMod.CtrlCmd).to.equal(monaco.KeyMod.CtrlCmd);
64
+ });
65
+
66
+ it('accepts layout Shift but rejects layout AltGraph and unmapped keys', () => {
67
+ expect(contribution.representable([
68
+ new KeyCode({ key: Key.DIGIT7, layoutModifiers: 'shift' })
69
+ ])).to.be.true;
70
+ expect(contribution.representable([
71
+ new KeyCode({ key: Key.DIGIT8, layoutModifiers: 'altGraph' })
72
+ ])).to.be.false;
73
+ expect(contribution.representable([new KeyCode({ key: Key.F20 })])).to.be.false;
74
+ });
75
+
76
+ it('uses formatted logical characters in resolved labels', () => {
77
+ const registry = Object.create(KeybindingRegistry.prototype) as KeybindingRegistry;
78
+ const bracket = new MonacoResolvedKeybinding([
79
+ new KeyCode({ key: Key.DIGIT8, ctrl: true, character: '[', layoutModifiers: 'altGraph' })
80
+ ], registry);
81
+ const letter = new MonacoResolvedKeybinding([
82
+ new KeyCode({ key: Key.KEY_P, ctrl: true, character: 'p' })
83
+ ], registry);
84
+
85
+ const controlLabel = MonacoPlatform.OS === MonacoPlatform.OperatingSystem.Macintosh ? '⌃' : 'Ctrl+';
86
+ expect(bracket.getLabel()).to.equal(`${controlLabel}[`);
87
+ expect(letter.getLabel()).to.equal(`${controlLabel}P`);
88
+ });
89
+
90
+ it('includes layout Shift in dispatch chords but not in labels', () => {
91
+ const registry = Object.create(KeybindingRegistry.prototype) as KeybindingRegistry;
92
+ const resolved = new MonacoResolvedKeybinding([
93
+ new KeyCode({ key: Key.DIGIT7, ctrl: true, character: '/', layoutModifiers: 'shift' })
94
+ ], registry);
95
+ const expectedDispatch = USLayoutResolvedKeybinding.getDispatchStr(
96
+ new KeyCodeChord(true, true, false, false, MonacoKeyCode.Digit7)
97
+ );
98
+ const controlLabel = MonacoPlatform.OS === MonacoPlatform.OperatingSystem.Macintosh ? '⌃' : 'Ctrl+';
99
+
100
+ expect(resolved.getDispatchChords()).to.deep.equal([expectedDispatch]);
101
+ expect(resolved.getLabel()).to.equal(`${controlLabel}/`);
102
+ });
103
+
104
+ it('shows layout Shift in labels when it produces an uppercase letter', () => {
105
+ const registry = Object.create(KeybindingRegistry.prototype) as KeybindingRegistry;
106
+ const resolved = new MonacoResolvedKeybinding([
107
+ new KeyCode({ key: Key.KEY_P, ctrl: true, character: 'P', layoutModifiers: 'shift' })
108
+ ], registry);
109
+ const expectedDispatch = USLayoutResolvedKeybinding.getDispatchStr(
110
+ new KeyCodeChord(true, true, false, false, MonacoKeyCode.KeyP)
111
+ );
112
+ const isMac = MonacoPlatform.OS === MonacoPlatform.OperatingSystem.Macintosh;
113
+
114
+ expect(resolved.getDispatchChords()).to.deep.equal([expectedDispatch]);
115
+ expect(resolved.getLabel()).to.equal(isMac ? '⌃⇧P' : 'Ctrl+Shift+P');
116
+ });
117
+ });
@@ -15,7 +15,9 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable, inject, postConstruct, named } from '@theia/core/shared/inversify';
18
- import { KeybindingContribution, KeybindingRegistry, KeybindingScope, KeyCode } from '@theia/core/lib/browser';
18
+ import {
19
+ KeybindingContribution, KeybindingRegistry, KeybindingScope, KeyCode, layoutModifiersIncludeAltGraph, layoutModifiersIncludeShift
20
+ } from '@theia/core/lib/browser';
19
21
  import { MonacoCommands } from './monaco-command';
20
22
  import { MonacoCommandRegistry } from './monaco-command-registry';
21
23
  import { CommandRegistry, DisposableCollection, environment, isOSX, ILogger } from '@theia/core';
@@ -68,6 +70,9 @@ export class MonacoKeybindingContribution implements KeybindingContribution {
68
70
  this.toDisposeOnKeybindingChange.dispose();
69
71
  for (const binding of this.keybindings.getKeybindingsByScope(KeybindingScope.USER).concat(this.keybindings.getKeybindingsByScope(KeybindingScope.WORKSPACE))) {
70
72
  const resolved = this.keybindings.resolveKeybinding(binding);
73
+ if (this.keybindings.isKeybindingInactive(binding) || !this.isMonacoRepresentable(resolved)) {
74
+ continue;
75
+ }
71
76
  const command = binding.command;
72
77
  const when = binding.when
73
78
  ? this.contextKeyService.parse(binding.when)
@@ -84,6 +89,11 @@ export class MonacoKeybindingContribution implements KeybindingContribution {
84
89
  }
85
90
  }
86
91
 
92
+ protected isMonacoRepresentable(codes: KeyCode[]): boolean {
93
+ return codes.length <= 2 && codes.every(code => code.key && KEY_CODE_MAP[code.key.keyCode] !== undefined
94
+ && !layoutModifiersIncludeAltGraph(code.layoutModifiers));
95
+ }
96
+
87
97
  protected toMonacoKeybindingNumber(codes: KeyCode[]): number {
88
98
  const [firstPart, secondPart] = codes;
89
99
  if (codes.length > 2) {
@@ -100,11 +110,11 @@ export class MonacoKeybindingContribution implements KeybindingContribution {
100
110
  if (code.alt) {
101
111
  encoded |= monaco.KeyMod.Alt;
102
112
  }
103
- if (code.shift) {
113
+ if (code.shift || layoutModifiersIncludeShift(code.layoutModifiers)) {
104
114
  encoded |= monaco.KeyMod.Shift;
105
115
  }
106
116
  if (code.ctrl) {
107
- encoded |= monaco.KeyMod.WinCtrl;
117
+ encoded |= isOSX ? monaco.KeyMod.WinCtrl : monaco.KeyMod.CtrlCmd;
108
118
  }
109
119
  if (code.meta && isOSX) {
110
120
  encoded |= monaco.KeyMod.CtrlCmd;
@@ -23,6 +23,7 @@ import { USLayoutResolvedKeybinding } from '@theia/monaco-editor-core/esm/vs/pla
23
23
  import * as MonacoPlatform from '@theia/monaco-editor-core/esm/vs/base/common/platform';
24
24
  import { KeybindingRegistry } from '@theia/core/lib/browser/keybinding';
25
25
  import { KeyCode, KeySequence, Keystroke, Key, KeyModifier } from '@theia/core/lib/browser/keys';
26
+ import { layoutModifiersIncludeShift } from '@theia/core/lib/common/keys';
26
27
  import { isOSX } from '@theia/core/lib/common/os';
27
28
  import { KEY_CODE_MAP } from './monaco-keycode-map';
28
29
 
@@ -33,12 +34,14 @@ export class MonacoResolvedKeybinding extends ResolvedKeybinding {
33
34
  constructor(protected readonly keySequence: KeySequence, keybindingService: KeybindingRegistry) {
34
35
  super();
35
36
  this.chords = keySequence.map(keyCode => {
37
+ const components = keybindingService.componentsForKeyCode(keyCode);
36
38
  // eslint-disable-next-line no-null/no-null
37
- const keyLabel = keyCode.key ? keybindingService.acceleratorForKey(keyCode.key) : null;
39
+ const keyLabel = keyCode.key ? components[components.length - 1] : null;
38
40
  const keyAriaLabel = keyLabel;
41
+ // The label uses the logical character, so layout Shift only appears when it produced an uppercase letter.
39
42
  return new ResolvedChord(
40
43
  keyCode.ctrl,
41
- keyCode.shift,
44
+ keybindingService.displaysShift(keyCode),
42
45
  keyCode.alt,
43
46
  keyCode.meta,
44
47
  keyLabel,
@@ -106,7 +109,7 @@ export class MonacoResolvedKeybinding extends ResolvedKeybinding {
106
109
  private toKeybinding(keyCode: KeyCode): KeyCodeChord {
107
110
  return new KeyCodeChord(
108
111
  keyCode.ctrl,
109
- keyCode.shift,
112
+ keyCode.shift || layoutModifiersIncludeShift(keyCode.layoutModifiers),
110
113
  keyCode.alt,
111
114
  keyCode.meta,
112
115
  KEY_CODE_MAP[keyCode.key!.keyCode]