Source code

Revision control

Copy as Markdown

Other Tools

/**
* @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},
};