umbr-key-master 1.0.4 → 1.0.6

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
@@ -1,120 +1,60 @@
1
1
  # KeyMaster
2
2
 
3
- `KeyMaster` is a TypeScript library for managing complex keyboard shortcuts and key combinations in the browser. It allows you to register callbacks for specific key sequences, supporting all W3C/DOM-standard key values.
4
-
5
- ---
6
-
7
- ## Features
8
-
9
- * **Multi-Key Support**: Listen to single keys or complex combinations (e.g., `Ctrl + Shift + S`).
10
- * **Standard Compliant**: Supports all standard key types defined by the W3C UI Events spec:
11
- * **Alphabet keys** (A-Z)
12
- * **Control keys** (Enter, Escape, Backspace)
13
- * **Modifier keys** (Shift, Ctrl, Alt, Meta)
14
- * **Navigation keys** (Arrow keys, Home, End)
15
- * **Function keys** (F1-F12)
16
- * **Multimedia & Device keys**
17
-
18
-
19
- * **Contextual Data**: Pass custom data or state to your callbacks automatically.
20
- * **Memory Safe**: Simple `dispose()` method to clean up event listeners and prevent memory leaks.
21
-
22
- ---
23
-
24
- ## Installation
3
+ A lightweight, type-safe TypeScript library for managing complex keyboard shortcuts and multi-key combinations in the browser.
25
4
 
26
5
  ```bash
27
- npm install umbr-key-master
28
-
6
+ npm i umbr-key-master
29
7
  ```
30
8
 
31
- ---
32
-
33
- ## Usage
34
-
35
- ```typescript
36
- import { KeyMaster, PressableKey } from "umbr-key-master";
9
+ # Example usage
10
+
11
+ ```html
12
+ <!doctype html>
13
+ <html lang="en">
14
+ <head>
15
+ <meta charset="UTF-8" />
16
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
17
+ <title>KeyMaster Popup Test</title>
18
+ </head>
19
+ <body>
20
+ <h1>KeyMaster Popup Test</h1>
21
+ <p>Press the keys below to see popups:</p>
22
+ <ul>
23
+ <li>Escape → Alert "Escape key pressed!"</li>
24
+ <li>Control + q → Alert "Control + q pressed!"</li>
25
+ </ul>
26
+
27
+ <script type="module">
28
+ import { KeyMaster } from "../dist/index.js";
29
+
30
+ const km = new KeyMaster();
31
+
32
+ // ---- Single key: Escape ----
33
+ km.add(["Escape"], () => {
34
+ alert("Escape key pressed!");
35
+ });
36
+
37
+ // ---- Multi-key: Control + S ----
38
+ km.add(["Control", "q"], () => {
39
+ alert("Control + q pressed!");
40
+ });
41
+ </script>
42
+ </body>
43
+ </html>
44
+ ```
37
45
 
38
- // 1. (Optional) Define a function to provide context/data to your callbacks
39
- const getContext = () => ({
40
- timestamp: Date.now(),
41
- activeEditor: "main-text-area"
42
- });
46
+ ```js
47
+ import { KeyMaster } from "umbr-key-master";
43
48
 
44
- // 2. Initialize KeyMaster
45
- const km = new KeyMaster(getContext);
49
+ const km = new KeyMaster();
46
50
 
