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