您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

keycodes.ts 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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: 'capslock',
  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. ASTERISK: '*',
  67. PLUS: '+'
  68. };
  69. /**
  70. * Mapping between the key codes and keys defined in KEYS.
  71. * The mappings are based on
  72. * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Specifications.
  73. */
  74. /* eslint-enable max-len */
  75. const keyCodeToKey = {
  76. 8: KEYS.BACKSPACE,
  77. 9: KEYS.TAB,
  78. 13: KEYS.RETURN,
  79. 16: KEYS.SHIFT,
  80. 17: KEYS.CONTROL,
  81. 18: KEYS.ALT,
  82. 20: KEYS.CAPS_LOCK,
  83. 27: KEYS.ESCAPE,
  84. 32: KEYS.SPACE,
  85. 33: KEYS.PAGEUP,
  86. 34: KEYS.PAGEDOWN,
  87. 35: KEYS.END,
  88. 36: KEYS.HOME,
  89. 37: KEYS.LEFT,
  90. 38: KEYS.UP,
  91. 39: KEYS.RIGHT,
  92. 40: KEYS.DOWN,
  93. 42: KEYS.PRINTSCREEN,
  94. 44: KEYS.PRINTSCREEN,
  95. 45: KEYS.INSERT,
  96. 46: KEYS.DELETE,
  97. 59: KEYS.SEMICOLON,
  98. 61: KEYS.EQUAL,
  99. 91: KEYS.CMD_L,
  100. 92: KEYS.CMD_R,
  101. 93: KEYS.CMD_R,
  102. 96: KEYS.NUMPAD_0,
  103. 97: KEYS.NUMPAD_1,
  104. 98: KEYS.NUMPAD_2,
  105. 99: KEYS.NUMPAD_3,
  106. 100: KEYS.NUMPAD_4,
  107. 101: KEYS.NUMPAD_5,
  108. 102: KEYS.NUMPAD_6,
  109. 103: KEYS.NUMPAD_7,
  110. 104: KEYS.NUMPAD_8,
  111. 105: KEYS.NUMPAD_9,
  112. 106: KEYS.ASTERISK,
  113. 107: KEYS.PLUS,
  114. 109: KEYS.MINUS,
  115. 110: KEYS.PERIOD,
  116. 111: KEYS.SLASH,
  117. 112: KEYS.F1,
  118. 113: KEYS.F2,
  119. 114: KEYS.F3,
  120. 115: KEYS.F4,
  121. 116: KEYS.F5,
  122. 117: KEYS.F6,
  123. 118: KEYS.F7,
  124. 119: KEYS.F8,
  125. 120: KEYS.F9,
  126. 121: KEYS.F10,
  127. 122: KEYS.F11,
  128. 123: KEYS.F12,
  129. 124: KEYS.PRINTSCREEN,
  130. 173: KEYS.MINUS,
  131. 186: KEYS.SEMICOLON,
  132. 187: KEYS.EQUAL,
  133. 188: KEYS.COMMA,
  134. 189: KEYS.MINUS,
  135. 190: KEYS.PERIOD,
  136. 191: KEYS.SLASH,
  137. 192: KEYS.BACKQUOTE,
  138. 219: KEYS.BRACKET_LEFT,
  139. 220: KEYS.BACKSLASH,
  140. 221: KEYS.BRACKET_RIGHT,
  141. 222: KEYS.QUOTE,
  142. 224: KEYS.META,
  143. 229: KEYS.SEMICOLON
  144. };
  145. /**
  146. * Generate codes for digit keys (0-9).
  147. */
  148. for (let i = 0; i < 10; i++) {
  149. keyCodeToKey[(i + 48) as keyof typeof keyCodeToKey] = `${i}`;
  150. }
  151. /**
  152. * Generate codes for letter keys (a-z).
  153. */
  154. for (let i = 0; i < 26; i++) {
  155. const keyCode = i + 65;
  156. keyCodeToKey[keyCode as keyof typeof keyCodeToKey] = String.fromCharCode(keyCode).toLowerCase();
  157. }
  158. /**
  159. * Returns key associated with the keyCode from the passed event.
  160. *
  161. * @param {KeyboardEvent} event - The event.
  162. * @returns {KEYS} - The key on the keyboard.
  163. */
  164. export function keyboardEventToKey(event: React.KeyboardEvent) {
  165. return keyCodeToKey[event.which as keyof typeof keyCodeToKey];
  166. }