UNPKG

ng-keyboard-shortcuts

Version:

Dead Simple Keyboard Shortcuts Management for Angular 2+

132 lines 11.4 kB
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=