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 +24 -0
- package/esm2022/keyroute.mjs +5 -0
- package/esm2022/lib/keyroute.mjs +45 -0
- package/esm2022/public-api.mjs +5 -0
- package/fesm2022/keyroute.mjs +55 -0
- package/fesm2022/keyroute.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/keyroute-0.1.0.tgz +0 -0
- package/lib/keyroute.d.ts +6 -0
- package/package.json +41 -0
- package/public-api.d.ts +1 -0
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
|
Binary file
|
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
|
+
}
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib/keyroute';
|