keymap-inspector 0.1.0 → 0.1.3

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.
package/README.md ADDED
@@ -0,0 +1,438 @@
1
+ # 🔍 Keymap Inspector
2
+
3
+ [![npm version](https://badge.fury.io/js/keymap-inspector.svg)](https://badge.fury.io/js/keymap-inspector)
4
+ [![npm downloads](https://img.shields.io/npm/dm/keymap-inspector.svg)](https://www.npmjs.com/package/keymap-inspector)
5
+
6
+ *[🇺🇸 English](#english) | [🇷🇺 Русский](#русский) | [🇩🇪 Deutsch](#deutsch) | [🇫🇷 Français](#français) | [🇪🇸 Español](#español) | [🇺🇦 Українська](#українська) | [🇮🇱 עברית](#עברית)*
7
+
8
+ ---
9
+
10
+ ## English
11
+
12
+ Inspect keyboard events and characters across different layouts. Find which physical key corresponds to a character and see what characters are on that key in other keyboard layouts.
13
+
14
+ ### 🚀 Features
15
+
16
+ - **7 keyboard layouts**: English, Russian, German, French, Spanish, Ukrainian, Hebrew
17
+ - **Bidirectional mapping**: Character → Key info, Key code → Characters
18
+ - **CLI tool** for quick inspections
19
+ - **TypeScript** support with full type definitions
20
+ - **Lightweight**: Only 6.5KB package size
21
+
22
+ ### 📦 Installation
23
+
24
+ ```bash
25
+ # Install globally for CLI usage
26
+ npm install -g keymap-inspector
27
+
28
+ # Install locally for library usage
29
+ npm install keymap-inspector
30
+ ```
31
+
32
+ ### 🖥️ CLI Usage
33
+
34
+ ```bash
35
+ keymap-inspector a
36
+ # Output:
37
+ {
38
+ "char": "a",
39
+ "keyDefinition": {
40
+ "key": "a",
41
+ "code": "KeyA",
42
+ "keyCode": 65
43
+ },
44
+ "layouts": {
45
+ "en": "a",
46
+ "ru": "ф",
47
+ "de": "a",
48
+ "fr": "q",
49
+ "es": "a",
50
+ "ua": "ф",
51
+ "he": "ש"
52
+ }
53
+ }
54
+ ```
55
+
56
+ ### 📚 Library Usage
57
+
58
+ **Node.js:**
59
+ ```javascript
60
+ import { KeymapInspector, en, ru, de, fr, es, ua, he } from 'keymap-inspector';
61
+
62
+ const inspector = new KeymapInspector({ en, ru, de, fr, es, ua, he });
63
+
64
+ // Inspect a character
65
+ const result = inspector.inspect('a');
66
+ console.log(result);
67
+ ```
68
+
69
+ **Browser (ES Modules):**
70
+ ```html
71
+ <script type="module">
72
+ import { KeymapInspector, en, ru } from 'https://unpkg.com/keymap-inspector@latest/dist/keymap-inspector.browser.js';
73
+
74
+ const inspector = new KeymapInspector({ en, ru });
75
+ const result = inspector.inspect('a');
76
+ console.log(result);
77
+ </script>
78
+ ```
79
+
80
+ **Browser (Script Tag):**
81
+ ```html
82
+ <script src="https://unpkg.com/keymap-inspector@latest/dist/keymap-inspector.browser.js"></script>
83
+ <script>
84
+ const inspector = new KeymapInspector.KeymapInspector({
85
+ en: KeymapInspector.en,
86
+ ru: KeymapInspector.ru
87
+ });
88
+
89
+ // Find by key code
90
+ const byCode = inspector.inspectByCode('KeyA');
91
+ console.log(byCode);
92
+
93
+ // Find by keyCode number
94
+ const byKeyCode = inspector.inspectByKeyCode(65);
95
+ console.log(byKeyCode);
96
+ </script>
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Русский
102
+
103
+ Инспектор клавиатурных раскладок. Определяет, какая физическая клавиша соответствует символу, и показывает, какие символы находятся на этой клавише в других раскладках.
104
+
105
+ ### 🚀 Возможности
106
+
107
+ - **7 раскладок клавиатуры**: английская, русская, немецкая, французская, испанская, украинская, иврит
108
+ - **Двустороннее сопоставление**: символ → информация о клавише, код клавиши → символы
109
+ - **CLI утилита** для быстрых проверок
110
+ - **TypeScript** поддержка с полными определениями типов
111
+ - **Легковесный**: размер пакета всего 6.5KB
112
+
113
+ ### 📦 Установка
114
+
115
+ ```bash
116
+ # Глобальная установка для CLI
117
+ npm install -g keymap-inspector
118
+
119
+ # Локальная установка для библиотеки
120
+ npm install keymap-inspector
121
+ ```
122
+
123
+ ### 🖥️ Использование CLI
124
+
125
+ ```bash
126
+ keymap-inspector ф
127
+ # Вывод:
128
+ {
129
+ "char": "ф",
130
+ "keyDefinition": {
131
+ "key": "ф",
132
+ "code": "KeyA",
133
+ "keyCode": 65
134
+ },
135
+ "layouts": {
136
+ "en": "a",
137
+ "ru": "ф",
138
+ "de": "a",
139
+ "fr": "q",
140
+ "es": "a",
141
+ "ua": "ф",
142
+ "he": "ש"
143
+ }
144
+ }
145
+ ```
146
+
147
+ ---
148
+
149
+ ## Deutsch
150
+
151
+ Tastaturlayout-Inspektor. Ermittelt, welche physische Taste einem Zeichen entspricht und zeigt, welche Zeichen sich auf dieser Taste in anderen Tastaturlayouts befinden.
152
+
153
+ ### 🚀 Features
154
+
155
+ - **7 Tastaturlayouts**: Englisch, Russisch, Deutsch, Französisch, Spanisch, Ukrainisch, Hebräisch
156
+ - **Bidirektionale Zuordnung**: Zeichen → Tasteninformationen, Tastencode → Zeichen
157
+ - **CLI-Tool** für schnelle Inspektionen
158
+ - **TypeScript** Unterstützung mit vollständigen Typdefinitionen
159
+ - **Leichtgewichtig**: Nur 6.5KB Paketgröße
160
+
161
+ ### 📦 Installation
162
+
163
+ ```bash
164
+ # Global installieren für CLI-Nutzung
165
+ npm install -g keymap-inspector
166
+
167
+ # Lokal installieren für Bibliotheksnutzung
168
+ npm install keymap-inspector
169
+ ```
170
+
171
+ ### 🖥️ CLI-Nutzung
172
+
173
+ ```bash
174
+ keymap-inspector ä
175
+ # Ausgabe:
176
+ {
177
+ "char": "ä",
178
+ "keyDefinition": {
179
+ "key": "ä",
180
+ "code": "Quote",
181
+ "keyCode": 222
182
+ },
183
+ "layouts": {
184
+ "en": "'",
185
+ "ru": "э",
186
+ "de": "ä",
187
+ "fr": "ù",
188
+ "es": "´",
189
+ "ua": "є",
190
+ "he": ","
191
+ }
192
+ }
193
+ ```
194
+
195
+ ---
196
+
197
+ ## Français
198
+
199
+ Inspecteur de dispositions de clavier. Détermine quelle touche physique correspond à un caractère et montre quels caractères se trouvent sur cette touche dans d'autres dispositions de clavier.
200
+
201
+ ### 🚀 Fonctionnalités
202
+
203
+ - **7 dispositions de clavier**: Anglais, Russe, Allemand, Français, Espagnol, Ukrainien, Hébreu
204
+ - **Mappage bidirectionnel**: Caractère → Informations de touche, Code de touche → Caractères
205
+ - **Outil CLI** pour des inspections rapides
206
+ - **Support TypeScript** avec des définitions de types complètes
207
+ - **Léger**: Seulement 6.5KB de taille de paquet
208
+
209
+ ### 📦 Installation
210
+
211
+ ```bash
212
+ # Installer globalement pour l'usage CLI
213
+ npm install -g keymap-inspector
214
+
215
+ # Installer localement pour l'usage de bibliothèque
216
+ npm install keymap-inspector
217
+ ```
218
+
219
+ ### 🖥️ Usage CLI
220
+
221
+ ```bash
222
+ keymap-inspector é
223
+ # Sortie:
224
+ {
225
+ "char": "é",
226
+ "keyDefinition": {
227
+ "key": "é",
228
+ "code": "Digit2",
229
+ "keyCode": 50
230
+ },
231
+ "layouts": {
232
+ "en": "2",
233
+ "ru": "2",
234
+ "de": "2",
235
+ "fr": "é",
236
+ "es": "2",
237
+ "ua": "2",
238
+ "he": "2"
239
+ }
240
+ }
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Español
246
+
247
+ Inspector de distribuciones de teclado. Determina qué tecla física corresponde a un carácter y muestra qué caracteres están en esa tecla en otras distribuciones de teclado.
248
+
249
+ ### 🚀 Características
250
+
251
+ - **7 distribuciones de teclado**: Inglés, Ruso, Alemán, Francés, Español, Ucraniano, Hebreo
252
+ - **Mapeo bidireccional**: Carácter → Información de tecla, Código de tecla → Caracteres
253
+ - **Herramienta CLI** para inspecciones rápidas
254
+ - **Soporte TypeScript** con definiciones de tipos completas
255
+ - **Ligero**: Solo 6.5KB de tamaño de paquete
256
+
257
+ ### 📦 Instalación
258
+
259
+ ```bash
260
+ # Instalar globalmente para uso CLI
261
+ npm install -g keymap-inspector
262
+
263
+ # Instalar localmente para uso de biblioteca
264
+ npm install keymap-inspector
265
+ ```
266
+
267
+ ### 🖥️ Uso CLI
268
+
269
+ ```bash
270
+ keymap-inspector ñ
271
+ # Salida:
272
+ {
273
+ "char": "ñ",
274
+ "keyDefinition": {
275
+ "key": "ñ",
276
+ "code": "Semicolon",
277
+ "keyCode": 186
278
+ },
279
+ "layouts": {
280
+ "en": ";",
281
+ "ru": "ж",
282
+ "de": "ö",
283
+ "fr": "m",
284
+ "es": "ñ",
285
+ "ua": "ж",
286
+ "he": "ף"
287
+ }
288
+ }
289
+ ```
290
+
291
+ ---
292
+
293
+ ## Українська
294
+
295
+ Інспектор клавіатурних розкладок. Визначає, яка фізична клавіша відповідає символу, та показує, які символи знаходяться на цій клавіші в інших розкладках клавіатури.
296
+
297
+ ### 🚀 Можливості
298
+
299
+ - **7 розкладок клавіатури**: англійська, російська, німецька, французька, іспанська, українська, іврит
300
+ - **Двостороннє зіставлення**: символ → інформація про клавішу, код клавіші → символи
301
+ - **CLI утиліта** для швидких перевірок
302
+ - **TypeScript** підтримка з повними визначеннями типів
303
+ - **Легкий**: розмір пакету лише 6.5KB
304
+
305
+ ### 📦 Встановлення
306
+
307
+ ```bash
308
+ # Глобальне встановлення для CLI
309
+ npm install -g keymap-inspector
310
+
311
+ # Локальне встановлення для бібліотеки
312
+ npm install keymap-inspector
313
+ ```
314
+
315
+ ### 🖥️ Використання CLI
316
+
317
+ ```bash
318
+ keymap-inspector і
319
+ # Вивід:
320
+ {
321
+ "char": "і",
322
+ "keyDefinition": {
323
+ "key": "і",
324
+ "code": "KeyS",
325
+ "keyCode": 83
326
+ },
327
+ "layouts": {
328
+ "en": "s",
329
+ "ru": "ы",
330
+ "de": "s",
331
+ "fr": "s",
332
+ "es": "s",
333
+ "ua": "і",
334
+ "he": "ד"
335
+ }
336
+ }
337
+ ```
338
+
339
+ ---
340
+
341
+ ## עברית
342
+
343
+ בודק פריסות מקלדת. קובע איזה מקש פיזי מתאים לתו ומראה אילו תווים נמצאים על המקש הזה בפריסות מקלדת אחרות.
344
+
345
+ ### 🚀 תכונות
346
+
347
+ - **7 פריסות מקלדת**: אנגלית, רוסית, גרמנית, צרפתית, ספרדית, אוקראינית, עברית
348
+ - **מיפוי דו-כיווני**: תו ← מידע על מקש, קוד מקש ← תווים
349
+ - **כלי CLI** לבדיקות מהירות
350
+ - **תמיכה ב-TypeScript** עם הגדרות טיפוסים מלאות
351
+ - **קל משקל**: גודל חבילה של 6.5KB בלבד
352
+
353
+ ### 📦 התקנה
354
+
355
+ ```bash
356
+ # התקנה גלובלית לשימוש CLI
357
+ npm install -g keymap-inspector
358
+
359
+ # התקנה מקומית לשימוש ספרייה
360
+ npm install keymap-inspector
361
+ ```
362
+
363
+ ### 🖥️ שימוש ב-CLI
364
+
365
+ ```bash
366
+ keymap-inspector ש
367
+ # פלט:
368
+ {
369
+ "char": "ש",
370
+ "keyDefinition": {
371
+ "key": "ש",
372
+ "code": "KeyA",
373
+ "keyCode": 65
374
+ },
375
+ "layouts": {
376
+ "en": "a",
377
+ "ru": "ф",
378
+ "de": "a",
379
+ "fr": "q",
380
+ "es": "a",
381
+ "ua": "ф",
382
+ "he": "ש"
383
+ }
384
+ }
385
+ ```
386
+
387
+ ---
388
+
389
+ ## 🔧 API Reference
390
+
391
+ ### KeymapInspector
392
+
393
+ ```typescript
394
+ interface KeyDefinition {
395
+ key?: string;
396
+ code: string;
397
+ keyCode: number;
398
+ shiftKey?: boolean;
399
+ location?: number;
400
+ }
401
+
402
+ interface InspectionResult {
403
+ char: string;
404
+ keyDefinition: KeyDefinition;
405
+ layouts: {
406
+ [layoutName: string]: string | null;
407
+ };
408
+ }
409
+
410
+ class KeymapInspector {
411
+ constructor(layouts: { [name: string]: Keymap });
412
+ inspect(char: string): InspectionResult | null;
413
+ inspectByCode(code: string): InspectionResult | null;
414
+ inspectByKeyCode(keyCode: number): InspectionResult | null;
415
+ }
416
+ ```
417
+
418
+ ### Available Layouts
419
+
420
+ - `en` - English (QWERTY)
421
+ - `ru` - Russian (ЙЦУКЕН)
422
+ - `de` - German (QWERTZ)
423
+ - `fr` - French (AZERTY)
424
+ - `es` - Spanish (QWERTY)
425
+ - `ua` - Ukrainian (ЙЦУКЕН)
426
+ - `he` - Hebrew
427
+
428
+ ## 📄 License
429
+
430
+ MIT © [mikyviz](https://github.com/MikyViz)
431
+
432
+ ## 🤝 Contributing
433
+
434
+ Contributions are welcome! Please feel free to submit a Pull Request.
435
+
436
+ ## 🐛 Issues
437
+
438
+ Found a bug? Please [open an issue](https://github.com/MikyViz/keymap-inspector/issues).
@@ -0,0 +1,141 @@
1
+ // Browser-compatible build
2
+ (function(global, factory) {
3
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
4
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
5
+ (global = global || self, factory(global.KeymapInspector = {}));
6
+ }(this, (function(exports) {
7
+ 'use strict';
8
+
9
+ // Types (for documentation only in browser)
10
+
11
+ // KeymapInspector class
12
+ class KeymapInspector {
13
+ constructor(layouts) {
14
+ this.layouts = layouts;
15
+ this.reversedLayouts = {};
16
+
17
+ for (const layoutName in layouts) {
18
+ this.reversedLayouts[layoutName] = {};
19
+ const layout = layouts[layoutName];
20
+ for (const char in layout) {
21
+ const keyDef = layout[char];
22
+ // Сохраняем все символы, но с учетом Shift
23
+ const currentCode = keyDef.code;
24
+
25
+ // Если это символ без Shift, сохраняем как основной
26
+ if (!keyDef.shiftKey) {
27
+ this.reversedLayouts[layoutName][currentCode] = char;
28
+ }
29
+ // Если это символ с Shift, сохраняем с префиксом
30
+ else {
31
+ this.reversedLayouts[layoutName][currentCode + '_SHIFT'] = char;
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ inspect(char) {
38
+ let baseLayoutName = null;
39
+ let keyDefinition = null;
40
+
41
+ for (const layoutName in this.layouts) {
42
+ if (this.layouts[layoutName][char]) {
43
+ baseLayoutName = layoutName;
44
+ keyDefinition = this.layouts[layoutName][char];
45
+ break;
46
+ }
47
+ }
48
+
49
+ if (!keyDefinition || !baseLayoutName) {
50
+ return null;
51
+ }
52
+
53
+ const layouts = {};
54
+ for (const layoutName in this.reversedLayouts) {
55
+ // Ищем символ с учетом Shift
56
+ if (keyDefinition.shiftKey) {
57
+ layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code + '_SHIFT'] || null;
58
+ } else {
59
+ layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code] || null;
60
+ }
61
+ }
62
+
63
+ return {
64
+ char,
65
+ keyDefinition,
66
+ layouts,
67
+ };
68
+ }
69
+
70
+ inspectByCode(code) {
71
+ const char = this.findCharByCode(code);
72
+ return char ? this.inspect(char) : null;
73
+ }
74
+
75
+ inspectByKeyCode(keyCode) {
76
+ const char = this.findCharByKeyCode(keyCode);
77
+ return char ? this.inspect(char) : null;
78
+ }
79
+
80
+ findCharByCode(code) {
81
+ // Сначала ищем символ без Shift
82
+ for (const layoutName in this.layouts) {
83
+ const layout = this.layouts[layoutName];
84
+ for (const char in layout) {
85
+ if (layout[char].code === code && !layout[char].shiftKey) {
86
+ return char;
87
+ }
88
+ }
89
+ }
90
+ // Если не нашли без Shift, ищем с Shift
91
+ for (const layoutName in this.layouts) {
92
+ const layout = this.layouts[layoutName];
93
+ for (const char in layout) {
94
+ if (layout[char].code === code && layout[char].shiftKey) {
95
+ return char;
96
+ }
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+
102
+ findCharByKeyCode(keyCode) {
103
+ // Сначала ищем символ без Shift
104
+ for (const layoutName in this.layouts) {
105
+ const layout = this.layouts[layoutName];
106
+ for (const char in layout) {
107
+ if (layout[char].keyCode === keyCode && !layout[char].shiftKey) {
108
+ return char;
109
+ }
110
+ }
111
+ }
112
+ // Если не нашли без Shift, ищем с Shift
113
+ for (const layoutName in this.layouts) {
114
+ const layout = this.layouts[layoutName];
115
+ for (const char in layout) {
116
+ if (layout[char].keyCode === keyCode && layout[char].shiftKey) {
117
+ return char;
118
+ }
119
+ }
120
+ }
121
+ return null;
122
+ }
123
+ }
124
+
125
+ // Layouts data - inserting main layouts
126
+ const en = ${JSON.stringify(require('./dist/layouts/en.js').en, null, 4)};
127
+
128
+ const ru = ${JSON.stringify(require('./dist/layouts/ru.js').ru, null, 4)};
129
+
130
+ // Export for browser
131
+ exports.KeymapInspector = KeymapInspector;
132
+ exports.en = en;
133
+ exports.ru = ru;
134
+
135
+ // Global access for script tag usage
136
+ if (typeof window !== 'undefined') {
137
+ window.KeymapInspector = KeymapInspector;
138
+ window.KeymapLayouts = { en, ru };
139
+ }
140
+
141
+ })));