You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

keycodes.ts 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import React from 'react';
  2. /**
  3. * Enumerates the supported keys.
  4. * NOTE: The maps represents physical keys on the keyboard, not chars.
  5. *
  6. * @readonly
  7. * @enum {string}
  8. */
  9. export const KEYS = {
  10. BACKSPACE: 'backspace',
  11. DELETE: 'delete',
  12. RETURN: 'enter',
  13. TAB: 'tab',
  14. ESCAPE: 'escape',
  15. UP: 'up',
  16. DOWN: 'down',
  17. RIGHT: 'right',
  18. LEFT: 'left',
  19. HOME: 'home',
  20. END: 'end',
  21. PAGEUP: 'pageup',
  22. PAGEDOWN: 'pagedown',
  23. F1: 'f1',
  24. F2: 'f2',
  25. F3: 'f3',
  26. F4: 'f4',
  27. F5: 'f5',
  28. F6: 'f6',
  29. F7: 'f7',
  30. F8: 'f8',
  31. F9: 'f9',
  32. F10: 'f10',
  33. F11: 'f11',
  34. F12: 'f12',
  35. META: 'command',
  36. CMD_L: 'command',
  37. CMD_R: 'command',
  38. ALT: 'alt',
  39. CONTROL: 'control',
  40. SHIFT: 'shift',
  41. CAPS_LOCK: 'caps_lock', // not supported by robotjs
  42. SPACE: 'space',
  43. PRINTSCREEN: 'printscreen',
  44. INSERT: 'insert',
  45. NUMPAD_0: 'numpad_0',
  46. NUMPAD_1: 'numpad_1',
  47. NUMPAD_2: 'numpad_2',
  48. NUMPAD_3: 'numpad_3',
  49. NUMPAD_4: 'numpad_4',
  50. NUMPAD_5: 'numpad_5',
  51. NUMPAD_6: 'numpad_6',
  52. NUMPAD_7: 'numpad_7',
  53. NUMPAD_8: 'numpad_8',
  54. NUMPAD_9: 'numpad_9',
  55. COMMA: ',',
  56. PERIOD: '.',
  57. SEMICOLON: ';',
  58. QUOTE: '\'',
  59. BRACKET_LEFT: '[',
  60. BRACKET_RIGHT: ']',
  61. BACKQUOTE: '`',
  62. BACKSLASH: '\\',
  63. MINUS: '-',
  64. EQUAL: '=',
  65. SLASH: '/'
  66. };
  67. /* eslint-disable max-len */
  68. /**
  69. * Mapping between the key codes and keys defined in KEYS.
  70. * The mappings are based on
  71. * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Specifications.
  72. */
  73. /* eslint-enable max-len */
  74. const keyCodeToKey = {
  75. 8: KEYS.BACKSPACE,
  76. 9: KEYS.TAB,
  77. 13: KEYS.RETURN,
  78. 16: KEYS.SHIFT,
  79. 17: KEYS.CONTROL,
  80. 18: KEYS.ALT,
  81. 20: KEYS.CAPS_LOCK,
  82. 27: KEYS.ESCAPE,
  83. 32: KEYS.SPACE,
  84. 33: KEYS.PAGEUP,
  85. 34: KEYS.PAGEDOWN,
  86. 35: KEYS.END,
  87. 36: KEYS.HOME,
  88. 37: KEYS.LEFT,
  89. 38: KEYS.UP,
  90. 39: KEYS.RIGHT,
  91. 40: KEYS.DOWN,
  92. 42: KEYS.PRINTSCREEN,
  93. 44: KEYS.PRINTSCREEN,
  94. 45: KEYS.INSERT,
  95. 46: KEYS.DELETE,
  96. 59: KEYS.SEMICOLON,
  97. 61: KEYS.EQUAL,
  98. 91: KEYS.CMD_L,
  99. 92: KEYS.CMD_R,
  100. 93: KEYS.CMD_R,
  101. 96: KEYS.NUMPAD_0,
  102. 97: KEYS.NUMPAD_1,
  103. 98: KEYS.NUMPAD_2,
  104. 99: KEYS.NUMPAD_3,
  105. 100: KEYS.NUMPAD_4,
  106. 101: KEYS.NUMPAD_5,
  107. 102: KEYS.NUMPAD_6,
  108. 103: KEYS.NUMPAD_7,
  109. 104: KEYS.NUMPAD_8,
  110. 105: KEYS.NUMPAD_9,
  111. 112: KEYS.F1,
  112. 113: KEYS.F2,
  113. 114: KEYS.F3,
  114. 115: KEYS.F4,
  115. 116: KEYS.F5,
  116. 117: KEYS.F6,
  117. 118: KEYS.F7,
  118. 119: KEYS.F8,
  119. 120: KEYS.F9,
  120. 121: KEYS.F10,
  121. 122: KEYS.F11,
  122. 123: KEYS.F12,
  123. 124: KEYS.PRINTSCREEN,
  124. 173: KEYS.MINUS,
  125. 186: KEYS.SEMICOLON,
  126. 187: KEYS.EQUAL,
  127. 188: KEYS.COMMA,
  128. 189: KEYS.MINUS,
  129. 190: KEYS.PERIOD,
  130. 191: KEYS.SLASH,
  131. 192: KEYS.BACKQUOTE,
  132. 219: KEYS.BRACKET_LEFT,
  133. 220: KEYS.BACKSLASH,
  134. 221: KEYS.BRACKET_RIGHT,
  135. 222: KEYS.QUOTE,
  136. 224: KEYS.META,
  137. 229: KEYS.SEMICOLON
  138. };
  139. /**
  140. * Generate codes for digit keys (0-9).
  141. */
  142. for (let i = 0; i < 10; i++) {
  143. // @ts-ignore
  144. keyCodeToKey[i + 48] = `${i}`;
  145. }
  146. /**
  147. * Generate codes for letter keys (a-z).
  148. */
  149. for (let i = 0; i < 26; i++) {
  150. const keyCode = i + 65;
  151. keyCodeToKey[keyCode as keyof typeof keyCodeToKey] = String.fromCharCode(keyCode).toLowerCase();
  152. }
  153. /**
  154. * Returns key associated with the keyCode from the passed event.
  155. *
  156. * @param {KeyboardEvent} event - The event.
  157. * @returns {KEYS} - The key on the keyboard.
  158. */
  159. export function keyboardEventToKey(event: React.KeyboardEvent) {
  160. return keyCodeToKey[event.which as keyof typeof keyCodeToKey];
  161. }