ng-hotkeys
Version:
ng-hotkeys for Angular 14+
132 lines • 11.7 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWhvdGtleXMvc3JjL2xpYi9rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFakMsTUFBTSxLQUFLLEdBQUcsT0FBTyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBRWhHLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUNyQixLQUFLLEVBQUUsVUFBVTtJQUNqQixJQUFJLEVBQUUsU0FBUztJQUNmLEdBQUcsRUFBRSxRQUFRO0lBQ2IsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO0lBQ2xDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztJQUN0QyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7SUFDbkMsY0FBYyxFQUFFLFNBQVM7SUFDekIsZUFBZSxFQUFFLFdBQVc7SUFDNUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO0lBQ2xDLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxTQUFTO0lBQ2QsT0FBTyxFQUFFLFNBQVM7Q0FDckIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQixJQUFJLEVBQUUsR0FBRztDQUNaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUc7SUFDbkIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0lBQ3pCLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtJQUM3QixjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07SUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0lBQ3JDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSztJQUMzQixJQUFJLEVBQUUsR0FBRztJQUNULElBQUksRUFBRSxHQUFHO0lBQ1QsS0FBSyxFQUFFLEdBQUc7SUFDVixFQUFFLEVBQUUsR0FBRztJQUNQLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLO0lBQ3hCLElBQUksRUFBRSxNQUFNO0lBQ1osT0FBTyxFQUFFLE1BQU07SUFDZixLQUFLLEVBQUUsR0FBRztDQUNiLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUc7SUFDaEIsQ0FBQyxFQUFFLFdBQVc7SUFDZCxDQUFDLEVBQUUsS0FBSztJQUNSLEVBQUUsRUFBRSxPQUFPO0lBQ1gsRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0lBQ3ZCLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLFVBQVU7SUFDZCxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO0lBQ3JCLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7SUFDcEIsRUFBRSxFQUFFLFFBQVE7SUFDWixFQUFFLEVBQUUsVUFBVTtJQUNkLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLE1BQU07SUFDVixFQUFFLEVBQUUsTUFBTTtJQUNWLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsTUFBTTtJQUNWLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLEtBQUs7SUFDVCxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztJQUM5QixFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztJQUM5QixHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztDQUNsQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQ3hCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0NBQ1gsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV0RDs7O0dBR0c7QUFDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUMzQjtBQUVEOztHQUVHO0FBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUN6QiwrREFBK0Q7SUFDL0Qsa0VBQWtFO0lBQ2xFLFNBQVM7SUFDVCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludmVydCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBpc01hYyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgPyBuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwiTWFjIE9TXCIpIDogZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBtb2RpZmllcnMgPSB7XG4gICAgc2hpZnQ6IFwic2hpZnRLZXlcIixcbiAgICBjdHJsOiBcImN0cmxLZXlcIixcbiAgICBhbHQ6IFwiYWx0S2V5XCIsXG4gICAgY21kOiBpc01hYyA/IFwibWV0YUtleVwiIDogXCJjdHJsS2V5XCIsXG4gICAgY29tbWFuZDogaXNNYWMgPyBcIm1ldGFLZXlcIiA6IFwiY3RybEtleVwiLFxuICAgIG1ldGE6IGlzTWFjID8gXCJtZXRhS2V5XCIgOiBcImN0cmxLZXlcIixcbiAgICBcImxlZnQgY29tbWFuZFwiOiBcIm1ldGFLZXlcIixcbiAgICBcInJpZ2h0IGNvbW1hbmRcIjogXCJNZXRhUmlnaHRcIixcbiAgICBcIuKMmFwiOiBpc01hYyA/IFwibWV0YUtleVwiIDogXCJjdHJsS2V5XCIsXG4gICAgb3B0aW9uOiBcImFsdEtleVwiLFxuICAgIGN0bDogXCJjdHJsS2V5XCIsXG4gICAgY29udHJvbDogXCJjdHJsS2V5XCJcbn07XG5leHBvcnQgY29uc3QgX1NQRUNJQUxfQ0FTRVMgPSB7XG4gICAgcGx1czogXCIrXCJcbn07XG5cbmV4cG9ydCBjb25zdCBzeW1ib2xzID0ge1xuICAgIGNtZDogaXNNYWMgPyBcIuKMmFwiIDogXCJDdHJsXCIsXG4gICAgY29tbWFuZDogaXNNYWMgPyBcIuKMmFwiIDogXCJDdHJsXCIsXG4gICAgXCJsZWZ0IGNvbW1hbmRcIjogaXNNYWMgPyBcIuKMmFwiIDogXCJDdHJsXCIsXG4gICAgXCJyaWdodCBjb21tYW5kXCI6IGlzTWFjID8gXCLijJhcIiA6IFwiQ3RybFwiLFxuICAgIG9wdGlvbjogaXNNYWMgPyBcIuKMpVwiIDogXCJBbHRcIixcbiAgICBwbHVzOiBcIitcIixcbiAgICBsZWZ0OiBcIuKGkFwiLFxuICAgIHJpZ2h0OiBcIuKGklwiLFxuICAgIHVwOiBcIuKGkVwiLFxuICAgIGRvd246IFwi4oaTXCIsXG4gICAgYWx0OiBpc01hYyA/IFwi4oylXCIgOiBcIkFsdFwiLFxuICAgIGN0cmw6IFwiQ3RybFwiLFxuICAgIGNvbnRyb2w6IFwiQ3RybFwiLFxuICAgIHNoaWZ0OiBcIuKHp1wiXG59O1xuXG5leHBvcnQgY29uc3QgX01BUCA9IHtcbiAgICA4OiBcImJhY2tzcGFjZVwiLFxuICAgIDk6IFwidGFiXCIsXG4gICAgMTM6IFwiZW50ZXJcIixcbiAgICAxNjogXCJzaGlmdFwiLFxuICAgIDE3OiBbXCJjdHJsXCIsIFwiY29udHJvbFwiXSxcbiAgICAxODogXCJhbHRcIixcbiAgICAyMDogXCJjYXBzbG9ja1wiLFxuICAgIDI3OiBbXCJlc2NcIiwgXCJlc2NhcGVcIl0sXG4gICAgMzI6IFtcInNwYWNlXCIsIFwic3BjXCJdLFxuICAgIDMzOiBcInBhZ2V1cFwiLFxuICAgIDM0OiBcInBhZ2Vkb3duXCIsXG4gICAgMzU6IFwiZW5kXCIsXG4gICAgMzY6IFwiaG9tZVwiLFxuICAgIDM3OiBcImxlZnRcIixcbiAgICAzODogXCJ1cFwiLFxuICAgIDM5OiBcInJpZ2h0XCIsXG4gICAgNDA6IFwiZG93blwiLFxuICAgIDQ1OiBcImluc1wiLFxuICAgIDQ2OiBcImRlbFwiLFxuICAgIDkxOiBbXCJtZXRhXCIsIFwiY21kXCIsIFwiY29tbWFuZFwiXSxcbiAgICA5MzogW1wibWV0YVwiLCBcImNtZFwiLCBcImNvbW1hbmRcIl0sXG4gICAgMjI0OiBbXCJtZXRhXCIsIFwiY21kXCIsIFwiY29tbWFuZFwiXVxufTtcblxuLypcbiAqIG1hcHBpbmcgZm9yIHNwZWNpYWwgY2hhcmFjdGVycyBzbyB0aGV5IGNhbiBzdXBwb3J0XG4gKlxuICogdGhpcyBkaWN0aW9uYXJ5IGlzIG9ubHkgdXNlZCBpbmNhc2UgeW91IHdhbnQgdG8gYmluZCBhXG4gKiBrZXl1cCBvciBrZXlkb3duIGV2ZW50IHRvIG9uZSBvZiB0aGVzZSBrZXlzXG4gKlxuICovXG5leHBvcnQgY29uc3QgX0tFWUNPREVfTUFQID0ge1xuICAgIDEwNjogXCIqXCIsXG4gICAgMTA3OiBcIitcIixcbiAgICAxMDk6IFwiLVwiLFxuICAgIDExMDogXCIuXCIsXG4gICAgMTExOiBcIi9cIixcbiAgICAxODY6IFwiO1wiLFxuICAgIDE4NzogXCI9XCIsXG4gICAgMTg4OiBcIixcIixcbiAgICAxODk6IFwiLVwiLFxuICAgIDE5MDogXCIuXCIsXG4gICAgMTkxOiBcIi9cIixcbiAgICAxOTI6IFwiYFwiLFxuICAgIDIxOTogXCJbXCIsXG4gICAgMjIwOiBcIlxcXFxcIixcbiAgICAyMjE6IFwiXVwiLFxuICAgIDIyMjogXCInXCJcbn07XG5cbi8qKlxuICogdGhpcyBpcyBhIG1hcHBpbmcgb2Yga2V5cyB0aGF0IHJlcXVpcmUgc2hpZnQgb24gYSBVUyBrZXlwYWRcbiAqIGJhY2sgdG8gdGhlIG5vbiBzaGlmdCBlcXVpdmVsZW50c1xuICpcbiAqIHRoaXMgaXMgc28geW91IGNhbiB1c2Uga2V5dXAgZXZlbnRzIHdpdGggdGhlc2Uga2V5c1xuICpcbiAqIG5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIHJlbGlhYmx5IG9uIFVTIGtleWJvYXJkc1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IF9TSElGVF9NQVAgPSB7XG4gICAgXCJgXCI6IFwiflwiLFxuICAgIFwiMVwiOiBcIiFcIixcbiAgICBcIjJcIjogXCJAXCIsXG4gICAgXCIzXCI6IFwiI1wiLFxuICAgIFwiNFwiOiBcIiRcIixcbiAgICBcIjVcIjogXCIlXCIsXG4gICAgXCI2XCI6IFwiXlwiLFxuICAgIFwiN1wiOiBcIiZcIixcbiAgICBcIjhcIjogXCIqXCIsXG4gICAgXCI5XCI6IFwiKFwiLFxuICAgIFwiMFwiOiBcIilcIixcbiAgICBcIi1cIjogXCJfXCIsXG4gICAgXCI9XCI6IFwiK1wiLFxuICAgIFwiO1wiOiBcIjpcIixcbiAgICBcIidcIjogJ1wiJyxcbiAgICBcIixcIjogXCI8XCIsXG4gICAgXCIuXCI6IFwiPlwiLFxuICAgIFwiL1wiOiBcIj9cIixcbiAgICBcIlxcXFxcIjogXCJ8XCJcbn07XG5leHBvcnQgY29uc3QgX0lOVkVSVEVEX1NISUZUX01BUCA9IGludmVydChfU0hJRlRfTUFQKTtcblxuLyoqXG4gKiBsb29wIHRocm91Z2ggdGhlIGYga2V5cywgZjEgdG8gZjE5IGFuZCBhZGQgdGhlbSB0byB0aGUgbWFwXG4gKiBwcm9ncmFtYXRpY2FsbHlcbiAqL1xuZm9yIChsZXQgaSA9IDE7IGkgPCAyMDsgKytpKSB7XG4gICAgX01BUFsxMTEgKyBpXSA9IFwiZlwiICsgaTtcbn1cblxuLyoqXG4gKiBsb29wIHRocm91Z2ggdG8gbWFwIG51bWJlcnMgb24gdGhlIG51bWVyaWMga2V5cGFkXG4gKi9cbmZvciAobGV0IGkgPSAwOyBpIDw9IDk7ICsraSkge1xuICAgIC8vIFRoaXMgbmVlZHMgdG8gdXNlIGEgc3RyaW5nIGNhdXNlIG90aGVyd2lzZSBzaW5jZSAwIGlzIGZhbHNleVxuICAgIC8vIGV2ZW50IHdpbGwgbmV2ZXIgZmlyZSBmb3IgbnVtcGFkIDAgcHJlc3NlZCBhcyBwYXJ0IG9mIGEga2V5ZG93blxuICAgIC8vIGV2ZW50LlxuICAgIF9NQVBbaSArIDk2XSA9IGkudG9TdHJpbmcoKTtcbn1cbiJdfQ==