keyroute 0.1.0

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,24 @@
1
+ # Keyroute
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project keyroute` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project keyroute`.
8
+ > Note: Don't forget to add `--project keyroute` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build keyroute` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build keyroute`, go to the dist folder `cd dist/keyroute` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test keyroute` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9rZXlyb3V0ZS9zcmMva2V5cm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,45 @@
1
+ function normalizeShortcut(input) {
2
+ const parts = input.toLowerCase().split('+');
3
+ return {
4
+ key: parts.find(p => !['ctrl', 'shift', 'alt', 'cmd', 'meta'].includes(p)) || '',
5
+ ctrl: parts.includes('ctrl'),
6
+ shift: parts.includes('shift'),
7
+ alt: parts.includes('alt'),
8
+ meta: parts.includes('cmd') || parts.includes('meta')
9
+ };
10
+ }
11
+ function isTypingInInput(target) {
12
+ if (!(target instanceof HTMLElement))
13
+ return false;
14
+ const tag = target.tagName.toLowerCase();
15
+ return tag === 'input' || tag === 'textarea' || target.isContentEditable;
16
+ }
17
+ export function createKeyroute(config) {
18
+ const routes = Object.entries(config).map(([shortcut, action]) => ({
19
+ shortcut: normalizeShortcut(shortcut),
20
+ action
21
+ }));
22
+ const handler = (event) => {
23
+ if (isTypingInInput(event.target))
24
+ return;
25
+ for (const route of routes) {
26
+ const match = route.shortcut.key === event.key.toLowerCase() &&
27
+ route.shortcut.ctrl === event.ctrlKey &&
28
+ route.shortcut.shift === event.shiftKey &&
29
+ route.shortcut.alt === event.altKey &&
30
+ route.shortcut.meta === event.metaKey;
31
+ if (match) {
32
+ event.preventDefault();
33
+ route.action();
34
+ break;
35
+ }
36
+ }
37
+ };
38
+ window.addEventListener('keydown', handler);
39
+ return {
40
+ destroy() {
41
+ window.removeEventListener('keydown', handler);
42
+ }
43
+ };
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXlyb3V0ZS9zcmMvbGliL2tleXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLFNBQVMsaUJBQWlCLENBQUMsS0FBYTtJQUN0QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdDLE9BQU87UUFDTCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtRQUNoRixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDNUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzlCLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztLQUN0RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE1BQTBCO0lBQ2pELElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxXQUFXLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLE9BQU8sR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFzQjtJQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFDckMsTUFBTTtLQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUosTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDdkMsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFFMUMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDMUIsTUFBTSxLQUFLLEdBQ1QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPO2dCQUNyQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsUUFBUTtnQkFDdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLE1BQU07Z0JBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFFeEMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2YsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTVDLE9BQU87UUFDTCxPQUFPO1lBQ0wsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBLZXlyb3V0ZUNvbmZpZyA9IHtcbiAgW3Nob3J0Y3V0OiBzdHJpbmddOiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBOb3JtYWxpemVkU2hvcnRjdXQgPSB7XG4gIGtleTogc3RyaW5nO1xuICBjdHJsOiBib29sZWFuO1xuICBzaGlmdDogYm9vbGVhbjtcbiAgYWx0OiBib29sZWFuO1xuICBtZXRhOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2hvcnRjdXQoaW5wdXQ6IHN0cmluZyk6IE5vcm1hbGl6ZWRTaG9ydGN1dCB7XG4gIGNvbnN0IHBhcnRzID0gaW5wdXQudG9Mb3dlckNhc2UoKS5zcGxpdCgnKycpO1xuXG4gIHJldHVybiB7XG4gICAga2V5OiBwYXJ0cy5maW5kKHAgPT4gIVsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnY21kJywgJ21ldGEnXS5pbmNsdWRlcyhwKSkgfHwgJycsXG4gICAgY3RybDogcGFydHMuaW5jbHVkZXMoJ2N0cmwnKSxcbiAgICBzaGlmdDogcGFydHMuaW5jbHVkZXMoJ3NoaWZ0JyksXG4gICAgYWx0OiBwYXJ0cy5pbmNsdWRlcygnYWx0JyksXG4gICAgbWV0YTogcGFydHMuaW5jbHVkZXMoJ2NtZCcpIHx8IHBhcnRzLmluY2x1ZGVzKCdtZXRhJylcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUeXBpbmdJbklucHV0KHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0YWcgPSB0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJyB8fCB0YXJnZXQuaXNDb250ZW50RWRpdGFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlyb3V0ZShjb25maWc6IEtleXJvdXRlQ29uZmlnKSB7XG4gIGNvbnN0IHJvdXRlcyA9IE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKChbc2hvcnRjdXQsIGFjdGlvbl0pID0+ICh7XG4gICAgc2hvcnRjdXQ6IG5vcm1hbGl6ZVNob3J0Y3V0KHNob3J0Y3V0KSxcbiAgICBhY3Rpb25cbiAgfSkpO1xuXG4gIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoaXNUeXBpbmdJbklucHV0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICBjb25zdCBtYXRjaCA9XG4gICAgICAgIHJvdXRlLnNob3J0Y3V0LmtleSA9PT0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgcm91dGUuc2hvcnRjdXQuY3RybCA9PT0gZXZlbnQuY3RybEtleSAmJlxuICAgICAgICByb3V0ZS5zaG9ydGN1dC5zaGlmdCA9PT0gZXZlbnQuc2hpZnRLZXkgJiZcbiAgICAgICAgcm91dGUuc2hvcnRjdXQuYWx0ID09PSBldmVudC5hbHRLZXkgJiZcbiAgICAgICAgcm91dGUuc2hvcnRjdXQubWV0YSA9PT0gZXZlbnQubWV0YUtleTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJvdXRlLmFjdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcblxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3koKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of keyroute
3
+ */
4
+ export * from './lib/keyroute';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2tleXJvdXRlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Yga2V5cm91dGVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9rZXlyb3V0ZSc7XG4iXX0=
@@ -0,0 +1,55 @@
1
+ function normalizeShortcut(input) {
2
+ const parts = input.toLowerCase().split('+');
3
+ return {
4
+ key: parts.find(p => !['ctrl', 'shift', 'alt', 'cmd', 'meta'].includes(p)) || '',
5
+ ctrl: parts.includes('ctrl'),
6
+ shift: parts.includes('shift'),
7
+ alt: parts.includes('alt'),
8
+ meta: parts.includes('cmd') || parts.includes('meta')
9
+ };
10
+ }
11
+ function isTypingInInput(target) {
12
+ if (!(target instanceof HTMLElement))
13
+ return false;
14
+ const tag = target.tagName.toLowerCase();
15
+ return tag === 'input' || tag === 'textarea' || target.isContentEditable;
16
+ }
17
+ function createKeyroute(config) {
18
+ const routes = Object.entries(config).map(([shortcut, action]) => ({
19
+ shortcut: normalizeShortcut(shortcut),
20
+ action
21
+ }));
22
+ const handler = (event) => {
23
+ if (isTypingInInput(event.target))
24
+ return;
25
+ for (const route of routes) {
26
+ const match = route.shortcut.key === event.key.toLowerCase() &&
27
+ route.shortcut.ctrl === event.ctrlKey &&
28
+ route.shortcut.shift === event.shiftKey &&
29
+ route.shortcut.alt === event.altKey &&
30
+ route.shortcut.meta === event.metaKey;
31
+ if (match) {
32
+ event.preventDefault();
33
+ route.action();
34
+ break;
35
+ }
36
+ }
37
+ };
38
+ window.addEventListener('keydown', handler);
39
+ return {
40
+ destroy() {
41
+ window.removeEventListener('keydown', handler);
42
+ }
43
+ };
44
+ }
45
+
46
+ /*
47
+ * Public API Surface of keyroute
48
+ */
49
+
50
+ /**
51
+ * Generated bundle index. Do not edit.
52
+ */
53
+
54
+ export { createKeyroute };
55
+ //# sourceMappingURL=keyroute.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyroute.mjs","sources":["../../../projects/keyroute/src/lib/keyroute.ts","../../../projects/keyroute/src/public-api.ts","../../../projects/keyroute/src/keyroute.ts"],"sourcesContent":["export type KeyrouteConfig = {\n [shortcut: string]: () => void;\n};\n\ntype NormalizedShortcut = {\n key: string;\n ctrl: boolean;\n shift: boolean;\n alt: boolean;\n meta: boolean;\n};\n\nfunction normalizeShortcut(input: string): NormalizedShortcut {\n const parts = input.toLowerCase().split('+');\n\n return {\n key: parts.find(p => !['ctrl', 'shift', 'alt', 'cmd', 'meta'].includes(p)) || '',\n ctrl: parts.includes('ctrl'),\n shift: parts.includes('shift'),\n alt: parts.includes('alt'),\n meta: parts.includes('cmd') || parts.includes('meta')\n };\n}\n\nfunction isTypingInInput(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n const tag = target.tagName.toLowerCase();\n return tag === 'input' || tag === 'textarea' || target.isContentEditable;\n}\n\nexport function createKeyroute(config: KeyrouteConfig) {\n const routes = Object.entries(config).map(([shortcut, action]) => ({\n shortcut: normalizeShortcut(shortcut),\n action\n }));\n\n const handler = (event: KeyboardEvent) => {\n if (isTypingInInput(event.target)) return;\n\n for (const route of routes) {\n const match =\n route.shortcut.key === event.key.toLowerCase() &&\n route.shortcut.ctrl === event.ctrlKey &&\n route.shortcut.shift === event.shiftKey &&\n route.shortcut.alt === event.altKey &&\n route.shortcut.meta === event.metaKey;\n\n if (match) {\n event.preventDefault();\n route.action();\n break;\n }\n }\n };\n\n window.addEventListener('keydown', handler);\n\n return {\n destroy() {\n window.removeEventListener('keydown', handler);\n }\n };\n}\n","/*\n * Public API Surface of keyroute\n */\n\nexport * from './lib/keyroute';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAYA,SAAS,iBAAiB,CAAC,KAAa,EAAA;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;IAE5C,OAAO;AACL,QAAA,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAChF,QAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,QAAA,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,QAAA,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM;KACrD;AACH;AAEA,SAAS,eAAe,CAAC,MAA0B,EAAA;AACjD,IAAA,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC;AAAE,QAAA,OAAO,KAAK;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;IACxC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,IAAI,MAAM,CAAC,iBAAiB;AAC1E;AAEM,SAAU,cAAc,CAAC,MAAsB,EAAA;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM;AACjE,QAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC;QACrC;AACD,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,OAAO,GAAG,CAAC,KAAoB,KAAI;AACvC,QAAA,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE;AAEnC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,KAAK,GACT,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;AAC9C,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO;AACrC,gBAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM;gBACnC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO;AAEvC,YAAA,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,MAAM,EAAE;gBACd;AACD,YAAA;AACF,QAAA;AACH,IAAA,CAAC;AAED,IAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;IAE3C,OAAO;QACL,OAAO,GAAA;AACL,YAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;QAChD;KACD;AACH;;AC9DA;;AAEG;;ACFH;;AAEG;;;;"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="keyroute" />
5
+ export * from './public-api';
Binary file
@@ -0,0 +1,6 @@
1
+ export type KeyrouteConfig = {
2
+ [shortcut: string]: () => void;
3
+ };
4
+ export declare function createKeyroute(config: KeyrouteConfig): {
5
+ destroy(): void;
6
+ };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "keyroute",
3
+ "version": "0.1.0",
4
+ "description": "Route keyboard shortcuts to application actions. Framework-agnostic keyboard shortcut routing for web applications",
5
+ "keywords": [
6
+ "keyboard",
7
+ "shortcuts",
8
+ "hotkeys",
9
+ "accessibility",
10
+ "keybindings",
11
+ "productivity",
12
+ "web",
13
+ "keyboard-events",
14
+ "keydown",
15
+ "keyup",
16
+ "hotkeys-js",
17
+ "keymaster",
18
+ "angular",
19
+ "react",
20
+ "vue",
21
+ "vite",
22
+ "vanilla-js"
23
+ ],
24
+ "dependencies": {
25
+ "tslib": "^2.3.0"
26
+ },
27
+ "sideEffects": false,
28
+ "module": "fesm2022/keyroute.mjs",
29
+ "typings": "index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "types": "./index.d.ts",
33
+ "esm2022": "./esm2022/keyroute.mjs",
34
+ "esm": "./esm2022/keyroute.mjs",
35
+ "default": "./fesm2022/keyroute.mjs"
36
+ },
37
+ "./package.json": {
38
+ "default": "./package.json"
39
+ }
40
+ }
41
+ }
@@ -0,0 +1 @@
1
+ export * from './lib/keyroute';