ng-keyboard-shortcuts
Version:
Dead Simple Keyboard Shortcuts Management for Angular 2+
132 lines • 11.4 kB
JavaScript
import { invert } from './utils';
const isMac = typeof navigator !== 'undefined' ? navigator.userAgent.includes('Mac OS') : false;
export const modifiers = {
shift: 'shiftKey',
ctrl: 'ctrlKey',
alt: 'altKey',
cmd: isMac ? 'metaKey' : 'ctrlKey',
command: isMac ? 'metaKey' : 'ctrlKey',
meta: isMac ? 'metaKey' : 'ctrlKey',
'left command': 'metaKey',
'right command': 'MetaRight',
'⌘': isMac ? 'metaKey' : 'ctrlKey',
option: 'altKey',
ctl: 'ctrlKey',
control: 'ctrlKey'
};
export const _SPECIAL_CASES = {
plus: '+'
};
export const symbols = {
cmd: isMac ? '⌘' : 'Ctrl',
command: isMac ? '⌘' : 'Ctrl',
'left command': isMac ? '⌘' : 'Ctrl',
'right command': isMac ? '⌘' : 'Ctrl',
option: isMac ? '⌥' : 'Alt',
plus: '+',
left: '←',
right: '→',
up: '↑',
down: '↓',
alt: isMac ? '⌥' : 'Alt',
ctrl: 'Ctrl',
control: 'Ctrl',
shift: '⇧'
};
export const _MAP = {
8: 'backspace',
9: 'tab',
13: 'enter',
16: 'shift',
17: ['ctrl', 'control'],
18: 'alt',
20: 'capslock',
27: ['esc', 'escape'],
32: ['space', 'spc'],
33: 'pageup',
34: 'pagedown',
35: 'end',
36: 'home',
37: 'left',
38: 'up',
39: 'right',
40: 'down',
45: 'ins',
46: 'del',
91: ['meta', 'cmd', 'command'],
93: ['meta', 'cmd', 'command'],
224: ['meta', 'cmd', 'command']
};
/*
* mapping for special characters so they can support
*
* this dictionary is only used incase you want to bind a
* keyup or keydown event to one of these keys
*
*/
export const _KEYCODE_MAP = {
106: '*',
107: '+',
109: '-',
110: '.',
111: '/',
186: ';',
187: '=',
188: ',',
189: '-',
190: '.',
191: '/',
192: '`',
219: '[',
220: '\\',
221: ']',
222: '\''
};
/**
* this is a mapping of keys that require shift on a US keypad
* back to the non shift equivelents
*
* this is so you can use keyup events with these keys
*
* note that this will only work reliably on US keyboards
*
*/
export const _SHIFT_MAP = {
'`': '~',
'1': '!',
'2': '@',
'3': '#',
'4': '$',
'5': '%',
'6': '^',
'7': '&',
'8': '*',
'9': '(',
'0': ')',
'-': '_',
'=': '+',
';': ':',
'\'': '"',
',': '<',
'.': '>',
'/': '?',
'\\': '|'
};
export const _INVERTED_SHIFT_MAP = invert(_SHIFT_MAP);
/**
* loop through the f keys, f1 to f19 and add them to the map
* programatically
*/
for (let i = 1; i < 20; ++i) {
_MAP[111 + i] = 'f' + i;
}
/**
* loop through to map numbers on the numeric keypad
*/
for (let i = 0; i <= 9; ++i) {
// This needs to use a string cause otherwise since 0 is falsey
// event will never fire for numpad 0 pressed as part of a keydown
// event.
_MAP[i + 96] = i.toString();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcta2V5Ym9hcmQtc2hvcnRjdXRzL3NyYy9saWIva2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRS9CLE1BQU0sS0FBSyxHQUFHLE9BQU8sU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDckIsS0FBSyxFQUFFLFVBQVU7SUFDakIsSUFBSSxFQUFFLFNBQVM7SUFDZixHQUFHLEVBQUUsUUFBUTtJQUNiLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztJQUNsQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7SUFDdEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO0lBQ25DLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztJQUNsQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsU0FBUztJQUNkLE9BQU8sRUFBRSxTQUFTO0NBQ3JCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDMUIsSUFBSSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtJQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07SUFDN0IsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0lBQ3BDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtJQUNyQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUs7SUFDM0IsSUFBSSxFQUFFLEdBQUc7SUFDVCxJQUFJLEVBQUUsR0FBRztJQUNULEtBQUssRUFBRSxHQUFHO0lBQ1YsRUFBRSxFQUFFLEdBQUc7SUFDUCxJQUFJLEVBQUUsR0FBRztJQUNULEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSztJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLE9BQU8sRUFBRSxNQUFNO0lBQ2YsS0FBSyxFQUFFLEdBQUc7Q0FDYixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHO0lBQ2hCLENBQUMsRUFBRSxXQUFXO0lBQ2QsQ0FBQyxFQUFFLEtBQUs7SUFDUixFQUFFLEVBQUUsT0FBTztJQUNYLEVBQUUsRUFBRSxPQUFPO0lBQ1gsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUN2QixFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxVQUFVO0lBQ2QsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztJQUNyQixFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLEVBQUUsRUFBRSxRQUFRO0lBQ1osRUFBRSxFQUFFLFVBQVU7SUFDZCxFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxNQUFNO0lBQ1YsRUFBRSxFQUFFLE1BQU07SUFDVixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxPQUFPO0lBQ1gsRUFBRSxFQUFFLE1BQU07SUFDVixFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7SUFDOUIsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7SUFDOUIsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7Q0FDbEMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUN4QixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBMkI7SUFDOUMsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXREOzs7R0FHRztBQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzNCO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLCtEQUErRDtJQUMvRCxrRUFBa0U7SUFDbEUsU0FBUztJQUNULElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbnZlcnR9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBpc01hYyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcygnTWFjIE9TJykgOiBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IG1vZGlmaWVycyA9IHtcbiAgICBzaGlmdDogJ3NoaWZ0S2V5JyxcbiAgICBjdHJsOiAnY3RybEtleScsXG4gICAgYWx0OiAnYWx0S2V5JyxcbiAgICBjbWQ6IGlzTWFjID8gJ21ldGFLZXknIDogJ2N0cmxLZXknLFxuICAgIGNvbW1hbmQ6IGlzTWFjID8gJ21ldGFLZXknIDogJ2N0cmxLZXknLFxuICAgIG1ldGE6IGlzTWFjID8gJ21ldGFLZXknIDogJ2N0cmxLZXknLFxuICAgICdsZWZ0IGNvbW1hbmQnOiAnbWV0YUtleScsXG4gICAgJ3JpZ2h0IGNvbW1hbmQnOiAnTWV0YVJpZ2h0JyxcbiAgICAn4oyYJzogaXNNYWMgPyAnbWV0YUtleScgOiAnY3RybEtleScsXG4gICAgb3B0aW9uOiAnYWx0S2V5JyxcbiAgICBjdGw6ICdjdHJsS2V5JyxcbiAgICBjb250cm9sOiAnY3RybEtleSdcbn07XG5leHBvcnQgY29uc3QgX1NQRUNJQUxfQ0FTRVMgPSB7XG4gICAgcGx1czogJysnXG59O1xuXG5leHBvcnQgY29uc3Qgc3ltYm9scyA9IHtcbiAgICBjbWQ6IGlzTWFjID8gJ+KMmCcgOiAnQ3RybCcsXG4gICAgY29tbWFuZDogaXNNYWMgPyAn4oyYJyA6ICdDdHJsJyxcbiAgICAnbGVmdCBjb21tYW5kJzogaXNNYWMgPyAn4oyYJyA6ICdDdHJsJyxcbiAgICAncmlnaHQgY29tbWFuZCc6IGlzTWFjID8gJ+KMmCcgOiAnQ3RybCcsXG4gICAgb3B0aW9uOiBpc01hYyA/ICfijKUnIDogJ0FsdCcsXG4gICAgcGx1czogJysnLFxuICAgIGxlZnQ6ICfihpAnLFxuICAgIHJpZ2h0OiAn4oaSJyxcbiAgICB1cDogJ+KGkScsXG4gICAgZG93bjogJ+KGkycsXG4gICAgYWx0OiBpc01hYyA/ICfijKUnIDogJ0FsdCcsXG4gICAgY3RybDogJ0N0cmwnLFxuICAgIGNvbnRyb2w6ICdDdHJsJyxcbiAgICBzaGlmdDogJ+KHpydcbn07XG5cbmV4cG9ydCBjb25zdCBfTUFQID0ge1xuICAgIDg6ICdiYWNrc3BhY2UnLFxuICAgIDk6ICd0YWInLFxuICAgIDEzOiAnZW50ZXInLFxuICAgIDE2OiAnc2hpZnQnLFxuICAgIDE3OiBbJ2N0cmwnLCAnY29udHJvbCddLFxuICAgIDE4OiAnYWx0JyxcbiAgICAyMDogJ2NhcHNsb2NrJyxcbiAgICAyNzogWydlc2MnLCAnZXNjYXBlJ10sXG4gICAgMzI6IFsnc3BhY2UnLCAnc3BjJ10sXG4gICAgMzM6ICdwYWdldXAnLFxuICAgIDM0OiAncGFnZWRvd24nLFxuICAgIDM1OiAnZW5kJyxcbiAgICAzNjogJ2hvbWUnLFxuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICA0NTogJ2lucycsXG4gICAgNDY6ICdkZWwnLFxuICAgIDkxOiBbJ21ldGEnLCAnY21kJywgJ2NvbW1hbmQnXSxcbiAgICA5MzogWydtZXRhJywgJ2NtZCcsICdjb21tYW5kJ10sXG4gICAgMjI0OiBbJ21ldGEnLCAnY21kJywgJ2NvbW1hbmQnXVxufTtcblxuLypcbiAqIG1hcHBpbmcgZm9yIHNwZWNpYWwgY2hhcmFjdGVycyBzbyB0aGV5IGNhbiBzdXBwb3J0XG4gKlxuICogdGhpcyBkaWN0aW9uYXJ5IGlzIG9ubHkgdXNlZCBpbmNhc2UgeW91IHdhbnQgdG8gYmluZCBhXG4gKiBrZXl1cCBvciBrZXlkb3duIGV2ZW50IHRvIG9uZSBvZiB0aGVzZSBrZXlzXG4gKlxuICovXG5leHBvcnQgY29uc3QgX0tFWUNPREVfTUFQID0ge1xuICAgIDEwNjogJyonLFxuICAgIDEwNzogJysnLFxuICAgIDEwOTogJy0nLFxuICAgIDExMDogJy4nLFxuICAgIDExMTogJy8nLFxuICAgIDE4NjogJzsnLFxuICAgIDE4NzogJz0nLFxuICAgIDE4ODogJywnLFxuICAgIDE4OTogJy0nLFxuICAgIDE5MDogJy4nLFxuICAgIDE5MTogJy8nLFxuICAgIDE5MjogJ2AnLFxuICAgIDIxOTogJ1snLFxuICAgIDIyMDogJ1xcXFwnLFxuICAgIDIyMTogJ10nLFxuICAgIDIyMjogJ1xcJydcbn07XG5cbi8qKlxuICogdGhpcyBpcyBhIG1hcHBpbmcgb2Yga2V5cyB0aGF0IHJlcXVpcmUgc2hpZnQgb24gYSBVUyBrZXlwYWRcbiAqIGJhY2sgdG8gdGhlIG5vbiBzaGlmdCBlcXVpdmVsZW50c1xuICpcbiAqIHRoaXMgaXMgc28geW91IGNhbiB1c2Uga2V5dXAgZXZlbnRzIHdpdGggdGhlc2Uga2V5c1xuICpcbiAqIG5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIHJlbGlhYmx5IG9uIFVTIGtleWJvYXJkc1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IF9TSElGVF9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ2AnOiAnficsXG4gICAgJzEnOiAnIScsXG4gICAgJzInOiAnQCcsXG4gICAgJzMnOiAnIycsXG4gICAgJzQnOiAnJCcsXG4gICAgJzUnOiAnJScsXG4gICAgJzYnOiAnXicsXG4gICAgJzcnOiAnJicsXG4gICAgJzgnOiAnKicsXG4gICAgJzknOiAnKCcsXG4gICAgJzAnOiAnKScsXG4gICAgJy0nOiAnXycsXG4gICAgJz0nOiAnKycsXG4gICAgJzsnOiAnOicsXG4gICAgJ1xcJyc6ICdcIicsXG4gICAgJywnOiAnPCcsXG4gICAgJy4nOiAnPicsXG4gICAgJy8nOiAnPycsXG4gICAgJ1xcXFwnOiAnfCdcbn07XG5leHBvcnQgY29uc3QgX0lOVkVSVEVEX1NISUZUX01BUCA9IGludmVydChfU0hJRlRfTUFQKTtcblxuLyoqXG4gKiBsb29wIHRocm91Z2ggdGhlIGYga2V5cywgZjEgdG8gZjE5IGFuZCBhZGQgdGhlbSB0byB0aGUgbWFwXG4gKiBwcm9ncmFtYXRpY2FsbHlcbiAqL1xuZm9yIChsZXQgaSA9IDE7IGkgPCAyMDsgKytpKSB7XG4gICAgX01BUFsxMTEgKyBpXSA9ICdmJyArIGk7XG59XG5cbi8qKlxuICogbG9vcCB0aHJvdWdoIHRvIG1hcCBudW1iZXJzIG9uIHRoZSBudW1lcmljIGtleXBhZFxuICovXG5mb3IgKGxldCBpID0gMDsgaSA8PSA5OyArK2kpIHtcbiAgICAvLyBUaGlzIG5lZWRzIHRvIHVzZSBhIHN0cmluZyBjYXVzZSBvdGhlcndpc2Ugc2luY2UgMCBpcyBmYWxzZXlcbiAgICAvLyBldmVudCB3aWxsIG5ldmVyIGZpcmUgZm9yIG51bXBhZCAwIHByZXNzZWQgYXMgcGFydCBvZiBhIGtleWRvd25cbiAgICAvLyBldmVudC5cbiAgICBfTUFQW2kgKyA5Nl0gPSBpLnRvU3RyaW5nKCk7XG59XG4iXX0=