chromium/chrome/browser/resources/chromeos/accessibility/common/key_code.ts

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview A centralized listing for keycodes used by accessibility
 * component extensions. Largely taken from
 * ui/events/keycodes/keyboard_codes_posix.h, but with specific edits for Chrome
 * OS and accessibility.
 */
import {TestImportManager} from './testing/test_import_manager.js';

export enum KeyCode {
  UNKNOWN = 0,
  POWER_BUTTON = 0,
  CANCEL = 3,
  BACK = 8,
  TAB = 9,
  BACKTAB = 10,
  CLEAR = 12,
  RETURN = 13,
  SHIFT = 16,
  CONTROL = 17,
  MENU = 18,
  ALT = 18,
  PAUSE = 19,
  CAPITAL = 20,
  KANA = 21,
  HANGUL = 21,
  PASTE = 22,
  JUNJA = 23,
  FINAL = 24,
  HANJA = 25,
  KANJI = 25,
  ESCAPE = 27,
  CONVERT = 28,
  NONCONVERT = 29,
  ACCEPT = 30,
  MODECHANGE = 31,
  SPACE = 32,
  PRIOR = 33,
  NEXT = 34,
  END = 35,
  HOME = 36,
  LEFT = 37,
  UP = 38,
  RIGHT = 39,
  DOWN = 40,
  SELECT = 41,
  PRINT = 42,
  EXECUTE = 43,
  SNAPSHOT = 44,
  INSERT = 45,
  DELETE = 46,
  HELP = 47,
  ZERO = 48,
  ONE = 49,
  TWO = 50,
  THREE = 51,
  FOUR = 52,
  FIVE = 53,
  SIX = 54,
  SEVEN = 55,
  EIGHT = 56,
  NINE = 57,
  A = 65,
  B = 66,
  C = 67,
  D = 68,
  E = 69,
  F = 70,
  G = 71,
  H = 72,
  I = 73,
  J = 74,
  K = 75,
  L = 76,
  M = 77,
  N = 78,
  O = 79,
  P = 80,
  Q = 81,
  R = 82,
  S = 83,
  T = 84,
  U = 85,
  V = 86,
  W = 87,
  X = 88,
  Y = 89,
  Z = 90,
  SEARCH = 91,
  RWIN = 92,
  APPS = 93,
  SLEEP = 95,
  NUMPAD0 = 96,
  NUMPAD1 = 97,
  NUMPAD2 = 98,
  NUMPAD3 = 99,
  NUMPAD4 = 100,
  NUMPAD5 = 101,
  NUMPAD6 = 102,
  NUMPAD7 = 103,
  NUMPAD8 = 104,
  NUMPAD9 = 105,
  MULTIPLY = 106,
  ADD = 107,
  SEPARATOR = 108,
  SUBTRACT = 109,
  DECIMAL = 110,
  DIVIDE = 111,
  F1 = 112,
  F2 = 113,
  F3 = 114,
  F4 = 115,
  F5 = 116,
  F6 = 117,
  F7 = 118,
  F8 = 119,
  F9 = 120,
  F10 = 121,
  F11 = 122,
  F12 = 123,
  F13 = 124,
  F14 = 125,
  F15 = 126,
  F16 = 127,
  F17 = 128,
  F18 = 129,
  F19 = 130,
  F20 = 131,
  F21 = 132,
  F22 = 133,
  F23 = 134,
  F24 = 135,
  NUMLOCK = 144,
  SCROLL = 145,
  WLAN = 151,
  POWER = 152,
  ASSISTANT = 153,
  SETTINGS = 154,
  PRIVACY_SCREEN_TOGGLE = 155,
  LSHIFT = 160,
  RSHIFT = 161,
  LCONTROL = 162,
  RCONTROL = 163,
  LMENU = 164,
  RMENU = 165,
  BROWSER_BACK = 166,
  BROWSER_FORWARD = 167,
  BROWSER_REFRESH = 168,
  BROWSER_STOP = 169,
  BROWSER_SEARCH = 170,
  BROWSER_FAVORITES = 171,
  BROWSER_HOME = 172,
  VOLUME_MUTE = 173,
  VOLUME_DOWN = 174,
  VOLUME_UP = 175,
  MEDIA_NEXT_TRACK = 176,
  MEDIA_PREV_TRACK = 177,
  MEDIA_STOP = 178,
  MEDIA_PLAY_PAUSE = 179,
  MEDIA_LAUNCH_MAIL = 180,
  MEDIA_LAUNCH_MEDIA_SELECT = 181,
  MEDIA_LAUNCH_APP1 = 182,
  MEDIA_LAUNCH_APP2 = 183,
  OEM_1 = 186,
  OEM_PLUS = 187,
  OEM_COMMA = 188,
  OEM_MINUS = 189,
  OEM_PERIOD = 190,
  OEM_2 = 191,
  OEM_3 = 192,
  BRIGHTNESS_DOWN = 216,
  BRIGHTNESS_UP = 217,
  KBD_BRIGHTNESS_DOWN = 218,
  OEM_4 = 219,
  OEM_5 = 220,
  OEM_6 = 221,
  OEM_7 = 222,
  OEM_8 = 223,
  ALTGR = 225,
  OEM_102 = 226,
  OEM_103 = 227,
  OEM_104 = 228,
  PROCESSKEY = 229,
  COMPOSE = 230,
  PACKET = 231,
  KBD_BRIGHTNESS_UP = 232,
  MEDIA_PLAY = 233,
  MEDIA_PAUSE = 234,
  OEM_ATTN = 240,
  OEM_FINISH = 241,
  OEM_COPY = 242,
  DBE_SBCSCHAR = 243,
  DBE_DBCSCHAR = 244,
  OEM_BACKTAB = 245,
  ATTN = 246,
  CRSEL = 247,
  EXSEL = 248,
  EREOF = 249,
  PLAY = 250,
  ZOOM = 251,
  NONAME = 252,
  PA1 = 253,
  OEM_CLEAR = 254,
}

