keymap-inspector 0.1.1 → 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 +23 -0
- package/dist/browser.js +141 -0
- package/dist/keymap-inspector.browser.js +207 -0
- package/dist/keymap-inspector.esm.js +780 -0
- package/dist/keymap-inspector.esm.js.map +1 -0
- package/dist/keymap-inspector.umd.js +797 -0
- package/dist/keymap-inspector.umd.js.map +1 -0
- package/dist/types/KeymapInspector.d.ts +13 -0
- package/dist/types/cli/index.d.ts +2 -0
- package/dist/types/index.d.ts +10 -17
- package/dist/types/layouts/de.d.ts +2 -0
- package/dist/types/layouts/en.d.ts +2 -0
- package/dist/types/layouts/es.d.ts +2 -0
- package/dist/types/layouts/fr.d.ts +2 -0
- package/dist/types/layouts/he.d.ts +2 -0
- package/dist/types/layouts/index.d.ts +13 -0
- package/dist/types/layouts/ru.d.ts +2 -0
- package/dist/types/layouts/ua.d.ts +2 -0
- package/dist/types/types/index.d.ts +17 -0
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -55,6 +55,7 @@ keymap-inspector a
|
|
|
55
55
|
|
|
56
56
|
### 📚 Library Usage
|
|
57
57
|
|
|
58
|
+
**Node.js:**
|
|
58
59
|
```javascript
|
|
59
60
|
import { KeymapInspector, en, ru, de, fr, es, ua, he } from 'keymap-inspector';
|
|
60
61
|
|
|
@@ -63,6 +64,27 @@ const inspector = new KeymapInspector({ en, ru, de, fr, es, ua, he });
|
|
|
63
64
|
// Inspect a character
|
|
64
65
|
const result = inspector.inspect('a');
|
|
65
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
|
+
});
|
|
66
88
|
|
|
67
89
|
// Find by key code
|
|
68
90
|
const byCode = inspector.inspectByCode('KeyA');
|
|
@@ -71,6 +93,7 @@ console.log(byCode);
|
|
|
71
93
|
// Find by keyCode number
|
|
72
94
|
const byKeyCode = inspector.inspectByKeyCode(65);
|
|
73
95
|
console.log(byKeyCode);
|
|
96
|
+
</script>
|
|
74
97
|
```
|
|
75
98
|
|
|
76
99
|
---
|
package/dist/browser.js
ADDED
|
@@ -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
|
+
})));
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// Keymap Inspector - Browser Build v0.1.1
|
|
2
|
+
// Compatible with browsers, UMD format
|
|
3
|
+
(function(global, factory) {
|
|
4
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
5
|
+
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
6
|
+
(global = global || self, factory(global.KeymapInspector = {}));
|
|
7
|
+
}(this, (function(exports) {
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
// KeymapInspector class
|
|
11
|
+
class KeymapInspector {
|
|
12
|
+
constructor(layouts) {
|
|
13
|
+
this.layouts = layouts;
|
|
14
|
+
this.reversedLayouts = {};
|
|
15
|
+
|
|
16
|
+
for (const layoutName in layouts) {
|
|
17
|
+
this.reversedLayouts[layoutName] = {};
|
|
18
|
+
const layout = layouts[layoutName];
|
|
19
|
+
for (const char in layout) {
|
|
20
|
+
const keyDef = layout[char];
|
|
21
|
+
const currentCode = keyDef.code;
|
|
22
|
+
|
|
23
|
+
if (!keyDef.shiftKey) {
|
|
24
|
+
this.reversedLayouts[layoutName][currentCode] = char;
|
|
25
|
+
} else {
|
|
26
|
+
this.reversedLayouts[layoutName][currentCode + '_SHIFT'] = char;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
inspect(char) {
|
|
33
|
+
let baseLayoutName = null;
|
|
34
|
+
let keyDefinition = null;
|
|
35
|
+
|
|
36
|
+
for (const layoutName in this.layouts) {
|
|
37
|
+
if (this.layouts[layoutName][char]) {
|
|
38
|
+
baseLayoutName = layoutName;
|
|
39
|
+
keyDefinition = this.layouts[layoutName][char];
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (!keyDefinition || !baseLayoutName) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const layouts = {};
|
|
49
|
+
for (const layoutName in this.reversedLayouts) {
|
|
50
|
+
if (keyDefinition.shiftKey) {
|
|
51
|
+
layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code + '_SHIFT'] || null;
|
|
52
|
+
} else {
|
|
53
|
+
layouts[layoutName] = this.reversedLayouts[layoutName][keyDefinition.code] || null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
char,
|
|
59
|
+
keyDefinition,
|
|
60
|
+
layouts,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
inspectByCode(code) {
|
|
65
|
+
const char = this.findCharByCode(code);
|
|
66
|
+
return char ? this.inspect(char) : null;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
inspectByKeyCode(keyCode) {
|
|
70
|
+
const char = this.findCharByKeyCode(keyCode);
|
|
71
|
+
return char ? this.inspect(char) : null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
findCharByCode(code) {
|
|
75
|
+
for (const layoutName in this.layouts) {
|
|
76
|
+
const layout = this.layouts[layoutName];
|
|
77
|
+
for (const char in layout) {
|
|
78
|
+
if (layout[char].code === code && !layout[char].shiftKey) {
|
|
79
|
+
return char;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
for (const layoutName in this.layouts) {
|
|
84
|
+
const layout = this.layouts[layoutName];
|
|
85
|
+
for (const char in layout) {
|
|
86
|
+
if (layout[char].code === code && layout[char].shiftKey) {
|
|
87
|
+
return char;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
findCharByKeyCode(keyCode) {
|
|
95
|
+
for (const layoutName in this.layouts) {
|
|
96
|
+
const layout = this.layouts[layoutName];
|
|
97
|
+
for (const char in layout) {
|
|
98
|
+
if (layout[char].keyCode === keyCode && !layout[char].shiftKey) {
|
|
99
|
+
return char;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
for (const layoutName in this.layouts) {
|
|
104
|
+
const layout = this.layouts[layoutName];
|
|
105
|
+
for (const char in layout) {
|
|
106
|
+
if (layout[char].keyCode === keyCode && layout[char].shiftKey) {
|
|
107
|
+
return char;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Basic layouts (EN + RU for smaller file size)
|
|
116
|
+
const en = {
|
|
117
|
+
"1": { "key": "1", "code": "Digit1", "keyCode": 49 },
|
|
118
|
+
"2": { "key": "2", "code": "Digit2", "keyCode": 50 },
|
|
119
|
+
"3": { "key": "3", "code": "Digit3", "keyCode": 51 },
|
|
120
|
+
"4": { "key": "4", "code": "Digit4", "keyCode": 52 },
|
|
121
|
+
"5": { "key": "5", "code": "Digit5", "keyCode": 53 },
|
|
122
|
+
"6": { "key": "6", "code": "Digit6", "keyCode": 54 },
|
|
123
|
+
"7": { "key": "7", "code": "Digit7", "keyCode": 55 },
|
|
124
|
+
"8": { "key": "8", "code": "Digit8", "keyCode": 56 },
|
|
125
|
+
"9": { "key": "9", "code": "Digit9", "keyCode": 57 },
|
|
126
|
+
"0": { "key": "0", "code": "Digit0", "keyCode": 48 },
|
|
127
|
+
"q": { "key": "q", "code": "KeyQ", "keyCode": 81 },
|
|
128
|
+
"w": { "key": "w", "code": "KeyW", "keyCode": 87 },
|
|
129
|
+
"e": { "key": "e", "code": "KeyE", "keyCode": 69 },
|
|
130
|
+
"r": { "key": "r", "code": "KeyR", "keyCode": 82 },
|
|
131
|
+
"t": { "key": "t", "code": "KeyT", "keyCode": 84 },
|
|
132
|
+
"y": { "key": "y", "code": "KeyY", "keyCode": 89 },
|
|
133
|
+
"u": { "key": "u", "code": "KeyU", "keyCode": 85 },
|
|
134
|
+
"i": { "key": "i", "code": "KeyI", "keyCode": 73 },
|
|
135
|
+
"o": { "key": "o", "code": "KeyO", "keyCode": 79 },
|
|
136
|
+
"p": { "key": "p", "code": "KeyP", "keyCode": 80 },
|
|
137
|
+
"a": { "key": "a", "code": "KeyA", "keyCode": 65 },
|
|
138
|
+
"s": { "key": "s", "code": "KeyS", "keyCode": 83 },
|
|
139
|
+
"d": { "key": "d", "code": "KeyD", "keyCode": 68 },
|
|
140
|
+
"f": { "key": "f", "code": "KeyF", "keyCode": 70 },
|
|
141
|
+
"g": { "key": "g", "code": "KeyG", "keyCode": 71 },
|
|
142
|
+
"h": { "key": "h", "code": "KeyH", "keyCode": 72 },
|
|
143
|
+
"j": { "key": "j", "code": "KeyJ", "keyCode": 74 },
|
|
144
|
+
"k": { "key": "k", "code": "KeyK", "keyCode": 75 },
|
|
145
|
+
"l": { "key": "l", "code": "KeyL", "keyCode": 76 },
|
|
146
|
+
"z": { "key": "z", "code": "KeyZ", "keyCode": 90 },
|
|
147
|
+
"x": { "key": "x", "code": "KeyX", "keyCode": 88 },
|
|
148
|
+
"c": { "key": "c", "code": "KeyC", "keyCode": 67 },
|
|
149
|
+
"v": { "key": "v", "code": "KeyV", "keyCode": 86 },
|
|
150
|
+
"b": { "key": "b", "code": "KeyB", "keyCode": 66 },
|
|
151
|
+
"n": { "key": "n", "code": "KeyN", "keyCode": 78 },
|
|
152
|
+
"m": { "key": "m", "code": "KeyM", "keyCode": 77 },
|
|
153
|
+
" ": { "key": " ", "code": "Space", "keyCode": 32 }
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const ru = {
|
|
157
|
+
"1": { "key": "1", "code": "Digit1", "keyCode": 49 },
|
|
158
|
+
"2": { "key": "2", "code": "Digit2", "keyCode": 50 },
|
|
159
|
+
"3": { "key": "3", "code": "Digit3", "keyCode": 51 },
|
|
160
|
+
"4": { "key": "4", "code": "Digit4", "keyCode": 52 },
|
|
161
|
+
"5": { "key": "5", "code": "Digit5", "keyCode": 53 },
|
|
162
|
+
"6": { "key": "6", "code": "Digit6", "keyCode": 54 },
|
|
163
|
+
"7": { "key": "7", "code": "Digit7", "keyCode": 55 },
|
|
164
|
+
"8": { "key": "8", "code": "Digit8", "keyCode": 56 },
|
|
165
|
+
"9": { "key": "9", "code": "Digit9", "keyCode": 57 },
|
|
166
|
+
"0": { "key": "0", "code": "Digit0", "keyCode": 48 },
|
|
167
|
+
"й": { "key": "й", "code": "KeyQ", "keyCode": 81 },
|
|
168
|
+
"ц": { "key": "ц", "code": "KeyW", "keyCode": 87 },
|
|
169
|
+
"у": { "key": "у", "code": "KeyE", "keyCode": 69 },
|
|
170
|
+
"к": { "key": "к", "code": "KeyR", "keyCode": 82 },
|
|
171
|
+
"е": { "key": "е", "code": "KeyT", "keyCode": 84 },
|
|
172
|
+
"н": { "key": "н", "code": "KeyY", "keyCode": 89 },
|
|
173
|
+
"г": { "key": "г", "code": "KeyU", "keyCode": 85 },
|
|
174
|
+
"ш": { "key": "ш", "code": "KeyI", "keyCode": 73 },
|
|
175
|
+
"щ": { "key": "щ", "code": "KeyO", "keyCode": 79 },
|
|
176
|
+
"з": { "key": "з", "code": "KeyP", "keyCode": 80 },
|
|
177
|
+
"ф": { "key": "ф", "code": "KeyA", "keyCode": 65 },
|
|
178
|
+
"ы": { "key": "ы", "code": "KeyS", "keyCode": 83 },
|
|
179
|
+
"в": { "key": "в", "code": "KeyD", "keyCode": 68 },
|
|
180
|
+
"а": { "key": "а", "code": "KeyF", "keyCode": 70 },
|
|
181
|
+
"п": { "key": "п", "code": "KeyG", "keyCode": 71 },
|
|
182
|
+
"р": { "key": "р", "code": "KeyH", "keyCode": 72 },
|
|
183
|
+
"о": { "key": "о", "code": "KeyJ", "keyCode": 74 },
|
|
184
|
+
"л": { "key": "л", "code": "KeyK", "keyCode": 75 },
|
|
185
|
+
"д": { "key": "д", "code": "KeyL", "keyCode": 76 },
|
|
186
|
+
"я": { "key": "я", "code": "KeyZ", "keyCode": 90 },
|
|
187
|
+
"ч": { "key": "ч", "code": "KeyX", "keyCode": 88 },
|
|
188
|
+
"с": { "key": "с", "code": "KeyC", "keyCode": 67 },
|
|
189
|
+
"м": { "key": "м", "code": "KeyV", "keyCode": 86 },
|
|
190
|
+
"и": { "key": "и", "code": "KeyB", "keyCode": 66 },
|
|
191
|
+
"т": { "key": "т", "code": "KeyN", "keyCode": 78 },
|
|
192
|
+
"ь": { "key": "ь", "code": "KeyM", "keyCode": 77 },
|
|
193
|
+
" ": { "key": " ", "code": "Space", "keyCode": 32 }
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
// Export for different module systems
|
|
197
|
+
exports.KeymapInspector = KeymapInspector;
|
|
198
|
+
exports.en = en;
|
|
199
|
+
exports.ru = ru;
|
|
200
|
+
|
|
201
|
+
// Global access for script tag usage
|
|
202
|
+
if (typeof window !== 'undefined') {
|
|
203
|
+
window.KeymapInspector = KeymapInspector;
|
|
204
|
+
window.KeymapLayouts = { en, ru };
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
})));
|