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 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
  ---
@@ -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
+ })));