keymap-inspector 0.1.1 → 0.1.4

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.
@@ -0,0 +1,797 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.KeymapInspector = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ class KeymapInspector {
8
+ constructor(layouts) {
9
+ this.layouts = layouts;
10
+ this.reversedLayouts = {};
11
+ for (const layoutName in layouts) {
12
+ this.reversedLayouts[layoutName] = {};
13
+ const layout = layouts[layoutName];
14
+ for (const char in layout) {
15
+ const keyDef = layout[char];
16
+ // Сохраняем все символы, но с учетом Shift
17
+ const currentCode = keyDef.code;
18
+ // Если это символ без Shift, сохраняем как основной
19
+ if (!keyDef.shiftKey) {
20
+ this.reversedLayouts[layoutName][currentCode] = char;
21
+ }
22
+ // Если это символ с Shift, сохраняем с префиксом
23
+ else {
24
+ this.reversedLayouts[layoutName][currentCode + '_SHIFT'] = char;
25
+ }
26
+ }
27
+ }
28
+ }
29
+ inspect(char) {
30
+ let baseLayoutName = null;
31
+ let keyDefinition = null;
32
+ for (const layoutName in this.layouts) {
33
+ if (this.layouts[layoutName][char]) {
34
+ baseLayoutName = layoutName;
35
+ keyDefinition = this.layouts[layoutName][char];
36
+ break;
37
+ }
38
+ }
39
+ if (!keyDefinition || !baseLayoutName) {
40
+ return null;
41
+ }
42
+ const layouts = {};
43
+ for (const layoutName in this.reversedLayouts) {
44
+ // Ищем символ с учетом Shift
45
+ if (keyDefinition.shiftKey) {
46
+ layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code + '_SHIFT'] || null;
47
+ }
48
+ else {
49
+ layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code] || null;
50
+ }
51
+ }
52
+ return {
53
+ char,
54
+ keyDefinition,
55
+ layouts,
56
+ };
57
+ }
58
+ inspectByCode(code) {
59
+ const char = this.findCharByCode(code);
60
+ return char ? this.inspect(char) : null;
61
+ }
62
+ inspectByKeyCode(keyCode) {
63
+ const char = this.findCharByKeyCode(keyCode);
64
+ return char ? this.inspect(char) : null;
65
+ }
66
+ findCharByCode(code) {
67
+ // Сначала ищем символ без Shift
68
+ for (const layoutName in this.layouts) {
69
+ const layout = this.layouts[layoutName];
70
+ for (const char in layout) {
71
+ if (layout[char].code === code && !layout[char].shiftKey) {
72
+ return char;
73
+ }
74
+ }
75
+ }
76
+ // Если не нашли без Shift, ищем с Shift
77
+ for (const layoutName in this.layouts) {
78
+ const layout = this.layouts[layoutName];
79
+ for (const char in layout) {
80
+ if (layout[char].code === code && layout[char].shiftKey) {
81
+ return char;
82
+ }
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ findCharByKeyCode(keyCode) {
88
+ // Сначала ищем символ без Shift
89
+ for (const layoutName in this.layouts) {
90
+ const layout = this.layouts[layoutName];
91
+ for (const char in layout) {
92
+ if (layout[char].keyCode === keyCode && !layout[char].shiftKey) {
93
+ return char;
94
+ }
95
+ }
96
+ }
97
+ // Если не нашли без Shift, ищем с Shift
98
+ for (const layoutName in this.layouts) {
99
+ const layout = this.layouts[layoutName];
100
+ for (const char in layout) {
101
+ if (layout[char].keyCode === keyCode && layout[char].shiftKey) {
102
+ return char;
103
+ }
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+ }
109
+
110
+ const en = {
111
+ // Первый ряд (цифры)
112
+ '1': { key: '1', code: 'Digit1', keyCode: 49 },
113
+ '2': { key: '2', code: 'Digit2', keyCode: 50 },
114
+ '3': { key: '3', code: 'Digit3', keyCode: 51 },
115
+ '4': { key: '4', code: 'Digit4', keyCode: 52 },
116
+ '5': { key: '5', code: 'Digit5', keyCode: 53 },
117
+ '6': { key: '6', code: 'Digit6', keyCode: 54 },
118
+ '7': { key: '7', code: 'Digit7', keyCode: 55 },
119
+ '8': { key: '8', code: 'Digit8', keyCode: 56 },
120
+ '9': { key: '9', code: 'Digit9', keyCode: 57 },
121
+ '0': { key: '0', code: 'Digit0', keyCode: 48 },
122
+ '-': { key: '-', code: 'Minus', keyCode: 189 },
123
+ '=': { key: '=', code: 'Equal', keyCode: 187 },
124
+ // Второй ряд (QWERTY)
125
+ 'q': { key: 'q', code: 'KeyQ', keyCode: 81 },
126
+ 'w': { key: 'w', code: 'KeyW', keyCode: 87 },
127
+ 'e': { key: 'e', code: 'KeyE', keyCode: 69 },
128
+ 'r': { key: 'r', code: 'KeyR', keyCode: 82 },
129
+ 't': { key: 't', code: 'KeyT', keyCode: 84 },
130
+ 'y': { key: 'y', code: 'KeyY', keyCode: 89 },
131
+ 'u': { key: 'u', code: 'KeyU', keyCode: 85 },
132
+ 'i': { key: 'i', code: 'KeyI', keyCode: 73 },
133
+ 'o': { key: 'o', code: 'KeyO', keyCode: 79 },
134
+ 'p': { key: 'p', code: 'KeyP', keyCode: 80 },
135
+ '[': { key: '[', code: 'BracketLeft', keyCode: 219 },
136
+ ']': { key: ']', code: 'BracketRight', keyCode: 221 },
137
+ // Третий ряд (ASDF)
138
+ 'a': { key: 'a', code: 'KeyA', keyCode: 65 },
139
+ 's': { key: 's', code: 'KeyS', keyCode: 83 },
140
+ 'd': { key: 'd', code: 'KeyD', keyCode: 68 },
141
+ 'f': { key: 'f', code: 'KeyF', keyCode: 70 },
142
+ 'g': { key: 'g', code: 'KeyG', keyCode: 71 },
143
+ 'h': { key: 'h', code: 'KeyH', keyCode: 72 },
144
+ 'j': { key: 'j', code: 'KeyJ', keyCode: 74 },
145
+ 'k': { key: 'k', code: 'KeyK', keyCode: 75 },
146
+ 'l': { key: 'l', code: 'KeyL', keyCode: 76 },
147
+ ';': { key: ';', code: 'Semicolon', keyCode: 186 },
148
+ "'": { key: "'", code: 'Quote', keyCode: 222 },
149
+ '\\': { key: '\\', code: 'Backslash', keyCode: 220 },
150
+ // Четвертый ряд (ZXCV)
151
+ 'z': { key: 'z', code: 'KeyZ', keyCode: 90 },
152
+ 'x': { key: 'x', code: 'KeyX', keyCode: 88 },
153
+ 'c': { key: 'c', code: 'KeyC', keyCode: 67 },
154
+ 'v': { key: 'v', code: 'KeyV', keyCode: 86 },
155
+ 'b': { key: 'b', code: 'KeyB', keyCode: 66 },
156
+ 'n': { key: 'n', code: 'KeyN', keyCode: 78 },
157
+ 'm': { key: 'm', code: 'KeyM', keyCode: 77 },
158
+ ',': { key: ',', code: 'Comma', keyCode: 188 },
159
+ '.': { key: '.', code: 'Period', keyCode: 190 },
160
+ '/': { key: '/', code: 'Slash', keyCode: 191 },
161
+ // Заглавные буквы (с Shift)
162
+ 'Q': { key: 'Q', code: 'KeyQ', keyCode: 81, shiftKey: true },
163
+ 'W': { key: 'W', code: 'KeyW', keyCode: 87, shiftKey: true },
164
+ 'E': { key: 'E', code: 'KeyE', keyCode: 69, shiftKey: true },
165
+ 'R': { key: 'R', code: 'KeyR', keyCode: 82, shiftKey: true },
166
+ 'T': { key: 'T', code: 'KeyT', keyCode: 84, shiftKey: true },
167
+ 'Y': { key: 'Y', code: 'KeyY', keyCode: 89, shiftKey: true },
168
+ 'U': { key: 'U', code: 'KeyU', keyCode: 85, shiftKey: true },
169
+ 'I': { key: 'I', code: 'KeyI', keyCode: 73, shiftKey: true },
170
+ 'O': { key: 'O', code: 'KeyO', keyCode: 79, shiftKey: true },
171
+ 'P': { key: 'P', code: 'KeyP', keyCode: 80, shiftKey: true },
172
+ 'A': { key: 'A', code: 'KeyA', keyCode: 65, shiftKey: true },
173
+ 'S': { key: 'S', code: 'KeyS', keyCode: 83, shiftKey: true },
174
+ 'D': { key: 'D', code: 'KeyD', keyCode: 68, shiftKey: true },
175
+ 'F': { key: 'F', code: 'KeyF', keyCode: 70, shiftKey: true },
176
+ 'G': { key: 'G', code: 'KeyG', keyCode: 71, shiftKey: true },
177
+ 'H': { key: 'H', code: 'KeyH', keyCode: 72, shiftKey: true },
178
+ 'J': { key: 'J', code: 'KeyJ', keyCode: 74, shiftKey: true },
179
+ 'K': { key: 'K', code: 'KeyK', keyCode: 75, shiftKey: true },
180
+ 'L': { key: 'L', code: 'KeyL', keyCode: 76, shiftKey: true },
181
+ 'Z': { key: 'Z', code: 'KeyZ', keyCode: 90, shiftKey: true },
182
+ 'X': { key: 'X', code: 'KeyX', keyCode: 88, shiftKey: true },
183
+ 'C': { key: 'C', code: 'KeyC', keyCode: 67, shiftKey: true },
184
+ 'V': { key: 'V', code: 'KeyV', keyCode: 86, shiftKey: true },
185
+ 'B': { key: 'B', code: 'KeyB', keyCode: 66, shiftKey: true },
186
+ 'N': { key: 'N', code: 'KeyN', keyCode: 78, shiftKey: true },
187
+ 'M': { key: 'M', code: 'KeyM', keyCode: 77, shiftKey: true },
188
+ // Символы с Shift
189
+ '!': { key: '!', code: 'Digit1', keyCode: 49, shiftKey: true },
190
+ '@': { key: '@', code: 'Digit2', keyCode: 50, shiftKey: true },
191
+ '#': { key: '#', code: 'Digit3', keyCode: 51, shiftKey: true },
192
+ '$': { key: '$', code: 'Digit4', keyCode: 52, shiftKey: true },
193
+ '%': { key: '%', code: 'Digit5', keyCode: 53, shiftKey: true },
194
+ '^': { key: '^', code: 'Digit6', keyCode: 54, shiftKey: true },
195
+ '&': { key: '&', code: 'Digit7', keyCode: 55, shiftKey: true },
196
+ '*': { key: '*', code: 'Digit8', keyCode: 56, shiftKey: true },
197
+ '(': { key: '(', code: 'Digit9', keyCode: 57, shiftKey: true },
198
+ ')': { key: ')', code: 'Digit0', keyCode: 48, shiftKey: true },
199
+ '_': { key: '_', code: 'Minus', keyCode: 189, shiftKey: true },
200
+ '+': { key: '+', code: 'Equal', keyCode: 187, shiftKey: true },
201
+ '{': { key: '{', code: 'BracketLeft', keyCode: 219, shiftKey: true },
202
+ '}': { key: '}', code: 'BracketRight', keyCode: 221, shiftKey: true },
203
+ ':': { key: ':', code: 'Semicolon', keyCode: 186, shiftKey: true },
204
+ '"': { key: '"', code: 'Quote', keyCode: 222, shiftKey: true },
205
+ '|': { key: '|', code: 'Backslash', keyCode: 220, shiftKey: true },
206
+ '<': { key: '<', code: 'Comma', keyCode: 188, shiftKey: true },
207
+ '>': { key: '>', code: 'Period', keyCode: 190, shiftKey: true },
208
+ '?': { key: '?', code: 'Slash', keyCode: 191, shiftKey: true },
209
+ // Пробел
210
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
211
+ };
212
+
213
+ const ru = {
214
+ // Первый ряд (цифры)
215
+ '1': { key: '1', code: 'Digit1', keyCode: 49 },
216
+ '2': { key: '2', code: 'Digit2', keyCode: 50 },
217
+ '3': { key: '3', code: 'Digit3', keyCode: 51 },
218
+ '4': { key: '4', code: 'Digit4', keyCode: 52 },
219
+ '5': { key: '5', code: 'Digit5', keyCode: 53 },
220
+ '6': { key: '6', code: 'Digit6', keyCode: 54 },
221
+ '7': { key: '7', code: 'Digit7', keyCode: 55 },
222
+ '8': { key: '8', code: 'Digit8', keyCode: 56 },
223
+ '9': { key: '9', code: 'Digit9', keyCode: 57 },
224
+ '0': { key: '0', code: 'Digit0', keyCode: 48 },
225
+ '-': { key: '-', code: 'Minus', keyCode: 189 },
226
+ '=': { key: '=', code: 'Equal', keyCode: 187 },
227
+ // Второй ряд (русская ЙЦУКЕН)
228
+ 'й': { key: 'й', code: 'KeyQ', keyCode: 81 },
229
+ 'ц': { key: 'ц', code: 'KeyW', keyCode: 87 },
230
+ 'у': { key: 'у', code: 'KeyE', keyCode: 69 },
231
+ 'к': { key: 'к', code: 'KeyR', keyCode: 82 },
232
+ 'е': { key: 'е', code: 'KeyT', keyCode: 84 },
233
+ 'н': { key: 'н', code: 'KeyY', keyCode: 89 },
234
+ 'г': { key: 'г', code: 'KeyU', keyCode: 85 },
235
+ 'ш': { key: 'ш', code: 'KeyI', keyCode: 73 },
236
+ 'щ': { key: 'щ', code: 'KeyO', keyCode: 79 },
237
+ 'з': { key: 'з', code: 'KeyP', keyCode: 80 },
238
+ 'х': { key: 'х', code: 'BracketLeft', keyCode: 219 },
239
+ 'ъ': { key: 'ъ', code: 'BracketRight', keyCode: 221 },
240
+ // Третий ряд
241
+ 'ф': { key: 'ф', code: 'KeyA', keyCode: 65 },
242
+ 'ы': { key: 'ы', code: 'KeyS', keyCode: 83 },
243
+ 'в': { key: 'в', code: 'KeyD', keyCode: 68 },
244
+ 'а': { key: 'а', code: 'KeyF', keyCode: 70 },
245
+ 'п': { key: 'п', code: 'KeyG', keyCode: 71 },
246
+ 'р': { key: 'р', code: 'KeyH', keyCode: 72 },
247
+ 'о': { key: 'о', code: 'KeyJ', keyCode: 74 },
248
+ 'л': { key: 'л', code: 'KeyK', keyCode: 75 },
249
+ 'д': { key: 'д', code: 'KeyL', keyCode: 76 },
250
+ 'ж': { key: 'ж', code: 'Semicolon', keyCode: 186 },
251
+ 'э': { key: 'э', code: 'Quote', keyCode: 222 },
252
+ '\\': { key: '\\', code: 'Backslash', keyCode: 220 },
253
+ // Четвертый ряд
254
+ 'я': { key: 'я', code: 'KeyZ', keyCode: 90 },
255
+ 'ч': { key: 'ч', code: 'KeyX', keyCode: 88 },
256
+ 'с': { key: 'с', code: 'KeyC', keyCode: 67 },
257
+ 'м': { key: 'м', code: 'KeyV', keyCode: 86 },
258
+ 'и': { key: 'и', code: 'KeyB', keyCode: 66 },
259
+ 'т': { key: 'т', code: 'KeyN', keyCode: 78 },
260
+ 'ь': { key: 'ь', code: 'KeyM', keyCode: 77 },
261
+ 'б': { key: 'б', code: 'Comma', keyCode: 188 },
262
+ 'ю': { key: 'ю', code: 'Period', keyCode: 190 },
263
+ '.': { key: '.', code: 'Slash', keyCode: 191 },
264
+ // Заглавные буквы (с Shift)
265
+ 'Й': { key: 'Й', code: 'KeyQ', keyCode: 81, shiftKey: true },
266
+ 'Ц': { key: 'Ц', code: 'KeyW', keyCode: 87, shiftKey: true },
267
+ 'У': { key: 'У', code: 'KeyE', keyCode: 69, shiftKey: true },
268
+ 'К': { key: 'К', code: 'KeyR', keyCode: 82, shiftKey: true },
269
+ 'Е': { key: 'Е', code: 'KeyT', keyCode: 84, shiftKey: true },
270
+ 'Н': { key: 'Н', code: 'KeyY', keyCode: 89, shiftKey: true },
271
+ 'Г': { key: 'Г', code: 'KeyU', keyCode: 85, shiftKey: true },
272
+ 'Ш': { key: 'Ш', code: 'KeyI', keyCode: 73, shiftKey: true },
273
+ 'Щ': { key: 'Щ', code: 'KeyO', keyCode: 79, shiftKey: true },
274
+ 'З': { key: 'З', code: 'KeyP', keyCode: 80, shiftKey: true },
275
+ 'Х': { key: 'Х', code: 'BracketLeft', keyCode: 219, shiftKey: true },
276
+ 'Ъ': { key: 'Ъ', code: 'BracketRight', keyCode: 221, shiftKey: true },
277
+ 'Ф': { key: 'Ф', code: 'KeyA', keyCode: 65, shiftKey: true },
278
+ 'Ы': { key: 'Ы', code: 'KeyS', keyCode: 83, shiftKey: true },
279
+ 'В': { key: 'В', code: 'KeyD', keyCode: 68, shiftKey: true },
280
+ 'А': { key: 'А', code: 'KeyF', keyCode: 70, shiftKey: true },
281
+ 'П': { key: 'П', code: 'KeyG', keyCode: 71, shiftKey: true },
282
+ 'Р': { key: 'Р', code: 'KeyH', keyCode: 72, shiftKey: true },
283
+ 'О': { key: 'О', code: 'KeyJ', keyCode: 74, shiftKey: true },
284
+ 'Л': { key: 'Л', code: 'KeyK', keyCode: 75, shiftKey: true },
285
+ 'Д': { key: 'Д', code: 'KeyL', keyCode: 76, shiftKey: true },
286
+ 'Ж': { key: 'Ж', code: 'Semicolon', keyCode: 186, shiftKey: true },
287
+ 'Э': { key: 'Э', code: 'Quote', keyCode: 222, shiftKey: true },
288
+ 'Я': { key: 'Я', code: 'KeyZ', keyCode: 90, shiftKey: true },
289
+ 'Ч': { key: 'Ч', code: 'KeyX', keyCode: 88, shiftKey: true },
290
+ 'С': { key: 'С', code: 'KeyC', keyCode: 67, shiftKey: true },
291
+ 'М': { key: 'М', code: 'KeyV', keyCode: 86, shiftKey: true },
292
+ 'И': { key: 'И', code: 'KeyB', keyCode: 66, shiftKey: true },
293
+ 'Т': { key: 'Т', code: 'KeyN', keyCode: 78, shiftKey: true },
294
+ 'Ь': { key: 'Ь', code: 'KeyM', keyCode: 77, shiftKey: true },
295
+ 'Б': { key: 'Б', code: 'Comma', keyCode: 188, shiftKey: true },
296
+ 'Ю': { key: 'Ю', code: 'Period', keyCode: 190, shiftKey: true },
297
+ // Символы с Shift
298
+ '!': { key: '!', code: 'Digit1', keyCode: 49, shiftKey: true },
299
+ '"': { key: '"', code: 'Digit2', keyCode: 50, shiftKey: true },
300
+ '№': { key: '№', code: 'Digit3', keyCode: 51, shiftKey: true },
301
+ ';': { key: ';', code: 'Digit4', keyCode: 52, shiftKey: true },
302
+ '%': { key: '%', code: 'Digit5', keyCode: 53, shiftKey: true },
303
+ ':': { key: ':', code: 'Digit6', keyCode: 54, shiftKey: true },
304
+ '?': { key: '?', code: 'Digit7', keyCode: 55, shiftKey: true },
305
+ '*': { key: '*', code: 'Digit8', keyCode: 56, shiftKey: true },
306
+ '(': { key: '(', code: 'Digit9', keyCode: 57, shiftKey: true },
307
+ ')': { key: ')', code: 'Digit0', keyCode: 48, shiftKey: true },
308
+ '_': { key: '_', code: 'Minus', keyCode: 189, shiftKey: true },
309
+ '+': { key: '+', code: 'Equal', keyCode: 187, shiftKey: true },
310
+ '/': { key: '/', code: 'Backslash', keyCode: 220, shiftKey: true },
311
+ ',': { key: ',', code: 'Slash', keyCode: 191, shiftKey: true },
312
+ // Пробел
313
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
314
+ };
315
+
316
+ const de = {
317
+ // Первый ряд (цифры)
318
+ '1': { key: '1', code: 'Digit1', keyCode: 49 },
319
+ '2': { key: '2', code: 'Digit2', keyCode: 50 },
320
+ '3': { key: '3', code: 'Digit3', keyCode: 51 },
321
+ '4': { key: '4', code: 'Digit4', keyCode: 52 },
322
+ '5': { key: '5', code: 'Digit5', keyCode: 53 },
323
+ '6': { key: '6', code: 'Digit6', keyCode: 54 },
324
+ '7': { key: '7', code: 'Digit7', keyCode: 55 },
325
+ '8': { key: '8', code: 'Digit8', keyCode: 56 },
326
+ '9': { key: '9', code: 'Digit9', keyCode: 57 },
327
+ '0': { key: '0', code: 'Digit0', keyCode: 48 },
328
+ 'ß': { key: 'ß', code: 'Minus', keyCode: 189 },
329
+ // Второй ряд (QWERTZ)
330
+ 'q': { key: 'q', code: 'KeyQ', keyCode: 81 },
331
+ 'w': { key: 'w', code: 'KeyW', keyCode: 87 },
332
+ 'e': { key: 'e', code: 'KeyE', keyCode: 69 },
333
+ 'r': { key: 'r', code: 'KeyR', keyCode: 82 },
334
+ 't': { key: 't', code: 'KeyT', keyCode: 84 },
335
+ 'z': { key: 'z', code: 'KeyY', keyCode: 89 }, // В немецкой Z и Y поменяны местами
336
+ 'u': { key: 'u', code: 'KeyU', keyCode: 85 },
337
+ 'i': { key: 'i', code: 'KeyI', keyCode: 73 },
338
+ 'o': { key: 'o', code: 'KeyO', keyCode: 79 },
339
+ 'p': { key: 'p', code: 'KeyP', keyCode: 80 },
340
+ 'ü': { key: 'ü', code: 'BracketLeft', keyCode: 219 },
341
+ '+': { key: '+', code: 'BracketRight', keyCode: 221 },
342
+ // Третий ряд (ASDF)
343
+ 'a': { key: 'a', code: 'KeyA', keyCode: 65 },
344
+ 's': { key: 's', code: 'KeyS', keyCode: 83 },
345
+ 'd': { key: 'd', code: 'KeyD', keyCode: 68 },
346
+ 'f': { key: 'f', code: 'KeyF', keyCode: 70 },
347
+ 'g': { key: 'g', code: 'KeyG', keyCode: 71 },
348
+ 'h': { key: 'h', code: 'KeyH', keyCode: 72 },
349
+ 'j': { key: 'j', code: 'KeyJ', keyCode: 74 },
350
+ 'k': { key: 'k', code: 'KeyK', keyCode: 75 },
351
+ 'l': { key: 'l', code: 'KeyL', keyCode: 76 },
352
+ 'ö': { key: 'ö', code: 'Semicolon', keyCode: 186 },
353
+ 'ä': { key: 'ä', code: 'Quote', keyCode: 222 },
354
+ '#': { key: '#', code: 'Backslash', keyCode: 220 },
355
+ // Четвертый ряд (YXCV)
356
+ 'y': { key: 'y', code: 'KeyZ', keyCode: 90 }, // В немецкой Y и Z поменяны местами
357
+ 'x': { key: 'x', code: 'KeyX', keyCode: 88 },
358
+ 'c': { key: 'c', code: 'KeyC', keyCode: 67 },
359
+ 'v': { key: 'v', code: 'KeyV', keyCode: 86 },
360
+ 'b': { key: 'b', code: 'KeyB', keyCode: 66 },
361
+ 'n': { key: 'n', code: 'KeyN', keyCode: 78 },
362
+ 'm': { key: 'm', code: 'KeyM', keyCode: 77 },
363
+ ',': { key: ',', code: 'Comma', keyCode: 188 },
364
+ '.': { key: '.', code: 'Period', keyCode: 190 },
365
+ '-': { key: '-', code: 'Slash', keyCode: 191 },
366
+ // Заглавные буквы (с Shift)
367
+ 'Q': { key: 'Q', code: 'KeyQ', keyCode: 81, shiftKey: true },
368
+ 'W': { key: 'W', code: 'KeyW', keyCode: 87, shiftKey: true },
369
+ 'E': { key: 'E', code: 'KeyE', keyCode: 69, shiftKey: true },
370
+ 'R': { key: 'R', code: 'KeyR', keyCode: 82, shiftKey: true },
371
+ 'T': { key: 'T', code: 'KeyT', keyCode: 84, shiftKey: true },
372
+ 'Z': { key: 'Z', code: 'KeyY', keyCode: 89, shiftKey: true },
373
+ 'U': { key: 'U', code: 'KeyU', keyCode: 85, shiftKey: true },
374
+ 'I': { key: 'I', code: 'KeyI', keyCode: 73, shiftKey: true },
375
+ 'O': { key: 'O', code: 'KeyO', keyCode: 79, shiftKey: true },
376
+ 'P': { key: 'P', code: 'KeyP', keyCode: 80, shiftKey: true },
377
+ 'Ü': { key: 'Ü', code: 'BracketLeft', keyCode: 219, shiftKey: true },
378
+ 'A': { key: 'A', code: 'KeyA', keyCode: 65, shiftKey: true },
379
+ 'S': { key: 'S', code: 'KeyS', keyCode: 83, shiftKey: true },
380
+ 'D': { key: 'D', code: 'KeyD', keyCode: 68, shiftKey: true },
381
+ 'F': { key: 'F', code: 'KeyF', keyCode: 70, shiftKey: true },
382
+ 'G': { key: 'G', code: 'KeyG', keyCode: 71, shiftKey: true },
383
+ 'H': { key: 'H', code: 'KeyH', keyCode: 72, shiftKey: true },
384
+ 'J': { key: 'J', code: 'KeyJ', keyCode: 74, shiftKey: true },
385
+ 'K': { key: 'K', code: 'KeyK', keyCode: 75, shiftKey: true },
386
+ 'L': { key: 'L', code: 'KeyL', keyCode: 76, shiftKey: true },
387
+ 'Ö': { key: 'Ö', code: 'Semicolon', keyCode: 186, shiftKey: true },
388
+ 'Ä': { key: 'Ä', code: 'Quote', keyCode: 222, shiftKey: true },
389
+ 'Y': { key: 'Y', code: 'KeyZ', keyCode: 90, shiftKey: true },
390
+ 'X': { key: 'X', code: 'KeyX', keyCode: 88, shiftKey: true },
391
+ 'C': { key: 'C', code: 'KeyC', keyCode: 67, shiftKey: true },
392
+ 'V': { key: 'V', code: 'KeyV', keyCode: 86, shiftKey: true },
393
+ 'B': { key: 'B', code: 'KeyB', keyCode: 66, shiftKey: true },
394
+ 'N': { key: 'N', code: 'KeyN', keyCode: 78, shiftKey: true },
395
+ 'M': { key: 'M', code: 'KeyM', keyCode: 77, shiftKey: true },
396
+ // Пробел
397
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
398
+ };
399
+
400
+ const fr = {
401
+ // Первый ряд (AZERTY цифры)
402
+ '&': { key: '&', code: 'Digit1', keyCode: 49 },
403
+ 'é': { key: 'é', code: 'Digit2', keyCode: 50 },
404
+ '"': { key: '"', code: 'Digit3', keyCode: 51 },
405
+ "'": { key: "'", code: 'Digit4', keyCode: 52 },
406
+ '(': { key: '(', code: 'Digit5', keyCode: 53 },
407
+ '-': { key: '-', code: 'Digit6', keyCode: 54 },
408
+ 'è': { key: 'è', code: 'Digit7', keyCode: 55 },
409
+ '_': { key: '_', code: 'Digit8', keyCode: 56 },
410
+ 'ç': { key: 'ç', code: 'Digit9', keyCode: 57 },
411
+ 'à': { key: 'à', code: 'Digit0', keyCode: 48 },
412
+ ')': { key: ')', code: 'Minus', keyCode: 189 },
413
+ '=': { key: '=', code: 'Equal', keyCode: 187 },
414
+ // Второй ряд (AZERTY)
415
+ 'a': { key: 'a', code: 'KeyQ', keyCode: 81 }, // A на месте Q
416
+ 'z': { key: 'z', code: 'KeyW', keyCode: 87 }, // Z на месте W
417
+ 'e': { key: 'e', code: 'KeyE', keyCode: 69 },
418
+ 'r': { key: 'r', code: 'KeyR', keyCode: 82 },
419
+ 't': { key: 't', code: 'KeyT', keyCode: 84 },
420
+ 'y': { key: 'y', code: 'KeyY', keyCode: 89 },
421
+ 'u': { key: 'u', code: 'KeyU', keyCode: 85 },
422
+ 'i': { key: 'i', code: 'KeyI', keyCode: 73 },
423
+ 'o': { key: 'o', code: 'KeyO', keyCode: 79 },
424
+ 'p': { key: 'p', code: 'KeyP', keyCode: 80 },
425
+ '^': { key: '^', code: 'BracketLeft', keyCode: 219 },
426
+ '$': { key: '$', code: 'BracketRight', keyCode: 221 },
427
+ // Третий ряд
428
+ 'q': { key: 'q', code: 'KeyA', keyCode: 65 }, // Q на месте A
429
+ 's': { key: 's', code: 'KeyS', keyCode: 83 },
430
+ 'd': { key: 'd', code: 'KeyD', keyCode: 68 },
431
+ 'f': { key: 'f', code: 'KeyF', keyCode: 70 },
432
+ 'g': { key: 'g', code: 'KeyG', keyCode: 71 },
433
+ 'h': { key: 'h', code: 'KeyH', keyCode: 72 },
434
+ 'j': { key: 'j', code: 'KeyJ', keyCode: 74 },
435
+ 'k': { key: 'k', code: 'KeyK', keyCode: 75 },
436
+ 'l': { key: 'l', code: 'KeyL', keyCode: 76 },
437
+ 'm': { key: 'm', code: 'Semicolon', keyCode: 186 }, // M на месте ;
438
+ 'ù': { key: 'ù', code: 'Quote', keyCode: 222 },
439
+ '*': { key: '*', code: 'Backslash', keyCode: 220 },
440
+ // Четвертый ряд
441
+ 'w': { key: 'w', code: 'KeyZ', keyCode: 90 }, // W на месте Z
442
+ 'x': { key: 'x', code: 'KeyX', keyCode: 88 },
443
+ 'c': { key: 'c', code: 'KeyC', keyCode: 67 },
444
+ 'v': { key: 'v', code: 'KeyV', keyCode: 86 },
445
+ 'b': { key: 'b', code: 'KeyB', keyCode: 66 },
446
+ 'n': { key: 'n', code: 'KeyN', keyCode: 78 },
447
+ ',': { key: ',', code: 'KeyM', keyCode: 77 }, // , на месте M
448
+ ';': { key: ';', code: 'Comma', keyCode: 188 },
449
+ ':': { key: ':', code: 'Period', keyCode: 190 },
450
+ '!': { key: '!', code: 'Slash', keyCode: 191 },
451
+ // Заглавные буквы (с Shift)
452
+ 'A': { key: 'A', code: 'KeyQ', keyCode: 81, shiftKey: true },
453
+ 'Z': { key: 'Z', code: 'KeyW', keyCode: 87, shiftKey: true },
454
+ 'E': { key: 'E', code: 'KeyE', keyCode: 69, shiftKey: true },
455
+ 'R': { key: 'R', code: 'KeyR', keyCode: 82, shiftKey: true },
456
+ 'T': { key: 'T', code: 'KeyT', keyCode: 84, shiftKey: true },
457
+ 'Y': { key: 'Y', code: 'KeyY', keyCode: 89, shiftKey: true },
458
+ 'U': { key: 'U', code: 'KeyU', keyCode: 85, shiftKey: true },
459
+ 'I': { key: 'I', code: 'KeyI', keyCode: 73, shiftKey: true },
460
+ 'O': { key: 'O', code: 'KeyO', keyCode: 79, shiftKey: true },
461
+ 'P': { key: 'P', code: 'KeyP', keyCode: 80, shiftKey: true },
462
+ 'Q': { key: 'Q', code: 'KeyA', keyCode: 65, shiftKey: true },
463
+ 'S': { key: 'S', code: 'KeyS', keyCode: 83, shiftKey: true },
464
+ 'D': { key: 'D', code: 'KeyD', keyCode: 68, shiftKey: true },
465
+ 'F': { key: 'F', code: 'KeyF', keyCode: 70, shiftKey: true },
466
+ 'G': { key: 'G', code: 'KeyG', keyCode: 71, shiftKey: true },
467
+ 'H': { key: 'H', code: 'KeyH', keyCode: 72, shiftKey: true },
468
+ 'J': { key: 'J', code: 'KeyJ', keyCode: 74, shiftKey: true },
469
+ 'K': { key: 'K', code: 'KeyK', keyCode: 75, shiftKey: true },
470
+ 'L': { key: 'L', code: 'KeyL', keyCode: 76, shiftKey: true },
471
+ 'M': { key: 'M', code: 'Semicolon', keyCode: 186, shiftKey: true },
472
+ 'W': { key: 'W', code: 'KeyZ', keyCode: 90, shiftKey: true },
473
+ 'X': { key: 'X', code: 'KeyX', keyCode: 88, shiftKey: true },
474
+ 'C': { key: 'C', code: 'KeyC', keyCode: 67, shiftKey: true },
475
+ 'V': { key: 'V', code: 'KeyV', keyCode: 86, shiftKey: true },
476
+ 'B': { key: 'B', code: 'KeyB', keyCode: 66, shiftKey: true },
477
+ 'N': { key: 'N', code: 'KeyN', keyCode: 78, shiftKey: true },
478
+ // Цифры с Shift
479
+ '1': { key: '1', code: 'Digit1', keyCode: 49, shiftKey: true },
480
+ '2': { key: '2', code: 'Digit2', keyCode: 50, shiftKey: true },
481
+ '3': { key: '3', code: 'Digit3', keyCode: 51, shiftKey: true },
482
+ '4': { key: '4', code: 'Digit4', keyCode: 52, shiftKey: true },
483
+ '5': { key: '5', code: 'Digit5', keyCode: 53, shiftKey: true },
484
+ '6': { key: '6', code: 'Digit6', keyCode: 54, shiftKey: true },
485
+ '7': { key: '7', code: 'Digit7', keyCode: 55, shiftKey: true },
486
+ '8': { key: '8', code: 'Digit8', keyCode: 56, shiftKey: true },
487
+ '9': { key: '9', code: 'Digit9', keyCode: 57, shiftKey: true },
488
+ '0': { key: '0', code: 'Digit0', keyCode: 48, shiftKey: true },
489
+ // Пробел
490
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
491
+ };
492
+
493
+ const es = {
494
+ // Первый ряд (цифры)
495
+ '1': { key: '1', code: 'Digit1', keyCode: 49 },
496
+ '2': { key: '2', code: 'Digit2', keyCode: 50 },
497
+ '3': { key: '3', code: 'Digit3', keyCode: 51 },
498
+ '4': { key: '4', code: 'Digit4', keyCode: 52 },
499
+ '5': { key: '5', code: 'Digit5', keyCode: 53 },
500
+ '6': { key: '6', code: 'Digit6', keyCode: 54 },
501
+ '7': { key: '7', code: 'Digit7', keyCode: 55 },
502
+ '8': { key: '8', code: 'Digit8', keyCode: 56 },
503
+ '9': { key: '9', code: 'Digit9', keyCode: 57 },
504
+ '0': { key: '0', code: 'Digit0', keyCode: 48 },
505
+ "'": { key: "'", code: 'Minus', keyCode: 189 },
506
+ '¡': { key: '¡', code: 'Equal', keyCode: 187 },
507
+ // Второй ряд (QWERTY)
508
+ 'q': { key: 'q', code: 'KeyQ', keyCode: 81 },
509
+ 'w': { key: 'w', code: 'KeyW', keyCode: 87 },
510
+ 'e': { key: 'e', code: 'KeyE', keyCode: 69 },
511
+ 'r': { key: 'r', code: 'KeyR', keyCode: 82 },
512
+ 't': { key: 't', code: 'KeyT', keyCode: 84 },
513
+ 'y': { key: 'y', code: 'KeyY', keyCode: 89 },
514
+ 'u': { key: 'u', code: 'KeyU', keyCode: 85 },
515
+ 'i': { key: 'i', code: 'KeyI', keyCode: 73 },
516
+ 'o': { key: 'o', code: 'KeyO', keyCode: 79 },
517
+ 'p': { key: 'p', code: 'KeyP', keyCode: 80 },
518
+ '`': { key: '`', code: 'BracketLeft', keyCode: 219 },
519
+ '+': { key: '+', code: 'BracketRight', keyCode: 221 },
520
+ // Третий ряд (ASDF)
521
+ 'a': { key: 'a', code: 'KeyA', keyCode: 65 },
522
+ 's': { key: 's', code: 'KeyS', keyCode: 83 },
523
+ 'd': { key: 'd', code: 'KeyD', keyCode: 68 },
524
+ 'f': { key: 'f', code: 'KeyF', keyCode: 70 },
525
+ 'g': { key: 'g', code: 'KeyG', keyCode: 71 },
526
+ 'h': { key: 'h', code: 'KeyH', keyCode: 72 },
527
+ 'j': { key: 'j', code: 'KeyJ', keyCode: 74 },
528
+ 'k': { key: 'k', code: 'KeyK', keyCode: 75 },
529
+ 'l': { key: 'l', code: 'KeyL', keyCode: 76 },
530
+ 'ñ': { key: 'ñ', code: 'Semicolon', keyCode: 186 },
531
+ '´': { key: '´', code: 'Quote', keyCode: 222 },
532
+ 'ç': { key: 'ç', code: 'Backslash', keyCode: 220 },
533
+ // Четвертый ряд (ZXCV)
534
+ 'z': { key: 'z', code: 'KeyZ', keyCode: 90 },
535
+ 'x': { key: 'x', code: 'KeyX', keyCode: 88 },
536
+ 'c': { key: 'c', code: 'KeyC', keyCode: 67 },
537
+ 'v': { key: 'v', code: 'KeyV', keyCode: 86 },
538
+ 'b': { key: 'b', code: 'KeyB', keyCode: 66 },
539
+ 'n': { key: 'n', code: 'KeyN', keyCode: 78 },
540
+ 'm': { key: 'm', code: 'KeyM', keyCode: 77 },
541
+ ',': { key: ',', code: 'Comma', keyCode: 188 },
542
+ '.': { key: '.', code: 'Period', keyCode: 190 },
543
+ '-': { key: '-', code: 'Slash', keyCode: 191 },
544
+ // Заглавные буквы (с Shift)
545
+ 'Q': { key: 'Q', code: 'KeyQ', keyCode: 81, shiftKey: true },
546
+ 'W': { key: 'W', code: 'KeyW', keyCode: 87, shiftKey: true },
547
+ 'E': { key: 'E', code: 'KeyE', keyCode: 69, shiftKey: true },
548
+ 'R': { key: 'R', code: 'KeyR', keyCode: 82, shiftKey: true },
549
+ 'T': { key: 'T', code: 'KeyT', keyCode: 84, shiftKey: true },
550
+ 'Y': { key: 'Y', code: 'KeyY', keyCode: 89, shiftKey: true },
551
+ 'U': { key: 'U', code: 'KeyU', keyCode: 85, shiftKey: true },
552
+ 'I': { key: 'I', code: 'KeyI', keyCode: 73, shiftKey: true },
553
+ 'O': { key: 'O', code: 'KeyO', keyCode: 79, shiftKey: true },
554
+ 'P': { key: 'P', code: 'KeyP', keyCode: 80, shiftKey: true },
555
+ 'A': { key: 'A', code: 'KeyA', keyCode: 65, shiftKey: true },
556
+ 'S': { key: 'S', code: 'KeyS', keyCode: 83, shiftKey: true },
557
+ 'D': { key: 'D', code: 'KeyD', keyCode: 68, shiftKey: true },
558
+ 'F': { key: 'F', code: 'KeyF', keyCode: 70, shiftKey: true },
559
+ 'G': { key: 'G', code: 'KeyG', keyCode: 71, shiftKey: true },
560
+ 'H': { key: 'H', code: 'KeyH', keyCode: 72, shiftKey: true },
561
+ 'J': { key: 'J', code: 'KeyJ', keyCode: 74, shiftKey: true },
562
+ 'K': { key: 'K', code: 'KeyK', keyCode: 75, shiftKey: true },
563
+ 'L': { key: 'L', code: 'KeyL', keyCode: 76, shiftKey: true },
564
+ 'Ñ': { key: 'Ñ', code: 'Semicolon', keyCode: 186, shiftKey: true },
565
+ 'Z': { key: 'Z', code: 'KeyZ', keyCode: 90, shiftKey: true },
566
+ 'X': { key: 'X', code: 'KeyX', keyCode: 88, shiftKey: true },
567
+ 'C': { key: 'C', code: 'KeyC', keyCode: 67, shiftKey: true },
568
+ 'V': { key: 'V', code: 'KeyV', keyCode: 86, shiftKey: true },
569
+ 'B': { key: 'B', code: 'KeyB', keyCode: 66, shiftKey: true },
570
+ 'N': { key: 'N', code: 'KeyN', keyCode: 78, shiftKey: true },
571
+ 'M': { key: 'M', code: 'KeyM', keyCode: 77, shiftKey: true },
572
+ // Специальные символы с Shift
573
+ '!': { key: '!', code: 'Digit1', keyCode: 49, shiftKey: true },
574
+ '"': { key: '"', code: 'Digit2', keyCode: 50, shiftKey: true },
575
+ '·': { key: '·', code: 'Digit3', keyCode: 51, shiftKey: true },
576
+ '$': { key: '$', code: 'Digit4', keyCode: 52, shiftKey: true },
577
+ '%': { key: '%', code: 'Digit5', keyCode: 53, shiftKey: true },
578
+ '&': { key: '&', code: 'Digit6', keyCode: 54, shiftKey: true },
579
+ '/': { key: '/', code: 'Digit7', keyCode: 55, shiftKey: true },
580
+ '(': { key: '(', code: 'Digit8', keyCode: 56, shiftKey: true },
581
+ ')': { key: ')', code: 'Digit9', keyCode: 57, shiftKey: true },
582
+ '=': { key: '=', code: 'Digit0', keyCode: 48, shiftKey: true },
583
+ '?': { key: '?', code: 'Minus', keyCode: 189, shiftKey: true },
584
+ '¿': { key: '¿', code: 'Equal', keyCode: 187, shiftKey: true },
585
+ // Пробел
586
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
587
+ };
588
+
589
+ const ua = {
590
+ // Первый ряд (цифры)
591
+ '1': { key: '1', code: 'Digit1', keyCode: 49 },
592
+ '2': { key: '2', code: 'Digit2', keyCode: 50 },
593
+ '3': { key: '3', code: 'Digit3', keyCode: 51 },
594
+ '4': { key: '4', code: 'Digit4', keyCode: 52 },
595
+ '5': { key: '5', code: 'Digit5', keyCode: 53 },
596
+ '6': { key: '6', code: 'Digit6', keyCode: 54 },
597
+ '7': { key: '7', code: 'Digit7', keyCode: 55 },
598
+ '8': { key: '8', code: 'Digit8', keyCode: 56 },
599
+ '9': { key: '9', code: 'Digit9', keyCode: 57 },
600
+ '0': { key: '0', code: 'Digit0', keyCode: 48 },
601
+ '-': { key: '-', code: 'Minus', keyCode: 189 },
602
+ '=': { key: '=', code: 'Equal', keyCode: 187 },
603
+ // Второй ряд (украинская ЙЦУКЕН)
604
+ 'й': { key: 'й', code: 'KeyQ', keyCode: 81 },
605
+ 'ц': { key: 'ц', code: 'KeyW', keyCode: 87 },
606
+ 'у': { key: 'у', code: 'KeyE', keyCode: 69 },
607
+ 'к': { key: 'к', code: 'KeyR', keyCode: 82 },
608
+ 'е': { key: 'е', code: 'KeyT', keyCode: 84 },
609
+ 'н': { key: 'н', code: 'KeyY', keyCode: 89 },
610
+ 'г': { key: 'г', code: 'KeyU', keyCode: 85 },
611
+ 'ш': { key: 'ш', code: 'KeyI', keyCode: 73 },
612
+ 'щ': { key: 'щ', code: 'KeyO', keyCode: 79 },
613
+ 'з': { key: 'з', code: 'KeyP', keyCode: 80 },
614
+ 'х': { key: 'х', code: 'BracketLeft', keyCode: 219 },
615
+ 'ї': { key: 'ї', code: 'BracketRight', keyCode: 221 }, // украинская ї
616
+ // Третий ряд
617
+ 'ф': { key: 'ф', code: 'KeyA', keyCode: 65 },
618
+ 'і': { key: 'і', code: 'KeyS', keyCode: 83 }, // украинская і
619
+ 'в': { key: 'в', code: 'KeyD', keyCode: 68 },
620
+ 'а': { key: 'а', code: 'KeyF', keyCode: 70 },
621
+ 'п': { key: 'п', code: 'KeyG', keyCode: 71 },
622
+ 'р': { key: 'р', code: 'KeyH', keyCode: 72 },
623
+ 'о': { key: 'о', code: 'KeyJ', keyCode: 74 },
624
+ 'л': { key: 'л', code: 'KeyK', keyCode: 75 },
625
+ 'д': { key: 'д', code: 'KeyL', keyCode: 76 },
626
+ 'ж': { key: 'ж', code: 'Semicolon', keyCode: 186 },
627
+ 'є': { key: 'є', code: 'Quote', keyCode: 222 }, // украинская є
628
+ '\\': { key: '\\', code: 'Backslash', keyCode: 220 },
629
+ // Четвертый ряд
630
+ 'я': { key: 'я', code: 'KeyZ', keyCode: 90 },
631
+ 'ч': { key: 'ч', code: 'KeyX', keyCode: 88 },
632
+ 'с': { key: 'с', code: 'KeyC', keyCode: 67 },
633
+ 'м': { key: 'м', code: 'KeyV', keyCode: 86 },
634
+ 'и': { key: 'и', code: 'KeyB', keyCode: 66 },
635
+ 'т': { key: 'т', code: 'KeyN', keyCode: 78 },
636
+ 'ь': { key: 'ь', code: 'KeyM', keyCode: 77 },
637
+ 'б': { key: 'б', code: 'Comma', keyCode: 188 },
638
+ 'ю': { key: 'ю', code: 'Period', keyCode: 190 },
639
+ '.': { key: '.', code: 'Slash', keyCode: 191 },
640
+ // Заглавные буквы (с Shift)
641
+ 'Й': { key: 'Й', code: 'KeyQ', keyCode: 81, shiftKey: true },
642
+ 'Ц': { key: 'Ц', code: 'KeyW', keyCode: 87, shiftKey: true },
643
+ 'У': { key: 'У', code: 'KeyE', keyCode: 69, shiftKey: true },
644
+ 'К': { key: 'К', code: 'KeyR', keyCode: 82, shiftKey: true },
645
+ 'Е': { key: 'Е', code: 'KeyT', keyCode: 84, shiftKey: true },
646
+ 'Н': { key: 'Н', code: 'KeyY', keyCode: 89, shiftKey: true },
647
+ 'Г': { key: 'Г', code: 'KeyU', keyCode: 85, shiftKey: true },
648
+ 'Ш': { key: 'Ш', code: 'KeyI', keyCode: 73, shiftKey: true },
649
+ 'Щ': { key: 'Щ', code: 'KeyO', keyCode: 79, shiftKey: true },
650
+ 'З': { key: 'З', code: 'KeyP', keyCode: 80, shiftKey: true },
651
+ 'Х': { key: 'Х', code: 'BracketLeft', keyCode: 219, shiftKey: true },
652
+ 'Ї': { key: 'Ї', code: 'BracketRight', keyCode: 221, shiftKey: true },
653
+ 'Ф': { key: 'Ф', code: 'KeyA', keyCode: 65, shiftKey: true },
654
+ 'І': { key: 'І', code: 'KeyS', keyCode: 83, shiftKey: true },
655
+ 'В': { key: 'В', code: 'KeyD', keyCode: 68, shiftKey: true },
656
+ 'А': { key: 'А', code: 'KeyF', keyCode: 70, shiftKey: true },
657
+ 'П': { key: 'П', code: 'KeyG', keyCode: 71, shiftKey: true },
658
+ 'Р': { key: 'Р', code: 'KeyH', keyCode: 72, shiftKey: true },
659
+ 'О': { key: 'О', code: 'KeyJ', keyCode: 74, shiftKey: true },
660
+ 'Л': { key: 'Л', code: 'KeyK', keyCode: 75, shiftKey: true },
661
+ 'Д': { key: 'Д', code: 'KeyL', keyCode: 76, shiftKey: true },
662
+ 'Ж': { key: 'Ж', code: 'Semicolon', keyCode: 186, shiftKey: true },
663
+ 'Є': { key: 'Є', code: 'Quote', keyCode: 222, shiftKey: true },
664
+ 'Я': { key: 'Я', code: 'KeyZ', keyCode: 90, shiftKey: true },
665
+ 'Ч': { key: 'Ч', code: 'KeyX', keyCode: 88, shiftKey: true },
666
+ 'С': { key: 'С', code: 'KeyC', keyCode: 67, shiftKey: true },
667
+ 'М': { key: 'М', code: 'KeyV', keyCode: 86, shiftKey: true },
668
+ 'И': { key: 'И', code: 'KeyB', keyCode: 66, shiftKey: true },
669
+ 'Т': { key: 'Т', code: 'KeyN', keyCode: 78, shiftKey: true },
670
+ 'Ь': { key: 'Ь', code: 'KeyM', keyCode: 77, shiftKey: true },
671
+ 'Б': { key: 'Б', code: 'Comma', keyCode: 188, shiftKey: true },
672
+ 'Ю': { key: 'Ю', code: 'Period', keyCode: 190, shiftKey: true },
673
+ // Символы с Shift
674
+ '!': { key: '!', code: 'Digit1', keyCode: 49, shiftKey: true },
675
+ '@': { key: '@', code: 'Digit2', keyCode: 50, shiftKey: true },
676
+ '#': { key: '#', code: 'Digit3', keyCode: 51, shiftKey: true },
677
+ '$': { key: '$', code: 'Digit4', keyCode: 52, shiftKey: true },
678
+ '%': { key: '%', code: 'Digit5', keyCode: 53, shiftKey: true },
679
+ '^': { key: '^', code: 'Digit6', keyCode: 54, shiftKey: true },
680
+ '&': { key: '&', code: 'Digit7', keyCode: 55, shiftKey: true },
681
+ '*': { key: '*', code: 'Digit8', keyCode: 56, shiftKey: true },
682
+ '(': { key: '(', code: 'Digit9', keyCode: 57, shiftKey: true },
683
+ ')': { key: ')', code: 'Digit0', keyCode: 48, shiftKey: true },
684
+ '_': { key: '_', code: 'Minus', keyCode: 189, shiftKey: true },
685
+ '+': { key: '+', code: 'Equal', keyCode: 187, shiftKey: true },
686
+ // Пробел
687
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
688
+ };
689
+
690
+ const he = {
691
+ // Первый ряд (цифры)
692
+ '1': { key: '1', code: 'Digit1', keyCode: 49 },
693
+ '2': { key: '2', code: 'Digit2', keyCode: 50 },
694
+ '3': { key: '3', code: 'Digit3', keyCode: 51 },
695
+ '4': { key: '4', code: 'Digit4', keyCode: 52 },
696
+ '5': { key: '5', code: 'Digit5', keyCode: 53 },
697
+ '6': { key: '6', code: 'Digit6', keyCode: 54 },
698
+ '7': { key: '7', code: 'Digit7', keyCode: 55 },
699
+ '8': { key: '8', code: 'Digit8', keyCode: 56 },
700
+ '9': { key: '9', code: 'Digit9', keyCode: 57 },
701
+ '0': { key: '0', code: 'Digit0', keyCode: 48 },
702
+ '-': { key: '-', code: 'Minus', keyCode: 189 },
703
+ '=': { key: '=', code: 'Equal', keyCode: 187 },
704
+ // Второй ряд (иврит - справа налево, но клавиши в том же порядке)
705
+ '/': { key: '/', code: 'KeyQ', keyCode: 81 }, // ק на Q
706
+ "'": { key: "'", code: 'KeyW', keyCode: 87 }, // ר на W
707
+ 'ק': { key: 'ק', code: 'KeyE', keyCode: 69 }, // א на E
708
+ 'ר': { key: 'ר', code: 'KeyR', keyCode: 82 }, // ט на R
709
+ 'א': { key: 'א', code: 'KeyT', keyCode: 84 }, // ו на T
710
+ 'ט': { key: 'ט', code: 'KeyY', keyCode: 89 }, // ן на Y
711
+ 'ו': { key: 'ו', code: 'KeyU', keyCode: 85 }, // ם на U
712
+ 'ן': { key: 'ן', code: 'KeyI', keyCode: 73 }, // פ на I
713
+ 'ם': { key: 'ם', code: 'KeyO', keyCode: 79 }, // ף на O
714
+ 'פ': { key: 'פ', code: 'KeyP', keyCode: 80 }, // פ на P
715
+ ']': { key: ']', code: 'BracketLeft', keyCode: 219 },
716
+ '[': { key: '[', code: 'BracketRight', keyCode: 221 },
717
+ // Третий ряд
718
+ 'ש': { key: 'ש', code: 'KeyA', keyCode: 65 }, // ש на A
719
+ 'ד': { key: 'ד', code: 'KeyS', keyCode: 83 }, // ד на S
720
+ 'ג': { key: 'ג', code: 'KeyD', keyCode: 68 }, // ג на D
721
+ 'כ': { key: 'כ', code: 'KeyF', keyCode: 70 }, // כ на F
722
+ 'ע': { key: 'ע', code: 'KeyG', keyCode: 71 }, // ע на G
723
+ 'י': { key: 'י', code: 'KeyH', keyCode: 72 }, // י на H
724
+ 'ח': { key: 'ח', code: 'KeyJ', keyCode: 74 }, // ח на J
725
+ 'ל': { key: 'ל', code: 'KeyK', keyCode: 75 }, // ל на K
726
+ 'ך': { key: 'ך', code: 'KeyL', keyCode: 76 }, // ך на L
727
+ 'ף': { key: 'ף', code: 'Semicolon', keyCode: 186 }, // ף на ;
728
+ ',': { key: ',', code: 'Quote', keyCode: 222 },
729
+ '\\': { key: '\\', code: 'Backslash', keyCode: 220 },
730
+ // Четвертый ряд
731
+ 'ז': { key: 'ז', code: 'KeyZ', keyCode: 90 }, // ז на Z
732
+ 'ס': { key: 'ס', code: 'KeyX', keyCode: 88 }, // ס на X
733
+ 'ב': { key: 'ב', code: 'KeyC', keyCode: 67 }, // ב на C
734
+ 'ה': { key: 'ה', code: 'KeyV', keyCode: 86 }, // ה на V
735
+ 'נ': { key: 'נ', code: 'KeyB', keyCode: 66 }, // נ на B
736
+ 'מ': { key: 'מ', code: 'KeyN', keyCode: 78 }, // מ на N
737
+ 'צ': { key: 'צ', code: 'KeyM', keyCode: 77 }, // צ на M
738
+ 'ת': { key: 'ת', code: 'Comma', keyCode: 188 }, // ת на ,
739
+ 'ץ': { key: 'ץ', code: 'Period', keyCode: 190 }, // ץ на .
740
+ '.': { key: '.', code: 'Slash', keyCode: 191 },
741
+ // Символы с Shift (английские символы при нажатии Shift)
742
+ '!': { key: '!', code: 'Digit1', keyCode: 49, shiftKey: true },
743
+ '@': { key: '@', code: 'Digit2', keyCode: 50, shiftKey: true },
744
+ '#': { key: '#', code: 'Digit3', keyCode: 51, shiftKey: true },
745
+ '$': { key: '$', code: 'Digit4', keyCode: 52, shiftKey: true },
746
+ '%': { key: '%', code: 'Digit5', keyCode: 53, shiftKey: true },
747
+ '^': { key: '^', code: 'Digit6', keyCode: 54, shiftKey: true },
748
+ '&': { key: '&', code: 'Digit7', keyCode: 55, shiftKey: true },
749
+ '*': { key: '*', code: 'Digit8', keyCode: 56, shiftKey: true },
750
+ '(': { key: '(', code: 'Digit9', keyCode: 57, shiftKey: true },
751
+ ')': { key: ')', code: 'Digit0', keyCode: 48, shiftKey: true },
752
+ '_': { key: '_', code: 'Minus', keyCode: 189, shiftKey: true },
753
+ '+': { key: '+', code: 'Equal', keyCode: 187, shiftKey: true },
754
+ // Английские буквы с Shift (двуязычная клавиатура)
755
+ 'Q': { key: 'Q', code: 'KeyQ', keyCode: 81, shiftKey: true },
756
+ 'W': { key: 'W', code: 'KeyW', keyCode: 87, shiftKey: true },
757
+ 'E': { key: 'E', code: 'KeyE', keyCode: 69, shiftKey: true },
758
+ 'R': { key: 'R', code: 'KeyR', keyCode: 82, shiftKey: true },
759
+ 'T': { key: 'T', code: 'KeyT', keyCode: 84, shiftKey: true },
760
+ 'Y': { key: 'Y', code: 'KeyY', keyCode: 89, shiftKey: true },
761
+ 'U': { key: 'U', code: 'KeyU', keyCode: 85, shiftKey: true },
762
+ 'I': { key: 'I', code: 'KeyI', keyCode: 73, shiftKey: true },
763
+ 'O': { key: 'O', code: 'KeyO', keyCode: 79, shiftKey: true },
764
+ 'P': { key: 'P', code: 'KeyP', keyCode: 80, shiftKey: true },
765
+ 'A': { key: 'A', code: 'KeyA', keyCode: 65, shiftKey: true },
766
+ 'S': { key: 'S', code: 'KeyS', keyCode: 83, shiftKey: true },
767
+ 'D': { key: 'D', code: 'KeyD', keyCode: 68, shiftKey: true },
768
+ 'F': { key: 'F', code: 'KeyF', keyCode: 70, shiftKey: true },
769
+ 'G': { key: 'G', code: 'KeyG', keyCode: 71, shiftKey: true },
770
+ 'H': { key: 'H', code: 'KeyH', keyCode: 72, shiftKey: true },
771
+ 'J': { key: 'J', code: 'KeyJ', keyCode: 74, shiftKey: true },
772
+ 'K': { key: 'K', code: 'KeyK', keyCode: 75, shiftKey: true },
773
+ 'L': { key: 'L', code: 'KeyL', keyCode: 76, shiftKey: true },
774
+ 'Z': { key: 'Z', code: 'KeyZ', keyCode: 90, shiftKey: true },
775
+ 'X': { key: 'X', code: 'KeyX', keyCode: 88, shiftKey: true },
776
+ 'C': { key: 'C', code: 'KeyC', keyCode: 67, shiftKey: true },
777
+ 'V': { key: 'V', code: 'KeyV', keyCode: 86, shiftKey: true },
778
+ 'B': { key: 'B', code: 'KeyB', keyCode: 66, shiftKey: true },
779
+ 'N': { key: 'N', code: 'KeyN', keyCode: 78, shiftKey: true },
780
+ 'M': { key: 'M', code: 'KeyM', keyCode: 77, shiftKey: true },
781
+ // Пробел
782
+ ' ': { key: ' ', code: 'Space', keyCode: 32 },
783
+ };
784
+
785
+ exports.KeymapInspector = KeymapInspector;
786
+ exports.de = de;
787
+ exports.en = en;
788
+ exports.es = es;
789
+ exports.fr = fr;
790
+ exports.he = he;
791
+ exports.ru = ru;
792
+ exports.ua = ua;
793
+
794
+ Object.defineProperty(exports, '__esModule', { value: true });
795
+
796
+ }));
797
+ //# sourceMappingURL=keymap-inspector.umd.js.map