| /** |
| * @license |
| * Copyright 2017 Google Inc. |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @internal |
| */ |
| export interface KeyDefinition { |
| keyCode?: number; |
| shiftKeyCode?: number; |
| key?: string; |
| shiftKey?: string; |
| code?: string; |
| text?: string; |
| shiftText?: string; |
| location?: number; |
| } |
| |
| /** |
| * All the valid keys that can be passed to functions that take user input, such |
| * as {@link Keyboard.press | keyboard.press } |
| * |
| * @public |
| */ |
| export type KeyInput = |
| | '0' |
| | '1' |
| | '2' |
| | '3' |
| | '4' |
| | '5' |
| | '6' |
| | '7' |
| | '8' |
| | '9' |
| | 'Power' |
| | 'Eject' |
| | 'Abort' |
| | 'Help' |
| | 'Backspace' |
| | 'Tab' |
| | 'Numpad5' |
| | 'NumpadEnter' |
| | 'Enter' |
| | '\r' |
| | '\n' |
| | 'ShiftLeft' |
| | 'ShiftRight' |
| | 'ControlLeft' |
| | 'ControlRight' |
| | 'AltLeft' |
| | 'AltRight' |
| | 'Pause' |
| | 'CapsLock' |
| | 'Escape' |
| | 'Convert' |
| | 'NonConvert' |
| | 'Space' |
| | 'Numpad9' |
| | 'PageUp' |
| | 'Numpad3' |
| | 'PageDown' |
| | 'End' |
| | 'Numpad1' |
| | 'Home' |
| | 'Numpad7' |
| | 'ArrowLeft' |
| | 'Numpad4' |
| | 'Numpad8' |
| | 'ArrowUp' |
| | 'ArrowRight' |
| | 'Numpad6' |
| | 'Numpad2' |
| | 'ArrowDown' |
| | 'Select' |
| | 'Open' |
| | 'PrintScreen' |
| | 'Insert' |
| | 'Numpad0' |
| | 'Delete' |
| | 'NumpadDecimal' |
| | 'Digit0' |
| | 'Digit1' |
| | 'Digit2' |
| | 'Digit3' |
| | 'Digit4' |
| | 'Digit5' |
| | 'Digit6' |
| | 'Digit7' |
| | 'Digit8' |
| | 'Digit9' |
| | 'KeyA' |
| | 'KeyB' |
| | 'KeyC' |
| | 'KeyD' |
| | 'KeyE' |
| | 'KeyF' |
| | 'KeyG' |
| | 'KeyH' |
| | 'KeyI' |
| | 'KeyJ' |
| | 'KeyK' |
| | 'KeyL' |
| | 'KeyM' |
| | 'KeyN' |
| | 'KeyO' |
| | 'KeyP' |
| | 'KeyQ' |
| | 'KeyR' |
| | 'KeyS' |
| | 'KeyT' |
| | 'KeyU' |
| | 'KeyV' |
| | 'KeyW' |
| | 'KeyX' |
| | 'KeyY' |
| | 'KeyZ' |
| | 'MetaLeft' |
| | 'MetaRight' |
| | 'ContextMenu' |
| | 'NumpadMultiply' |
| | 'NumpadAdd' |
| | 'NumpadSubtract' |
| | 'NumpadDivide' |
| | 'F1' |
| | 'F2' |
| | 'F3' |
| | 'F4' |
| | 'F5' |
| | 'F6' |
| | 'F7' |
| | 'F8' |
| | 'F9' |
| | 'F10' |
| | 'F11' |
| | 'F12' |
| | 'F13' |
| | 'F14' |
| | 'F15' |
| | 'F16' |
| | 'F17' |
| | 'F18' |
| | 'F19' |
| | 'F20' |
| | 'F21' |
| | 'F22' |
| | 'F23' |
| | 'F24' |
| | 'NumLock' |
| | 'ScrollLock' |
| | 'AudioVolumeMute' |
| | 'AudioVolumeDown' |
| | 'AudioVolumeUp' |
| | 'MediaTrackNext' |
| | 'MediaTrackPrevious' |
| | 'MediaStop' |
| | 'MediaPlayPause' |
| | 'Semicolon' |
| | 'Equal' |
| | 'NumpadEqual' |
| | 'Comma' |
| | 'Minus' |
| | 'Period' |
| | 'Slash' |
| | 'Backquote' |
| | 'BracketLeft' |
| | 'Backslash' |
| | 'BracketRight' |
| | 'Quote' |
| | 'AltGraph' |
| | 'Props' |
| | 'Cancel' |
| | 'Clear' |
| | 'Shift' |
| | 'Control' |
| | 'Alt' |
| | 'Accept' |
| | 'ModeChange' |
| | ' ' |
| | 'Print' |
| | 'Execute' |
| | '\u0000' |
| | 'a' |
| | 'b' |
| | 'c' |
| | 'd' |
| | 'e' |
| | 'f' |
| | 'g' |
| | 'h' |
| | 'i' |
| | 'j' |
| | 'k' |
| | 'l' |
| | 'm' |
| | 'n' |
| | 'o' |
| | 'p' |
| | 'q' |
| | 'r' |
| | 's' |
| | 't' |
| | 'u' |
| | 'v' |
| | 'w' |
| | 'x' |
| | 'y' |
| | 'z' |
| | 'Meta' |
| | '*' |
| | '+' |
| | '-' |
| | '/' |
| | ';' |
| | '=' |
| | ',' |
| | '.' |
| | '`' |
| | '[' |
| | '\\' |
| | ']' |
| | "'" |
| | 'Attn' |
| | 'CrSel' |
| | 'ExSel' |
| | 'EraseEof' |
| | 'Play' |
| | 'ZoomOut' |
| | ')' |
| | '!' |
| | '@' |
| | '#' |
| | '$' |
| | '%' |
| | '^' |
| | '&' |
| | '(' |
| | 'A' |
| | 'B' |
| | 'C' |
| | 'D' |
| | 'E' |
| | 'F' |
| | 'G' |
| | 'H' |
| | 'I' |
| | 'J' |
| | 'K' |
| | 'L' |
| | 'M' |
| | 'N' |
| | 'O' |
| | 'P' |
| | 'Q' |
| | 'R' |
| | 'S' |
| | 'T' |
| | 'U' |
| | 'V' |
| | 'W' |
| | 'X' |
| | 'Y' |
| | 'Z' |
| | ':' |
| | '<' |
| | '_' |
| | '>' |
| | '?' |
| | '~' |
| | '{' |
| | '|' |
| | '}' |
| | '"' |
| | 'SoftLeft' |
| | 'SoftRight' |
| | 'Camera' |
| | 'Call' |
| | 'EndCall' |
| | 'VolumeDown' |
| | 'VolumeUp'; |
| |
| /** |
| * @internal |
| */ |
| export const _keyDefinitions: Readonly<Record<KeyInput, KeyDefinition>> = { |
| '0': {keyCode: 48, key: '0', code: 'Digit0'}, |
| '1': {keyCode: 49, key: '1', code: 'Digit1'}, |
| '2': {keyCode: 50, key: '2', code: 'Digit2'}, |
| '3': {keyCode: 51, key: '3', code: 'Digit3'}, |
| '4': {keyCode: 52, key: '4', code: 'Digit4'}, |
| '5': {keyCode: 53, key: '5', code: 'Digit5'}, |
| '6': {keyCode: 54, key: '6', code: 'Digit6'}, |
| '7': {keyCode: 55, key: '7', code: 'Digit7'}, |
| '8': {keyCode: 56, key: '8', code: 'Digit8'}, |
| '9': {keyCode: 57, key: '9', code: 'Digit9'}, |
| Power: {key: 'Power', code: 'Power'}, |
| Eject: {key: 'Eject', code: 'Eject'}, |
| Abort: {keyCode: 3, code: 'Abort', key: 'Cancel'}, |
| Help: {keyCode: 6, code: 'Help', key: 'Help'}, |
| Backspace: {keyCode: 8, code: 'Backspace', key: 'Backspace'}, |
| Tab: {keyCode: 9, code: 'Tab', key: 'Tab'}, |
| Numpad5: { |
| keyCode: 12, |
| shiftKeyCode: 101, |
| key: 'Clear', |
| code: 'Numpad5', |
| shiftKey: '5', |
| location: 3, |
| }, |
| NumpadEnter: { |
| keyCode: 13, |
| code: 'NumpadEnter', |
| key: 'Enter', |
| text: '\r', |
| location: 3, |
| }, |
| Enter: {keyCode: 13, code: 'Enter', key: 'Enter', text: '\r'}, |
| '\r': {keyCode: 13, code: 'Enter', key: 'Enter', text: '\r'}, |
| '\n': {keyCode: 13, code: 'Enter', key: 'Enter', text: '\r'}, |
| ShiftLeft: {keyCode: 16, code: 'ShiftLeft', key: 'Shift', location: 1}, |
| ShiftRight: {keyCode: 16, code: 'ShiftRight', key: 'Shift', location: 2}, |
| ControlLeft: { |
| keyCode: 17, |
| code: 'ControlLeft', |
| key: 'Control', |
| location: 1, |
| }, |
| ControlRight: { |
| keyCode: 17, |
| code: 'ControlRight', |
| key: 'Control', |
| location: 2, |
| }, |
| AltLeft: {keyCode: 18, code: 'AltLeft', key: 'Alt', location: 1}, |
| AltRight: {keyCode: 18, code: 'AltRight', key: 'Alt', location: 2}, |
| Pause: {keyCode: 19, code: 'Pause', key: 'Pause'}, |
| CapsLock: {keyCode: 20, code: 'CapsLock', key: 'CapsLock'}, |
| Escape: {keyCode: 27, code: 'Escape', key: 'Escape'}, |
| Convert: {keyCode: 28, code: 'Convert', key: 'Convert'}, |
| NonConvert: {keyCode: 29, code: 'NonConvert', key: 'NonConvert'}, |
| Space: {keyCode: 32, code: 'Space', key: ' '}, |
| Numpad9: { |
| keyCode: 33, |
| shiftKeyCode: 105, |
| key: 'PageUp', |
| code: 'Numpad9', |
| shiftKey: '9', |
| location: 3, |
| }, |
| PageUp: {keyCode: 33, code: 'PageUp', key: 'PageUp'}, |
| Numpad3: { |
| keyCode: 34, |
| shiftKeyCode: 99, |
| key: 'PageDown', |
| code: 'Numpad3', |
| shiftKey: '3', |
| location: 3, |
| }, |
| PageDown: {keyCode: 34, code: 'PageDown', key: 'PageDown'}, |
| End: {keyCode: 35, code: 'End', key: 'End'}, |
| Numpad1: { |
| keyCode: 35, |
| shiftKeyCode: 97, |
| key: 'End', |
| code: 'Numpad1', |
| shiftKey: '1', |
| location: 3, |
| }, |
| Home: {keyCode: 36, code: 'Home', key: 'Home'}, |
| Numpad7: { |
| keyCode: 36, |
| shiftKeyCode: 103, |
| key: 'Home', |
| code: 'Numpad7', |
| shiftKey: '7', |
| location: 3, |
| }, |
| ArrowLeft: {keyCode: 37, code: 'ArrowLeft', key: 'ArrowLeft'}, |
| Numpad4: { |
| keyCode: 37, |
| shiftKeyCode: 100, |
| key: 'ArrowLeft', |
| code: 'Numpad4', |
| shiftKey: '4', |
| location: 3, |
| }, |
| Numpad8: { |
| keyCode: 38, |
| shiftKeyCode: 104, |
| key: 'ArrowUp', |
| code: 'Numpad8', |
| shiftKey: '8', |
| location: 3, |
| }, |
| ArrowUp: {keyCode: 38, code: 'ArrowUp', key: 'ArrowUp'}, |
| ArrowRight: {keyCode: 39, code: 'ArrowRight', key: 'ArrowRight'}, |
| Numpad6: { |
| keyCode: 39, |
| shiftKeyCode: 102, |
| key: 'ArrowRight', |
| code: 'Numpad6', |
| shiftKey: '6', |
| location: 3, |
| }, |
| Numpad2: { |
| keyCode: 40, |
| shiftKeyCode: 98, |
| key: 'ArrowDown', |
| code: 'Numpad2', |
| shiftKey: '2', |
| location: 3, |
| }, |
| ArrowDown: {keyCode: 40, code: 'ArrowDown', key: 'ArrowDown'}, |
| Select: {keyCode: 41, code: 'Select', key: 'Select'}, |
| Open: {keyCode: 43, code: 'Open', key: 'Execute'}, |
| PrintScreen: {keyCode: 44, code: 'PrintScreen', key: 'PrintScreen'}, |
| Insert: {keyCode: 45, code: 'Insert', key: 'Insert'}, |
| Numpad0: { |
| keyCode: 45, |
| shiftKeyCode: 96, |
| key: 'Insert', |
| code: 'Numpad0', |
| shiftKey: '0', |
| location: 3, |
| }, |
| Delete: {keyCode: 46, code: 'Delete', key: 'Delete'}, |
| NumpadDecimal: { |
| keyCode: 46, |
| shiftKeyCode: 110, |
| code: 'NumpadDecimal', |
| key: '\u0000', |
| shiftKey: '.', |
| location: 3, |
| }, |
| Digit0: {keyCode: 48, code: 'Digit0', shiftKey: ')', key: '0'}, |
| Digit1: {keyCode: 49, code: 'Digit1', shiftKey: '!', key: '1'}, |
| Digit2: {keyCode: 50, code: 'Digit2', shiftKey: '@', key: '2'}, |
| Digit3: {keyCode: 51, code: 'Digit3', shiftKey: '#', key: '3'}, |
| Digit4: {keyCode: 52, code: 'Digit4', shiftKey: '$', key: '4'}, |
| Digit5: {keyCode: 53, code: 'Digit5', shiftKey: '%', key: '5'}, |
| Digit6: {keyCode: 54, code: 'Digit6', shiftKey: '^', key: '6'}, |
| Digit7: {keyCode: 55, code: 'Digit7', shiftKey: '&', key: '7'}, |
| Digit8: {keyCode: 56, code: 'Digit8', shiftKey: '*', key: '8'}, |
| Digit9: {keyCode: 57, code: 'Digit9', shiftKey: '(', key: '9'}, |
| KeyA: {keyCode: 65, code: 'KeyA', shiftKey: 'A', key: 'a'}, |
| KeyB: {keyCode: 66, code: 'KeyB', shiftKey: 'B', key: 'b'}, |
| KeyC: {keyCode: 67, code: 'KeyC', shiftKey: 'C', key: 'c'}, |
| KeyD: {keyCode: 68, code: 'KeyD', shiftKey: 'D', key: 'd'}, |
| KeyE: {keyCode: 69, code: 'KeyE', shiftKey: 'E', key: 'e'}, |
| KeyF: {keyCode: 70, code: 'KeyF', shiftKey: 'F', key: 'f'}, |
| KeyG: {keyCode: 71, code: 'KeyG', shiftKey: 'G', key: 'g'}, |
| KeyH: {keyCode: 72, code: 'KeyH', shiftKey: 'H', key: 'h'}, |
| KeyI: {keyCode: 73, code: 'KeyI', shiftKey: 'I', key: 'i'}, |
| KeyJ: {keyCode: 74, code: 'KeyJ', shiftKey: 'J', key: 'j'}, |
| KeyK: {keyCode: 75, code: 'KeyK', shiftKey: 'K', key: 'k'}, |
| KeyL: {keyCode: 76, code: 'KeyL', shiftKey: 'L', key: 'l'}, |
| KeyM: {keyCode: 77, code: 'KeyM', shiftKey: 'M', key: 'm'}, |
| KeyN: {keyCode: 78, code: 'KeyN', shiftKey: 'N', key: 'n'}, |
| KeyO: {keyCode: 79, code: 'KeyO', shiftKey: 'O', key: 'o'}, |
| KeyP: {keyCode: 80, code: 'KeyP', shiftKey: 'P', key: 'p'}, |
| KeyQ: {keyCode: 81, code: 'KeyQ', shiftKey: 'Q', key: 'q'}, |
| KeyR: {keyCode: 82, code: 'KeyR', shiftKey: 'R', key: 'r'}, |
| KeyS: {keyCode: 83, code: 'KeyS', shiftKey: 'S', key: 's'}, |
| KeyT: {keyCode: 84, code: 'KeyT', shiftKey: 'T', key: 't'}, |
| KeyU: {keyCode: 85, code: 'KeyU', shiftKey: 'U', key: 'u'}, |
| KeyV: {keyCode: 86, code: 'KeyV', shiftKey: 'V', key: 'v'}, |
| KeyW: {keyCode: 87, code: 'KeyW', shiftKey: 'W', key: 'w'}, |
| KeyX: {keyCode: 88, code: 'KeyX', shiftKey: 'X', key: 'x'}, |
| KeyY: {keyCode: 89, code: 'KeyY', shiftKey: 'Y', key: 'y'}, |
| KeyZ: {keyCode: 90, code: 'KeyZ', shiftKey: 'Z', key: 'z'}, |
| MetaLeft: {keyCode: 91, code: 'MetaLeft', key: 'Meta', location: 1}, |
| MetaRight: {keyCode: 92, code: 'MetaRight', key: 'Meta', location: 2}, |
| ContextMenu: {keyCode: 93, code: 'ContextMenu', key: 'ContextMenu'}, |
| NumpadMultiply: { |
| keyCode: 106, |
| code: 'NumpadMultiply', |
| key: '*', |
| location: 3, |
| }, |
| NumpadAdd: {keyCode: 107, code: 'NumpadAdd', key: '+', location: 3}, |
| NumpadSubtract: { |
| keyCode: 109, |
| code: 'NumpadSubtract', |
| key: '-', |
| location: 3, |
| }, |
| NumpadDivide: {keyCode: 111, code: 'NumpadDivide', key: '/', location: 3}, |
| F1: {keyCode: 112, code: 'F1', key: 'F1'}, |
| F2: {keyCode: 113, code: 'F2', key: 'F2'}, |
| F3: {keyCode: 114, code: 'F3', key: 'F3'}, |
| F4: {keyCode: 115, code: 'F4', key: 'F4'}, |
| F5: {keyCode: 116, code: 'F5', key: 'F5'}, |
| F6: {keyCode: 117, code: 'F6', key: 'F6'}, |
| F7: {keyCode: 118, code: 'F7', key: 'F7'}, |
| F8: {keyCode: 119, code: 'F8', key: 'F8'}, |
| F9: {keyCode: 120, code: 'F9', key: 'F9'}, |
| F10: {keyCode: 121, code: 'F10', key: 'F10'}, |
| F11: {keyCode: 122, code: 'F11', key: 'F11'}, |
| F12: {keyCode: 123, code: 'F12', key: 'F12'}, |
| F13: {keyCode: 124, code: 'F13', key: 'F13'}, |
| F14: {keyCode: 125, code: 'F14', key: 'F14'}, |
| F15: {keyCode: 126, code: 'F15', key: 'F15'}, |
| F16: {keyCode: 127, code: 'F16', key: 'F16'}, |
| F17: {keyCode: 128, code: 'F17', key: 'F17'}, |
| F18: {keyCode: 129, code: 'F18', key: 'F18'}, |
| F19: {keyCode: 130, code: 'F19', key: 'F19'}, |
| F20: {keyCode: 131, code: 'F20', key: 'F20'}, |
| F21: {keyCode: 132, code: 'F21', key: 'F21'}, |
| F22: {keyCode: 133, code: 'F22', key: 'F22'}, |
| F23: {keyCode: 134, code: 'F23', key: 'F23'}, |
| F24: {keyCode: 135, code: 'F24', key: 'F24'}, |
| NumLock: {keyCode: 144, code: 'NumLock', key: 'NumLock'}, |
| ScrollLock: {keyCode: 145, code: 'ScrollLock', key: 'ScrollLock'}, |
| AudioVolumeMute: { |
| keyCode: 173, |
| code: 'AudioVolumeMute', |
| key: 'AudioVolumeMute', |
| }, |
| AudioVolumeDown: { |
| keyCode: 174, |
| code: 'AudioVolumeDown', |
| key: 'AudioVolumeDown', |
| }, |
| AudioVolumeUp: {keyCode: 175, code: 'AudioVolumeUp', key: 'AudioVolumeUp'}, |
| MediaTrackNext: { |
| keyCode: 176, |
| code: 'MediaTrackNext', |
| key: 'MediaTrackNext', |
| }, |
| MediaTrackPrevious: { |
| keyCode: 177, |
| code: 'MediaTrackPrevious', |
| key: 'MediaTrackPrevious', |
| }, |
| MediaStop: {keyCode: 178, code: 'MediaStop', key: 'MediaStop'}, |
| MediaPlayPause: { |
| keyCode: 179, |
| code: 'MediaPlayPause', |
| key: 'MediaPlayPause', |
| }, |
| Semicolon: {keyCode: 186, code: 'Semicolon', shiftKey: ':', key: ';'}, |
| Equal: {keyCode: 187, code: 'Equal', shiftKey: '+', key: '='}, |
| NumpadEqual: {keyCode: 187, code: 'NumpadEqual', key: '=', location: 3}, |
| Comma: {keyCode: 188, code: 'Comma', shiftKey: '<', key: ','}, |
| Minus: {keyCode: 189, code: 'Minus', shiftKey: '_', key: '-'}, |
| Period: {keyCode: 190, code: 'Period', shiftKey: '>', key: '.'}, |
| Slash: {keyCode: 191, code: 'Slash', shiftKey: '?', key: '/'}, |
| Backquote: {keyCode: 192, code: 'Backquote', shiftKey: '~', key: '`'}, |
| BracketLeft: {keyCode: 219, code: 'BracketLeft', shiftKey: '{', key: '['}, |
| Backslash: {keyCode: 220, code: 'Backslash', shiftKey: '|', key: '\\'}, |
| BracketRight: {keyCode: 221, code: 'BracketRight', shiftKey: '}', key: ']'}, |
| Quote: {keyCode: 222, code: 'Quote', shiftKey: '"', key: "'"}, |
| AltGraph: {keyCode: 225, code: 'AltGraph', key: 'AltGraph'}, |
| Props: {keyCode: 247, code: 'Props', key: 'CrSel'}, |
| Cancel: {keyCode: 3, key: 'Cancel', code: 'Abort'}, |
| Clear: {keyCode: 12, key: 'Clear', code: 'Numpad5', location: 3}, |
| Shift: {keyCode: 16, key: 'Shift', code: 'ShiftLeft', location: 1}, |
| Control: {keyCode: 17, key: 'Control', code: 'ControlLeft', location: 1}, |
| Alt: {keyCode: 18, key: 'Alt', code: 'AltLeft', location: 1}, |
| Accept: {keyCode: 30, key: 'Accept'}, |
| ModeChange: {keyCode: 31, key: 'ModeChange'}, |
| ' ': {keyCode: 32, key: ' ', code: 'Space'}, |
| Print: {keyCode: 42, key: 'Print'}, |
| Execute: {keyCode: 43, key: 'Execute', code: 'Open'}, |
| '\u0000': {keyCode: 46, key: '\u0000', code: 'NumpadDecimal', location: 3}, |
| a: {keyCode: 65, key: 'a', code: 'KeyA'}, |
| b: {keyCode: 66, key: 'b', code: 'KeyB'}, |
| c: {keyCode: 67, key: 'c', code: 'KeyC'}, |
| d: {keyCode: 68, key: 'd', code: 'KeyD'}, |
| e: {keyCode: 69, key: 'e', code: 'KeyE'}, |
| f: {keyCode: 70, key: 'f', code: 'KeyF'}, |
| g: {keyCode: 71, key: 'g', code: 'KeyG'}, |
| h: {keyCode: 72, key: 'h', code: 'KeyH'}, |
| i: {keyCode: 73, key: 'i', code: 'KeyI'}, |
| j: {keyCode: 74, key: 'j', code: 'KeyJ'}, |
| k: {keyCode: 75, key: 'k', code: 'KeyK'}, |
| l: {keyCode: 76, key: 'l', code: 'KeyL'}, |
| m: {keyCode: 77, key: 'm', code: 'KeyM'}, |
| n: {keyCode: 78, key: 'n', code: 'KeyN'}, |
| o: {keyCode: 79, key: 'o', code: 'KeyO'}, |
| p: {keyCode: 80, key: 'p', code: 'KeyP'}, |
| q: {keyCode: 81, key: 'q', code: 'KeyQ'}, |
| r: {keyCode: 82, key: 'r', code: 'KeyR'}, |
| s: {keyCode: 83, key: 's', code: 'KeyS'}, |
| t: {keyCode: 84, key: 't', code: 'KeyT'}, |
| u: {keyCode: 85, key: 'u', code: 'KeyU'}, |
| v: {keyCode: 86, key: 'v', code: 'KeyV'}, |
| w: {keyCode: 87, key: 'w', code: 'KeyW'}, |
| x: {keyCode: 88, key: 'x', code: 'KeyX'}, |
| y: {keyCode: 89, key: 'y', code: 'KeyY'}, |
| z: {keyCode: 90, key: 'z', code: 'KeyZ'}, |
| Meta: {keyCode: 91, key: 'Meta', code: 'MetaLeft', location: 1}, |
| '*': {keyCode: 106, key: '*', code: 'NumpadMultiply', location: 3}, |
| '+': {keyCode: 107, key: '+', code: 'NumpadAdd', location: 3}, |
| '-': {keyCode: 109, key: '-', code: 'NumpadSubtract', location: 3}, |
| '/': {keyCode: 111, key: '/', code: 'NumpadDivide', location: 3}, |
| ';': {keyCode: 186, key: ';', code: 'Semicolon'}, |
| '=': {keyCode: 187, key: '=', code: 'Equal'}, |
| ',': {keyCode: 188, key: ',', code: 'Comma'}, |
| '.': {keyCode: 190, key: '.', code: 'Period'}, |
| '`': {keyCode: 192, key: '`', code: 'Backquote'}, |
| '[': {keyCode: 219, key: '[', code: 'BracketLeft'}, |
| '\\': {keyCode: 220, key: '\\', code: 'Backslash'}, |
| ']': {keyCode: 221, key: ']', code: 'BracketRight'}, |
| "'": {keyCode: 222, key: "'", code: 'Quote'}, |
| Attn: {keyCode: 246, key: 'Attn'}, |
| CrSel: {keyCode: 247, key: 'CrSel', code: 'Props'}, |
| ExSel: {keyCode: 248, key: 'ExSel'}, |
| EraseEof: {keyCode: 249, key: 'EraseEof'}, |
| Play: {keyCode: 250, key: 'Play'}, |
| ZoomOut: {keyCode: 251, key: 'ZoomOut'}, |
| ')': {keyCode: 48, key: ')', code: 'Digit0'}, |
| '!': {keyCode: 49, key: '!', code: 'Digit1'}, |
| '@': {keyCode: 50, key: '@', code: 'Digit2'}, |
| '#': {keyCode: 51, key: '#', code: 'Digit3'}, |
| $: {keyCode: 52, key: '$', code: 'Digit4'}, |
| '%': {keyCode: 53, key: '%', code: 'Digit5'}, |
| '^': {keyCode: 54, key: '^', code: 'Digit6'}, |
| '&': {keyCode: 55, key: '&', code: 'Digit7'}, |
| '(': {keyCode: 57, key: '(', code: 'Digit9'}, |
| A: {keyCode: 65, key: 'A', code: 'KeyA'}, |
| B: {keyCode: 66, key: 'B', code: 'KeyB'}, |
| C: {keyCode: 67, key: 'C', code: 'KeyC'}, |
| D: {keyCode: 68, key: 'D', code: 'KeyD'}, |
| E: {keyCode: 69, key: 'E', code: 'KeyE'}, |
| F: {keyCode: 70, key: 'F', code: 'KeyF'}, |
| G: {keyCode: 71, key: 'G', code: 'KeyG'}, |
| H: {keyCode: 72, key: 'H', code: 'KeyH'}, |
| I: {keyCode: 73, key: 'I', code: 'KeyI'}, |
| J: {keyCode: 74, key: 'J', code: 'KeyJ'}, |
| K: {keyCode: 75, key: 'K', code: 'KeyK'}, |
| L: {keyCode: 76, key: 'L', code: 'KeyL'}, |
| M: {keyCode: 77, key: 'M', code: 'KeyM'}, |
| N: {keyCode: 78, key: 'N', code: 'KeyN'}, |
| O: {keyCode: 79, key: 'O', code: 'KeyO'}, |
| P: {keyCode: 80, key: 'P', code: 'KeyP'}, |
| Q: {keyCode: 81, key: 'Q', code: 'KeyQ'}, |
| R: {keyCode: 82, key: 'R', code: 'KeyR'}, |
| S: {keyCode: 83, key: 'S', code: 'KeyS'}, |
| T: {keyCode: 84, key: 'T', code: 'KeyT'}, |
| U: {keyCode: 85, key: 'U', code: 'KeyU'}, |
| V: {keyCode: 86, key: 'V', code: 'KeyV'}, |
| W: {keyCode: 87, key: 'W', code: 'KeyW'}, |
| X: {keyCode: 88, key: 'X', code: 'KeyX'}, |
| Y: {keyCode: 89, key: 'Y', code: 'KeyY'}, |
| Z: {keyCode: 90, key: 'Z', code: 'KeyZ'}, |
| ':': {keyCode: 186, key: ':', code: 'Semicolon'}, |
| '<': {keyCode: 188, key: '<', code: 'Comma'}, |
| _: {keyCode: 189, key: '_', code: 'Minus'}, |
| '>': {keyCode: 190, key: '>', code: 'Period'}, |
| '?': {keyCode: 191, key: '?', code: 'Slash'}, |
| '~': {keyCode: 192, key: '~', code: 'Backquote'}, |
| '{': {keyCode: 219, key: '{', code: 'BracketLeft'}, |
| '|': {keyCode: 220, key: '|', code: 'Backslash'}, |
| '}': {keyCode: 221, key: '}', code: 'BracketRight'}, |
| '"': {keyCode: 222, key: '"', code: 'Quote'}, |
| SoftLeft: {key: 'SoftLeft', code: 'SoftLeft', location: 4}, |
| SoftRight: {key: 'SoftRight', code: 'SoftRight', location: 4}, |
| Camera: {keyCode: 44, key: 'Camera', code: 'Camera', location: 4}, |
| Call: {key: 'Call', code: 'Call', location: 4}, |
| EndCall: {keyCode: 95, key: 'EndCall', code: 'EndCall', location: 4}, |
| VolumeDown: { |
| keyCode: 182, |
| key: 'VolumeDown', |
| code: 'VolumeDown', |
| location: 4, |
| }, |
| VolumeUp: {keyCode: 183, key: 'VolumeUp', code: 'VolumeUp', location: 4}, |
| }; |