const KEY_NAMES: Partial<Record<KeyCode, string>> = {
  [KeyCode.POWER_BUTTON]: 'Power button',
  [KeyCode.BACK]: 'Backspace',
  [KeyCode.TAB]: 'Tab',
  [KeyCode.RETURN]: 'Enter',
  [KeyCode.SHIFT]: 'Shift',
  [KeyCode.CONTROL]: 'Control',
  [KeyCode.ALT]: 'Alt',
  [KeyCode.ESCAPE]: 'Escape',
  [KeyCode.SPACE]: 'Space',
  [KeyCode.END]: 'end',
  [KeyCode.HOME]: 'home',
  [KeyCode.LEFT]: 'Left arrow',
  [KeyCode.UP]: 'Up arrow',
  [KeyCode.RIGHT]: 'Right arrow',
  [KeyCode.DOWN]: 'Down arrow',
  [KeyCode.INSERT]: 'Insert',
  [KeyCode.DELETE]: 'Delete',
  [KeyCode.ZERO]: '0',
  [KeyCode.ONE]: '1',
  [KeyCode.TWO]: '2',
  [KeyCode.THREE]: '3',
  [KeyCode.FOUR]: '4',
  [KeyCode.FIVE]: '5',
  [KeyCode.SIX]: '6',
  [KeyCode.SEVEN]: '7',
  [KeyCode.EIGHT]: '8',
  [KeyCode.NINE]: '9',
  [KeyCode.A]: 'A',
  [KeyCode.B]: 'B',
  [KeyCode.C]: 'C',
  [KeyCode.D]: 'D',
  [KeyCode.E]: 'E',
  [KeyCode.F]: 'F',
  [KeyCode.G]: 'G',
  [KeyCode.H]: 'H',
  [KeyCode.I]: 'I',
  [KeyCode.J]: 'J',
  [KeyCode.K]: 'K',
  [KeyCode.L]: 'L',
  [KeyCode.M]: 'M',
  [KeyCode.N]: 'N',
  [KeyCode.O]: 'O',
  [KeyCode.P]: 'P',
  [KeyCode.Q]: 'Q',
  [KeyCode.R]: 'R',
  [KeyCode.S]: 'S',
  [KeyCode.T]: 'T',
  [KeyCode.U]: 'U',
  [KeyCode.V]: 'V',
  [KeyCode.W]: 'W',
  [KeyCode.X]: 'X',
  [KeyCode.Y]: 'Y',
  [KeyCode.Z]: 'Z',
  [KeyCode.SEARCH]: 'Search',
  [KeyCode.APPS]: 'Search',
  [KeyCode.NUMPAD0]: '0',
  [KeyCode.NUMPAD1]: '1',
  [KeyCode.NUMPAD2]: '2',
  [KeyCode.NUMPAD3]: '3',
  [KeyCode.NUMPAD4]: '4',
  [KeyCode.NUMPAD5]: '5',
  [KeyCode.NUMPAD6]: '6',
  [KeyCode.NUMPAD7]: '7',
  [KeyCode.NUMPAD8]: '8',
  [KeyCode.NUMPAD9]: '9',
  [KeyCode.F4]: 'Toggle full screen',
  [KeyCode.F11]: 'F11',
  [KeyCode.F12]: 'F12',
  [KeyCode.OEM_1]: 'Semicolon',
  [KeyCode.OEM_PLUS]: 'Equal sign',
  [KeyCode.OEM_COMMA]: 'Comma',
  [KeyCode.OEM_MINUS]: 'Dash',
  [KeyCode.OEM_PERIOD]: 'Period',
  [KeyCode.OEM_2]: 'Forward slash',
  [KeyCode.OEM_3]: 'Grave accent',
  [KeyCode.OEM_4]: 'Open bracket',
  [KeyCode.OEM_5]: 'Back slash',
  [KeyCode.OEM_6]: 'Close bracket',
  [KeyCode.OEM_7]: 'Single quote',
};

export namespace KeyCode {
  export function name(code: KeyCode): string {
    return KEY_NAMES[code] ?? '';
  }
}

TestImportManager.exportForTesting(['KeyCode', KeyCode]);