47
- // 3. Register a key combination (e.g., Shift + A)
48
- // Note: Key strings match W3C "key" values
49
- km.add(["Shift", "a"], (data) => {
50
- console.log("Combination triggered!", data);
51
+ // ---- Single key: Escape ----
52
+ km.add(["Escape"], () => {
53
+ alert("Escape key pressed!");
51
54
  });
52
55
 
53
- // 4. Register a single key callback
54
- km.add(["Enter"], () => {
55
- console.log("Enter key was pressed");
56
+ // ---- Multi-key: Control + S ----
57
+ km.add(["Control", "q"], () => {
58
+ alert("Control + q pressed!");
56
59
  });
57
-
58
- // 5. Removing a callback
59
- const myCallback = () => console.log("Temporary shortcut");
60
- km.add(["Control", "s"], myCallback);
61
-
62
- // Later...
63
- km.remove(myCallback);
64
-
65
- // 6. Clean up when the component or page is destroyed
66
- km.dispose();
67
-
68
60
  ```
69
-
70
- ---
71
-
72
- ## API Reference
73
-
74
- ### `constructor(getDataFunc?: GetDataCallback)`
75
-
76
- Initializes the listener.
77
-
78
- * **`getDataFunc`**: (Optional) A sync or async function. The return value of this function is passed as the first argument to every triggered callback.
79
-
80
- ### `add(targetKeys: PressableKey[], callback: KeyCallback): void`
81
-
82
- Registers a callback to a specific combination.
83
-
84
- * **`targetKeys`**: An array of `PressableKey` strings. The order does not matter as the library sorts them internally.
85
- * **`callback`**: The function to run when all keys in the array (and *only* those keys) are held down.
86
-
87
- ### `remove(callback: KeyCallback): void`
88
-
89
- Unregisters a specific callback function from all key combinations it was assigned to.
90
-
91
- ### `dispose(): void`
92
-
93
- Removes the `keydown` and `keyup` listeners from the `document` and clears all internal maps. Use this during component unmounting or page transitions.
94
-
95
- ---
96
-
97
- ## Supported Key Categories
98
-
99
- The library utilizes the full W3C UI Events key set. Common categories include:
100
-
101
- | Category | Examples |
102
- | --- | --- |
103
- | **Modifiers** | `Shift`, `Control`, `Alt`, `Meta` |
104
- | **Navigation** | `ArrowUp`, `ArrowDown`, `Home`, `PageUp` |
105
- | **Editing** | `Backspace`, `Delete`, `Enter`, `Tab` |
106
- | **UI Control** | `Escape`, `ContextMenu`, `Pause` |
107
- | **Functions** | `F1` through `F20` |
108
-
109
- ---
110
-
111
- ## License
112
-
113
- MIT © Yousaf Wazir
114
-
115
-
116
- # Building
117
-
118
- - Change version up - push git change
119
- - Run `npm run build`
120
- - Run `npm run pubish`
package/dist/index.d.ts CHANGED
@@ -1,49 +1,36 @@
1
- import { DeviceKey, EditingKey, FunctionKey, GlyphModifierKey, ModifierKey, NavigationKey, SpecialKey, UIEventUnicodeKey, UIKey, UnicodeControlKey, WhitespaceKey } from "./w3ckeyAttributeValues";
2
- /**
3
- * Additional options for the KeyMaster instance.
4
- */
5
- export type KeyMasterOptions = {
6
- /**
7
- * If true, key comparisons will ignore casing (e.g., 'A' and 'a' are treated as the same key).
8
- * @default false
9
- */
10
- caseInsensitive?: boolean;
11
- };
12
- /**
13
- * A function used to retrieve custom data passed to callbacks when conditions are met.
14
- */
15
- export type GetDataCallback = (() => any | Promise<any>) | null;
16
- /**
17
- * Union type of valid key values mapped from the W3C UI Events / DOM specification.
18
- */
19
- export type PressableKey = UIEventUnicodeKey | UnicodeControlKey | GlyphModifierKey | SpecialKey | ModifierKey | WhitespaceKey | NavigationKey | EditingKey | UIKey | DeviceKey | FunctionKey;
20
- /**
21
- * A callback function executed when registered key combinations are triggered.
22
- */
23
- export type KeyCallback = (data: any) => any | Promise<any>;
1
+ import type types = require("./types");
24
2
  /**
25
3
  * Manages keyboard shortcuts and multi-key combinations.
26
- * Supports case-insensitive matching and contextual data injection.
27
4
  */
28
5
  export declare class KeyMaster {
29
- private _getData;
6
+ /** Holds list of keys pressed */
30
7
  private readonly _keys;
8
+ /** Holds a list of callbacks to run */
31
9
  private readonly _callbacks;
10
+ /** Options for `this` keymaster */
32
11
  private _options;
33
12
  /**
34
- * @param getDataFunc - Optional helper to provide data to callbacks.
35
13
  * @param options - Configuration options for key handling.
36
14
  */
37
- constructor(getDataFunc?: GetDataCallback, options?: KeyMasterOptions);
15
+ constructor(options?: types.KeyMasterOptions);
38
16
  /**
39
17
  * Normalizes an array of keys into a sorted string ID.
40
- * Handles case normalization if caseInsensitive is enabled.
41
18
  */
42
19
  private makeKey;
43
20
  private handleKeyDown;
44
21
  private handleKeyUp;
45
22
  /**
46
- * Executes a list of callbacks with injected data.
23
+ * Clears all pressed keys when window loses focus.
24
+ * This prevents keys from getting "stuck" when DevTools or other windows are opened.
25
+ */
26
+ private handleBlur;
27
+ /**
28
+ * Clears all pressed keys when document becomes hidden.
29
+ * This handles cases where the page loses visibility.
30
+ */
31
+ private handleVisibilityChange;
32
+ /**
33
+ * Executes a list of callbacks.
47
34
  */
48
35
  private run;
49
36
  /**
@@ -51,13 +38,14 @@ export declare class KeyMaster {
51
38
  * @param targetKeys - Array of keys (e.g., ["Control", "S"]).
52
39
  * @param callback - Function to trigger.
53
40
  */
54
- add(targetKeys: PressableKey[], callback: KeyCallback): void;
41
+ add(targetKeys: types.PressableKey[], callback: types.KeyCallback): void;
55
42
  /**
56
43
  * Removes a callback from all registered combinations.
57
44
  */
58
- remove(callback: KeyCallback): void;
45
+ remove(callback: types.KeyCallback): void;
59
46
  /**
60
47
  * Cleans up event listeners and internal state.
61
48
  */
62
49
  dispose(): void;
63
50
  }
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,KAAK,GAAG,QAAQ,SAAS,CAAC,CAAC;AAEvC;;GAEG;AACH,qBAAa,SAAS;IACpB,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+C;IAE1E,mCAAmC;IACnC,OAAO,CAAC,QAAQ,CAAyB;IAEzC;;OAEG;gBACS,OAAO,GAAE,KAAK,CAAC,gBAAqB;IAgBhD;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,aAAa,CAsBnB;IAEF,OAAO,CAAC,WAAW,CAMjB;IAEF;;;OAGG;IACH,OAAO,CAAC,UAAU,CAEhB;IAEF;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAI5B;IAEF;;OAEG;YACW,GAAG;IAMjB;;;;OAIG;IACH,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI;IAUxE;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI;IAYzC;;OAEG;IACH,OAAO,IAAI,IAAI;CAWhB"}
package/dist/index.js CHANGED
@@ -1,68 +1,84 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  /**
11
2
  * Manages keyboard shortcuts and multi-key combinations.
12
- * Supports case-insensitive matching and contextual data injection.
13
3
  */
14
4
  export class KeyMaster {
5
+ /** Holds list of keys pressed */
6
+ _keys = new Set();
7
+ /** Holds a list of callbacks to run */
8
+ _callbacks = new Map();
9
+ /** Options for `this` keymaster */
10
+ _options;
15
11
  /**
16
- * @param getDataFunc - Optional helper to provide data to callbacks.
17
12
  * @param options - Configuration options for key handling.
18
13
  */
19
- constructor(getDataFunc = null, options = {}) {
20
- this._getData = null;
21
- this._keys = new Set();
22
- this._callbacks = new Map();
23
- this.handleKeyDown = (event) => {
24
- const keyToStore = this._options.caseInsensitive
25
- ? event.key.toLowerCase()
26
- : event.key;
27
- this._keys.add(keyToStore);
28
- const pressed = Array.from(this._keys.values());
29
- const comboId = this.makeKey(pressed);
30
- const callbacks = this._callbacks.get(comboId);
31
- if (callbacks) {
32
- this.run(callbacks);
33
- }
34
- };
35
- this.handleKeyUp = (event) => {
36
- const keyToRemove = this._options.caseInsensitive
37
- ? event.key.toLowerCase()
38
- : event.key;
39
- this._keys.delete(keyToRemove);
14
+ constructor(options = {}) {
15
+ if (typeof options !== "object") {
16
+ throw new TypeError("options must be a valid object");
17
+ }
18
+ this._options = {
19
+ caseInsensitive: false,
20
+ ...options,
40
21
  };
41
- this._getData = getDataFunc;
42
- this._options = Object.assign({ caseInsensitive: false }, options);
43
22
  document.addEventListener("keydown", this.handleKeyDown);
44
23
  document.addEventListener("keyup", this.handleKeyUp);
24
+ window.addEventListener("blur", this.handleBlur);
25
+ document.addEventListener("visibilitychange", this.handleVisibilityChange);
45
26
  }
46
27
  /**
47
28
  * Normalizes an array of keys into a sorted string ID.
48
- * Handles case normalization if caseInsensitive is enabled.
49
29
  */
50
30
  makeKey(keys) {
51
- const normalizedKeys = this._options.caseInsensitive
52
- ? keys.map((k) => k.toLowerCase())
53
- : keys;
54
- return normalizedKeys.sort().join("_");
31
+ return keys.sort().join("_");
55
32
  }
33
+ handleKeyDown = (event) => {
34
+ const keyToStore = this._options.caseInsensitive
35
+ ? event.key.toLowerCase()
36
+ : event.key;
37
+ this._keys.add(keyToStore);
38
+ // Try single-key callback first, this is because when users register single keys, quick fires fail to run there logic.
39
+ const singleKeyCallbacks = this._callbacks.get(keyToStore);
40
+ if (singleKeyCallbacks) {
41
+ this.run(singleKeyCallbacks);
42
+ }
43
+ // Then multi-key combo
44
+ const pressed = Array.from(this._keys.values());
45
+ if (pressed.length > 1) {
46
+ const comboId = this.makeKey(pressed);
47
+ const comboCallbacks = this._callbacks.get(comboId);
48
+ if (comboCallbacks) {
49
+ this.run(comboCallbacks);
50
+ }
51
+ }
52
+ };
53
+ handleKeyUp = (event) => {
54
+ const keyToRemove = this._options.caseInsensitive
55
+ ? event.key.toLowerCase()
56
+ : event.key;
57
+ this._keys.delete(keyToRemove);
58
+ };
56
59
  /**
57
- * Executes a list of callbacks with injected data.
60
+ * Clears all pressed keys when window loses focus.
61
+ * This prevents keys from getting "stuck" when DevTools or other windows are opened.
58
62
  */
59
- run(callbacks) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- const data = this._getData ? yield this._getData() : null;
62
- for (const callback of callbacks) {
63
- yield callback(data);
64
- }
65
- });
63
+ handleBlur = () => {
64
+ this._keys.clear();
65
+ };
66
+ /**
67
+ * Clears all pressed keys when document becomes hidden.
68
+ * This handles cases where the page loses visibility.
69
+ */
70
+ handleVisibilityChange = () => {
71
+ if (document.hidden) {
72
+ this._keys.clear();
73
+ }
74
+ };
75
+ /**
76
+ * Executes a list of callbacks.
77
+ */
78
+ async run(callbacks) {
79
+ for (const callback of callbacks) {
80
+ await callback();
81
+ }
66
82
  }
67
83
  /**
68
84
  * Registers a callback for a specific combination of keys.
@@ -96,6 +112,8 @@ export class KeyMaster {
96
112
  dispose() {
97
113
  document.removeEventListener("keydown", this.handleKeyDown);
98
114
  document.removeEventListener("keyup", this.handleKeyUp);
115
+ window.removeEventListener("blur", this.handleBlur);
116
+ document.removeEventListener("visibilitychange", this.handleVisibilityChange);
99
117
  this._callbacks.clear();
100
118
  this._keys.clear();
101
119
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { DeviceKey, EditingKey, FunctionKey, GlyphModifierKey, ModifierKey, NavigationKey, SpecialKey, UIEventUnicodeKey, UIKey, UnicodeControlKey, WhitespaceKey } from "./w3ckeyAttributeValues";
2
+ /**
3
+ * Additional options for the KeyMaster instance.
4
+ */
5
+ export type KeyMasterOptions = {
6
+ /**
7
+ * If true, key comparisons will ignore casing (e.g., 'A' and 'a' are treated as the same key).
8
+ * @default false
9
+ */
10
+ caseInsensitive?: boolean;
11
+ };
12
+ /**
13
+ * A callback function executed when registered key combinations are triggered.
14
+ */
15
+ export type KeyCallback = () => any | Promise<any>;
16
+ /**
17
+ * Union type of valid key values mapped from the W3C UI Events / DOM specification.
18
+ */
19
+ export type PressableKey = UIEventUnicodeKey | UnicodeControlKey | GlyphModifierKey | SpecialKey | ModifierKey | WhitespaceKey | NavigationKey | EditingKey | UIKey | DeviceKey | FunctionKey;
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EACjB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,aAAa,GACb,aAAa,GACb,UAAU,GACV,KAAK,GACL,SAAS,GACT,WAAW,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -240,3 +240,4 @@ export type FunctionKey =
240
240
  /** * Implicitly defined Soft-keys (e.g., "Soft8").
241
241
  */
242
242
  | `Soft${number}`;
243
+ //# sourceMappingURL=w3ckeyAttributeValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"w3ckeyAttributeValues.d.ts","sourceRoot":"","sources":["../src/w3ckeyAttributeValues.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "umbr-key-master",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "A lightweight, type-safe TypeScript library for managing complex keyboard shortcuts and multi-key combinations in the browser.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",