{"version":3,"sources":["../index.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/color.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/normalize.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/env.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/parent.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/process-title.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/shell.ts","../node_modules/.pnpm/detect-terminal@3.0.0/node_modules/detect-terminal/src/details.ts","../src/emit-keypress.ts","../src/keypress.ts","../src/mousepress.ts","../src/keycodes.ts","../src/keyboard-protocol.ts","../src/utils.ts"],"sourcesContent":["/* eslint-disable no-control-regex  */\nimport type readline from 'node:readline';\nimport { stdin, stdout } from 'node:process';\nimport { detectTerminal } from 'detect-terminal';\nimport { emitKeypressEvents } from '~/emit-keypress';\nimport { mousepress } from '~/mousepress';\nimport { keycodes } from '~/keycodes';\nimport { kEscape } from '~/keypress';\nimport { enableKeyboardProtocol, resetKeyboardProtocol } from '~/keyboard-protocol';\nimport {\n  createShortcut,\n  isMousepress,\n  isPrintableCharacter,\n  parsePosition,\n  prioritizeKeymap,\n  sortShortcutModifier\n} from '~/utils';\n\nexport * from '~/utils';\n\nexport const isWindows = globalThis.process.platform === 'win32';\nexport const MAX_PASTE_BUFFER = 1024 * 1024; // 1MB limit for paste buffer\nexport const ENABLE_PASTE_BRACKET_MODE = `${kEscape}[?2004h`;\nexport const DISABLE_PASTE_BRACKET_MODE = `${kEscape}[?2004l`;\nexport const ENABLE_MOUSE = `${kEscape}[?1003h`;\nexport const DISABLE_MOUSE = `${kEscape}[?1003l`;\n\nexport const enablePaste = (stdout: NodeJS.WriteStream) => {\n  stdout.write(ENABLE_PASTE_BRACKET_MODE);\n};\n\nexport const disablePaste = (stdout: NodeJS.WriteStream) => {\n  stdout.write(DISABLE_PASTE_BRACKET_MODE);\n};\n\nexport const enableMouse = (stdout: NodeJS.WriteStream) => {\n  stdout.write(ENABLE_MOUSE);\n};\n\nexport const disableMouse = (stdout: NodeJS.WriteStream) => {\n  stdout.write(DISABLE_MOUSE);\n};\n\nexport const cursor = {\n  hide: (stdout: NodeJS.WriteStream) => {\n    stdout.write(`${kEscape}[?25l`);\n  },\n  show: (stdout: NodeJS.WriteStream) => {\n    stdout.write(`${kEscape}[?25h`);\n  },\n  position: (stdout: NodeJS.WriteStream) => {\n    stdout.write(`${kEscape}[6n`);\n  }\n};\n\nexport const hasMatchingModifiers = (a: readline.Key, b) => {\n  return (\n    (!hasModifier(a) && !hasModifier(b)) ||\n    (a.ctrl === b.ctrl && a.shift === b.shift && a.meta === b.meta && a.fn === b.fn)\n  );\n};\n\nexport const hasModifier = (key: readline.Key) => {\n  return key.ctrl || key.shift || key.meta || key.fn;\n};\n\ntype RawModeStream = NodeJS.ReadableStream & {\n  isRaw?: boolean;\n  setRawMode?: (mode: boolean) => void;\n};\n\nconst isReadableStream = (input: unknown): input is NodeJS.ReadableStream => {\n  if (!input || typeof input !== 'object') return false;\n\n  const stream = input as NodeJS.ReadableStream;\n  return (\n    typeof stream.on === 'function' &&\n    typeof stream.off === 'function' &&\n    typeof stream.once === 'function' &&\n    typeof stream.pause === 'function' &&\n    typeof stream.resume === 'function' &&\n    typeof stream.setEncoding === 'function'\n  );\n};\n\nexport const createEmitKeypress = (config?: { setupProcessHandlers?: boolean }) => {\n  const sessionCounts = new WeakMap<NodeJS.ReadableStream, number>();\n\n  function acquireInput(input) {\n    sessionCounts.set(input, (sessionCounts.get(input) || 0) + 1);\n  }\n\n  function releaseInput(input) {\n    const count = sessionCounts.get(input) || 0;\n    if (count > 1) {\n      sessionCounts.set(input, count - 1);\n    } else {\n      sessionCounts.delete(input);\n      input.pause(); // actually pause only when last session closes\n    }\n  }\n\n  // If this is the singleton, use the (possibly global) handlers array\n  const setupProcessHandlers = config?.setupProcessHandlers === true;\n  let onExitHandlers: Set<() => void>;\n\n  // If not explicitly told to skip, AND we are the singleton (first created),\n  // use the process global array\n  if (setupProcessHandlers || !config) {\n    // Use process-global handlers for the singleton instance only\n    onExitHandlers = globalThis.onExitHandlers ||= new Set();\n\n    if (!globalThis.exitHandlers) {\n      globalThis.exitHandlers = onExitHandlers;\n    }\n\n    const hasListener = (name, fn) => {\n      return process.listeners(name).includes(fn);\n    };\n\n    // Register process listeners ONLY ONCE (singleton)\n    if (!hasListener('uncaughtException', onExitHandler)) {\n      process.once('uncaughtException', onExitHandler);\n    }\n\n    if (!hasListener('SIGINT', onExitHandler)) {\n      process.once('SIGINT', onExitHandler);\n    }\n\n    if (!hasListener('exit', onExitHandler)) {\n      process.once('exit', onExitHandler);\n    }\n\n  } else {\n    // For non-singleton, just use a local handlers array\n    onExitHandlers = new Set();\n  }\n\n  function onExitHandler() {\n    for (const fn of onExitHandlers) {\n      try {\n        fn();\n        onExitHandlers.delete(fn);\n      } catch (err) {\n        console.error('Error in exit handler:', err);\n      }\n    }\n  }\n\n  const emitKeypress = ({\n    input = stdin,\n    output = stdout,\n    keymap = [],\n    onKeypress,\n    onMousepress,\n    onExit,\n    maxPasteBuffer = MAX_PASTE_BUFFER,\n    escapeCodeTimeout = 500,\n    handleClose = true,\n    hideCursor = false,\n    initialPosition = false,\n    enablePasteMode = false,\n    pasteModeTimeout = 100,\n    keyboardProtocol = false\n  }: {\n\n    input?: NodeJS.ReadableStream;\n    output?: NodeJS.WriteStream;\n    keymap?: Array<{ sequence: string; shortcut: string }>;\n    // eslint-disable-next-line no-unused-vars\n    onKeypress: (input: string, key: readline.Key, close: () => void) => void;\n    // eslint-disable-next-line no-unused-vars\n    onMousepress?: (input: string, key: unknown, close: () => void) => void;\n    onExit?: () => void;\n    maxPasteBuffer?: number;\n    escapeCodeTimeout?: number;\n    handleClose?: boolean;\n    hideCursor?: boolean;\n    initialPosition?: boolean;\n    enablePasteMode?: boolean;\n    pasteModeTimeout?: number;\n    keyboardProtocol?: boolean;\n  }) => {\n    if (!isReadableStream(input)) {\n      throw new Error('Invalid stream passed');\n    }\n\n    const rawModeStream = input as RawModeStream;\n    const isRaw = rawModeStream.isRaw === true;\n    let closed = false;\n    let pasting = false;\n    let initial = true;\n    let sorted = false;\n    let buffer = '';\n    let pasteTimeout: NodeJS.Timeout | null = null;\n    let disableProtocol: (() => void) | null = null;\n\n    const clearPasteState = () => {\n      pasting = false;\n      buffer = '';\n\n      if (pasteTimeout) {\n        clearTimeout(pasteTimeout);\n        pasteTimeout = null;\n      }\n    };\n\n    if (typeof keymap === 'function') {\n      keymap = keymap();\n    }\n\n    async function handleKeypress(input: string, key: readline.Key) {\n      if (input === undefined && key.sequence === '\\x1B[27u' && keyboardProtocol === true) {\n        key.name = 'esc';\n        key.sequence = '\\x1B';\n        key.ctrl = false;\n        key.meta = false;\n        key.shift = false;\n        key.printable = false;\n        onKeypress('', key, close);\n        return;\n      }\n\n      if (initialPosition && initial && key.name === 'position') {\n        const parsed = parsePosition(key.sequence);\n        if (parsed) {\n          initial = false;\n          onKeypress('', parsed, close);\n          return;\n        }\n      }\n\n      if (key.name === 'paste-start' || /\\x1B\\[200~/.test(key.sequence)) {\n        clearPasteState();\n        pasting = true;\n        pasteTimeout = setTimeout(clearPasteState, pasteModeTimeout);\n        return;\n      }\n\n      if (key.name === 'paste-end' || /\\x1B\\[201~/.test(key.sequence)) {\n        clearTimeout(pasteTimeout);\n        pasteTimeout = null;\n\n        if (pasting) {\n          key.name = 'paste';\n          key.sequence = buffer.replace(/\\x1B\\[201~/g, '');\n          key.ctrl = false;\n          key.shift = false;\n          key.meta = false;\n          key.fn = false;\n          key.printable = true;\n          onKeypress(buffer, key, close);\n          clearPasteState();\n        }\n        return;\n      }\n\n      if (pasting) {\n        if (buffer.length < maxPasteBuffer) {\n          buffer += key.sequence?.replace(/\\r/g, '\\n') || '';\n        }\n\n        // Ignore any more characters, but don't clear state yet!\n        return;\n      }\n\n      if (!buffer && isMousepress(key.sequence, key)) {\n        const k = mousepress(key.sequence, Buffer.from(key.sequence));\n        k.mouse = true;\n        onMousepress?.(k, close);\n      } else {\n        let addShortcut = false;\n\n        if (!sorted) {\n          keymap = prioritizeKeymap(keymap);\n          sorted = true;\n        }\n\n        const found = keymap.filter(k => k.sequence === key.sequence);\n\n        if (found.length === 1) {\n          key = { ...key, ...found[0] };\n          addShortcut = false;\n        }\n\n        // console.log({ found, key });\n\n        const shortcut = key.shortcut\n          ? sortShortcutModifier(key.shortcut)\n          : createShortcut(key);\n\n        if (!key.shortcut && hasModifier(key)) {\n          key.shortcut = shortcut;\n        }\n\n        for (const mapping of keymap) {\n          if (mapping.sequence) {\n            if (key.sequence === mapping.sequence && hasMatchingModifiers(key, mapping)) {\n              key = { ...key, ...mapping };\n              addShortcut = false;\n              break;\n            }\n\n            continue;\n          }\n\n          // Only continue comparison if the custom key mapping does not have a sequence\n          if (\n            shortcut === mapping.shortcut ||\n            (key.name && key.name === mapping.shortcut && hasMatchingModifiers(key, mapping))\n          ) {\n            key = { ...key, ...mapping };\n            addShortcut = false;\n            break;\n          }\n        }\n\n        if (/^f[0-9]+$/.test(key.name)) {\n          addShortcut = true;\n        }\n\n        if (addShortcut) {\n          key.shortcut ||= shortcut;\n        }\n\n        key.printable ||= isPrintableCharacter(key.sequence);\n        onKeypress(key.sequence, key, close);\n      }\n    }\n\n    acquireInput(input);\n\n    function close() {\n      if (closed) return;\n      closed = true;\n\n      onExitHandlers.delete(close);\n      if (!isWindows && typeof rawModeStream.setRawMode === 'function') {\n        rawModeStream.setRawMode(isRaw);\n      }\n      if (hideCursor) cursor.show(output);\n      if (onMousepress) disableMouse(output);\n      if (enablePasteMode) disablePaste(output);\n      if (disableProtocol) disableProtocol();\n      if (onKeypress) input.off('keypress', handleKeypress);\n      if (pasteTimeout) clearTimeout(pasteTimeout);\n      input.off('pause', close);\n      releaseInput(input);\n      onExit?.();\n    }\n\n    emitKeypressEvents(input, { escapeCodeTimeout });\n\n    if (onMousepress) {\n      enableMouse(output);\n    }\n\n    if (enablePasteMode === true) {\n      enablePaste(output);\n    }\n\n    resetKeyboardProtocol(output);\n\n    if (keyboardProtocol) {\n      disableProtocol = enableKeyboardProtocol(detectTerminal(), output);\n    }\n\n    // Disable automatic character echoing\n    if (!isWindows && typeof rawModeStream.setRawMode === 'function') {\n      rawModeStream.setRawMode(true);\n    }\n    if (hideCursor) cursor.hide(output);\n    if (onKeypress) input.on('keypress', handleKeypress);\n\n    input.setEncoding('utf8');\n    input.once('pause', close);\n    input.resume();\n\n    if (initialPosition) {\n      cursor.position(output);\n    }\n\n    if (handleClose !== false && !onExitHandlers.has(close)) {\n      onExitHandlers.add(close);\n    }\n\n    return close;\n  };\n\n  return {\n    emitKeypress,\n    onExitHandlers\n  };\n};\n\nexport declare global {\n  var onExitHandlers: Set<() => void>;\n  var exitHandlers: Array<() => void>;\n}\n\nexport const { emitKeypress } = createEmitKeypress();\n\nexport {\n  createShortcut,\n  emitKeypressEvents,\n  isMousepress,\n  isPrintableCharacter,\n  keycodes,\n  mousepress\n};\n\nexport default emitKeypress;\n","import type { ColorLevel } from './types';\n\nconst TRUE_COLOR_PATTERN = /^(truecolor|24bits?)$/;\n\nexport const has256Color = (value: string | undefined): boolean => {\n  return Boolean(value?.match(/256/));\n};\n\nexport const supportsTrueColor = (value: string | undefined): boolean => {\n  return Boolean(value?.match(TRUE_COLOR_PATTERN));\n};\n\nexport const getColorSupport = (env: NodeJS.ProcessEnv) => {\n  return {\n    supports256Color: has256Color(env.TERM) || has256Color(env.COLORTERM),\n    supportsTrueColor: supportsTrueColor(env.COLORTERM)\n  };\n};\n\nconst NO_BASIC_COLOR_TERMINALS = new Set([\n  'dumb',\n  'linux_console',\n  'none',\n  'unknown',\n  'vt100'\n]);\n\nexport const getColorLevel = (\n  env: NodeJS.ProcessEnv,\n  terminal?: string | null,\n  colorSupport = getColorSupport(env)\n): ColorLevel => {\n  const { supports256Color, supportsTrueColor } = colorSupport;\n\n  if (supportsTrueColor) {\n    return 3;\n  }\n\n  if (supports256Color) {\n    return 2;\n  }\n\n  if (terminal && !NO_BASIC_COLOR_TERMINALS.has(terminal)) {\n    return 1;\n  }\n\n  if (env.TERM_PROGRAM || env.COLORTERM || env.TERMUX_VERSION) {\n    return 1;\n  }\n\n  return 0;\n};\n","import type { DetectOptions } from './types';\nimport path from 'node:path';\n\nexport const AMBIGUOUS_ENV_TERMINALS = new Set([\n  'linux_console',\n  'truecolor_terminal',\n  'vt100',\n  'xterm',\n  'xterm_256color',\n  'xterm_truecolor'\n]);\n\nexport const SHELL_PROCESS_NAMES = new Set([\n  'bash',\n  'csh',\n  'dash',\n  'fish',\n  'ksh',\n  'login',\n  'node',\n  'nodejs',\n  'nu',\n  'sh',\n  'sudo',\n  'tcsh',\n  'zsh'\n]);\n\nexport const normalizeIdentifier = (value: string): string => {\n  return value\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, '_');\n};\n\nexport const normalizeAppName = (value: string, platform: NodeJS.Platform): string => {\n  const appName = platform === 'darwin' ? path.parse(value).name : value;\n  return normalizeIdentifier(appName);\n};\n\nexport const isAmbiguousEnvResult = (\n  terminal: string | null,\n  options: DetectOptions = {}\n): boolean => {\n  if (!terminal) {\n    return true;\n  }\n\n  if (options.preferOuter && (terminal === 'tmux' || terminal === 'screen')) {\n    return true;\n  }\n\n  return AMBIGUOUS_ENV_TERMINALS.has(terminal);\n};\n\nexport const hasKonsoleEnvironment = (env: NodeJS.ProcessEnv): boolean => {\n  return Object.keys(env).some(envVar => /konsole/i.test(envVar));\n};\n\nexport const normalizeParentProcessName = (processName: string): string | null => {\n  const normalized = normalizeIdentifier(path.parse(processName).name);\n\n  switch (normalized) {\n    case 'alacritty':\n    case 'aterm':\n    case 'atomic_terminal':\n    case 'eterm':\n    case 'foot':\n    case 'ghostty':\n    case 'hyper':\n    case 'kitty':\n    case 'konsole':\n    case 'kuake':\n    case 'mate_terminal':\n    case 'mrxvt':\n    case 'powershell':\n    case 'putty':\n    case 'qterminal':\n    case 'rio':\n    case 'rxvt':\n    case 'terminator':\n    case 'terminology':\n    case 'tilda':\n    case 'tmux':\n    case 'warp':\n    case 'wezterm':\n    case 'wterm':\n      return normalized;\n    case 'apple_terminal':\n    case 'terminal':\n      return 'terminal';\n    case 'cmd':\n      return 'cmd';\n    case 'code':\n    case 'code_insiders':\n      return 'vscode';\n    case 'conhost':\n      return 'conhost';\n    case 'gnome':\n    case 'gnome_terminal':\n    case 'gnome_terminal_server':\n    case 'guake':\n      return 'gnome_terminal';\n    case 'iterm':\n    case 'iterm2':\n      return 'iterm';\n    case 'login':\n    case 'linux':\n      return 'linux_console';\n    case 'pwsh':\n      return 'powershell';\n    case 'screen':\n      return 'screen';\n    case 'terminal_app':\n      return 'terminal_app';\n    case 'urxvt':\n    case 'urxvt256c':\n    case 'urxvt256c_ml':\n    case 'urxvt_ml':\n      return 'rxvt';\n    case 'wt':\n    case 'windows_terminal':\n      return 'windows_terminal';\n    case 'xfce':\n    case 'xfce_terminal':\n    case 'xfce4_terminal':\n      return 'xfce4_terminal';\n    default: {\n      if (normalized.startsWith('gnome_terminal')) {\n        return 'gnome_terminal';\n      }\n\n      if (normalized.startsWith('warp')) {\n        return 'warp';\n      }\n\n      return null;\n    }\n  }\n};\n","import type { DetectOptions, DetectionResult } from './types';\nimport { getColorSupport } from './color';\nimport {\n  hasKonsoleEnvironment,\n  normalizeAppName,\n  normalizeIdentifier\n} from './normalize';\n\nconst colorVariant = (\n  terminal: string,\n  supports256Color: boolean,\n  supportsTrueColor: boolean\n): string => {\n  return supports256Color || supportsTrueColor ? `${terminal}_256color` : terminal;\n};\n\nconst normalizeTermProgram = (termProgram: string): string | null => {\n  switch (termProgram) {\n    case 'apple_terminal':\n      return 'terminal';\n    case 'eterm':\n      return 'eterm';\n    case 'gnome_terminal':\n    case 'gnome_terminal_server':\n      return 'gnome_terminal';\n    case 'hyper':\n      return 'hyper';\n    case 'iterm_app':\n    case 'iterm':\n    case 'iterm2':\n      return 'iterm';\n    case 'kitty':\n      return 'kitty';\n    case 'konsole':\n      return 'konsole';\n    case 'mate_terminal':\n      return 'mate_terminal';\n    case 'powershell':\n      return 'powershell';\n    case 'putty':\n      return 'putty';\n    case 'qterminal':\n      return 'qterminal';\n    case 'rio':\n      return 'rio';\n    case 'rxvt':\n      return 'rxvt';\n    case 'terminal_app':\n      return 'terminal_app';\n    case 'terminal':\n      return 'terminal';\n    case 'terminator':\n      return 'terminator';\n    case 'termux':\n      return 'termux';\n    case 'vscode':\n      return 'vscode';\n    case 'warp':\n      return 'warp';\n    case 'wezterm':\n      return 'wezterm';\n    case 'xfce4_terminal':\n      return 'xfce4_terminal';\n    case 'alacritty':\n      return 'alacritty';\n    default:\n      return null;\n  }\n};\n\nconst detectFromTerm = (\n  term: string,\n  env: NodeJS.ProcessEnv,\n  platform: NodeJS.Platform\n): string => {\n  const { supports256Color, supportsTrueColor } = getColorSupport(env);\n\n  if (term === 'xterm' || term === 'xterm_256color') {\n    if (supportsTrueColor) {\n      return 'xterm_truecolor';\n    }\n\n    if (env.VTE_VERSION) {\n      const vteVersion = Number.parseInt(env.VTE_VERSION, 10);\n      if (vteVersion >= 3803) {\n        return colorVariant('gnome_terminal', supports256Color, supportsTrueColor);\n      }\n    }\n\n    if (hasKonsoleEnvironment(env)) {\n      return colorVariant('konsole', supports256Color, supportsTrueColor);\n    }\n\n    if (platform === 'darwin') {\n      return 'terminal';\n    }\n\n    return term;\n  }\n\n  switch (term) {\n    case 'linux':\n      return 'linux_console';\n    case 'gnome':\n    case 'gnome_256color':\n    case 'gnome_terminal':\n    case 'gnome_terminal_256color':\n    case 'guake':\n    case 'terminator':\n      return colorVariant('gnome_terminal', supports256Color, supportsTrueColor);\n    case 'konsole':\n      return colorVariant('konsole', supports256Color, supportsTrueColor);\n    case 'rxvt':\n    case 'rxvt_xpm':\n    case 'rxvt_unicode':\n    case 'rxvt_unicode_256color':\n    case 'urxvt':\n    case 'urxvt_ml':\n    case 'urxvt256c':\n    case 'urxvt256c_ml':\n      return colorVariant('rxvt', term === 'rxvt' || supports256Color, supportsTrueColor);\n    case 'xfce':\n    case 'xfce_terminal':\n    case 'xfce4_terminal':\n      return 'xfce4_terminal';\n    case 'eterm':\n      return colorVariant('eterm', supports256Color, supportsTrueColor);\n    case 'xterm_kitty':\n    case 'kitty':\n      return 'kitty';\n    case 'screen':\n    case 'screen_256color':\n      return 'screen';\n    case 'tmux':\n    case 'tmux_256color':\n      return 'tmux';\n    case 'vt100':\n      return 'vt100';\n    case 'aterm':\n    case 'atomic_terminal':\n    case 'dopamine':\n    case 'foot':\n    case 'ghostty':\n    case 'kuake':\n    case 'rio':\n    case 'terminology':\n    case 'termux':\n    case 'tilda':\n    case 'wterm':\n    case 'mrxvt':\n      return term;\n    default:\n      if (/screen/.test(term)) return 'screen';\n      if (/tmux/.test(term)) return 'tmux';\n      if (/rxvt/.test(term)) return 'rxvt';\n      if (/vt100/.test(term)) return 'vt100';\n      if (/linux/.test(term)) return 'linux_console';\n      if (/alacritty/.test(term)) return 'alacritty';\n      if (/dopamine/.test(term)) return 'dopamine';\n      if (/kitty/.test(term)) return 'kitty';\n      if (/ghostty/.test(term)) return 'ghostty';\n      if (/^foot/.test(term)) return 'foot';\n      if (/^rio/.test(term)) return 'rio';\n      return term;\n  }\n};\n\nexport const detectFromEnvResult = (\n  options: DetectOptions = {}\n): DetectionResult | null => {\n  const env = options.env ?? process.env;\n  const platform = options.platform ?? process.platform;\n  const term = env.TERM ? normalizeIdentifier(env.TERM) : undefined;\n\n  if (platform === 'android' && env.TERMUX_VERSION) {\n    return { terminal: 'termux', source: 'env', generic: term };\n  }\n\n  if (!options.preferOuter && term) {\n    if (term.startsWith('tmux')) {\n      return { terminal: 'tmux', source: 'env', generic: term };\n    }\n    if (term.startsWith('screen')) {\n      return { terminal: 'screen', source: 'env', generic: term };\n    }\n  }\n\n  if (env.KITTY_PID) {\n    return { terminal: 'kitty', source: 'env', generic: term };\n  }\n\n  if (env.GHOSTTY_RESOURCES_DIR) {\n    return { terminal: 'ghostty', source: 'env', generic: term };\n  }\n\n  if (env.ALACRITTY_SOCKET || env.ALACRITTY_LOG) {\n    return { terminal: 'alacritty', source: 'env', generic: term };\n  }\n\n  const termProgram = env.TERM_PROGRAM\n    ? normalizeAppName(env.TERM_PROGRAM, platform)\n    : undefined;\n\n  if (termProgram) {\n    return {\n      terminal: normalizeTermProgram(termProgram) ?? termProgram,\n      source: 'env',\n      generic: term\n    };\n  }\n\n  if (\n    typeof env.VSCODE_PID !== 'undefined' ||\n    (typeof env.TERM_PROGRAM_VERSION !== 'undefined' &&\n      /vscode/i.test(env.TERM_PROGRAM_VERSION))\n  ) {\n    return { terminal: 'vscode', source: 'env', generic: term };\n  }\n\n  if (term && term !== 'unknown') {\n    return {\n      terminal: detectFromTerm(term, env, platform),\n      source: 'env',\n      generic: term\n    };\n  }\n\n  const colorTerm = env.COLORTERM ? normalizeIdentifier(env.COLORTERM) : undefined;\n\n  if (colorTerm === 'truecolor' || colorTerm === '24bit' || colorTerm === '24bits') {\n    return { terminal: 'truecolor_terminal', source: 'env', generic: term };\n  }\n\n  if (colorTerm) {\n    return { terminal: colorTerm, source: 'env', generic: term };\n  }\n\n  return null;\n};\n\nexport const detectFromEnv = (options: DetectOptions = {}): string | null => {\n  return detectFromEnvResult(options)?.terminal ?? null;\n};\n","import type { DetectOptions, DetectionResult, ExecFileSync, ParentProcessInfo } from './types';\nimport { execFileSync as nodeExecFileSync } from 'node:child_process';\nimport { getColorSupport } from './color';\nimport { normalizeIdentifier, normalizeParentProcessName, SHELL_PROCESS_NAMES } from './normalize';\n\nconst runPs = (run: ExecFileSync, args: string[]): string => {\n  return run('ps', args, {\n    encoding: 'utf8',\n    timeout: 1000,\n    stdio: ['ignore', 'pipe', 'ignore']\n  }) as string;\n};\n\nexport const getParentProcess = (\n  pid: number,\n  options: Pick<DetectOptions, 'execFileSync'> = {}\n): ParentProcessInfo | null => {\n  const run = options.execFileSync ?? nodeExecFileSync;\n  const parentPid = Number.parseInt(\n    runPs(run, ['-o', 'ppid=', '-p', String(pid)]).trim(),\n    10\n  );\n\n  if (!Number.isFinite(parentPid) || parentPid <= 1) {\n    return null;\n  }\n\n  const appName = runPs(run, ['-o', 'comm=', '-p', String(parentPid)]).trim();\n\n  if (!appName) {\n    return null;\n  }\n\n  return {\n    pid: parentPid,\n    appName\n  };\n};\n\nconst colorVariant = (\n  terminal: string,\n  supports256Color: boolean,\n  supportsTrueColor: boolean\n): string => {\n  return supports256Color || supportsTrueColor ? `${terminal}_256color` : terminal;\n};\n\nconst applyParentColorVariant = (terminal: string, env: NodeJS.ProcessEnv): string => {\n  const { supports256Color, supportsTrueColor } = getColorSupport(env);\n\n  switch (terminal) {\n    case 'eterm':\n    case 'konsole':\n    case 'rxvt':\n      return colorVariant(terminal, supports256Color, supportsTrueColor);\n    case 'gnome_terminal':\n    case 'terminator':\n      return colorVariant('gnome_terminal', supports256Color, supportsTrueColor);\n    default:\n      return terminal;\n  }\n};\n\nexport const detectFromParentProcessResult = (\n  options: DetectOptions = {}\n): DetectionResult | null => {\n  const env = options.env ?? process.env;\n  const platform = options.platform ?? process.platform;\n\n  if (platform === 'win32' || env.SSH_CONNECTION) {\n    return null;\n  }\n\n  const seenPids = new Set<number>();\n  let pid = options.pid ?? process.pid;\n\n  for (let depth = 0; depth < 12; depth += 1) {\n    if (seenPids.has(pid)) {\n      break;\n    }\n\n    seenPids.add(pid);\n\n    try {\n      const parent = getParentProcess(pid, options);\n\n      if (!parent) {\n        break;\n      }\n\n      const normalized = normalizeParentProcessName(parent.appName);\n\n      if (normalized === 'screen' || normalized === 'tmux') {\n        if (!options.preferOuter) {\n          return {\n            terminal: normalized,\n            source: 'parent',\n            appName: parent.appName,\n            pid: parent.pid\n          };\n        }\n\n        pid = parent.pid;\n        continue;\n      }\n\n      if (normalized) {\n        return {\n          terminal: applyParentColorVariant(normalized, env),\n          source: 'parent',\n          appName: parent.appName,\n          pid: parent.pid\n        };\n      }\n\n      if (!SHELL_PROCESS_NAMES.has(normalizeIdentifier(parent.appName))) {\n        break;\n      }\n\n      pid = parent.pid;\n    } catch {\n      break;\n    }\n  }\n\n  return null;\n};\n\nexport const detectFromParentProcess = (options: DetectOptions = {}): string | null => {\n  return detectFromParentProcessResult(options)?.terminal ?? null;\n};\n","import type { DetectOptions, DetectionResult } from './types';\n\nexport const detectFromProcessTitleResult = (\n  options: Pick<DetectOptions, 'processTitle'> = {}\n): DetectionResult | null => {\n  const processTitle = (options.processTitle ?? process.title)?.toLowerCase() ?? '';\n\n  if (/^alacritty/.test(processTitle)) {\n    return {\n      terminal: 'alacritty',\n      source: 'process_title'\n    };\n  }\n\n  if (/^kitty/.test(processTitle)) {\n    return {\n      terminal: 'kitty',\n      source: 'process_title'\n    };\n  }\n\n  if (/^wezterm/.test(processTitle)) {\n    return {\n      terminal: 'wezterm',\n      source: 'process_title'\n    };\n  }\n\n  if (/^hyper/.test(processTitle)) {\n    return {\n      terminal: 'hyper',\n      source: 'process_title'\n    };\n  }\n\n  if (/^foot/.test(processTitle)) {\n    return {\n      terminal: 'foot',\n      source: 'process_title'\n    };\n  }\n\n  if (/^rio/.test(processTitle)) {\n    return {\n      terminal: 'rio',\n      source: 'process_title'\n    };\n  }\n\n  if (/^ghostty/.test(processTitle)) {\n    return {\n      terminal: 'ghostty',\n      source: 'process_title'\n    };\n  }\n\n  if (/bash/.test(processTitle)) {\n    return {\n      terminal: 'bash',\n      source: 'process_title'\n    };\n  }\n\n  if (/zsh/.test(processTitle)) {\n    return {\n      terminal: 'zsh',\n      source: 'process_title'\n    };\n  }\n\n  if (/ksh/.test(processTitle)) {\n    return {\n      terminal: 'ksh',\n      source: 'process_title'\n    };\n  }\n\n  if (/fish/.test(processTitle)) {\n    return {\n      terminal: 'fish',\n      source: 'process_title'\n    };\n  }\n\n  if (/csh/.test(processTitle)) {\n    return {\n      terminal: 'csh',\n      source: 'process_title'\n    };\n  }\n\n  if (/tcsh/.test(processTitle)) {\n    return {\n      terminal: 'tcsh',\n      source: 'process_title'\n    };\n  }\n\n  if (/pwsh/.test(processTitle)) {\n    return {\n      terminal: 'powershell',\n      source: 'process_title'\n    };\n  }\n\n  if (/powershell/.test(processTitle)) {\n    return {\n      terminal: 'powershell',\n      source: 'process_title'\n    };\n  }\n\n  if (/cmd/.test(processTitle)) {\n    return {\n      terminal: 'cmd',\n      source: 'process_title'\n    };\n  }\n\n  if (/sh$/.test(processTitle)) {\n    return {\n      terminal: 'sh',\n      source: 'process_title'\n    };\n  }\n\n  if (/^node/.test(processTitle)) {\n    return {\n      terminal: 'node',\n      source: 'process_title'\n    };\n  }\n\n  return null;\n};\n\nexport const detectFromProcessTitle = (): string | null => {\n  return detectFromProcessTitleResult()?.terminal ?? null;\n};\n","import type { DetectOptions, DetectionResult, ExecFileSync } from './types';\nimport { execFileSync as nodeExecFileSync } from 'node:child_process';\nimport { normalizeIdentifier } from './normalize';\n\nconst runShellTerm = (run: ExecFileSync): string => {\n  return run('sh', ['-c', 'printf %s \"$TERM\"'], {\n    encoding: 'utf8',\n    timeout: 1000,\n    stdio: ['ignore', 'pipe', 'ignore']\n  }) as string;\n};\n\nexport const detectFromShellResult = (\n  options: DetectOptions = {}\n): DetectionResult | null => {\n  const env = options.env ?? process.env;\n  const platform = options.platform ?? process.platform;\n\n  try {\n    if (platform === 'win32') {\n      if (env.WT_SESSION) {\n        return {\n          terminal: 'windows_terminal',\n          source: 'shell'\n        };\n      }\n\n      const shell = env.COMSPEC?.toLowerCase() || '';\n      if (/powershell/i.test(shell)) {\n        return {\n          terminal: 'powershell',\n          source: 'shell'\n        };\n      }\n\n      if (/pwsh/i.test(shell)) {\n        return {\n          terminal: 'powershell',\n          source: 'shell'\n        };\n      }\n\n      if (/cmd\\.exe/i.test(shell)) {\n        return {\n          terminal: 'cmd',\n          source: 'shell'\n        };\n      }\n\n      if (/wt\\.exe/i.test(shell)) {\n        return {\n          terminal: 'windows_terminal',\n          source: 'shell'\n        };\n      }\n\n      if (/conhost\\.exe/i.test(shell)) {\n        return {\n          terminal: 'conhost',\n          source: 'shell'\n        };\n      }\n\n      return {\n        terminal: 'windows_cmd',\n        source: 'shell'\n      };\n    }\n\n    const run = options.execFileSync ?? nodeExecFileSync;\n    const terminal = normalizeIdentifier(runShellTerm(run));\n\n    if (!terminal) {\n      return null;\n    }\n\n    if (!options.preferOuter) {\n      if (terminal.startsWith('tmux')) {\n        return {\n          terminal: 'tmux',\n          source: 'shell'\n        };\n      }\n\n      if (terminal.startsWith('screen')) {\n        return {\n          terminal: 'screen',\n          source: 'shell'\n        };\n      }\n    }\n\n    return {\n      terminal,\n      source: 'shell'\n    };\n  } catch {\n    return null;\n  }\n};\n\nexport const detectFromShell = (options: DetectOptions = {}): string | null => {\n  return detectFromShellResult(options)?.terminal ?? null;\n};\n","import type { DetectOptions, DetectionResult, TerminalDetails } from './types';\nimport { detectFromEnvResult } from './env';\nimport { getColorLevel, getColorSupport } from './color';\nimport { isAmbiguousEnvResult } from './normalize';\nimport { detectFromParentProcessResult } from './parent';\nimport { detectFromProcessTitleResult } from './process-title';\nimport { detectFromShellResult } from './shell';\n\nconst getTerminalResult = (options: DetectOptions): DetectionResult => {\n  const envTerminal = detectFromEnvResult(options);\n  let result = envTerminal;\n\n  if (\n    options.resolveAmbiguousFromParent &&\n    isAmbiguousEnvResult(envTerminal?.terminal ?? null, options)\n  ) {\n    result = detectFromParentProcessResult(options) ?? result;\n  }\n\n  result ??= detectFromShellResult(options);\n  result ??= detectFromProcessTitleResult(options);\n\n  return (\n    result ?? {\n      terminal: envTerminal?.terminal ?? 'unknown',\n      source: envTerminal ? envTerminal.source : 'unknown',\n      generic: envTerminal?.generic\n    }\n  );\n};\n\nexport const detectTerminalDetails = (options: DetectOptions = {}): TerminalDetails => {\n  const env = options.env ?? process.env;\n  const stdout = options.stdout ?? process.stdout;\n  const isTTY = Boolean(stdout.isTTY);\n  const isSSH = Boolean(env.SSH_CONNECTION);\n  const term = env.TERM?.trim();\n  const termProgram = env.TERM_PROGRAM?.trim();\n  const colorTerm = env.COLORTERM?.trim();\n  const colorSupport = getColorSupport(env);\n\n  if (!isTTY && !options.unpipe) {\n    return {\n      terminal: 'none',\n      source: 'none',\n      isTTY,\n      isSSH,\n      isAmbiguous: false,\n      supportsColor: false,\n      colorLevel: 0,\n      supports256Color: colorSupport.supports256Color,\n      supportsTrueColor: colorSupport.supportsTrueColor,\n      term,\n      termProgram,\n      colorTerm,\n      generic: 'none'\n    };\n  }\n\n  const result = getTerminalResult(options);\n  const colorLevel = getColorLevel(env, result.terminal, colorSupport);\n\n  return {\n    terminal: result.terminal,\n    source: result.source,\n    isTTY,\n    isSSH,\n    isAmbiguous: result.source === 'env' && isAmbiguousEnvResult(result.terminal, options),\n    colorLevel,\n    supportsColor: colorLevel > 0,\n    supports256Color: colorSupport.supports256Color,\n    supportsTrueColor: colorSupport.supportsTrueColor,\n    term,\n    termProgram,\n    colorTerm,\n    generic: result.generic ?? term?.toLowerCase() ?? 'unknown',\n    pid: result.pid,\n    appName: result.appName\n  };\n};\n\nexport const detectTerminal = (options: DetectOptions = {}): string => {\n  return detectTerminalDetails(options).terminal;\n};\n","// This file is a modified version of the original file from the readline module of Node.js\n// Copyright Joyent, Inc. and other Node contributors.\n// SPDX-License-Identifier: MIT\nimport { StringDecoder } from 'node:string_decoder';\nimport { clearTimeout, setTimeout } from 'node:timers';\nimport { charLengthAt, CSI, emitKeys } from '~/keypress';\n\nconst { kEscape } = CSI;\nconst KEYPRESS_DECODER = Symbol('keypress-decoder');\nconst ESCAPE_DECODER = Symbol('escape-decoder');\nconst kSawKeyPress = Symbol('saw-key-press');\n\n// GNU readline library - keyseq-timeout is 500ms (default)\nconst ESCAPE_CODE_TIMEOUT = 500;\n\n/**\n * accepts a readable Stream instance and makes it emit \"keypress\" events\n */\n\nexport function emitKeypressEvents(stream, iface = {}) {\n  if (stream[KEYPRESS_DECODER]) return;\n\n  stream[KEYPRESS_DECODER] = new StringDecoder('utf8');\n\n  stream[ESCAPE_DECODER] = emitKeys(stream);\n  stream[ESCAPE_DECODER].next();\n\n  const triggerEscape = () => stream[ESCAPE_DECODER].next('');\n  const { escapeCodeTimeout = ESCAPE_CODE_TIMEOUT } = iface;\n  let timeoutId;\n\n  function onData(input) {\n    if (stream.listenerCount('keypress') > 0) {\n      const string = stream[KEYPRESS_DECODER].write(input);\n      if (string) {\n        clearTimeout(timeoutId);\n\n        // This supports characters of length 2.\n        iface[kSawKeyPress] = charLengthAt(string, 0) === string.length;\n        iface.isCompletionEnabled = false;\n\n        let length = 0;\n        for (const character of string) {\n          length += character.length;\n\n          if (length === string.length) {\n            iface.isCompletionEnabled = true;\n          }\n\n          try {\n            stream[ESCAPE_DECODER].next(character);\n            // Escape letter at the tail position\n            if (length === string.length && character === kEscape) {\n              timeoutId = setTimeout(triggerEscape, escapeCodeTimeout);\n            }\n          } catch (err) {\n            // If the generator throws (it could happen in the `keypress`\n            // event), we need to restart it.\n            stream[ESCAPE_DECODER] = emitKeys(stream);\n            stream[ESCAPE_DECODER].next();\n            throw err;\n          }\n        }\n      }\n    } else {\n      // Nobody's watching anyway\n      stream.off('data', onData);\n      stream.on('newListener', onNewListener);\n    }\n  }\n\n  function onNewListener(event) {\n    if (event === 'keypress') {\n      stream.on('data', onData);\n      stream.off('newListener', onNewListener);\n    }\n  }\n\n  if (stream.listenerCount('keypress') > 0) {\n    stream.on('data', onData);\n  } else {\n    stream.on('newListener', onNewListener);\n  }\n}\n\n","/* eslint-disable no-extra-parens, no-control-regex */\n// This file is a modified version of the original file from the readline module of Node.js\n// Copyright Joyent, Inc. and other Node contributors.\n// SPDX-License-Identifier: MIT\nexport const kEscape = '\\x1b';\nexport const kSubstringSearch = Symbol('kSubstringSearch');\nexport const kUTF16SurrogateThreshold = 0x10000; // 2 ** 16\n\nexport function CSI(strings, ...args) {\n  let ret = `${kEscape}[`;\n  for (let n = 0; n < strings.length; n++) {\n    ret += strings[n];\n    if (n < args.length) {\n      ret += args[n];\n    }\n  }\n  return ret;\n}\n\nCSI.kEscape = kEscape;\nCSI.kClearToLineBeginning = CSI`1K`;\nCSI.kClearToLineEnd = CSI`0K`;\nCSI.kClearLine = CSI`2K`;\nCSI.kClearScreenDown = CSI`0J`;\n\n// CSI u (fixterms/kitty) protocol sequences for enabling enhanced key reporting\n// Enable with: process.stdout.write(CSI_U_ENABLE)\n// Disable with: process.stdout.write(CSI_U_DISABLE)\nexport const CSI_U_ENABLE = `${kEscape}[>4;1m`; // modifyOtherKeys mode 1\nexport const CSI_U_DISABLE = `${kEscape}[>4;0m`;\nexport const KITTY_ENABLE = `${kEscape}[>1u`; // kitty protocol\nexport const KITTY_DISABLE = `${kEscape}[<u`;\n\n// TODO(BridgeAR): Treat combined characters as single character, i.e,\n// 'a\\u0301' and '\\u0301a' (both have the same visual output).\n// Check Canonical_Combining_Class in\n// http://userguide.icu-project.org/strings/properties\nexport function charLengthLeft(str, i) {\n  if (i <= 0) { return 0; }\n  if ((i > 1 &&\n      str.codePointAt(i - 2) >= kUTF16SurrogateThreshold) ||\n      str.codePointAt(i - 1) >= kUTF16SurrogateThreshold) {\n    return 2;\n  }\n  return 1;\n}\n\nexport function charLengthAt(str, i) {\n  if (str.length <= i) {\n    // Pretend to move to the right. This is necessary to autocomplete while\n    // moving to the right.\n    return 1;\n  }\n  return str.codePointAt(i) >= kUTF16SurrogateThreshold ? 2 : 1;\n}\n\n/*\n  Some patterns seen in terminal key escape codes, derived from combos seen\n  at http://www.midnight-commander.org/browser/lib/tty/key.c\n\n  ESC letter\n  ESC [ letter\n  ESC [ modifier letter\n  ESC [ 1 ; modifier letter\n  ESC [ num char\n  ESC [ num ; modifier char\n  ESC O letter\n  ESC O modifier letter\n  ESC O 1 ; modifier letter\n  ESC N letter\n  ESC [ [ num ; modifier char\n  ESC [ [ 1 ; modifier letter\n  ESC ESC [ num char\n  ESC ESC O letter\n\n  - char is usually ~ but $ and ^ also happen with rxvt\n  - modifier is 1 +\n                (shift     * 1) +\n                (left_alt  * 2) +\n                (ctrl      * 4) +\n                (right_alt * 8)\n  - two leading ESCs apparently mean the same as one leading ESC\n\n  CSI u (fixterms/kitty) format:\n  ESC [ charcode ; modifier u\n\n  - charcode is the unicode codepoint\n  - modifier follows same formula as above\n  - e.g. Ctrl+Shift+S = ESC [ 115 ; 6 u (115 = 's', 6 = 1 + 1 + 4)\n*/\n\nexport function * emitKeys(stream) {\n  while (true) {\n    let ch = yield;\n    let s = ch;\n    let escaped = false;\n\n    const key = {\n      sequence: null,\n      name: undefined,\n      ctrl: false,\n      meta: false,\n      shift: false,\n      fn: false\n    };\n\n    if (ch === kEscape) {\n      escaped = true;\n      s += (ch = yield);\n\n      if (ch === kEscape) {\n        s += (ch = yield);\n      }\n    }\n\n    if (escaped && (ch === 'O' || ch === '[')) {\n      // ANSI escape sequence\n      let code = ch;\n      let modifier = 0;\n\n      if (ch === 'O') {\n        // ESC O letter\n        // ESC O modifier letter\n        s += (ch = yield);\n\n        if (ch >= '0' && ch <= '9') {\n          modifier = (ch >> 0) - 1;\n          s += (ch = yield);\n        }\n\n        code += ch;\n      } else if (ch === '[') {\n        // ESC [ letter\n        // ESC [ modifier letter\n        // ESC [ [ modifier letter\n        // ESC [ [ num char\n        s += (ch = yield);\n\n        if (ch === '[') {\n          // \\x1b[[A\n          //      ^--- escape codes might have a second bracket\n          code += ch;\n          s += (ch = yield);\n        }\n\n        /*\n         * Here and later we try to buffer just enough data to get\n         * a complete ascii sequence.\n         *\n         * We have basically two classes of ascii characters to process:\n         *\n         *\n         * 1. `\\x1b[24;5~` should be parsed as { code: '[24~', modifier: 5 }\n         *\n         * This particular example is featuring Ctrl+F12 in xterm.\n         *\n         *  - `;5` part is optional, e.g. it could be `\\x1b[24~`\n         *  - first part can contain one or two digits\n         *  - there is also special case when there can be 3 digits\n         *    but without modifier. They are the case of paste bracket mode\n         *\n         * So the generic regexp is like /^(?:\\d\\d?(;\\d)?[~^$]|\\d{3}~)$/\n         *\n         *\n         * 2. `\\x1b[1;5H` should be parsed as { code: '[H', modifier: 5 }\n         *\n         * This particular example is featuring Ctrl+Home in xterm.\n         *\n         *  - `1;5` part is optional, e.g. it could be `\\x1b[H`\n         *  - `1;` part is optional, e.g. it could be `\\x1b[5H`\n         *\n         * So the generic regexp is like /^((\\d;)?\\d)?[A-Za-z]$/\n         *\n         */\n        const cmdStart = s.length - 1;\n\n        // Skip one or two leading digits\n        if (ch >= '0' && ch <= '9') {\n          s += (ch = yield);\n\n          if (ch >= '0' && ch <= '9') {\n            s += (ch = yield);\n\n            if (ch >= '0' && ch <= '9') {\n              s += (ch = yield);\n            }\n          }\n        }\n\n        // skip modifier\n        if (ch === ';') {\n          s += (ch = yield);\n\n          if (ch >= '0' && ch <= '9') {\n            s += yield;\n          }\n        }\n\n        /*\n         * We buffered enough data, now trying to extract code\n         * and modifier from it\n         */\n        const cmd = s.slice(cmdStart);\n        let match;\n\n        // Special key names for CSI u parsing\n        const SPECIAL_NAMES = {\n          8: 'backspace', // BS (ctrl+h legacy)\n          9: 'tab',\n          10: 'enter', // LF\n          13: 'return', // CR\n          27: 'escape',\n          32: 'space',\n          127: 'backspace' // DEL\n        };\n\n        // CSI u (kitty) format: \\x1b[<charcode>;<modifier>u\n        // e.g. Ctrl+Shift+S = \\x1b[115;6u or \\x1b[83;5u\n        if ((match = /^(\\d+);(\\d+)u$/.exec(cmd))) {\n          const charCode = parseInt(match[1], 10);\n          modifier = parseInt(match[2], 10) - 1;\n          const char = String.fromCharCode(charCode);\n          key.name = SPECIAL_NAMES[charCode] || char.toLowerCase();\n          key.ctrl = Boolean(modifier & 4);\n          key.meta = Boolean(modifier & 10);\n          key.shift = Boolean(modifier & 1) || char !== char.toLowerCase();\n          key.code = `[${match[1]}u`;\n          key.sequence = s;\n\n          stream.emit('keypress', undefined, key);\n          continue;\n        }\n\n        // modifyOtherKeys format: \\x1b[27;<modifier>;<charcode>~\n        // e.g. Ctrl+Shift+S = \\x1b[27;6;115~\n        if ((match = /^27;(\\d+);(\\d+)~$/.exec(cmd))) {\n          modifier = parseInt(match[1], 10) - 1;\n          const charCode = parseInt(match[2], 10);\n          const char = String.fromCharCode(charCode);\n          key.name = SPECIAL_NAMES[charCode] || char.toLowerCase();\n          key.ctrl = Boolean(modifier & 4);\n          key.meta = Boolean(modifier & 10);\n          key.shift = Boolean(modifier & 1) || char !== char.toLowerCase();\n          key.code = `[27;${match[1]};${match[2]}~`;\n          key.sequence = s;\n\n          stream.emit('keypress', undefined, key);\n          continue;\n        }\n\n        if ((match = /^(?:(\\d\\d?)(?:;(\\d))?([~^$])|(\\d{3}~))$/.exec(cmd))) {\n          if (match[4]) {\n            code += match[4];\n          } else {\n            code += match[1] + match[3];\n            modifier = (match[2] || 1) - 1;\n          }\n        } else if ((match = /^((\\d;)?(\\d))?([A-Za-z])$/.exec(cmd))) {\n          code += match[4];\n          modifier = (match[3] || 1) - 1;\n        } else {\n          code += cmd;\n        }\n      }\n\n      if (/\\[(?:1[5-9]|2[0-2]);10/.test(code)) {\n        s += ch = yield;\n      }\n\n      // Parse the key modifier\n      key.ctrl = Boolean(modifier & 4);\n      key.meta = Boolean(modifier & 10);\n      key.shift = Boolean(modifier & 1);\n      key.code = code;\n\n      if (!key.meta) {\n        const parts = [...s];\n\n        if (parts[0] === '\\u001b' && parts[1] === '\\u001b') {\n          key.meta = true;\n        }\n      }\n\n      if (/\\x1B\\[1;[59][FH]/.test(s)) {\n        key.fn = true;\n      }\n\n      // Parse the key itself\n      switch (code) {\n        case '[M': {\n          key.name = 'mouse';\n          s += (ch = yield); // button-byte\n          s += (ch = yield); // x-coordinate\n          s += (ch = yield); // y-coordinate\n          break;\n        }\n\n        /* xterm/gnome ESC [ letter (with modifier) */\n        case '[P': key.name = 'f1'; key.fn = true; break;\n        case '[Q': key.name = 'f2'; key.fn = true; break;\n        case '[R': key.name = 'f3'; key.fn = true; break;\n        case '[S': key.name = 'f4'; key.fn = true; break;\n\n        /* xterm/gnome ESC O letter (without modifier) */\n        case 'OP': key.name = 'f1'; key.fn = true; break;\n        case 'OQ': key.name = 'f2'; key.fn = true; break;\n        case 'OR': key.name = 'f3'; key.fn = true; break;\n        case 'OS': key.name = 'f4'; key.fn = true; break;\n\n        /* xterm/rxvt ESC [ number ~ */\n        case '[11~': key.name = 'f1'; key.fn = true; break;\n        case '[12~': key.name = 'f2'; key.fn = true; break;\n        case '[13~': key.name = 'f3'; key.fn = true; break;\n        case '[14~': key.name = 'f4'; key.fn = true; break;\n\n        /* paste bracket mode */\n        case '[200~': key.name = 'paste-start'; break;\n        case '[201~': key.name = 'paste-end'; break;\n\n        /* from Cygwin and used in libuv */\n        case '[[A': key.name = 'f1'; key.fn = true; break;\n        case '[[B': key.name = 'f2'; key.fn = true; break;\n        case '[[C': key.name = 'f3'; key.fn = true; break;\n        case '[[D': key.name = 'f4'; key.fn = true; break;\n        case '[[E': key.name = 'f5'; key.fn = true; break;\n\n        /* common */\n        case '[15~': key.name = 'f5'; key.fn = true; break;\n        case '[17~': key.name = 'f6'; key.fn = true; break;\n        case '[18~': key.name = 'f7'; key.fn = true; break;\n        case '[19~': key.name = 'f8'; key.fn = true; break;\n        case '[20~': key.name = 'f9'; key.fn = true; break;\n        case '[21~': key.name = 'f10'; key.fn = true; break;\n        case '[23~': key.name = 'f11'; key.fn = true; break;\n        case '[24~': key.name = 'f12'; key.fn = true; break;\n\n        /* common */\n        case '[15;10': key.name = 'f5'; key.fn = true; key.shift = true; key.meta = true; break;\n        case '[17;10': key.name = 'f7'; key.fn = true; key.shift = true; key.meta = true; break;\n        case '[18;10': key.name = 'f8'; key.fn = true; key.shift = true; key.meta = true; break;\n        case '[19;10': key.name = 'f9'; key.fn = true; key.shift = true; key.meta = true; break;\n        case '[20;10': key.name = 'f10'; key.fn = true; key.shift = true; key.meta = true; break;\n        case '[21;10': key.name = 'f11'; key.fn = true; key.shift = true; key.meta = true; break;\n        case '[22;10': key.name = 'f12'; key.fn = true; key.shift = true; key.meta = true; break;\n\n        /* xterm ESC [ letter */\n        case '[A': key.name = 'up'; break;\n        case '[B': key.name = 'down'; break;\n        case '[C': key.name = 'right'; break;\n        case '[D': key.name = 'left'; break;\n        case '[E': key.name = 'clear'; break;\n        case '[F': key.name = 'end'; break;\n        case '[H': key.name = 'home'; break;\n\n        /* xterm/gnome ESC O letter */\n        case 'OA': key.name = 'up'; break;\n        case 'OB': key.name = 'down'; break;\n        case 'OC': key.name = 'right'; break;\n        case 'OD': key.name = 'left'; break;\n        case 'OE': key.name = 'clear'; break;\n        case 'OF': key.name = 'end'; break;\n        case 'OH': key.name = 'home'; break;\n\n        /* xterm/rxvt ESC [ number ~ */\n        case '[1~': key.name = 'home'; break;\n        case '[2~': key.name = 'insert'; break;\n        case '[3~':\n          key.name = 'delete';\n          key.shift = !s.includes('3;5~');\n          key.fn = /^\\[3;[256]~$/.test(s.slice(1));\n          break;\n\n        case '[4~': key.name = 'end'; break;\n        case '[5~': key.name = 'pageup'; break;\n        case '[6~': key.name = 'pagedown'; break;\n\n        /* putty */\n        case '[[5~': key.name = 'pageup'; break;\n        case '[[6~': key.name = 'pagedown'; break;\n\n        /* rxvt */\n        case '[7~': key.name = 'home'; break;\n        case '[8~': key.name = 'end'; break;\n\n        /* rxvt keys with modifiers */\n        case '[a': key.name = 'up'; key.shift = true; break;\n        case '[b': key.name = 'down'; key.shift = true; break;\n        case '[c': key.name = 'right'; key.shift = true; break;\n        case '[d': key.name = 'left'; key.shift = true; break;\n        case '[e': key.name = 'clear'; key.shift = true; break;\n\n        case '[2$': key.name = 'insert'; key.shift = true; break;\n        case '[3$': key.name = 'delete'; key.shift = true; break;\n        case '[5$': key.name = 'pageup'; key.shift = true; break;\n        case '[6$': key.name = 'pagedown'; key.shift = true; break;\n        case '[7$': key.name = 'home'; key.shift = true; break;\n        case '[8$': key.name = 'end'; key.shift = true; break;\n\n        case 'Oa': key.name = 'up'; key.ctrl = true; break;\n        case 'Ob': key.name = 'down'; key.ctrl = true; break;\n        case 'Oc': key.name = 'right'; key.ctrl = true; break;\n        case 'Od': key.name = 'left'; key.ctrl = true; break;\n        case 'Oe': key.name = 'clear'; key.ctrl = true; break;\n\n        case '[2^': key.name = 'insert'; key.ctrl = true; break;\n        case '[3^': key.name = 'delete'; key.ctrl = true; break;\n        case '[5^': key.name = 'pageup'; key.ctrl = true; break;\n        case '[6^': key.name = 'pagedown'; key.ctrl = true; break;\n        case '[7^': key.name = 'home'; key.ctrl = true; break;\n        case '[8^': key.name = 'end'; key.ctrl = true; break;\n\n        case '[3;5~':\n          key.name = 'delete';\n          key.ctrl = true;\n          key.fn = true;\n          break;\n\n        case '[1;13':\n        case '[1;14':\n          key.shift = code === '[1;14';\n          key.ctrl = true;\n          key.meta = true;\n\n          if ((ch = yield)) {\n            s += ch;\n\n            switch (ch) {\n              case 'A': key.name = 'up'; break;\n              case 'B': key.name = 'down'; break;\n              case 'C': key.name = 'right'; break;\n              case 'D': key.name = 'left'; break;\n              case 'F': key.name = 'right'; key.fn = true; break;\n              case 'H': key.name = 'left'; key.fn = true; break;\n              default: break;\n            }\n          }\n          break;\n\n        case '[3;10':\n          if ((ch = yield)) {\n            s += ch;\n            key.name = 'delete';\n            key.shift = true;\n            key.meta = true;\n            key.fn = true;\n          }\n          break;\n\n        case '[3;13':\n        case '[3;14':\n          if ((ch = yield)) {\n            s += ch;\n            key.name = 'delete';\n            key.ctrl = true;\n            key.shift = code === '[3;14';\n            key.meta = true;\n            key.fn = true;\n          }\n          break;\n\n        case '[5;14':\n        case '[6;14':\n          if ((ch = yield)) {\n            s += ch;\n            key.name = code === '[5;14' ? 'up' : 'down';\n            key.ctrl = true;\n            key.shift = true;\n            key.meta = true;\n            key.fn = true;\n          }\n          break;\n\n        case '[1;10':\n          if ((ch = yield)) {\n            s += ch;\n          }\n\n          switch (ch) {\n            case 'A': key.name = 'up'; break;\n            case 'B': key.name = 'down'; break;\n            case 'C': key.name = 'right'; break;\n            case 'D': key.name = 'left'; break;\n            case 'F': key.name = 'right'; key.fn = true; break;\n            case 'H': key.name = 'left'; key.fn = true; break;\n            case 'P': key.name = 'f1'; key.fn = true; break;\n            case 'Q': key.name = 'f2'; key.fn = true; break;\n            case 'R': key.name = 'f3'; key.fn = true; break;\n            case 'S': key.name = 'f4'; key.fn = true; break;\n            default: break;\n          }\n\n          key.shift = true;\n          key.meta = true;\n          break;\n\n        case '[5;10':\n        case '[6;10':\n          if ((ch = yield)) {\n            s += ch;\n            key.name = code === '[5;10' ? 'up' : 'down';\n            key.shift = true;\n            key.fn = true;\n          }\n\n          key.meta = true;\n          break;\n\n        /* misc. */\n        case '[Z': key.name = 'tab'; key.shift = true; break;\n        default: key.name = undefined; break;\n      }\n\n    } else if (ch === '\\r') {\n      // carriage return / return\n      key.name = 'return';\n      key.meta = escaped;\n    } else if (ch === '\\n') {\n      // linefeed / newline\n      key.name = 'enter';\n      key.meta = escaped;\n    } else if (ch === '\\t') {\n      // tab\n      key.name = 'tab';\n      key.meta = escaped;\n    } else if (ch === '\\b') {\n      // ctrl+backspace or ctrl+h\n      key.name = 'backspace';\n      key.ctrl = true;\n      key.meta = escaped;\n    } else if (ch === '\\x7f') {\n      // backspace\n      key.name = 'backspace';\n      key.meta = escaped;\n    } else if (ch === kEscape) {\n      // escape key\n      key.name = 'escape';\n      key.meta = escaped;\n    } else if (ch === ' ') {\n      key.name = 'space';\n      key.meta = escaped;\n    } else if (!escaped && ch <= '\\x1a') {\n      // ctrl+letter\n      key.name = String.fromCharCode(ch.charCodeAt(0) + 'a'.charCodeAt(0) - 1);\n      key.ctrl = true;\n    } else if (/^[0-9A-Za-z]$/.exec(ch) !== null) {\n      // Letter, number, shift+letter\n      key.name = ch;\n      key.shift = /^[A-Z]$/.exec(ch) !== null;\n      key.meta = escaped;\n    } else if (escaped) {\n      // Escape sequence timeout\n      key.name = ch.length ? undefined : 'escape';\n      key.meta = false;\n    }\n\n    key.sequence = s;\n\n    if (s.length !== 0 && (key.name !== undefined || escaped)) {\n      /* Named character or sequence */\n      stream.emit('keypress', escaped ? undefined : s, key);\n    } else if (charLengthAt(s, 0) === s.length) {\n      /* Single unnamed character, e.g. \".\" */\n      stream.emit('keypress', s, key);\n    }\n\n    /* Unrecognized or broken escape sequence, don't emit anything */\n  }\n}\n\n// This runs in O(n log n).\nexport function commonPrefix(strings) {\n  if (strings.length === 0) {\n    return '';\n  }\n  if (strings.length === 1) {\n    return strings[0];\n  }\n\n  const sorted = strings.slice().sort();\n  const min = sorted[0];\n  const max = sorted[sorted.length - 1];\n\n  for (let i = 0; i < min.length; i++) {\n    if (min[i] !== max[i]) {\n      return min.slice(0, i);\n    }\n  }\n  return min;\n}\n","/* eslint-disable no-control-regex */\n// Based on code from chjj/blessed\n// Copyright (c) 2013-2015, Christopher Jeffrey and contributors\n\nexport const mousepress = (s: string, buf: Buffer, state = {}) => {\n  let parts;\n  let b;\n  let x;\n  let y;\n  let mod;\n  let params;\n  let down;\n  let page;\n  let button;\n\n  const key = {\n    name: undefined,\n    ctrl: false,\n    meta: false,\n    shift: false\n  };\n\n  if (Buffer.isBuffer(s)) {\n    if (s[0] > 127 && s[1] === undefined) {\n      s[0] -= 128;\n      s = '\\x1b' + s.toString('utf8');\n    } else {\n      s = s.toString('utf8');\n    }\n  }\n\n  // XTerm / X10 for buggy VTE\n  // VTE can only send unsigned chars and no unicode for coords. This limits\n  // them to 0xff. However, normally the x10 protocol does not allow a byte\n  // under 0x20, but since VTE can have the bytes overflow, we can consider\n  // bytes below 0x20 to be up to 0xff + 0x20. This gives a limit of 287. Since\n  // characters ranging from 223 to 248 confuse javascript's utf parser, we\n  // need to parse the raw binary. We can detect whether the terminal is using\n  // a bugged VTE version by examining the coordinates and seeing whether they\n  // are a value they would never otherwise be with a properly implemented x10\n  // protocol. This method of detecting VTE is only 99% reliable because we\n  // can't check if the coords are 0x00 (255) since that is a valid x10 coord\n  // technically.\n  const bx = s.charCodeAt(4);\n  const by = s.charCodeAt(5);\n\n  if (buf[0] === 0x1b && buf[1] === 0x5b && buf[2] === 0x4d && (state.isVTE\n      || bx >= 65533 || by >= 65533\n      || (bx > 0x00 && bx < 0x20)\n      || (by > 0x00 && by < 0x20)\n      || (buf[4] > 223 && buf[4] < 248 && buf.length === 6)\n      || (buf[5] > 223 && buf[5] < 248 && buf.length === 6))) {\n    b = buf[3];\n    x = buf[4];\n    y = buf[5];\n\n    // Handle coordinate, unsigned char overflow\n    if (x < 0x20) x += 0xff;\n    if (y < 0x20) y += 0xff;\n\n    // Handle large terminal windows (coordinates > 255)\n    if (x === 0xff) x = 255;\n    if (y === 0xff) y = 255;\n\n    // Convert the coordinates into a\n    // properly formatted x10 utf8 sequence.\n    s = '\\x1b[M' + String.fromCharCode(b) + String.fromCharCode(x) + String.fromCharCode(y);\n  }\n\n  // XTerm / X10\n  if ((parts = /^\\x1b\\[M([\\x00\\u0020-\\uffff]{3})/.exec(s))) {\n    b = parts[1].charCodeAt(0);\n    x = parts[1].charCodeAt(1);\n    y = parts[1].charCodeAt(2);\n\n    key.name = 'mouse';\n    key.type = 'X10';\n\n    key.raw = [b, x, y, parts[0]];\n    key.buf = buf;\n    key.x = x - 32;\n    key.y = y - 32;\n\n    if (state.zero) {\n      key.x--;\n      key.y--;\n    }\n\n    if (x === 0) key.x = 255;\n    if (y === 0) key.y = 255;\n\n    mod = b >> 2;\n    key.shift = Boolean(mod & 1);\n    key.meta = Boolean((mod >> 1) & 1);\n    key.ctrl = Boolean((mod >> 2) & 1);\n\n    b -= 32;\n\n    if ((b >> 6) & 1) {\n      key.action = b & 1 ? 'wheeldown' : 'wheelup';\n      key.button = 'middle';\n    } else if (b === 3) {\n      // NOTE: x10 and urxvt have no way\n      // of telling which button mouseup used.\n      key.action = 'mouseup';\n      key.button = state._lastButton || 'unknown';\n      delete state._lastButton;\n    } else {\n      key.action = 'mousedown';\n      button = b & 3;\n      key.button = button === 0\n        ? 'left' : button === 1\n          ? 'middle' : button === 2\n            ? 'right' : 'unknown';\n\n      state._lastButton = key.button;\n    }\n\n    // Probably a movement.\n    // The *newer* VTE gets mouse movements comepletely wrong.\n    // This presents a problem: older versions of VTE that get it right might\n    // be confused by the second conditional in the if statement.\n    // NOTE: Possibly just switch back to the if statement below.\n    // none, shift, ctrl, alt\n    // gnome: 32, 36, 48, 40\n    // xterm: 35, _, 51, _\n    // urxvt: 35, _, _, _\n    // if (key.action === 'mousedown' && key.button === 'unknown') {\n    if (b === 35 || b === 39 || b === 51 || b === 43\n        || (state.isVTE && (b === 32 || b === 36 || b === 48 || b === 40))) {\n      delete key.button;\n      key.action = 'mousemove';\n    }\n\n    key.sequence = s;\n    return key;\n  }\n\n  // URxvt\n  if ((parts = /^\\x1b\\[(\\d+;\\d+;\\d+)M/.exec(s))) {\n    params = parts[1].split(';');\n    b = Number(params[0]);\n    x = Number(params[1]);\n    y = Number(params[2]);\n\n    key.name = 'mouse';\n    key.type = 'urxvt';\n\n    key.raw = [b, x, y, parts[0]];\n    key.buf = buf;\n    key.x = x;\n    key.y = y;\n\n    if (state.zero) {\n      key.x--;\n      key.y--;\n    }\n\n    mod = b >> 2;\n    key.shift = Boolean(mod & 1);\n    key.meta = Boolean((mod >> 1) & 1);\n    key.ctrl = Boolean((mod >> 2) & 1);\n\n    // XXX Bug in urxvt after wheelup/down on mousemove\n    // NOTE: This may be different than 128/129 depending\n    // on mod keys.\n    if (b === 128 || b === 129) b = 67;\n    b -= 32;\n\n    if ((b >> 6) & 1) {\n      key.action = b & 1 ? 'wheeldown' : 'wheelup';\n      key.button = 'middle';\n    } else if (b === 3) {\n      // NOTE: x10 and urxvt have no way\n      // of telling which button mouseup used.\n      key.action = 'mouseup';\n      key.button = state._lastButton || 'unknown';\n      delete state._lastButton;\n    } else {\n      key.action = 'mousedown';\n      button = b & 3;\n      key.button = button === 0 ? 'left'\n        : button === 1 ? 'middle'\n          : button === 2 ? 'right'\n            : 'unknown';\n\n      // NOTE: 0/32 = mousemove, 32/64 = mousemove with left down\n      // if ((b >> 1) === 32)\n      state._lastButton = key.button;\n    }\n\n    // Probably a movement.\n    // The *newer* VTE gets mouse movements comepletely wrong.\n    // This presents a problem: older versions of VTE that get it right might\n    // be confused by the second conditional in the if statement.\n    // NOTE: Possibly just switch back to the if statement below.\n    // none, shift, ctrl, alt\n    // urxvt: 35, _, _, _\n    // gnome: 32, 36, 48, 40\n    // if (key.action === 'mousedown' && key.button === 'unknown') {\n    if (b === 35 || b === 39 || b === 51 || b === 43\n        || (state.isVTE && (b === 32 || b === 36 || b === 48 || b === 40))) {\n      delete key.button;\n      key.action = 'mousemove';\n    }\n\n    key.sequence = s;\n    return key;\n  }\n\n  // SGR\n  if ((parts = /^\\x1b\\[<(\\d+;\\d+;\\d+)([mM])/.exec(s))) {\n    down = parts[2] === 'M';\n    params = parts[1].split(';');\n    b = Number(params[0]);\n    x = Number(params[1]);\n    y = Number(params[2]);\n\n    key.name = 'mouse';\n    key.type = 'sgr';\n\n    key.raw = [b, x, y, parts[0]];\n    key.buf = buf;\n    key.x = x;\n    key.y = y;\n\n    if (state.zero) {\n      key.x--;\n      key.y--;\n    }\n\n    mod = b >> 2;\n    key.shift = Boolean(mod & 1);\n    key.meta = Boolean((mod >> 1) & 1);\n    key.ctrl = Boolean((mod >> 2) & 1);\n\n    if ((b >> 6) & 1) {\n      key.action = b & 1 ? 'wheeldown' : 'wheelup';\n      key.button = 'middle';\n    } else {\n      key.action = down ? 'mousedown' : 'mouseup';\n      button = b & 3;\n      key.button = button === 0\n        ? 'left' : button === 1\n          ? 'middle' : button === 2\n            ? 'right' : 'unknown';\n    }\n\n    // Probably a movement.\n    // The *newer* VTE gets mouse movements comepletely wrong.\n    // This presents a problem: older versions of VTE that get it right might\n    // be confused by the second conditional in the if statement.\n    // NOTE: Possibly just switch back to the if statement below.\n    // none, shift, ctrl, alt\n    // xterm: 35, _, 51, _\n    // gnome: 32, 36, 48, 40\n    // if (key.action === 'mousedown' && key.button === 'unknown') {\n    if (b === 35 || b === 39 || b === 51 || b === 43\n      || (state.isVTE && (b === 32 || b === 36 || b === 48 || b === 40))) {\n      delete key.button;\n      key.action = 'mousemove';\n    }\n\n    key.sequence = s;\n    return key;\n  }\n\n  // DEC\n  // The xterm mouse documentation says there is a\n  // `<` prefix, the DECRQLP says there is no prefix.\n  if ((parts = /^\\x1b\\[<(\\d+;\\d+;\\d+;\\d+)&w/.exec(s))) {\n    params = parts[1].split(';');\n    b = Number(params[0]);\n    x = Number(params[1]);\n    y = Number(params[2]);\n    page = Number(params[3]);\n\n    key.name = 'mouse';\n    key.type = 'dec';\n\n    key.raw = [b, x, y, parts[0]];\n    key.buf = buf;\n    key.x = x;\n    key.y = y;\n    key.page = page;\n\n    if (state.zero) {\n      key.x--;\n      key.y--;\n    }\n\n    key.action = b === 3 ? 'mouseup' : 'mousedown';\n    key.button = b === 2\n      ? 'left' : b === 4\n        ? 'middle' : b === 6\n          ? 'right' : 'unknown';\n\n    key.sequence = s;\n    return key;\n  }\n\n  // vt300\n  if ((parts = /^\\x1b\\[24([0135])~\\[(\\d+),(\\d+)\\]\\r/.exec(s))) {\n    b = Number(parts[1]);\n    x = Number(parts[2]);\n    y = Number(parts[3]);\n\n    key.name = 'mouse';\n    key.type = 'vt300';\n\n    key.raw = [b, x, y, parts[0]];\n    key.buf = buf;\n    key.x = x;\n    key.y = y;\n\n    if (state.zero) {\n      key.x--;\n      key.y--;\n    }\n\n    key.action = 'mousedown';\n    key.button = b === 1 ? 'left' : b === 2 ? 'middle' : b === 5 ? 'right' : 'unknown';\n\n    key.sequence = s;\n    return key;\n  }\n\n  if ((parts = /^\\x1b\\[(O|I)/.exec(s))) {\n    key.action = parts[1] === 'I' ? 'focus' : 'blur';\n  }\n\n  // s = key.sequence;\n  // b = s.charCodeAt(3);\n  key.x = s.charCodeAt(4) - 0o040;\n  key.y = s.charCodeAt(5) - 0o040;\n\n  key.scroll = 0;\n\n  key.ctrl = Boolean(1 << 4 & b);\n  key.meta = Boolean(1 << 3 & b);\n  key.shift = Boolean(1 << 2 & b);\n\n  key.release = (3 & b) === 3;\n\n  if (1 << 6 & b) { //scroll\n    key.scroll = 1 & b ? 1 : -1;\n  }\n\n  if (!key.release && !key.scroll) {\n    key.button = b & 3;\n  }\n\n  key.sequence = s;\n  return key;\n};\n","export const keycodes = [\n  { sequence: '\\r', shortcut: 'return' },\n  { sequence: '\\x7F', shortcut: 'backspace' },\n  { sequence: '\\x1B', shortcut: 'escape' },\n  { sequence: '\\x1B[1~', shortcut: 'home' },\n  { sequence: '\\x1B\\x1B[1~', shortcut: 'home' },\n  { sequence: '\\x1B[2~', shortcut: 'insert' },\n  { sequence: '\\x1B[3~', shortcut: 'delete' },\n  { sequence: '\\x1B[4~', shortcut: 'end' },\n  { sequence: '\\x1B[A', shortcut: 'up' },\n  { sequence: '\\x1B[B', shortcut: 'down' },\n  { sequence: '\\x1B[C', shortcut: 'right' },\n  { sequence: '\\x1B[D', shortcut: 'left' },\n\n  // <shift>\n  { sequence: '\\x1B[2;2~', shortcut: 'shift+insert' },\n  { sequence: '\\x1B[5;2~', shortcut: 'shift+pageup' },\n  { sequence: '\\x1B[6;2~', shortcut: 'shift+pagedown' },\n  { sequence: '\\x1B[1;2A', shortcut: 'shift+up' },\n  { sequence: '\\x1B[1;2B', shortcut: 'shift+down' },\n  { sequence: '\\x1B[1;2C', shortcut: 'shift+right' },\n  { sequence: '\\x1B[1;2D', shortcut: 'shift+left' },\n  { sequence: '\\x1B[Z', shortcut: 'shift+tab' },\n\n  // <meta>\n  { sequence: '\\x1Bf', shortcut: 'meta+right' },\n  { sequence: '\\x1Bb', shortcut: 'meta+left' },\n  { sequence: '\\x1B[1;9A', shortcut: 'meta+up' },\n  { sequence: '\\x1B[1;9B', shortcut: 'meta+down' },\n  { sequence: '\\x1B[1;9C', shortcut: 'cmd+meta+right' },\n  { sequence: '\\x1B[1;9D', shortcut: 'cmd+meta+left' },\n  { sequence: '\\x1B[2;3~', shortcut: 'meta+insert' },\n  { sequence: '\\x1B[3;3~', shortcut: 'meta+delete' },\n  { sequence: '\\x1B[5;3~', shortcut: 'meta+pageup' },\n  { sequence: '\\x1B[6;3~', shortcut: 'meta+pagedown' },\n  { sequence: '\\x1B\\x7F', shortcut: 'meta+backspace' },\n\n  // <shift+meta>\n  { sequence: '\\x1B[1;10A', shortcut: 'shift+meta+up' },\n  { sequence: '\\x1B[1;10B', shortcut: 'shift+meta+down' },\n  { sequence: '\\x1B[1;10C', shortcut: 'shift+meta+right' },\n  { sequence: '\\x1B[1;10D', shortcut: 'shift+meta+left' },\n  { sequence: '\\x1B[2;4~', shortcut: 'shift+meta+insert' },\n  { sequence: '\\x1B[3;4~', shortcut: 'shift+meta+delete' },\n  { sequence: '\\x1B[5;4~', shortcut: 'shift+meta+pageup' },\n  { sequence: '\\x1B[6;4~', shortcut: 'shift+meta+pagedown' },\n\n  // <ctrl>\n  { sequence: '\\x00', shortcut: 'ctrl+`' },\n  { sequence: '\\x0c', shortcut: 'ctrl+4' },\n  // { sequence: '\\x0d', shortcut: 'ctrl+5' },\n  { sequence: '\\x0e', shortcut: 'ctrl+6' },\n  { sequence: '\\x0f', shortcut: 'ctrl+7' },\n  { sequence: '\\x01', shortcut: 'ctrl+a' },\n  { sequence: '\\x02', shortcut: 'ctrl+b' },\n  { sequence: '\\x03', shortcut: 'ctrl+c' },\n  { sequence: '\\x04', shortcut: 'ctrl+d' },\n  { sequence: '\\x05', shortcut: 'ctrl+e' },\n  { sequence: '\\x06', shortcut: 'ctrl+f' },\n  { sequence: '\\x07', shortcut: 'ctrl+g' },\n  // { sequence: '\\b', shortcut: 'ctrl+h' },\n  { sequence: '\\t', shortcut: 'ctrl+i' },\n  { sequence: '\\n', shortcut: 'ctrl+j', command: 'enter' },\n  { sequence: '\\x0B', shortcut: 'ctrl+k' },\n  { sequence: '\\f', shortcut: 'ctrl+l' },\n  { sequence: '\\x0E', shortcut: 'ctrl+n' },\n  { sequence: '\\x0F', shortcut: 'ctrl+o' },\n  { sequence: '\\x10', shortcut: 'ctrl+p' },\n  { sequence: '\\x11', shortcut: 'ctrl+q' },\n  { sequence: '\\x12', shortcut: 'ctrl+r' },\n  { sequence: '\\x13', shortcut: 'ctrl+s' },\n  { sequence: '\\x14', shortcut: 'ctrl+t' },\n  { sequence: '\\x15', shortcut: 'ctrl+u' },\n  { sequence: '\\x16', shortcut: 'ctrl+v' },\n  { sequence: '\\x17', shortcut: 'ctrl+w' },\n  { sequence: '\\x18', shortcut: 'ctrl+x' },\n  { sequence: '\\x19', shortcut: 'ctrl+y' },\n  { sequence: '\\x1A', shortcut: 'ctrl+z' },\n  { sequence: '\\x1F', shortcut: 'ctrl+-' },\n  { sequence: '\\x1C', shortcut: 'ctrl+|' },\n  { sequence: '\\x1D', shortcut: 'ctrl+]' },\n  { sequence: '\\x1B[1;5A', shortcut: 'ctrl+up', weight: -1 },\n  { sequence: '\\x1B[1;5B', shortcut: 'ctrl+down', weight: -1 },\n  { sequence: '\\x1B[1;5C', shortcut: 'ctrl+right', weight: -1 },\n  { sequence: '\\x1B[1;5D', shortcut: 'ctrl+left', weight: -1 },\n  { sequence: '\\x1B[2;5~', shortcut: 'ctrl+insert', weight: -1 },\n  { sequence: '\\x1B[5;5~', shortcut: 'ctrl+pageup', weight: -1 },\n  { sequence: '\\x1B[6;5~', shortcut: 'ctrl+pagedown', weight: -1 },\n\n  // <ctrl+shift>\n  { sequence: '\\x1B[1;6B', shortcut: 'ctrl+shift+down' },\n  { sequence: '\\x1B[1;6D', shortcut: 'ctrl+shift+left' },\n  { sequence: '\\x1B[1;6C', shortcut: 'ctrl+shift+right' },\n  { sequence: '\\x1B[1;6A', shortcut: 'ctrl+shift+up' },\n\n  // <ctrl+shift+meta>\n  { sequence: '\\x1B[1;14B', shortcut: 'ctrl+shift+meta+down' },\n  { sequence: '\\x1B[1;14D', shortcut: 'ctrl+shift+meta+left' },\n  { sequence: '\\x1B[1;14C', shortcut: 'ctrl+shift+meta+right' },\n\n  // <fn>\n  { sequence: '\\x1B[H', shortcut: 'fn+left', name: 'home' },\n  { sequence: '\\x1B[F', shortcut: 'fn+right', name: 'end' },\n  { sequence: '\\x1B[5~', shortcut: 'fn+up', name: 'pageup' },\n  { sequence: '\\x1B[6~', shortcut: 'fn+down', name: 'pagedown' },\n\n  // <fn+ctrl>\n  { sequence: '\\x1B[1;5F', shortcut: 'fn+ctrl+right' },\n  { sequence: '\\x1B[1;5H', shortcut: 'fn+ctrl+left' },\n  { sequence: '\\x1B[3;5~', shortcut: 'fn+ctrl+delete' },\n\n  // <fn+shift>\n  { sequence: '\\x1B[1;2H', shortcut: 'fn+shift+right', name: 'shift+home' },\n  { sequence: '\\x1B[1;2F', shortcut: 'fn+shift+left', name: 'shift+end' },\n  { sequence: '\\x1B[3;2~', shortcut: 'fn+shift+delete' },\n\n  // <fn+meta>\n  { sequence: '\\x1B[1;9F', shortcut: 'fn+meta+right' },\n  { sequence: '\\x1B[1;9H', shortcut: 'fn+meta+left' },\n  { sequence: '\\x1B[5;9~', shortcut: 'fn+meta+up' },\n  { sequence: '\\x1B[6;9~', shortcut: 'fn+meta+down' },\n  { sequence: '\\x1B\\x1B[5~', shortcut: 'fn+meta+up' },\n  { sequence: '\\x1B\\x1B[6~', shortcut: 'fn+meta+down' },\n  { sequence: '\\x1Bd', shortcut: 'fn+meta+delete', fn: true },\n\n  // <fn+ctrl+shift>\n  { sequence: '\\x1B[1;6F', shortcut: 'fn+ctrl+shift+right' },\n  { sequence: '\\x1B[1;6H', shortcut: 'fn+ctrl+shift+left' },\n  { sequence: '\\x1B[3;6~', shortcut: 'fn+ctrl+shift+delete' },\n  { sequence: '\\x1B[5;6~', shortcut: 'fn+ctrl+shift+up' },\n  { sequence: '\\x1B[6;6~', shortcut: 'fn+ctrl+shift+down' },\n\n  // <fn+ctrl+meta>\n  { sequence: '\\x1B[1;13F', shortcut: 'fn+ctrl+meta+right' },\n  { sequence: '\\x1B[1;13H', shortcut: 'fn+ctrl+meta+left' },\n  { sequence: '\\x1B[3;13~', shortcut: 'fn+ctrl+meta+delete' },\n\n  // <fn+shift+meta>\n  { sequence: '\\x1B[1;10F', shortcut: 'fn+shift+meta+right' },\n  { sequence: '\\x1B[1;10H', shortcut: 'fn+shift+meta+left' },\n  { sequence: '\\x1B[3;10~', shortcut: 'fn+shift+meta+delete' },\n  { sequence: '\\x1B[5;10~', shortcut: 'fn+shift+meta+up' },\n  { sequence: '\\x1B[6;10~', shortcut: 'fn+shift+meta+down' },\n\n  // <fn+ctrl+shift+meta>\n  { sequence: '\\x1B[1;14F', shortcut: 'fn+ctrl+shift+meta+right' },\n  { sequence: '\\x1B[1;14H', shortcut: 'fn+ctrl+shift+meta+left' },\n  { sequence: '\\x1B[3;14~', shortcut: 'fn+ctrl+shift+meta+delete' },\n  { sequence: '\\x1B[5;14~', shortcut: 'fn+ctrl+shift+meta+up' },\n  { sequence: '\\x1B[6;14~', shortcut: 'fn+ctrl+shift+meta+down' },\n\n  // <f1-f4>\n  { sequence: '\\x1BOP', shortcut: 'f1' },\n  { sequence: '\\x1BOQ', shortcut: 'f2' },\n  { sequence: '\\x1BOR', shortcut: 'f3' },\n  { sequence: '\\x1BOS', shortcut: 'f4' },\n\n  // <f1-f20>\n  { sequence: '\\x1B[11~', shortcut: 'f1' },\n  { sequence: '\\x1B[12~', shortcut: 'f2' },\n  { sequence: '\\x1B[13~', shortcut: 'f3' },\n  { sequence: '\\x1B[14~', shortcut: 'f4' },\n  { sequence: '\\x1B[15~', shortcut: 'f5' },\n  { sequence: '\\x1B[17~', shortcut: 'f6' },\n  { sequence: '\\x1B[18~', shortcut: 'f7' },\n  { sequence: '\\x1B[19~', shortcut: 'f8' },\n  { sequence: '\\x1B[20~', shortcut: 'f9' },\n  { sequence: '\\x1B[21~', shortcut: 'f10' },\n  { sequence: '\\x1B[23~', shortcut: 'f11' },\n  { sequence: '\\x1B[24~', shortcut: 'f12' },\n  { sequence: '\\x1B[25~', shortcut: 'f13' },\n  { sequence: '\\x1B[26~', shortcut: 'f14' },\n  { sequence: '\\x1B[28~', shortcut: 'f15' },\n  { sequence: '\\x1B[29~', shortcut: 'f16' },\n  { sequence: '\\x1B[31~', shortcut: 'f17' },\n  { sequence: '\\x1B[32~', shortcut: 'f18' },\n  { sequence: '\\x1B[33~', shortcut: 'f19' },\n  { sequence: '\\x1B[34~', shortcut: 'f20' },\n\n  // <shift+f1-f12>\n  { sequence: '\\x1B[1;2P', shortcut: 'shift+f1' },\n  { sequence: '\\x1B[1;2Q', shortcut: 'shift+f2' },\n  { sequence: '\\x1B[1;2R', shortcut: 'shift+f3' },\n  { sequence: '\\x1B[1;2S', shortcut: 'shift+f4' },\n  { sequence: '\\x1B[15;2~', shortcut: 'shift+f5' },\n  { sequence: '\\x1B[17;2~', shortcut: 'shift+f6' },\n  { sequence: '\\x1B[18;2~', shortcut: 'shift+f7' },\n  { sequence: '\\x1B[19;2~', shortcut: 'shift+f8' },\n  { sequence: '\\x1B[20;2~', shortcut: 'shift+f9' },\n  { sequence: '\\x1B[21;2~', shortcut: 'shift+f10' },\n  { sequence: '\\x1B[23;2~', shortcut: 'shift+f11' },\n  { sequence: '\\x1B[24;2~', shortcut: 'shift+f12' },\n\n  // <num_key>\n  { sequence: '\\x1BOp', shortcut: 'num_key_0' },\n  { sequence: '\\x1BOq', shortcut: 'num_key_1' },\n  { sequence: '\\x1BOr', shortcut: 'num_key_2' },\n  { sequence: '\\x1BOs', shortcut: 'num_key_3' },\n  { sequence: '\\x1BOt', shortcut: 'num_key_4' },\n  { sequence: '\\x1BOu', shortcut: 'num_key_5' },\n  { sequence: '\\x1BOv', shortcut: 'num_key_6' },\n  { sequence: '\\x1BOw', shortcut: 'num_key_7' },\n  { sequence: '\\x1BOx', shortcut: 'num_key_8' },\n  { sequence: '\\x1BOy', shortcut: 'num_key_9' },\n  { sequence: '\\x1BOl', shortcut: 'num_key_comma' },\n  { sequence: '\\x1BOm', shortcut: 'num_key_minus' },\n  { sequence: '\\x1BOn', shortcut: 'num_key_period' }\n];\n\nexport const protocols = {\n  kitty: [\n    // Enter variants\n    { shortcut: 'enter', sequence: '\\x1b[13u' },\n    { shortcut: 'shift+enter', sequence: '\\x1b[13;2u' },\n    { shortcut: 'alt+enter', sequence: '\\x1b[13;3u' },\n    { shortcut: 'shift+alt+enter', sequence: '\\x1b[13;4u' },\n    { shortcut: 'ctrl+enter', sequence: '\\x1b[13;5u' },\n    { shortcut: 'shift+ctrl+enter', sequence: '\\x1b[13;6u' },\n    { shortcut: 'ctrl+alt+enter', sequence: '\\x1b[13;7u' },\n    { shortcut: 'shift+ctrl+alt+enter', sequence: '\\x1b[13;8u' },\n\n    // Tab variants\n    { shortcut: 'tab', sequence: '\\x1b[9u' },\n    { shortcut: 'shift+tab', sequence: '\\x1b[9;2u' },\n    { shortcut: 'alt+tab', sequence: '\\x1b[9;3u' },\n    { shortcut: 'ctrl+tab', sequence: '\\x1b[9;5u' },\n    { shortcut: 'shift+ctrl+tab', sequence: '\\x1b[9;6u' },\n\n    // Backspace variants\n    { shortcut: 'backspace', sequence: '\\x1b[127u' },\n    { shortcut: 'shift+backspace', sequence: '\\x1b[127;2u' },\n    { shortcut: 'alt+backspace', sequence: '\\x1b[127;3u' },\n    { shortcut: 'ctrl+backspace', sequence: '\\x1b[127;5u' },\n    { shortcut: 'shift+ctrl+backspace', sequence: '\\x1b[127;6u' },\n\n    // Escape variants\n    { shortcut: 'escape', sequence: '\\x1b[27u' },\n    { shortcut: 'shift+escape', sequence: '\\x1b[27;2u' },\n    { shortcut: 'alt+escape', sequence: '\\x1b[27;3u' },\n    { shortcut: 'ctrl+escape', sequence: '\\x1b[27;5u' },\n\n    // Space variants\n    { shortcut: 'space', sequence: '\\x1b[32u' },\n    { shortcut: 'shift+space', sequence: '\\x1b[32;2u' },\n    { shortcut: 'alt+space', sequence: '\\x1b[32;3u' },\n    { shortcut: 'ctrl+space', sequence: '\\x1b[32;5u' },\n    { shortcut: 'shift+ctrl+space', sequence: '\\x1b[32;6u' },\n\n    // Arrow keys\n    { shortcut: 'up', sequence: '\\x1b[A' },\n    { shortcut: 'shift+up', sequence: '\\x1b[1;2A' },\n    { shortcut: 'alt+up', sequence: '\\x1b[1;3A' },\n    { shortcut: 'shift+alt+up', sequence: '\\x1b[1;4A' },\n    { shortcut: 'ctrl+up', sequence: '\\x1b[1;5A' },\n    { shortcut: 'shift+ctrl+up', sequence: '\\x1b[1;6A' },\n    { shortcut: 'ctrl+alt+up', sequence: '\\x1b[1;7A' },\n    { shortcut: 'shift+ctrl+alt+up', sequence: '\\x1b[1;8A' },\n\n    { shortcut: 'down', sequence: '\\x1b[B' },\n    { shortcut: 'shift+down', sequence: '\\x1b[1;2B' },\n    { shortcut: 'alt+down', sequence: '\\x1b[1;3B' },\n    { shortcut: 'shift+alt+down', sequence: '\\x1b[1;4B' },\n    { shortcut: 'ctrl+down', sequence: '\\x1b[1;5B' },\n    { shortcut: 'shift+ctrl+down', sequence: '\\x1b[1;6B' },\n    { shortcut: 'ctrl+alt+down', sequence: '\\x1b[1;7B' },\n    { shortcut: 'shift+ctrl+alt+down', sequence: '\\x1b[1;8B' },\n\n    { shortcut: 'right', sequence: '\\x1b[C' },\n    { shortcut: 'shift+right', sequence: '\\x1b[1;2C' },\n    { shortcut: 'alt+right', sequence: '\\x1b[1;3C' },\n    { shortcut: 'shift+alt+right', sequence: '\\x1b[1;4C' },\n    { shortcut: 'ctrl+right', sequence: '\\x1b[1;5C' },\n    { shortcut: 'shift+ctrl+right', sequence: '\\x1b[1;6C' },\n    { shortcut: 'ctrl+alt+right', sequence: '\\x1b[1;7C' },\n    { shortcut: 'shift+ctrl+alt+right', sequence: '\\x1b[1;8C' },\n\n    { shortcut: 'left', sequence: '\\x1b[D' },\n    { shortcut: 'shift+left', sequence: '\\x1b[1;2D' },\n    { shortcut: 'alt+left', sequence: '\\x1b[1;3D' },\n    { shortcut: 'shift+alt+left', sequence: '\\x1b[1;4D' },\n    { shortcut: 'ctrl+left', sequence: '\\x1b[1;5D' },\n    { shortcut: 'shift+ctrl+left', sequence: '\\x1b[1;6D' },\n    { shortcut: 'ctrl+alt+left', sequence: '\\x1b[1;7D' },\n    { shortcut: 'shift+ctrl+alt+left', sequence: '\\x1b[1;8D' },\n\n    // Home/End\n    { shortcut: 'home', sequence: '\\x1b[H' },\n    { shortcut: 'shift+home', sequence: '\\x1b[1;2H' },\n    { shortcut: 'alt+home', sequence: '\\x1b[1;3H' },\n    { shortcut: 'ctrl+home', sequence: '\\x1b[1;5H' },\n    { shortcut: 'shift+ctrl+home', sequence: '\\x1b[1;6H' },\n\n    { shortcut: 'end', sequence: '\\x1b[F' },\n    { shortcut: 'shift+end', sequence: '\\x1b[1;2F' },\n    { shortcut: 'alt+end', sequence: '\\x1b[1;3F' },\n    { shortcut: 'ctrl+end', sequence: '\\x1b[1;5F' },\n    { shortcut: 'shift+ctrl+end', sequence: '\\x1b[1;6F' },\n\n    // Insert/Delete\n    { shortcut: 'insert', sequence: '\\x1b[2~' },\n    { shortcut: 'shift+insert', sequence: '\\x1b[2;2~' },\n    { shortcut: 'alt+insert', sequence: '\\x1b[2;3~' },\n    { shortcut: 'ctrl+insert', sequence: '\\x1b[2;5~' },\n\n    { shortcut: 'delete', sequence: '\\x1b[3~' },\n    { shortcut: 'shift+delete', sequence: '\\x1b[3;2~' },\n    { shortcut: 'alt+delete', sequence: '\\x1b[3;3~' },\n    { shortcut: 'ctrl+delete', sequence: '\\x1b[3;5~' },\n    { shortcut: 'shift+ctrl+delete', sequence: '\\x1b[3;6~' },\n\n    // Page Up/Down\n    { shortcut: 'pageup', sequence: '\\x1b[5~' },\n    { shortcut: 'shift+pageup', sequence: '\\x1b[5;2~' },\n    { shortcut: 'alt+pageup', sequence: '\\x1b[5;3~' },\n    { shortcut: 'ctrl+pageup', sequence: '\\x1b[5;5~' },\n\n    { shortcut: 'pagedown', sequence: '\\x1b[6~' },\n    { shortcut: 'shift+pagedown', sequence: '\\x1b[6;2~' },\n    { shortcut: 'alt+pagedown', sequence: '\\x1b[6;3~' },\n    { shortcut: 'ctrl+pagedown', sequence: '\\x1b[6;5~' },\n\n    // Function keys F1-F12\n    { shortcut: 'f1', sequence: '\\x1b[11~' },\n    { shortcut: 'shift+f1', sequence: '\\x1b[11;2~' },\n    { shortcut: 'alt+f1', sequence: '\\x1b[11;3~' },\n    { shortcut: 'ctrl+f1', sequence: '\\x1b[11;5~' },\n\n    { shortcut: 'f2', sequence: '\\x1b[12~' },\n    { shortcut: 'shift+f2', sequence: '\\x1b[12;2~' },\n    { shortcut: 'alt+f2', sequence: '\\x1b[12;3~' },\n    { shortcut: 'ctrl+f2', sequence: '\\x1b[12;5~' },\n\n    { shortcut: 'f3', sequence: '\\x1b[13~' },\n    { shortcut: 'shift+f3', sequence: '\\x1b[13;2~' },\n    { shortcut: 'alt+f3', sequence: '\\x1b[13;3~' },\n    { shortcut: 'ctrl+f3', sequence: '\\x1b[13;5~' },\n\n    { shortcut: 'f4', sequence: '\\x1b[14~' },\n    { shortcut: 'shift+f4', sequence: '\\x1b[14;2~' },\n    { shortcut: 'alt+f4', sequence: '\\x1b[14;3~' },\n    { shortcut: 'ctrl+f4', sequence: '\\x1b[14;5~' },\n\n    { shortcut: 'f5', sequence: '\\x1b[15~' },\n    { shortcut: 'shift+f5', sequence: '\\x1b[15;2~' },\n    { shortcut: 'alt+f5', sequence: '\\x1b[15;3~' },\n    { shortcut: 'ctrl+f5', sequence: '\\x1b[15;5~' },\n\n    { shortcut: 'f6', sequence: '\\x1b[17~' },\n    { shortcut: 'shift+f6', sequence: '\\x1b[17;2~' },\n    { shortcut: 'alt+f6', sequence: '\\x1b[17;3~' },\n    { shortcut: 'ctrl+f6', sequence: '\\x1b[17;5~' },\n\n    { shortcut: 'f7', sequence: '\\x1b[18~' },\n    { shortcut: 'shift+f7', sequence: '\\x1b[18;2~' },\n    { shortcut: 'alt+f7', sequence: '\\x1b[18;3~' },\n    { shortcut: 'ctrl+f7', sequence: '\\x1b[18;5~' },\n\n    { shortcut: 'f8', sequence: '\\x1b[19~' },\n    { shortcut: 'shift+f8', sequence: '\\x1b[19;2~' },\n    { shortcut: 'alt+f8', sequence: '\\x1b[19;3~' },\n    { shortcut: 'ctrl+f8', sequence: '\\x1b[19;5~' },\n\n    { shortcut: 'f9', sequence: '\\x1b[20~' },\n    { shortcut: 'shift+f9', sequence: '\\x1b[20;2~' },\n    { shortcut: 'alt+f9', sequence: '\\x1b[20;3~' },\n    { shortcut: 'ctrl+f9', sequence: '\\x1b[20;5~' },\n\n    { shortcut: 'f10', sequence: '\\x1b[21~' },\n    { shortcut: 'shift+f10', sequence: '\\x1b[21;2~' },\n    { shortcut: 'alt+f10', sequence: '\\x1b[21;3~' },\n    { shortcut: 'ctrl+f10', sequence: '\\x1b[21;5~' },\n\n    { shortcut: 'f11', sequence: '\\x1b[23~' },\n    { shortcut: 'shift+f11', sequence: '\\x1b[23;2~' },\n    { shortcut: 'alt+f11', sequence: '\\x1b[23;3~' },\n    { shortcut: 'ctrl+f11', sequence: '\\x1b[23;5~' },\n\n    { shortcut: 'f12', sequence: '\\x1b[24~' },\n    { shortcut: 'shift+f12', sequence: '\\x1b[24;2~' },\n    { shortcut: 'alt+f12', sequence: '\\x1b[24;3~' },\n    { shortcut: 'ctrl+f12', sequence: '\\x1b[24;5~' },\n\n    // Kitty-specific: letters with modifiers (using CSI u format)\n    // Pattern: \\x1b[<codepoint>;<modifier>u\n    // Modifier bits: 1=shift, 2=alt, 4=ctrl, 8=super\n    // Examples for common letter shortcuts:\n    { shortcut: 'ctrl+a', sequence: '\\x1b[97;5u' },\n    { shortcut: 'ctrl+b', sequence: '\\x1b[98;5u' },\n    { shortcut: 'ctrl+c', sequence: '\\x1b[99;5u' },\n    { shortcut: 'ctrl+d', sequence: '\\x1b[100;5u' },\n    { shortcut: 'ctrl+e', sequence: '\\x1b[101;5u' },\n    { shortcut: 'ctrl+f', sequence: '\\x1b[102;5u' },\n    { shortcut: 'ctrl+g', sequence: '\\x1b[103;5u' },\n    { shortcut: 'ctrl+h', sequence: '\\x1b[104;5u' },\n    { shortcut: 'ctrl+i', sequence: '\\x1b[105;5u' },\n    { shortcut: 'ctrl+j', sequence: '\\x1b[106;5u' },\n    { shortcut: 'ctrl+k', sequence: '\\x1b[107;5u' },\n    { shortcut: 'ctrl+l', sequence: '\\x1b[108;5u' },\n    { shortcut: 'ctrl+m', sequence: '\\x1b[109;5u' },\n    { shortcut: 'ctrl+n', sequence: '\\x1b[110;5u' },\n    { shortcut: 'ctrl+o', sequence: '\\x1b[111;5u' },\n    { shortcut: 'ctrl+p', sequence: '\\x1b[112;5u' },\n    { shortcut: 'ctrl+q', sequence: '\\x1b[113;5u' },\n    { shortcut: 'ctrl+r', sequence: '\\x1b[114;5u' },\n    { shortcut: 'ctrl+s', sequence: '\\x1b[115;5u' },\n    { shortcut: 'ctrl+t', sequence: '\\x1b[116;5u' },\n    { shortcut: 'ctrl+u', sequence: '\\x1b[117;5u' },\n    { shortcut: 'ctrl+v', sequence: '\\x1b[118;5u' },\n    { shortcut: 'ctrl+w', sequence: '\\x1b[119;5u' },\n    { shortcut: 'ctrl+x', sequence: '\\x1b[120;5u' },\n    { shortcut: 'ctrl+y', sequence: '\\x1b[121;5u' },\n    { shortcut: 'ctrl+z', sequence: '\\x1b[122;5u' },\n\n    { shortcut: 'shift+ctrl+a', sequence: '\\x1b[97;6u' },\n    { shortcut: 'shift+ctrl+b', sequence: '\\x1b[98;6u' },\n    { shortcut: 'shift+ctrl+c', sequence: '\\x1b[99;6u' },\n    { shortcut: 'shift+ctrl+d', sequence: '\\x1b[100;6u' },\n    { shortcut: 'shift+ctrl+e', sequence: '\\x1b[101;6u' },\n    { shortcut: 'shift+ctrl+f', sequence: '\\x1b[102;6u' },\n    { shortcut: 'shift+ctrl+g', sequence: '\\x1b[103;6u' },\n    { shortcut: 'shift+ctrl+h', sequence: '\\x1b[104;6u' },\n    { shortcut: 'shift+ctrl+i', sequence: '\\x1b[105;6u' },\n    { shortcut: 'shift+ctrl+j', sequence: '\\x1b[106;6u' },\n    { shortcut: 'shift+ctrl+k', sequence: '\\x1b[107;6u' },\n    { shortcut: 'shift+ctrl+l', sequence: '\\x1b[108;6u' },\n    { shortcut: 'shift+ctrl+m', sequence: '\\x1b[109;6u' },\n    { shortcut: 'shift+ctrl+n', sequence: '\\x1b[110;6u' },\n    { shortcut: 'shift+ctrl+o', sequence: '\\x1b[111;6u' },\n    { shortcut: 'shift+ctrl+p', sequence: '\\x1b[112;6u' },\n    { shortcut: 'shift+ctrl+q', sequence: '\\x1b[113;6u' },\n    { shortcut: 'shift+ctrl+r', sequence: '\\x1b[114;6u' },\n    { shortcut: 'shift+ctrl+s', sequence: '\\x1b[115;6u' },\n    { shortcut: 'shift+ctrl+t', sequence: '\\x1b[116;6u' },\n    { shortcut: 'shift+ctrl+u', sequence: '\\x1b[117;6u' },\n    { shortcut: 'shift+ctrl+v', sequence: '\\x1b[118;6u' },\n    { shortcut: 'shift+ctrl+w', sequence: '\\x1b[119;6u' },\n    { shortcut: 'shift+ctrl+x', sequence: '\\x1b[120;6u' },\n    { shortcut: 'shift+ctrl+y', sequence: '\\x1b[121;6u' },\n    { shortcut: 'shift+ctrl+z', sequence: '\\x1b[122;6u' },\n\n    { shortcut: 'alt+a', sequence: '\\x1b[97;3u' },\n    { shortcut: 'alt+b', sequence: '\\x1b[98;3u' },\n    { shortcut: 'alt+c', sequence: '\\x1b[99;3u' },\n    { shortcut: 'alt+d', sequence: '\\x1b[100;3u' },\n    { shortcut: 'alt+e', sequence: '\\x1b[101;3u' },\n    { shortcut: 'alt+f', sequence: '\\x1b[102;3u' },\n    { shortcut: 'alt+g', sequence: '\\x1b[103;3u' },\n    { shortcut: 'alt+h', sequence: '\\x1b[104;3u' },\n    { shortcut: 'alt+i', sequence: '\\x1b[105;3u' },\n    { shortcut: 'alt+j', sequence: '\\x1b[106;3u' },\n    { shortcut: 'alt+k', sequence: '\\x1b[107;3u' },\n    { shortcut: 'alt+l', sequence: '\\x1b[108;3u' },\n    { shortcut: 'alt+m', sequence: '\\x1b[109;3u' },\n    { shortcut: 'alt+n', sequence: '\\x1b[110;3u' },\n    { shortcut: 'alt+o', sequence: '\\x1b[111;3u' },\n    { shortcut: 'alt+p', sequence: '\\x1b[112;3u' },\n    { shortcut: 'alt+q', sequence: '\\x1b[113;3u' },\n    { shortcut: 'alt+r', sequence: '\\x1b[114;3u' },\n    { shortcut: 'alt+s', sequence: '\\x1b[115;3u' },\n    { shortcut: 'alt+t', sequence: '\\x1b[116;3u' },\n    { shortcut: 'alt+u', sequence: '\\x1b[117;3u' },\n    { shortcut: 'alt+v', sequence: '\\x1b[118;3u' },\n    { shortcut: 'alt+w', sequence: '\\x1b[119;3u' },\n    { shortcut: 'alt+x', sequence: '\\x1b[120;3u' },\n    { shortcut: 'alt+y', sequence: '\\x1b[121;3u' },\n    { shortcut: 'alt+z', sequence: '\\x1b[122;3u' },\n\n    { shortcut: 'ctrl+alt+a', sequence: '\\x1b[97;7u' },\n    { shortcut: 'ctrl+alt+b', sequence: '\\x1b[98;7u' },\n    { shortcut: 'ctrl+alt+c', sequence: '\\x1b[99;7u' },\n    { shortcut: 'ctrl+alt+d', sequence: '\\x1b[100;7u' },\n    { shortcut: 'ctrl+alt+e', sequence: '\\x1b[101;7u' },\n    { shortcut: 'ctrl+alt+f', sequence: '\\x1b[102;7u' },\n    { shortcut: 'ctrl+alt+g', sequence: '\\x1b[103;7u' },\n    { shortcut: 'ctrl+alt+h', sequence: '\\x1b[104;7u' },\n    { shortcut: 'ctrl+alt+i', sequence: '\\x1b[105;7u' },\n    { shortcut: 'ctrl+alt+j', sequence: '\\x1b[106;7u' },\n    { shortcut: 'ctrl+alt+k', sequence: '\\x1b[107;7u' },\n    { shortcut: 'ctrl+alt+l', sequence: '\\x1b[108;7u' },\n    { shortcut: 'ctrl+alt+m', sequence: '\\x1b[109;7u' },\n    { shortcut: 'ctrl+alt+n', sequence: '\\x1b[110;7u' },\n    { shortcut: 'ctrl+alt+o', sequence: '\\x1b[111;7u' },\n    { shortcut: 'ctrl+alt+p', sequence: '\\x1b[112;7u' },\n    { shortcut: 'ctrl+alt+q', sequence: '\\x1b[113;7u' },\n    { shortcut: 'ctrl+alt+r', sequence: '\\x1b[114;7u' },\n    { shortcut: 'ctrl+alt+s', sequence: '\\x1b[115;7u' },\n    { shortcut: 'ctrl+alt+t', sequence: '\\x1b[116;7u' },\n    { shortcut: 'ctrl+alt+u', sequence: '\\x1b[117;7u' },\n    { shortcut: 'ctrl+alt+v', sequence: '\\x1b[118;7u' },\n    { shortcut: 'ctrl+alt+w', sequence: '\\x1b[119;7u' },\n    { shortcut: 'ctrl+alt+x', sequence: '\\x1b[120;7u' },\n    { shortcut: 'ctrl+alt+y', sequence: '\\x1b[121;7u' },\n    { shortcut: 'ctrl+alt+z', sequence: '\\x1b[122;7u' },\n\n    // Numbers with modifiers\n    { shortcut: 'ctrl+0', sequence: '\\x1b[48;5u' },\n    { shortcut: 'ctrl+1', sequence: '\\x1b[49;5u' },\n    { shortcut: 'ctrl+2', sequence: '\\x1b[50;5u' },\n    { shortcut: 'ctrl+3', sequence: '\\x1b[51;5u' },\n    { shortcut: 'ctrl+4', sequence: '\\x1b[52;5u' },\n    { shortcut: 'ctrl+5', sequence: '\\x1b[53;5u' },\n    { shortcut: 'ctrl+6', sequence: '\\x1b[54;5u' },\n    { shortcut: 'ctrl+7', sequence: '\\x1b[55;5u' },\n    { shortcut: 'ctrl+8', sequence: '\\x1b[56;5u' },\n    { shortcut: 'ctrl+9', sequence: '\\x1b[57;5u' },\n\n    { shortcut: 'alt+0', sequence: '\\x1b[48;3u' },\n    { shortcut: 'alt+1', sequence: '\\x1b[49;3u' },\n    { shortcut: 'alt+2', sequence: '\\x1b[50;3u' },\n    { shortcut: 'alt+3', sequence: '\\x1b[51;3u' },\n    { shortcut: 'alt+4', sequence: '\\x1b[52;3u' },\n    { shortcut: 'alt+5', sequence: '\\x1b[53;3u' },\n    { shortcut: 'alt+6', sequence: '\\x1b[54;3u' },\n    { shortcut: 'alt+7', sequence: '\\x1b[55;3u' },\n    { shortcut: 'alt+8', sequence: '\\x1b[56;3u' },\n    { shortcut: 'alt+9', sequence: '\\x1b[57;3u' },\n\n    // Common punctuation with modifiers\n    { shortcut: 'ctrl+/', sequence: '\\x1b[47;5u' },\n    { shortcut: 'ctrl+\\\\', sequence: '\\x1b[92;5u' },\n    { shortcut: 'ctrl+[', sequence: '\\x1b[91;5u' },\n    { shortcut: 'ctrl+]', sequence: '\\x1b[93;5u' },\n    { shortcut: 'ctrl+-', sequence: '\\x1b[45;5u' },\n    { shortcut: 'ctrl+=', sequence: '\\x1b[61;5u' },\n    { shortcut: 'ctrl+`', sequence: '\\x1b[96;5u' },\n    { shortcut: 'ctrl+;', sequence: '\\x1b[59;5u' },\n    { shortcut: \"ctrl+'\", sequence: '\\x1b[39;5u' },\n    { shortcut: 'ctrl+,', sequence: '\\x1b[44;5u' },\n    { shortcut: 'ctrl+.', sequence: '\\x1b[46;5u' },\n\n    { shortcut: 'alt+/', sequence: '\\x1b[47;3u' },\n    { shortcut: 'alt+\\\\', sequence: '\\x1b[92;3u' },\n    { shortcut: 'alt+[', sequence: '\\x1b[91;3u' },\n    { shortcut: 'alt+]', sequence: '\\x1b[93;3u' },\n    { shortcut: 'alt+-', sequence: '\\x1b[45;3u' },\n    { shortcut: 'alt+=', sequence: '\\x1b[61;3u' },\n    { shortcut: 'alt+`', sequence: '\\x1b[96;3u' },\n    { shortcut: 'alt+;', sequence: '\\x1b[59;3u' },\n    { shortcut: \"alt+'\", sequence: '\\x1b[39;3u' },\n    { shortcut: 'alt+,', sequence: '\\x1b[44;3u' },\n    { shortcut: 'alt+.', sequence: '\\x1b[46;3u' }\n  ]\n};\n","import { kEscape } from '~/keypress';\n\nexport interface KeyboardProtocol {\n  name: 'kitty' | 'mok';\n  enable: string;\n  disable: string;\n}\n\nexport const KITTY_PROTOCOL: KeyboardProtocol = {\n  name: 'kitty',\n  enable: `${kEscape}[>1u`,\n  disable: `${kEscape}[<u`\n};\n\nexport const MOK_PROTOCOL: KeyboardProtocol = {\n  name: 'mok',\n  enable: `${kEscape}[>4;1m`,\n  disable: `${kEscape}[>4;0m`\n};\n\nconst KITTY_PROTOCOL_TERMINALS = new Set([\n  'kitty',\n  'alacritty',\n  'foot',\n  'ghostty',\n  'iterm',\n  'rio',\n  'wezterm'\n]);\n\nconst MOK_TERMINALS = new Set([\n  'windows_terminal',\n  'xterm',\n  'gnome_terminal',\n  'konsole',\n  'vscode',\n  'xfce4_terminal',\n  'mate_terminal',\n  'terminator'\n]);\n\n/**\n * Get the best keyboard protocol for a given terminal.\n * Returns null for terminals/multiplexers that don't support enhanced key reporting,\n * or where support is unreliable (tmux, screen).\n */\n\nexport const getKeyboardProtocol = (terminal: string): KeyboardProtocol | null => {\n  if (KITTY_PROTOCOL_TERMINALS.has(terminal)) return KITTY_PROTOCOL;\n  if (MOK_TERMINALS.has(terminal)) return MOK_PROTOCOL;\n  return null;\n};\n\nexport const resetKeyboardProtocol = (output: NodeJS.WriteStream): void => {\n  output.write(KITTY_PROTOCOL.disable);\n  output.write(MOK_PROTOCOL.disable);\n};\n\n/**\n * Enable enhanced keyboard protocol for the given terminal.\n * Returns a cleanup function to disable the protocol.\n */\n\nexport const enableKeyboardProtocol = (\n  terminal: string,\n  output: NodeJS.WriteStream\n): (() => void) | null => {\n  const protocol = getKeyboardProtocol(terminal);\n  if (!protocol) return null;\n\n  output.write(protocol.enable);\n\n  return () => {\n    output.write(protocol.disable);\n  };\n};\n","/* eslint-disable no-control-regex */\nimport type readline from 'node:readline';\nexport const PRINTABLE_CHAR_REGEX = /^(?!.*[\\uFEFF])[\\p{L}\\p{N}\\p{P}\\p{S}\\p{Z}\\p{M}\\u200D\\s]+$/u;\nexport const NON_PRINTABLE_CHAR_REGEX = /[\\p{Cc}\\p{Cf}\\u2028\\u2029]/u;\n\nexport const metaKeys = new Set(['alt', 'meta', 'option']);\nexport const modifierKeys = new Set(['fn', 'ctrl', 'shift', ...[...metaKeys], 'cmd']);\nexport const sortOrder = [\n  'sequence',\n  'name',\n  'shortcut',\n  'command',\n  'ctrl',\n  'shift',\n  'alt',\n  'option',\n  'meta',\n  'fn',\n  'printable',\n  'pasted',\n  'weight'\n];\n\nexport const isBuiltIn = k => !k.weight || k.weight <= 0;\n\n// Based on isMouse from chjj/blessed\n// Copyright (c) 2013-2015, Christopher Jeffrey and contributors\nexport function isMousepress(input, key) {\n  if (key?.code && (key.code === '[M' || key.code === '[I' || key.code === '[O')) {\n    return true;\n  }\n\n  if (typeof input !== 'string') {\n    return false;\n  }\n\n  return /\\x1b\\[M/.test(input)\n    || /\\x1b\\[M([\\x00\\u0020-\\uffff]{3})/.test(input)\n    || /\\x1b\\[(\\d+;\\d+;\\d+)M/.test(input)\n    || /\\x1b\\[<(\\d+;\\d+;\\d+)([mM])/.test(input)\n    || /\\x1b\\[<(\\d+;\\d+;\\d+;\\d+)&w/.test(input)\n    || /\\x1b\\[24([0135])~\\[(\\d+),(\\d+)\\]\\r/.test(input)\n    || /\\x1b\\[(O|I)/.test(input);\n}\n\nexport const parsePosition = input => {\n  if (!input) return null;\n\n  const match = /^\\x1B\\[([0-9]+);([0-9]+)R/.exec(String(input));\n\n  if (match) {\n    return {\n      name: 'position',\n      position: { y: match[1], x: match[2] },\n      printable: false\n    };\n  }\n\n  return null;\n};\n\nexport const sortKeys = (obj, keys = sortOrder) => {\n  const ordered = {};\n\n  for (const key of keys) {\n    if (obj[key] !== undefined) {\n      ordered[key] = obj[key];\n    }\n  }\n\n  for (const [k, v] of Object.entries(obj)) {\n    if (!(k in ordered)) {\n      ordered[k] = v;\n    }\n  }\n\n  return ordered;\n};\n\nconst normalizeModifier = (key: string) => {\n  if (key === 'cmd') return 'meta';\n  if (key === 'option') return 'alt';\n  if (key === 'control') return 'ctrl';\n  if (key === 'command') return 'cmd';\n  return key;\n};\n\nexport const sortModifiers = (names: string[]): string[] => {\n  const normalized = names.map(name => normalizeModifier(name.toLowerCase()));\n  const modifiers = [];\n  const after = [];\n\n  for (const name of modifierKeys) {\n    if (normalized.includes(name)) {\n      modifiers.push(name);\n    }\n  }\n\n  for (const name of normalized) {\n    if (!modifiers.includes(name)) {\n      after.push(name);\n    }\n  }\n\n  return modifiers.concat(after);\n};\n\nexport const createShortcut = (key: readline.Key): string => {\n  const modifiers = new Set();\n\n  if (key.fn) modifiers.add('fn');\n  if (key.shift) modifiers.add('shift');\n  if (key.alt || key.option || key.meta) modifiers.add('meta');\n  if (key.ctrl || key.control) modifiers.add('ctrl');\n  if (key.cmd || key.command) modifiers.add('cmd');\n\n  let keyName = isPrintableCharacter(key.sequence) ? key.sequence : key.name;\n  if (keyName === 'undefined') keyName = '';\n\n  if (keyName === 'end' || keyName === 'home') {\n    modifiers.delete('fn');\n  }\n\n  const output = modifiers.size > 0 && keyName\n    ? `${sortModifiers([...modifiers]).join('+')}+${keyName}`\n    : keyName;\n\n  return output.length > 1 ? output : '';\n};\n\nexport const sortShortcutModifier = shortcut => {\n  return sortModifiers(shortcut.split('+')).join('+');\n};\n\nexport const sortShortcutModifiers = (keymap = []) => {\n  for (const key of keymap) {\n    key.shortcut = sortShortcutModifier(key.shortcut);\n  }\n\n  return keymap;\n};\n\nexport const prioritizeKeymap = (keymap: unknown = []) => {\n  const omit = keymap\n    .filter(k => k.shortcut?.startsWith('-'))\n    .map(k => sortShortcutModifier(k.shortcut.slice(1)));\n\n  const bindings = sortShortcutModifiers(keymap)\n    .filter(k => !isBuiltIn(k) || !omit.includes(k.shortcut));\n\n  bindings.sort((a, b) => {\n    a.weight ||= 0;\n    b.weight ||= 0;\n    return a.weight === b.weight ? 0 : b.weight > a.weight ? 1 : -1;\n  });\n\n  return bindings.filter(b => b.weight !== -1);\n};\n\n// Unicode ranges for general printable characters including emojis\nexport const isPrintableCharacter = s => {\n  return s ? PRINTABLE_CHAR_REGEX.test(s) && !NON_PRINTABLE_CHAR_REGEX.test(s) : false;\n};\n"],"mappings":"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","names":["nodeExecFileSync","__name","supportsTrueColor","__name","colorVariant","supportsTrueColor","__name","__name","nodeExecFileSync","__name","stdout","clearTimeout","setTimeout","kEscape","clearTimeout","setTimeout","stdout","emitKeypress","input"]}